UNPKG

autemaliquam

Version:

A simple, maximally extensible, dependency minimized framework for building modern Ethereum dApps

14 lines 1.32 MB
(window["webpackJsonp_N_E"] = window["webpackJsonp_N_E"] || []).push([[7],{

/***/ "./node_modules/@portis/web3/umd/index.js":
/*!************************************************!*\
  !*** ./node_modules/@portis/web3/umd/index.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("!function(e,t){ true?module.exports=t():undefined}(this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=278)}([function(e,t){\"function\"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}}},function(e,t,r){\"use strict\";(function(e){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <http://feross.org>\n * @license  MIT\n */\nvar n=r(115),i=r(116),o=r(117);function a(){return f.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(a()<t)throw new RangeError(\"Invalid typed array length\");return f.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=f.prototype:(null===e&&(e=new f(t)),e.length=t),e}function f(e,t,r){if(!(f.TYPED_ARRAY_SUPPORT||this instanceof f))return new f(e,t,r);if(\"number\"==typeof e){if(\"string\"==typeof t)throw new Error(\"If encoding is specified then the first argument must be a string\");return h(this,e)}return u(this,e,t,r)}function u(e,t,r,n){if(\"number\"==typeof t)throw new TypeError('\"value\" argument must not be a number');return\"undefined\"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,r,n){if(t.byteLength,r<0||t.byteLength<r)throw new RangeError(\"'offset' is out of bounds\");if(t.byteLength<r+(n||0))throw new RangeError(\"'length' is out of bounds\");t=void 0===r&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,r):new Uint8Array(t,r,n);f.TYPED_ARRAY_SUPPORT?(e=t).__proto__=f.prototype:e=d(e,t);return e}(e,t,r,n):\"string\"==typeof t?function(e,t,r){\"string\"==typeof r&&\"\"!==r||(r=\"utf8\");if(!f.isEncoding(r))throw new TypeError('\"encoding\" must be a valid string encoding');var n=0|p(t,r),i=(e=s(e,n)).write(t,r);i!==n&&(e=e.slice(0,i));return e}(e,t,r):function(e,t){if(f.isBuffer(t)){var r=0|l(t.length);return 0===(e=s(e,r)).length||t.copy(e,0,0,r),e}if(t){if(\"undefined\"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||\"length\"in t)return\"number\"!=typeof t.length||(n=t.length)!=n?s(e,0):d(e,t);if(\"Buffer\"===t.type&&o(t.data))return d(e,t.data)}var n;throw new TypeError(\"First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.\")}(e,t)}function c(e){if(\"number\"!=typeof e)throw new TypeError('\"size\" argument must be a number');if(e<0)throw new RangeError('\"size\" argument must not be negative')}function h(e,t){if(c(t),e=s(e,t<0?0:0|l(t)),!f.TYPED_ARRAY_SUPPORT)for(var r=0;r<t;++r)e[r]=0;return e}function d(e,t){var r=t.length<0?0:0|l(t.length);e=s(e,r);for(var n=0;n<r;n+=1)e[n]=255&t[n];return e}function l(e){if(e>=a())throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+a().toString(16)+\" bytes\");return 0|e}function p(e,t){if(f.isBuffer(e))return e.length;if(\"undefined\"!=typeof ArrayBuffer&&\"function\"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;\"string\"!=typeof e&&(e=\"\"+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":case void 0:return z(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*r;case\"hex\":return r>>>1;case\"base64\":return q(e).length;default:if(n)return z(e).length;t=(\"\"+t).toLowerCase(),n=!0}}function b(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return\"\";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return\"\";if((r>>>=0)<=(t>>>=0))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return I(this,t,r);case\"utf8\":case\"utf-8\":return k(this,t,r);case\"ascii\":return M(this,t,r);case\"latin1\":case\"binary\":return T(this,t,r);case\"base64\":return x(this,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return R(this,t,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}function y(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function g(e,t,r,n,i){if(0===e.length)return-1;if(\"string\"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if(\"string\"==typeof t&&(t=f.from(t,n)),f.isBuffer(t))return 0===t.length?-1:v(e,t,r,n,i);if(\"number\"==typeof t)return t&=255,f.TYPED_ARRAY_SUPPORT&&\"function\"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):v(e,[t],r,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function v(e,t,r,n,i){var o,a=1,s=e.length,f=t.length;if(void 0!==n&&(\"ucs2\"===(n=String(n).toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(e.length<2||t.length<2)return-1;a=2,s/=2,f/=2,r/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(i){var c=-1;for(o=r;o<s;o++)if(u(e,o)===u(t,-1===c?0:o-c)){if(-1===c&&(c=o),o-c+1===f)return c*a}else-1!==c&&(o-=o-c),c=-1}else for(r+f>s&&(r=s-f),o=r;o>=0;o--){for(var h=!0,d=0;d<f;d++)if(u(e,o+d)!==u(t,d)){h=!1;break}if(h)return o}return-1}function m(e,t,r,n){r=Number(r)||0;var i=e.length-r;n?(n=Number(n))>i&&(n=i):n=i;var o=t.length;if(o%2!=0)throw new TypeError(\"Invalid hex string\");n>o/2&&(n=o/2);for(var a=0;a<n;++a){var s=parseInt(t.substr(2*a,2),16);if(isNaN(s))return a;e[r+a]=s}return a}function w(e,t,r,n){return F(z(t,e.length-r),e,r,n)}function _(e,t,r,n){return F(function(e){for(var t=[],r=0;r<e.length;++r)t.push(255&e.charCodeAt(r));return t}(t),e,r,n)}function E(e,t,r,n){return _(e,t,r,n)}function S(e,t,r,n){return F(q(t),e,r,n)}function A(e,t,r,n){return F(function(e,t){for(var r,n,i,o=[],a=0;a<e.length&&!((t-=2)<0);++a)r=e.charCodeAt(a),n=r>>8,i=r%256,o.push(i),o.push(n);return o}(t,e.length-r),e,r,n)}function x(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function k(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i<r;){var o,a,s,f,u=e[i],c=null,h=u>239?4:u>223?3:u>191?2:1;if(i+h<=r)switch(h){case 1:u<128&&(c=u);break;case 2:128==(192&(o=e[i+1]))&&(f=(31&u)<<6|63&o)>127&&(c=f);break;case 3:o=e[i+1],a=e[i+2],128==(192&o)&&128==(192&a)&&(f=(15&u)<<12|(63&o)<<6|63&a)>2047&&(f<55296||f>57343)&&(c=f);break;case 4:o=e[i+1],a=e[i+2],s=e[i+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&(f=(15&u)<<18|(63&o)<<12|(63&a)<<6|63&s)>65535&&f<1114112&&(c=f)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),i+=h}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var r=\"\",n=0;for(;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=4096));return r}(n)}t.Buffer=f,t.SlowBuffer=function(e){+e!=e&&(e=0);return f.alloc(+e)},t.INSPECT_MAX_BYTES=50,f.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&\"function\"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(e){return!1}}(),t.kMaxLength=a(),f.poolSize=8192,f._augment=function(e){return e.__proto__=f.prototype,e},f.from=function(e,t,r){return u(null,e,t,r)},f.TYPED_ARRAY_SUPPORT&&(f.prototype.__proto__=Uint8Array.prototype,f.__proto__=Uint8Array,\"undefined\"!=typeof Symbol&&Symbol.species&&f[Symbol.species]===f&&Object.defineProperty(f,Symbol.species,{value:null,configurable:!0})),f.alloc=function(e,t,r){return function(e,t,r,n){return c(t),t<=0?s(e,t):void 0!==r?\"string\"==typeof n?s(e,t).fill(r,n):s(e,t).fill(r):s(e,t)}(null,e,t,r)},f.allocUnsafe=function(e){return h(null,e)},f.allocUnsafeSlow=function(e){return h(null,e)},f.isBuffer=function(e){return!(null==e||!e._isBuffer)},f.compare=function(e,t){if(!f.isBuffer(e)||!f.isBuffer(t))throw new TypeError(\"Arguments must be Buffers\");if(e===t)return 0;for(var r=e.length,n=t.length,i=0,o=Math.min(r,n);i<o;++i)if(e[i]!==t[i]){r=e[i],n=t[i];break}return r<n?-1:n<r?1:0},f.isEncoding=function(e){switch(String(e).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},f.concat=function(e,t){if(!o(e))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===e.length)return f.alloc(0);var r;if(void 0===t)for(t=0,r=0;r<e.length;++r)t+=e[r].length;var n=f.allocUnsafe(t),i=0;for(r=0;r<e.length;++r){var a=e[r];if(!f.isBuffer(a))throw new TypeError('\"list\" argument must be an Array of Buffers');a.copy(n,i),i+=a.length}return n},f.byteLength=p,f.prototype._isBuffer=!0,f.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(var t=0;t<e;t+=2)y(this,t,t+1);return this},f.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(var t=0;t<e;t+=4)y(this,t,t+3),y(this,t+1,t+2);return this},f.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(var t=0;t<e;t+=8)y(this,t,t+7),y(this,t+1,t+6),y(this,t+2,t+5),y(this,t+3,t+4);return this},f.prototype.toString=function(){var e=0|this.length;return 0===e?\"\":0===arguments.length?k(this,0,e):b.apply(this,arguments)},f.prototype.equals=function(e){if(!f.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e||0===f.compare(this,e)},f.prototype.inspect=function(){var e=\"\",r=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString(\"hex\",0,r).match(/.{2}/g).join(\" \"),this.length>r&&(e+=\" ... \")),\"<Buffer \"+e+\">\"},f.prototype.compare=function(e,t,r,n,i){if(!f.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError(\"out of range index\");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0),s=Math.min(o,a),u=this.slice(n,i),c=e.slice(t,r),h=0;h<s;++h)if(u[h]!==c[h]){o=u[h],a=c[h];break}return o<a?-1:a<o?1:0},f.prototype.includes=function(e,t,r){return-1!==this.indexOf(e,t,r)},f.prototype.indexOf=function(e,t,r){return g(this,e,t,r,!0)},f.prototype.lastIndexOf=function(e,t,r){return g(this,e,t,r,!1)},f.prototype.write=function(e,t,r,n){if(void 0===t)n=\"utf8\",r=this.length,t=0;else if(void 0===r&&\"string\"==typeof t)n=t,r=this.length,t=0;else{if(!isFinite(t))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");t|=0,isFinite(r)?(r|=0,void 0===n&&(n=\"utf8\")):(n=r,r=void 0)}var i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");for(var o=!1;;)switch(n){case\"hex\":return m(this,e,t,r);case\"utf8\":case\"utf-8\":return w(this,e,t,r);case\"ascii\":return _(this,e,t,r);case\"latin1\":case\"binary\":return E(this,e,t,r);case\"base64\":return S(this,e,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return A(this,e,t,r);default:if(o)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),o=!0}},f.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function M(e,t,r){var n=\"\";r=Math.min(e.length,r);for(var i=t;i<r;++i)n+=String.fromCharCode(127&e[i]);return n}function T(e,t,r){var n=\"\";r=Math.min(e.length,r);for(var i=t;i<r;++i)n+=String.fromCharCode(e[i]);return n}function I(e,t,r){var n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);for(var i=\"\",o=t;o<r;++o)i+=U(e[o]);return i}function R(e,t,r){for(var n=e.slice(t,r),i=\"\",o=0;o<n.length;o+=2)i+=String.fromCharCode(n[o]+256*n[o+1]);return i}function P(e,t,r){if(e%1!=0||e<0)throw new RangeError(\"offset is not uint\");if(e+t>r)throw new RangeError(\"Trying to access beyond buffer length\")}function L(e,t,r,n,i,o){if(!f.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>i||t<o)throw new RangeError('\"value\" argument is out of bounds');if(r+n>e.length)throw new RangeError(\"Index out of range\")}function B(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-r,2);i<o;++i)e[r+i]=(t&255<<8*(n?i:1-i))>>>8*(n?i:1-i)}function C(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-r,4);i<o;++i)e[r+i]=t>>>8*(n?i:3-i)&255}function O(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function N(e,t,r,n,o){return o||O(e,0,r,4),i.write(e,t,r,n,23,4),r+4}function j(e,t,r,n,o){return o||O(e,0,r,8),i.write(e,t,r,n,52,8),r+8}f.prototype.slice=function(e,t){var r,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e),f.TYPED_ARRAY_SUPPORT)(r=this.subarray(e,t)).__proto__=f.prototype;else{var i=t-e;r=new f(i,void 0);for(var o=0;o<i;++o)r[o]=this[o+e]}return r},f.prototype.readUIntLE=function(e,t,r){e|=0,t|=0,r||P(e,t,this.length);for(var n=this[e],i=1,o=0;++o<t&&(i*=256);)n+=this[e+o]*i;return n},f.prototype.readUIntBE=function(e,t,r){e|=0,t|=0,r||P(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},f.prototype.readUInt8=function(e,t){return t||P(e,1,this.length),this[e]},f.prototype.readUInt16LE=function(e,t){return t||P(e,2,this.length),this[e]|this[e+1]<<8},f.prototype.readUInt16BE=function(e,t){return t||P(e,2,this.length),this[e]<<8|this[e+1]},f.prototype.readUInt32LE=function(e,t){return t||P(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},f.prototype.readUInt32BE=function(e,t){return t||P(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},f.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||P(e,t,this.length);for(var n=this[e],i=1,o=0;++o<t&&(i*=256);)n+=this[e+o]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*t)),n},f.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||P(e,t,this.length);for(var n=t,i=1,o=this[e+--n];n>0&&(i*=256);)o+=this[e+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},f.prototype.readInt8=function(e,t){return t||P(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},f.prototype.readInt16LE=function(e,t){t||P(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},f.prototype.readInt16BE=function(e,t){t||P(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},f.prototype.readInt32LE=function(e,t){return t||P(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},f.prototype.readInt32BE=function(e,t){return t||P(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},f.prototype.readFloatLE=function(e,t){return t||P(e,4,this.length),i.read(this,e,!0,23,4)},f.prototype.readFloatBE=function(e,t){return t||P(e,4,this.length),i.read(this,e,!1,23,4)},f.prototype.readDoubleLE=function(e,t){return t||P(e,8,this.length),i.read(this,e,!0,52,8)},f.prototype.readDoubleBE=function(e,t){return t||P(e,8,this.length),i.read(this,e,!1,52,8)},f.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t|=0,r|=0,n)||L(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[t]=255&e;++o<r&&(i*=256);)this[t+o]=e/i&255;return t+r},f.prototype.writeUIntBE=function(e,t,r,n){(e=+e,t|=0,r|=0,n)||L(this,e,t,r,Math.pow(2,8*r)-1,0);var i=r-1,o=1;for(this[t+i]=255&e;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+r},f.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||L(this,e,t,1,255,0),f.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},f.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||L(this,e,t,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):B(this,e,t,!0),t+2},f.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||L(this,e,t,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):B(this,e,t,!1),t+2},f.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||L(this,e,t,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):C(this,e,t,!0),t+4},f.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||L(this,e,t,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):C(this,e,t,!1),t+4},f.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);L(this,e,t,r,i-1,-i)}var o=0,a=1,s=0;for(this[t]=255&e;++o<r&&(a*=256);)e<0&&0===s&&0!==this[t+o-1]&&(s=1),this[t+o]=(e/a>>0)-s&255;return t+r},f.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);L(this,e,t,r,i-1,-i)}var o=r-1,a=1,s=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===s&&0!==this[t+o+1]&&(s=1),this[t+o]=(e/a>>0)-s&255;return t+r},f.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||L(this,e,t,1,127,-128),f.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},f.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||L(this,e,t,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):B(this,e,t,!0),t+2},f.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||L(this,e,t,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):B(this,e,t,!1),t+2},f.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||L(this,e,t,4,2147483647,-2147483648),f.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):C(this,e,t,!0),t+4},f.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),f.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):C(this,e,t,!1),t+4},f.prototype.writeFloatLE=function(e,t,r){return N(this,e,t,!0,r)},f.prototype.writeFloatBE=function(e,t,r){return N(this,e,t,!1,r)},f.prototype.writeDoubleLE=function(e,t,r){return j(this,e,t,!0,r)},f.prototype.writeDoubleBE=function(e,t,r){return j(this,e,t,!1,r)},f.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError(\"targetStart out of bounds\");if(r<0||r>=this.length)throw new RangeError(\"sourceStart out of bounds\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),e.length-t<n-r&&(n=e.length-t+r);var i,o=n-r;if(this===e&&r<t&&t<n)for(i=o-1;i>=0;--i)e[i+t]=this[i+r];else if(o<1e3||!f.TYPED_ARRAY_SUPPORT)for(i=0;i<o;++i)e[i+t]=this[i+r];else Uint8Array.prototype.set.call(e,this.subarray(r,r+o),t);return o},f.prototype.fill=function(e,t,r,n){if(\"string\"==typeof e){if(\"string\"==typeof t?(n=t,t=0,r=this.length):\"string\"==typeof r&&(n=r,r=this.length),1===e.length){var i=e.charCodeAt(0);i<256&&(e=i)}if(void 0!==n&&\"string\"!=typeof n)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof n&&!f.isEncoding(n))throw new TypeError(\"Unknown encoding: \"+n)}else\"number\"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<r)throw new RangeError(\"Out of range index\");if(r<=t)return this;var o;if(t>>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),\"number\"==typeof e)for(o=t;o<r;++o)this[o]=e;else{var a=f.isBuffer(e)?e:z(new f(e,n).toString()),s=a.length;for(o=0;o<r-t;++o)this[o+t]=a[o%s]}return this};var D=/[^+\\/0-9A-Za-z-_]/g;function U(e){return e<16?\"0\"+e.toString(16):e.toString(16)}function z(e,t){var r;t=t||1/0;for(var n=e.length,i=null,o=[],a=0;a<n;++a){if((r=e.charCodeAt(a))>55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\"Invalid code point\");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function q(e){return n.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\\s+|\\s+$/g,\"\")}(e).replace(D,\"\")).length<2)return\"\";for(;e.length%4!=0;)e+=\"=\";return e}(e))}function F(e,t,r,n){for(var i=0;i<n&&!(i+r>=t.length||i>=e.length);++i)t[i+r]=e[i];return i}}).call(this,r(5))},function(e,t,r){\n/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nvar n=r(1),i=n.Buffer;function o(e,t){for(var r in e)t[r]=e[r]}function a(e,t,r){return i(e,t,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?e.exports=n:(o(n,t),t.Buffer=a),a.prototype=Object.create(i.prototype),o(i,a),a.from=function(e,t,r){if(\"number\"==typeof e)throw new TypeError(\"Argument must not be a number\");return i(e,t,r)},a.alloc=function(e,t,r){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");var n=i(e);return void 0!==t?\"string\"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},a.allocUnsafe=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return i(e)},a.allocUnsafeSlow=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return n.SlowBuffer(e)}},function(e,t){var r,n,i=e.exports={};function o(){throw new Error(\"setTimeout has not been defined\")}function a(){throw new Error(\"clearTimeout has not been defined\")}function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===o||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r=\"function\"==typeof setTimeout?setTimeout:o}catch(e){r=o}try{n=\"function\"==typeof clearTimeout?clearTimeout:a}catch(e){n=a}}();var f,u=[],c=!1,h=-1;function d(){c&&f&&(c=!1,f.length?u=f.concat(u):h=-1,u.length&&l())}function l(){if(!c){var e=s(d);c=!0;for(var t=u.length;t;){for(f=u,u=[];++h<t;)f&&f[h].run();h=-1,t=u.length}f=null,c=!1,function(e){if(n===clearTimeout)return clearTimeout(e);if((n===a||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(e);try{n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function b(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];u.push(new p(e,t)),1!==u.length||c||s(l)},p.prototype.run=function(){this.fun.apply(null,this.array)},i.title=\"browser\",i.browser=!0,i.env={},i.argv=[],i.version=\"\",i.versions={},i.on=b,i.addListener=b,i.once=b,i.off=b,i.removeListener=b,i.removeAllListeners=b,i.emit=b,i.prependListener=b,i.prependOnceListener=b,i.listeners=function(e){return[]},i.binding=function(e){throw new Error(\"process.binding is not supported\")},i.cwd=function(){return\"/\"},i.chdir=function(e){throw new Error(\"process.chdir is not supported\")},i.umask=function(){return 0}},function(e,t,r){(function(e){!function(e,t){\"use strict\";function n(e,t){if(!e)throw new Error(t||\"Assertion failed\")}function i(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function o(e,t,r){if(o.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&(\"le\"!==t&&\"be\"!==t||(r=t,t=10),this._init(e||0,t||10,r||\"be\"))}var a;\"object\"==typeof e?e.exports=o:t.BN=o,o.BN=o,o.wordSize=26;try{a=r(153).Buffer}catch(e){}function s(e,t,r){for(var n=0,i=Math.min(e.length,r),o=t;o<i;o++){var a=e.charCodeAt(o)-48;n<<=4,n|=a>=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return n}function f(e,t,r,n){for(var i=0,o=Math.min(e.length,r),a=t;a<o;a++){var s=e.charCodeAt(a)-48;i*=n,i+=s>=49?s-49+10:s>=17?s-17+10:s}return i}o.isBN=function(e){return e instanceof o||null!==e&&\"object\"==typeof e&&e.constructor.wordSize===o.wordSize&&Array.isArray(e.words)},o.max=function(e,t){return e.cmp(t)>0?e:t},o.min=function(e,t){return e.cmp(t)<0?e:t},o.prototype._init=function(e,t,r){if(\"number\"==typeof e)return this._initNumber(e,t,r);if(\"object\"==typeof e)return this._initArray(e,t,r);\"hex\"===t&&(t=16),n(t===(0|t)&&t>=2&&t<=36);var i=0;\"-\"===(e=e.toString().replace(/\\s+/g,\"\"))[0]&&i++,16===t?this._parseHex(e,i):this._parseBase(e,t,i),\"-\"===e[0]&&(this.negative=1),this.strip(),\"le\"===r&&this._initArray(this.toArray(),t,r)},o.prototype._initNumber=function(e,t,r){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(n(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),\"le\"===r&&this._initArray(this.toArray(),t,r)},o.prototype._initArray=function(e,t,r){if(n(\"number\"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var o,a,s=0;if(\"be\"===r)for(i=e.length-1,o=0;i>=0;i-=3)a=e[i]|e[i-1]<<8|e[i-2]<<16,this.words[o]|=a<<s&67108863,this.words[o+1]=a>>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);else if(\"le\"===r)for(i=0,o=0;i<e.length;i+=3)a=e[i]|e[i+1]<<8|e[i+2]<<16,this.words[o]|=a<<s&67108863,this.words[o+1]=a>>>26-s&67108863,(s+=24)>=26&&(s-=26,o++);return this.strip()},o.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var n,i,o=0;for(r=e.length-6,n=0;r>=t;r-=6)i=s(e,r,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=i>>>26-o&4194303,(o+=24)>=26&&(o-=26,n++);r+6!==t&&(i=s(e,t,r+6),this.words[n]|=i<<o&67108863,this.words[n+1]|=i>>>26-o&4194303),this.strip()},o.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=t)n++;n--,i=i/t|0;for(var o=e.length-r,a=o%n,s=Math.min(o,o-a)+r,u=0,c=r;c<s;c+=n)u=f(e,c,c+n,t),this.imuln(i),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==a){var h=1;for(u=f(e,c,e.length,t),c=0;c<a;c++)h*=t;this.imuln(h),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},o.prototype.copy=function(e){e.words=new Array(this.length);for(var t=0;t<this.length;t++)e.words[t]=this.words[t];e.length=this.length,e.negative=this.negative,e.red=this.red},o.prototype.clone=function(){var e=new o(null);return this.copy(e),e},o.prototype._expand=function(e){for(;this.length<e;)this.words[this.length++]=0;return this},o.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?\"<BN-R: \":\"<BN: \")+this.toString(16)+\">\"};var u=[\"\",\"0\",\"00\",\"000\",\"0000\",\"00000\",\"000000\",\"0000000\",\"00000000\",\"000000000\",\"0000000000\",\"00000000000\",\"000000000000\",\"0000000000000\",\"00000000000000\",\"000000000000000\",\"0000000000000000\",\"00000000000000000\",\"000000000000000000\",\"0000000000000000000\",\"00000000000000000000\",\"000000000000000000000\",\"0000000000000000000000\",\"00000000000000000000000\",\"000000000000000000000000\",\"0000000000000000000000000\"],c=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var i=0|e.words[0],o=0|t.words[0],a=i*o,s=67108863&a,f=a/67108864|0;r.words[0]=s;for(var u=1;u<n;u++){for(var c=f>>>26,h=67108863&f,d=Math.min(u,t.length-1),l=Math.max(0,u-e.length+1);l<=d;l++){var p=u-l|0;c+=(a=(i=0|e.words[p])*(o=0|t.words[l])+h)/67108864|0,h=67108863&a}r.words[u]=0|h,f=0|c}return 0!==f?r.words[u]=0|f:r.length--,r.strip()}o.prototype.toString=function(e,t){var r;if(t=0|t||1,16===(e=e||10)||\"hex\"===e){r=\"\";for(var i=0,o=0,a=0;a<this.length;a++){var s=this.words[a],f=(16777215&(s<<i|o)).toString(16);r=0!==(o=s>>>24-i&16777215)||a!==this.length-1?u[6-f.length]+f+r:f+r,(i+=2)>=26&&(i-=26,a--)}for(0!==o&&(r=o.toString(16)+r);r.length%t!=0;)r=\"0\"+r;return 0!==this.negative&&(r=\"-\"+r),r}if(e===(0|e)&&e>=2&&e<=36){var d=c[e],l=h[e];r=\"\";var p=this.clone();for(p.negative=0;!p.isZero();){var b=p.modn(l).toString(e);r=(p=p.idivn(l)).isZero()?b+r:u[d-b.length]+b+r}for(this.isZero()&&(r=\"0\"+r);r.length%t!=0;)r=\"0\"+r;return 0!==this.negative&&(r=\"-\"+r),r}n(!1,\"Base should be between 2 and 36\")},o.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,\"Number can only safely store up to 53 bits\"),0!==this.negative?-e:e},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(e,t){return n(void 0!==a),this.toArrayLike(a,e,t)},o.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},o.prototype.toArrayLike=function(e,t,r){var i=this.byteLength(),o=r||Math.max(1,i);n(i<=o,\"byte array longer than desired length\"),n(o>0,\"Requested array length <= 0\"),this.strip();var a,s,f=\"le\"===t,u=new e(o),c=this.clone();if(f){for(s=0;!c.isZero();s++)a=c.andln(255),c.iushrn(8),u[s]=a;for(;s<o;s++)u[s]=0}else{for(s=0;s<o-i;s++)u[s]=0;for(s=0;!c.isZero();s++)a=c.andln(255),c.iushrn(8),u[o-s-1]=a}return u},Math.clz32?o.prototype._countBits=function(e){return 32-Math.clz32(e)}:o.prototype._countBits=function(e){var t=e,r=0;return t>=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},o.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},o.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;t<this.length;t++){var r=this._zeroBits(this.words[t]);if(e+=r,26!==r)break}return e},o.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},o.prototype.toTwos=function(e){return 0!==this.negative?this.abs().inotn(e).iaddn(1):this.clone()},o.prototype.fromTwos=function(e){return this.testn(e-1)?this.notn(e).iaddn(1).ineg():this.clone()},o.prototype.isNeg=function(){return 0!==this.negative},o.prototype.neg=function(){return this.clone().ineg()},o.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},o.prototype.iuor=function(e){for(;this.length<e.length;)this.words[this.length++]=0;for(var t=0;t<e.length;t++)this.words[t]=this.words[t]|e.words[t];return this.strip()},o.prototype.ior=function(e){return n(0==(this.negative|e.negative)),this.iuor(e)},o.prototype.or=function(e){return this.length>e.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;r<t.length;r++)this.words[r]=this.words[r]&e.words[r];return this.length=t.length,this.strip()},o.prototype.iand=function(e){return n(0==(this.negative|e.negative)),this.iuand(e)},o.prototype.and=function(e){return this.length>e.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;n<r.length;n++)this.words[n]=t.words[n]^r.words[n];if(this!==t)for(;n<t.length;n++)this.words[n]=t.words[n];return this.length=t.length,this.strip()},o.prototype.ixor=function(e){return n(0==(this.negative|e.negative)),this.iuxor(e)},o.prototype.xor=function(e){return this.length>e.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function(e){n(\"number\"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var i=0;i<t;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},o.prototype.notn=function(e){return this.clone().inotn(e)},o.prototype.setn=function(e,t){n(\"number\"==typeof e&&e>=0);var r=e/26|0,i=e%26;return this._expand(r+1),this.words[r]=t?this.words[r]|1<<i:this.words[r]&~(1<<i),this.strip()},o.prototype.iadd=function(e){var t,r,n;if(0!==this.negative&&0===e.negative)return this.negative=0,t=this.isub(e),this.negative^=1,this._normSign();if(0===this.negative&&0!==e.negative)return e.negative=0,t=this.isub(e),e.negative=1,t._normSign();this.length>e.length?(r=this,n=e):(r=e,n=this);for(var i=0,o=0;o<n.length;o++)t=(0|r.words[o])+(0|n.words[o])+i,this.words[o]=67108863&t,i=t>>>26;for(;0!==i&&o<r.length;o++)t=(0|r.words[o])+i,this.words[o]=67108863&t,i=t>>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this},o.prototype.add=function(e){var t;return 0!==e.negative&&0===this.negative?(e.negative=0,t=this.sub(e),e.negative^=1,t):0===e.negative&&0!==this.negative?(this.negative=0,t=e.sub(this),this.negative=1,t):this.length>e.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,n,i=this.cmp(e);if(0===i)return this.negative=0,this.length=1,this.words[0]=0,this;i>0?(r=this,n=e):(r=e,n=this);for(var o=0,a=0;a<n.length;a++)o=(t=(0|r.words[a])-(0|n.words[a])+o)>>26,this.words[a]=67108863&t;for(;0!==o&&a<r.length;a++)o=(t=(0|r.words[a])+o)>>26,this.words[a]=67108863&t;if(0===o&&a<r.length&&r!==this)for(;a<r.length;a++)this.words[a]=r.words[a];return this.length=Math.max(this.length,a),r!==this&&(this.negative=1),this.strip()},o.prototype.sub=function(e){return this.clone().isub(e)};var l=function(e,t,r){var n,i,o,a=e.words,s=t.words,f=r.words,u=0,c=0|a[0],h=8191&c,d=c>>>13,l=0|a[1],p=8191&l,b=l>>>13,y=0|a[2],g=8191&y,v=y>>>13,m=0|a[3],w=8191&m,_=m>>>13,E=0|a[4],S=8191&E,A=E>>>13,x=0|a[5],k=8191&x,M=x>>>13,T=0|a[6],I=8191&T,R=T>>>13,P=0|a[7],L=8191&P,B=P>>>13,C=0|a[8],O=8191&C,N=C>>>13,j=0|a[9],D=8191&j,U=j>>>13,z=0|s[0],q=8191&z,F=z>>>13,K=0|s[1],H=8191&K,V=K>>>13,Y=0|s[2],W=8191&Y,G=Y>>>13,Z=0|s[3],J=8191&Z,$=Z>>>13,X=0|s[4],Q=8191&X,ee=X>>>13,te=0|s[5],re=8191&te,ne=te>>>13,ie=0|s[6],oe=8191&ie,ae=ie>>>13,se=0|s[7],fe=8191&se,ue=se>>>13,ce=0|s[8],he=8191&ce,de=ce>>>13,le=0|s[9],pe=8191&le,be=le>>>13;r.negative=e.negative^t.negative,r.length=19;var ye=(u+(n=Math.imul(h,q))|0)+((8191&(i=(i=Math.imul(h,F))+Math.imul(d,q)|0))<<13)|0;u=((o=Math.imul(d,F))+(i>>>13)|0)+(ye>>>26)|0,ye&=67108863,n=Math.imul(p,q),i=(i=Math.imul(p,F))+Math.imul(b,q)|0,o=Math.imul(b,F);var ge=(u+(n=n+Math.imul(h,H)|0)|0)+((8191&(i=(i=i+Math.imul(h,V)|0)+Math.imul(d,H)|0))<<13)|0;u=((o=o+Math.imul(d,V)|0)+(i>>>13)|0)+(ge>>>26)|0,ge&=67108863,n=Math.imul(g,q),i=(i=Math.imul(g,F))+Math.imul(v,q)|0,o=Math.imul(v,F),n=n+Math.imul(p,H)|0,i=(i=i+Math.imul(p,V)|0)+Math.imul(b,H)|0,o=o+Math.imul(b,V)|0;var ve=(u+(n=n+Math.imul(h,W)|0)|0)+((8191&(i=(i=i+Math.imul(h,G)|0)+Math.imul(d,W)|0))<<13)|0;u=((o=o+Math.imul(d,G)|0)+(i>>>13)|0)+(ve>>>26)|0,ve&=67108863,n=Math.imul(w,q),i=(i=Math.imul(w,F))+Math.imul(_,q)|0,o=Math.imul(_,F),n=n+Math.imul(g,H)|0,i=(i=i+Math.imul(g,V)|0)+Math.imul(v,H)|0,o=o+Math.imul(v,V)|0,n=n+Math.imul(p,W)|0,i=(i=i+Math.imul(p,G)|0)+Math.imul(b,W)|0,o=o+Math.imul(b,G)|0;var me=(u+(n=n+Math.imul(h,J)|0)|0)+((8191&(i=(i=i+Math.imul(h,$)|0)+Math.imul(d,J)|0))<<13)|0;u=((o=o+Math.imul(d,$)|0)+(i>>>13)|0)+(me>>>26)|0,me&=67108863,n=Math.imul(S,q),i=(i=Math.imul(S,F))+Math.imul(A,q)|0,o=Math.imul(A,F),n=n+Math.imul(w,H)|0,i=(i=i+Math.imul(w,V)|0)+Math.imul(_,H)|0,o=o+Math.imul(_,V)|0,n=n+Math.imul(g,W)|0,i=(i=i+Math.imul(g,G)|0)+Math.imul(v,W)|0,o=o+Math.imul(v,G)|0,n=n+Math.imul(p,J)|0,i=(i=i+Math.imul(p,$)|0)+Math.imul(b,J)|0,o=o+Math.imul(b,$)|0;var we=(u+(n=n+Math.imul(h,Q)|0)|0)+((8191&(i=(i=i+Math.imul(h,ee)|0)+Math.imul(d,Q)|0))<<13)|0;u=((o=o+Math.imul(d,ee)|0)+(i>>>13)|0)+(we>>>26)|0,we&=67108863,n=Math.imul(k,q),i=(i=Math.imul(k,F))+Math.imul(M,q)|0,o=Math.imul(M,F),n=n+Math.imul(S,H)|0,i=(i=i+Math.imul(S,V)|0)+Math.imul(A,H)|0,o=o+Math.imul(A,V)|0,n=n+Math.imul(w,W)|0,i=(i=i+Math.imul(w,G)|0)+Math.imul(_,W)|0,o=o+Math.imul(_,G)|0,n=n+Math.imul(g,J)|0,i=(i=i+Math.imul(g,$)|0)+Math.imul(v,J)|0,o=o+Math.imul(v,$)|0,n=n+Math.imul(p,Q)|0,i=(i=i+Math.imul(p,ee)|0)+Math.imul(b,Q)|0,o=o+Math.imul(b,ee)|0;var _e=(u+(n=n+Math.imul(h,re)|0)|0)+((8191&(i=(i=i+Math.imul(h,ne)|0)+Math.imul(d,re)|0))<<13)|0;u=((o=o+Math.imul(d,ne)|0)+(i>>>13)|0)+(_e>>>26)|0,_e&=67108863,n=Math.imul(I,q),i=(i=Math.imul(I,F))+Math.imul(R,q)|0,o=Math.imul(R,F),n=n+Math.imul(k,H)|0,i=(i=i+Math.imul(k,V)|0)+Math.imul(M,H)|0,o=o+Math.imul(M,V)|0,n=n+Math.imul(S,W)|0,i=(i=i+Math.imul(S,G)|0)+Math.imul(A,W)|0,o=o+Math.imul(A,G)|0,n=n+Math.imul(w,J)|0,i=(i=i+Math.imul(w,$)|0)+Math.imul(_,J)|0,o=o+Math.imul(_,$)|0,n=n+Math.imul(g,Q)|0,i=(i=i+Math.imul(g,ee)|0)+Math.imul(v,Q)|0,o=o+Math.imul(v,ee)|0,n=n+Math.imul(p,re)|0,i=(i=i+Math.imul(p,ne)|0)+Math.imul(b,re)|0,o=o+Math.imul(b,ne)|0;var Ee=(u+(n=n+Math.imul(h,oe)|0)|0)+((8191&(i=(i=i+Math.imul(h,ae)|0)+Math.imul(d,oe)|0))<<13)|0;u=((o=o+Math.imul(d,ae)|0)+(i>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,n=Math.imul(L,q),i=(i=Math.imul(L,F))+Math.imul(B,q)|0,o=Math.imul(B,F),n=n+Math.imul(I,H)|0,i=(i=i+Math.imul(I,V)|0)+Math.imul(R,H)|0,o=o+Math.imul(R,V)|0,n=n+Math.imul(k,W)|0,i=(i=i+Math.imul(k,G)|0)+Math.imul(M,W)|0,o=o+Math.imul(M,G)|0,n=n+Math.imul(S,J)|0,i=(i=i+Math.imul(S,$)|0)+Math.imul(A,J)|0,o=o+Math.imul(A,$)|0,n=n+Math.imul(w,Q)|0,i=(i=i+Math.imul(w,ee)|0)+Math.imul(_,Q)|0,o=o+Math.imul(_,ee)|0,n=n+Math.imul(g,re)|0,i=(i=i+Math.imul(g,ne)|0)+Math.imul(v,re)|0,o=o+Math.imul(v,ne)|0,n=n+Math.imul(p,oe)|0,i=(i=i+Math.imul(p,ae)|0)+Math.imul(b,oe)|0,o=o+Math.imul(b,ae)|0;var Se=(u+(n=n+Math.imul(h,fe)|0)|0)+((8191&(i=(i=i+Math.imul(h,ue)|0)+Math.imul(d,fe)|0))<<13)|0;u=((o=o+Math.imul(d,ue)|0)+(i>>>13)|0)+(Se>>>26)|0,Se&=67108863,n=Math.imul(O,q),i=(i=Math.imul(O,F))+Math.imul(N,q)|0,o=Math.imul(N,F),n=n+Math.imul(L,H)|0,i=(i=i+Math.imul(L,V)|0)+Math.imul(B,H)|0,o=o+Math.imul(B,V)|0,n=n+Math.imul(I,W)|0,i=(i=i+Math.imul(I,G)|0)+Math.imul(R,W)|0,o=o+Math.imul(R,G)|0,n=n+Math.imul(k,J)|0,i=(i=i+Math.imul(k,$)|0)+Math.imul(M,J)|0,o=o+Math.imul(M,$)|0,n=n+Math.imul(S,Q)|0,i=(i=i+Math.imul(S,ee)|0)+Math.imul(A,Q)|0,o=o+Math.imul(A,ee)|0,n=n+Math.imul(w,re)|0,i=(i=i+Math.imul(w,ne)|0)+Math.imul(_,re)|0,o=o+Math.imul(_,ne)|0,n=n+Math.imul(g,oe)|0,i=(i=i+Math.imul(g,ae)|0)+Math.imul(v,oe)|0,o=o+Math.imul(v,ae)|0,n=n+Math.imul(p,fe)|0,i=(i=i+Math.imul(p,ue)|0)+Math.imul(b,fe)|0,o=o+Math.imul(b,ue)|0;var Ae=(u+(n=n+Math.imul(h,he)|0)|0)+((8191&(i=(i=i+Math.imul(h,de)|0)+Math.imul(d,he)|0))<<13)|0;u=((o=o+Math.imul(d,de)|0)+(i>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,n=Math.imul(D,q),i=(i=Math.imul(D,F))+Math.imul(U,q)|0,o=Math.imul(U,F),n=n+Math.imul(O,H)|0,i=(i=i+Math.imul(O,V)|0)+Math.imul(N,H)|0,o=o+Math.imul(N,V)|0,n=n+Math.imul(L,W)|0,i=(i=i+Math.imul(L,G)|0)+Math.imul(B,W)|0,o=o+Math.imul(B,G)|0,n=n+Math.imul(I,J)|0,i=(i=i+Math.imul(I,$)|0)+Math.imul(R,J)|0,o=o+Math.imul(R,$)|0,n=n+Math.imul(k,Q)|0,i=(i=i+Math.imul(k,ee)|0)+Math.imul(M,Q)|0,o=o+Math.imul(M,ee)|0,n=n+Math.imul(S,re)|0,i=(i=i+Math.imul(S,ne)|0)+Math.imul(A,re)|0,o=o+Math.imul(A,ne)|0,n=n+Math.imul(w,oe)|0,i=(i=i+Math.imul(w,ae)|0)+Math.imul(_,oe)|0,o=o+Math.imul(_,ae)|0,n=n+Math.imul(g,fe)|0,i=(i=i+Math.imul(g,ue)|0)+Math.imul(v,fe)|0,o=o+Math.imul(v,ue)|0,n=n+Math.imul(p,he)|0,i=(i=i+Math.imul(p,de)|0)+Math.imul(b,he)|0,o=o+Math.imul(b,de)|0;var xe=(u+(n=n+Math.imul(h,pe)|0)|0)+((8191&(i=(i=i+Math.imul(h,be)|0)+Math.imul(d,pe)|0))<<13)|0;u=((o=o+Math.imul(d,be)|0)+(i>>>13)|0)+(xe>>>26)|0,xe&=67108863,n=Math.imul(D,H),i=(i=Math.imul(D,V))+Math.imul(U,H)|0,o=Math.imul(U,V),n=n+Math.imul(O,W)|0,i=(i=i+Math.imul(O,G)|0)+Math.imul(N,W)|0,o=o+Math.imul(N,G)|0,n=n+Math.imul(L,J)|0,i=(i=i+Math.imul(L,$)|0)+Math.imul(B,J)|0,o=o+Math.imul(B,$)|0,n=n+Math.imul(I,Q)|0,i=(i=i+Math.imul(I,ee)|0)+Math.imul(R,Q)|0,o=o+Math.imul(R,ee)|0,n=n+Math.imul(k,re)|0,i=(i=i+Math.imul(k,ne)|0)+Math.imul(M,re)|0,o=o+Math.imul(M,ne)|0,n=n+Math.imul(S,oe)|0,i=(i=i+Math.imul(S,ae)|0)+Math.imul(A,oe)|0,o=o+Math.imul(A,ae)|0,n=n+Math.imul(w,fe)|0,i=(i=i+Math.imul(w,ue)|0)+Math.imul(_,fe)|0,o=o+Math.imul(_,ue)|0,n=n+Math.imul(g,he)|0,i=(i=i+Math.imul(g,de)|0)+Math.imul(v,he)|0,o=o+Math.imul(v,de)|0;var ke=(u+(n=n+Math.imul(p,pe)|0)|0)+((8191&(i=(i=i+Math.imul(p,be)|0)+Math.imul(b,pe)|0))<<13)|0;u=((o=o+Math.imul(b,be)|0)+(i>>>13)|0)+(ke>>>26)|0,ke&=67108863,n=Math.imul(D,W),i=(i=Math.imul(D,G))+Math.imul(U,W)|0,o=Math.imul(U,G),n=n+Math.imul(O,J)|0,i=(i=i+Math.imul(O,$)|0)+Math.imul(N,J)|0,o=o+Math.imul(N,$)|0,n=n+Math.imul(L,Q)|0,i=(i=i+Math.imul(L,ee)|0)+Math.imul(B,Q)|0,o=o+Math.imul(B,ee)|0,n=n+Math.imul(I,re)|0,i=(i=i+Math.imul(I,ne)|0)+Math.imul(R,re)|0,o=o+Math.imul(R,ne)|0,n=n+Math.imul(k,oe)|0,i=(i=i+Math.imul(k,ae)|0)+Math.imul(M,oe)|0,o=o+Math.imul(M,ae)|0,n=n+Math.imul(S,fe)|0,i=(i=i+Math.imul(S,ue)|0)+Math.imul(A,fe)|0,o=o+Math.imul(A,ue)|0,n=n+Math.imul(w,he)|0,i=(i=i+Math.imul(w,de)|0)+Math.imul(_,he)|0,o=o+Math.imul(_,de)|0;var Me=(u+(n=n+Math.imul(g,pe)|0)|0)+((8191&(i=(i=i+Math.imul(g,be)|0)+Math.imul(v,pe)|0))<<13)|0;u=((o=o+Math.imul(v,be)|0)+(i>>>13)|0)+(Me>>>26)|0,Me&=67108863,n=Math.imul(D,J),i=(i=Math.imul(D,$))+Math.imul(U,J)|0,o=Math.imul(U,$),n=n+Math.imul(O,Q)|0,i=(i=i+Math.imul(O,ee)|0)+Math.imul(N,Q)|0,o=o+Math.imul(N,ee)|0,n=n+Math.imul(L,re)|0,i=(i=i+Math.imul(L,ne)|0)+Math.imul(B,re)|0,o=o+Math.imul(B,ne)|0,n=n+Math.imul(I,oe)|0,i=(i=i+Math.imul(I,ae)|0)+Math.imul(R,oe)|0,o=o+Math.imul(R,ae)|0,n=n+Math.imul(k,fe)|0,i=(i=i+Math.imul(k,ue)|0)+Math.imul(M,fe)|0,o=o+Math.imul(M,ue)|0,n=n+Math.imul(S,he)|0,i=(i=i+Math.imul(S,de)|0)+Math.imul(A,he)|0,o=o+Math.imul(A,de)|0;var Te=(u+(n=n+Math.imul(w,pe)|0)|0)+((8191&(i=(i=i+Math.imul(w,be)|0)+Math.imul(_,pe)|0))<<13)|0;u=((o=o+Math.imul(_,be)|0)+(i>>>13)|0)+(Te>>>26)|0,Te&=67108863,n=Math.imul(D,Q),i=(i=Math.imul(D,ee))+Math.imul(U,Q)|0,o=Math.imul(U,ee),n=n+Math.imul(O,re)|0,i=(i=i+Math.imul(O,ne)|0)+Math.imul(N,re)|0,o=o+Math.imul(N,ne)|0,n=n+Math.imul(L,oe)|0,i=(i=i+Math.imul(L,ae)|0)+Math.imul(B,oe)|0,o=o+Math.imul(B,ae)|0,n=n+Math.imul(I,fe)|0,i=(i=i+Math.imul(I,ue)|0)+Math.imul(R,fe)|0,o=o+Math.imul(R,ue)|0,n=n+Math.imul(k,he)|0,i=(i=i+Math.imul(k,de)|0)+Math.imul(M,he)|0,o=o+Math.imul(M,de)|0;var Ie=(u+(n=n+Math.imul(S,pe)|0)|0)+((8191&(i=(i=i+Math.imul(S,be)|0)+Math.imul(A,pe)|0))<<13)|0;u=((o=o+Math.imul(A,be)|0)+(i>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,n=Math.imul(D,re),i=(i=Math.imul(D,ne))+Math.imul(U,re)|0,o=Math.imul(U,ne),n=n+Math.imul(O,oe)|0,i=(i=i+Math.imul(O,ae)|0)+Math.imul(N,oe)|0,o=o+Math.imul(N,ae)|0,n=n+Math.imul(L,fe)|0,i=(i=i+Math.imul(L,ue)|0)+Math.imul(B,fe)|0,o=o+Math.imul(B,ue)|0,n=n+Math.imul(I,he)|0,i=(i=i+Math.imul(I,de)|0)+Math.imul(R,he)|0,o=o+Math.imul(R,de)|0;var Re=(u+(n=n+Math.imul(k,pe)|0)|0)+((8191&(i=(i=i+Math.imul(k,be)|0)+Math.imul(M,pe)|0))<<13)|0;u=((o=o+Math.imul(M,be)|0)+(i>>>13)|0)+(Re>>>26)|0,Re&=67108863,n=Math.imul(D,oe),i=(i=Math.imul(D,ae))+Math.imul(U,oe)|0,o=Math.imul(U,ae),n=n+Math.imul(O,fe)|0,i=(i=i+Math.imul(O,ue)|0)+Math.imul(N,fe)|0,o=o+Math.imul(N,ue)|0,n=n+Math.imul(L,he)|0,i=(i=i+Math.imul(L,de)|0)+Math.imul(B,he)|0,o=o+Math.imul(B,de)|0;var Pe=(u+(n=n+Math.imul(I,pe)|0)|0)+((8191&(i=(i=i+Math.imul(I,be)|0)+Math.imul(R,pe)|0))<<13)|0;u=((o=o+Math.imul(R,be)|0)+(i>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,n=Math.imul(D,fe),i=(i=Math.imul(D,ue))+Math.imul(U,fe)|0,o=Math.imul(U,ue),n=n+Math.imul(O,he)|0,i=(i=i+Math.imul(O,de)|0)+Math.imul(N,he)|0,o=o+Math.imul(N,de)|0;var Le=(u+(n=n+Math.imul(L,pe)|0)|0)+((8191&(i=(i=i+Math.imul(L,be)|0)+Math.imul(B,pe)|0))<<13)|0;u=((o=o+Math.imul(B,be)|0)+(i>>>13)|0)+(Le>>>26)|0,Le&=67108863,n=Math.imul(D,he),i=(i=Math.imul(D,de))+Math.imul(U,he)|0,o=Math.imul(U,de);var Be=(u+(n=n+Math.imul(O,pe)|0)|0)+((8191&(i=(i=i+Math.imul(O,be)|0)+Math.imul(N,pe)|0))<<13)|0;u=((o=o+Math.imul(N,be)|0)+(i>>>13)|0)+(Be>>>26)|0,Be&=67108863;var Ce=(u+(n=Math.imul(D,pe))|0)+((8191&(i=(i=Math.imul(D,be))+Math.imul(U,pe)|0))<<13)|0;return u=((o=Math.imul(U,be))+(i>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,f[0]=ye,f[1]=ge,f[2]=ve,f[3]=me,f[4]=we,f[5]=_e,f[6]=Ee,f[7]=Se,f[8]=Ae,f[9]=xe,f[10]=ke,f[11]=Me,f[12]=Te,f[13]=Ie,f[14]=Re,f[15]=Pe,f[16]=Le,f[17]=Be,f[18]=Ce,0!==u&&(f[19]=u,r.length++),r};function p(e,t,r){return(new b).mulp(e,t,r)}function b(e,t){this.x=e,this.y=t}Math.imul||(l=d),o.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?l(this,e,t):r<63?d(this,e,t):r<1024?function(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,i=0,o=0;o<r.length-1;o++){var a=i;i=0;for(var s=67108863&n,f=Math.min(o,t.length-1),u=Math.max(0,o-e.length+1);u<=f;u++){var c=o-u,h=(0|e.words[c])*(0|t.words[u]),d=67108863&h;s=67108863&(d=d+s|0),i+=(a=(a=a+(h/67108864|0)|0)+(d>>>26)|0)>>>26,a&=67108863}r.words[o]=s,n=a,a=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}(this,e,t):p(this,e,t)},b.prototype.makeRBT=function(e){for(var t=new Array(e),r=o.prototype._countBits(e)-1,n=0;n<e;n++)t[n]=this.revBin(n,r,e);return t},b.prototype.revBin=function(e,t,r){if(0===e||e===r-1)return e;for(var n=0,i=0;i<t;i++)n|=(1&e)<<t-i-1,e>>=1;return n},b.prototype.permute=function(e,t,r,n,i,o){for(var a=0;a<o;a++)n[a]=t[e[a]],i[a]=r[e[a]]},b.prototype.transform=function(e,t,r,n,i,o){this.permute(o,e,t,r,n,i);for(var a=1;a<i;a<<=1)for(var s=a<<1,f=Math.cos(2*Math.PI/s),u=Math.sin(2*Math.PI/s),c=0;c<i;c+=s)for(var h=f,d=u,l=0;l<a;l++){var p=r[c+l],b=n[c+l],y=r[c+l+a],g=n[c+l+a],v=h*y-d*g;g=h*g+d*y,y=v,r[c+l]=p+y,n[c+l]=b+g,r[c+l+a]=p-y,n[c+l+a]=b-g,l!==s&&(v=f*h-u*d,d=f*d+u*h,h=v)}},b.prototype.guessLen13b=function(e,t){var r=1|Math.max(t,e),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<<i+1+n},b.prototype.conjugate=function(e,t,r){if(!(r<=1))for(var n=0;n<r/2;n++){var i=e[n];e[n]=e[r-n-1],e[r-n-1]=i,i=t[n],t[n]=-t[r-n-1],t[r-n-1]=-i}},b.prototype.normalize13b=function(e,t){for(var r=0,n=0;n<t/2;n++){var i=8192*Math.round(e[2*n+1]/t)+Math.round(e[2*n]/t)+r;e[n]=67108863&i,r=i<67108864?0:i/67108864|0}return e},b.prototype.convert13b=function(e,t,r,i){for(var o=0,a=0;a<t;a++)o+=0|e[a],r[2*a]=8191&o,o>>>=13,r[2*a+1]=8191&o,o>>>=13;for(a=2*t;a<i;++a)r[a]=0;n(0===o),n(0==(-8192&o))},b.prototype.stub=function(e){for(var t=new Array(e),r=0;r<e;r++)t[r]=0;return t},b.prototype.mulp=function(e,t,r){var n=2*this.guessLen13b(e.length,t.length),i=this.makeRBT(n),o=this.stub(n),a=new Array(n),s=new Array(n),f=new Array(n),u=new Array(n),c=new Array(n),h=new Array(n),d=r.words;d.length=n,this.convert13b(e.words,e.length,a,n),this.convert13b(t.words,t.length,u,n),this.transform(a,o,s,f,n,i),this.transform(u,o,c,h,n,i);for(var l=0;l<n;l++){var p=s[l]*c[l]-f[l]*h[l];f[l]=s[l]*h[l]+f[l]*c[l],s[l]=p}return this.conjugate(s,f,n),this.transform(s,f,d,o,n,i),this.conjugate(d,o,n),this.normalize13b(d,n),r.negative=e.negative^t.negative,r.length=e.length+t.length,r.strip()},o.prototype.mul=function(e){var t=new o(null);return t.words=new Array(this.length+e.length),this.mulTo(e,t)},o.prototype.mulf=function(e){var t=new o(null);return t.words=new Array(this.length+e.length),p(this,e,t)},o.prototype.imul=function(e){return this.clone().mulTo(e,this)},o.prototype.imuln=function(e){n(\"number\"==typeof e),n(e<67108864);for(var t=0,r=0;r<this.length;r++){var i=(0|this.words[r])*e,o=(67108863&i)+(67108863&t);t>>=26,t+=i/67108864|0,t+=o>>>26,this.words[r]=67108863&o}return 0!==t&&(this.words[r]=t,this.length++),this},o.prototype.muln=function(e){return this.clone().imuln(e)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),r=0;r<t.length;r++){var n=r/26|0,i=r%26;t[r]=(e.words[n]&1<<i)>>>i}return t}(e);if(0===t.length)return new o(1);for(var r=this,n=0;n<t.length&&0===t[n];n++,r=r.sqr());if(++n<t.length)for(var i=r.sqr();n<t.length;n++,i=i.sqr())0!==t[n]&&(r=r.mul(i));return r},o.prototype.iushln=function(e){n(\"number\"==typeof e&&e>=0);var t,r=e%26,i=(e-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(t=0;t<this.length;t++){var s=this.words[t]&o,f=(0|this.words[t])-s<<r;this.words[t]=f|a,a=s>>>26-r}a&&(this.words[t]=a,this.length++)}if(0!==i){for(t=this.length-1;t>=0;t--)this.words[t+i]=this.words[t];for(t=0;t<i;t++)this.words[t]=0;this.length+=i}return this.strip()},o.prototype.ishln=function(e){return n(0===this.negative),this.iushln(e)},o.prototype.iushrn=function(e,t,r){var i;n(\"number\"==typeof e&&e>=0),i=t?(t-t%26)/26:0;var o=e%26,a=Math.min((e-o)/26,this.length),s=67108863^67108863>>>o<<o,f=r;if(i-=a,i=Math.max(0,i),f){for(var u=0;u<a;u++)f.words[u]=this.words[u];f.length=a}if(0===a);else if(this.length>a)for(this.length-=a,u=0;u<this.length;u++)this.words[u]=this.words[u+a];else this.words[0]=0,this.length=1;var c=0;for(u=this.length-1;u>=0&&(0!==c||u>=i);u--){var h=0|this.words[u];this.words[u]=c<<26-o|h>>>o,c=h&s}return f&&0!==c&&(f.words[f.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(e,t,r){return n(0===this.negative),this.iushrn(e,t,r)},o.prototype.shln=function(e){return this.clone().ishln(e)},o.prototype.ushln=function(e){return this.clone().iushln(e)},o.prototype.shrn=function(e){return this.clone().ishrn(e)},o.prototype.ushrn=function(e){return this.clone().iushrn(e)},o.prototype.testn=function(e){n(\"number\"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,i=1<<t;return!(this.length<=r)&&!!(this.words[r]&i)},o.prototype.imaskn=function(e){n(\"number\"==typeof e&&e>=0);var t=e%26,r=(e-t)/26;if(n(0===this.negative,\"imaskn works only with positive numbers\"),this.length<=r)return this;if(0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var i=67108863^67108863>>>t<<t;this.words[this.length-1]&=i}return this.strip()},o.prototype.maskn=function(e){return this.clone().imaskn(e)},o.prototype.iaddn=function(e){return n(\"number\"==typeof e),n(e<67108864),e<0?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])<e?(this.words[0]=e-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(e),this.negative=1,this):this._iaddn(e)},o.prototype._iaddn=function(e){this.words[0]+=e;for(var t=0;t<this.length&&this.words[t]>=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},o.prototype.isubn=function(e){if(n(\"number\"==typeof e),n(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t<this.length&&this.words[t]<0;t++)this.words[t]+=67108864,this.words[t+1]-=1;return this.strip()},o.prototype.addn=function(e){return this.clone().iaddn(e)},o.prototype.subn=function(e){return this.clone().isubn(e)},o.prototype.iabs=function(){return this.negative=0,this},o.prototype.abs=function(){return this.clone().iabs()},o.prototype._ishlnsubmul=function(e,t,r){var i,o,a=e.length+r;this._expand(a);var s=0;for(i=0;i<e.length;i++){o=(0|this.words[i+r])+s;var f=(0|e.words[i])*t;s=((o-=67108863&f)>>26)-(f/67108864|0),this.words[i+r]=67108863&o}for(;i<this.length-r;i++)s=(o=(0|this.words[i+r])+s)>>26,this.words[i+r]=67108863&o;if(0===s)return this.strip();for(n(-1===s),s=0,i=0;i<this.length;i++)s=(o=-(0|this.words[i])+s)>>26,this.words[i]=67108863&o;return this.negative=1,this.strip()},o.prototype._wordDiv=function(e,t){var r=(this.length,e.length),n=this.clone(),i=e,a=0|i.words[i.length-1];0!==(r=26-this._countBits(a))&&(i=i.ushln(r),n.iushln(r),a=0|i.words[i.length-1]);var s,f=n.length-i.length;if(\"mod\"!==t){(s=new o(null)).length=f+1,s.words=new Array(s.length);for(var u=0;u<s.length;u++)s.words[u]=0}var c=n.clone()._ishlnsubmul(i,1,f);0===c.negative&&(n=c,s&&(s.words[f]=1));for(var h=f-1;h>=0;h--){var d=67108864*(0|n.words[i.length+h])+(0|n.words[i.length+h-1]);for(d=Math.min(d/a|0,67108863),n._ishlnsubmul(i,d,h);0!==n.negative;)d--,n.negative=0,n._ishlnsubmul(i,1,h),n.isZero()||(n.negative^=1);s&&(s.words[h]=d)}return s&&s.strip(),n.strip(),\"div\"!==t&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},o.prototype.divmod=function(e,t,r){return n(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(s=this.neg().divmod(e,t),\"mod\"!==t&&(i=s.div.neg()),\"div\"!==t&&(a=s.mod.neg(),r&&0!==a.negative&&a.iadd(e)),{div:i,mod:a}):0===this.negative&&0!==e.negative?(s=this.divmod(e.neg(),t),\"mod\"!==t&&(i=s.div.neg()),{div:i,mod:s.mod}):0!=(this.negative&e.negative)?(s=this.neg().divmod(e.neg(),t),\"div\"!==t&&(a=s.mod.neg(),r&&0!==a.negative&&a.isub(e)),{div:s.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?\"div\"===t?{div:this.divn(e.words[0]),mod:null}:\"mod\"===t?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,t);var i,a,s},o.prototype.div=function(e){return this.divmod(e,\"div\",!1).div},o.prototype.mod=function(e){return this.divmod(e,\"mod\",!1).mod},o.prototype.umod=function(e){return this.divmod(e,\"mod\",!0).mod},o.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),i=e.andln(1),o=r.cmp(n);return o<0||1===i&&0===o?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},o.prototype.modn=function(e){n(e<=67108863);for(var t=(1<<26)%e,r=0,i=this.length-1;i>=0;i--)r=(t*r+(0|this.words[i]))%e;return r},o.prototype.idivn=function(e){n(e<=67108863);for(var t=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*t;this.words[r]=i/e|0,t=i%e}return this.strip()},o.prototype.divn=function(e){return this.clone().idivn(e)},o.prototype.egcd=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i=new o(1),a=new o(0),s=new o(0),f=new o(1),u=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++u;for(var c=r.clone(),h=t.clone();!t.isZero();){for(var d=0,l=1;0==(t.words[0]&l)&&d<26;++d,l<<=1);if(d>0)for(t.iushrn(d);d-- >0;)(i.isOdd()||a.isOdd())&&(i.iadd(c),a.isub(h)),i.iushrn(1),a.iushrn(1);for(var p=0,b=1;0==(r.words[0]&b)&&p<26;++p,b<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(s.isOdd()||f.isOdd())&&(s.iadd(c),f.isub(h)),s.iushrn(1),f.iushrn(1);t.cmp(r)>=0?(t.isub(r),i.isub(s),a.isub(f)):(r.isub(t),s.isub(i),f.isub(a))}return{a:s,b:f,gcd:r.iushln(u)}},o.prototype._invmp=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i,a=new o(1),s=new o(0),f=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var u=0,c=1;0==(t.words[0]&c)&&u<26;++u,c<<=1);if(u>0)for(t.iushrn(u);u-- >0;)a.isOdd()&&a.iadd(f),a.iushrn(1);for(var h=0,d=1;0==(r.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(r.iushrn(h);h-- >0;)s.isOdd()&&s.iadd(f),s.iushrn(1);t.cmp(r)>=0?(t.isub(r),a.isub(s)):(r.isub(t),s.isub(a))}return(i=0===t.cmpn(1)?a:s).cmpn(0)<0&&i.iadd(e),i},o.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=t.cmp(r);if(i<0){var o=t;t=r,r=o}else if(0===i||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},o.prototype.invm=function(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function(){return 0==(1&this.words[0])},o.prototype.isOdd=function(){return 1==(1&this.words[0])},o.prototype.andln=function(e){return this.words[0]&e},o.prototype.bincn=function(e){n(\"number\"==typeof e);var t=e%26,r=(e-t)/26,i=1<<t;if(this.length<=r)return this._expand(r+1),this.words[r]|=i,this;for(var o=i,a=r;0!==o&&a<this.length;a++){var s=0|this.words[a];o=(s+=o)>>>26,s&=67108863,this.words[a]=s}return 0!==o&&(this.words[a]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(e){var t,r=e<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)t=1;else{r&&(e=-e),n(e<=67108863,\"Number is too big\");var i=0|this.words[0];t=i===e?0:i<e?-1:1}return 0!==this.negative?0|-t:t},o.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var t=this.ucmp(e);return 0!==this.negative?0|-t:t},o.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length<e.length)return-1;for(var t=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],i=0|e.words[r];if(n!==i){n<i?t=-1:n>i&&(t=1);break}}return t},o.prototype.gtn=function(e){return 1===this.cmpn(e)},o.prototype.gt=function(e){return 1===this.cmp(e)},o.prototype.gten=function(e){return this.cmpn(e)>=0},o.prototype.gte=function(e){return this.cmp(e)>=0},o.prototype.ltn=function(e){return-1===this.cmpn(e)},o.prototype.lt=function(e){return-1===this.cmp(e)},o.prototype.lten=function(e){return this.cmpn(e)<=0},o.prototype.lte=function(e){return this.cmp(e)<=0},o.prototype.eqn=function(e){return 0===this.cmpn(e)},o.prototype.eq=function(e){return 0===this.cmp(e)},o.red=function(e){return new E(e)},o.prototype.toRed=function(e){return n(!this.red,\"Already a number in reduction context\"),n(0===this.negative,\"red works only with positives\"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function(){return n(this.red,\"fromRed works only with numbers in reduction context\"),this.red.convertFrom(this)},o.prototype._forceRed=function(e){return this.red=e,this},o.prototype.forceRed=function(e){return n(!this.red,\"Already a number in reduction context\"),this._forceRed(e)},o.prototype.redAdd=function(e){return n(this.red,\"redAdd works only with red numbers\"),this.red.add(this,e)},o.prototype.redIAdd=function(e){return n(this.red,\"redIAdd works only with red numbers\"),this.red.iadd(this,e)},o.prototype.redSub=function(e){return n(this.red,\"redSub works only with red numbers\"),this.red.sub(this,e)},o.prototype.redISub=function(e){return n(this.red,\"redISub works only with red numbers\"),this.red.isub(this,e)},o.prototype.redShl=function(e){return n(this.red,\"redShl works only with red numbers\"),this.red.shl(this,e)},o.prototype.redMul=function(e){return n(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function(e){return n(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function(){return n(this.red,\"redSqr works only with red numbers\"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return n(this.red,\"redISqr works only with red numbers\"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return n(this.red,\"redSqrt works only with red numbers\"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return n(this.red,\"redInvm works only with red numbers\"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return n(this.red,\"redNeg works only with red numbers\"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(e){return n(this.red&&!e.red,\"redPow(normalNum)\"),this.red._verify1(this),this.red.pow(this,e)};var y={k256:null,p224:null,p192:null,p25519:null};function g(e,t){this.name=e,this.p=new o(t,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function v(){g.call(this,\"k256\",\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\")}function m(){g.call(this,\"p224\",\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\")}function w(){g.call(this,\"p192\",\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\")}function _(){g.call(this,\"25519\",\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\")}function E(e){if(\"string\"==typeof e){var t=o._prime(e);this.m=t.p,this.prime=t}else n(e.gtn(1),\"modulus must be greater than 1\"),this.m=e,this.prime=null}function S(e){E.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}g.prototype._tmp=function(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},g.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var n=t<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},g.prototype.split=function(e,t){e.iushrn(this.n,0,t)},g.prototype.imulK=function(e){return e.imul(this.k)},i(v,g),v.prototype.split=function(e,t){for(var r=Math.min(e.length,9),n=0;n<r;n++)t.words[n]=e.words[n];if(t.length=r,e.length<=9)return e.words[0]=0,void(e.length=1);var i=e.words[9];for(t.words[t.length++]=4194303&i,n=10;n<e.length;n++){var o=0|e.words[n];e.words[n-10]=(4194303&o)<<4|i>>>22,i=o}i>>>=22,e.words[n-10]=i,0===i&&e.length>10?e.length-=10:e.length-=9},v.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r<e.length;r++){var n=0|e.words[r];t+=977*n,e.words[r]=67108863&t,t=64*n+(t/67108864|0)}return 0===e.words[e.length-1]&&(e.length--,0===e.words[e.length-1]&&e.length--),e},i(m,g),i(w,g),i(_,g),_.prototype.imulK=function(e){for(var t=0,r=0;r<e.length;r++){var n=19*(0|e.words[r])+t,i=67108863&n;n>>>=26,e.words[r]=i,t=n}return 0!==t&&(e.words[e.length++]=t),e},o._prime=function(e){if(y[e])return y[e];var t;if(\"k256\"===e)t=new v;else if(\"p224\"===e)t=new m;else if(\"p192\"===e)t=new w;else{if(\"p25519\"!==e)throw new Error(\"Unknown prime \"+e);t=new _}return y[e]=t,t},E.prototype._verify1=function(e){n(0===e.negative,\"red works only with positives\"),n(e.red,\"red works only with red numbers\")},E.prototype._verify2=function(e,t){n(0==(e.negative|t.negative),\"red works only with positives\"),n(e.red&&e.red===t.red,\"red works only with red numbers\")},E.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},E.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},E.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},E.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},E.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},E.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},E.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},E.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},E.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},E.prototype.isqr=function(e){return this.imul(e,e.clone())},E.prototype.sqr=function(e){return this.mul(e,e)},E.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(n(t%2==1),3===t){var r=this.m.add(new o(1)).iushrn(2);return this.pow(e,r)}for(var i=this.m.subn(1),a=0;!i.isZero()&&0===i.andln(1);)a++,i.iushrn(1);n(!i.isZero());var s=new o(1).toRed(this),f=s.redNeg(),u=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new o(2*c*c).toRed(this);0!==this.pow(c,u).cmp(f);)c.redIAdd(f);for(var h=this.pow(c,i),d=this.pow(e,i.addn(1).iushrn(1)),l=this.pow(e,i),p=a;0!==l.cmp(s);){for(var b=l,y=0;0!==b.cmp(s);y++)b=b.redSqr();n(y<p);var g=this.pow(h,new o(1).iushln(p-y-1));d=d.redMul(g),h=g.redSqr(),l=l.redMul(h),p=y}return d},E.prototype.invm=function(e){var t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},E.prototype.pow=function(e,t){if(t.isZero())return new o(1).toRed(this);if(0===t.cmpn(1))return e.clone();var r=new Array(16);r[0]=new o(1).toRed(this),r[1]=e;for(var n=2;n<r.length;n++)r[n]=this.mul(r[n-1],e);var i=r[0],a=0,s=0,f=t.bitLength()%26;for(0===f&&(f=26),n=t.length-1;n>=0;n--){for(var u=t.words[n],c=f-1;c>=0;c--){var h=u>>c&1;i!==r[0]&&(i=this.sqr(i)),0!==h||0!==a?(a<<=1,a|=h,(4===++s||0===n&&0===c)&&(i=this.mul(i,r[a]),s=0,a=0)):s=0}f=26}return i},E.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},E.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},o.mont=function(e){return new S(e)},i(S,E),S.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},S.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},S.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},S.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new o(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},S.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(e,this)}).call(this,r(25)(e))},function(e,t){var r;r=function(){return this}();try{r=r||new Function(\"return this\")()}catch(e){\"object\"==typeof window&&(r=window)}e.exports=r},function(e,t,r){\"use strict\";var n=t,i=r(4),o=r(12),a=r(72);n.assert=o,n.toArray=a.toArray,n.zero2=a.zero2,n.toHex=a.toHex,n.encode=a.encode,n.getNAF=function(e,t,r){var n=new Array(Math.max(e.bitLength(),r)+1);n.fill(0);for(var i=1<<t+1,o=e.clone(),a=0;a<n.length;a++){var s,f=o.andln(i-1);o.isOdd()?(s=f>(i>>1)-1?(i>>1)-f:f,o.isubn(s)):s=0,n[a]=s,o.iushrn(1)}return n},n.getJSF=function(e,t){var r=[[],[]];e=e.clone(),t=t.clone();for(var n=0,i=0;e.cmpn(-n)>0||t.cmpn(-i)>0;){var o,a,s,f=e.andln(3)+n&3,u=t.andln(3)+i&3;if(3===f&&(f=-1),3===u&&(u=-1),0==(1&f))o=0;else o=3!==(s=e.andln(7)+n&7)&&5!==s||2!==u?f:-f;if(r[0].push(o),0==(1&u))a=0;else a=3!==(s=t.andln(7)+i&7)&&5!==s||2!==f?u:-u;r[1].push(a),2*n===o+1&&(n=1-n),2*i===a+1&&(i=1-i),e.iushrn(1),t.iushrn(1)}return r},n.cachedProperty=function(e,t,r){var n=\"_\"+t;e.prototype[t]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}},n.parseBytes=function(e){return\"string\"==typeof e?n.toArray(e,\"hex\"):e},n.intFromLE=function(e){return new i(e,\"hex\",\"le\")}},function(e,t,r){\"use strict\";var n=r(98),i=r(258),o=Object.prototype.toString;function a(e){return\"[object Array]\"===o.call(e)}function s(e){return null!==e&&\"object\"==typeof e}function f(e){return\"[object Function]\"===o.call(e)}function u(e,t){if(null!=e)if(\"object\"!=typeof e&&(e=[e]),a(e))for(var r=0,n=e.length;r<n;r++)t.call(null,e[r],r,e);else for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.call(null,e[i],i,e)}e.exports={isArray:a,isArrayBuffer:function(e){return\"[object ArrayBuffer]\"===o.call(e)},isBuffer:i,isFormData:function(e){return\"undefined\"!=typeof FormData&&e instanceof FormData},isArrayBufferView:function(e){return\"undefined\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer},isString:function(e){return\"string\"==typeof e},isNumber:function(e){return\"number\"==typeof e},isObject:s,isUndefined:function(e){return void 0===e},isDate:function(e){return\"[object Date]\"===o.call(e)},isFile:function(e){return\"[object File]\"===o.call(e)},isBlob:function(e){return\"[object Blob]\"===o.call(e)},isFunction:f,isStream:function(e){return s(e)&&f(e.pipe)},isURLSearchParams:function(e){return\"undefined\"!=typeof URLSearchParams&&e instanceof URLSearchParams},isStandardBrowserEnv:function(){return(\"undefined\"==typeof navigator||\"ReactNative\"!==navigator.product)&&(\"undefined\"!=typeof window&&\"undefined\"!=typeof document)},forEach:u,merge:function e(){var t={};function r(r,n){\"object\"==typeof t[n]&&\"object\"==typeof r?t[n]=e(t[n],r):t[n]=r}for(var n=0,i=arguments.length;n<i;n++)u(arguments[n],r);return t},extend:function(e,t,r){return u(t,(function(t,i){e[i]=r&&\"function\"==typeof t?n(t,r):t})),e},trim:function(e){return e.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\")}}},function(e,t,r){\"use strict\";var n=r(12),i=r(0);function o(e,t){return 55296==(64512&e.charCodeAt(t))&&(!(t<0||t+1>=e.length)&&56320==(64512&e.charCodeAt(t+1)))}function a(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function s(e){return 1===e.length?\"0\"+e:e}function f(e){return 7===e.length?\"0\"+e:6===e.length?\"00\"+e:5===e.length?\"000\"+e:4===e.length?\"0000\"+e:3===e.length?\"00000\"+e:2===e.length?\"000000\"+e:1===e.length?\"0000000\"+e:e}t.inherits=i,t.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if(\"string\"==typeof e)if(t){if(\"hex\"===t)for((e=e.replace(/[^a-z0-9]+/gi,\"\")).length%2!=0&&(e=\"0\"+e),i=0;i<e.length;i+=2)r.push(parseInt(e[i]+e[i+1],16))}else for(var n=0,i=0;i<e.length;i++){var a=e.charCodeAt(i);a<128?r[n++]=a:a<2048?(r[n++]=a>>6|192,r[n++]=63&a|128):o(e,i)?(a=65536+((1023&a)<<10)+(1023&e.charCodeAt(++i)),r[n++]=a>>18|240,r[n++]=a>>12&63|128,r[n++]=a>>6&63|128,r[n++]=63&a|128):(r[n++]=a>>12|224,r[n++]=a>>6&63|128,r[n++]=63&a|128)}else for(i=0;i<e.length;i++)r[i]=0|e[i];return r},t.toHex=function(e){for(var t=\"\",r=0;r<e.length;r++)t+=s(e[r].toString(16));return t},t.htonl=a,t.toHex32=function(e,t){for(var r=\"\",n=0;n<e.length;n++){var i=e[n];\"little\"===t&&(i=a(i)),r+=f(i.toString(16))}return r},t.zero2=s,t.zero8=f,t.join32=function(e,t,r,i){var o=r-t;n(o%4==0);for(var a=new Array(o/4),s=0,f=t;s<a.length;s++,f+=4){var u;u=\"big\"===i?e[f]<<24|e[f+1]<<16|e[f+2]<<8|e[f+3]:e[f+3]<<24|e[f+2]<<16|e[f+1]<<8|e[f],a[s]=u>>>0}return a},t.split32=function(e,t){for(var r=new Array(4*e.length),n=0,i=0;n<e.length;n++,i+=4){var o=e[n];\"big\"===t?(r[i]=o>>>24,r[i+1]=o>>>16&255,r[i+2]=o>>>8&255,r[i+3]=255&o):(r[i+3]=o>>>24,r[i+2]=o>>>16&255,r[i+1]=o>>>8&255,r[i]=255&o)}return r},t.rotr32=function(e,t){return e>>>t|e<<32-t},t.rotl32=function(e,t){return e<<t|e>>>32-t},t.sum32=function(e,t){return e+t>>>0},t.sum32_3=function(e,t,r){return e+t+r>>>0},t.sum32_4=function(e,t,r,n){return e+t+r+n>>>0},t.sum32_5=function(e,t,r,n,i){return e+t+r+n+i>>>0},t.sum64=function(e,t,r,n){var i=e[t],o=n+e[t+1]>>>0,a=(o<n?1:0)+r+i;e[t]=a>>>0,e[t+1]=o},t.sum64_hi=function(e,t,r,n){return(t+n>>>0<t?1:0)+e+r>>>0},t.sum64_lo=function(e,t,r,n){return t+n>>>0},t.sum64_4_hi=function(e,t,r,n,i,o,a,s){var f=0,u=t;return f+=(u=u+n>>>0)<t?1:0,f+=(u=u+o>>>0)<o?1:0,e+r+i+a+(f+=(u=u+s>>>0)<s?1:0)>>>0},t.sum64_4_lo=function(e,t,r,n,i,o,a,s){return t+n+o+s>>>0},t.sum64_5_hi=function(e,t,r,n,i,o,a,s,f,u){var c=0,h=t;return c+=(h=h+n>>>0)<t?1:0,c+=(h=h+o>>>0)<o?1:0,c+=(h=h+s>>>0)<s?1:0,e+r+i+a+f+(c+=(h=h+u>>>0)<u?1:0)>>>0},t.sum64_5_lo=function(e,t,r,n,i,o,a,s,f,u){return t+n+o+s+u>>>0},t.rotr64_hi=function(e,t,r){return(t<<32-r|e>>>r)>>>0},t.rotr64_lo=function(e,t,r){return(e<<32-r|t>>>r)>>>0},t.shr64_hi=function(e,t,r){return e>>>r},t.shr64_lo=function(e,t,r){return(e<<32-r|t>>>r)>>>0}},function(e,t,r){\"use strict\";var n,i=\"object\"==typeof Reflect?Reflect:null,o=i&&\"function\"==typeof i.apply?i.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};n=i&&\"function\"==typeof i.ownKeys?i.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var a=Number.isNaN||function(e){return e!=e};function s(){s.init.call(this)}e.exports=s,e.exports.once=function(e,t){return new Promise((function(r,n){function i(){void 0!==o&&e.removeListener(\"error\",o),r([].slice.call(arguments))}var o;\"error\"!==t&&(o=function(r){e.removeListener(t,i),n(r)},e.once(\"error\",o)),e.once(t,i)}))},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var f=10;function u(e){if(\"function\"!=typeof e)throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof e)}function c(e){return void 0===e._maxListeners?s.defaultMaxListeners:e._maxListeners}function h(e,t,r,n){var i,o,a,s;if(u(r),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit(\"newListener\",t,r.listener?r.listener:r),o=e._events),a=o[t]),void 0===a)a=o[t]=r,++e._eventsCount;else if(\"function\"==typeof a?a=o[t]=n?[r,a]:[a,r]:n?a.unshift(r):a.push(r),(i=c(e))>0&&a.length>i&&!a.warned){a.warned=!0;var f=new Error(\"Possible EventEmitter memory leak detected. \"+a.length+\" \"+String(t)+\" listeners added. Use emitter.setMaxListeners() to increase limit\");f.name=\"MaxListenersExceededWarning\",f.emitter=e,f.type=t,f.count=a.length,s=f,console&&console.warn&&console.warn(s)}return e}function d(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function l(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=d.bind(n);return i.listener=r,n.wrapFn=i,i}function p(e,t,r){var n=e._events;if(void 0===n)return[];var i=n[t];return void 0===i?[]:\"function\"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(i):y(i,i.length)}function b(e){var t=this._events;if(void 0!==t){var r=t[e];if(\"function\"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function y(e,t){for(var r=new Array(t),n=0;n<t;++n)r[n]=e[n];return r}Object.defineProperty(s,\"defaultMaxListeners\",{enumerable:!0,get:function(){return f},set:function(e){if(\"number\"!=typeof e||e<0||a(e))throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+e+\".\");f=e}}),s.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(e){if(\"number\"!=typeof e||e<0||a(e))throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+e+\".\");return this._maxListeners=e,this},s.prototype.getMaxListeners=function(){return c(this)},s.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var n=\"error\"===e,i=this._events;if(void 0!==i)n=n&&void 0===i.error;else if(!n)return!1;if(n){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var s=new Error(\"Unhandled error.\"+(a?\" (\"+a.message+\")\":\"\"));throw s.context=a,s}var f=i[e];if(void 0===f)return!1;if(\"function\"==typeof f)o(f,this,t);else{var u=f.length,c=y(f,u);for(r=0;r<u;++r)o(c[r],this,t)}return!0},s.prototype.addListener=function(e,t){return h(this,e,t,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(e,t){return h(this,e,t,!0)},s.prototype.once=function(e,t){return u(t),this.on(e,l(this,e,t)),this},s.prototype.prependOnceListener=function(e,t){return u(t),this.prependListener(e,l(this,e,t)),this},s.prototype.removeListener=function(e,t){var r,n,i,o,a;if(u(t),void 0===(n=this._events))return this;if(void 0===(r=n[e]))return this;if(r===t||r.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit(\"removeListener\",e,r.listener||t));else if(\"function\"!=typeof r){for(i=-1,o=r.length-1;o>=0;o--)if(r[o]===t||r[o].listener===t){a=r[o].listener,i=o;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,i),1===r.length&&(n[e]=r[0]),void 0!==n.removeListener&&this.emit(\"removeListener\",e,a||t)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(e){var t,r,n;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0===arguments.length){var i,o=Object.keys(r);for(n=0;n<o.length;++n)\"removeListener\"!==(i=o[n])&&this.removeAllListeners(i);return this.removeAllListeners(\"removeListener\"),this._events=Object.create(null),this._eventsCount=0,this}if(\"function\"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this},s.prototype.listeners=function(e){return p(this,e,!0)},s.prototype.rawListeners=function(e){return p(this,e,!1)},s.listenerCount=function(e,t){return\"function\"==typeof e.listenerCount?e.listenerCount(t):b.call(e,t)},s.prototype.listenerCount=b,s.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]}},function(e,t,r){(function(e){var n=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),r={},n=0;n<t.length;n++)r[t[n]]=Object.getOwnPropertyDescriptor(e,t[n]);return r},i=/%[sdj%]/g;t.format=function(e){if(!g(e)){for(var t=[],r=0;r<arguments.length;r++)t.push(s(arguments[r]));return t.join(\" \")}r=1;for(var n=arguments,o=n.length,a=String(e).replace(i,(function(e){if(\"%%\"===e)return\"%\";if(r>=o)return e;switch(e){case\"%s\":return String(n[r++]);case\"%d\":return Number(n[r++]);case\"%j\":try{return JSON.stringify(n[r++])}catch(e){return\"[Circular]\"}default:return e}})),f=n[r];r<o;f=n[++r])b(f)||!w(f)?a+=\" \"+f:a+=\" \"+s(f);return a},t.deprecate=function(r,n){if(void 0!==e&&!0===e.noDeprecation)return r;if(void 0===e)return function(){return t.deprecate(r,n).apply(this,arguments)};var i=!1;return function(){if(!i){if(e.throwDeprecation)throw new Error(n);e.traceDeprecation?console.trace(n):console.error(n),i=!0}return r.apply(this,arguments)}};var o,a={};function s(e,r){var n={seen:[],stylize:u};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),p(r)?n.showHidden=r:r&&t._extend(n,r),v(n.showHidden)&&(n.showHidden=!1),v(n.depth)&&(n.depth=2),v(n.colors)&&(n.colors=!1),v(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=f),c(n,e,n.depth)}function f(e,t){var r=s.styles[t];return r?\"\u001b[\"+s.colors[r][0]+\"m\"+e+\"\u001b[\"+s.colors[r][1]+\"m\":e}function u(e,t){return e}function c(e,r,n){if(e.customInspect&&r&&S(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,e);return g(i)||(i=c(e,i,n)),i}var o=function(e,t){if(v(t))return e.stylize(\"undefined\",\"undefined\");if(g(t)){var r=\"'\"+JSON.stringify(t).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return e.stylize(r,\"string\")}if(y(t))return e.stylize(\"\"+t,\"number\");if(p(t))return e.stylize(\"\"+t,\"boolean\");if(b(t))return e.stylize(\"null\",\"null\")}(e,r);if(o)return o;var a=Object.keys(r),s=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(r)),E(r)&&(a.indexOf(\"message\")>=0||a.indexOf(\"description\")>=0))return h(r);if(0===a.length){if(S(r)){var f=r.name?\": \"+r.name:\"\";return e.stylize(\"[Function\"+f+\"]\",\"special\")}if(m(r))return e.stylize(RegExp.prototype.toString.call(r),\"regexp\");if(_(r))return e.stylize(Date.prototype.toString.call(r),\"date\");if(E(r))return h(r)}var u,w=\"\",A=!1,x=[\"{\",\"}\"];(l(r)&&(A=!0,x=[\"[\",\"]\"]),S(r))&&(w=\" [Function\"+(r.name?\": \"+r.name:\"\")+\"]\");return m(r)&&(w=\" \"+RegExp.prototype.toString.call(r)),_(r)&&(w=\" \"+Date.prototype.toUTCString.call(r)),E(r)&&(w=\" \"+h(r)),0!==a.length||A&&0!=r.length?n<0?m(r)?e.stylize(RegExp.prototype.toString.call(r),\"regexp\"):e.stylize(\"[Object]\",\"special\"):(e.seen.push(r),u=A?function(e,t,r,n,i){for(var o=[],a=0,s=t.length;a<s;++a)T(t,String(a))?o.push(d(e,t,r,n,String(a),!0)):o.push(\"\");return i.forEach((function(i){i.match(/^\\d+$/)||o.push(d(e,t,r,n,i,!0))})),o}(e,r,n,s,a):a.map((function(t){return d(e,r,n,s,t,A)})),e.seen.pop(),function(e,t,r){if(e.reduce((function(e,t){return t.indexOf(\"\\n\")>=0&&0,e+t.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1}),0)>60)return r[0]+(\"\"===t?\"\":t+\"\\n \")+\" \"+e.join(\",\\n  \")+\" \"+r[1];return r[0]+t+\" \"+e.join(\", \")+\" \"+r[1]}(u,w,x)):x[0]+w+x[1]}function h(e){return\"[\"+Error.prototype.toString.call(e)+\"]\"}function d(e,t,r,n,i,o){var a,s,f;if((f=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?s=f.set?e.stylize(\"[Getter/Setter]\",\"special\"):e.stylize(\"[Getter]\",\"special\"):f.set&&(s=e.stylize(\"[Setter]\",\"special\")),T(n,i)||(a=\"[\"+i+\"]\"),s||(e.seen.indexOf(f.value)<0?(s=b(r)?c(e,f.value,null):c(e,f.value,r-1)).indexOf(\"\\n\")>-1&&(s=o?s.split(\"\\n\").map((function(e){return\"  \"+e})).join(\"\\n\").substr(2):\"\\n\"+s.split(\"\\n\").map((function(e){return\"   \"+e})).join(\"\\n\")):s=e.stylize(\"[Circular]\",\"special\")),v(a)){if(o&&i.match(/^\\d+$/))return s;(a=JSON.stringify(\"\"+i)).match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,\"name\")):(a=a.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),a=e.stylize(a,\"string\"))}return a+\": \"+s}function l(e){return Array.isArray(e)}function p(e){return\"boolean\"==typeof e}function b(e){return null===e}function y(e){return\"number\"==typeof e}function g(e){return\"string\"==typeof e}function v(e){return void 0===e}function m(e){return w(e)&&\"[object RegExp]\"===A(e)}function w(e){return\"object\"==typeof e&&null!==e}function _(e){return w(e)&&\"[object Date]\"===A(e)}function E(e){return w(e)&&(\"[object Error]\"===A(e)||e instanceof Error)}function S(e){return\"function\"==typeof e}function A(e){return Object.prototype.toString.call(e)}function x(e){return e<10?\"0\"+e.toString(10):e.toString(10)}t.debuglog=function(r){if(v(o)&&(o=e.env.NODE_DEBUG||\"\"),r=r.toUpperCase(),!a[r])if(new RegExp(\"\\\\b\"+r+\"\\\\b\",\"i\").test(o)){var n=e.pid;a[r]=function(){var e=t.format.apply(t,arguments);console.error(\"%s %d: %s\",r,n,e)}}else a[r]=function(){};return a[r]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:\"cyan\",number:\"yellow\",boolean:\"yellow\",undefined:\"grey\",null:\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"},t.isArray=l,t.isBoolean=p,t.isNull=b,t.isNullOrUndefined=function(e){return null==e},t.isNumber=y,t.isString=g,t.isSymbol=function(e){return\"symbol\"==typeof e},t.isUndefined=v,t.isRegExp=m,t.isObject=w,t.isDate=_,t.isError=E,t.isFunction=S,t.isPrimitive=function(e){return null===e||\"boolean\"==typeof e||\"number\"==typeof e||\"string\"==typeof e||\"symbol\"==typeof e||void 0===e},t.isBuffer=r(110);var k=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];function M(){var e=new Date,t=[x(e.getHours()),x(e.getMinutes()),x(e.getSeconds())].join(\":\");return[e.getDate(),k[e.getMonth()],t].join(\" \")}function T(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log(\"%s - %s\",M(),t.format.apply(t,arguments))},t.inherits=r(111),t._extend=function(e,t){if(!t||!w(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e};var I=\"undefined\"!=typeof Symbol?Symbol(\"util.promisify.custom\"):void 0;function R(e,t){if(!e){var r=new Error(\"Promise was rejected with a falsy value\");r.reason=e,e=r}return t(e)}t.promisify=function(e){if(\"function\"!=typeof e)throw new TypeError('The \"original\" argument must be of type Function');if(I&&e[I]){var t;if(\"function\"!=typeof(t=e[I]))throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');return Object.defineProperty(t,I,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,r,n=new Promise((function(e,n){t=e,r=n})),i=[],o=0;o<arguments.length;o++)i.push(arguments[o]);i.push((function(e,n){e?r(e):t(n)}));try{e.apply(this,i)}catch(e){r(e)}return n}return Object.setPrototypeOf(t,Object.getPrototypeOf(e)),I&&Object.defineProperty(t,I,{value:t,enumerable:!1,writable:!1,configurable:!0}),Object.defineProperties(t,n(e))},t.promisify.custom=I,t.callbackify=function(t){if(\"function\"!=typeof t)throw new TypeError('The \"original\" argument must be of type Function');function r(){for(var r=[],n=0;n<arguments.length;n++)r.push(arguments[n]);var i=r.pop();if(\"function\"!=typeof i)throw new TypeError(\"The last argument must be of type Function\");var o=this,a=function(){return i.apply(o,arguments)};t.apply(this,r).then((function(t){e.nextTick(a,null,t)}),(function(t){e.nextTick(R,t,a)}))}return Object.setPrototypeOf(r,Object.getPrototypeOf(t)),Object.defineProperties(r,n(t)),r}}).call(this,r(3))},function(e,t,r){\"use strict\";var n=r(24),i=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};e.exports=h;var o=Object.create(r(19));o.inherits=r(0);var a=r(57),s=r(32);o.inherits(h,a);for(var f=i(s.prototype),u=0;u<f.length;u++){var c=f[u];h.prototype[c]||(h.prototype[c]=s.prototype[c])}function h(e){if(!(this instanceof h))return new h(e);a.call(this,e),s.call(this,e),e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once(\"end\",d)}function d(){this.allowHalfOpen||this._writableState.ended||n.nextTick(l,this)}function l(e){e.end()}Object.defineProperty(h.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(h.prototype,\"destroyed\",{get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed&&this._writableState.destroyed)},set:function(e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=e,this._writableState.destroyed=e)}}),h.prototype._destroy=function(e,t){this.push(null),this.end(),n.nextTick(t,e)}},function(e,t){function r(e,t){if(!e)throw new Error(t||\"Assertion failed\")}e.exports=r,r.equal=function(e,t,r){if(e!=t)throw new Error(r||\"Assertion failed: \"+e+\" != \"+t)}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.isAsync=void 0;var n,i=r(203),o=(n=i)&&n.__esModule?n:{default:n};var a=\"function\"==typeof Symbol;function s(e){return a&&\"AsyncFunction\"===e[Symbol.toStringTag]}t.default=function(e){return s(e)?(0,o.default)(e):e},t.isAsync=s},function(e,t,r){\"use strict\";var n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i=r(112),o=r(131),a=r(78),s=r(79),f=r(4),u=r(34),c=r(2).Buffer;Object.assign(t,r(174)),t.MAX_INTEGER=new f(\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\",16),t.TWO_POW256=new f(\"10000000000000000000000000000000000000000000000000000000000000000\",16),t.KECCAK256_NULL_S=\"c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\",t.SHA3_NULL_S=t.KECCAK256_NULL_S,t.KECCAK256_NULL=c.from(t.KECCAK256_NULL_S,\"hex\"),t.SHA3_NULL=t.KECCAK256_NULL,t.KECCAK256_RLP_ARRAY_S=\"1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\",t.SHA3_RLP_ARRAY_S=t.KECCAK256_RLP_ARRAY_S,t.KECCAK256_RLP_ARRAY=c.from(t.KECCAK256_RLP_ARRAY_S,\"hex\"),t.SHA3_RLP_ARRAY=t.KECCAK256_RLP_ARRAY,t.KECCAK256_RLP_S=\"56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\",t.SHA3_RLP_S=t.KECCAK256_RLP_S,t.KECCAK256_RLP=c.from(t.KECCAK256_RLP_S,\"hex\"),t.SHA3_RLP=t.KECCAK256_RLP,t.BN=f,t.rlp=s,t.secp256k1=o,t.zeros=function(e){return c.allocUnsafe(e).fill(0)},t.zeroAddress=function(){var e=t.zeros(20);return t.bufferToHex(e)},t.setLengthLeft=t.setLength=function(e,r,n){var i=t.zeros(r);return e=t.toBuffer(e),n?e.length<r?(e.copy(i),i):e.slice(0,r):e.length<r?(e.copy(i,r-e.length),i):e.slice(-r)},t.setLengthRight=function(e,r){return t.setLength(e,r,!0)},t.unpad=t.stripZeros=function(e){for(var r=(e=t.stripHexPrefix(e))[0];e.length>0&&\"0\"===r.toString();)r=(e=e.slice(1))[0];return e},t.toBuffer=function(e){if(!c.isBuffer(e))if(Array.isArray(e))e=c.from(e);else if(\"string\"==typeof e)e=t.isHexString(e)?c.from(t.padToEven(t.stripHexPrefix(e)),\"hex\"):c.from(e);else if(\"number\"==typeof e)e=t.intToBuffer(e);else if(null==e)e=c.allocUnsafe(0);else if(f.isBN(e))e=e.toArrayLike(c);else{if(!e.toArray)throw new Error(\"invalid type\");e=c.from(e.toArray())}return e},t.bufferToInt=function(e){return new f(t.toBuffer(e)).toNumber()},t.bufferToHex=function(e){return\"0x\"+(e=t.toBuffer(e)).toString(\"hex\")},t.fromSigned=function(e){return new f(e).fromTwos(256)},t.toUnsigned=function(e){return c.from(e.toTwos(256).toArray())},t.keccak=function(e,r){return e=t.toBuffer(e),r||(r=256),i(\"keccak\"+r).update(e).digest()},t.keccak256=function(e){return t.keccak(e)},t.sha3=t.keccak,t.sha256=function(e){return e=t.toBuffer(e),u(\"sha256\").update(e).digest()},t.ripemd160=function(e,r){e=t.toBuffer(e);var n=u(\"rmd160\").update(e).digest();return!0===r?t.setLength(n,32):n},t.rlphash=function(e){return t.keccak(s.encode(e))},t.isValidPrivate=function(e){return o.privateKeyVerify(e)},t.isValidPublic=function(e,t){return 64===e.length?o.publicKeyVerify(c.concat([c.from([4]),e])):!!t&&o.publicKeyVerify(e)},t.pubToAddress=t.publicToAddress=function(e,r){return e=t.toBuffer(e),r&&64!==e.length&&(e=o.publicKeyConvert(e,!1).slice(1)),a(64===e.length),t.keccak(e).slice(-20)};var h=t.privateToPublic=function(e){return e=t.toBuffer(e),o.publicKeyCreate(e,!1).slice(1)};t.importPublic=function(e){return 64!==(e=t.toBuffer(e)).length&&(e=o.publicKeyConvert(e,!1).slice(1)),e},t.ecsign=function(e,t){var r=o.sign(e,t),n={};return n.r=r.signature.slice(0,32),n.s=r.signature.slice(32,64),n.v=r.recovery+27,n},t.hashPersonalMessage=function(e){var r=t.toBuffer(\"\u0019Ethereum Signed Message:\\n\"+e.length.toString());return t.keccak(c.concat([r,e]))},t.ecrecover=function(e,r,n,i){var a=c.concat([t.setLength(n,32),t.setLength(i,32)],64),s=r-27;if(0!==s&&1!==s)throw new Error(\"Invalid signature v value\");var f=o.recover(e,a,s);return o.publicKeyConvert(f,!1).slice(1)},t.toRpcSig=function(e,r,n){if(27!==e&&28!==e)throw new Error(\"Invalid recovery id\");return t.bufferToHex(c.concat([t.setLengthLeft(r,32),t.setLengthLeft(n,32),t.toBuffer(e-27)]))},t.fromRpcSig=function(e){if(65!==(e=t.toBuffer(e)).length)throw new Error(\"Invalid signature length\");var r=e[64];return r<27&&(r+=27),{v:r,r:e.slice(0,32),s:e.slice(32,64)}},t.privateToAddress=function(e){return t.publicToAddress(h(e))},t.isValidAddress=function(e){return/^0x[0-9a-fA-F]{40}$/.test(e)},t.isZeroAddress=function(e){return t.zeroAddress()===t.addHexPrefix(e)},t.toChecksumAddress=function(e){e=t.stripHexPrefix(e).toLowerCase();for(var r=t.keccak(e).toString(\"hex\"),n=\"0x\",i=0;i<e.length;i++)parseInt(r[i],16)>=8?n+=e[i].toUpperCase():n+=e[i];return n},t.isValidChecksumAddress=function(e){return t.isValidAddress(e)&&t.toChecksumAddress(e)===e},t.generateAddress=function(e,r){return e=t.toBuffer(e),r=(r=new f(r)).isZero()?null:c.from(r.toArray()),t.rlphash([e,r]).slice(-20)},t.isPrecompiled=function(e){var r=t.unpad(e);return 1===r.length&&r[0]>=1&&r[0]<=8},t.addHexPrefix=function(e){return\"string\"!=typeof e||t.isHexPrefixed(e)?e:\"0x\"+e},t.isValidSignature=function(e,t,r,n){var i=new f(\"7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0\",16),o=new f(\"fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\",16);return 32===t.length&&32===r.length&&((27===e||28===e)&&(t=new f(t),r=new f(r),!(t.isZero()||t.gt(o)||r.isZero()||r.gt(o))&&(!1!==n||1!==new f(r).cmp(i))))},t.baToJSON=function(e){if(c.isBuffer(e))return\"0x\"+e.toString(\"hex\");if(e instanceof Array){for(var r=[],n=0;n<e.length;n++)r.push(t.baToJSON(e[n]));return r}},t.defineProperties=function(e,r,i){if(e.raw=[],e._fields=[],e.toJSON=function(r){if(r){var n={};return e._fields.forEach((function(t){n[t]=\"0x\"+e[t].toString(\"hex\")})),n}return t.baToJSON(this.raw)},e.serialize=function(){return s.encode(e.raw)},r.forEach((function(r,n){function i(){return e.raw[n]}function o(i){\"00\"!==(i=t.toBuffer(i)).toString(\"hex\")||r.allowZero||(i=c.allocUnsafe(0)),r.allowLess&&r.length?(i=t.stripZeros(i),a(r.length>=i.length,\"The field \"+r.name+\" must not have more \"+r.length+\" bytes\")):r.allowZero&&0===i.length||!r.length||a(r.length===i.length,\"The field \"+r.name+\" must have byte length of \"+r.length),e.raw[n]=i}e._fields.push(r.name),Object.defineProperty(e,r.name,{enumerable:!0,configurable:!0,get:i,set:o}),r.default&&(e[r.name]=r.default),r.alias&&Object.defineProperty(e,r.alias,{enumerable:!1,configurable:!0,set:o,get:i})})),i)if(\"string\"==typeof i&&(i=c.from(t.stripHexPrefix(i),\"hex\")),c.isBuffer(i)&&(i=s.decode(i)),Array.isArray(i)){if(i.length>e._fields.length)throw new Error(\"wrong number of fields in data\");i.forEach((function(r,n){e[e._fields[n]]=t.toBuffer(r)}))}else{if(\"object\"!==(void 0===i?\"undefined\":n(i)))throw new Error(\"invalid data\");var o=Object.keys(i);r.forEach((function(t){-1!==o.indexOf(t.name)&&(e[t.name]=i[t.name]),-1!==o.indexOf(t.alias)&&(e[t.alias]=i[t.alias])}))}}},function(e,t,r){\"use strict\";var n={};function i(e,t,r){r||(r=Error);var i=function(e){var r,n;function i(r,n,i){return e.call(this,function(e,r,n){return\"string\"==typeof t?t:t(e,r,n)}(r,n,i))||this}return n=e,(r=i).prototype=Object.create(n.prototype),r.prototype.constructor=r,r.__proto__=n,i}(r);i.prototype.name=r.name,i.prototype.code=e,n[e]=i}function o(e,t){if(Array.isArray(e)){var r=e.length;return e=e.map((function(e){return String(e)})),r>2?\"one of \".concat(t,\" \").concat(e.slice(0,r-1).join(\", \"),\", or \")+e[r-1]:2===r?\"one of \".concat(t,\" \").concat(e[0],\" or \").concat(e[1]):\"of \".concat(t,\" \").concat(e[0])}return\"of \".concat(t,\" \").concat(String(e))}i(\"ERR_INVALID_OPT_VALUE\",(function(e,t){return'The value \"'+t+'\" is invalid for option \"'+e+'\"'}),TypeError),i(\"ERR_INVALID_ARG_TYPE\",(function(e,t,r){var n,i,a,s;if(\"string\"==typeof t&&(i=\"not \",t.substr(!a||a<0?0:+a,i.length)===i)?(n=\"must not be\",t=t.replace(/^not /,\"\")):n=\"must be\",function(e,t,r){return(void 0===r||r>e.length)&&(r=e.length),e.substring(r-t.length,r)===t}(e,\" argument\"))s=\"The \".concat(e,\" \").concat(n,\" \").concat(o(t,\"type\"));else{var f=function(e,t,r){return\"number\"!=typeof r&&(r=0),!(r+t.length>e.length)&&-1!==e.indexOf(t,r)}(e,\".\")?\"property\":\"argument\";s='The \"'.concat(e,'\" ').concat(f,\" \").concat(n,\" \").concat(o(t,\"type\"))}return s+=\". Received type \".concat(typeof r)}),TypeError),i(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\"),i(\"ERR_METHOD_NOT_IMPLEMENTED\",(function(e){return\"The \"+e+\" method is not implemented\"})),i(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\"),i(\"ERR_STREAM_DESTROYED\",(function(e){return\"Cannot call \"+e+\" after a stream was destroyed\"})),i(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\"),i(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\"),i(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\"),i(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError),i(\"ERR_UNKNOWN_ENCODING\",(function(e){return\"Unknown encoding: \"+e}),TypeError),i(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\"),e.exports.codes=n},function(e,t,r){\"use strict\";(function(t){var n=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};e.exports=u;var i=r(64),o=r(68);r(0)(u,i);for(var a=n(o.prototype),s=0;s<a.length;s++){var f=a[s];u.prototype[f]||(u.prototype[f]=o.prototype[f])}function u(e){if(!(this instanceof u))return new u(e);i.call(this,e),o.call(this,e),this.allowHalfOpen=!0,e&&(!1===e.readable&&(this.readable=!1),!1===e.writable&&(this.writable=!1),!1===e.allowHalfOpen&&(this.allowHalfOpen=!1,this.once(\"end\",c)))}function c(){this._writableState.ended||t.nextTick(h,this)}function h(e){e.end()}Object.defineProperty(u.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(u.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(u.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(u.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed&&this._writableState.destroyed)},set:function(e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=e,this._writableState.destroyed=e)}})}).call(this,r(3))},function(e,t,r){var n=r(2).Buffer;function i(e,t){this._block=n.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}i.prototype.update=function(e,t){\"string\"==typeof e&&(t=t||\"utf8\",e=n.from(e,t));for(var r=this._block,i=this._blockSize,o=e.length,a=this._len,s=0;s<o;){for(var f=a%i,u=Math.min(o-s,i-f),c=0;c<u;c++)r[f+c]=e[s+c];s+=u,(a+=u)%i==0&&this._update(r)}return this._len+=o,this},i.prototype.digest=function(e){var t=this._len%this._blockSize;this._block[t]=128,this._block.fill(0,t+1),t>=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(4294967295&r)>>>0,i=(r-n)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var o=this._hash();return e?o.toString(e):o},i.prototype._update=function(){throw new Error(\"_update must be implemented by subclass\")},e.exports=i},function(e,t,r){e.exports=i;var n=r(9).EventEmitter;function i(){n.call(this)}r(0)(i,n),i.Readable=r(30),i.Writable=r(124),i.Duplex=r(125),i.Transform=r(126),i.PassThrough=r(127),i.Stream=i,i.prototype.pipe=function(e,t){var r=this;function i(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function o(){r.readable&&r.resume&&r.resume()}r.on(\"data\",i),e.on(\"drain\",o),e._isStdio||t&&!1===t.end||(r.on(\"end\",s),r.on(\"close\",f));var a=!1;function s(){a||(a=!0,e.end())}function f(){a||(a=!0,\"function\"==typeof e.destroy&&e.destroy())}function u(e){if(c(),0===n.listenerCount(this,\"error\"))throw e}function c(){r.removeListener(\"data\",i),e.removeListener(\"drain\",o),r.removeListener(\"end\",s),r.removeListener(\"close\",f),r.removeListener(\"error\",u),e.removeListener(\"error\",u),r.removeListener(\"end\",c),r.removeListener(\"close\",c),e.removeListener(\"close\",c)}return r.on(\"error\",u),e.on(\"error\",u),r.on(\"end\",c),r.on(\"close\",c),e.on(\"close\",c),e.emit(\"pipe\",r),e}},function(e,t,r){(function(e){function r(e){return Object.prototype.toString.call(e)}t.isArray=function(e){return Array.isArray?Array.isArray(e):\"[object Array]\"===r(e)},t.isBoolean=function(e){return\"boolean\"==typeof e},t.isNull=function(e){return null===e},t.isNullOrUndefined=function(e){return null==e},t.isNumber=function(e){return\"number\"==typeof e},t.isString=function(e){return\"string\"==typeof e},t.isSymbol=function(e){return\"symbol\"==typeof e},t.isUndefined=function(e){return void 0===e},t.isRegExp=function(e){return\"[object RegExp]\"===r(e)},t.isObject=function(e){return\"object\"==typeof e&&null!==e},t.isDate=function(e){return\"[object Date]\"===r(e)},t.isError=function(e){return\"[object Error]\"===r(e)||e instanceof Error},t.isFunction=function(e){return\"function\"==typeof e},t.isPrimitive=function(e){return null===e||\"boolean\"==typeof e||\"number\"==typeof e||\"string\"==typeof e||\"symbol\"==typeof e||void 0===e},t.isBuffer=e.isBuffer}).call(this,r(1).Buffer)},function(e,t,r){\"use strict\";var n=r(2).Buffer,i=n.isEncoding||function(e){switch((e=\"\"+e)&&e.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function o(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return\"utf8\";for(var t;;)switch(e){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return e;default:if(t)return;e=(\"\"+e).toLowerCase(),t=!0}}(e);if(\"string\"!=typeof t&&(n.isEncoding===i||!i(e)))throw new Error(\"Unknown encoding: \"+e);return t||e}(e),this.encoding){case\"utf16le\":this.text=f,this.end=u,t=4;break;case\"utf8\":this.fillLast=s,t=4;break;case\"base64\":this.text=c,this.end=h,t=3;break;default:return this.write=d,void(this.end=l)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,\"�\";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,\"�\";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,\"�\"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function f(e,t){if((e.length-t)%2==0){var r=e.toString(\"utf16le\",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString(\"utf16le\",t,e.length-1)}function u(e){var t=e&&e.length?this.write(e):\"\";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString(\"utf16le\",0,r)}return t}function c(e,t){var r=(e.length-t)%3;return 0===r?e.toString(\"base64\",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString(\"base64\",t,e.length-r))}function h(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+this.lastChar.toString(\"base64\",0,3-this.lastNeed):t}function d(e){return e.toString(this.encoding)}function l(e){return e&&e.length?this.write(e):\"\"}t.StringDecoder=o,o.prototype.write=function(e){if(0===e.length)return\"\";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return\"\";r=this.lastNeed,this.lastNeed=0}else r=0;return r<e.length?t?t+this.text(e,r):this.text(e,r):t||\"\"},o.prototype.end=function(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+\"�\":t},o.prototype.text=function(e,t){var r=function(e,t,r){var n=t.length-1;if(n<r)return 0;var i=a(t[n]);if(i>=0)return i>0&&(e.lastNeed=i-1),i;if(--n<r||-2===i)return 0;if((i=a(t[n]))>=0)return i>0&&(e.lastNeed=i-2),i;if(--n<r||-2===i)return 0;if((i=a(t[n]))>=0)return i>0&&(2===i?i=0:e.lastNeed=i-3),i;return 0}(this,e,t);if(!this.lastNeed)return e.toString(\"utf8\",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString(\"utf8\",t,n)},o.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,r){\"use strict\";var n=r(8),i=r(12);function o(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian=\"big\",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}t.BlockHash=o,o.prototype.update=function(e,t){if(e=n.toArray(e,t),this.pending?this.pending=this.pending.concat(e):this.pending=e,this.pendingTotal+=e.length,this.pending.length>=this._delta8){var r=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-r,e.length),0===this.pending.length&&(this.pending=null),e=n.join32(e,0,e.length-r,this.endian);for(var i=0;i<e.length;i+=this._delta32)this._update(e,i,i+this._delta32)}return this},o.prototype.digest=function(e){return this.update(this._pad()),i(null===this.pending),this._digest(e)},o.prototype._pad=function(){var e=this.pendingTotal,t=this._delta8,r=t-(e+this.padLength)%t,n=new Array(r+this.padLength);n[0]=128;for(var i=1;i<r;i++)n[i]=0;if(e<<=3,\"big\"===this.endian){for(var o=8;o<this.padLength;o++)n[i++]=0;n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=e>>>24&255,n[i++]=e>>>16&255,n[i++]=e>>>8&255,n[i++]=255&e}else for(n[i++]=255&e,n[i++]=e>>>8&255,n[i++]=e>>>16&255,n[i++]=e>>>24&255,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0,o=8;o<this.padLength;o++)n[i++]=0;return n}},function(e,t){e.exports=function(){}},function(e,t){function r(e){return e.sort((e,t)=>\"latest\"===e||\"earliest\"===t?1:\"latest\"===t||\"earliest\"===e?-1:n(e)-n(t))}function n(e){return null==e?e:Number.parseInt(e,16)}function i(e){if(null==e)return e;let t=e.toString(16);return t.length%2&&(t=\"0\"+t),\"0x\"+t}function o(){return Math.floor(16*Math.random()).toString(16)}e.exports={minBlockRef:function(...e){return r(e)[0]},maxBlockRef:function(...e){const t=r(e);return t[t.length-1]},sortBlockRefs:r,bnToHex:function(e){return\"0x\"+e.toString(16)},blockRefIsNumber:function(e){return e&&![\"earliest\",\"latest\",\"pending\"].includes(e)},hexToInt:n,incrementHexInt:function(e){if(null==e)return e;return i(n(e)+1)},intToHex:i,unsafeRandomBytes:function(e){let t=\"0x\";for(let r=0;r<e;r++)t+=o(),t+=o();return t}}},function(e,t,r){\"use strict\";(function(t){void 0===t||!t.version||0===t.version.indexOf(\"v0.\")||0===t.version.indexOf(\"v1.\")&&0!==t.version.indexOf(\"v1.8.\")?e.exports={nextTick:function(e,r,n,i){if(\"function\"!=typeof e)throw new TypeError('\"callback\" argument must be a function');var o,a,s=arguments.length;switch(s){case 0:case 1:return t.nextTick(e);case 2:return t.nextTick((function(){e.call(null,r)}));case 3:return t.nextTick((function(){e.call(null,r,n)}));case 4:return t.nextTick((function(){e.call(null,r,n,i)}));default:for(o=new Array(s-1),a=0;a<o.length;)o[a++]=arguments[a];return t.nextTick((function(){e.apply(null,o)}))}}}:e.exports=t}).call(this,r(3))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,\"loaded\",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,\"id\",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,r){\"use strict\";var n=r(4),i=r(6),o=i.getNAF,a=i.getJSF,s=i.assert;function f(e,t){this.type=e,this.p=new n(t.p,16),this.red=t.prime?n.red(t.prime):n.mont(this.p),this.zero=new n(0).toRed(this.red),this.one=new n(1).toRed(this.red),this.two=new n(2).toRed(this.red),this.n=t.n&&new n(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function u(e,t){this.curve=e,this.type=t,this.precomputed=null}e.exports=f,f.prototype.point=function(){throw new Error(\"Not implemented\")},f.prototype.validate=function(){throw new Error(\"Not implemented\")},f.prototype._fixedNafMul=function(e,t){s(e.precomputed);var r=e._getDoubles(),n=o(t,1,this._bitLength),i=(1<<r.step+1)-(r.step%2==0?2:1);i/=3;for(var a=[],f=0;f<n.length;f+=r.step){var u=0;for(t=f+r.step-1;t>=f;t--)u=(u<<1)+n[t];a.push(u)}for(var c=this.jpoint(null,null,null),h=this.jpoint(null,null,null),d=i;d>0;d--){for(f=0;f<a.length;f++){(u=a[f])===d?h=h.mixedAdd(r.points[f]):u===-d&&(h=h.mixedAdd(r.points[f].neg()))}c=c.add(h)}return c.toP()},f.prototype._wnafMul=function(e,t){var r=4,n=e._getNAFPoints(r);r=n.wnd;for(var i=n.points,a=o(t,r,this._bitLength),f=this.jpoint(null,null,null),u=a.length-1;u>=0;u--){for(t=0;u>=0&&0===a[u];u--)t++;if(u>=0&&t++,f=f.dblp(t),u<0)break;var c=a[u];s(0!==c),f=\"affine\"===e.type?c>0?f.mixedAdd(i[c-1>>1]):f.mixedAdd(i[-c-1>>1].neg()):c>0?f.add(i[c-1>>1]):f.add(i[-c-1>>1].neg())}return\"affine\"===e.type?f.toP():f},f.prototype._wnafMulAdd=function(e,t,r,n,i){for(var s=this._wnafT1,f=this._wnafT2,u=this._wnafT3,c=0,h=0;h<n;h++){var d=(x=t[h])._getNAFPoints(e);s[h]=d.wnd,f[h]=d.points}for(h=n-1;h>=1;h-=2){var l=h-1,p=h;if(1===s[l]&&1===s[p]){var b=[t[l],null,null,t[p]];0===t[l].y.cmp(t[p].y)?(b[1]=t[l].add(t[p]),b[2]=t[l].toJ().mixedAdd(t[p].neg())):0===t[l].y.cmp(t[p].y.redNeg())?(b[1]=t[l].toJ().mixedAdd(t[p]),b[2]=t[l].add(t[p].neg())):(b[1]=t[l].toJ().mixedAdd(t[p]),b[2]=t[l].toJ().mixedAdd(t[p].neg()));var y=[-3,-1,-5,-7,0,7,5,1,3],g=a(r[l],r[p]);c=Math.max(g[0].length,c),u[l]=new Array(c),u[p]=new Array(c);for(var v=0;v<c;v++){var m=0|g[0][v],w=0|g[1][v];u[l][v]=y[3*(m+1)+(w+1)],u[p][v]=0,f[l]=b}}else u[l]=o(r[l],s[l],this._bitLength),u[p]=o(r[p],s[p],this._bitLength),c=Math.max(u[l].length,c),c=Math.max(u[p].length,c)}var _=this.jpoint(null,null,null),E=this._wnafT4;for(h=c;h>=0;h--){for(var S=0;h>=0;){var A=!0;for(v=0;v<n;v++)E[v]=0|u[v][h],0!==E[v]&&(A=!1);if(!A)break;S++,h--}if(h>=0&&S++,_=_.dblp(S),h<0)break;for(v=0;v<n;v++){var x,k=E[v];0!==k&&(k>0?x=f[v][k-1>>1]:k<0&&(x=f[v][-k-1>>1].neg()),_=\"affine\"===x.type?_.mixedAdd(x):_.add(x))}}for(h=0;h<n;h++)f[h]=null;return i?_:_.toP()},f.BasePoint=u,u.prototype.eq=function(){throw new Error(\"Not implemented\")},u.prototype.validate=function(){return this.curve.validate(this)},f.prototype.decodePoint=function(e,t){e=i.toArray(e,t);var r=this.p.byteLength();if((4===e[0]||6===e[0]||7===e[0])&&e.length-1==2*r)return 6===e[0]?s(e[e.length-1]%2==0):7===e[0]&&s(e[e.length-1]%2==1),this.point(e.slice(1,1+r),e.slice(1+r,1+2*r));if((2===e[0]||3===e[0])&&e.length-1===r)return this.pointFromX(e.slice(1,1+r),3===e[0]);throw new Error(\"Unknown point format\")},u.prototype.encodeCompressed=function(e){return this.encode(e,!0)},u.prototype._encode=function(e){var t=this.curve.p.byteLength(),r=this.getX().toArray(\"be\",t);return e?[this.getY().isEven()?2:3].concat(r):[4].concat(r,this.getY().toArray(\"be\",t))},u.prototype.encode=function(e,t){return i.encode(this._encode(t),e)},u.prototype.precompute=function(e){if(this.precomputed)return this;var t={doubles:null,naf:null,beta:null};return t.naf=this._getNAFPoints(8),t.doubles=this._getDoubles(4,e),t.beta=this._getBeta(),this.precomputed=t,this},u.prototype._hasDoubles=function(e){if(!this.precomputed)return!1;var t=this.precomputed.doubles;return!!t&&t.points.length>=Math.ceil((e.bitLength()+1)/t.step)},u.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;i<t;i+=e){for(var o=0;o<e;o++)n=n.dbl();r.push(n)}return{step:e,points:r}},u.prototype._getNAFPoints=function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var t=[this],r=(1<<e)-1,n=1===r?null:this.dbl(),i=1;i<r;i++)t[i]=t[i-1].add(n);return{wnd:e,points:t}},u.prototype._getBeta=function(){return null},u.prototype.dblp=function(e){for(var t=this,r=0;r<e;r++)t=t.dbl();return t}},function(e,t,r){var n=r(181),i=r(87);e.exports=function(e){return null!=e&&i(e.length)&&!n(e)}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){t|=0;for(var r=Math.max(e.length-t,0),n=Array(r),i=0;i<r;i++)n[i]=e[t+i];return n},e.exports=t.default},function(e,t,r){\"use strict\";var n=r(46);function i(){}e.exports=i,i.prototype.setEngine=function(e){var t=this;t.engine||(t.engine=e,e.on(\"block\",(function(e){t.currentBlock=e})),e.on(\"start\",(function(){t.start()})),e.on(\"stop\",(function(){t.stop()})))},i.prototype.handleRequest=function(e,t,r){throw new Error(\"Subproviders should override `handleRequest`.\")},i.prototype.emitPayload=function(e,t){this.engine.sendAsync(n(e),t)},i.prototype.stop=function(){},i.prototype.start=function(){}},function(e,t,r){(t=e.exports=r(57)).Stream=t,t.Readable=t,t.Writable=r(32),t.Duplex=r(11),t.Transform=r(61),t.PassThrough=r(123)},function(e,t,r){var n=r(1),i=n.Buffer;function o(e,t){for(var r in e)t[r]=e[r]}function a(e,t,r){return i(e,t,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?e.exports=n:(o(n,t),t.Buffer=a),o(i,a),a.from=function(e,t,r){if(\"number\"==typeof e)throw new TypeError(\"Argument must not be a number\");return i(e,t,r)},a.alloc=function(e,t,r){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");var n=i(e);return void 0!==t?\"string\"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},a.allocUnsafe=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return i(e)},a.allocUnsafeSlow=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return n.SlowBuffer(e)}},function(e,t,r){\"use strict\";(function(t,n,i){var o=r(24);function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,r){var n=e.entry;e.entry=null;for(;n;){var i=n.callback;t.pendingcb--,i(r),n=n.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=v;var s,f=!t.browser&&[\"v0.10\",\"v0.9.\"].indexOf(t.version.slice(0,5))>-1?n:o.nextTick;v.WritableState=g;var u=Object.create(r(19));u.inherits=r(0);var c={deprecate:r(60)},h=r(58),d=r(31).Buffer,l=i.Uint8Array||function(){};var p,b=r(59);function y(){}function g(e,t){s=s||r(11),e=e||{};var n=t instanceof s;this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var i=e.highWaterMark,u=e.writableHighWaterMark,c=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(u||0===u)?u:c,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var h=!1===e.decodeStrings;this.decodeStrings=!h,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var r=e._writableState,n=r.sync,i=r.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function(e,t,r,n,i){--t.pendingcb,r?(o.nextTick(i,n),o.nextTick(A,e,t),e._writableState.errorEmitted=!0,e.emit(\"error\",n)):(i(n),e._writableState.errorEmitted=!0,e.emit(\"error\",n),A(e,t))}(e,r,n,t,i);else{var a=E(r);a||r.corked||r.bufferProcessing||!r.bufferedRequest||_(e,r),n?f(w,e,r,a,i):w(e,r,a,i)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function v(e){if(s=s||r(11),!(p.call(v,this)||this instanceof s))return new v(e);this._writableState=new g(e,this),this.writable=!0,e&&(\"function\"==typeof e.write&&(this._write=e.write),\"function\"==typeof e.writev&&(this._writev=e.writev),\"function\"==typeof e.destroy&&(this._destroy=e.destroy),\"function\"==typeof e.final&&(this._final=e.final)),h.call(this)}function m(e,t,r,n,i,o,a){t.writelen=n,t.writecb=a,t.writing=!0,t.sync=!0,r?e._writev(i,t.onwrite):e._write(i,o,t.onwrite),t.sync=!1}function w(e,t,r,n){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit(\"drain\"))}(e,t),t.pendingcb--,n(),A(e,t)}function _(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var n=t.bufferedRequestCount,i=new Array(n),o=t.corkedRequestsFree;o.entry=r;for(var s=0,f=!0;r;)i[s]=r,r.isBuf||(f=!1),r=r.next,s+=1;i.allBuffers=f,m(e,t,!0,t.length,i,\"\",o.finish),t.pendingcb++,t.lastBufferedRequest=null,o.next?(t.corkedRequestsFree=o.next,o.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;r;){var u=r.chunk,c=r.encoding,h=r.callback;if(m(e,t,!1,t.objectMode?1:u.length,u,c,h),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function E(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function S(e,t){e._final((function(r){t.pendingcb--,r&&e.emit(\"error\",r),t.prefinished=!0,e.emit(\"prefinish\"),A(e,t)}))}function A(e,t){var r=E(t);return r&&(!function(e,t){t.prefinished||t.finalCalled||(\"function\"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,o.nextTick(S,e,t)):(t.prefinished=!0,e.emit(\"prefinish\")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit(\"finish\"))),r}u.inherits(v,h),g.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(g.prototype,\"buffer\",{get:c.deprecate((function(){return this.getBuffer()}),\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(e){}}(),\"function\"==typeof Symbol&&Symbol.hasInstance&&\"function\"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(v,Symbol.hasInstance,{value:function(e){return!!p.call(this,e)||this===v&&(e&&e._writableState instanceof g)}})):p=function(e){return e instanceof this},v.prototype.pipe=function(){this.emit(\"error\",new Error(\"Cannot pipe, not readable\"))},v.prototype.write=function(e,t,r){var n,i=this._writableState,a=!1,s=!i.objectMode&&(n=e,d.isBuffer(n)||n instanceof l);return s&&!d.isBuffer(e)&&(e=function(e){return d.from(e)}(e)),\"function\"==typeof t&&(r=t,t=null),s?t=\"buffer\":t||(t=i.defaultEncoding),\"function\"!=typeof r&&(r=y),i.ended?function(e,t){var r=new Error(\"write after end\");e.emit(\"error\",r),o.nextTick(t,r)}(this,r):(s||function(e,t,r,n){var i=!0,a=!1;return null===r?a=new TypeError(\"May not write null values to stream\"):\"string\"==typeof r||void 0===r||t.objectMode||(a=new TypeError(\"Invalid non-string/buffer chunk\")),a&&(e.emit(\"error\",a),o.nextTick(n,a),i=!1),i}(this,i,e,r))&&(i.pendingcb++,a=function(e,t,r,n,i,o){if(!r){var a=function(e,t,r){e.objectMode||!1===e.decodeStrings||\"string\"!=typeof t||(t=d.from(t,r));return t}(t,n,i);n!==a&&(r=!0,i=\"buffer\",n=a)}var s=t.objectMode?1:n.length;t.length+=s;var f=t.length<t.highWaterMark;f||(t.needDrain=!0);if(t.writing||t.corked){var u=t.lastBufferedRequest;t.lastBufferedRequest={chunk:n,encoding:i,isBuf:r,callback:o,next:null},u?u.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else m(e,t,!1,s,n,i,o);return f}(this,i,s,e,t,r)),a},v.prototype.cork=function(){this._writableState.corked++},v.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||_(this,e))},v.prototype.setDefaultEncoding=function(e){if(\"string\"==typeof e&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new TypeError(\"Unknown encoding: \"+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(v.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),v.prototype._write=function(e,t,r){r(new Error(\"_write() is not implemented\"))},v.prototype._writev=null,v.prototype.end=function(e,t,r){var n=this._writableState;\"function\"==typeof e?(r=e,e=null,t=null):\"function\"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||function(e,t,r){t.ending=!0,A(e,t),r&&(t.finished?o.nextTick(r):e.once(\"finish\",r));t.ended=!0,e.writable=!1}(this,n,r)},Object.defineProperty(v.prototype,\"destroyed\",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),v.prototype.destroy=b.destroy,v.prototype._undestroy=b.undestroy,v.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,r(3),r(33).setImmediate,r(5))},function(e,t,r){(function(e){var n=void 0!==e&&e||\"undefined\"!=typeof self&&self||window,i=Function.prototype.apply;function o(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new o(i.call(setTimeout,n,arguments),clearTimeout)},t.setInterval=function(){return new o(i.call(setInterval,n,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(n,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},r(122),t.setImmediate=\"undefined\"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate=\"undefined\"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,r(5))},function(e,t,r){\"use strict\";var n=r(0),i=r(137),o=r(146),a=r(147),s=r(152);function f(e){s.call(this,\"digest\"),this._hash=e}n(f,s),f.prototype._update=function(e){this._hash.update(e)},f.prototype._final=function(){return this._hash.digest()},e.exports=function(e){return\"md5\"===(e=e.toLowerCase())?new i:\"rmd160\"===e||\"ripemd160\"===e?new o:new f(a(e))}},function(e,t,r){\"use strict\";var n=r(15).codes.ERR_STREAM_PREMATURE_CLOSE;function i(){}e.exports=function e(t,r,o){if(\"function\"==typeof r)return e(t,null,r);r||(r={}),o=function(e){var t=!1;return function(){if(!t){t=!0;for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];e.apply(this,n)}}}(o||i);var a=r.readable||!1!==r.readable&&t.readable,s=r.writable||!1!==r.writable&&t.writable,f=function(){t.writable||c()},u=t._writableState&&t._writableState.finished,c=function(){s=!1,u=!0,a||o.call(t)},h=t._readableState&&t._readableState.endEmitted,d=function(){a=!1,h=!0,s||o.call(t)},l=function(e){o.call(t,e)},p=function(){var e;return a&&!h?(t._readableState&&t._readableState.ended||(e=new n),o.call(t,e)):s&&!u?(t._writableState&&t._writableState.ended||(e=new n),o.call(t,e)):void 0},b=function(){t.req.on(\"finish\",c)};return!function(e){return e.setHeader&&\"function\"==typeof e.abort}(t)?s&&!t._writableState&&(t.on(\"end\",f),t.on(\"close\",f)):(t.on(\"complete\",c),t.on(\"abort\",p),t.req?b():t.on(\"request\",b)),t.on(\"end\",d),t.on(\"finish\",c),!1!==r.error&&t.on(\"error\",l),t.on(\"close\",p),function(){t.removeListener(\"complete\",c),t.removeListener(\"abort\",p),t.removeListener(\"request\",b),t.req&&t.req.removeListener(\"finish\",c),t.removeListener(\"end\",f),t.removeListener(\"close\",f),t.removeListener(\"finish\",c),t.removeListener(\"end\",d),t.removeListener(\"error\",l),t.removeListener(\"close\",p)}}},function(e,t,r){\"use strict\";var n=t;n.version=r(154).version,n.utils=r(6),n.rand=r(73),n.curve=r(74),n.curves=r(37),n.ec=r(166),n.eddsa=r(170)},function(e,t,r){\"use strict\";var n,i=t,o=r(38),a=r(74),s=r(6).assert;function f(e){\"short\"===e.type?this.curve=new a.short(e):\"edwards\"===e.type?this.curve=new a.edwards(e):this.curve=new a.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,s(this.g.validate(),\"Invalid curve\"),s(this.g.mul(this.n).isInfinity(),\"Invalid curve, G*N != O\")}function u(e,t){Object.defineProperty(i,e,{configurable:!0,enumerable:!0,get:function(){var r=new f(t);return Object.defineProperty(i,e,{configurable:!0,enumerable:!0,value:r}),r}})}i.PresetCurve=f,u(\"p192\",{type:\"short\",prime:\"p192\",p:\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\",a:\"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc\",b:\"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1\",n:\"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831\",hash:o.sha256,gRed:!1,g:[\"188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012\",\"07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811\"]}),u(\"p224\",{type:\"short\",prime:\"p224\",p:\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\",a:\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe\",b:\"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4\",n:\"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d\",hash:o.sha256,gRed:!1,g:[\"b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21\",\"bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34\"]}),u(\"p256\",{type:\"short\",prime:null,p:\"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff\",a:\"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc\",b:\"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b\",n:\"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551\",hash:o.sha256,gRed:!1,g:[\"6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296\",\"4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5\"]}),u(\"p384\",{type:\"short\",prime:null,p:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff\",a:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc\",b:\"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef\",n:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973\",hash:o.sha384,gRed:!1,g:[\"aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7\",\"3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f\"]}),u(\"p521\",{type:\"short\",prime:null,p:\"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff\",a:\"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc\",b:\"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00\",n:\"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409\",hash:o.sha512,gRed:!1,g:[\"000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66\",\"00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650\"]}),u(\"curve25519\",{type:\"mont\",prime:\"p25519\",p:\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\",a:\"76d06\",b:\"1\",n:\"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed\",hash:o.sha256,gRed:!1,g:[\"9\"]}),u(\"ed25519\",{type:\"edwards\",prime:\"p25519\",p:\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\",a:\"-1\",c:\"1\",d:\"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3\",n:\"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed\",hash:o.sha256,gRed:!1,g:[\"216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a\",\"6666666666666666666666666666666666666666666666666666666666666658\"]});try{n=r(165)}catch(e){n=void 0}u(\"secp256k1\",{type:\"short\",prime:\"k256\",p:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\",a:\"0\",b:\"7\",n:\"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141\",h:\"1\",hash:o.sha256,beta:\"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee\",lambda:\"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72\",basis:[{a:\"3086d221a7d46bcde86c90e49284eb15\",b:\"-e4437ed6010e88286f547fa90abfe4c3\"},{a:\"114ca50f7a8e2f3f657c1108d9d44cfd8\",b:\"3086d221a7d46bcde86c90e49284eb15\"}],gRed:!1,g:[\"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798\",\"483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8\",n]})},function(e,t,r){var n=t;n.utils=r(8),n.common=r(21),n.sha=r(159),n.ripemd=r(163),n.hmac=r(164),n.sha1=n.sha.sha1,n.sha256=n.sha.sha256,n.sha224=n.sha.sha224,n.sha384=n.sha.sha384,n.sha512=n.sha.sha512,n.ripemd160=n.ripemd.ripemd160},function(e,t,r){\"use strict\";const n=(e,t)=>function(){const r=t.promiseModule,n=new Array(arguments.length);for(let e=0;e<arguments.length;e++)n[e]=arguments[e];return new r((r,i)=>{t.errorFirst?n.push((function(e,n){if(t.multiArgs){const t=new Array(arguments.length-1);for(let e=1;e<arguments.length;e++)t[e-1]=arguments[e];e?(t.unshift(e),i(t)):r(t)}else e?i(e):r(n)})):n.push((function(e){if(t.multiArgs){const e=new Array(arguments.length-1);for(let t=0;t<arguments.length;t++)e[t]=arguments[t];r(e)}else r(e)})),e.apply(this,n)})};e.exports=(e,t)=>{t=Object.assign({exclude:[/.+(Sync|Stream)$/],errorFirst:!0,promiseModule:Promise},t);const r=e=>{const r=t=>\"string\"==typeof t?e===t:t.test(e);return t.include?t.include.some(r):!t.exclude.some(r)};let i;i=\"function\"==typeof e?function(){return t.excludeMain?e.apply(this,arguments):n(e,t).apply(this,arguments)}:Object.create(Object.getPrototypeOf(e));for(const o in e){const a=e[o];i[o]=\"function\"==typeof a&&r(o)?n(a,t):a}return i}},function(e,t){e.exports=function(){for(var e={},t=0;t<arguments.length;t++){var n=arguments[t];for(var i in n)r.call(n,i)&&(e[i]=n[i])}return e};var r=Object.prototype.hasOwnProperty},function(e,t,r){const n=r(10),i=r(9);var o=\"object\"==typeof Reflect?Reflect:null,a=o&&\"function\"==typeof o.apply?o.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};function s(){i.call(this)}function f(e,t,r){try{a(e,t,r)}catch(e){setTimeout(()=>{throw e})}}function u(e,t){for(var r=new Array(t),n=0;n<t;++n)r[n]=e[n];return r}e.exports=s,n.inherits(s,i),s.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var n=\"error\"===e,i=this._events;if(void 0!==i)n=n&&void 0===i.error;else if(!n)return!1;if(n){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var a=new Error(\"Unhandled error.\"+(o?\" (\"+o.message+\")\":\"\"));throw a.context=o,a}var s=i[e];if(void 0===s)return!1;if(\"function\"==typeof s)f(s,this,t);else{var c=s.length,h=u(s,c);for(r=0;r<c;++r)f(h[r],this,t)}return!0}},function(e,t,r){var n=r(83),i=r(182),o=r(183),a=n?n.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":a&&a in Object(e)?i(e):o(e)}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return function(){if(null!==e){var t=e;e=null,t.apply(this,arguments)}}},e.exports=t.default},function(e,t){e.exports=function(e){return null!=e&&\"object\"==typeof e}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return function(){if(null===e)throw new Error(\"Callback was already called.\");var t=e;e=null,t.apply(this,arguments)}},e.exports=t.default},function(e,t,r){\"use strict\";var n=r(214),i=r(40);e.exports=function(e){return i({id:n(),jsonrpc:\"2.0\",params:[]},e)}},function(e,t,r){\"use strict\";var n=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}();var i=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));if(!e)throw new Error(\"JsonRpcEngineMiddlewareSubprovider - no constructorFn specified\");return r._constructorFn=e,r}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),n(t,[{key:\"setEngine\",value:function(e){if(this.middleware)throw new Error(\"JsonRpcEngineMiddlewareSubprovider - subprovider added to engine twice\");var t=e._blockTracker,r=this._constructorFn({engine:e,provider:e,blockTracker:t});if(!r)throw new Error(\"JsonRpcEngineMiddlewareSubprovider - _constructorFn did not return middleware\");if(\"function\"!=typeof r)throw new Error(\"JsonRpcEngineMiddlewareSubprovider - specified middleware is not a function\");this.middleware=r}},{key:\"handleRequest\",value:function(e,t,r){var n={id:e.id};this.middleware(e,n,(function(e){t((function(t,r,i){t?(delete n.result,n.error={message:t.message||t}):n.result=r,e?e(i):i()}))}),(function(e){if(e)return r(e);r(null,n.result)}))}}]),t}(r(29));e.exports=i},function(e,t){e.exports=function(e){return(t,r,n,i)=>{let o;const a=new Promise(e=>{o=e});let s,f;e(t,r,async()=>{f=!0,n(e=>{s=e,o()}),await a}).then(async()=>{f?(await a,s(null)):i(null)}).catch(e=>{s?s(e):i(e)})}}},function(e,t,r){const n=r(41);e.exports=class extends n{constructor(){super(),this.updates=[]}async initialize(){}async update(){throw new Error(\"BaseFilter - no update method specified\")}addResults(e){this.updates=this.updates.concat(e),e.forEach(e=>this.emit(\"update\",e))}addInitialResults(e){}getChangesAndClear(){const e=this.updates;return this.updates=[],e}}},function(e,t){function r(e){return null==e?e:Number.parseInt(e,16)}function n(e){if(null==e)return e;return\"0x\"+e.toString(16)}e.exports=async function({provider:e,fromBlock:t,toBlock:i}){t||(t=i);const o=r(t),a=r(i),s=Array(a-o+1).fill().map((e,t)=>o+t).map(n);return await Promise.all(s.map(t=>function(e,t,r){return new Promise((n,i)=>{e.sendAsync({id:1,jsonrpc:\"2.0\",method:t,params:r},(e,t)=>{if(e)return i(e);n(t.result)})})}(e,\"eth_getBlockByNumber\",[t,!1])))}},function(e,t,r){e.exports=r(257)},function(e,t,r){\"use strict\";(function(t){var n=r(7),i=r(260),o={\"Content-Type\":\"application/x-www-form-urlencoded\"};function a(e,t){!n.isUndefined(e)&&n.isUndefined(e[\"Content-Type\"])&&(e[\"Content-Type\"]=t)}var s,f={adapter:((\"undefined\"!=typeof XMLHttpRequest||void 0!==t)&&(s=r(99)),s),transformRequest:[function(e,t){return i(t,\"Content-Type\"),n.isFormData(e)||n.isArrayBuffer(e)||n.isBuffer(e)||n.isStream(e)||n.isFile(e)||n.isBlob(e)?e:n.isArrayBufferView(e)?e.buffer:n.isURLSearchParams(e)?(a(t,\"application/x-www-form-urlencoded;charset=utf-8\"),e.toString()):n.isObject(e)?(a(t,\"application/json;charset=utf-8\"),JSON.stringify(e)):e}],transformResponse:[function(e){if(\"string\"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};f.headers={common:{Accept:\"application/json, text/plain, */*\"}},n.forEach([\"delete\",\"get\",\"head\"],(function(e){f.headers[e]={}})),n.forEach([\"post\",\"put\",\"patch\"],(function(e){f.headers[e]=n.merge(o)})),e.exports=f}).call(this,r(3))},function(e,t){e.exports={dispatchNodeURL:\"https://dispatch.pokt.network\",dispatchPath:\"/v1/dispatch\",reportPath:\"/v1/report\",relayPath:\"/v1/relay/\"}},function(e,t,r){\"use strict\";var n=r(47),i=r(215),o=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,(function(t){var r=t.blockTracker;return i(Object.assign({blockTracker:r},e))})))}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(n);e.exports=o},function(e,t,r){\"use strict\";(function(t){var n=r(10).inherits,i=r(252),o=r(14),a=r(29),s=r(92).blockTagForPayload;function f(e){this.nonceCache={}}e.exports=f,n(f,a),f.prototype.handleRequest=function(e,r,n){var a=this;switch(e.method){case\"eth_getTransactionCount\":var f=s(e),u=e.params[0].toLowerCase(),c=a.nonceCache[u];return void(\"pending\"===f?c?n(null,c):r((function(e,t,r){if(e)return r();void 0===a.nonceCache[u]&&(a.nonceCache[u]=t),r()})):r());case\"eth_sendRawTransaction\":return void r((function(r,n,s){if(r)return s();var f=e.params[0],u=(o.stripHexPrefix(f),t.from(o.stripHexPrefix(f),\"hex\"),new i(t.from(o.stripHexPrefix(f),\"hex\"))),c=\"0x\"+u.getSenderAddress().toString(\"hex\").toLowerCase(),h=o.bufferToInt(u.nonce),d=(++h).toString(16);d.length%2&&(d=\"0\"+d),d=\"0x\"+d,a.nonceCache[c]=d,s()}));case\"evm_revert\":return a.nonceCache={},void r();default:return void r()}}}).call(this,r(1).Buffer)},function(e,t,r){const n=r(97),i=n.Wallet,o=n.Relay,a=r(277);e.exports={Pocket:a,Wallet:i,Relay:o}},function(e,t,r){\"use strict\";(function(t,n){var i=r(24);e.exports=m;var o,a=r(118);m.ReadableState=v;r(9).EventEmitter;var s=function(e,t){return e.listeners(t).length},f=r(58),u=r(31).Buffer,c=t.Uint8Array||function(){};var h=Object.create(r(19));h.inherits=r(0);var d=r(119),l=void 0;l=d&&d.debuglog?d.debuglog(\"stream\"):function(){};var p,b=r(120),y=r(59);h.inherits(m,f);var g=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function v(e,t){e=e||{};var n=t instanceof(o=o||r(11));this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var i=e.highWaterMark,a=e.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(a||0===a)?a:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new b,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(p||(p=r(20).StringDecoder),this.decoder=new p(e.encoding),this.encoding=e.encoding)}function m(e){if(o=o||r(11),!(this instanceof m))return new m(e);this._readableState=new v(e,this),this.readable=!0,e&&(\"function\"==typeof e.read&&(this._read=e.read),\"function\"==typeof e.destroy&&(this._destroy=e.destroy)),f.call(this)}function w(e,t,r,n,i){var o,a=e._readableState;null===t?(a.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,S(e)}(e,a)):(i||(o=function(e,t){var r;n=t,u.isBuffer(n)||n instanceof c||\"string\"==typeof t||void 0===t||e.objectMode||(r=new TypeError(\"Invalid non-string/buffer chunk\"));var n;return r}(a,t)),o?e.emit(\"error\",o):a.objectMode||t&&t.length>0?(\"string\"==typeof t||a.objectMode||Object.getPrototypeOf(t)===u.prototype||(t=function(e){return u.from(e)}(t)),n?a.endEmitted?e.emit(\"error\",new Error(\"stream.unshift() after end event\")):_(e,a,t,!0):a.ended?e.emit(\"error\",new Error(\"stream.push() after EOF\")):(a.reading=!1,a.decoder&&!r?(t=a.decoder.write(t),a.objectMode||0!==t.length?_(e,a,t,!1):x(e,a)):_(e,a,t,!1))):n||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(a)}function _(e,t,r,n){t.flowing&&0===t.length&&!t.sync?(e.emit(\"data\",r),e.read(0)):(t.length+=t.objectMode?1:r.length,n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&S(e)),x(e,t)}Object.defineProperty(m.prototype,\"destroyed\",{get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),m.prototype.destroy=y.destroy,m.prototype._undestroy=y.undestroy,m.prototype._destroy=function(e,t){this.push(null),t(e)},m.prototype.push=function(e,t){var r,n=this._readableState;return n.objectMode?r=!0:\"string\"==typeof e&&((t=t||n.defaultEncoding)!==n.encoding&&(e=u.from(e,t),t=\"\"),r=!0),w(this,e,t,!1,r)},m.prototype.unshift=function(e){return w(this,e,null,!0,!1)},m.prototype.isPaused=function(){return!1===this._readableState.flowing},m.prototype.setEncoding=function(e){return p||(p=r(20).StringDecoder),this._readableState.decoder=new p(e),this._readableState.encoding=e,this};function E(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function S(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(l(\"emitReadable\",t.flowing),t.emittedReadable=!0,t.sync?i.nextTick(A,e):A(e))}function A(e){l(\"emit readable\"),e.emit(\"readable\"),I(e)}function x(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(k,e,t))}function k(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length<t.highWaterMark&&(l(\"maybeReadMore read 0\"),e.read(0),r!==t.length);)r=t.length;t.readingMore=!1}function M(e){l(\"readable nexttick read 0\"),e.read(0)}function T(e,t){t.reading||(l(\"resume read 0\"),e.read(0)),t.resumeScheduled=!1,t.awaitDrain=0,e.emit(\"resume\"),I(e),t.flowing&&!t.reading&&e.read(0)}function I(e){var t=e._readableState;for(l(\"flow\",t.flowing);t.flowing&&null!==e.read(););}function R(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(\"\"):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;e<t.head.data.length?(n=t.head.data.slice(0,e),t.head.data=t.head.data.slice(e)):n=e===t.head.data.length?t.shift():r?function(e,t){var r=t.head,n=1,i=r.data;e-=i.length;for(;r=r.next;){var o=r.data,a=e>o.length?o.length:e;if(a===o.length?i+=o:i+=o.slice(0,e),0===(e-=a)){a===o.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=o.slice(a));break}++n}return t.length-=n,i}(e,t):function(e,t){var r=u.allocUnsafe(e),n=t.head,i=1;n.data.copy(r),e-=n.data.length;for(;n=n.next;){var o=n.data,a=e>o.length?o.length:e;if(o.copy(r,r.length-e,0,a),0===(e-=a)){a===o.length?(++i,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=o.slice(a));break}++i}return t.length-=i,r}(e,t);return n}(e,t.buffer,t.decoder),r);var r}function P(e){var t=e._readableState;if(t.length>0)throw new Error('\"endReadable()\" called on non-empty stream');t.endEmitted||(t.ended=!0,i.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit(\"end\"))}function B(e,t){for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1}m.prototype.read=function(e){l(\"read\",e),e=parseInt(e,10);var t=this._readableState,r=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&(t.length>=t.highWaterMark||t.ended))return l(\"read: emitReadable\",t.length,t.ended),0===t.length&&t.ended?P(this):S(this),null;if(0===(e=E(e,t))&&t.ended)return 0===t.length&&P(this),null;var n,i=t.needReadable;return l(\"need readable\",i),(0===t.length||t.length-e<t.highWaterMark)&&l(\"length less than watermark\",i=!0),t.ended||t.reading?l(\"reading or ended\",i=!1):i&&(l(\"do read\"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=E(r,t))),null===(n=e>0?R(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&P(this)),null!==n&&this.emit(\"data\",n),n},m.prototype._read=function(e){this.emit(\"error\",new Error(\"_read() is not implemented\"))},m.prototype.pipe=function(e,t){var r=this,o=this._readableState;switch(o.pipesCount){case 0:o.pipes=e;break;case 1:o.pipes=[o.pipes,e];break;default:o.pipes.push(e)}o.pipesCount+=1,l(\"pipe count=%d opts=%j\",o.pipesCount,t);var f=(!t||!1!==t.end)&&e!==n.stdout&&e!==n.stderr?c:m;function u(t,n){l(\"onunpipe\"),t===r&&n&&!1===n.hasUnpiped&&(n.hasUnpiped=!0,l(\"cleanup\"),e.removeListener(\"close\",g),e.removeListener(\"finish\",v),e.removeListener(\"drain\",h),e.removeListener(\"error\",y),e.removeListener(\"unpipe\",u),r.removeListener(\"end\",c),r.removeListener(\"end\",m),r.removeListener(\"data\",b),d=!0,!o.awaitDrain||e._writableState&&!e._writableState.needDrain||h())}function c(){l(\"onend\"),e.end()}o.endEmitted?i.nextTick(f):r.once(\"end\",f),e.on(\"unpipe\",u);var h=function(e){return function(){var t=e._readableState;l(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,\"data\")&&(t.flowing=!0,I(e))}}(r);e.on(\"drain\",h);var d=!1;var p=!1;function b(t){l(\"ondata\"),p=!1,!1!==e.write(t)||p||((1===o.pipesCount&&o.pipes===e||o.pipesCount>1&&-1!==B(o.pipes,e))&&!d&&(l(\"false write response, pause\",r._readableState.awaitDrain),r._readableState.awaitDrain++,p=!0),r.pause())}function y(t){l(\"onerror\",t),m(),e.removeListener(\"error\",y),0===s(e,\"error\")&&e.emit(\"error\",t)}function g(){e.removeListener(\"finish\",v),m()}function v(){l(\"onfinish\"),e.removeListener(\"close\",g),m()}function m(){l(\"unpipe\"),r.unpipe(e)}return r.on(\"data\",b),function(e,t,r){if(\"function\"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,\"error\",y),e.once(\"close\",g),e.once(\"finish\",v),e.emit(\"pipe\",r),o.flowing||(l(\"pipe resume\"),r.resume()),e},m.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(\"unpipe\",this,r)),this;if(!e){var n=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o<i;o++)n[o].emit(\"unpipe\",this,r);return this}var a=B(t.pipes,e);return-1===a||(t.pipes.splice(a,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit(\"unpipe\",this,r)),this},m.prototype.on=function(e,t){var r=f.prototype.on.call(this,e,t);if(\"data\"===e)!1!==this._readableState.flowing&&this.resume();else if(\"readable\"===e){var n=this._readableState;n.endEmitted||n.readableListening||(n.readableListening=n.needReadable=!0,n.emittedReadable=!1,n.reading?n.length&&S(this):i.nextTick(M,this))}return r},m.prototype.addListener=m.prototype.on,m.prototype.resume=function(){var e=this._readableState;return e.flowing||(l(\"resume\"),e.flowing=!0,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,i.nextTick(T,e,t))}(this,e)),this},m.prototype.pause=function(){return l(\"call pause flowing=%j\",this._readableState.flowing),!1!==this._readableState.flowing&&(l(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this},m.prototype.wrap=function(e){var t=this,r=this._readableState,n=!1;for(var i in e.on(\"end\",(function(){if(l(\"wrapped end\"),r.decoder&&!r.ended){var e=r.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on(\"data\",(function(i){(l(\"wrapped data\"),r.decoder&&(i=r.decoder.write(i)),r.objectMode&&null==i)||(r.objectMode||i&&i.length)&&(t.push(i)||(n=!0,e.pause()))})),e)void 0===this[i]&&\"function\"==typeof e[i]&&(this[i]=function(t){return function(){return e[t].apply(e,arguments)}}(i));for(var o=0;o<g.length;o++)e.on(g[o],this.emit.bind(this,g[o]));return this._read=function(t){l(\"wrapped _read\",t),n&&(n=!1,e.resume())},this},Object.defineProperty(m.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),m._fromList=R}).call(this,r(5),r(3))},function(e,t,r){e.exports=r(9).EventEmitter},function(e,t,r){\"use strict\";var n=r(24);function i(e,t){e.emit(\"error\",t)}e.exports={destroy:function(e,t){var r=this,o=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return o||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||n.nextTick(i,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(n.nextTick(i,r,e),r._writableState&&(r._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,r){(function(t){function r(e){try{if(!t.localStorage)return!1}catch(e){return!1}var r=t.localStorage[e];return null!=r&&\"true\"===String(r).toLowerCase()}e.exports=function(e,t){if(r(\"noDeprecation\"))return e;var n=!1;return function(){if(!n){if(r(\"throwDeprecation\"))throw new Error(t);r(\"traceDeprecation\")?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}}}).call(this,r(5))},function(e,t,r){\"use strict\";e.exports=a;var n=r(11),i=Object.create(r(19));function o(e,t){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(!n)return this.emit(\"error\",new Error(\"write callback called multiple times\"));r.writechunk=null,r.writecb=null,null!=t&&this.push(t),n(e);var i=this._readableState;i.reading=!1,(i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}function a(e){if(!(this instanceof a))return new a(e);n.call(this,e),this._transformState={afterTransform:o.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&(\"function\"==typeof e.transform&&(this._transform=e.transform),\"function\"==typeof e.flush&&(this._flush=e.flush)),this.on(\"prefinish\",s)}function s(){var e=this;\"function\"==typeof this._flush?this._flush((function(t,r){f(e,t,r)})):f(this,null,null)}function f(e,t,r){if(t)return e.emit(\"error\",t);if(null!=r&&e.push(r),e._writableState.length)throw new Error(\"Calling transform done when ws.length != 0\");if(e._transformState.transforming)throw new Error(\"Calling transform done when still transforming\");return e.push(null)}i.inherits=r(0),i.inherits(a,n),a.prototype.push=function(e,t){return this._transformState.needTransform=!1,n.prototype.push.call(this,e,t)},a.prototype._transform=function(e,t,r){throw new Error(\"_transform() is not implemented\")},a.prototype._write=function(e,t,r){var n=this._transformState;if(n.writecb=r,n.writechunk=e,n.writeencoding=t,!n.transforming){var i=this._readableState;(n.needTransform||i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}},a.prototype._read=function(e){var t=this._transformState;null!==t.writechunk&&t.writecb&&!t.transforming?(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform)):t.needTransform=!0},a.prototype._destroy=function(e,t){var r=this;n.prototype._destroy.call(this,e,(function(e){t(e),r.emit(\"close\")}))}},function(e){e.exports={COMPRESSED_TYPE_INVALID:\"compressed should be a boolean\",EC_PRIVATE_KEY_TYPE_INVALID:\"private key should be a Buffer\",EC_PRIVATE_KEY_LENGTH_INVALID:\"private key length is invalid\",EC_PRIVATE_KEY_RANGE_INVALID:\"private key range is invalid\",EC_PRIVATE_KEY_TWEAK_ADD_FAIL:\"tweak out of range or resulting private key is invalid\",EC_PRIVATE_KEY_TWEAK_MUL_FAIL:\"tweak out of range\",EC_PRIVATE_KEY_EXPORT_DER_FAIL:\"couldn't export to DER format\",EC_PRIVATE_KEY_IMPORT_DER_FAIL:\"couldn't import from DER format\",EC_PUBLIC_KEYS_TYPE_INVALID:\"public keys should be an Array\",EC_PUBLIC_KEYS_LENGTH_INVALID:\"public keys Array should have at least 1 element\",EC_PUBLIC_KEY_TYPE_INVALID:\"public key should be a Buffer\",EC_PUBLIC_KEY_LENGTH_INVALID:\"public key length is invalid\",EC_PUBLIC_KEY_PARSE_FAIL:\"the public key could not be parsed or is invalid\",EC_PUBLIC_KEY_CREATE_FAIL:\"private was invalid, try again\",EC_PUBLIC_KEY_TWEAK_ADD_FAIL:\"tweak out of range or resulting public key is invalid\",EC_PUBLIC_KEY_TWEAK_MUL_FAIL:\"tweak out of range\",EC_PUBLIC_KEY_COMBINE_FAIL:\"the sum of the public keys is not valid\",ECDH_FAIL:\"scalar was invalid (zero or overflow)\",ECDSA_SIGNATURE_TYPE_INVALID:\"signature should be a Buffer\",ECDSA_SIGNATURE_LENGTH_INVALID:\"signature length is invalid\",ECDSA_SIGNATURE_PARSE_FAIL:\"couldn't parse signature\",ECDSA_SIGNATURE_PARSE_DER_FAIL:\"couldn't parse DER signature\",ECDSA_SIGNATURE_SERIALIZE_DER_FAIL:\"couldn't serialize signature to DER format\",ECDSA_SIGN_FAIL:\"nonce generation function failed or private key is invalid\",ECDSA_RECOVER_FAIL:\"couldn't recover public key from signature\",MSG32_TYPE_INVALID:\"message should be a Buffer\",MSG32_LENGTH_INVALID:\"message length is invalid\",OPTIONS_TYPE_INVALID:\"options should be an Object\",OPTIONS_DATA_TYPE_INVALID:\"options.data should be a Buffer\",OPTIONS_DATA_LENGTH_INVALID:\"options.data length is invalid\",OPTIONS_NONCEFN_TYPE_INVALID:\"options.noncefn should be a Function\",RECOVERY_ID_TYPE_INVALID:\"recovery should be a Number\",RECOVERY_ID_VALUE_INVALID:\"recovery should have value between -1 and 4\",TWEAK_TYPE_INVALID:\"tweak should be a Buffer\",TWEAK_LENGTH_INVALID:\"tweak length is invalid\"}},function(e,t,r){\"use strict\";var n=r(2).Buffer,i=r(138).Transform;function o(e){i.call(this),this._block=n.allocUnsafe(e),this._blockSize=e,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}r(0)(o,i),o.prototype._transform=function(e,t,r){var n=null;try{this.update(e,t)}catch(e){n=e}r(n)},o.prototype._flush=function(e){var t=null;try{this.push(this.digest())}catch(e){t=e}e(t)},o.prototype.update=function(e,t){if(function(e,t){if(!n.isBuffer(e)&&\"string\"!=typeof e)throw new TypeError(t+\" must be a string or a buffer\")}(e,\"Data\"),this._finalized)throw new Error(\"Digest already called\");n.isBuffer(e)||(e=n.from(e,t));for(var r=this._block,i=0;this._blockOffset+e.length-i>=this._blockSize;){for(var o=this._blockOffset;o<this._blockSize;)r[o++]=e[i++];this._update(),this._blockOffset=0}for(;i<e.length;)r[this._blockOffset++]=e[i++];for(var a=0,s=8*e.length;s>0;++a)this._length[a]+=s,(s=this._length[a]/4294967296|0)>0&&(this._length[a]-=4294967296*s);return this},o.prototype._update=function(){throw new Error(\"_update is not implemented\")},o.prototype.digest=function(e){if(this._finalized)throw new Error(\"Digest already called\");this._finalized=!0;var t=this._digest();void 0!==e&&(t=t.toString(e)),this._block.fill(0),this._blockOffset=0;for(var r=0;r<4;++r)this._length[r]=0;return t},o.prototype._digest=function(){throw new Error(\"_digest is not implemented\")},e.exports=o},function(e,t,r){\"use strict\";(function(t,n){var i;e.exports=x,x.ReadableState=A;r(9).EventEmitter;var o=function(e,t){return e.listeners(t).length},a=r(65),s=r(1).Buffer,f=t.Uint8Array||function(){};var u,c=r(139);u=c&&c.debuglog?c.debuglog(\"stream\"):function(){};var h,d,l,p=r(140),b=r(66),y=r(67).getHighWaterMark,g=r(15).codes,v=g.ERR_INVALID_ARG_TYPE,m=g.ERR_STREAM_PUSH_AFTER_EOF,w=g.ERR_METHOD_NOT_IMPLEMENTED,_=g.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;r(0)(x,a);var E=b.errorOrDestroy,S=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function A(e,t,n){i=i||r(16),e=e||{},\"boolean\"!=typeof n&&(n=t instanceof i),this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.readableObjectMode),this.highWaterMark=y(this,e,\"readableHighWaterMark\",n),this.buffer=new p,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==e.emitClose,this.autoDestroy=!!e.autoDestroy,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(h||(h=r(20).StringDecoder),this.decoder=new h(e.encoding),this.encoding=e.encoding)}function x(e){if(i=i||r(16),!(this instanceof x))return new x(e);var t=this instanceof i;this._readableState=new A(e,this,t),this.readable=!0,e&&(\"function\"==typeof e.read&&(this._read=e.read),\"function\"==typeof e.destroy&&(this._destroy=e.destroy)),a.call(this)}function k(e,t,r,n,i){u(\"readableAddChunk\",t);var o,a=e._readableState;if(null===t)a.reading=!1,function(e,t){if(u(\"onEofChunk\"),t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,t.sync?I(e):(t.needReadable=!1,t.emittedReadable||(t.emittedReadable=!0,R(e)))}(e,a);else if(i||(o=function(e,t){var r;n=t,s.isBuffer(n)||n instanceof f||\"string\"==typeof t||void 0===t||e.objectMode||(r=new v(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],t));var n;return r}(a,t)),o)E(e,o);else if(a.objectMode||t&&t.length>0)if(\"string\"==typeof t||a.objectMode||Object.getPrototypeOf(t)===s.prototype||(t=function(e){return s.from(e)}(t)),n)a.endEmitted?E(e,new _):M(e,a,t,!0);else if(a.ended)E(e,new m);else{if(a.destroyed)return!1;a.reading=!1,a.decoder&&!r?(t=a.decoder.write(t),a.objectMode||0!==t.length?M(e,a,t,!1):P(e,a)):M(e,a,t,!1)}else n||(a.reading=!1,P(e,a));return!a.ended&&(a.length<a.highWaterMark||0===a.length)}function M(e,t,r,n){t.flowing&&0===t.length&&!t.sync?(t.awaitDrain=0,e.emit(\"data\",r)):(t.length+=t.objectMode?1:r.length,n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&I(e)),P(e,t)}Object.defineProperty(x.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),x.prototype.destroy=b.destroy,x.prototype._undestroy=b.undestroy,x.prototype._destroy=function(e,t){t(e)},x.prototype.push=function(e,t){var r,n=this._readableState;return n.objectMode?r=!0:\"string\"==typeof e&&((t=t||n.defaultEncoding)!==n.encoding&&(e=s.from(e,t),t=\"\"),r=!0),k(this,e,t,!1,r)},x.prototype.unshift=function(e){return k(this,e,null,!0,!1)},x.prototype.isPaused=function(){return!1===this._readableState.flowing},x.prototype.setEncoding=function(e){h||(h=r(20).StringDecoder);var t=new h(e);this._readableState.decoder=t,this._readableState.encoding=this._readableState.decoder.encoding;for(var n=this._readableState.buffer.head,i=\"\";null!==n;)i+=t.write(n.data),n=n.next;return this._readableState.buffer.clear(),\"\"!==i&&this._readableState.buffer.push(i),this._readableState.length=i.length,this};function T(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function(e){return e>=1073741824?e=1073741824:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function I(e){var t=e._readableState;u(\"emitReadable\",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(u(\"emitReadable\",t.flowing),t.emittedReadable=!0,n.nextTick(R,e))}function R(e){var t=e._readableState;u(\"emitReadable_\",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit(\"readable\"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,N(e)}function P(e,t){t.readingMore||(t.readingMore=!0,n.nextTick(L,e,t))}function L(e,t){for(;!t.reading&&!t.ended&&(t.length<t.highWaterMark||t.flowing&&0===t.length);){var r=t.length;if(u(\"maybeReadMore read 0\"),e.read(0),r===t.length)break}t.readingMore=!1}function B(e){var t=e._readableState;t.readableListening=e.listenerCount(\"readable\")>0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount(\"data\")>0&&e.resume()}function C(e){u(\"readable nexttick read 0\"),e.read(0)}function O(e,t){u(\"resume\",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit(\"resume\"),N(e),t.flowing&&!t.reading&&e.read(0)}function N(e){var t=e._readableState;for(u(\"flow\",t.flowing);t.flowing&&null!==e.read(););}function j(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(\"\"):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):r=t.buffer.consume(e,t.decoder),r);var r}function D(e){var t=e._readableState;u(\"endReadable\",t.endEmitted),t.endEmitted||(t.ended=!0,n.nextTick(U,t,e))}function U(e,t){if(u(\"endReadableNT\",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit(\"end\"),e.autoDestroy)){var r=t._writableState;(!r||r.autoDestroy&&r.finished)&&t.destroy()}}function z(e,t){for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1}x.prototype.read=function(e){u(\"read\",e),e=parseInt(e,10);var t=this._readableState,r=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&((0!==t.highWaterMark?t.length>=t.highWaterMark:t.length>0)||t.ended))return u(\"read: emitReadable\",t.length,t.ended),0===t.length&&t.ended?D(this):I(this),null;if(0===(e=T(e,t))&&t.ended)return 0===t.length&&D(this),null;var n,i=t.needReadable;return u(\"need readable\",i),(0===t.length||t.length-e<t.highWaterMark)&&u(\"length less than watermark\",i=!0),t.ended||t.reading?u(\"reading or ended\",i=!1):i&&(u(\"do read\"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=T(r,t))),null===(n=e>0?j(e,t):null)?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&D(this)),null!==n&&this.emit(\"data\",n),n},x.prototype._read=function(e){E(this,new w(\"_read()\"))},x.prototype.pipe=function(e,t){var r=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,u(\"pipe count=%d opts=%j\",i.pipesCount,t);var a=(!t||!1!==t.end)&&e!==n.stdout&&e!==n.stderr?f:y;function s(t,n){u(\"onunpipe\"),t===r&&n&&!1===n.hasUnpiped&&(n.hasUnpiped=!0,u(\"cleanup\"),e.removeListener(\"close\",p),e.removeListener(\"finish\",b),e.removeListener(\"drain\",c),e.removeListener(\"error\",l),e.removeListener(\"unpipe\",s),r.removeListener(\"end\",f),r.removeListener(\"end\",y),r.removeListener(\"data\",d),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||c())}function f(){u(\"onend\"),e.end()}i.endEmitted?n.nextTick(a):r.once(\"end\",a),e.on(\"unpipe\",s);var c=function(e){return function(){var t=e._readableState;u(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&o(e,\"data\")&&(t.flowing=!0,N(e))}}(r);e.on(\"drain\",c);var h=!1;function d(t){u(\"ondata\");var n=e.write(t);u(\"dest.write\",n),!1===n&&((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==z(i.pipes,e))&&!h&&(u(\"false write response, pause\",i.awaitDrain),i.awaitDrain++),r.pause())}function l(t){u(\"onerror\",t),y(),e.removeListener(\"error\",l),0===o(e,\"error\")&&E(e,t)}function p(){e.removeListener(\"finish\",b),y()}function b(){u(\"onfinish\"),e.removeListener(\"close\",p),y()}function y(){u(\"unpipe\"),r.unpipe(e)}return r.on(\"data\",d),function(e,t,r){if(\"function\"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,\"error\",l),e.once(\"close\",p),e.once(\"finish\",b),e.emit(\"pipe\",r),i.flowing||(u(\"pipe resume\"),r.resume()),e},x.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(\"unpipe\",this,r)),this;if(!e){var n=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o<i;o++)n[o].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var a=z(t.pipes,e);return-1===a||(t.pipes.splice(a,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit(\"unpipe\",this,r)),this},x.prototype.on=function(e,t){var r=a.prototype.on.call(this,e,t),i=this._readableState;return\"data\"===e?(i.readableListening=this.listenerCount(\"readable\")>0,!1!==i.flowing&&this.resume()):\"readable\"===e&&(i.endEmitted||i.readableListening||(i.readableListening=i.needReadable=!0,i.flowing=!1,i.emittedReadable=!1,u(\"on readable\",i.length,i.reading),i.length?I(this):i.reading||n.nextTick(C,this))),r},x.prototype.addListener=x.prototype.on,x.prototype.removeListener=function(e,t){var r=a.prototype.removeListener.call(this,e,t);return\"readable\"===e&&n.nextTick(B,this),r},x.prototype.removeAllListeners=function(e){var t=a.prototype.removeAllListeners.apply(this,arguments);return\"readable\"!==e&&void 0!==e||n.nextTick(B,this),t},x.prototype.resume=function(){var e=this._readableState;return e.flowing||(u(\"resume\"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,n.nextTick(O,e,t))}(this,e)),e.paused=!1,this},x.prototype.pause=function(){return u(\"call pause flowing=%j\",this._readableState.flowing),!1!==this._readableState.flowing&&(u(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this},x.prototype.wrap=function(e){var t=this,r=this._readableState,n=!1;for(var i in e.on(\"end\",(function(){if(u(\"wrapped end\"),r.decoder&&!r.ended){var e=r.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on(\"data\",(function(i){(u(\"wrapped data\"),r.decoder&&(i=r.decoder.write(i)),r.objectMode&&null==i)||(r.objectMode||i&&i.length)&&(t.push(i)||(n=!0,e.pause()))})),e)void 0===this[i]&&\"function\"==typeof e[i]&&(this[i]=function(t){return function(){return e[t].apply(e,arguments)}}(i));for(var o=0;o<S.length;o++)e.on(S[o],this.emit.bind(this,S[o]));return this._read=function(t){u(\"wrapped _read\",t),n&&(n=!1,e.resume())},this},\"function\"==typeof Symbol&&(x.prototype[Symbol.asyncIterator]=function(){return void 0===d&&(d=r(142)),d(this)}),Object.defineProperty(x.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(x.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(x.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}}),x._fromList=j,Object.defineProperty(x.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}}),\"function\"==typeof Symbol&&(x.from=function(e,t){return void 0===l&&(l=r(143)),l(x,e,t)})}).call(this,r(5),r(3))},function(e,t,r){e.exports=r(9).EventEmitter},function(e,t,r){\"use strict\";(function(t){function r(e,t){i(e,t),n(e)}function n(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit(\"close\")}function i(e,t){e.emit(\"error\",t)}e.exports={destroy:function(e,o){var a=this,s=this._readableState&&this._readableState.destroyed,f=this._writableState&&this._writableState.destroyed;return s||f?(o?o(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,t.nextTick(i,this,e)):t.nextTick(i,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!o&&e?a._writableState?a._writableState.errorEmitted?t.nextTick(n,a):(a._writableState.errorEmitted=!0,t.nextTick(r,a,e)):t.nextTick(r,a,e):o?(t.nextTick(n,a),o(e)):t.nextTick(n,a)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(e,t){var r=e._readableState,n=e._writableState;r&&r.autoDestroy||n&&n.autoDestroy?e.destroy(t):e.emit(\"error\",t)}}}).call(this,r(3))},function(e,t,r){\"use strict\";var n=r(15).codes.ERR_INVALID_OPT_VALUE;e.exports={getHighWaterMark:function(e,t,r,i){var o=function(e,t,r){return null!=e.highWaterMark?e.highWaterMark:t?e[r]:null}(t,i,r);if(null!=o){if(!isFinite(o)||Math.floor(o)!==o||o<0)throw new n(i?r:\"highWaterMark\",o);return Math.floor(o)}return e.objectMode?16:16384}}},function(e,t,r){\"use strict\";(function(t,n){function i(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,r){var n=e.entry;e.entry=null;for(;n;){var i=n.callback;t.pendingcb--,i(r),n=n.next}t.corkedRequestsFree.next=e}(t,e)}}var o;e.exports=x,x.WritableState=A;var a={deprecate:r(60)},s=r(65),f=r(1).Buffer,u=t.Uint8Array||function(){};var c,h=r(66),d=r(67).getHighWaterMark,l=r(15).codes,p=l.ERR_INVALID_ARG_TYPE,b=l.ERR_METHOD_NOT_IMPLEMENTED,y=l.ERR_MULTIPLE_CALLBACK,g=l.ERR_STREAM_CANNOT_PIPE,v=l.ERR_STREAM_DESTROYED,m=l.ERR_STREAM_NULL_VALUES,w=l.ERR_STREAM_WRITE_AFTER_END,_=l.ERR_UNKNOWN_ENCODING,E=h.errorOrDestroy;function S(){}function A(e,t,a){o=o||r(16),e=e||{},\"boolean\"!=typeof a&&(a=t instanceof o),this.objectMode=!!e.objectMode,a&&(this.objectMode=this.objectMode||!!e.writableObjectMode),this.highWaterMark=d(this,e,\"writableHighWaterMark\",a),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var s=!1===e.decodeStrings;this.decodeStrings=!s,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var r=e._writableState,i=r.sync,o=r.writecb;if(\"function\"!=typeof o)throw new y;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function(e,t,r,i,o){--t.pendingcb,r?(n.nextTick(o,i),n.nextTick(P,e,t),e._writableState.errorEmitted=!0,E(e,i)):(o(i),e._writableState.errorEmitted=!0,E(e,i),P(e,t))}(e,r,i,t,o);else{var a=I(r)||e.destroyed;a||r.corked||r.bufferProcessing||!r.bufferedRequest||T(e,r),i?n.nextTick(M,e,r,a,o):M(e,r,a,o)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==e.emitClose,this.autoDestroy=!!e.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new i(this)}function x(e){var t=this instanceof(o=o||r(16));if(!t&&!c.call(x,this))return new x(e);this._writableState=new A(e,this,t),this.writable=!0,e&&(\"function\"==typeof e.write&&(this._write=e.write),\"function\"==typeof e.writev&&(this._writev=e.writev),\"function\"==typeof e.destroy&&(this._destroy=e.destroy),\"function\"==typeof e.final&&(this._final=e.final)),s.call(this)}function k(e,t,r,n,i,o,a){t.writelen=n,t.writecb=a,t.writing=!0,t.sync=!0,t.destroyed?t.onwrite(new v(\"write\")):r?e._writev(i,t.onwrite):e._write(i,o,t.onwrite),t.sync=!1}function M(e,t,r,n){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit(\"drain\"))}(e,t),t.pendingcb--,n(),P(e,t)}function T(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var n=t.bufferedRequestCount,o=new Array(n),a=t.corkedRequestsFree;a.entry=r;for(var s=0,f=!0;r;)o[s]=r,r.isBuf||(f=!1),r=r.next,s+=1;o.allBuffers=f,k(e,t,!0,t.length,o,\"\",a.finish),t.pendingcb++,t.lastBufferedRequest=null,a.next?(t.corkedRequestsFree=a.next,a.next=null):t.corkedRequestsFree=new i(t),t.bufferedRequestCount=0}else{for(;r;){var u=r.chunk,c=r.encoding,h=r.callback;if(k(e,t,!1,t.objectMode?1:u.length,u,c,h),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function I(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function R(e,t){e._final((function(r){t.pendingcb--,r&&E(e,r),t.prefinished=!0,e.emit(\"prefinish\"),P(e,t)}))}function P(e,t){var r=I(t);if(r&&(function(e,t){t.prefinished||t.finalCalled||(\"function\"!=typeof e._final||t.destroyed?(t.prefinished=!0,e.emit(\"prefinish\")):(t.pendingcb++,t.finalCalled=!0,n.nextTick(R,e,t)))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit(\"finish\"),t.autoDestroy))){var i=e._readableState;(!i||i.autoDestroy&&i.endEmitted)&&e.destroy()}return r}r(0)(x,s),A.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(A.prototype,\"buffer\",{get:a.deprecate((function(){return this.getBuffer()}),\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(e){}}(),\"function\"==typeof Symbol&&Symbol.hasInstance&&\"function\"==typeof Function.prototype[Symbol.hasInstance]?(c=Function.prototype[Symbol.hasInstance],Object.defineProperty(x,Symbol.hasInstance,{value:function(e){return!!c.call(this,e)||this===x&&(e&&e._writableState instanceof A)}})):c=function(e){return e instanceof this},x.prototype.pipe=function(){E(this,new g)},x.prototype.write=function(e,t,r){var i,o=this._writableState,a=!1,s=!o.objectMode&&(i=e,f.isBuffer(i)||i instanceof u);return s&&!f.isBuffer(e)&&(e=function(e){return f.from(e)}(e)),\"function\"==typeof t&&(r=t,t=null),s?t=\"buffer\":t||(t=o.defaultEncoding),\"function\"!=typeof r&&(r=S),o.ending?function(e,t){var r=new w;E(e,r),n.nextTick(t,r)}(this,r):(s||function(e,t,r,i){var o;return null===r?o=new m:\"string\"==typeof r||t.objectMode||(o=new p(\"chunk\",[\"string\",\"Buffer\"],r)),!o||(E(e,o),n.nextTick(i,o),!1)}(this,o,e,r))&&(o.pendingcb++,a=function(e,t,r,n,i,o){if(!r){var a=function(e,t,r){e.objectMode||!1===e.decodeStrings||\"string\"!=typeof t||(t=f.from(t,r));return t}(t,n,i);n!==a&&(r=!0,i=\"buffer\",n=a)}var s=t.objectMode?1:n.length;t.length+=s;var u=t.length<t.highWaterMark;u||(t.needDrain=!0);if(t.writing||t.corked){var c=t.lastBufferedRequest;t.lastBufferedRequest={chunk:n,encoding:i,isBuf:r,callback:o,next:null},c?c.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else k(e,t,!1,s,n,i,o);return u}(this,o,s,e,t,r)),a},x.prototype.cork=function(){this._writableState.corked++},x.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.bufferProcessing||!e.bufferedRequest||T(this,e))},x.prototype.setDefaultEncoding=function(e){if(\"string\"==typeof e&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new _(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(x.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(x.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),x.prototype._write=function(e,t,r){r(new b(\"_write()\"))},x.prototype._writev=null,x.prototype.end=function(e,t,r){var i=this._writableState;return\"function\"==typeof e?(r=e,e=null,t=null):\"function\"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),i.corked&&(i.corked=1,this.uncork()),i.ending||function(e,t,r){t.ending=!0,P(e,t),r&&(t.finished?n.nextTick(r):e.once(\"finish\",r));t.ended=!0,e.writable=!1}(this,i,r),this},Object.defineProperty(x.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(x.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),x.prototype.destroy=h.destroy,x.prototype._undestroy=h.undestroy,x.prototype._destroy=function(e,t){t(e)}}).call(this,r(5),r(3))},function(e,t,r){\"use strict\";e.exports=c;var n=r(15).codes,i=n.ERR_METHOD_NOT_IMPLEMENTED,o=n.ERR_MULTIPLE_CALLBACK,a=n.ERR_TRANSFORM_ALREADY_TRANSFORMING,s=n.ERR_TRANSFORM_WITH_LENGTH_0,f=r(16);function u(e,t){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(null===n)return this.emit(\"error\",new o);r.writechunk=null,r.writecb=null,null!=t&&this.push(t),n(e);var i=this._readableState;i.reading=!1,(i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}function c(e){if(!(this instanceof c))return new c(e);f.call(this,e),this._transformState={afterTransform:u.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&(\"function\"==typeof e.transform&&(this._transform=e.transform),\"function\"==typeof e.flush&&(this._flush=e.flush)),this.on(\"prefinish\",h)}function h(){var e=this;\"function\"!=typeof this._flush||this._readableState.destroyed?d(this,null,null):this._flush((function(t,r){d(e,t,r)}))}function d(e,t,r){if(t)return e.emit(\"error\",t);if(null!=r&&e.push(r),e._writableState.length)throw new s;if(e._transformState.transforming)throw new a;return e.push(null)}r(0)(c,f),c.prototype.push=function(e,t){return this._transformState.needTransform=!1,f.prototype.push.call(this,e,t)},c.prototype._transform=function(e,t,r){r(new i(\"_transform()\"))},c.prototype._write=function(e,t,r){var n=this._transformState;if(n.writecb=r,n.writechunk=e,n.writeencoding=t,!n.transforming){var i=this._readableState;(n.needTransform||i.needReadable||i.length<i.highWaterMark)&&this._read(i.highWaterMark)}},c.prototype._read=function(e){var t=this._transformState;null===t.writechunk||t.transforming?t.needTransform=!0:(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform))},c.prototype._destroy=function(e,t){f.prototype._destroy.call(this,e,(function(e){t(e)}))}},function(e,t,r){var n=r(0),i=r(17),o=r(2).Buffer,a=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],s=new Array(64);function f(){this.init(),this._w=s,i.call(this,64,56)}function u(e,t,r){return r^e&(t^r)}function c(e,t,r){return e&t|r&(e|t)}function h(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function d(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function l(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}n(f,i),f.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},f.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,f=0|this._e,p=0|this._f,b=0|this._g,y=0|this._h,g=0;g<16;++g)r[g]=e.readInt32BE(4*g);for(;g<64;++g)r[g]=0|(((t=r[g-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+r[g-7]+l(r[g-15])+r[g-16];for(var v=0;v<64;++v){var m=y+d(f)+u(f,p,b)+a[v]+r[v]|0,w=h(n)+c(n,i,o)|0;y=b,b=p,p=f,f=s+m|0,s=o,o=i,i=n,n=m+w|0}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=f+this._e|0,this._f=p+this._f|0,this._g=b+this._g|0,this._h=y+this._h|0},f.prototype._hash=function(){var e=o.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},e.exports=f},function(e,t,r){var n=r(0),i=r(17),o=r(2).Buffer,a=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],s=new Array(160);function f(){this.init(),this._w=s,i.call(this,128,112)}function u(e,t,r){return r^e&(t^r)}function c(e,t,r){return e&t|r&(e|t)}function h(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function d(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function l(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function p(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function b(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function y(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function g(e,t){return e>>>0<t>>>0?1:0}n(f,i),f.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},f.prototype._update=function(e){for(var t=this._w,r=0|this._ah,n=0|this._bh,i=0|this._ch,o=0|this._dh,s=0|this._eh,f=0|this._fh,v=0|this._gh,m=0|this._hh,w=0|this._al,_=0|this._bl,E=0|this._cl,S=0|this._dl,A=0|this._el,x=0|this._fl,k=0|this._gl,M=0|this._hl,T=0;T<32;T+=2)t[T]=e.readInt32BE(4*T),t[T+1]=e.readInt32BE(4*T+4);for(;T<160;T+=2){var I=t[T-30],R=t[T-30+1],P=l(I,R),L=p(R,I),B=b(I=t[T-4],R=t[T-4+1]),C=y(R,I),O=t[T-14],N=t[T-14+1],j=t[T-32],D=t[T-32+1],U=L+N|0,z=P+O+g(U,L)|0;z=(z=z+B+g(U=U+C|0,C)|0)+j+g(U=U+D|0,D)|0,t[T]=z,t[T+1]=U}for(var q=0;q<160;q+=2){z=t[q],U=t[q+1];var F=c(r,n,i),K=c(w,_,E),H=h(r,w),V=h(w,r),Y=d(s,A),W=d(A,s),G=a[q],Z=a[q+1],J=u(s,f,v),$=u(A,x,k),X=M+W|0,Q=m+Y+g(X,M)|0;Q=(Q=(Q=Q+J+g(X=X+$|0,$)|0)+G+g(X=X+Z|0,Z)|0)+z+g(X=X+U|0,U)|0;var ee=V+K|0,te=H+F+g(ee,V)|0;m=v,M=k,v=f,k=x,f=s,x=A,s=o+Q+g(A=S+X|0,S)|0,o=i,S=E,i=n,E=_,n=r,_=w,r=Q+te+g(w=X+ee|0,X)|0}this._al=this._al+w|0,this._bl=this._bl+_|0,this._cl=this._cl+E|0,this._dl=this._dl+S|0,this._el=this._el+A|0,this._fl=this._fl+x|0,this._gl=this._gl+k|0,this._hl=this._hl+M|0,this._ah=this._ah+r+g(this._al,w)|0,this._bh=this._bh+n+g(this._bl,_)|0,this._ch=this._ch+i+g(this._cl,E)|0,this._dh=this._dh+o+g(this._dl,S)|0,this._eh=this._eh+s+g(this._el,A)|0,this._fh=this._fh+f+g(this._fl,x)|0,this._gh=this._gh+v+g(this._gl,k)|0,this._hh=this._hh+m+g(this._hl,M)|0},f.prototype._hash=function(){var e=o.allocUnsafe(64);function t(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},e.exports=f},function(e,t,r){\"use strict\";var n=t;function i(e){return 1===e.length?\"0\"+e:e}function o(e){for(var t=\"\",r=0;r<e.length;r++)t+=i(e[r].toString(16));return t}n.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if(\"string\"!=typeof e){for(var n=0;n<e.length;n++)r[n]=0|e[n];return r}if(\"hex\"===t){(e=e.replace(/[^a-z0-9]+/gi,\"\")).length%2!=0&&(e=\"0\"+e);for(n=0;n<e.length;n+=2)r.push(parseInt(e[n]+e[n+1],16))}else for(n=0;n<e.length;n++){var i=e.charCodeAt(n),o=i>>8,a=255&i;o?r.push(o,a):r.push(a)}return r},n.zero2=i,n.toHex=o,n.encode=function(e,t){return\"hex\"===t?o(e):e}},function(e,t,r){var n;function i(e){this.rand=e}if(e.exports=function(e){return n||(n=new i(null)),n.generate(e)},e.exports.Rand=i,i.prototype.generate=function(e){return this._rand(e)},i.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),r=0;r<t.length;r++)t[r]=this.rand.getByte();return t},\"object\"==typeof self)self.crypto&&self.crypto.getRandomValues?i.prototype._rand=function(e){var t=new Uint8Array(e);return self.crypto.getRandomValues(t),t}:self.msCrypto&&self.msCrypto.getRandomValues?i.prototype._rand=function(e){var t=new Uint8Array(e);return self.msCrypto.getRandomValues(t),t}:\"object\"==typeof window&&(i.prototype._rand=function(){throw new Error(\"Not implemented yet\")});else try{var o=r(155);if(\"function\"!=typeof o.randomBytes)throw new Error(\"Not supported\");i.prototype._rand=function(e){return o.randomBytes(e)}}catch(e){}},function(e,t,r){\"use strict\";var n=t;n.base=r(26),n.short=r(156),n.mont=r(157),n.edwards=r(158)},function(e,t,r){\"use strict\";var n=r(8).rotr32;function i(e,t,r){return e&t^~e&r}function o(e,t,r){return e&t^e&r^t&r}function a(e,t,r){return e^t^r}t.ft_1=function(e,t,r,n){return 0===e?i(t,r,n):1===e||3===e?a(t,r,n):2===e?o(t,r,n):void 0},t.ch32=i,t.maj32=o,t.p32=a,t.s0_256=function(e){return n(e,2)^n(e,13)^n(e,22)},t.s1_256=function(e){return n(e,6)^n(e,11)^n(e,25)},t.g0_256=function(e){return n(e,7)^n(e,18)^e>>>3},t.g1_256=function(e){return n(e,17)^n(e,19)^e>>>10}},function(e,t,r){\"use strict\";var n=r(8),i=r(21),o=r(75),a=r(12),s=n.sum32,f=n.sum32_4,u=n.sum32_5,c=o.ch32,h=o.maj32,d=o.s0_256,l=o.s1_256,p=o.g0_256,b=o.g1_256,y=i.BlockHash,g=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function v(){if(!(this instanceof v))return new v;y.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=g,this.W=new Array(64)}n.inherits(v,y),e.exports=v,v.blockSize=512,v.outSize=256,v.hmacStrength=192,v.padLength=64,v.prototype._update=function(e,t){for(var r=this.W,n=0;n<16;n++)r[n]=e[t+n];for(;n<r.length;n++)r[n]=f(b(r[n-2]),r[n-7],p(r[n-15]),r[n-16]);var i=this.h[0],o=this.h[1],y=this.h[2],g=this.h[3],v=this.h[4],m=this.h[5],w=this.h[6],_=this.h[7];for(a(this.k.length===r.length),n=0;n<r.length;n++){var E=u(_,l(v),c(v,m,w),this.k[n],r[n]),S=s(d(i),h(i,o,y));_=w,w=m,m=v,v=s(g,E),g=y,y=o,o=i,i=s(E,S)}this.h[0]=s(this.h[0],i),this.h[1]=s(this.h[1],o),this.h[2]=s(this.h[2],y),this.h[3]=s(this.h[3],g),this.h[4]=s(this.h[4],v),this.h[5]=s(this.h[5],m),this.h[6]=s(this.h[6],w),this.h[7]=s(this.h[7],_)},v.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h,\"big\"):n.split32(this.h,\"big\")}},function(e,t,r){\"use strict\";var n=r(8),i=r(21),o=r(12),a=n.rotr64_hi,s=n.rotr64_lo,f=n.shr64_hi,u=n.shr64_lo,c=n.sum64,h=n.sum64_hi,d=n.sum64_lo,l=n.sum64_4_hi,p=n.sum64_4_lo,b=n.sum64_5_hi,y=n.sum64_5_lo,g=i.BlockHash,v=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function m(){if(!(this instanceof m))return new m;g.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=v,this.W=new Array(160)}function w(e,t,r,n,i){var o=e&r^~e&i;return o<0&&(o+=4294967296),o}function _(e,t,r,n,i,o){var a=t&n^~t&o;return a<0&&(a+=4294967296),a}function E(e,t,r,n,i){var o=e&r^e&i^r&i;return o<0&&(o+=4294967296),o}function S(e,t,r,n,i,o){var a=t&n^t&o^n&o;return a<0&&(a+=4294967296),a}function A(e,t){var r=a(e,t,28)^a(t,e,2)^a(t,e,7);return r<0&&(r+=4294967296),r}function x(e,t){var r=s(e,t,28)^s(t,e,2)^s(t,e,7);return r<0&&(r+=4294967296),r}function k(e,t){var r=a(e,t,14)^a(e,t,18)^a(t,e,9);return r<0&&(r+=4294967296),r}function M(e,t){var r=s(e,t,14)^s(e,t,18)^s(t,e,9);return r<0&&(r+=4294967296),r}function T(e,t){var r=a(e,t,1)^a(e,t,8)^f(e,t,7);return r<0&&(r+=4294967296),r}function I(e,t){var r=s(e,t,1)^s(e,t,8)^u(e,t,7);return r<0&&(r+=4294967296),r}function R(e,t){var r=a(e,t,19)^a(t,e,29)^f(e,t,6);return r<0&&(r+=4294967296),r}function P(e,t){var r=s(e,t,19)^s(t,e,29)^u(e,t,6);return r<0&&(r+=4294967296),r}n.inherits(m,g),e.exports=m,m.blockSize=1024,m.outSize=512,m.hmacStrength=192,m.padLength=128,m.prototype._prepareBlock=function(e,t){for(var r=this.W,n=0;n<32;n++)r[n]=e[t+n];for(;n<r.length;n+=2){var i=R(r[n-4],r[n-3]),o=P(r[n-4],r[n-3]),a=r[n-14],s=r[n-13],f=T(r[n-30],r[n-29]),u=I(r[n-30],r[n-29]),c=r[n-32],h=r[n-31];r[n]=l(i,o,a,s,f,u,c,h),r[n+1]=p(i,o,a,s,f,u,c,h)}},m.prototype._update=function(e,t){this._prepareBlock(e,t);var r=this.W,n=this.h[0],i=this.h[1],a=this.h[2],s=this.h[3],f=this.h[4],u=this.h[5],l=this.h[6],p=this.h[7],g=this.h[8],v=this.h[9],m=this.h[10],T=this.h[11],I=this.h[12],R=this.h[13],P=this.h[14],L=this.h[15];o(this.k.length===r.length);for(var B=0;B<r.length;B+=2){var C=P,O=L,N=k(g,v),j=M(g,v),D=w(g,v,m,T,I),U=_(g,v,m,T,I,R),z=this.k[B],q=this.k[B+1],F=r[B],K=r[B+1],H=b(C,O,N,j,D,U,z,q,F,K),V=y(C,O,N,j,D,U,z,q,F,K);C=A(n,i),O=x(n,i),N=E(n,i,a,s,f),j=S(n,i,a,s,f,u);var Y=h(C,O,N,j),W=d(C,O,N,j);P=I,L=R,I=m,R=T,m=g,T=v,g=h(l,p,H,V),v=d(p,p,H,V),l=f,p=u,f=a,u=s,a=n,s=i,n=h(H,V,Y,W),i=d(H,V,Y,W)}c(this.h,0,n,i),c(this.h,2,a,s),c(this.h,4,f,u),c(this.h,6,l,p),c(this.h,8,g,v),c(this.h,10,m,T),c(this.h,12,I,R),c(this.h,14,P,L)},m.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h,\"big\"):n.split32(this.h,\"big\")}},function(e,t,r){\"use strict\";(function(t){var n=r(173);\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */function i(e,t){if(e===t)return 0;for(var r=e.length,n=t.length,i=0,o=Math.min(r,n);i<o;++i)if(e[i]!==t[i]){r=e[i],n=t[i];break}return r<n?-1:n<r?1:0}function o(e){return t.Buffer&&\"function\"==typeof t.Buffer.isBuffer?t.Buffer.isBuffer(e):!(null==e||!e._isBuffer)}var a=r(10),s=Object.prototype.hasOwnProperty,f=Array.prototype.slice,u=\"foo\"===function(){}.name;function c(e){return Object.prototype.toString.call(e)}function h(e){return!o(e)&&(\"function\"==typeof t.ArrayBuffer&&(\"function\"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):!!e&&(e instanceof DataView||!!(e.buffer&&e.buffer instanceof ArrayBuffer))))}var d=e.exports=v,l=/\\s*function\\s+([^\\(\\s]*)\\s*/;function p(e){if(a.isFunction(e)){if(u)return e.name;var t=e.toString().match(l);return t&&t[1]}}function b(e,t){return\"string\"==typeof e?e.length<t?e:e.slice(0,t):e}function y(e){if(u||!a.isFunction(e))return a.inspect(e);var t=p(e);return\"[Function\"+(t?\": \"+t:\"\")+\"]\"}function g(e,t,r,n,i){throw new d.AssertionError({message:r,actual:e,expected:t,operator:n,stackStartFunction:i})}function v(e,t){e||g(e,!0,t,\"==\",d.ok)}function m(e,t,r,n){if(e===t)return!0;if(o(e)&&o(t))return 0===i(e,t);if(a.isDate(e)&&a.isDate(t))return e.getTime()===t.getTime();if(a.isRegExp(e)&&a.isRegExp(t))return e.source===t.source&&e.global===t.global&&e.multiline===t.multiline&&e.lastIndex===t.lastIndex&&e.ignoreCase===t.ignoreCase;if(null!==e&&\"object\"==typeof e||null!==t&&\"object\"==typeof t){if(h(e)&&h(t)&&c(e)===c(t)&&!(e instanceof Float32Array||e instanceof Float64Array))return 0===i(new Uint8Array(e.buffer),new Uint8Array(t.buffer));if(o(e)!==o(t))return!1;var s=(n=n||{actual:[],expected:[]}).actual.indexOf(e);return-1!==s&&s===n.expected.indexOf(t)||(n.actual.push(e),n.expected.push(t),function(e,t,r,n){if(null==e||null==t)return!1;if(a.isPrimitive(e)||a.isPrimitive(t))return e===t;if(r&&Object.getPrototypeOf(e)!==Object.getPrototypeOf(t))return!1;var i=w(e),o=w(t);if(i&&!o||!i&&o)return!1;if(i)return e=f.call(e),t=f.call(t),m(e,t,r);var s,u,c=S(e),h=S(t);if(c.length!==h.length)return!1;for(c.sort(),h.sort(),u=c.length-1;u>=0;u--)if(c[u]!==h[u])return!1;for(u=c.length-1;u>=0;u--)if(s=c[u],!m(e[s],t[s],r,n))return!1;return!0}(e,t,r,n))}return r?e===t:e==t}function w(e){return\"[object Arguments]\"==Object.prototype.toString.call(e)}function _(e,t){if(!e||!t)return!1;if(\"[object RegExp]\"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function E(e,t,r,n){var i;if(\"function\"!=typeof t)throw new TypeError('\"block\" argument must be a function');\"string\"==typeof r&&(n=r,r=null),i=function(e){var t;try{e()}catch(e){t=e}return t}(t),n=(r&&r.name?\" (\"+r.name+\").\":\".\")+(n?\" \"+n:\".\"),e&&!i&&g(i,r,\"Missing expected exception\"+n);var o=\"string\"==typeof n,s=!e&&i&&!r;if((!e&&a.isError(i)&&o&&_(i,r)||s)&&g(i,r,\"Got unwanted exception\"+n),e&&i&&r&&!_(i,r)||!e&&i)throw i}d.AssertionError=function(e){this.name=\"AssertionError\",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return b(y(e.actual),128)+\" \"+e.operator+\" \"+b(y(e.expected),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||g;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var r=new Error;if(r.stack){var n=r.stack,i=p(t),o=n.indexOf(\"\\n\"+i);if(o>=0){var a=n.indexOf(\"\\n\",o+1);n=n.substring(a+1)}this.stack=n}}},a.inherits(d.AssertionError,Error),d.fail=g,d.ok=v,d.equal=function(e,t,r){e!=t&&g(e,t,r,\"==\",d.equal)},d.notEqual=function(e,t,r){e==t&&g(e,t,r,\"!=\",d.notEqual)},d.deepEqual=function(e,t,r){m(e,t,!1)||g(e,t,r,\"deepEqual\",d.deepEqual)},d.deepStrictEqual=function(e,t,r){m(e,t,!0)||g(e,t,r,\"deepStrictEqual\",d.deepStrictEqual)},d.notDeepEqual=function(e,t,r){m(e,t,!1)&&g(e,t,r,\"notDeepEqual\",d.notDeepEqual)},d.notDeepStrictEqual=function e(t,r,n){m(t,r,!0)&&g(t,r,n,\"notDeepStrictEqual\",e)},d.strictEqual=function(e,t,r){e!==t&&g(e,t,r,\"===\",d.strictEqual)},d.notStrictEqual=function(e,t,r){e===t&&g(e,t,r,\"!==\",d.notStrictEqual)},d.throws=function(e,t,r){E(!0,e,t,r)},d.doesNotThrow=function(e,t,r){E(!1,e,t,r)},d.ifError=function(e){if(e)throw e},d.strict=n((function e(t,r){t||g(t,!0,r,\"==\",e)}),d,{equal:d.strictEqual,deepEqual:d.deepStrictEqual,notEqual:d.notStrictEqual,notDeepEqual:d.notDeepStrictEqual}),d.strict.strict=d.strict;var S=Object.keys||function(e){var t=[];for(var r in e)s.call(e,r)&&t.push(r);return t}}).call(this,r(5))},function(e,t,r){\"use strict\";(function(e){Object.defineProperty(t,\"__esModule\",{value:!0}),t.getLength=t.decode=t.encode=void 0;var n=r(4);function i(e,t){if(\"00\"===e.slice(0,2))throw new Error(\"invalid RLP: extra zeros\");return parseInt(e,t)}function o(t,r){if(t<56)return e.from([t+r]);var n=s(t),i=s(r+55+n.length/2);return e.from(i+n,\"hex\")}function a(e){return\"0x\"===e.slice(0,2)}function s(e){if(e<0)throw new Error(\"Invalid integer as argument, must be unsigned!\");var t=e.toString(16);return t.length%2?\"0\"+t:t}function f(t){if(!e.isBuffer(t)){if(\"string\"==typeof t)return a(t)?e.from((i=\"string\"!=typeof(o=t)?o:a(o)?o.slice(2):o).length%2?\"0\"+i:i,\"hex\"):e.from(t);if(\"number\"==typeof t||\"bigint\"==typeof t)return t?(r=s(t),e.from(r,\"hex\")):e.from([]);if(null==t)return e.from([]);if(t instanceof Uint8Array)return e.from(t);if(n.isBN(t))return e.from(t.toArray());throw new Error(\"invalid type\")}var r,i,o;return t}t.encode=function t(r){if(Array.isArray(r)){for(var n=[],i=0;i<r.length;i++)n.push(t(r[i]));var a=e.concat(n);return e.concat([o(a.length,192),a])}var s=f(r);return 1===s.length&&s[0]<128?s:e.concat([o(s.length,128),s])},t.decode=function(t,r){if(void 0===r&&(r=!1),!t||0===t.length)return e.from([]);var n=function t(r){var n,o,a,s,f,u=[],c=r[0];if(c<=127)return{data:r.slice(0,1),remainder:r.slice(1)};if(c<=183){if(n=c-127,a=128===c?e.from([]):r.slice(1,n),2===n&&a[0]<128)throw new Error(\"invalid rlp encoding: byte must be less 0x80\");return{data:a,remainder:r.slice(n)}}if(c<=191){if(o=c-182,r.length-1<o)throw new Error(\"invalid RLP: not enough bytes for string length\");if((n=i(r.slice(1,o).toString(\"hex\"),16))<=55)throw new Error(\"invalid RLP: expected string length to be greater than 55\");if((a=r.slice(o,n+o)).length<n)throw new Error(\"invalid RLP: not enough bytes for string\");return{data:a,remainder:r.slice(n+o)}}if(c<=247){for(n=c-191,s=r.slice(1,n);s.length;)f=t(s),u.push(f.data),s=f.remainder;return{data:u,remainder:r.slice(n)}}o=c-246,n=i(r.slice(1,o).toString(\"hex\"),16);var h=o+n;if(h>r.length)throw new Error(\"invalid rlp: total length is larger than the data\");if(0===(s=r.slice(o,h)).length)throw new Error(\"invalid rlp, List has a invalid length\");for(;s.length;)f=t(s),u.push(f.data),s=f.remainder;return{data:u,remainder:r.slice(h)}}(f(t));if(r)return n;if(0!==n.remainder.length)throw new Error(\"invalid remainder\");return n.data},t.getLength=function(t){if(!t||0===t.length)return e.from([]);var r=f(t),n=r[0];if(n<=127)return r.length;if(n<=183)return n-127;if(n<=191)return n-182;if(n<=247)return n-191;var o=n-246;return o+i(r.slice(1,o).toString(\"hex\"),16)}}).call(this,r(1).Buffer)},function(e,t){e.exports=function(e){if(\"string\"!=typeof e)throw new Error(\"[is-hex-prefixed] value must be type 'string', is currently type \"+typeof e+\", while checking isHexPrefixed.\");return\"0x\"===e.slice(0,2)}},function(e,t,r){const n=r(40),i=r(178)();function o(e){this.currentProvider=e}function a(e){return function(){const t=this;var r=[].slice.call(arguments),n=r.pop();t.sendAsync({method:e,params:r},n)}}function s(e,t){return function(){const r=this;var n=[].slice.call(arguments),i=n.pop();n.length<e&&n.push(\"latest\"),r.sendAsync({method:t,params:n},i)}}e.exports=o,o.prototype.getBalance=s(2,\"eth_getBalance\"),o.prototype.getCode=s(2,\"eth_getCode\"),o.prototype.getTransactionCount=s(2,\"eth_getTransactionCount\"),o.prototype.getStorageAt=s(3,\"eth_getStorageAt\"),o.prototype.call=s(2,\"eth_call\"),o.prototype.protocolVersion=a(\"eth_protocolVersion\"),o.prototype.syncing=a(\"eth_syncing\"),o.prototype.coinbase=a(\"eth_coinbase\"),o.prototype.mining=a(\"eth_mining\"),o.prototype.hashrate=a(\"eth_hashrate\"),o.prototype.gasPrice=a(\"eth_gasPrice\"),o.prototype.accounts=a(\"eth_accounts\"),o.prototype.blockNumber=a(\"eth_blockNumber\"),o.prototype.getBlockTransactionCountByHash=a(\"eth_getBlockTransactionCountByHash\"),o.prototype.getBlockTransactionCountByNumber=a(\"eth_getBlockTransactionCountByNumber\"),o.prototype.getUncleCountByBlockHash=a(\"eth_getUncleCountByBlockHash\"),o.prototype.getUncleCountByBlockNumber=a(\"eth_getUncleCountByBlockNumber\"),o.prototype.sign=a(\"eth_sign\"),o.prototype.sendTransaction=a(\"eth_sendTransaction\"),o.prototype.sendRawTransaction=a(\"eth_sendRawTransaction\"),o.prototype.estimateGas=a(\"eth_estimateGas\"),o.prototype.getBlockByHash=a(\"eth_getBlockByHash\"),o.prototype.getBlockByNumber=a(\"eth_getBlockByNumber\"),o.prototype.getTransactionByHash=a(\"eth_getTransactionByHash\"),o.prototype.getTransactionByBlockHashAndIndex=a(\"eth_getTransactionByBlockHashAndIndex\"),o.prototype.getTransactionByBlockNumberAndIndex=a(\"eth_getTransactionByBlockNumberAndIndex\"),o.prototype.getTransactionReceipt=a(\"eth_getTransactionReceipt\"),o.prototype.getUncleByBlockHashAndIndex=a(\"eth_getUncleByBlockHashAndIndex\"),o.prototype.getUncleByBlockNumberAndIndex=a(\"eth_getUncleByBlockNumberAndIndex\"),o.prototype.getCompilers=a(\"eth_getCompilers\"),o.prototype.compileLLL=a(\"eth_compileLLL\"),o.prototype.compileSolidity=a(\"eth_compileSolidity\"),o.prototype.compileSerpent=a(\"eth_compileSerpent\"),o.prototype.newFilter=a(\"eth_newFilter\"),o.prototype.newBlockFilter=a(\"eth_newBlockFilter\"),o.prototype.newPendingTransactionFilter=a(\"eth_newPendingTransactionFilter\"),o.prototype.uninstallFilter=a(\"eth_uninstallFilter\"),o.prototype.getFilterChanges=a(\"eth_getFilterChanges\"),o.prototype.getFilterLogs=a(\"eth_getFilterLogs\"),o.prototype.getLogs=a(\"eth_getLogs\"),o.prototype.getWork=a(\"eth_getWork\"),o.prototype.submitWork=a(\"eth_submitWork\"),o.prototype.submitHashrate=a(\"eth_submitHashrate\"),o.prototype.sendAsync=function(e,t){var r;this.currentProvider.sendAsync((r=e,n({id:i(),jsonrpc:\"2.0\",params:[]},r)),(function(e,r){if(!e&&r.error&&(e=new Error(\"EthQuery - RPC Error - \"+r.error.message)),e)return t(e);t(null,r.result)}))}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,r){((0,n.default)(e)?d:l)(e,(0,c.default)(t),r)};var n=h(r(27)),i=h(r(88)),o=h(r(184)),a=h(r(91)),s=h(r(22)),f=h(r(43)),u=h(r(45)),c=h(r(13));function h(e){return e&&e.__esModule?e:{default:e}}function d(e,t,r){r=(0,f.default)(r||s.default);var n=0,o=0,a=e.length;function c(e,t){e?r(e):++o!==a&&t!==i.default||r(null)}for(0===a&&r(null);n<a;n++)t(e[n],n,(0,u.default)(c))}var l=(0,a.default)(o.default,1/0);e.exports=t.default},function(e,t,r){var n=r(84).Symbol;e.exports=n},function(e,t,r){var n=r(85),i=\"object\"==typeof self&&self&&self.Object===Object&&self,o=n||i||Function(\"return this\")();e.exports=o},function(e,t,r){(function(t){var r=\"object\"==typeof t&&t&&t.Object===Object&&t;e.exports=r}).call(this,r(5))},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}},function(e,t){e.exports=function(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={},e.exports=t.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return function(t,r,f){if(f=(0,i.default)(f||n.default),e<=0||!t)return f(null);var u=(0,o.default)(t),c=!1,h=0,d=!1;function l(e,t){if(h-=1,e)c=!0,f(e);else{if(t===s.default||c&&h<=0)return c=!0,f(null);d||p()}}function p(){for(d=!0;h<e&&!c;){var t=u();if(null===t)return c=!0,void(h<=0&&f(null));h+=1,r(t.value,t.key,(0,a.default)(l))}d=!1}p()}};var n=f(r(22)),i=f(r(43)),o=f(r(185)),a=f(r(45)),s=f(r(88));function f(e){return e&&e.__esModule?e:{default:e}}e.exports=t.default},function(e,t){var r=Array.isArray;e.exports=r},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){return function(r,n,i){return e(r,t,n,i)}},e.exports=t.default},function(e,t,r){\"use strict\";var n=r(93);function i(e){return\"never\"!==s(e)}function o(e){var t=a(e);return t>=e.params.length?e.params:\"eth_getBlockByNumber\"===e.method?e.params.slice(1):e.params.slice(0,t)}function a(e){switch(e.method){case\"eth_getStorageAt\":return 2;case\"eth_getBalance\":case\"eth_getCode\":case\"eth_getTransactionCount\":case\"eth_call\":case\"eth_estimateGas\":return 1;case\"eth_getBlockByNumber\":return 0;default:return}}function s(e){switch(e.method){case\"web3_clientVersion\":case\"web3_sha3\":case\"eth_protocolVersion\":case\"eth_getBlockTransactionCountByHash\":case\"eth_getUncleCountByBlockHash\":case\"eth_getCode\":case\"eth_getBlockByHash\":case\"eth_getTransactionByHash\":case\"eth_getTransactionByBlockHashAndIndex\":case\"eth_getTransactionReceipt\":case\"eth_getUncleByBlockHashAndIndex\":case\"eth_getCompilers\":case\"eth_compileLLL\":case\"eth_compileSolidity\":case\"eth_compileSerpent\":case\"shh_version\":return\"perma\";case\"eth_getBlockByNumber\":case\"eth_getBlockTransactionCountByNumber\":case\"eth_getUncleCountByBlockNumber\":case\"eth_getTransactionByBlockNumberAndIndex\":case\"eth_getUncleByBlockNumberAndIndex\":return\"fork\";case\"eth_gasPrice\":case\"eth_getBalance\":case\"eth_getStorageAt\":case\"eth_getTransactionCount\":case\"eth_call\":case\"eth_estimateGas\":case\"eth_getFilterLogs\":case\"eth_getLogs\":case\"eth_blockNumber\":return\"block\";case\"net_version\":case\"net_peerCount\":case\"net_listening\":case\"eth_syncing\":case\"eth_sign\":case\"eth_coinbase\":case\"eth_mining\":case\"eth_hashrate\":case\"eth_accounts\":case\"eth_sendTransaction\":case\"eth_sendRawTransaction\":case\"eth_newFilter\":case\"eth_newBlockFilter\":case\"eth_newPendingTransactionFilter\":case\"eth_uninstallFilter\":case\"eth_getFilterChanges\":case\"eth_getWork\":case\"eth_submitWork\":case\"eth_submitHashrate\":case\"db_putString\":case\"db_getString\":case\"db_putHex\":case\"db_getHex\":case\"shh_post\":case\"shh_newIdentity\":case\"shh_hasIdentity\":case\"shh_newGroup\":case\"shh_addToGroup\":case\"shh_newFilter\":case\"shh_uninstallFilter\":case\"shh_getFilterChanges\":case\"shh_getMessages\":return\"never\"}}e.exports={cacheIdentifierForPayload:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!i(e))return null;var r=t.includeBlockRef,a=r?e.params:o(e);return e.method+\":\"+n(a)},canCache:i,blockTagForPayload:function(e){var t=a(e);if(t>=e.params.length)return null;return e.params[t]},paramsWithoutBlockTag:o,blockTagParamIndex:a,cacheTypeForPayload:s}},function(e,t,r){var n=\"undefined\"!=typeof JSON?JSON:r(211);e.exports=function(e,t){t||(t={}),\"function\"==typeof t&&(t={cmp:t});var r=t.space||\"\";\"number\"==typeof r&&(r=Array(r+1).join(\" \"));var a,s=\"boolean\"==typeof t.cycles&&t.cycles,f=t.replacer||function(e,t){return t},u=t.cmp&&(a=t.cmp,function(e){return function(t,r){var n={key:t,value:e[t]},i={key:r,value:e[r]};return a(n,i)}}),c=[];return function e(t,a,h,d){var l=r?\"\\n\"+new Array(d+1).join(r):\"\",p=r?\": \":\":\";if(h&&h.toJSON&&\"function\"==typeof h.toJSON&&(h=h.toJSON()),void 0!==(h=f.call(t,a,h))){if(\"object\"!=typeof h||null===h)return n.stringify(h);if(i(h)){for(var b=[],y=0;y<h.length;y++){var g=e(h,y,h[y],d+1)||n.stringify(null);b.push(l+r+g)}return\"[\"+b.join(\",\")+l+\"]\"}if(-1!==c.indexOf(h)){if(s)return n.stringify(\"__cycle__\");throw new TypeError(\"Converting circular structure to JSON\")}c.push(h);var v=o(h).sort(u&&u(h));for(b=[],y=0;y<v.length;y++){var m=e(h,a=v[y],h[a],d+1);if(m){var w=n.stringify(a)+p+m;b.push(l+r+w)}}return c.splice(c.indexOf(h),1),\"{\"+b.join(\",\")+l+\"}\"}}({\"\":e},\"\",e,0)};var i=Array.isArray||function(e){return\"[object Array]\"==={}.toString.call(e)},o=Object.keys||function(e){var t=Object.prototype.hasOwnProperty||function(){return!0},r=[];for(var n in e)t.call(e,n)&&r.push(n);return r}},function(e,t,r){const n=r(217).Mutex,i=r(48),o=r(95),a=r(219),s=r(221),f=r(222),{intToHex:u,hexToInt:c}=r(23);function h(e){return d(async(...t)=>{const r=await e(...t);return u(r.id)})}function d(e){return i(async(t,r)=>{const n=await e.apply(null,t.params);r.result=n})}function l(e,t){const r=[];for(let t in e)r.push(e[t]);return r}e.exports=function({blockTracker:e,provider:t}){let r=0,i={};const p=new n,b=function({mutex:e}){return t=>async(r,n,i,o)=>{(await e.acquire())(),t(r,n,i,o)}}({mutex:p}),y=o({eth_newFilter:b(h(v)),eth_newBlockFilter:b(h(m)),eth_newPendingTransactionFilter:b(h(w)),eth_uninstallFilter:b(d(S)),eth_getFilterChanges:b(d(_)),eth_getFilterLogs:b(d(E))}),g=async({oldBlock:e,newBlock:t})=>{if(0===i.length)return;const r=await p.acquire();try{await Promise.all(l(i).map(async r=>{try{await r.update({oldBlock:e,newBlock:t})}catch(e){console.error(e)}}))}catch(e){console.error(e)}r()};return y.newLogFilter=v,y.newBlockFilter=m,y.newPendingTransactionFilter=w,y.uninstallFilter=S,y.getFilterChanges=_,y.getFilterLogs=E,y.destroy=()=>{!async function(){const e=l(i).length;i={},x({prevFilterCount:e,newFilterCount:0})}()},y;async function v(e){const r=new a({provider:t,params:e});await A(r);return r}async function m(){const e=new s({provider:t});await A(e);return e}async function w(){const e=new f({provider:t});await A(e);return e}async function _(e){const t=c(e),r=i[t];if(!r)throw new Error(`No filter for index \"${t}\"`);return r.getChangesAndClear()}async function E(e){const t=c(e),r=i[t];if(!r)throw new Error(`No filter for index \"${t}\"`);return\"log\"===r.type?results=r.getAllResults():results=[],results}async function S(e){const t=c(e),r=i[t],n=Boolean(r);return n&&await async function(e){const t=l(i).length;delete i[e];const r=l(i).length;x({prevFilterCount:t,newFilterCount:r})}(t),n}async function A(t){const n=l(i).length,o=await e.getLatestBlock();await t.initialize({currentBlock:o}),r++,i[r]=t,t.id=r,t.idHex=u(r);return x({prevFilterCount:n,newFilterCount:l(i).length}),r}function x({prevFilterCount:t,newFilterCount:r}){0===t&&r>0?e.on(\"sync\",g):t>0&&0===r&&e.removeListener(\"sync\",g)}}},function(e,t,r){e.exports=r(218)},function(e,t,r){e.exports=r(241)(r(242))},function(e,t,r){e.exports=Object.assign(e.exports,r(255),r(256),r(103),r(274),r(275),r(276))},function(e,t,r){\"use strict\";e.exports=function(e,t){return function(){for(var r=new Array(arguments.length),n=0;n<r.length;n++)r[n]=arguments[n];return e.apply(t,r)}}},function(e,t,r){\"use strict\";var n=r(7),i=r(261),o=r(263),a=r(264),s=r(265),f=r(100);e.exports=function(e){return new Promise((function(t,u){var c=e.data,h=e.headers;n.isFormData(c)&&delete h[\"Content-Type\"];var d=new XMLHttpRequest;if(e.auth){var l=e.auth.username||\"\",p=e.auth.password||\"\";h.Authorization=\"Basic \"+btoa(l+\":\"+p)}if(d.open(e.method.toUpperCase(),o(e.url,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,d.onreadystatechange=function(){if(d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf(\"file:\"))){var r=\"getAllResponseHeaders\"in d?a(d.getAllResponseHeaders()):null,n={data:e.responseType&&\"text\"!==e.responseType?d.response:d.responseText,status:d.status,statusText:d.statusText,headers:r,config:e,request:d};i(t,u,n),d=null}},d.onerror=function(){u(f(\"Network Error\",e,null,d)),d=null},d.ontimeout=function(){u(f(\"timeout of \"+e.timeout+\"ms exceeded\",e,\"ECONNABORTED\",d)),d=null},n.isStandardBrowserEnv()){var b=r(266),y=(e.withCredentials||s(e.url))&&e.xsrfCookieName?b.read(e.xsrfCookieName):void 0;y&&(h[e.xsrfHeaderName]=y)}if(\"setRequestHeader\"in d&&n.forEach(h,(function(e,t){void 0===c&&\"content-type\"===t.toLowerCase()?delete h[t]:d.setRequestHeader(t,e)})),e.withCredentials&&(d.withCredentials=!0),e.responseType)try{d.responseType=e.responseType}catch(t){if(\"json\"!==e.responseType)throw t}\"function\"==typeof e.onDownloadProgress&&d.addEventListener(\"progress\",e.onDownloadProgress),\"function\"==typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener(\"progress\",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){d&&(d.abort(),u(e),d=null)})),void 0===c&&(c=null),d.send(c)}))}},function(e,t,r){\"use strict\";var n=r(262);e.exports=function(e,t,r,i,o){var a=new Error(e);return n(a,t,r,i,o)}},function(e,t,r){\"use strict\";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t,r){\"use strict\";function n(e){this.message=e}n.prototype.toString=function(){return\"Cancel\"+(this.message?\": \"+this.message:\"\")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t,r){const n=r(51),i=r(53);e.exports={Node:class{constructor(e,t,r){this.network=e,this.netID=t;var n=r.split(\":\");this.ip=n[0],this.port=n[1],r.includes(\"https://\")||r.includes(\"http://\")?this.ipPort=r:\"443\"===this.port||443===this.port?this.ipPort=\"https://\"+r:this.ipPort=\"http://\"+r}isValid(){for(var e in this)if(!this.hasOwnProperty(e)||\"\"==this[e])return!1;return!0}isEqual(e,t){return this.netID==e.toString()&&this.network==t.toString()}async sendRelay(e,t){try{const a=n.create({baseURL:this.ipPort,timeout:e.configuration.requestTimeOut,headers:{\"Content-Type\":\"application/json\"}});var r=await a.post(i.relayPath,e.toJSON());if(200==r.status&&null!=r.data){var o=r.data;return t?void t(o,null):o}return t?void t(null,new Error(\"Failed to send relay with error: \"+r.data)):new Error(\"Failed to send relay with error: \"+r.data)}catch(e){return t?void t(null,new Error(\"Failed to send relay with error: \"+e)):new Error(\"Failed to send relay with error: \"+e)}}}}},function(e,t,r){\"use strict\";var n=r(9).EventEmitter,i=r(10).inherits,o=r(14),a=r(176),s=r(179),f=r(207),u=r(210),c=(r(92),r(46));function h(e){n.call(this),this.setMaxListeners(30),e=e||{};var t={sendAsync:this._handleAsync.bind(this)},r=e.blockTrackerProvider||t;this._blockTracker=e.blockTracker||new a({provider:r,pollingInterval:e.pollingInterval||4e3,setSkipCacheFlag:!0}),this._ready=new u,this.currentBlock=null,this._providers=[]}function d(e){return{number:o.toBuffer(e.number),hash:o.toBuffer(e.hash),parentHash:o.toBuffer(e.parentHash),nonce:o.toBuffer(e.nonce),mixHash:o.toBuffer(e.mixHash),sha3Uncles:o.toBuffer(e.sha3Uncles),logsBloom:o.toBuffer(e.logsBloom),transactionsRoot:o.toBuffer(e.transactionsRoot),stateRoot:o.toBuffer(e.stateRoot),receiptsRoot:o.toBuffer(e.receiptRoot||e.receiptsRoot),miner:o.toBuffer(e.miner),difficulty:o.toBuffer(e.difficulty),totalDifficulty:o.toBuffer(e.totalDifficulty),size:o.toBuffer(e.size),extraData:o.toBuffer(e.extraData),gasLimit:o.toBuffer(e.gasLimit),gasUsed:o.toBuffer(e.gasUsed),timestamp:o.toBuffer(e.timestamp),transactions:e.transactions}}e.exports=h,i(h,n),Object.defineProperty(h,\"name\",{value:\"HttpProvider\"}),h.prototype.start=function(){var e=this,t=this;t._ready.go(),t._blockTracker.on(\"latest\",(function(r){t._getBlockByNumber(r,(function(r,n){if(r)e.emit(\"error\",r);else if(n){var i=d(n);t._setCurrentBlock(i),t.emit(\"rawBlock\",n),t.emit(\"latest\",n)}}))})),t._blockTracker.on(\"sync\",t.emit.bind(t,\"sync\")),t._blockTracker.on(\"error\",t.emit.bind(t,\"error\")),t._running=!0,t.emit(\"start\")},h.prototype.stop=function(){this._blockTracker.removeAllListeners(),this._running=!1,this.emit(\"stop\")},h.prototype.isRunning=function(){return this._running},h.prototype.addProvider=function(e,t){\"number\"==typeof t?this._providers.splice(t,0,e):this._providers.push(e),e.setEngine(this)},h.prototype.removeProvider=function(e){var t=this._providers.indexOf(e);if(t<0)throw new Error(\"Provider not found.\");this._providers.splice(t,1)},h.prototype.send=function(e){throw new Error(\"Web3ProviderEngine does not support synchronous requests.\")},h.prototype.sendAsync=function(e,t){var r=this;r._ready.await((function(){Array.isArray(e)?s(e,r._handleAsync.bind(r),t):r._handleAsync(e,t)}))},h.prototype._getBlockByNumber=function(e,t){var r=c({method:\"eth_getBlockByNumber\",params:[e,!1],skipCache:!0});this._handleAsync(r,(function(e,r){return e?t(e):t(null,r.result)}))},h.prototype._handleAsync=function(e,t){var r=this,n=-1,i=null,o=null,a=[];function s(r,n){o=r,i=n,f(a,(function(e,t){e?e(o,i,t):t()}),(function(){var r={id:e.id,jsonrpc:e.jsonrpc,result:i};null!=o?(r.error={message:o.stack||o.message||o,code:-32e3},t(o,r)):t(null,r)}))}!function t(i){if(n+=1,a.unshift(i),n>=r._providers.length)s(new Error('Request for method \"'+e.method+'\" not handled by any subprovider. Please check your subprovider configuration to ensure this method is handled.'));else try{r._providers[n].handleRequest(e,t,s)}catch(e){s(e)}}()},h.prototype._setCurrentBlock=function(e){this.currentBlock=e,this.emit(\"block\",e)}},function(e,t,r){\"use strict\";var n=r(10).inherits,i=r(29);function o(e){e=e||{},this.staticResponses=e}e.exports=o,n(o,i),o.prototype.handleRequest=function(e,t,r){var n=this.staticResponses[e.method];\"function\"==typeof n?n(e,t,r):void 0!==n?setTimeout((function(){return r(null,n)})):t()}},function(e,t,r){\"use strict\";var n=r(47),i=r(94),o=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,(function(e){var t=e.blockTracker,r=e.provider;e.engine;return i({blockTracker:t,provider:r})})))}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(n);e.exports=o},function(e,t,r){\"use strict\";var n=r(224),i=r(225),o=r(10).inherits,a=r(14),s=r(227),f=r(40),u=r(250),c=r(29),h=r(251),d=/^[0-9A-Fa-f]+$/g;function l(e){this.nonceLock=u(1),e.getAccounts&&(this.getAccounts=e.getAccounts),e.processTransaction&&(this.processTransaction=e.processTransaction),e.processMessage&&(this.processMessage=e.processMessage),e.processPersonalMessage&&(this.processPersonalMessage=e.processPersonalMessage),e.processTypedMessage&&(this.processTypedMessage=e.processTypedMessage),e.processTypedMessageV3&&(this.processTypedMessageV3=e.processTypedMessageV3),this.approveTransaction=e.approveTransaction||this.autoApprove,this.approveMessage=e.approveMessage||this.autoApprove,this.approvePersonalMessage=e.approvePersonalMessage||this.autoApprove,this.approveTypedMessage=e.approveTypedMessage||this.autoApprove,this.approveTypedMessageV3=e.approveTypedMessageV3||this.autoApprove,e.signTransaction&&(this.signTransaction=e.signTransaction||v(\"signTransaction\")),e.signMessage&&(this.signMessage=e.signMessage||v(\"signMessage\")),e.signPersonalMessage&&(this.signPersonalMessage=e.signPersonalMessage||v(\"signPersonalMessage\")),e.signTypedMessage&&(this.signTypedMessage=e.signTypedMessage||v(\"signTypedMessage\")),e.signTypedMessageV3&&(this.signTypedMessageV3=e.signTypedMessageV3||v(\"signTypedMessageV3\")),e.recoverPersonalSignature&&(this.recoverPersonalSignature=e.recoverPersonalSignature),e.publishTransaction&&(this.publishTransaction=e.publishTransaction),this.estimateGas=e.estimateGas||this.estimateGas,this.getGasPrice=e.getGasPrice||this.getGasPrice}function p(e){return e.toLowerCase()}function b(e){var t=a.addHexPrefix(e);return a.isValidAddress(t)}function y(e){var t=a.addHexPrefix(e);return!a.isValidAddress(t)&&g(e)}function g(e){return\"string\"==typeof e&&(\"0x\"===e.slice(0,2)&&e.slice(2).match(d))}function v(e){return function(t,r){r(new Error('ProviderEngine - HookedWalletSubprovider - Must provide \"'+e+'\" fn in constructor options'))}}e.exports=l,o(l,c),l.prototype.handleRequest=function(e,t,r){var i=this;i._parityRequests={},i._parityRequestCount=0;var o,a=void 0,s=void 0,u=void 0,c=void 0,h=void 0;switch(e.method){case\"eth_coinbase\":return void i.getAccounts((function(e,t){if(e)return r(e);var n=t[0]||null;r(null,n)}));case\"eth_accounts\":return void i.getAccounts((function(e,t){if(e)return r(e);r(null,t)}));case\"eth_sendTransaction\":return a=e.params[0],void n([function(e){return i.validateTransaction(a,e)},function(e){return i.processTransaction(a,e)}],r);case\"eth_signTransaction\":return a=e.params[0],void n([function(e){return i.validateTransaction(a,e)},function(e){return i.processSignTransaction(a,e)}],r);case\"eth_sign\":return y(e.params[1])&&b(e.params[0])?(h=e.params[0],c=e.params[1]):(c=e.params[0],h=e.params[1]),u=e.params[2]||{},s=f(u,{from:h,data:c}),void n([function(e){return i.validateMessage(s,e)},function(e){return i.processMessage(s,e)}],r);case\"personal_sign\":return function(){var t=e.params[0];if(y(e.params[1])&&b(t)){\"[message, address]. This was previously handled incorrectly, \",\"and has been corrected automatically. \",\"Please switch this param order for smooth behavior in the future.\",console.warn(\"The eth_personalSign method requires params ordered [message, address]. This was previously handled incorrectly, and has been corrected automatically. Please switch this param order for smooth behavior in the future.\"),h=e.params[0],c=e.params[1]}else c=e.params[0],h=e.params[1];u=e.params[2]||{},s=f(u,{from:h,data:c}),n([function(e){return i.validatePersonalMessage(s,e)},function(e){return i.processPersonalMessage(s,e)}],r)}();case\"personal_ecRecover\":return function(){c=e.params[0];var t=e.params[1];u=e.params[2]||{},s=f(u,{sig:t,data:c}),i.recoverPersonalSignature(s,r)}();case\"eth_signTypedData\":return!b(e.params[1])&&b(e.params[0])?(h=e.params[0],c=e.params[1]):(c=e.params[0],h=e.params[1]),u=e.params[2]||{},s=f(u,{from:h,data:c}),void n([function(e){return i.validateTypedMessage(s,e)},function(e){return i.processTypedMessage(s,e)}],r);case\"eth_signTypedData_v3\":return!b(e.params[1])&&b(e.params[0])?(h=e.params[0],c=e.params[1]):(c=e.params[0],h=e.params[1]),u=e.params[2]||{},s=f(u,{from:h,data:c}),void n([function(e){return i.validateTypedMessageV3(s,e)},function(e){return i.processTypedMessageV3(s,e)}],r);case\"parity_postTransaction\":return a=e.params[0],void i.parityPostTransaction(a,r);case\"parity_postSign\":return h=e.params[0],c=e.params[1],void i.parityPostSign(h,c,r);case\"parity_checkRequest\":return o=e.params[0],void i.parityCheckRequest(o,r);case\"parity_defaultAccount\":return void i.getAccounts((function(e,t){if(e)return r(e);var n=t[0]||null;r(null,n)}));default:return void t()}},l.prototype.getAccounts=function(e){e(null,[])},l.prototype.processTransaction=function(e,t){var r=this;n([function(t){return r.approveTransaction(e,t)},function(e,t){return r.checkApproval(\"transaction\",e,t)},function(t){return r.finalizeAndSubmitTx(e,t)}],t)},l.prototype.processSignTransaction=function(e,t){var r=this;n([function(t){return r.approveTransaction(e,t)},function(e,t){return r.checkApproval(\"transaction\",e,t)},function(t){return r.finalizeTx(e,t)}],t)},l.prototype.processMessage=function(e,t){var r=this;n([function(t){return r.approveMessage(e,t)},function(e,t){return r.checkApproval(\"message\",e,t)},function(t){return r.signMessage(e,t)}],t)},l.prototype.processPersonalMessage=function(e,t){var r=this;n([function(t){return r.approvePersonalMessage(e,t)},function(e,t){return r.checkApproval(\"message\",e,t)},function(t){return r.signPersonalMessage(e,t)}],t)},l.prototype.processTypedMessage=function(e,t){var r=this;n([function(t){return r.approveTypedMessage(e,t)},function(e,t){return r.checkApproval(\"message\",e,t)},function(t){return r.signTypedMessage(e,t)}],t)},l.prototype.processTypedMessageV3=function(e,t){var r=this;n([function(t){return r.approveTypedMessageV3(e,t)},function(e,t){return r.checkApproval(\"message\",e,t)},function(t){return r.signTypedMessageV3(e,t)}],t)},l.prototype.autoApprove=function(e,t){t(null,!0)},l.prototype.checkApproval=function(e,t,r){r(t?null:new Error(\"User denied \"+e+\" signature.\"))},l.prototype.parityPostTransaction=function(e,t){var r=this,n=\"0x\"+r._parityRequestCount.toString(16);r._parityRequestCount++,r.emitPayload({method:\"eth_sendTransaction\",params:[e]},(function(e,t){if(e)r._parityRequests[n]={error:e};else{var i=t.result;r._parityRequests[n]=i}})),t(null,n)},l.prototype.parityPostSign=function(e,t,r){var n=this,i=\"0x\"+n._parityRequestCount.toString(16);n._parityRequestCount++,n.emitPayload({method:\"eth_sign\",params:[e,t]},(function(e,t){if(e)n._parityRequests[i]={error:e};else{var r=t.result;n._parityRequests[i]=r}})),r(null,i)},l.prototype.parityCheckRequest=function(e,t){var r=this._parityRequests[e]||null;return r?r.error?t(r.error):void t(null,r):t(null,null)},l.prototype.recoverPersonalSignature=function(e,t){var r=void 0;try{r=s.recoverPersonalSignature(e)}catch(e){return t(e)}t(null,r)},l.prototype.validateTransaction=function(e,t){if(void 0===e.from)return t(new Error(\"Undefined address - from address required to sign transaction.\"));this.validateSender(e.from,(function(r,n){return r?t(r):n?void t():t(new Error('Unknown address - unable to sign transaction for this address: \"'+e.from+'\"'))}))},l.prototype.validateMessage=function(e,t){if(void 0===e.from)return t(new Error(\"Undefined address - from address required to sign message.\"));this.validateSender(e.from,(function(r,n){return r?t(r):n?void t():t(new Error('Unknown address - unable to sign message for this address: \"'+e.from+'\"'))}))},l.prototype.validatePersonalMessage=function(e,t){return void 0===e.from?t(new Error(\"Undefined address - from address required to sign personal message.\")):void 0===e.data?t(new Error(\"Undefined message - message required to sign personal message.\")):g(e.data)?void this.validateSender(e.from,(function(r,n){return r?t(r):n?void t():t(new Error('Unknown address - unable to sign message for this address: \"'+e.from+'\"'))})):t(new Error(\"HookedWalletSubprovider - validateMessage - message was not encoded as hex.\"))},l.prototype.validateTypedMessage=function(e,t){return void 0===e.from?t(new Error(\"Undefined address - from address required to sign typed data.\")):void 0===e.data?t(new Error(\"Undefined data - message required to sign typed data.\")):void this.validateSender(e.from,(function(r,n){return r?t(r):n?void t():t(new Error('Unknown address - unable to sign message for this address: \"'+e.from+'\"'))}))},l.prototype.validateTypedMessageV3=function(e,t){return void 0===e.from?t(new Error(\"Undefined address - from address required to sign typed data.\")):void 0===e.data?t(new Error(\"Undefined data - message required to sign typed data.\")):void this.validateSender(e.from,(function(r,n){return r?t(r):n?void t():t(new Error('Unknown address - unable to sign message for this address: \"'+e.from+'\"'))}))},l.prototype.validateSender=function(e,t){if(!e)return t(null,!1);this.getAccounts((function(r,n){if(r)return t(r);var i=-1!==n.map(p).indexOf(e.toLowerCase());t(null,i)}))},l.prototype.finalizeAndSubmitTx=function(e,t){var r=this;r.nonceLock.take((function(){n([r.fillInTxExtras.bind(r,e),r.signTransaction.bind(r),r.publishTransaction.bind(r)],(function(e,n){if(r.nonceLock.leave(),e)return t(e);t(null,n)}))}))},l.prototype.finalizeTx=function(e,t){var r=this;r.nonceLock.take((function(){n([r.fillInTxExtras.bind(r,e),r.signTransaction.bind(r)],(function(n,i){if(r.nonceLock.leave(),n)return t(n);t(null,{raw:i,tx:e})}))}))},l.prototype.publishTransaction=function(e,t){this.emitPayload({method:\"eth_sendRawTransaction\",params:[e]},(function(e,r){if(e)return t(e);t(null,r.result)}))},l.prototype.estimateGas=function(e,t){h(this.engine,e,t)},l.prototype.getGasPrice=function(e){this.emitPayload({method:\"eth_gasPrice\",params:[]},(function(t,r){if(t)return e(t);e(null,r.result)}))},l.prototype.fillInTxExtras=function(e,t){var r=e.from,n={};void 0===e.gasPrice&&(n.gasPrice=this.getGasPrice.bind(this)),void 0===e.nonce&&(n.nonce=this.emitPayload.bind(this,{method:\"eth_getTransactionCount\",params:[r,\"pending\"]})),void 0===e.gas&&(n.gas=this.estimateGas.bind(this,function(e){return{from:e.from,to:e.to,value:e.value,data:e.data,gas:e.gas,gasPrice:e.gasPrice,nonce:e.nonce}}(e))),i(n,(function(r,n){if(r)return t(r);var i={};n.gasPrice&&(i.gasPrice=n.gasPrice),n.nonce&&(i.nonce=n.nonce.result),n.gas&&(i.gas=n.gas),t(null,f(e,i))}))}},function(e,t,r){\"use strict\";var n=r(47),i=r(254),o=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,(function(e){var t=e.blockTracker,r=e.provider,n=e.engine,o=i({blockTracker:t,provider:r}),a=o.events,s=o.middleware;return a.on(\"notification\",(function(e){return n.emit(\"data\",null,e)})),s})))}return function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(n);e.exports=o},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=t.ERR_NOT_IN_IFRAME=t.ERR_CONNECTION_TIMEOUT=t.ERR_CONNECTION_DESTROYED=void 0;var n=\"message\";t.ERR_CONNECTION_DESTROYED=\"ConnectionDestroyed\";t.ERR_CONNECTION_TIMEOUT=\"ConnectionTimeout\";t.ERR_NOT_IN_IFRAME=\"NotInIframe\";var i,o={\"http:\":\"80\",\"https:\":\"443\"},a=/^(https?:)?\\/\\/([^/:]+)(:(\\d+))?/,s={ERR_CONNECTION_DESTROYED:\"ConnectionDestroyed\",ERR_CONNECTION_TIMEOUT:\"ConnectionTimeout\",ERR_NOT_IN_IFRAME:\"NotInIframe\",Promise:function(){try{return window?window.Promise:null}catch(e){return null}}(),debug:!1},f=(i=0,function(){return++i}),u=function(){if(s.debug){for(var e,t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];(e=console).log.apply(e,[\"[Penpal]\"].concat(r))}},c=function(e){var t=[];return e((function(){t.forEach((function(e){e()}))})),{then:function(e){t.push(e)}}},h=function(e){return{name:e.name,message:e.message,stack:e.stack}},d=function(e){var t=new Error;return Object.keys(e).forEach((function(r){return t[r]=e[r]})),t},l=function(e,t,r,i){var o=t.localName,a=t.local,c=t.remote,h=t.remoteOrigin,l=!1;u(\"\".concat(o,\": Connecting call sender\"));i.then((function(){l=!0})),r.reduce((function(e,t){return e[t]=function(e){return function(){for(var t=arguments.length,r=new Array(t),i=0;i<t;i++)r[i]=arguments[i];if(u(\"\".concat(o,\": Sending \").concat(e,\"() call\")),l){var p=new Error(\"Unable to send \".concat(e,\"() call due \")+\"to destroyed connection\");throw p.code=\"ConnectionDestroyed\",p}return new s.Promise((function(t,i){var s=f();a.addEventListener(n,(function r(f){if(f.source===c&&f.origin===h&&\"reply\"===f.data.penpal&&f.data.id===s){u(\"\".concat(o,\": Received \").concat(e,\"() reply\")),a.removeEventListener(n,r);var l=f.data.returnValue;f.data.returnValueIsError&&(l=d(l)),(\"fulfilled\"===f.data.resolution?t:i)(l)}})),c.postMessage({penpal:\"call\",id:s,methodName:e,args:r},h)}))}}(t),e}),e)},p=function(e,t,r){var i=e.localName,o=e.local,a=e.remote,f=e.remoteOrigin,c=!1;u(\"\".concat(i,\": Connecting call receiver\"));var d=function(e){if(e.source===a&&e.origin===f&&\"call\"===e.data.penpal){var r=e.data,n=r.methodName,o=r.args,d=r.id;if(u(\"\".concat(i,\": Received \").concat(n,\"() call\")),n in t){var l=function(e){return function(t){if(u(\"\".concat(i,\": Sending \").concat(n,\"() reply\")),c)u(\"\".concat(i,\": Unable to send \").concat(n,\"() reply due to destroyed connection\"));else{var r={penpal:\"reply\",id:d,resolution:e,returnValue:t};\"rejected\"===e&&t instanceof Error&&(r.returnValue=h(t),r.returnValueIsError=!0);try{a.postMessage(r,f)}catch(e){throw\"DataCloneError\"===e.name&&a.postMessage({penpal:\"reply\",id:d,resolution:\"rejected\",returnValue:h(e),returnValueIsError:!0},f),e}}}};new s.Promise((function(e){return e(t[n].apply(t,o))})).then(l(\"fulfilled\"),l(\"rejected\"))}}};o.addEventListener(n,d),r.then((function(){c=!0,o.removeEventListener(n,d)}))};s.connectToChild=function(e){var t,r=e.url,i=e.appendTo,f=e.methods,h=void 0===f?{}:f,d=e.timeout,b=new c((function(e){t=e})),y=window,g=document.createElement(\"iframe\");(i||document.body).appendChild(g),b.then((function(){g.parentNode&&g.parentNode.removeChild(g)}));var v=g.contentWindow||g.contentDocument.parentWindow,m=function(e){var t,r,n,i=document.location,s=a.exec(e);s?(t=s[1]?s[1]:i.protocol,r=s[2],n=s[4]):(t=i.protocol,r=i.hostname,n=i.port);var f=n&&n!==o[t]?\":\".concat(n):\"\";return\"\".concat(t,\"//\").concat(r).concat(f)}(r);return{promise:new s.Promise((function(e,i){var o;void 0!==d&&(o=setTimeout((function(){var e=new Error(\"Connection to child timed out after \".concat(d,\"ms\"));e.code=\"ConnectionTimeout\",i(e),t()}),d));var a,s,f={},w=function(t){if(t.source===v&&t.origin===m&&\"handshake\"===t.data.penpal){u(\"Parent: Received handshake, sending reply\"),t.source.postMessage({penpal:\"handshake-reply\",methodNames:Object.keys(h)},t.origin);var r={localName:\"Parent\",local:y,remote:v,remoteOrigin:t.origin};s&&s();var n=new c((function(e){b.then(e),s=e}));p(r,h,n),a&&a.forEach((function(e){delete f[e]})),a=t.data.methodNames,l(f,r,a,b),clearTimeout(o),e(f)}};y.addEventListener(n,w),b.then((function(){y.removeEventListener(n,w);var e=new Error(\"Connection destroyed\");e.code=\"ConnectionDestroyed\",i(e)})),u(\"Parent: Loading iframe\"),g.src=r})),iframe:g,destroy:t}},s.connectToParent=function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.parentOrigin,i=void 0===r?\"*\":r,o=t.methods,a=void 0===o?{}:o,f=t.timeout;if(window===window.top){var h=new Error(\"connectToParent() must be called within an iframe\");throw h.code=\"NotInIframe\",h}var d=new c((function(t){e=t})),b=window,y=b.parent,g=new s.Promise((function(t,r){var o;void 0!==f&&(o=setTimeout((function(){var t=new Error(\"Connection to parent timed out after \".concat(f,\"ms\"));t.code=\"ConnectionTimeout\",r(t),e()}),f));var s=function e(r){if((\"*\"===i||i===r.origin)&&r.source===y&&\"handshake-reply\"===r.data.penpal){u(\"Child: Received handshake reply\"),b.removeEventListener(n,e);var s={localName:\"Child\",local:b,remote:y,remoteOrigin:r.origin},f={};p(s,a,d),l(f,s,r.data.methodNames,d),clearTimeout(o),t(f)}};b.addEventListener(n,s),d.then((function(){b.removeEventListener(n,s);var e=new Error(\"Connection destroyed\");e.code=\"ConnectionDestroyed\",r(e)})),u(\"Child: Sending handshake\"),y.postMessage({penpal:\"handshake\",methodNames:Object.keys(a)},i)}));return{promise:g,destroy:e}};var b=s;t.default=b},function(e,t){e.exports=function(e){return e&&\"object\"==typeof e&&\"function\"==typeof e.copy&&\"function\"==typeof e.fill&&\"function\"==typeof e.readUInt8}},function(e,t){\"function\"==typeof Object.create?e.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}},function(e,t,r){\"use strict\";e.exports=r(113)(r(129))},function(e,t,r){\"use strict\";var n=r(114),i=r(128);e.exports=function(e){var t=n(e),r=i(e);return function(e,n){switch(\"string\"==typeof e?e.toLowerCase():e){case\"keccak224\":return new t(1152,448,null,224,n);case\"keccak256\":return new t(1088,512,null,256,n);case\"keccak384\":return new t(832,768,null,384,n);case\"keccak512\":return new t(576,1024,null,512,n);case\"sha3-224\":return new t(1152,448,6,224,n);case\"sha3-256\":return new t(1088,512,6,256,n);case\"sha3-384\":return new t(832,768,6,384,n);case\"sha3-512\":return new t(576,1024,6,512,n);case\"shake128\":return new r(1344,256,31,n);case\"shake256\":return new r(1088,512,31,n);default:throw new Error(\"Invald algorithm: \"+e)}}}},function(e,t,r){\"use strict\";var n=r(2).Buffer,i=r(18).Transform,o=r(0);e.exports=function(e){function t(t,r,n,o,a){i.call(this,a),this._rate=t,this._capacity=r,this._delimitedSuffix=n,this._hashBitLength=o,this._options=a,this._state=new e,this._state.initialize(t,r),this._finalized=!1}return o(t,i),t.prototype._transform=function(e,t,r){var n=null;try{this.update(e,t)}catch(e){n=e}r(n)},t.prototype._flush=function(e){var t=null;try{this.push(this.digest())}catch(e){t=e}e(t)},t.prototype.update=function(e,t){if(!n.isBuffer(e)&&\"string\"!=typeof e)throw new TypeError(\"Data must be a string or a buffer\");if(this._finalized)throw new Error(\"Digest already called\");return n.isBuffer(e)||(e=n.from(e,t)),this._state.absorb(e),this},t.prototype.digest=function(e){if(this._finalized)throw new Error(\"Digest already called\");this._finalized=!0,this._delimitedSuffix&&this._state.absorbLastFewBits(this._delimitedSuffix);var t=this._state.squeeze(this._hashBitLength/8);return void 0!==e&&(t=t.toString(e)),this._resetState(),t},t.prototype._resetState=function(){return this._state.initialize(this._rate,this._capacity),this},t.prototype._clone=function(){var e=new t(this._rate,this._capacity,this._delimitedSuffix,this._hashBitLength,this._options);return this._state.copy(e._state),e._finalized=this._finalized,e},t}},function(e,t,r){\"use strict\";t.byteLength=function(e){var t=u(e),r=t[0],n=t[1];return 3*(r+n)/4-n},t.toByteArray=function(e){var t,r,n=u(e),a=n[0],s=n[1],f=new o(function(e,t,r){return 3*(t+r)/4-r}(0,a,s)),c=0,h=s>0?a-4:a;for(r=0;r<h;r+=4)t=i[e.charCodeAt(r)]<<18|i[e.charCodeAt(r+1)]<<12|i[e.charCodeAt(r+2)]<<6|i[e.charCodeAt(r+3)],f[c++]=t>>16&255,f[c++]=t>>8&255,f[c++]=255&t;2===s&&(t=i[e.charCodeAt(r)]<<2|i[e.charCodeAt(r+1)]>>4,f[c++]=255&t);1===s&&(t=i[e.charCodeAt(r)]<<10|i[e.charCodeAt(r+1)]<<4|i[e.charCodeAt(r+2)]>>2,f[c++]=t>>8&255,f[c++]=255&t);return f},t.fromByteArray=function(e){for(var t,r=e.length,i=r%3,o=[],a=0,s=r-i;a<s;a+=16383)o.push(c(e,a,a+16383>s?s:a+16383));1===i?(t=e[r-1],o.push(n[t>>2]+n[t<<4&63]+\"==\")):2===i&&(t=(e[r-2]<<8)+e[r-1],o.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+\"=\"));return o.join(\"\")};for(var n=[],i=[],o=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,a=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",s=0,f=a.length;s<f;++s)n[s]=a[s],i[a.charCodeAt(s)]=s;function u(e){var t=e.length;if(t%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r=e.indexOf(\"=\");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function c(e,t,r){for(var i,o,a=[],s=t;s<r;s+=3)i=(e[s]<<16&16711680)+(e[s+1]<<8&65280)+(255&e[s+2]),a.push(n[(o=i)>>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return a.join(\"\")}i[\"-\".charCodeAt(0)]=62,i[\"_\".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,r,n,i){var o,a,s=8*i-n-1,f=(1<<s)-1,u=f>>1,c=-7,h=r?i-1:0,d=r?-1:1,l=e[t+h];for(h+=d,o=l&(1<<-c)-1,l>>=-c,c+=s;c>0;o=256*o+e[t+h],h+=d,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=n;c>0;a=256*a+e[t+h],h+=d,c-=8);if(0===o)o=1-u;else{if(o===f)return a?NaN:1/0*(l?-1:1);a+=Math.pow(2,n),o-=u}return(l?-1:1)*a*Math.pow(2,o-n)},t.write=function(e,t,r,n,i,o){var a,s,f,u=8*o-i-1,c=(1<<u)-1,h=c>>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:o-1,p=n?1:-1,b=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(f=Math.pow(2,-a))<1&&(a--,f*=2),(t+=a+h>=1?d/f:d*Math.pow(2,1-h))*f>=2&&(a++,f/=2),a+h>=c?(s=0,a=c):a+h>=1?(s=(t*f-1)*Math.pow(2,i),a+=h):(s=t*Math.pow(2,h-1)*Math.pow(2,i),a=0));i>=8;e[r+l]=255&s,l+=p,s/=256,i-=8);for(a=a<<i|s,u+=i;u>0;e[r+l]=255&a,l+=p,a/=256,u-=8);e[r+l-p]|=128*b}},function(e,t){var r={}.toString;e.exports=Array.isArray||function(e){return\"[object Array]\"==r.call(e)}},function(e,t){var r={}.toString;e.exports=Array.isArray||function(e){return\"[object Array]\"==r.call(e)}},function(e,t){},function(e,t,r){\"use strict\";var n=r(31).Buffer,i=r(121);e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return\"\";for(var t=this.head,r=\"\"+t.data;t=t.next;)r+=e+t.data;return r},e.prototype.concat=function(e){if(0===this.length)return n.alloc(0);if(1===this.length)return this.head.data;for(var t,r,i,o=n.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,r=o,i=s,t.copy(r,i),s+=a.data.length,a=a.next;return o},e}(),i&&i.inspect&&i.inspect.custom&&(e.exports.prototype[i.inspect.custom]=function(){var e=i.inspect({length:this.length});return this.constructor.name+\" \"+e})},function(e,t){},function(e,t,r){(function(e,t){!function(e,r){\"use strict\";if(!e.setImmediate){var n,i,o,a,s,f=1,u={},c=!1,h=e.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(e);d=d&&d.setTimeout?d:e,\"[object process]\"==={}.toString.call(e.process)?n=function(e){t.nextTick((function(){p(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,r=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage(\"\",\"*\"),e.onmessage=r,t}}()?e.MessageChannel?((o=new MessageChannel).port1.onmessage=function(e){p(e.data)},n=function(e){o.port2.postMessage(e)}):h&&\"onreadystatechange\"in h.createElement(\"script\")?(i=h.documentElement,n=function(e){var t=h.createElement(\"script\");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):n=function(e){setTimeout(p,0,e)}:(a=\"setImmediate$\"+Math.random()+\"$\",s=function(t){t.source===e&&\"string\"==typeof t.data&&0===t.data.indexOf(a)&&p(+t.data.slice(a.length))},e.addEventListener?e.addEventListener(\"message\",s,!1):e.attachEvent(\"onmessage\",s),n=function(t){e.postMessage(a+t,\"*\")}),d.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var i={callback:e,args:t};return u[f]=i,n(f),f++},d.clearImmediate=l}function l(e){delete u[e]}function p(e){if(c)setTimeout(p,0,e);else{var t=u[e];if(t){c=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(void 0,r)}}(t)}finally{l(e),c=!1}}}}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,r(5),r(3))},function(e,t,r){\"use strict\";e.exports=o;var n=r(61),i=Object.create(r(19));function o(e){if(!(this instanceof o))return new o(e);n.call(this,e)}i.inherits=r(0),i.inherits(o,n),o.prototype._transform=function(e,t,r){r(null,e)}},function(e,t,r){e.exports=r(32)},function(e,t,r){e.exports=r(11)},function(e,t,r){e.exports=r(30).Transform},function(e,t,r){e.exports=r(30).PassThrough},function(e,t,r){\"use strict\";var n=r(2).Buffer,i=r(18).Transform,o=r(0);e.exports=function(e){function t(t,r,n,o){i.call(this,o),this._rate=t,this._capacity=r,this._delimitedSuffix=n,this._options=o,this._state=new e,this._state.initialize(t,r),this._finalized=!1}return o(t,i),t.prototype._transform=function(e,t,r){var n=null;try{this.update(e,t)}catch(e){n=e}r(n)},t.prototype._flush=function(){},t.prototype._read=function(e){this.push(this.squeeze(e))},t.prototype.update=function(e,t){if(!n.isBuffer(e)&&\"string\"!=typeof e)throw new TypeError(\"Data must be a string or a buffer\");if(this._finalized)throw new Error(\"Squeeze already called\");return n.isBuffer(e)||(e=n.from(e,t)),this._state.absorb(e),this},t.prototype.squeeze=function(e,t){this._finalized||(this._finalized=!0,this._state.absorbLastFewBits(this._delimitedSuffix));var r=this._state.squeeze(e);return void 0!==t&&(r=r.toString(t)),r},t.prototype._resetState=function(){return this._state.initialize(this._rate,this._capacity),this},t.prototype._clone=function(){var e=new t(this._rate,this._capacity,this._delimitedSuffix,this._options);return this._state.copy(e._state),e._finalized=this._finalized,e},t}},function(e,t,r){\"use strict\";var n=r(2).Buffer,i=r(130);function o(){this.state=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.blockSize=null,this.count=0,this.squeezing=!1}o.prototype.initialize=function(e,t){for(var r=0;r<50;++r)this.state[r]=0;this.blockSize=e/8,this.count=0,this.squeezing=!1},o.prototype.absorb=function(e){for(var t=0;t<e.length;++t)this.state[~~(this.count/4)]^=e[t]<<this.count%4*8,this.count+=1,this.count===this.blockSize&&(i.p1600(this.state),this.count=0)},o.prototype.absorbLastFewBits=function(e){this.state[~~(this.count/4)]^=e<<this.count%4*8,0!=(128&e)&&this.count===this.blockSize-1&&i.p1600(this.state),this.state[~~((this.blockSize-1)/4)]^=128<<(this.blockSize-1)%4*8,i.p1600(this.state),this.count=0,this.squeezing=!0},o.prototype.squeeze=function(e){this.squeezing||this.absorbLastFewBits(1);for(var t=n.alloc(e),r=0;r<e;++r)t[r]=this.state[~~(this.count/4)]>>>this.count%4*8&255,this.count+=1,this.count===this.blockSize&&(i.p1600(this.state),this.count=0);return t},o.prototype.copy=function(e){for(var t=0;t<50;++t)e.state[t]=this.state[t];e.blockSize=this.blockSize,e.count=this.count,e.squeezing=this.squeezing},e.exports=o},function(e,t,r){\"use strict\";var n=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648];t.p1600=function(e){for(var t=0;t<24;++t){var r=e[0]^e[10]^e[20]^e[30]^e[40],i=e[1]^e[11]^e[21]^e[31]^e[41],o=e[2]^e[12]^e[22]^e[32]^e[42],a=e[3]^e[13]^e[23]^e[33]^e[43],s=e[4]^e[14]^e[24]^e[34]^e[44],f=e[5]^e[15]^e[25]^e[35]^e[45],u=e[6]^e[16]^e[26]^e[36]^e[46],c=e[7]^e[17]^e[27]^e[37]^e[47],h=e[8]^e[18]^e[28]^e[38]^e[48],d=e[9]^e[19]^e[29]^e[39]^e[49],l=h^(o<<1|a>>>31),p=d^(a<<1|o>>>31),b=e[0]^l,y=e[1]^p,g=e[10]^l,v=e[11]^p,m=e[20]^l,w=e[21]^p,_=e[30]^l,E=e[31]^p,S=e[40]^l,A=e[41]^p;l=r^(s<<1|f>>>31),p=i^(f<<1|s>>>31);var x=e[2]^l,k=e[3]^p,M=e[12]^l,T=e[13]^p,I=e[22]^l,R=e[23]^p,P=e[32]^l,L=e[33]^p,B=e[42]^l,C=e[43]^p;l=o^(u<<1|c>>>31),p=a^(c<<1|u>>>31);var O=e[4]^l,N=e[5]^p,j=e[14]^l,D=e[15]^p,U=e[24]^l,z=e[25]^p,q=e[34]^l,F=e[35]^p,K=e[44]^l,H=e[45]^p;l=s^(h<<1|d>>>31),p=f^(d<<1|h>>>31);var V=e[6]^l,Y=e[7]^p,W=e[16]^l,G=e[17]^p,Z=e[26]^l,J=e[27]^p,$=e[36]^l,X=e[37]^p,Q=e[46]^l,ee=e[47]^p;l=u^(r<<1|i>>>31),p=c^(i<<1|r>>>31);var te=e[8]^l,re=e[9]^p,ne=e[18]^l,ie=e[19]^p,oe=e[28]^l,ae=e[29]^p,se=e[38]^l,fe=e[39]^p,ue=e[48]^l,ce=e[49]^p,he=b,de=y,le=v<<4|g>>>28,pe=g<<4|v>>>28,be=m<<3|w>>>29,ye=w<<3|m>>>29,ge=E<<9|_>>>23,ve=_<<9|E>>>23,me=S<<18|A>>>14,we=A<<18|S>>>14,_e=x<<1|k>>>31,Ee=k<<1|x>>>31,Se=T<<12|M>>>20,Ae=M<<12|T>>>20,xe=I<<10|R>>>22,ke=R<<10|I>>>22,Me=L<<13|P>>>19,Te=P<<13|L>>>19,Ie=B<<2|C>>>30,Re=C<<2|B>>>30,Pe=N<<30|O>>>2,Le=O<<30|N>>>2,Be=j<<6|D>>>26,Ce=D<<6|j>>>26,Oe=z<<11|U>>>21,Ne=U<<11|z>>>21,je=q<<15|F>>>17,De=F<<15|q>>>17,Ue=H<<29|K>>>3,ze=K<<29|H>>>3,qe=V<<28|Y>>>4,Fe=Y<<28|V>>>4,Ke=G<<23|W>>>9,He=W<<23|G>>>9,Ve=Z<<25|J>>>7,Ye=J<<25|Z>>>7,We=$<<21|X>>>11,Ge=X<<21|$>>>11,Ze=ee<<24|Q>>>8,Je=Q<<24|ee>>>8,$e=te<<27|re>>>5,Xe=re<<27|te>>>5,Qe=ne<<20|ie>>>12,et=ie<<20|ne>>>12,tt=ae<<7|oe>>>25,rt=oe<<7|ae>>>25,nt=se<<8|fe>>>24,it=fe<<8|se>>>24,ot=ue<<14|ce>>>18,at=ce<<14|ue>>>18;e[0]=he^~Se&Oe,e[1]=de^~Ae&Ne,e[10]=qe^~Qe&be,e[11]=Fe^~et&ye,e[20]=_e^~Be&Ve,e[21]=Ee^~Ce&Ye,e[30]=$e^~le&xe,e[31]=Xe^~pe&ke,e[40]=Pe^~Ke&tt,e[41]=Le^~He&rt,e[2]=Se^~Oe&We,e[3]=Ae^~Ne&Ge,e[12]=Qe^~be&Me,e[13]=et^~ye&Te,e[22]=Be^~Ve&nt,e[23]=Ce^~Ye&it,e[32]=le^~xe&je,e[33]=pe^~ke&De,e[42]=Ke^~tt&ge,e[43]=He^~rt&ve,e[4]=Oe^~We&ot,e[5]=Ne^~Ge&at,e[14]=be^~Me&Ue,e[15]=ye^~Te&ze,e[24]=Ve^~nt&me,e[25]=Ye^~it&we,e[34]=xe^~je&Ze,e[35]=ke^~De&Je,e[44]=tt^~ge&Ie,e[45]=rt^~ve&Re,e[6]=We^~ot&he,e[7]=Ge^~at&de,e[16]=Me^~Ue&qe,e[17]=Te^~ze&Fe,e[26]=nt^~me&_e,e[27]=it^~we&Ee,e[36]=je^~Ze&$e,e[37]=De^~Je&Xe,e[46]=ge^~Ie&Pe,e[47]=ve^~Re&Le,e[8]=ot^~he&Se,e[9]=at^~de&Ae,e[18]=Ue^~qe&Qe,e[19]=ze^~Fe&et,e[28]=me^~_e&Be,e[29]=we^~Ee&Ce,e[38]=Ze^~$e&le,e[39]=Je^~Xe&pe,e[48]=Ie^~Pe&Ke,e[49]=Re^~Le&He,e[0]^=n[2*t],e[1]^=n[2*t+1]}}},function(e,t,r){\"use strict\";e.exports=r(132)(r(136))},function(e,t,r){\"use strict\";var n=r(133),i=r(134),o=r(62);function a(e,t){return void 0===e?t:(n.isBoolean(e,o.COMPRESSED_TYPE_INVALID),e)}e.exports=function(e){return{privateKeyVerify:function(t){return n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),32===t.length&&e.privateKeyVerify(t)},privateKeyExport:function(t,r){n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(t,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),r=a(r,!0);var s=e.privateKeyExport(t,r);return i.privateKeyExport(t,s,r)},privateKeyImport:function(t){if(n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),(t=i.privateKeyImport(t))&&32===t.length&&e.privateKeyVerify(t))return t;throw new Error(o.EC_PRIVATE_KEY_IMPORT_DER_FAIL)},privateKeyNegate:function(t){return n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(t,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),e.privateKeyNegate(t)},privateKeyModInverse:function(t){return n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(t,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),e.privateKeyModInverse(t)},privateKeyTweakAdd:function(t,r){return n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(t,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),e.privateKeyTweakAdd(t,r)},privateKeyTweakMul:function(t,r){return n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(t,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),e.privateKeyTweakMul(t,r)},publicKeyCreate:function(t,r){return n.isBuffer(t,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(t,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),r=a(r,!0),e.publicKeyCreate(t,r)},publicKeyConvert:function(t,r){return n.isBuffer(t,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(t,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),r=a(r,!0),e.publicKeyConvert(t,r)},publicKeyVerify:function(t){return n.isBuffer(t,o.EC_PUBLIC_KEY_TYPE_INVALID),e.publicKeyVerify(t)},publicKeyTweakAdd:function(t,r,i){return n.isBuffer(t,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(t,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),i=a(i,!0),e.publicKeyTweakAdd(t,r,i)},publicKeyTweakMul:function(t,r,i){return n.isBuffer(t,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(t,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),n.isBuffer(r,o.TWEAK_TYPE_INVALID),n.isBufferLength(r,32,o.TWEAK_LENGTH_INVALID),i=a(i,!0),e.publicKeyTweakMul(t,r,i)},publicKeyCombine:function(t,r){n.isArray(t,o.EC_PUBLIC_KEYS_TYPE_INVALID),n.isLengthGTZero(t,o.EC_PUBLIC_KEYS_LENGTH_INVALID);for(var i=0;i<t.length;++i)n.isBuffer(t[i],o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(t[i],33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID);return r=a(r,!0),e.publicKeyCombine(t,r)},signatureNormalize:function(t){return n.isBuffer(t,o.ECDSA_SIGNATURE_TYPE_INVALID),n.isBufferLength(t,64,o.ECDSA_SIGNATURE_LENGTH_INVALID),e.signatureNormalize(t)},signatureExport:function(t){n.isBuffer(t,o.ECDSA_SIGNATURE_TYPE_INVALID),n.isBufferLength(t,64,o.ECDSA_SIGNATURE_LENGTH_INVALID);var r=e.signatureExport(t);return i.signatureExport(r)},signatureImport:function(t){n.isBuffer(t,o.ECDSA_SIGNATURE_TYPE_INVALID),n.isLengthGTZero(t,o.ECDSA_SIGNATURE_LENGTH_INVALID);var r=i.signatureImport(t);if(r)return e.signatureImport(r);throw new Error(o.ECDSA_SIGNATURE_PARSE_DER_FAIL)},signatureImportLax:function(t){n.isBuffer(t,o.ECDSA_SIGNATURE_TYPE_INVALID),n.isLengthGTZero(t,o.ECDSA_SIGNATURE_LENGTH_INVALID);var r=i.signatureImportLax(t);if(r)return e.signatureImport(r);throw new Error(o.ECDSA_SIGNATURE_PARSE_DER_FAIL)},sign:function(t,r,i){n.isBuffer(t,o.MSG32_TYPE_INVALID),n.isBufferLength(t,32,o.MSG32_LENGTH_INVALID),n.isBuffer(r,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(r,32,o.EC_PRIVATE_KEY_LENGTH_INVALID);var a=null,s=null;return void 0!==i&&(n.isObject(i,o.OPTIONS_TYPE_INVALID),void 0!==i.data&&(n.isBuffer(i.data,o.OPTIONS_DATA_TYPE_INVALID),n.isBufferLength(i.data,32,o.OPTIONS_DATA_LENGTH_INVALID),a=i.data),void 0!==i.noncefn&&(n.isFunction(i.noncefn,o.OPTIONS_NONCEFN_TYPE_INVALID),s=i.noncefn)),e.sign(t,r,s,a)},verify:function(t,r,i){return n.isBuffer(t,o.MSG32_TYPE_INVALID),n.isBufferLength(t,32,o.MSG32_LENGTH_INVALID),n.isBuffer(r,o.ECDSA_SIGNATURE_TYPE_INVALID),n.isBufferLength(r,64,o.ECDSA_SIGNATURE_LENGTH_INVALID),n.isBuffer(i,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(i,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),e.verify(t,r,i)},recover:function(t,r,i,s){return n.isBuffer(t,o.MSG32_TYPE_INVALID),n.isBufferLength(t,32,o.MSG32_LENGTH_INVALID),n.isBuffer(r,o.ECDSA_SIGNATURE_TYPE_INVALID),n.isBufferLength(r,64,o.ECDSA_SIGNATURE_LENGTH_INVALID),n.isNumber(i,o.RECOVERY_ID_TYPE_INVALID),n.isNumberInInterval(i,-1,4,o.RECOVERY_ID_VALUE_INVALID),s=a(s,!0),e.recover(t,r,i,s)},ecdh:function(t,r){return n.isBuffer(t,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(t,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),n.isBuffer(r,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(r,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),e.ecdh(t,r)},ecdhUnsafe:function(t,r,i){return n.isBuffer(t,o.EC_PUBLIC_KEY_TYPE_INVALID),n.isBufferLength2(t,33,65,o.EC_PUBLIC_KEY_LENGTH_INVALID),n.isBuffer(r,o.EC_PRIVATE_KEY_TYPE_INVALID),n.isBufferLength(r,32,o.EC_PRIVATE_KEY_LENGTH_INVALID),i=a(i,!0),e.ecdhUnsafe(t,r,i)}}}},function(e,t,r){\"use strict\";(function(e){var r=Object.prototype.toString;t.isArray=function(e,t){if(!Array.isArray(e))throw TypeError(t)},t.isBoolean=function(e,t){if(\"[object Boolean]\"!==r.call(e))throw TypeError(t)},t.isBuffer=function(t,r){if(!e.isBuffer(t))throw TypeError(r)},t.isFunction=function(e,t){if(\"[object Function]\"!==r.call(e))throw TypeError(t)},t.isNumber=function(e,t){if(\"[object Number]\"!==r.call(e))throw TypeError(t)},t.isObject=function(e,t){if(\"[object Object]\"!==r.call(e))throw TypeError(t)},t.isBufferLength=function(e,t,r){if(e.length!==t)throw RangeError(r)},t.isBufferLength2=function(e,t,r,n){if(e.length!==t&&e.length!==r)throw RangeError(n)},t.isLengthGTZero=function(e,t){if(0===e.length)throw RangeError(t)},t.isNumberInInterval=function(e,t,r,n){if(e<=t||e>=r)throw RangeError(n)}}).call(this,r(1).Buffer)},function(e,t,r){\"use strict\";var n=r(2).Buffer,i=r(135),o=n.from([48,129,211,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,133,48,129,130,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,33,2,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,36,3,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),a=n.from([48,130,1,19,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,165,48,129,162,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,65,4,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,72,58,218,119,38,163,196,101,93,164,251,252,14,17,8,168,253,23,180,72,166,133,84,25,156,71,208,143,251,16,212,184,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,68,3,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);t.privateKeyExport=function(e,t,r){var i=n.from(r?o:a);return e.copy(i,r?8:9),t.copy(i,r?181:214),i},t.privateKeyImport=function(e){var t=e.length,r=0;if(!(t<r+1||48!==e[r])&&!(t<(r+=1)+1)&&128&e[r]){var n=127&e[r];if(r+=1,!(n<1||n>2||t<r+n)){var i=e[r+n-1]|(n>1?e[r+n-2]<<8:0);if(!(t<(r+=n)+i||t<r+3||2!==e[r]||1!==e[r+1]||1!==e[r+2]||t<(r+=3)+2||4!==e[r]||e[r+1]>32||t<r+2+e[r+1]))return e.slice(r+2,r+2+e[r+1])}}},t.signatureExport=function(e){for(var t=n.concat([n.from([0]),e.r]),r=33,o=0;r>1&&0===t[o]&&!(128&t[o+1]);--r,++o);for(var a=n.concat([n.from([0]),e.s]),s=33,f=0;s>1&&0===a[f]&&!(128&a[f+1]);--s,++f);return i.encode(t.slice(o),a.slice(f))},t.signatureImport=function(e){var t=n.alloc(32,0),r=n.alloc(32,0);try{var o=i.decode(e);if(33===o.r.length&&0===o.r[0]&&(o.r=o.r.slice(1)),o.r.length>32)throw new Error(\"R length is too long\");if(33===o.s.length&&0===o.s[0]&&(o.s=o.s.slice(1)),o.s.length>32)throw new Error(\"S length is too long\")}catch(e){return}return o.r.copy(t,32-o.r.length),o.s.copy(r,32-o.s.length),{r:t,s:r}},t.signatureImportLax=function(e){var t=n.alloc(32,0),r=n.alloc(32,0),i=e.length,o=0;if(48===e[o++]){var a=e[o++];if(!(128&a&&(o+=a-128)>i)&&2===e[o++]){var s=e[o++];if(128&s){if(o+(a=s-128)>i)return;for(;a>0&&0===e[o];o+=1,a-=1);for(s=0;a>0;o+=1,a-=1)s=(s<<8)+e[o]}if(!(s>i-o)){var f=o;if(o+=s,2===e[o++]){var u=e[o++];if(128&u){if(o+(a=u-128)>i)return;for(;a>0&&0===e[o];o+=1,a-=1);for(u=0;a>0;o+=1,a-=1)u=(u<<8)+e[o]}if(!(u>i-o)){var c=o;for(o+=u;s>0&&0===e[f];s-=1,f+=1);if(!(s>32)){var h=e.slice(f,f+s);for(h.copy(t,32-h.length);u>0&&0===e[c];u-=1,c+=1);if(!(u>32)){var d=e.slice(c,c+u);return d.copy(r,32-d.length),{r:t,s:r}}}}}}}}}},function(e,t,r){var n=r(2).Buffer;e.exports={check:function(e){if(e.length<8)return!1;if(e.length>72)return!1;if(48!==e[0])return!1;if(e[1]!==e.length-2)return!1;if(2!==e[2])return!1;var t=e[3];if(0===t)return!1;if(5+t>=e.length)return!1;if(2!==e[4+t])return!1;var r=e[5+t];return 0!==r&&(6+t+r===e.length&&(!(128&e[4])&&(!(t>1&&0===e[4]&&!(128&e[5]))&&(!(128&e[t+6])&&!(r>1&&0===e[t+6]&&!(128&e[t+7]))))))},decode:function(e){if(e.length<8)throw new Error(\"DER sequence length is too short\");if(e.length>72)throw new Error(\"DER sequence length is too long\");if(48!==e[0])throw new Error(\"Expected DER sequence\");if(e[1]!==e.length-2)throw new Error(\"DER sequence length is invalid\");if(2!==e[2])throw new Error(\"Expected DER integer\");var t=e[3];if(0===t)throw new Error(\"R length is zero\");if(5+t>=e.length)throw new Error(\"R length is too long\");if(2!==e[4+t])throw new Error(\"Expected DER integer (2)\");var r=e[5+t];if(0===r)throw new Error(\"S length is zero\");if(6+t+r!==e.length)throw new Error(\"S length is invalid\");if(128&e[4])throw new Error(\"R value is negative\");if(t>1&&0===e[4]&&!(128&e[5]))throw new Error(\"R value excessively padded\");if(128&e[t+6])throw new Error(\"S value is negative\");if(r>1&&0===e[t+6]&&!(128&e[t+7]))throw new Error(\"S value excessively padded\");return{r:e.slice(4,4+t),s:e.slice(6+t)}},encode:function(e,t){var r=e.length,i=t.length;if(0===r)throw new Error(\"R length is zero\");if(0===i)throw new Error(\"S length is zero\");if(r>33)throw new Error(\"R length is too long\");if(i>33)throw new Error(\"S length is too long\");if(128&e[0])throw new Error(\"R value is negative\");if(128&t[0])throw new Error(\"S value is negative\");if(r>1&&0===e[0]&&!(128&e[1]))throw new Error(\"R value excessively padded\");if(i>1&&0===t[0]&&!(128&t[1]))throw new Error(\"S value excessively padded\");var o=n.allocUnsafe(6+r+i);return o[0]=48,o[1]=o.length-2,o[2]=2,o[3]=e.length,e.copy(o,4),o[4+r]=2,o[5+r]=t.length,t.copy(o,6+r),o}}},function(e,t,r){\"use strict\";var n=r(2).Buffer,i=r(34),o=r(4),a=r(36).ec,s=r(62),f=new a(\"secp256k1\"),u=f.curve;function c(e){var t=e[0];switch(t){case 2:case 3:return 33!==e.length?null:function(e,t){var r=new o(t);if(r.cmp(u.p)>=0)return null;var n=(r=r.toRed(u.red)).redSqr().redIMul(r).redIAdd(u.b).redSqrt();return 3===e!==n.isOdd()&&(n=n.redNeg()),f.keyPair({pub:{x:r,y:n}})}(t,e.slice(1,33));case 4:case 6:case 7:return 65!==e.length?null:function(e,t,r){var n=new o(t),i=new o(r);if(n.cmp(u.p)>=0||i.cmp(u.p)>=0)return null;if(n=n.toRed(u.red),i=i.toRed(u.red),(6===e||7===e)&&i.isOdd()!==(7===e))return null;var a=n.redSqr().redIMul(n);return i.redSqr().redISub(a.redIAdd(u.b)).isZero()?f.keyPair({pub:{x:n,y:i}}):null}(t,e.slice(1,33),e.slice(33,65));default:return null}}t.privateKeyVerify=function(e){var t=new o(e);return t.cmp(u.n)<0&&!t.isZero()},t.privateKeyExport=function(e,t){var r=new o(e);if(r.cmp(u.n)>=0||r.isZero())throw new Error(s.EC_PRIVATE_KEY_EXPORT_DER_FAIL);return n.from(f.keyFromPrivate(e).getPublic(t,!0))},t.privateKeyNegate=function(e){var t=new o(e);return t.isZero()?n.alloc(32):u.n.sub(t).umod(u.n).toArrayLike(n,\"be\",32)},t.privateKeyModInverse=function(e){var t=new o(e);if(t.cmp(u.n)>=0||t.isZero())throw new Error(s.EC_PRIVATE_KEY_RANGE_INVALID);return t.invm(u.n).toArrayLike(n,\"be\",32)},t.privateKeyTweakAdd=function(e,t){var r=new o(t);if(r.cmp(u.n)>=0)throw new Error(s.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);if(r.iadd(new o(e)),r.cmp(u.n)>=0&&r.isub(u.n),r.isZero())throw new Error(s.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);return r.toArrayLike(n,\"be\",32)},t.privateKeyTweakMul=function(e,t){var r=new o(t);if(r.cmp(u.n)>=0||r.isZero())throw new Error(s.EC_PRIVATE_KEY_TWEAK_MUL_FAIL);return r.imul(new o(e)),r.cmp(u.n)&&(r=r.umod(u.n)),r.toArrayLike(n,\"be\",32)},t.publicKeyCreate=function(e,t){var r=new o(e);if(r.cmp(u.n)>=0||r.isZero())throw new Error(s.EC_PUBLIC_KEY_CREATE_FAIL);return n.from(f.keyFromPrivate(e).getPublic(t,!0))},t.publicKeyConvert=function(e,t){var r=c(e);if(null===r)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);return n.from(r.getPublic(t,!0))},t.publicKeyVerify=function(e){return null!==c(e)},t.publicKeyTweakAdd=function(e,t,r){var i=c(e);if(null===i)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);if((t=new o(t)).cmp(u.n)>=0)throw new Error(s.EC_PUBLIC_KEY_TWEAK_ADD_FAIL);var a=u.g.mul(t).add(i.pub);if(a.isInfinity())throw new Error(s.EC_PUBLIC_KEY_TWEAK_ADD_FAIL);return n.from(a.encode(!0,r))},t.publicKeyTweakMul=function(e,t,r){var i=c(e);if(null===i)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);if((t=new o(t)).cmp(u.n)>=0||t.isZero())throw new Error(s.EC_PUBLIC_KEY_TWEAK_MUL_FAIL);return n.from(i.pub.mul(t).encode(!0,r))},t.publicKeyCombine=function(e,t){for(var r=new Array(e.length),i=0;i<e.length;++i)if(r[i]=c(e[i]),null===r[i])throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);for(var o=r[0].pub,a=1;a<r.length;++a)o=o.add(r[a].pub);if(o.isInfinity())throw new Error(s.EC_PUBLIC_KEY_COMBINE_FAIL);return n.from(o.encode(!0,t))},t.signatureNormalize=function(e){var t=new o(e.slice(0,32)),r=new o(e.slice(32,64));if(t.cmp(u.n)>=0||r.cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);var i=n.from(e);return 1===r.cmp(f.nh)&&u.n.sub(r).toArrayLike(n,\"be\",32).copy(i,32),i},t.signatureExport=function(e){var t=e.slice(0,32),r=e.slice(32,64);if(new o(t).cmp(u.n)>=0||new o(r).cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);return{r:t,s:r}},t.signatureImport=function(e){var t=new o(e.r);t.cmp(u.n)>=0&&(t=new o(0));var r=new o(e.s);return r.cmp(u.n)>=0&&(r=new o(0)),n.concat([t.toArrayLike(n,\"be\",32),r.toArrayLike(n,\"be\",32)])},t.sign=function(e,t,r,i){if(\"function\"==typeof r){var a=r;r=function(r){var f=a(e,t,null,i,r);if(!n.isBuffer(f)||32!==f.length)throw new Error(s.ECDSA_SIGN_FAIL);return new o(f)}}var c=new o(t);if(c.cmp(u.n)>=0||c.isZero())throw new Error(s.ECDSA_SIGN_FAIL);var h=f.sign(e,t,{canonical:!0,k:r,pers:i});return{signature:n.concat([h.r.toArrayLike(n,\"be\",32),h.s.toArrayLike(n,\"be\",32)]),recovery:h.recoveryParam}},t.verify=function(e,t,r){var n={r:t.slice(0,32),s:t.slice(32,64)},i=new o(n.r),a=new o(n.s);if(i.cmp(u.n)>=0||a.cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);if(1===a.cmp(f.nh)||i.isZero()||a.isZero())return!1;var h=c(r);if(null===h)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);return f.verify(e,n,{x:h.pub.x,y:h.pub.y})},t.recover=function(e,t,r,i){var a={r:t.slice(0,32),s:t.slice(32,64)},c=new o(a.r),h=new o(a.s);if(c.cmp(u.n)>=0||h.cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);try{if(c.isZero()||h.isZero())throw new Error;var d=f.recoverPubKey(e,a,r);return n.from(d.encode(!0,i))}catch(e){throw new Error(s.ECDSA_RECOVER_FAIL)}},t.ecdh=function(e,r){var n=t.ecdhUnsafe(e,r,!0);return i(\"sha256\").update(n).digest()},t.ecdhUnsafe=function(e,t,r){var i=c(e);if(null===i)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);var a=new o(t);if(a.cmp(u.n)>=0||a.isZero())throw new Error(s.ECDH_FAIL);return n.from(i.pub.mul(a).encode(!0,r))}},function(e,t,r){\"use strict\";var n=r(0),i=r(63),o=r(2).Buffer,a=new Array(16);function s(){i.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function f(e,t){return e<<t|e>>>32-t}function u(e,t,r,n,i,o,a){return f(e+(t&r|~t&n)+i+o|0,a)+t|0}function c(e,t,r,n,i,o,a){return f(e+(t&n|r&~n)+i+o|0,a)+t|0}function h(e,t,r,n,i,o,a){return f(e+(t^r^n)+i+o|0,a)+t|0}function d(e,t,r,n,i,o,a){return f(e+(r^(t|~n))+i+o|0,a)+t|0}n(s,i),s.prototype._update=function(){for(var e=a,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);var r=this._a,n=this._b,i=this._c,o=this._d;r=u(r,n,i,o,e[0],3614090360,7),o=u(o,r,n,i,e[1],3905402710,12),i=u(i,o,r,n,e[2],606105819,17),n=u(n,i,o,r,e[3],3250441966,22),r=u(r,n,i,o,e[4],4118548399,7),o=u(o,r,n,i,e[5],1200080426,12),i=u(i,o,r,n,e[6],2821735955,17),n=u(n,i,o,r,e[7],4249261313,22),r=u(r,n,i,o,e[8],1770035416,7),o=u(o,r,n,i,e[9],2336552879,12),i=u(i,o,r,n,e[10],4294925233,17),n=u(n,i,o,r,e[11],2304563134,22),r=u(r,n,i,o,e[12],1804603682,7),o=u(o,r,n,i,e[13],4254626195,12),i=u(i,o,r,n,e[14],2792965006,17),r=c(r,n=u(n,i,o,r,e[15],1236535329,22),i,o,e[1],4129170786,5),o=c(o,r,n,i,e[6],3225465664,9),i=c(i,o,r,n,e[11],643717713,14),n=c(n,i,o,r,e[0],3921069994,20),r=c(r,n,i,o,e[5],3593408605,5),o=c(o,r,n,i,e[10],38016083,9),i=c(i,o,r,n,e[15],3634488961,14),n=c(n,i,o,r,e[4],3889429448,20),r=c(r,n,i,o,e[9],568446438,5),o=c(o,r,n,i,e[14],3275163606,9),i=c(i,o,r,n,e[3],4107603335,14),n=c(n,i,o,r,e[8],1163531501,20),r=c(r,n,i,o,e[13],2850285829,5),o=c(o,r,n,i,e[2],4243563512,9),i=c(i,o,r,n,e[7],1735328473,14),r=h(r,n=c(n,i,o,r,e[12],2368359562,20),i,o,e[5],4294588738,4),o=h(o,r,n,i,e[8],2272392833,11),i=h(i,o,r,n,e[11],1839030562,16),n=h(n,i,o,r,e[14],4259657740,23),r=h(r,n,i,o,e[1],2763975236,4),o=h(o,r,n,i,e[4],1272893353,11),i=h(i,o,r,n,e[7],4139469664,16),n=h(n,i,o,r,e[10],3200236656,23),r=h(r,n,i,o,e[13],681279174,4),o=h(o,r,n,i,e[0],3936430074,11),i=h(i,o,r,n,e[3],3572445317,16),n=h(n,i,o,r,e[6],76029189,23),r=h(r,n,i,o,e[9],3654602809,4),o=h(o,r,n,i,e[12],3873151461,11),i=h(i,o,r,n,e[15],530742520,16),r=d(r,n=h(n,i,o,r,e[2],3299628645,23),i,o,e[0],4096336452,6),o=d(o,r,n,i,e[7],1126891415,10),i=d(i,o,r,n,e[14],2878612391,15),n=d(n,i,o,r,e[5],4237533241,21),r=d(r,n,i,o,e[12],1700485571,6),o=d(o,r,n,i,e[3],2399980690,10),i=d(i,o,r,n,e[10],4293915773,15),n=d(n,i,o,r,e[1],2240044497,21),r=d(r,n,i,o,e[8],1873313359,6),o=d(o,r,n,i,e[15],4264355552,10),i=d(i,o,r,n,e[6],2734768916,15),n=d(n,i,o,r,e[13],1309151649,21),r=d(r,n,i,o,e[4],4149444226,6),o=d(o,r,n,i,e[11],3174756917,10),i=d(i,o,r,n,e[2],718787259,15),n=d(n,i,o,r,e[9],3951481745,21),this._a=this._a+r|0,this._b=this._b+n|0,this._c=this._c+i|0,this._d=this._d+o|0},s.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=o.allocUnsafe(16);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e},e.exports=s},function(e,t,r){(t=e.exports=r(64)).Stream=t,t.Readable=t,t.Writable=r(68),t.Duplex=r(16),t.Transform=r(69),t.PassThrough=r(144),t.finished=r(35),t.pipeline=r(145)},function(e,t){},function(e,t,r){\"use strict\";function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var a=r(1).Buffer,s=r(141).inspect,f=s&&s.custom||\"inspect\";e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.head=null,this.tail=null,this.length=0}var t,r,u;return t=e,(r=[{key:\"push\",value:function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:\"unshift\",value:function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:\"shift\",value:function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(e){if(0===this.length)return\"\";for(var t=this.head,r=\"\"+t.data;t=t.next;)r+=e+t.data;return r}},{key:\"concat\",value:function(e){if(0===this.length)return a.alloc(0);for(var t,r,n,i=a.allocUnsafe(e>>>0),o=this.head,s=0;o;)t=o.data,r=i,n=s,a.prototype.copy.call(t,r,n),s+=o.data.length,o=o.next;return i}},{key:\"consume\",value:function(e,t){var r;return e<this.head.data.length?(r=this.head.data.slice(0,e),this.head.data=this.head.data.slice(e)):r=e===this.head.data.length?this.shift():t?this._getString(e):this._getBuffer(e),r}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(e){var t=this.head,r=1,n=t.data;for(e-=n.length;t=t.next;){var i=t.data,o=e>i.length?i.length:e;if(o===i.length?n+=i:n+=i.slice(0,e),0==(e-=o)){o===i.length?(++r,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=i.slice(o));break}++r}return this.length-=r,n}},{key:\"_getBuffer\",value:function(e){var t=a.allocUnsafe(e),r=this.head,n=1;for(r.data.copy(t),e-=r.data.length;r=r.next;){var i=r.data,o=e>i.length?i.length:e;if(i.copy(t,t.length-e,0,o),0==(e-=o)){o===i.length?(++n,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=i.slice(o));break}++n}return this.length-=n,t}},{key:f,value:function(e,t){return s(this,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},t,{depth:0,customInspect:!1}))}}])&&o(t.prototype,r),u&&o(t,u),e}()},function(e,t){},function(e,t,r){\"use strict\";(function(t){var n;function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var o=r(35),a=Symbol(\"lastResolve\"),s=Symbol(\"lastReject\"),f=Symbol(\"error\"),u=Symbol(\"ended\"),c=Symbol(\"lastPromise\"),h=Symbol(\"handlePromise\"),d=Symbol(\"stream\");function l(e,t){return{value:e,done:t}}function p(e){var t=e[a];if(null!==t){var r=e[d].read();null!==r&&(e[c]=null,e[a]=null,e[s]=null,t(l(r,!1)))}}function b(e){t.nextTick(p,e)}var y=Object.getPrototypeOf((function(){})),g=Object.setPrototypeOf((i(n={get stream(){return this[d]},next:function(){var e=this,r=this[f];if(null!==r)return Promise.reject(r);if(this[u])return Promise.resolve(l(void 0,!0));if(this[d].destroyed)return new Promise((function(r,n){t.nextTick((function(){e[f]?n(e[f]):r(l(void 0,!0))}))}));var n,i=this[c];if(i)n=new Promise(function(e,t){return function(r,n){e.then((function(){t[u]?r(l(void 0,!0)):t[h](r,n)}),n)}}(i,this));else{var o=this[d].read();if(null!==o)return Promise.resolve(l(o,!1));n=new Promise(this[h])}return this[c]=n,n}},Symbol.asyncIterator,(function(){return this})),i(n,\"return\",(function(){var e=this;return new Promise((function(t,r){e[d].destroy(null,(function(e){e?r(e):t(l(void 0,!0))}))}))})),n),y);e.exports=function(e){var t,r=Object.create(g,(i(t={},d,{value:e,writable:!0}),i(t,a,{value:null,writable:!0}),i(t,s,{value:null,writable:!0}),i(t,f,{value:null,writable:!0}),i(t,u,{value:e._readableState.endEmitted,writable:!0}),i(t,h,{value:function(e,t){var n=r[d].read();n?(r[c]=null,r[a]=null,r[s]=null,e(l(n,!1))):(r[a]=e,r[s]=t)},writable:!0}),t));return r[c]=null,o(e,(function(e){if(e&&\"ERR_STREAM_PREMATURE_CLOSE\"!==e.code){var t=r[s];return null!==t&&(r[c]=null,r[a]=null,r[s]=null,t(e)),void(r[f]=e)}var n=r[a];null!==n&&(r[c]=null,r[a]=null,r[s]=null,n(l(void 0,!0))),r[u]=!0})),e.on(\"readable\",b.bind(null,r)),r}}).call(this,r(3))},function(e,t){e.exports=function(){throw new Error(\"Readable.from is not available in the browser\")}},function(e,t,r){\"use strict\";e.exports=i;var n=r(69);function i(e){if(!(this instanceof i))return new i(e);n.call(this,e)}r(0)(i,n),i.prototype._transform=function(e,t,r){r(null,e)}},function(e,t,r){\"use strict\";var n;var i=r(15).codes,o=i.ERR_MISSING_ARGS,a=i.ERR_STREAM_DESTROYED;function s(e){if(e)throw e}function f(e,t,i,o){o=function(e){var t=!1;return function(){t||(t=!0,e.apply(void 0,arguments))}}(o);var s=!1;e.on(\"close\",(function(){s=!0})),void 0===n&&(n=r(35)),n(e,{readable:t,writable:i},(function(e){if(e)return o(e);s=!0,o()}));var f=!1;return function(t){if(!s&&!f)return f=!0,function(e){return e.setHeader&&\"function\"==typeof e.abort}(e)?e.abort():\"function\"==typeof e.destroy?e.destroy():void o(t||new a(\"pipe\"))}}function u(e){e()}function c(e,t){return e.pipe(t)}function h(e){return e.length?\"function\"!=typeof e[e.length-1]?s:e.pop():s}e.exports=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];var n,i=h(t);if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new o(\"streams\");var a=t.map((function(e,r){var o=r<t.length-1;return f(e,o,r>0,(function(e){n||(n=e),e&&a.forEach(u),o||(a.forEach(u),i(n))}))}));return t.reduce(c)}},function(e,t,r){\"use strict\";var n=r(1).Buffer,i=r(0),o=r(63),a=new Array(16),s=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],f=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],u=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],c=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],h=[0,1518500249,1859775393,2400959708,2840853838],d=[1352829926,1548603684,1836072691,2053994217,0];function l(){o.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function p(e,t){return e<<t|e>>>32-t}function b(e,t,r,n,i,o,a,s){return p(e+(t^r^n)+o+a|0,s)+i|0}function y(e,t,r,n,i,o,a,s){return p(e+(t&r|~t&n)+o+a|0,s)+i|0}function g(e,t,r,n,i,o,a,s){return p(e+((t|~r)^n)+o+a|0,s)+i|0}function v(e,t,r,n,i,o,a,s){return p(e+(t&n|r&~n)+o+a|0,s)+i|0}function m(e,t,r,n,i,o,a,s){return p(e+(t^(r|~n))+o+a|0,s)+i|0}i(l,o),l.prototype._update=function(){for(var e=a,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);for(var r=0|this._a,n=0|this._b,i=0|this._c,o=0|this._d,l=0|this._e,w=0|this._a,_=0|this._b,E=0|this._c,S=0|this._d,A=0|this._e,x=0;x<80;x+=1){var k,M;x<16?(k=b(r,n,i,o,l,e[s[x]],h[0],u[x]),M=m(w,_,E,S,A,e[f[x]],d[0],c[x])):x<32?(k=y(r,n,i,o,l,e[s[x]],h[1],u[x]),M=v(w,_,E,S,A,e[f[x]],d[1],c[x])):x<48?(k=g(r,n,i,o,l,e[s[x]],h[2],u[x]),M=g(w,_,E,S,A,e[f[x]],d[2],c[x])):x<64?(k=v(r,n,i,o,l,e[s[x]],h[3],u[x]),M=y(w,_,E,S,A,e[f[x]],d[3],c[x])):(k=m(r,n,i,o,l,e[s[x]],h[4],u[x]),M=b(w,_,E,S,A,e[f[x]],d[4],c[x])),r=l,l=o,o=p(i,10),i=n,n=k,w=A,A=S,S=p(E,10),E=_,_=M}var T=this._b+i+S|0;this._b=this._c+o+A|0,this._c=this._d+l+w|0,this._d=this._e+r+_|0,this._e=this._a+n+E|0,this._a=T},l.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=n.alloc?n.alloc(20):new n(20);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e.writeInt32LE(this._e,16),e},e.exports=l},function(e,t,r){(t=e.exports=function(e){e=e.toLowerCase();var r=t[e];if(!r)throw new Error(e+\" is not supported (we accept pull requests)\");return new r}).sha=r(148),t.sha1=r(149),t.sha224=r(150),t.sha256=r(70),t.sha384=r(151),t.sha512=r(71)},function(e,t,r){var n=r(0),i=r(17),o=r(2).Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function f(){this.init(),this._w=s,i.call(this,64,56)}function u(e){return e<<30|e>>>2}function c(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(f,i),f.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},f.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,f=0|this._e,h=0;h<16;++h)r[h]=e.readInt32BE(4*h);for(;h<80;++h)r[h]=r[h-3]^r[h-8]^r[h-14]^r[h-16];for(var d=0;d<80;++d){var l=~~(d/20),p=0|((t=n)<<5|t>>>27)+c(l,i,o,s)+f+r[d]+a[l];f=s,s=o,o=u(i),i=n,n=p}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=f+this._e|0},f.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=f},function(e,t,r){var n=r(0),i=r(17),o=r(2).Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function f(){this.init(),this._w=s,i.call(this,64,56)}function u(e){return e<<5|e>>>27}function c(e){return e<<30|e>>>2}function h(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(f,i),f.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},f.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,f=0|this._e,d=0;d<16;++d)r[d]=e.readInt32BE(4*d);for(;d<80;++d)r[d]=(t=r[d-3]^r[d-8]^r[d-14]^r[d-16])<<1|t>>>31;for(var l=0;l<80;++l){var p=~~(l/20),b=u(n)+h(p,i,o,s)+f+r[l]+a[p]|0;f=s,s=o,o=c(i),i=n,n=b}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=f+this._e|0},f.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=f},function(e,t,r){var n=r(0),i=r(70),o=r(17),a=r(2).Buffer,s=new Array(64);function f(){this.init(),this._w=s,o.call(this,64,56)}n(f,i),f.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},f.prototype._hash=function(){var e=a.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},e.exports=f},function(e,t,r){var n=r(0),i=r(71),o=r(17),a=r(2).Buffer,s=new Array(160);function f(){this.init(),this._w=s,o.call(this,128,112)}n(f,i),f.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},f.prototype._hash=function(){var e=a.allocUnsafe(48);function t(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},e.exports=f},function(e,t,r){var n=r(2).Buffer,i=r(18).Transform,o=r(20).StringDecoder;function a(e){i.call(this),this.hashMode=\"string\"==typeof e,this.hashMode?this[e]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}r(0)(a,i),a.prototype.update=function(e,t,r){\"string\"==typeof e&&(e=n.from(e,t));var i=this._update(e);return this.hashMode?this:(r&&(i=this._toString(i,r)),i)},a.prototype.setAutoPadding=function(){},a.prototype.getAuthTag=function(){throw new Error(\"trying to get auth tag in unsupported state\")},a.prototype.setAuthTag=function(){throw new Error(\"trying to set auth tag in unsupported state\")},a.prototype.setAAD=function(){throw new Error(\"trying to set aad in unsupported state\")},a.prototype._transform=function(e,t,r){var n;try{this.hashMode?this._update(e):this.push(this._update(e))}catch(e){n=e}finally{r(n)}},a.prototype._flush=function(e){var t;try{this.push(this.__final())}catch(e){t=e}e(t)},a.prototype._finalOrDigest=function(e){var t=this.__final()||n.alloc(0);return e&&(t=this._toString(t,e,!0)),t},a.prototype._toString=function(e,t,r){if(this._decoder||(this._decoder=new o(t),this._encoding=t),this._encoding!==t)throw new Error(\"can't switch encodings\");var n=this._decoder.write(e);return r&&(n+=this._decoder.end()),n},e.exports=a},function(e,t){},function(e){e.exports={_args:[[\"elliptic@6.5.3\",\"/Users/tom/Workspaces/sandbox/web-sdk/packages/portis-web3\"]],_from:\"elliptic@6.5.3\",_id:\"elliptic@6.5.3\",_inBundle:!1,_integrity:\"sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==\",_location:\"/elliptic\",_phantomChildren:{},_requested:{type:\"version\",registry:!0,raw:\"elliptic@6.5.3\",name:\"elliptic\",escapedName:\"elliptic\",rawSpec:\"6.5.3\",saveSpec:null,fetchSpec:\"6.5.3\"},_requiredBy:[\"/browserify-sign\",\"/create-ecdh\",\"/eth-json-rpc-filters/ethereumjs-abi/ethereumjs-util\",\"/eth-json-rpc-middleware/ethereumjs-abi/ethereumjs-util\",\"/eth-sig-util\",\"/eth-sig-util/ethereumjs-abi/ethereumjs-util\",\"/ethereumjs-util/secp256k1\",\"/ethereumjs-vm/ethereumjs-block/ethereumjs-util\",\"/ethereumjs-vm/ethereumjs-util\",\"/secp256k1\"],_resolved:\"https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz\",_spec:\"6.5.3\",_where:\"/Users/tom/Workspaces/sandbox/web-sdk/packages/portis-web3\",author:{name:\"Fedor Indutny\",email:\"fedor@indutny.com\"},bugs:{url:\"https://github.com/indutny/elliptic/issues\"},dependencies:{\"bn.js\":\"^4.4.0\",brorand:\"^1.0.1\",\"hash.js\":\"^1.0.0\",\"hmac-drbg\":\"^1.0.0\",inherits:\"^2.0.1\",\"minimalistic-assert\":\"^1.0.0\",\"minimalistic-crypto-utils\":\"^1.0.0\"},description:\"EC cryptography\",devDependencies:{brfs:\"^1.4.3\",coveralls:\"^3.0.8\",grunt:\"^1.0.4\",\"grunt-browserify\":\"^5.0.0\",\"grunt-cli\":\"^1.2.0\",\"grunt-contrib-connect\":\"^1.0.0\",\"grunt-contrib-copy\":\"^1.0.0\",\"grunt-contrib-uglify\":\"^1.0.1\",\"grunt-mocha-istanbul\":\"^3.0.1\",\"grunt-saucelabs\":\"^9.0.1\",istanbul:\"^0.4.2\",jscs:\"^3.0.7\",jshint:\"^2.10.3\",mocha:\"^6.2.2\"},files:[\"lib\"],homepage:\"https://github.com/indutny/elliptic\",keywords:[\"EC\",\"Elliptic\",\"curve\",\"Cryptography\"],license:\"MIT\",main:\"lib/elliptic.js\",name:\"elliptic\",repository:{type:\"git\",url:\"git+ssh://git@github.com/indutny/elliptic.git\"},scripts:{jscs:\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",jshint:\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",lint:\"npm run jscs && npm run jshint\",test:\"npm run lint && npm run unit\",unit:\"istanbul test _mocha --reporter=spec test/index.js\",version:\"grunt dist && git add dist/\"},version:\"6.5.3\"}},function(e,t){},function(e,t,r){\"use strict\";var n=r(6),i=r(4),o=r(0),a=r(26),s=n.assert;function f(e){a.call(this,\"short\",e),this.a=new i(e.a,16).toRed(this.red),this.b=new i(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function u(e,t,r,n){a.BasePoint.call(this,e,\"affine\"),null===t&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new i(t,16),this.y=new i(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function c(e,t,r,n){a.BasePoint.call(this,e,\"jacobian\"),null===t&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new i(0)):(this.x=new i(t,16),this.y=new i(r,16),this.z=new i(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}o(f,a),e.exports=f,f.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var t,r;if(e.beta)t=new i(e.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);t=(t=n[0].cmp(n[1])<0?n[0]:n[1]).toRed(this.red)}if(e.lambda)r=new i(e.lambda,16);else{var o=this._getEndoRoots(this.n);0===this.g.mul(o[0]).x.cmp(this.g.x.redMul(t))?r=o[0]:(r=o[1],s(0===this.g.mul(r).x.cmp(this.g.x.redMul(t))))}return{beta:t,lambda:r,basis:e.basis?e.basis.map((function(e){return{a:new i(e.a,16),b:new i(e.b,16)}})):this._getEndoBasis(r)}}},f.prototype._getEndoRoots=function(e){var t=e===this.p?this.red:i.mont(e),r=new i(2).toRed(t).redInvm(),n=r.redNeg(),o=new i(3).toRed(t).redNeg().redSqrt().redMul(r);return[n.redAdd(o).fromRed(),n.redSub(o).fromRed()]},f.prototype._getEndoBasis=function(e){for(var t,r,n,o,a,s,f,u,c,h=this.n.ushrn(Math.floor(this.n.bitLength()/2)),d=e,l=this.n.clone(),p=new i(1),b=new i(0),y=new i(0),g=new i(1),v=0;0!==d.cmpn(0);){var m=l.div(d);u=l.sub(m.mul(d)),c=y.sub(m.mul(p));var w=g.sub(m.mul(b));if(!n&&u.cmp(h)<0)t=f.neg(),r=p,n=u.neg(),o=c;else if(n&&2==++v)break;f=u,l=d,d=u,y=p,p=c,g=b,b=w}a=u.neg(),s=c;var _=n.sqr().add(o.sqr());return a.sqr().add(s.sqr()).cmp(_)>=0&&(a=t,s=r),n.negative&&(n=n.neg(),o=o.neg()),a.negative&&(a=a.neg(),s=s.neg()),[{a:n,b:o},{a:a,b:s}]},f.prototype._endoSplit=function(e){var t=this.endo.basis,r=t[0],n=t[1],i=n.b.mul(e).divRound(this.n),o=r.b.neg().mul(e).divRound(this.n),a=i.mul(r.a),s=o.mul(n.a),f=i.mul(r.b),u=o.mul(n.b);return{k1:e.sub(a).sub(s),k2:f.add(u).neg()}},f.prototype.pointFromX=function(e,t){(e=new i(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error(\"invalid point\");var o=n.fromRed().isOdd();return(t&&!o||!t&&o)&&(n=n.redNeg()),this.point(e,n)},f.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,r=e.y,n=this.a.redMul(t),i=t.redSqr().redMul(t).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},f.prototype._endoWnafMulAdd=function(e,t,r){for(var n=this._endoWnafT1,i=this._endoWnafT2,o=0;o<e.length;o++){var a=this._endoSplit(t[o]),s=e[o],f=s._getBeta();a.k1.negative&&(a.k1.ineg(),s=s.neg(!0)),a.k2.negative&&(a.k2.ineg(),f=f.neg(!0)),n[2*o]=s,n[2*o+1]=f,i[2*o]=a.k1,i[2*o+1]=a.k2}for(var u=this._wnafMulAdd(1,n,i,2*o,r),c=0;c<2*o;c++)n[c]=null,i[c]=null;return u},o(u,a.BasePoint),f.prototype.point=function(e,t,r){return new u(this,e,t,r)},f.prototype.pointFromJSON=function(e,t){return u.fromJSON(this,e,t)},u.prototype._getBeta=function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var t=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var r=this.curve,n=function(e){return r.point(e.x.redMul(r.endo.beta),e.y)};e.beta=t,t.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(n)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(n)}}}return t}},u.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},u.fromJSON=function(e,t,r){\"string\"==typeof t&&(t=JSON.parse(t));var n=e.point(t[0],t[1],r);if(!t[2])return n;function i(t){return e.point(t[0],t[1],r)}var o=t[2];return n.precomputed={beta:null,doubles:o.doubles&&{step:o.doubles.step,points:[n].concat(o.doubles.points.map(i))},naf:o.naf&&{wnd:o.naf.wnd,points:[n].concat(o.naf.points.map(i))}},n},u.prototype.inspect=function(){return this.isInfinity()?\"<EC Point Infinity>\":\"<EC Point x: \"+this.x.fromRed().toString(16,2)+\" y: \"+this.y.fromRed().toString(16,2)+\">\"},u.prototype.isInfinity=function(){return this.inf},u.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var r=t.redSqr().redISub(this.x).redISub(e.x),n=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},u.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,r=this.x.redSqr(),n=e.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(n),o=i.redSqr().redISub(this.x.redAdd(this.x)),a=i.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,a)},u.prototype.getX=function(){return this.x.fromRed()},u.prototype.getY=function(){return this.y.fromRed()},u.prototype.mul=function(e){return e=new i(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},u.prototype.mulAdd=function(e,t,r){var n=[this,t],i=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},u.prototype.jmulAdd=function(e,t,r){var n=[this,t],i=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i,!0):this.curve._wnafMulAdd(1,n,i,2,!0)},u.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},u.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var r=this.precomputed,n=function(e){return e.neg()};t.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return t},u.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},o(c,a.BasePoint),f.prototype.jpoint=function(e,t,r){return new c(this,e,t,r)},c.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),n=this.y.redMul(t).redMul(e);return this.curve.point(r,n)},c.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},c.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(t),i=e.x.redMul(r),o=this.y.redMul(t.redMul(e.z)),a=e.y.redMul(r.redMul(this.z)),s=n.redSub(i),f=o.redSub(a);if(0===s.cmpn(0))return 0!==f.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=s.redSqr(),c=u.redMul(s),h=n.redMul(u),d=f.redSqr().redIAdd(c).redISub(h).redISub(h),l=f.redMul(h.redISub(d)).redISub(o.redMul(c)),p=this.z.redMul(e.z).redMul(s);return this.curve.jpoint(d,l,p)},c.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),r=this.x,n=e.x.redMul(t),i=this.y,o=e.y.redMul(t).redMul(this.z),a=r.redSub(n),s=i.redSub(o);if(0===a.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var f=a.redSqr(),u=f.redMul(a),c=r.redMul(f),h=s.redSqr().redIAdd(u).redISub(c).redISub(c),d=s.redMul(c.redISub(h)).redISub(i.redMul(u)),l=this.z.redMul(a);return this.curve.jpoint(h,d,l)},c.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var t=this,r=0;r<e;r++)t=t.dbl();return t}var n=this.curve.a,i=this.curve.tinv,o=this.x,a=this.y,s=this.z,f=s.redSqr().redSqr(),u=a.redAdd(a);for(r=0;r<e;r++){var c=o.redSqr(),h=u.redSqr(),d=h.redSqr(),l=c.redAdd(c).redIAdd(c).redIAdd(n.redMul(f)),p=o.redMul(h),b=l.redSqr().redISub(p.redAdd(p)),y=p.redISub(b),g=l.redMul(y);g=g.redIAdd(g).redISub(d);var v=u.redMul(s);r+1<e&&(f=f.redMul(d)),o=b,s=v,u=g}return this.curve.jpoint(o,u.redMul(i),s)},c.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},c.prototype._zeroDbl=function(){var e,t,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),a=this.x.redAdd(i).redSqr().redISub(n).redISub(o);a=a.redIAdd(a);var s=n.redAdd(n).redIAdd(n),f=s.redSqr().redISub(a).redISub(a),u=o.redIAdd(o);u=(u=u.redIAdd(u)).redIAdd(u),e=f,t=s.redMul(a.redISub(f)).redISub(u),r=this.y.redAdd(this.y)}else{var c=this.x.redSqr(),h=this.y.redSqr(),d=h.redSqr(),l=this.x.redAdd(h).redSqr().redISub(c).redISub(d);l=l.redIAdd(l);var p=c.redAdd(c).redIAdd(c),b=p.redSqr(),y=d.redIAdd(d);y=(y=y.redIAdd(y)).redIAdd(y),e=b.redISub(l).redISub(l),t=p.redMul(l.redISub(e)).redISub(y),r=(r=this.y.redMul(this.z)).redIAdd(r)}return this.curve.jpoint(e,t,r)},c.prototype._threeDbl=function(){var e,t,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),a=this.x.redAdd(i).redSqr().redISub(n).redISub(o);a=a.redIAdd(a);var s=n.redAdd(n).redIAdd(n).redIAdd(this.curve.a),f=s.redSqr().redISub(a).redISub(a);e=f;var u=o.redIAdd(o);u=(u=u.redIAdd(u)).redIAdd(u),t=s.redMul(a.redISub(f)).redISub(u),r=this.y.redAdd(this.y)}else{var c=this.z.redSqr(),h=this.y.redSqr(),d=this.x.redMul(h),l=this.x.redSub(c).redMul(this.x.redAdd(c));l=l.redAdd(l).redIAdd(l);var p=d.redIAdd(d),b=(p=p.redIAdd(p)).redAdd(p);e=l.redSqr().redISub(b),r=this.y.redAdd(this.z).redSqr().redISub(h).redISub(c);var y=h.redSqr();y=(y=(y=y.redIAdd(y)).redIAdd(y)).redIAdd(y),t=l.redMul(p.redISub(e)).redISub(y)}return this.curve.jpoint(e,t,r)},c.prototype._dbl=function(){var e=this.curve.a,t=this.x,r=this.y,n=this.z,i=n.redSqr().redSqr(),o=t.redSqr(),a=r.redSqr(),s=o.redAdd(o).redIAdd(o).redIAdd(e.redMul(i)),f=t.redAdd(t),u=(f=f.redIAdd(f)).redMul(a),c=s.redSqr().redISub(u.redAdd(u)),h=u.redISub(c),d=a.redSqr();d=(d=(d=d.redIAdd(d)).redIAdd(d)).redIAdd(d);var l=s.redMul(h).redISub(d),p=r.redAdd(r).redMul(n);return this.curve.jpoint(c,l,p)},c.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr(),n=t.redSqr(),i=e.redAdd(e).redIAdd(e),o=i.redSqr(),a=this.x.redAdd(t).redSqr().redISub(e).redISub(n),s=(a=(a=(a=a.redIAdd(a)).redAdd(a).redIAdd(a)).redISub(o)).redSqr(),f=n.redIAdd(n);f=(f=(f=f.redIAdd(f)).redIAdd(f)).redIAdd(f);var u=i.redIAdd(a).redSqr().redISub(o).redISub(s).redISub(f),c=t.redMul(u);c=(c=c.redIAdd(c)).redIAdd(c);var h=this.x.redMul(s).redISub(c);h=(h=h.redIAdd(h)).redIAdd(h);var d=this.y.redMul(u.redMul(f.redISub(u)).redISub(a.redMul(s)));d=(d=(d=d.redIAdd(d)).redIAdd(d)).redIAdd(d);var l=this.z.redAdd(a).redSqr().redISub(r).redISub(s);return this.curve.jpoint(h,d,l)},c.prototype.mul=function(e,t){return e=new i(e,t),this.curve._wnafMul(this,e)},c.prototype.eq=function(e){if(\"affine\"===e.type)return this.eq(e.toJ());if(this===e)return!0;var t=this.z.redSqr(),r=e.z.redSqr();if(0!==this.x.redMul(r).redISub(e.x.redMul(t)).cmpn(0))return!1;var n=t.redMul(this.z),i=r.redMul(e.z);return 0===this.y.redMul(i).redISub(e.y.redMul(n)).cmpn(0)},c.prototype.eqXToP=function(e){var t=this.z.redSqr(),r=e.toRed(this.curve.red).redMul(t);if(0===this.x.cmp(r))return!0;for(var n=e.clone(),i=this.curve.redN.redMul(t);;){if(n.iadd(this.curve.n),n.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(i),0===this.x.cmp(r))return!0}},c.prototype.inspect=function(){return this.isInfinity()?\"<EC JPoint Infinity>\":\"<EC JPoint x: \"+this.x.toString(16,2)+\" y: \"+this.y.toString(16,2)+\" z: \"+this.z.toString(16,2)+\">\"},c.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},function(e,t,r){\"use strict\";var n=r(4),i=r(0),o=r(26),a=r(6);function s(e){o.call(this,\"mont\",e),this.a=new n(e.a,16).toRed(this.red),this.b=new n(e.b,16).toRed(this.red),this.i4=new n(4).toRed(this.red).redInvm(),this.two=new n(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function f(e,t,r){o.BasePoint.call(this,e,\"projective\"),null===t&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new n(t,16),this.z=new n(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}i(s,o),e.exports=s,s.prototype.validate=function(e){var t=e.normalize().x,r=t.redSqr(),n=r.redMul(t).redAdd(r.redMul(this.a)).redAdd(t);return 0===n.redSqrt().redSqr().cmp(n)},i(f,o.BasePoint),s.prototype.decodePoint=function(e,t){return this.point(a.toArray(e,t),1)},s.prototype.point=function(e,t){return new f(this,e,t)},s.prototype.pointFromJSON=function(e){return f.fromJSON(this,e)},f.prototype.precompute=function(){},f.prototype._encode=function(){return this.getX().toArray(\"be\",this.curve.p.byteLength())},f.fromJSON=function(e,t){return new f(e,t[0],t[1]||e.one)},f.prototype.inspect=function(){return this.isInfinity()?\"<EC Point Infinity>\":\"<EC Point x: \"+this.x.fromRed().toString(16,2)+\" z: \"+this.z.fromRed().toString(16,2)+\">\"},f.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},f.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),t=this.x.redSub(this.z).redSqr(),r=e.redSub(t),n=e.redMul(t),i=r.redMul(t.redAdd(this.curve.a24.redMul(r)));return this.curve.point(n,i)},f.prototype.add=function(){throw new Error(\"Not supported on Montgomery curve\")},f.prototype.diffAdd=function(e,t){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),i=e.x.redAdd(e.z),o=e.x.redSub(e.z).redMul(r),a=i.redMul(n),s=t.z.redMul(o.redAdd(a).redSqr()),f=t.x.redMul(o.redISub(a).redSqr());return this.curve.point(s,f)},f.prototype.mul=function(e){for(var t=e.clone(),r=this,n=this.curve.point(null,null),i=[];0!==t.cmpn(0);t.iushrn(1))i.push(t.andln(1));for(var o=i.length-1;o>=0;o--)0===i[o]?(r=r.diffAdd(n,this),n=n.dbl()):(n=r.diffAdd(n,this),r=r.dbl());return n},f.prototype.mulAdd=function(){throw new Error(\"Not supported on Montgomery curve\")},f.prototype.jumlAdd=function(){throw new Error(\"Not supported on Montgomery curve\")},f.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},f.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},f.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},function(e,t,r){\"use strict\";var n=r(6),i=r(4),o=r(0),a=r(26),s=n.assert;function f(e){this.twisted=1!=(0|e.a),this.mOneA=this.twisted&&-1==(0|e.a),this.extended=this.mOneA,a.call(this,\"edwards\",e),this.a=new i(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new i(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new i(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),s(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|e.c)}function u(e,t,r,n,o){a.BasePoint.call(this,e,\"projective\"),null===t&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new i(t,16),this.y=new i(r,16),this.z=n?new i(n,16):this.curve.one,this.t=o&&new i(o,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}o(f,a),e.exports=f,f.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},f.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},f.prototype.jpoint=function(e,t,r,n){return this.point(e,t,r,n)},f.prototype.pointFromX=function(e,t){(e=new i(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),n=this.c2.redSub(this.a.redMul(r)),o=this.one.redSub(this.c2.redMul(this.d).redMul(r)),a=n.redMul(o.redInvm()),s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw new Error(\"invalid point\");var f=s.fromRed().isOdd();return(t&&!f||!t&&f)&&(s=s.redNeg()),this.point(e,s)},f.prototype.pointFromY=function(e,t){(e=new i(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),n=r.redSub(this.c2),o=r.redMul(this.d).redMul(this.c2).redSub(this.a),a=n.redMul(o.redInvm());if(0===a.cmp(this.zero)){if(t)throw new Error(\"invalid point\");return this.point(this.zero,e)}var s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw new Error(\"invalid point\");return s.fromRed().isOdd()!==t&&(s=s.redNeg()),this.point(s,e)},f.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var t=e.x.redSqr(),r=e.y.redSqr(),n=t.redMul(this.a).redAdd(r),i=this.c2.redMul(this.one.redAdd(this.d.redMul(t).redMul(r)));return 0===n.cmp(i)},o(u,a.BasePoint),f.prototype.pointFromJSON=function(e){return u.fromJSON(this,e)},f.prototype.point=function(e,t,r,n){return new u(this,e,t,r,n)},u.fromJSON=function(e,t){return new u(e,t[0],t[1],t[2])},u.prototype.inspect=function(){return this.isInfinity()?\"<EC Point Infinity>\":\"<EC Point x: \"+this.x.fromRed().toString(16,2)+\" y: \"+this.y.fromRed().toString(16,2)+\" z: \"+this.z.fromRed().toString(16,2)+\">\"},u.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},u.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(e),i=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),o=n.redAdd(t),a=o.redSub(r),s=n.redSub(t),f=i.redMul(a),u=o.redMul(s),c=i.redMul(s),h=a.redMul(o);return this.curve.point(f,u,h,c)},u.prototype._projDbl=function(){var e,t,r,n=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),o=this.y.redSqr();if(this.curve.twisted){var a=(u=this.curve._mulA(i)).redAdd(o);if(this.zOne)e=n.redSub(i).redSub(o).redMul(a.redSub(this.curve.two)),t=a.redMul(u.redSub(o)),r=a.redSqr().redSub(a).redSub(a);else{var s=this.z.redSqr(),f=a.redSub(s).redISub(s);e=n.redSub(i).redISub(o).redMul(f),t=a.redMul(u.redSub(o)),r=a.redMul(f)}}else{var u=i.redAdd(o);s=this.curve._mulC(this.z).redSqr(),f=u.redSub(s).redSub(s);e=this.curve._mulC(n.redISub(u)).redMul(f),t=this.curve._mulC(u).redMul(i.redISub(o)),r=u.redMul(f)}return this.curve.point(e,t,r)},u.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},u.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),r=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),n=this.t.redMul(this.curve.dd).redMul(e.t),i=this.z.redMul(e.z.redAdd(e.z)),o=r.redSub(t),a=i.redSub(n),s=i.redAdd(n),f=r.redAdd(t),u=o.redMul(a),c=s.redMul(f),h=o.redMul(f),d=a.redMul(s);return this.curve.point(u,c,d,h)},u.prototype._projAdd=function(e){var t,r,n=this.z.redMul(e.z),i=n.redSqr(),o=this.x.redMul(e.x),a=this.y.redMul(e.y),s=this.curve.d.redMul(o).redMul(a),f=i.redSub(s),u=i.redAdd(s),c=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(o).redISub(a),h=n.redMul(f).redMul(c);return this.curve.twisted?(t=n.redMul(u).redMul(a.redSub(this.curve._mulA(o))),r=f.redMul(u)):(t=n.redMul(u).redMul(a.redSub(o)),r=this.curve._mulC(f).redMul(u)),this.curve.point(h,t,r)},u.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},u.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},u.prototype.mulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!1)},u.prototype.jmulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!0)},u.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},u.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},u.prototype.getX=function(){return this.normalize(),this.x.fromRed()},u.prototype.getY=function(){return this.normalize(),this.y.fromRed()},u.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},u.prototype.eqXToP=function(e){var t=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(t))return!0;for(var r=e.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(n),0===this.x.cmp(t))return!0}},u.prototype.toP=u.prototype.normalize,u.prototype.mixedAdd=u.prototype.add},function(e,t,r){\"use strict\";t.sha1=r(160),t.sha224=r(161),t.sha256=r(76),t.sha384=r(162),t.sha512=r(77)},function(e,t,r){\"use strict\";var n=r(8),i=r(21),o=r(75),a=n.rotl32,s=n.sum32,f=n.sum32_5,u=o.ft_1,c=i.BlockHash,h=[1518500249,1859775393,2400959708,3395469782];function d(){if(!(this instanceof d))return new d;c.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}n.inherits(d,c),e.exports=d,d.blockSize=512,d.outSize=160,d.hmacStrength=80,d.padLength=64,d.prototype._update=function(e,t){for(var r=this.W,n=0;n<16;n++)r[n]=e[t+n];for(;n<r.length;n++)r[n]=a(r[n-3]^r[n-8]^r[n-14]^r[n-16],1);var i=this.h[0],o=this.h[1],c=this.h[2],d=this.h[3],l=this.h[4];for(n=0;n<r.length;n++){var p=~~(n/20),b=f(a(i,5),u(p,o,c,d),l,r[n],h[p]);l=d,d=c,c=a(o,30),o=i,i=b}this.h[0]=s(this.h[0],i),this.h[1]=s(this.h[1],o),this.h[2]=s(this.h[2],c),this.h[3]=s(this.h[3],d),this.h[4]=s(this.h[4],l)},d.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h,\"big\"):n.split32(this.h,\"big\")}},function(e,t,r){\"use strict\";var n=r(8),i=r(76);function o(){if(!(this instanceof o))return new o;i.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}n.inherits(o,i),e.exports=o,o.blockSize=512,o.outSize=224,o.hmacStrength=192,o.padLength=64,o.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h.slice(0,7),\"big\"):n.split32(this.h.slice(0,7),\"big\")}},function(e,t,r){\"use strict\";var n=r(8),i=r(77);function o(){if(!(this instanceof o))return new o;i.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}n.inherits(o,i),e.exports=o,o.blockSize=1024,o.outSize=384,o.hmacStrength=192,o.padLength=128,o.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h.slice(0,12),\"big\"):n.split32(this.h.slice(0,12),\"big\")}},function(e,t,r){\"use strict\";var n=r(8),i=r(21),o=n.rotl32,a=n.sum32,s=n.sum32_3,f=n.sum32_4,u=i.BlockHash;function c(){if(!(this instanceof c))return new c;u.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian=\"little\"}function h(e,t,r,n){return e<=15?t^r^n:e<=31?t&r|~t&n:e<=47?(t|~r)^n:e<=63?t&n|r&~n:t^(r|~n)}function d(e){return e<=15?0:e<=31?1518500249:e<=47?1859775393:e<=63?2400959708:2840853838}function l(e){return e<=15?1352829926:e<=31?1548603684:e<=47?1836072691:e<=63?2053994217:0}n.inherits(c,u),t.ripemd160=c,c.blockSize=512,c.outSize=160,c.hmacStrength=192,c.padLength=64,c.prototype._update=function(e,t){for(var r=this.h[0],n=this.h[1],i=this.h[2],u=this.h[3],c=this.h[4],v=r,m=n,w=i,_=u,E=c,S=0;S<80;S++){var A=a(o(f(r,h(S,n,i,u),e[p[S]+t],d(S)),y[S]),c);r=c,c=u,u=o(i,10),i=n,n=A,A=a(o(f(v,h(79-S,m,w,_),e[b[S]+t],l(S)),g[S]),E),v=E,E=_,_=o(w,10),w=m,m=A}A=s(this.h[1],i,_),this.h[1]=s(this.h[2],u,E),this.h[2]=s(this.h[3],c,v),this.h[3]=s(this.h[4],r,m),this.h[4]=s(this.h[0],n,w),this.h[0]=A},c.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h,\"little\"):n.split32(this.h,\"little\")};var p=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],b=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],y=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],g=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},function(e,t,r){\"use strict\";var n=r(8),i=r(12);function o(e,t,r){if(!(this instanceof o))return new o(e,t,r);this.Hash=e,this.blockSize=e.blockSize/8,this.outSize=e.outSize/8,this.inner=null,this.outer=null,this._init(n.toArray(t,r))}e.exports=o,o.prototype._init=function(e){e.length>this.blockSize&&(e=(new this.Hash).update(e).digest()),i(e.length<=this.blockSize);for(var t=e.length;t<this.blockSize;t++)e.push(0);for(t=0;t<e.length;t++)e[t]^=54;for(this.inner=(new this.Hash).update(e),t=0;t<e.length;t++)e[t]^=106;this.outer=(new this.Hash).update(e)},o.prototype.update=function(e,t){return this.inner.update(e,t),this},o.prototype.digest=function(e){return this.outer.update(this.inner.digest()),this.outer.digest(e)}},function(e,t){e.exports={doubles:{step:4,points:[[\"e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a\",\"f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821\"],[\"8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508\",\"11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf\"],[\"175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739\",\"d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695\"],[\"363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640\",\"4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9\"],[\"8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c\",\"4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36\"],[\"723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda\",\"96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f\"],[\"eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa\",\"5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999\"],[\"100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0\",\"cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09\"],[\"e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d\",\"9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d\"],[\"feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d\",\"e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088\"],[\"da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1\",\"9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d\"],[\"53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0\",\"5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8\"],[\"8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047\",\"10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a\"],[\"385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862\",\"283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453\"],[\"6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7\",\"7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160\"],[\"3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd\",\"56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0\"],[\"85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83\",\"7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6\"],[\"948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a\",\"53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589\"],[\"6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8\",\"bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17\"],[\"e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d\",\"4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda\"],[\"e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725\",\"7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd\"],[\"213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754\",\"4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2\"],[\"4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c\",\"17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6\"],[\"fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6\",\"6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f\"],[\"76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39\",\"c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01\"],[\"c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891\",\"893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3\"],[\"d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b\",\"febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f\"],[\"b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03\",\"2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7\"],[\"e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d\",\"eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78\"],[\"a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070\",\"7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1\"],[\"90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4\",\"e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150\"],[\"8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da\",\"662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82\"],[\"e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11\",\"1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc\"],[\"8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e\",\"efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b\"],[\"e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41\",\"2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51\"],[\"b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef\",\"67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45\"],[\"d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8\",\"db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120\"],[\"324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d\",\"648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84\"],[\"4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96\",\"35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d\"],[\"9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd\",\"ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d\"],[\"6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5\",\"9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8\"],[\"a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266\",\"40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8\"],[\"7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71\",\"34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac\"],[\"928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac\",\"c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f\"],[\"85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751\",\"1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962\"],[\"ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e\",\"493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907\"],[\"827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241\",\"c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec\"],[\"eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3\",\"be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d\"],[\"e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f\",\"4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414\"],[\"1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19\",\"aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd\"],[\"146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be\",\"b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0\"],[\"fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9\",\"6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811\"],[\"da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2\",\"8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1\"],[\"a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13\",\"7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c\"],[\"174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c\",\"ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73\"],[\"959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba\",\"2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd\"],[\"d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151\",\"e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405\"],[\"64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073\",\"d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589\"],[\"8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458\",\"38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e\"],[\"13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b\",\"69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27\"],[\"bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366\",\"d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1\"],[\"8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa\",\"40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482\"],[\"8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0\",\"620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945\"],[\"dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787\",\"7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573\"],[\"f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e\",\"ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82\"]]},naf:{wnd:7,points:[[\"f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9\",\"388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672\"],[\"2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4\",\"d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6\"],[\"5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc\",\"6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da\"],[\"acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe\",\"cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37\"],[\"774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb\",\"d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b\"],[\"f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8\",\"ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81\"],[\"d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e\",\"581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58\"],[\"defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34\",\"4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77\"],[\"2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c\",\"85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a\"],[\"352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5\",\"321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c\"],[\"2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f\",\"2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67\"],[\"9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714\",\"73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402\"],[\"daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729\",\"a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55\"],[\"c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db\",\"2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482\"],[\"6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4\",\"e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82\"],[\"1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5\",\"b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396\"],[\"605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479\",\"2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49\"],[\"62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d\",\"80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf\"],[\"80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f\",\"1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a\"],[\"7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb\",\"d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7\"],[\"d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9\",\"eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933\"],[\"49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963\",\"758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a\"],[\"77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74\",\"958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6\"],[\"f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530\",\"e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37\"],[\"463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b\",\"5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e\"],[\"f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247\",\"cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6\"],[\"caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1\",\"cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476\"],[\"2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120\",\"4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40\"],[\"7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435\",\"91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61\"],[\"754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18\",\"673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683\"],[\"e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8\",\"59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5\"],[\"186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb\",\"3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b\"],[\"df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f\",\"55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417\"],[\"5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143\",\"efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868\"],[\"290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba\",\"e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a\"],[\"af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45\",\"f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6\"],[\"766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a\",\"744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996\"],[\"59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e\",\"c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e\"],[\"f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8\",\"e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d\"],[\"7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c\",\"30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2\"],[\"948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519\",\"e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e\"],[\"7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab\",\"100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437\"],[\"3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca\",\"ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311\"],[\"d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf\",\"8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4\"],[\"1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610\",\"68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575\"],[\"733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4\",\"f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d\"],[\"15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c\",\"d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d\"],[\"a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940\",\"edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629\"],[\"e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980\",\"a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06\"],[\"311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3\",\"66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374\"],[\"34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf\",\"9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee\"],[\"f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63\",\"4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1\"],[\"d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448\",\"fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b\"],[\"32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf\",\"5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661\"],[\"7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5\",\"8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6\"],[\"ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6\",\"8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e\"],[\"16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5\",\"5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d\"],[\"eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99\",\"f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc\"],[\"78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51\",\"f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4\"],[\"494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5\",\"42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c\"],[\"a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5\",\"204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b\"],[\"c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997\",\"4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913\"],[\"841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881\",\"73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154\"],[\"5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5\",\"39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865\"],[\"36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66\",\"d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc\"],[\"336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726\",\"ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224\"],[\"8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede\",\"6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e\"],[\"1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94\",\"60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6\"],[\"85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31\",\"3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511\"],[\"29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51\",\"b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b\"],[\"a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252\",\"ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2\"],[\"4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5\",\"cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c\"],[\"d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b\",\"6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3\"],[\"ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4\",\"322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d\"],[\"af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f\",\"6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700\"],[\"e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889\",\"2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4\"],[\"591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246\",\"b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196\"],[\"11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984\",\"998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4\"],[\"3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a\",\"b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257\"],[\"cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030\",\"bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13\"],[\"c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197\",\"6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096\"],[\"c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593\",\"c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38\"],[\"a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef\",\"21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f\"],[\"347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38\",\"60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448\"],[\"da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a\",\"49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a\"],[\"c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111\",\"5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4\"],[\"4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502\",\"7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437\"],[\"3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea\",\"be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7\"],[\"cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26\",\"8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d\"],[\"b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986\",\"39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a\"],[\"d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e\",\"62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54\"],[\"48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4\",\"25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77\"],[\"dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda\",\"ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517\"],[\"6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859\",\"cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10\"],[\"e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f\",\"f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125\"],[\"eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c\",\"6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e\"],[\"13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942\",\"fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1\"],[\"ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a\",\"1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2\"],[\"b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80\",\"5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423\"],[\"ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d\",\"438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8\"],[\"8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1\",\"cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758\"],[\"52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63\",\"c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375\"],[\"e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352\",\"6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d\"],[\"7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193\",\"ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec\"],[\"5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00\",\"9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0\"],[\"32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58\",\"ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c\"],[\"e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7\",\"d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4\"],[\"8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8\",\"c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f\"],[\"4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e\",\"67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649\"],[\"3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d\",\"cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826\"],[\"674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b\",\"299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5\"],[\"d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f\",\"f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87\"],[\"30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6\",\"462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b\"],[\"be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297\",\"62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc\"],[\"93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a\",\"7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c\"],[\"b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c\",\"ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f\"],[\"d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52\",\"4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a\"],[\"d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb\",\"bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46\"],[\"463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065\",\"bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f\"],[\"7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917\",\"603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03\"],[\"74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9\",\"cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08\"],[\"30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3\",\"553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8\"],[\"9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57\",\"712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373\"],[\"176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66\",\"ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3\"],[\"75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8\",\"9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8\"],[\"809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721\",\"9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1\"],[\"1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180\",\"4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9\"]]}}},function(e,t,r){\"use strict\";var n=r(4),i=r(167),o=r(6),a=r(37),s=r(73),f=o.assert,u=r(168),c=r(169);function h(e){if(!(this instanceof h))return new h(e);\"string\"==typeof e&&(f(a.hasOwnProperty(e),\"Unknown curve \"+e),e=a[e]),e instanceof a.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),this.hash=e.hash||e.curve.hash}e.exports=h,h.prototype.keyPair=function(e){return new u(this,e)},h.prototype.keyFromPrivate=function(e,t){return u.fromPrivate(this,e,t)},h.prototype.keyFromPublic=function(e,t){return u.fromPublic(this,e,t)},h.prototype.genKeyPair=function(e){e||(e={});for(var t=new i({hash:this.hash,pers:e.pers,persEnc:e.persEnc||\"utf8\",entropy:e.entropy||s(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||\"utf8\",nonce:this.n.toArray()}),r=this.n.byteLength(),o=this.n.sub(new n(2));;){var a=new n(t.generate(r));if(!(a.cmp(o)>0))return a.iaddn(1),this.keyFromPrivate(a)}},h.prototype._truncateToN=function(e,t){var r=8*e.byteLength()-this.n.bitLength();return r>0&&(e=e.ushrn(r)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},h.prototype.sign=function(e,t,r,o){\"object\"==typeof r&&(o=r,r=null),o||(o={}),t=this.keyFromPrivate(t,r),e=this._truncateToN(new n(e,16));for(var a=this.n.byteLength(),s=t.getPrivate().toArray(\"be\",a),f=e.toArray(\"be\",a),u=new i({hash:this.hash,entropy:s,nonce:f,pers:o.pers,persEnc:o.persEnc||\"utf8\"}),h=this.n.sub(new n(1)),d=0;;d++){var l=o.k?o.k(d):new n(u.generate(this.n.byteLength()));if(!((l=this._truncateToN(l,!0)).cmpn(1)<=0||l.cmp(h)>=0)){var p=this.g.mul(l);if(!p.isInfinity()){var b=p.getX(),y=b.umod(this.n);if(0!==y.cmpn(0)){var g=l.invm(this.n).mul(y.mul(t.getPrivate()).iadd(e));if(0!==(g=g.umod(this.n)).cmpn(0)){var v=(p.getY().isOdd()?1:0)|(0!==b.cmp(y)?2:0);return o.canonical&&g.cmp(this.nh)>0&&(g=this.n.sub(g),v^=1),new c({r:y,s:g,recoveryParam:v})}}}}}},h.prototype.verify=function(e,t,r,i){e=this._truncateToN(new n(e,16)),r=this.keyFromPublic(r,i);var o=(t=new c(t,\"hex\")).r,a=t.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var s,f=a.invm(this.n),u=f.mul(e).umod(this.n),h=f.mul(o).umod(this.n);return this.curve._maxwellTrick?!(s=this.g.jmulAdd(u,r.getPublic(),h)).isInfinity()&&s.eqXToP(o):!(s=this.g.mulAdd(u,r.getPublic(),h)).isInfinity()&&0===s.getX().umod(this.n).cmp(o)},h.prototype.recoverPubKey=function(e,t,r,i){f((3&r)===r,\"The recovery param is more than two bits\"),t=new c(t,i);var o=this.n,a=new n(e),s=t.r,u=t.s,h=1&r,d=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&d)throw new Error(\"Unable to find sencond key candinate\");s=d?this.curve.pointFromX(s.add(this.curve.n),h):this.curve.pointFromX(s,h);var l=t.r.invm(o),p=o.sub(a).mul(l).umod(o),b=u.mul(l).umod(o);return this.g.mulAdd(p,s,b)},h.prototype.getKeyRecoveryParam=function(e,t,r,n){if(null!==(t=new c(t,n)).recoveryParam)return t.recoveryParam;for(var i=0;i<4;i++){var o;try{o=this.recoverPubKey(e,t,i)}catch(e){continue}if(o.eq(r))return i}throw new Error(\"Unable to find valid recovery factor\")}},function(e,t,r){\"use strict\";var n=r(38),i=r(72),o=r(12);function a(e){if(!(this instanceof a))return new a(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var t=i.toArray(e.entropy,e.entropyEnc||\"hex\"),r=i.toArray(e.nonce,e.nonceEnc||\"hex\"),n=i.toArray(e.pers,e.persEnc||\"hex\");o(t.length>=this.minEntropy/8,\"Not enough entropy. Minimum is: \"+this.minEntropy+\" bits\"),this._init(t,r,n)}e.exports=a,a.prototype._init=function(e,t,r){var n=e.concat(t).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var i=0;i<this.V.length;i++)this.K[i]=0,this.V[i]=1;this._update(n),this._reseed=1,this.reseedInterval=281474976710656},a.prototype._hmac=function(){return new n.hmac(this.hash,this.K)},a.prototype._update=function(e){var t=this._hmac().update(this.V).update([0]);e&&(t=t.update(e)),this.K=t.digest(),this.V=this._hmac().update(this.V).digest(),e&&(this.K=this._hmac().update(this.V).update([1]).update(e).digest(),this.V=this._hmac().update(this.V).digest())},a.prototype.reseed=function(e,t,r,n){\"string\"!=typeof t&&(n=r,r=t,t=null),e=i.toArray(e,t),r=i.toArray(r,n),o(e.length>=this.minEntropy/8,\"Not enough entropy. Minimum is: \"+this.minEntropy+\" bits\"),this._update(e.concat(r||[])),this._reseed=1},a.prototype.generate=function(e,t,r,n){if(this._reseed>this.reseedInterval)throw new Error(\"Reseed is required\");\"string\"!=typeof t&&(n=r,r=t,t=null),r&&(r=i.toArray(r,n||\"hex\"),this._update(r));for(var o=[];o.length<e;)this.V=this._hmac().update(this.V).digest(),o=o.concat(this.V);var a=o.slice(0,e);return this._update(r),this._reseed++,i.encode(a,t)}},function(e,t,r){\"use strict\";var n=r(4),i=r(6).assert;function o(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}e.exports=o,o.fromPublic=function(e,t,r){return t instanceof o?t:new o(e,{pub:t,pubEnc:r})},o.fromPrivate=function(e,t,r){return t instanceof o?t:new o(e,{priv:t,privEnc:r})},o.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:\"Invalid public key\"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:\"Public key * N != O\"}:{result:!1,reason:\"Public key is not a point\"}},o.prototype.getPublic=function(e,t){return\"string\"==typeof e&&(t=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),t?this.pub.encode(t,e):this.pub},o.prototype.getPrivate=function(e){return\"hex\"===e?this.priv.toString(16,2):this.priv},o.prototype._importPrivate=function(e,t){this.priv=new n(e,t||16),this.priv=this.priv.umod(this.ec.curve.n)},o.prototype._importPublic=function(e,t){if(e.x||e.y)return\"mont\"===this.ec.curve.type?i(e.x,\"Need x coordinate\"):\"short\"!==this.ec.curve.type&&\"edwards\"!==this.ec.curve.type||i(e.x&&e.y,\"Need both x and y coordinate\"),void(this.pub=this.ec.curve.point(e.x,e.y));this.pub=this.ec.curve.decodePoint(e,t)},o.prototype.derive=function(e){return e.mul(this.priv).getX()},o.prototype.sign=function(e,t,r){return this.ec.sign(e,this,t,r)},o.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},o.prototype.inspect=function(){return\"<Key priv: \"+(this.priv&&this.priv.toString(16,2))+\" pub: \"+(this.pub&&this.pub.inspect())+\" >\"}},function(e,t,r){\"use strict\";var n=r(4),i=r(6),o=i.assert;function a(e,t){if(e instanceof a)return e;this._importDER(e,t)||(o(e.r&&e.s,\"Signature without r or s\"),this.r=new n(e.r,16),this.s=new n(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}function s(){this.place=0}function f(e,t){var r=e[t.place++];if(!(128&r))return r;var n=15&r;if(0===n||n>4)return!1;for(var i=0,o=0,a=t.place;o<n;o++,a++)i<<=8,i|=e[a],i>>>=0;return!(i<=127)&&(t.place=a,i)}function u(e){for(var t=0,r=e.length-1;!e[t]&&!(128&e[t+1])&&t<r;)t++;return 0===t?e:e.slice(t)}function c(e,t){if(t<128)e.push(t);else{var r=1+(Math.log(t)/Math.LN2>>>3);for(e.push(128|r);--r;)e.push(t>>>(r<<3)&255);e.push(t)}}e.exports=a,a.prototype._importDER=function(e,t){e=i.toArray(e,t);var r=new s;if(48!==e[r.place++])return!1;var o=f(e,r);if(!1===o)return!1;if(o+r.place!==e.length)return!1;if(2!==e[r.place++])return!1;var a=f(e,r);if(!1===a)return!1;var u=e.slice(r.place,a+r.place);if(r.place+=a,2!==e[r.place++])return!1;var c=f(e,r);if(!1===c)return!1;if(e.length!==c+r.place)return!1;var h=e.slice(r.place,c+r.place);if(0===u[0]){if(!(128&u[1]))return!1;u=u.slice(1)}if(0===h[0]){if(!(128&h[1]))return!1;h=h.slice(1)}return this.r=new n(u),this.s=new n(h),this.recoveryParam=null,!0},a.prototype.toDER=function(e){var t=this.r.toArray(),r=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r)),t=u(t),r=u(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];c(n,t.length),(n=n.concat(t)).push(2),c(n,r.length);var o=n.concat(r),a=[48];return c(a,o.length),a=a.concat(o),i.encode(a,e)}},function(e,t,r){\"use strict\";var n=r(38),i=r(37),o=r(6),a=o.assert,s=o.parseBytes,f=r(171),u=r(172);function c(e){if(a(\"ed25519\"===e,\"only tested with ed25519 so far\"),!(this instanceof c))return new c(e);e=i[e].curve;this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=n.sha512}e.exports=c,c.prototype.sign=function(e,t){e=s(e);var r=this.keyFromSecret(t),n=this.hashInt(r.messagePrefix(),e),i=this.g.mul(n),o=this.encodePoint(i),a=this.hashInt(o,r.pubBytes(),e).mul(r.priv()),f=n.add(a).umod(this.curve.n);return this.makeSignature({R:i,S:f,Rencoded:o})},c.prototype.verify=function(e,t,r){e=s(e),t=this.makeSignature(t);var n=this.keyFromPublic(r),i=this.hashInt(t.Rencoded(),n.pubBytes(),e),o=this.g.mul(t.S());return t.R().add(n.pub().mul(i)).eq(o)},c.prototype.hashInt=function(){for(var e=this.hash(),t=0;t<arguments.length;t++)e.update(arguments[t]);return o.intFromLE(e.digest()).umod(this.curve.n)},c.prototype.keyFromPublic=function(e){return f.fromPublic(this,e)},c.prototype.keyFromSecret=function(e){return f.fromSecret(this,e)},c.prototype.makeSignature=function(e){return e instanceof u?e:new u(this,e)},c.prototype.encodePoint=function(e){var t=e.getY().toArray(\"le\",this.encodingLength);return t[this.encodingLength-1]|=e.getX().isOdd()?128:0,t},c.prototype.decodePoint=function(e){var t=(e=o.parseBytes(e)).length-1,r=e.slice(0,t).concat(-129&e[t]),n=0!=(128&e[t]),i=o.intFromLE(r);return this.curve.pointFromY(i,n)},c.prototype.encodeInt=function(e){return e.toArray(\"le\",this.encodingLength)},c.prototype.decodeInt=function(e){return o.intFromLE(e)},c.prototype.isPoint=function(e){return e instanceof this.pointClass}},function(e,t,r){\"use strict\";var n=r(6),i=n.assert,o=n.parseBytes,a=n.cachedProperty;function s(e,t){this.eddsa=e,this._secret=o(t.secret),e.isPoint(t.pub)?this._pub=t.pub:this._pubBytes=o(t.pub)}s.fromPublic=function(e,t){return t instanceof s?t:new s(e,{pub:t})},s.fromSecret=function(e,t){return t instanceof s?t:new s(e,{secret:t})},s.prototype.secret=function(){return this._secret},a(s,\"pubBytes\",(function(){return this.eddsa.encodePoint(this.pub())})),a(s,\"pub\",(function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())})),a(s,\"privBytes\",(function(){var e=this.eddsa,t=this.hash(),r=e.encodingLength-1,n=t.slice(0,e.encodingLength);return n[0]&=248,n[r]&=127,n[r]|=64,n})),a(s,\"priv\",(function(){return this.eddsa.decodeInt(this.privBytes())})),a(s,\"hash\",(function(){return this.eddsa.hash().update(this.secret()).digest()})),a(s,\"messagePrefix\",(function(){return this.hash().slice(this.eddsa.encodingLength)})),s.prototype.sign=function(e){return i(this._secret,\"KeyPair can only verify\"),this.eddsa.sign(e,this)},s.prototype.verify=function(e,t){return this.eddsa.verify(e,t,this)},s.prototype.getSecret=function(e){return i(this._secret,\"KeyPair is public only\"),n.encode(this.secret(),e)},s.prototype.getPublic=function(e){return n.encode(this.pubBytes(),e)},e.exports=s},function(e,t,r){\"use strict\";var n=r(4),i=r(6),o=i.assert,a=i.cachedProperty,s=i.parseBytes;function f(e,t){this.eddsa=e,\"object\"!=typeof t&&(t=s(t)),Array.isArray(t)&&(t={R:t.slice(0,e.encodingLength),S:t.slice(e.encodingLength)}),o(t.R&&t.S,\"Signature without R or S\"),e.isPoint(t.R)&&(this._R=t.R),t.S instanceof n&&(this._S=t.S),this._Rencoded=Array.isArray(t.R)?t.R:t.Rencoded,this._Sencoded=Array.isArray(t.S)?t.S:t.Sencoded}a(f,\"S\",(function(){return this.eddsa.decodeInt(this.Sencoded())})),a(f,\"R\",(function(){return this.eddsa.decodePoint(this.Rencoded())})),a(f,\"Rencoded\",(function(){return this.eddsa.encodePoint(this.R())})),a(f,\"Sencoded\",(function(){return this.eddsa.encodeInt(this.S())})),f.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},f.prototype.toHex=function(){return i.encode(this.toBytes(),\"hex\").toUpperCase()},e.exports=f},function(e,t,r){\"use strict\";\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/var n=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String(\"abc\");if(e[5]=\"de\",\"5\"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},r=0;r<10;r++)t[\"_\"+String.fromCharCode(r)]=r;if(\"0123456789\"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(\"\"))return!1;var n={};return\"abcdefghijklmnopqrst\".split(\"\").forEach((function(e){n[e]=e})),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},n)).join(\"\")}catch(e){return!1}}()?Object.assign:function(e,t){for(var r,s,f=a(e),u=1;u<arguments.length;u++){for(var c in r=Object(arguments[u]))i.call(r,c)&&(f[c]=r[c]);if(n){s=n(r);for(var h=0;h<s.length;h++)o.call(r,s[h])&&(f[s[h]]=r[s[h]])}}return f}},function(e,t,r){\"use strict\";(function(t){var n=r(80),i=r(175);function o(e){var t=e;if(\"string\"!=typeof t)throw new Error(\"[ethjs-util] while padding to even, value must be string, is currently \"+typeof t+\", while padToEven.\");return t.length%2&&(t=\"0\"+t),t}function a(e){return\"0x\"+e.toString(16)}e.exports={arrayContainsArray:function(e,t,r){if(!0!==Array.isArray(e))throw new Error(\"[ethjs-util] method arrayContainsArray requires input 'superset' to be an array got type '\"+typeof e+\"'\");if(!0!==Array.isArray(t))throw new Error(\"[ethjs-util] method arrayContainsArray requires input 'subset' to be an array got type '\"+typeof t+\"'\");return t[Boolean(r)?\"some\":\"every\"]((function(t){return e.indexOf(t)>=0}))},intToBuffer:function(e){var r=a(e);return new t(o(r.slice(2)),\"hex\")},getBinarySize:function(e){if(\"string\"!=typeof e)throw new Error(\"[ethjs-util] while getting binary size, method getBinarySize requires input 'str' to be type String, got '\"+typeof e+\"'.\");return t.byteLength(e,\"utf8\")},isHexPrefixed:n,stripHexPrefix:i,padToEven:o,intToHex:a,fromAscii:function(e){for(var t=\"\",r=0;r<e.length;r++){var n=e.charCodeAt(r).toString(16);t+=n.length<2?\"0\"+n:n}return\"0x\"+t},fromUtf8:function(e){return\"0x\"+o(new t(e,\"utf8\").toString(\"hex\")).replace(/^0+|0+$/g,\"\")},toAscii:function(e){var t=\"\",r=0,n=e.length;for(\"0x\"===e.substring(0,2)&&(r=2);r<n;r+=2){var i=parseInt(e.substr(r,2),16);t+=String.fromCharCode(i)}return t},toUtf8:function(e){return new t(o(i(e).replace(/^0+|0+$/g,\"\")),\"hex\").toString(\"utf8\")},getKeys:function(e,t,r){if(!Array.isArray(e))throw new Error(\"[ethjs-util] method getKeys expecting type Array as 'params' input, got '\"+typeof e+\"'\");if(\"string\"!=typeof t)throw new Error(\"[ethjs-util] method getKeys expecting type String for input 'key' got '\"+typeof t+\"'.\");for(var n=[],i=0;i<e.length;i++){var o=e[i][t];if(r&&!o)o=\"\";else if(\"string\"!=typeof o)throw new Error(\"invalid abi\");n.push(o)}return n},isHexString:function(e,t){return!(\"string\"!=typeof e||!e.match(/^0x[0-9A-Fa-f]*$/))&&(!t||e.length===2+2*t)}}}).call(this,r(1).Buffer)},function(e,t,r){var n=r(80);e.exports=function(e){return\"string\"!=typeof e?e:n(e)?e.slice(2):e}},function(e,t,r){const n=r(39),i=r(177);function o(e,t){return new Promise(r=>{const n=setTimeout(r,e);n.unref&&t&&n.unref()})}e.exports=class extends i{constructor(e={}){if(!e.provider)throw new Error(\"PollingBlockTracker - no provider specified.\");const t=e.pollingInterval||2e4,r=e.retryTimeout||t/10,n=void 0===e.keepEventLoopActive||e.keepEventLoopActive,i=e.setSkipCacheFlag||!1;super(Object.assign({blockResetDuration:t},e)),this._provider=e.provider,this._pollingInterval=t,this._retryTimeout=r,this._keepEventLoopActive=n,this._setSkipCacheFlag=i}async checkForLatestBlock(){return await this._updateLatestBlock(),await this.getLatestBlock()}_start(){this._performSync().catch(e=>this.emit(\"error\",e))}async _performSync(){for(;this._isRunning;)try{await this._updateLatestBlock(),await o(this._pollingInterval,!this._keepEventLoopActive)}catch(e){const t=new Error(\"PollingBlockTracker - encountered an error while attempting to update latest block:\\n\"+e.stack);try{this.emit(\"error\",t)}catch(e){console.error(t)}await o(this._retryTimeout,!this._keepEventLoopActive)}}async _updateLatestBlock(){const e=await this._fetchLatestBlock();this._newPotentialLatest(e)}async _fetchLatestBlock(){const e={jsonrpc:\"2.0\",id:1,method:\"eth_blockNumber\",params:[]};this._setSkipCacheFlag&&(e.skipCache=!0);const t=await n(t=>this._provider.sendAsync(e,t))();if(t.error)throw new Error(\"PollingBlockTracker - encountered error fetching block:\\n\"+t.error);return t.result}}},function(e,t,r){r(81),r(39);const n=r(41),i=(e,t)=>e+t,o=[\"sync\",\"latest\"];function a(e){return Number.parseInt(e,16)}e.exports=class extends n{constructor(e={}){super(),this._blockResetDuration=e.blockResetDuration||2e4,this._blockResetTimeout,this._currentBlock=null,this._isRunning=!1,this._onNewListener=this._onNewListener.bind(this),this._onRemoveListener=this._onRemoveListener.bind(this),this._resetCurrentBlock=this._resetCurrentBlock.bind(this),this._setupInternalEvents()}isRunning(){return this._isRunning}getCurrentBlock(){return this._currentBlock}async getLatestBlock(){if(this._currentBlock)return this._currentBlock;return await new Promise(e=>this.once(\"latest\",e))}removeAllListeners(e){e?super.removeAllListeners(e):super.removeAllListeners(),this._setupInternalEvents(),this._onRemoveListener()}_start(){}_end(){}_setupInternalEvents(){this.removeListener(\"newListener\",this._onNewListener),this.removeListener(\"removeListener\",this._onRemoveListener),this.on(\"newListener\",this._onNewListener),this.on(\"removeListener\",this._onRemoveListener)}_onNewListener(e,t){o.includes(e)&&this._maybeStart()}_onRemoveListener(e,t){this._getBlockTrackerEventCount()>0||this._maybeEnd()}_maybeStart(){this._isRunning||(this._isRunning=!0,this._cancelBlockResetTimeout(),this._start())}_maybeEnd(){this._isRunning&&(this._isRunning=!1,this._setupBlockResetTimeout(),this._end())}_getBlockTrackerEventCount(){return o.map(e=>this.listenerCount(e)).reduce(i)}_newPotentialLatest(e){const t=this._currentBlock;t&&a(e)<=a(t)||this._setCurrentBlock(e)}_setCurrentBlock(e){const t=this._currentBlock;this._currentBlock=e,this.emit(\"latest\",e),this.emit(\"sync\",{oldBlock:t,newBlock:e})}_setupBlockResetTimeout(){this._cancelBlockResetTimeout(),this._blockResetTimeout=setTimeout(this._resetCurrentBlock,this._blockResetDuration),this._blockResetTimeout.unref&&this._blockResetTimeout.unref()}_cancelBlockResetTimeout(){clearTimeout(this._blockResetTimeout)}_resetCurrentBlock(){this._currentBlock=null}}},function(e,t){e.exports=function(e){var t=(e=e||{}).max||Number.MAX_SAFE_INTEGER,r=void 0!==e.start?e.start:Math.floor(Math.random()*t);return function(){return r%=t,r++}}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=o(r(180)),i=o(r(206));function o(e){return e&&e.__esModule?e:{default:e}}t.default=(0,n.default)(i.default),e.exports=t.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return function(t,r,o){return e(n.default,t,(0,i.default)(r),o)}};var n=o(r(82)),i=o(r(13));function o(e){return e&&e.__esModule?e:{default:e}}e.exports=t.default},function(e,t,r){var n=r(42),i=r(86);e.exports=function(e){if(!i(e))return!1;var t=n(e);return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}},function(e,t,r){var n=r(83),i=Object.prototype,o=i.hasOwnProperty,a=i.toString,s=n?n.toStringTag:void 0;e.exports=function(e){var t=o.call(e,s),r=e[s];try{e[s]=void 0;var n=!0}catch(e){}var i=a.call(e);return n&&(t?e[s]=r:delete e[s]),i}},function(e,t){var r=Object.prototype.toString;e.exports=function(e){return r.call(e)}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,r,o){(0,n.default)(t)(e,(0,i.default)(r),o)};var n=o(r(89)),i=o(r(13));function o(e){return e&&e.__esModule?e:{default:e}}e.exports=t.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){if((0,n.default)(e))return function(e){var t=-1,r=e.length;return function(){return++t<r?{value:e[t],key:t}:null}}(e);var t=(0,i.default)(e);return t?function(e){var t=-1;return function(){var r=e.next();return r.done?null:(t++,{value:r.value,key:t})}}(t):(r=e,a=(0,o.default)(r),s=-1,f=a.length,function(){var e=a[++s];return s<f?{value:r[e],key:e}:null});var r,a,s,f};var n=a(r(27)),i=a(r(186)),o=a(r(187));function a(e){return e&&e.__esModule?e:{default:e}}e.exports=t.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return n&&e[n]&&e[n]()};var n=\"function\"==typeof Symbol&&Symbol.iterator;e.exports=t.default},function(e,t,r){var n=r(188),i=r(199),o=r(27);e.exports=function(e){return o(e)?n(e):i(e)}},function(e,t,r){var n=r(189),i=r(190),o=r(90),a=r(192),s=r(194),f=r(195),u=Object.prototype.hasOwnProperty;e.exports=function(e,t){var r=o(e),c=!r&&i(e),h=!r&&!c&&a(e),d=!r&&!c&&!h&&f(e),l=r||c||h||d,p=l?n(e.length,String):[],b=p.length;for(var y in e)!t&&!u.call(e,y)||l&&(\"length\"==y||h&&(\"offset\"==y||\"parent\"==y)||d&&(\"buffer\"==y||\"byteLength\"==y||\"byteOffset\"==y)||s(y,b))||p.push(y);return p}},function(e,t){e.exports=function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}},function(e,t,r){var n=r(191),i=r(44),o=Object.prototype,a=o.hasOwnProperty,s=o.propertyIsEnumerable,f=n(function(){return arguments}())?n:function(e){return i(e)&&a.call(e,\"callee\")&&!s.call(e,\"callee\")};e.exports=f},function(e,t,r){var n=r(42),i=r(44);e.exports=function(e){return i(e)&&\"[object Arguments]\"==n(e)}},function(e,t,r){(function(e){var n=r(84),i=r(193),o=t&&!t.nodeType&&t,a=o&&\"object\"==typeof e&&e&&!e.nodeType&&e,s=a&&a.exports===o?n.Buffer:void 0,f=(s?s.isBuffer:void 0)||i;e.exports=f}).call(this,r(25)(e))},function(e,t){e.exports=function(){return!1}},function(e,t){var r=/^(?:0|[1-9]\\d*)$/;e.exports=function(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&(\"number\"==n||\"symbol\"!=n&&r.test(e))&&e>-1&&e%1==0&&e<t}},function(e,t,r){var n=r(196),i=r(197),o=r(198),a=o&&o.isTypedArray,s=a?i(a):n;e.exports=s},function(e,t,r){var n=r(42),i=r(87),o=r(44),a={};a[\"[object Float32Array]\"]=a[\"[object Float64Array]\"]=a[\"[object Int8Array]\"]=a[\"[object Int16Array]\"]=a[\"[object Int32Array]\"]=a[\"[object Uint8Array]\"]=a[\"[object Uint8ClampedArray]\"]=a[\"[object Uint16Array]\"]=a[\"[object Uint32Array]\"]=!0,a[\"[object Arguments]\"]=a[\"[object Array]\"]=a[\"[object ArrayBuffer]\"]=a[\"[object Boolean]\"]=a[\"[object DataView]\"]=a[\"[object Date]\"]=a[\"[object Error]\"]=a[\"[object Function]\"]=a[\"[object Map]\"]=a[\"[object Number]\"]=a[\"[object Object]\"]=a[\"[object RegExp]\"]=a[\"[object Set]\"]=a[\"[object String]\"]=a[\"[object WeakMap]\"]=!1,e.exports=function(e){return o(e)&&i(e.length)&&!!a[n(e)]}},function(e,t){e.exports=function(e){return function(t){return e(t)}}},function(e,t,r){(function(e){var n=r(85),i=t&&!t.nodeType&&t,o=i&&\"object\"==typeof e&&e&&!e.nodeType&&e,a=o&&o.exports===i&&n.process,s=function(){try{var e=o&&o.require&&o.require(\"util\").types;return e||a&&a.binding&&a.binding(\"util\")}catch(e){}}();e.exports=s}).call(this,r(25)(e))},function(e,t,r){var n=r(200),i=r(201),o=Object.prototype.hasOwnProperty;e.exports=function(e){if(!n(e))return i(e);var t=[];for(var r in Object(e))o.call(e,r)&&\"constructor\"!=r&&t.push(r);return t}},function(e,t){var r=Object.prototype;e.exports=function(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||r)}},function(e,t,r){var n=r(202)(Object.keys,Object);e.exports=n},function(e,t){e.exports=function(e,t){return function(r){return e(t(r))}}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return(0,i.default)((function(t,r){var i;try{i=e.apply(this,t)}catch(e){return r(e)}(0,n.default)(i)&&\"function\"==typeof i.then?i.then((function(e){s(r,null,e)}),(function(e){s(r,e.message?e:new Error(e))})):r(null,i)}))};var n=a(r(86)),i=a(r(204)),o=a(r(205));function a(e){return e&&e.__esModule?e:{default:e}}function s(e,t,r){try{e(t,r)}catch(e){(0,o.default)(f,e)}}function f(e){throw e}e.exports=t.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return function(){var t=(0,o.default)(arguments),r=t.pop();e.call(this,t,r)}};var n,i=r(28),o=(n=i)&&n.__esModule?n:{default:n};e.exports=t.default},function(e,t,r){\"use strict\";(function(e,n){Object.defineProperty(t,\"__esModule\",{value:!0}),t.hasNextTick=t.hasSetImmediate=void 0,t.fallback=c,t.wrap=h;var i,o=r(28),a=(i=o)&&i.__esModule?i:{default:i};var s,f=t.hasSetImmediate=\"function\"==typeof e&&e,u=t.hasNextTick=\"object\"==typeof n&&\"function\"==typeof n.nextTick;function c(e){setTimeout(e,0)}function h(e){return function(t){var r=(0,a.default)(arguments,1);e((function(){t.apply(null,r)}))}}s=f?e:u?n.nextTick:c,t.default=h(s)}).call(this,r(33).setImmediate,r(3))},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,r,o){o=o||n.default,t=t||[];var a=[],s=0,f=(0,i.default)(r);e(t,(function(e,t,r){var n=s++;f(e,(function(e,t){a[n]=t,r(e)}))}),(function(e){o(e,a)}))};var n=o(r(22)),i=o(r(13));function o(e){return e&&e.__esModule?e:{default:e}}e.exports=t.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=o(r(208)),i=o(r(91));function o(e){return e&&e.__esModule?e:{default:e}}t.default=(0,i.default)(n.default,1),e.exports=t.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,r,a){(0,n.default)(t)(e,(0,i.default)((0,o.default)(r)),a)};var n=a(r(89)),i=a(r(209)),o=a(r(13));function a(e){return e&&e.__esModule?e:{default:e}}e.exports=t.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return function(t,r,n){return e(t,n)}},e.exports=t.default},function(e,t,r){\"use strict\";var n=r(9).EventEmitter,i=r(10).inherits;function o(){n.call(this),this.isLocked=!0}e.exports=o,i(o,n),o.prototype.go=function(){this.isLocked=!1,this.emit(\"unlock\")},o.prototype.stop=function(){this.isLocked=!0,this.emit(\"lock\")},o.prototype.await=function(e){this.isLocked?this.once(\"unlock\",e):setTimeout(e)}},function(e,t,r){t.parse=r(212),t.stringify=r(213)},function(e,t){var r,n,i,o,a={'\"':'\"',\"\\\\\":\"\\\\\",\"/\":\"/\",b:\"\\b\",f:\"\\f\",n:\"\\n\",r:\"\\r\",t:\"\\t\"},s=function(e){throw{name:\"SyntaxError\",message:e,at:r,text:i}},f=function(e){return e&&e!==n&&s(\"Expected '\"+e+\"' instead of '\"+n+\"'\"),n=i.charAt(r),r+=1,n},u=function(){var e,t=\"\";for(\"-\"===n&&(t=\"-\",f(\"-\"));n>=\"0\"&&n<=\"9\";)t+=n,f();if(\".\"===n)for(t+=\".\";f()&&n>=\"0\"&&n<=\"9\";)t+=n;if(\"e\"===n||\"E\"===n)for(t+=n,f(),\"-\"!==n&&\"+\"!==n||(t+=n,f());n>=\"0\"&&n<=\"9\";)t+=n,f();if(e=+t,isFinite(e))return e;s(\"Bad number\")},c=function(){var e,t,r,i=\"\";if('\"'===n)for(;f();){if('\"'===n)return f(),i;if(\"\\\\\"===n)if(f(),\"u\"===n){for(r=0,t=0;t<4&&(e=parseInt(f(),16),isFinite(e));t+=1)r=16*r+e;i+=String.fromCharCode(r)}else{if(\"string\"!=typeof a[n])break;i+=a[n]}else i+=n}s(\"Bad string\")},h=function(){for(;n&&n<=\" \";)f()};o=function(){switch(h(),n){case\"{\":return function(){var e,t={};if(\"{\"===n){if(f(\"{\"),h(),\"}\"===n)return f(\"}\"),t;for(;n;){if(e=c(),h(),f(\":\"),Object.hasOwnProperty.call(t,e)&&s('Duplicate key \"'+e+'\"'),t[e]=o(),h(),\"}\"===n)return f(\"}\"),t;f(\",\"),h()}}s(\"Bad object\")}();case\"[\":return function(){var e=[];if(\"[\"===n){if(f(\"[\"),h(),\"]\"===n)return f(\"]\"),e;for(;n;){if(e.push(o()),h(),\"]\"===n)return f(\"]\"),e;f(\",\"),h()}}s(\"Bad array\")}();case'\"':return c();case\"-\":return u();default:return n>=\"0\"&&n<=\"9\"?u():function(){switch(n){case\"t\":return f(\"t\"),f(\"r\"),f(\"u\"),f(\"e\"),!0;case\"f\":return f(\"f\"),f(\"a\"),f(\"l\"),f(\"s\"),f(\"e\"),!1;case\"n\":return f(\"n\"),f(\"u\"),f(\"l\"),f(\"l\"),null}s(\"Unexpected '\"+n+\"'\")}()}},e.exports=function(e,t){var a;return i=e,r=0,n=\" \",a=o(),h(),n&&s(\"Syntax error\"),\"function\"==typeof t?function e(r,n){var i,o,a=r[n];if(a&&\"object\"==typeof a)for(i in a)Object.prototype.hasOwnProperty.call(a,i)&&(void 0!==(o=e(a,i))?a[i]=o:delete a[i]);return t.call(r,n,a)}({\"\":a},\"\"):a}},function(e,t){var r,n,i,o=/[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,a={\"\\b\":\"\\\\b\",\"\\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"};function s(e){return o.lastIndex=0,o.test(e)?'\"'+e.replace(o,(function(e){var t=a[e];return\"string\"==typeof t?t:\"\\\\u\"+(\"0000\"+e.charCodeAt(0).toString(16)).slice(-4)}))+'\"':'\"'+e+'\"'}e.exports=function(e,t,o){var a;if(r=\"\",n=\"\",\"number\"==typeof o)for(a=0;a<o;a+=1)n+=\" \";else\"string\"==typeof o&&(n=o);if(i=t,t&&\"function\"!=typeof t&&(\"object\"!=typeof t||\"number\"!=typeof t.length))throw new Error(\"JSON.stringify\");return function e(t,o){var a,f,u,c,h,d=r,l=o[t];switch(l&&\"object\"==typeof l&&\"function\"==typeof l.toJSON&&(l=l.toJSON(t)),\"function\"==typeof i&&(l=i.call(o,t,l)),typeof l){case\"string\":return s(l);case\"number\":return isFinite(l)?String(l):\"null\";case\"boolean\":case\"null\":return String(l);case\"object\":if(!l)return\"null\";if(r+=n,h=[],\"[object Array]\"===Object.prototype.toString.apply(l)){for(c=l.length,a=0;a<c;a+=1)h[a]=e(a,l)||\"null\";return u=0===h.length?\"[]\":r?\"[\\n\"+r+h.join(\",\\n\"+r)+\"\\n\"+d+\"]\":\"[\"+h.join(\",\")+\"]\",r=d,u}if(i&&\"object\"==typeof i)for(c=i.length,a=0;a<c;a+=1)\"string\"==typeof(f=i[a])&&(u=e(f,l))&&h.push(s(f)+(r?\": \":\":\")+u);else for(f in l)Object.prototype.hasOwnProperty.call(l,f)&&(u=e(f,l))&&h.push(s(f)+(r?\": \":\":\")+u);return u=0===h.length?\"{}\":r?\"{\\n\"+r+h.join(\",\\n\"+r)+\"\\n\"+d+\"}\":\"{\"+h.join(\",\")+\"}\",r=d,u}}(\"\",{\"\":e})}},function(e,t,r){\"use strict\";e.exports=function(){var e=(new Date).getTime()*Math.pow(10,3),t=Math.floor(Math.random()*Math.pow(10,3));return e+t}},function(e,t,r){const n=r(216),i=r(48),o=[void 0,null,\"<nil>\"];e.exports=function(e={}){const{blockTracker:t}=e;if(!t)throw new Error(\"createBlockCacheMiddleware - No BlockTracker specified\");const r=new a,o={perma:r,block:r,fork:r};return i(async(e,i,a)=>{if(e.skipCache)return a();const s=n.cacheTypeForPayload(e),f=o[s];if(!f)return a();if(!f.canCacheRequest(e))return a();let u,c=n.blockTagForPayload(e);if(c||(c=\"latest\"),\"earliest\"===c)u=\"0x00\";else if(\"latest\"===c){const e=await t.getLatestBlock();r.clearBefore(e),u=e}else u=c;const h=await f.get(e,u);void 0===h?(await a(),await f.set(e,u,i.result)):i.result=h})};class a{constructor(){this.cache={}}getBlockCacheForPayload(e,t){const r=Number.parseInt(t,16);let n=this.cache[r];if(!n){const e={};this.cache[r]=e,n=e}return n}async get(e,t){const r=this.getBlockCacheForPayload(e,t);if(!r)return;return r[n.cacheIdentifierForPayload(e,!0)]}async set(e,t,r){if(!this.canCacheResult(e,r))return;this.getBlockCacheForPayload(e,t)[n.cacheIdentifierForPayload(e,!0)]=r}canCacheRequest(e){if(!n.canCache(e))return!1;return\"pending\"!==n.blockTagForPayload(e)}canCacheResult(e,t){if(!o.includes(t))return!!(![\"eth_getTransactionByHash\",\"eth_getTransactionReceipt\"].includes(e.method)||t&&t.blockHash&&\"0x0000000000000000000000000000000000000000000000000000000000000000\"!==t.blockHash)}clearBefore(e){const t=this,r=Number.parseInt(e,16);Object.keys(t.cache).map(Number).filter(e=>e<r).forEach(e=>delete t.cache[e])}}},function(e,t,r){const n=r(93);function i(e){return\"never\"!==s(e)}function o(e){const t=a(e);return t>=e.params.length?e.params:\"eth_getBlockByNumber\"===e.method?e.params.slice(1):e.params.slice(0,t)}function a(e){switch(e.method){case\"eth_getStorageAt\":return 2;case\"eth_getBalance\":case\"eth_getCode\":case\"eth_getTransactionCount\":case\"eth_call\":return 1;case\"eth_getBlockByNumber\":return 0;default:return}}function s(e){switch(e.method){case\"web3_clientVersion\":case\"web3_sha3\":case\"eth_protocolVersion\":case\"eth_getBlockTransactionCountByHash\":case\"eth_getUncleCountByBlockHash\":case\"eth_getCode\":case\"eth_getBlockByHash\":case\"eth_getTransactionByHash\":case\"eth_getTransactionByBlockHashAndIndex\":case\"eth_getTransactionReceipt\":case\"eth_getUncleByBlockHashAndIndex\":case\"eth_getCompilers\":case\"eth_compileLLL\":case\"eth_compileSolidity\":case\"eth_compileSerpent\":case\"shh_version\":case\"test_permaCache\":return\"perma\";case\"eth_getBlockByNumber\":case\"eth_getBlockTransactionCountByNumber\":case\"eth_getUncleCountByBlockNumber\":case\"eth_getTransactionByBlockNumberAndIndex\":case\"eth_getUncleByBlockNumberAndIndex\":case\"test_forkCache\":return\"fork\";case\"eth_gasPrice\":case\"eth_blockNumber\":case\"eth_getBalance\":case\"eth_getStorageAt\":case\"eth_getTransactionCount\":case\"eth_call\":case\"eth_estimateGas\":case\"eth_getFilterLogs\":case\"eth_getLogs\":case\"test_blockCache\":return\"block\";case\"net_version\":case\"net_peerCount\":case\"net_listening\":case\"eth_syncing\":case\"eth_sign\":case\"eth_coinbase\":case\"eth_mining\":case\"eth_hashrate\":case\"eth_accounts\":case\"eth_sendTransaction\":case\"eth_sendRawTransaction\":case\"eth_newFilter\":case\"eth_newBlockFilter\":case\"eth_newPendingTransactionFilter\":case\"eth_uninstallFilter\":case\"eth_getFilterChanges\":case\"eth_getWork\":case\"eth_submitWork\":case\"eth_submitHashrate\":case\"db_putString\":case\"db_getString\":case\"db_putHex\":case\"db_getHex\":case\"shh_post\":case\"shh_newIdentity\":case\"shh_hasIdentity\":case\"shh_newGroup\":case\"shh_addToGroup\":case\"shh_newFilter\":case\"shh_uninstallFilter\":case\"shh_getFilterChanges\":case\"shh_getMessages\":case\"test_neverCache\":return\"never\"}}e.exports={cacheIdentifierForPayload:function(e,t){const r=t?o(e):e.params;return i(e)?e.method+\":\"+n(r):null},canCache:i,blockTagForPayload:function(e){let t=a(e);if(t>=e.params.length)return null;return e.params[t]},paramsWithoutBlockTag:o,blockTagParamIndex:a,cacheTypeForPayload:s}},function(e,t,r){\"use strict\";(function(e,r){class n{constructor(e){this.tasks=[],this.count=e}sched(){if(this.count>0&&this.tasks.length>0){this.count--;let e=this.tasks.shift();if(void 0===e)throw\"Unexpected undefined value in tasks list\";e()}}acquire(){return new Promise((t,n)=>{this.tasks.push(()=>{var e=!1;t(()=>{e||(e=!0,this.count++,this.sched())})}),e&&e.nextTick?e.nextTick(this.sched.bind(this)):r(this.sched.bind(this))})}use(e){return this.acquire().then(t=>e().then(e=>(t(),e)).catch(e=>{throw t(),e}))}}t.Semaphore=n;t.Mutex=class extends n{constructor(){super(1)}}}).call(this,r(3),r(33).setImmediate)},function(e,t){e.exports=function(e){return(t,r,n,i)=>{const o=e[t.method];return void 0===o?n():\"function\"==typeof o?o(t,r,n,i):(r.result=o,i())}}},function(e,t,r){const n=r(81),i=r(39),o=r(220),{bnToHex:a,hexToInt:s,incrementHexInt:f,minBlockRef:u,blockRefIsNumber:c}=r(23);e.exports=class extends o{constructor({provider:e,params:t}){super(),this.type=\"log\",this.ethQuery=new n(e),this.params=Object.assign({fromBlock:\"latest\",toBlock:\"latest\",address:void 0,topics:[]},t),this.params.address&&(Array.isArray(this.params.address)||(this.params.address=[this.params.address]),this.params.address=this.params.address.map(e=>e.toLowerCase()))}async initialize({currentBlock:e}){let t=this.params.fromBlock;[\"latest\",\"pending\"].includes(t)&&(t=e),\"earliest\"===t&&(t=\"0x0\"),this.params.fromBlock=t;const r=u(this.params.toBlock,e),n=Object.assign({},this.params,{toBlock:r}),i=await this._fetchLogs(n);this.addInitialResults(i)}async update({oldBlock:e,newBlock:t}){const r=t;let n;n=e?f(e):t;const i=Object.assign({},this.params,{fromBlock:n,toBlock:r}),o=(await this._fetchLogs(i)).filter(e=>this.matchLog(e));this.addResults(o)}async _fetchLogs(e){return await i(t=>this.ethQuery.getLogs(e,t))()}matchLog(e){if(s(this.params.fromBlock)>=s(e.blockNumber))return!1;if(c(this.params.toBlock)&&s(this.params.toBlock)<=s(e.blockNumber))return!1;const t=e.address&&e.address.toLowerCase();if(this.params.address&&t&&!this.params.address.includes(t))return!1;return this.params.topics.every((t,r)=>{let n=e.topics[r];if(!n)return!1;n=n.toLowerCase();let i=Array.isArray(t)?t:[t];if(i.includes(null))return!0;i=i.map(e=>e.toLowerCase());return i.includes(n)})}}},function(e,t,r){const n=r(49);e.exports=class extends n{constructor(){super(),this.allResults=[]}async update(){throw new Error(\"BaseFilterWithHistory - no update method specified\")}addResults(e){this.allResults=this.allResults.concat(e),super.addResults(e)}addInitialResults(e){this.allResults=this.allResults.concat(e),super.addInitialResults(e)}getAllResults(){return this.allResults}}},function(e,t,r){const n=r(49),i=r(50),{incrementHexInt:o}=r(23);e.exports=class extends n{constructor({provider:e,params:t}){super(),this.type=\"block\",this.provider=e}async update({oldBlock:e,newBlock:t}){const r=t,n=o(e),a=(await i({provider:this.provider,fromBlock:n,toBlock:r})).map(e=>e.hash);this.addResults(a)}}},function(e,t,r){const n=r(223),i=r(49),o=r(50),{incrementHexInt:a}=r(23);e.exports=class extends i{constructor({provider:e}){super(),this.type=\"tx\",this.provider=e}async update({oldBlock:e}){const t=e,r=a(e),i=await o({provider:this.provider,fromBlock:r,toBlock:t}),s=n(i,e=>e.transactions);this.addResults(s)}}},function(e,t,r){(function(e,r){var n=\"[object Arguments]\",i=\"[object Map]\",o=\"[object Object]\",a=\"[object Set]\",s=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,f=/^\\w*$/,u=/^\\./,c=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,h=/\\\\(\\\\)?/g,d=/^\\[object .+?Constructor\\]$/,l=/^(?:0|[1-9]\\d*)$/,p={};p[\"[object Float32Array]\"]=p[\"[object Float64Array]\"]=p[\"[object Int8Array]\"]=p[\"[object Int16Array]\"]=p[\"[object Int32Array]\"]=p[\"[object Uint8Array]\"]=p[\"[object Uint8ClampedArray]\"]=p[\"[object Uint16Array]\"]=p[\"[object Uint32Array]\"]=!0,p[n]=p[\"[object Array]\"]=p[\"[object ArrayBuffer]\"]=p[\"[object Boolean]\"]=p[\"[object DataView]\"]=p[\"[object Date]\"]=p[\"[object Error]\"]=p[\"[object Function]\"]=p[i]=p[\"[object Number]\"]=p[o]=p[\"[object RegExp]\"]=p[a]=p[\"[object String]\"]=p[\"[object WeakMap]\"]=!1;var b=\"object\"==typeof e&&e&&e.Object===Object&&e,y=\"object\"==typeof self&&self&&self.Object===Object&&self,g=b||y||Function(\"return this\")(),v=t&&!t.nodeType&&t,m=v&&\"object\"==typeof r&&r&&!r.nodeType&&r,w=m&&m.exports===v&&b.process,_=function(){try{return w&&w.binding(\"util\")}catch(e){}}(),E=_&&_.isTypedArray;function S(e,t){for(var r=-1,n=e?e.length:0,i=Array(n);++r<n;)i[r]=t(e[r],r,e);return i}function A(e,t){for(var r=-1,n=t.length,i=e.length;++r<n;)e[i+r]=t[r];return e}function x(e,t){for(var r=-1,n=e?e.length:0;++r<n;)if(t(e[r],r,e))return!0;return!1}function k(e){var t=!1;if(null!=e&&\"function\"!=typeof e.toString)try{t=!!(e+\"\")}catch(e){}return t}function M(e){var t=-1,r=Array(e.size);return e.forEach((function(e,n){r[++t]=[n,e]})),r}function T(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r}var I,R,P,L=Array.prototype,B=Function.prototype,C=Object.prototype,O=g[\"__core-js_shared__\"],N=(I=/[^.]+$/.exec(O&&O.keys&&O.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+I:\"\",j=B.toString,D=C.hasOwnProperty,U=C.toString,z=RegExp(\"^\"+j.call(D).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),q=g.Symbol,F=g.Uint8Array,K=C.propertyIsEnumerable,H=L.splice,V=q?q.isConcatSpreadable:void 0,Y=(R=Object.keys,P=Object,function(e){return R(P(e))}),W=Te(g,\"DataView\"),G=Te(g,\"Map\"),Z=Te(g,\"Promise\"),J=Te(g,\"Set\"),$=Te(g,\"WeakMap\"),X=Te(Object,\"create\"),Q=je(W),ee=je(G),te=je(Z),re=je(J),ne=je($),ie=q?q.prototype:void 0,oe=ie?ie.valueOf:void 0,ae=ie?ie.toString:void 0;function se(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function fe(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function ue(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function ce(e){var t=-1,r=e?e.length:0;for(this.__data__=new ue;++t<r;)this.add(e[t])}function he(e){this.__data__=new fe(e)}function de(e,t){var r=qe(e)||ze(e)?function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}(e.length,String):[],n=r.length,i=!!n;for(var o in e)!t&&!D.call(e,o)||i&&(\"length\"==o||Pe(o,n))||r.push(o);return r}function le(e,t){for(var r=e.length;r--;)if(Ue(e[r][0],t))return r;return-1}se.prototype.clear=function(){this.__data__=X?X(null):{}},se.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},se.prototype.get=function(e){var t=this.__data__;if(X){var r=t[e];return\"__lodash_hash_undefined__\"===r?void 0:r}return D.call(t,e)?t[e]:void 0},se.prototype.has=function(e){var t=this.__data__;return X?void 0!==t[e]:D.call(t,e)},se.prototype.set=function(e,t){return this.__data__[e]=X&&void 0===t?\"__lodash_hash_undefined__\":t,this},fe.prototype.clear=function(){this.__data__=[]},fe.prototype.delete=function(e){var t=this.__data__,r=le(t,e);return!(r<0)&&(r==t.length-1?t.pop():H.call(t,r,1),!0)},fe.prototype.get=function(e){var t=this.__data__,r=le(t,e);return r<0?void 0:t[r][1]},fe.prototype.has=function(e){return le(this.__data__,e)>-1},fe.prototype.set=function(e,t){var r=this.__data__,n=le(r,e);return n<0?r.push([e,t]):r[n][1]=t,this},ue.prototype.clear=function(){this.__data__={hash:new se,map:new(G||fe),string:new se}},ue.prototype.delete=function(e){return Me(this,e).delete(e)},ue.prototype.get=function(e){return Me(this,e).get(e)},ue.prototype.has=function(e){return Me(this,e).has(e)},ue.prototype.set=function(e,t){return Me(this,e).set(e,t),this},ce.prototype.add=ce.prototype.push=function(e){return this.__data__.set(e,\"__lodash_hash_undefined__\"),this},ce.prototype.has=function(e){return this.__data__.has(e)},he.prototype.clear=function(){this.__data__=new fe},he.prototype.delete=function(e){return this.__data__.delete(e)},he.prototype.get=function(e){return this.__data__.get(e)},he.prototype.has=function(e){return this.__data__.has(e)},he.prototype.set=function(e,t){var r=this.__data__;if(r instanceof fe){var n=r.__data__;if(!G||n.length<199)return n.push([e,t]),this;r=this.__data__=new ue(n)}return r.set(e,t),this};var pe,be,ye=(pe=function(e,t){return e&&ge(e,t,Ze)},function(e,t){if(null==e)return e;if(!Fe(e))return pe(e,t);for(var r=e.length,n=be?r:-1,i=Object(e);(be?n--:++n<r)&&!1!==t(i[n],n,i););return e});var ge=function(e){return function(t,r,n){for(var i=-1,o=Object(t),a=n(t),s=a.length;s--;){var f=a[e?s:++i];if(!1===r(o[f],f,o))break}return t}}();function ve(e,t){for(var r=0,n=(t=Le(t,e)?[t]:xe(t)).length;null!=e&&r<n;)e=e[Ne(t[r++])];return r&&r==n?e:void 0}function me(e,t){return null!=e&&t in Object(e)}function we(e,t,r,s,f){return e===t||(null==e||null==t||!Ve(e)&&!Ye(t)?e!=e&&t!=t:function(e,t,r,s,f,u){var c=qe(e),h=qe(t),d=\"[object Array]\",l=\"[object Array]\";c||(d=(d=Ie(e))==n?o:d);h||(l=(l=Ie(t))==n?o:l);var p=d==o&&!k(e),b=l==o&&!k(t),y=d==l;if(y&&!p)return u||(u=new he),c||Ge(e)?ke(e,t,r,s,f,u):function(e,t,r,n,o,s,f){switch(r){case\"[object DataView]\":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case\"[object ArrayBuffer]\":return!(e.byteLength!=t.byteLength||!n(new F(e),new F(t)));case\"[object Boolean]\":case\"[object Date]\":case\"[object Number]\":return Ue(+e,+t);case\"[object Error]\":return e.name==t.name&&e.message==t.message;case\"[object RegExp]\":case\"[object String]\":return e==t+\"\";case i:var u=M;case a:var c=2&s;if(u||(u=T),e.size!=t.size&&!c)return!1;var h=f.get(e);if(h)return h==t;s|=1,f.set(e,t);var d=ke(u(e),u(t),n,o,s,f);return f.delete(e),d;case\"[object Symbol]\":if(oe)return oe.call(e)==oe.call(t)}return!1}(e,t,d,r,s,f,u);if(!(2&f)){var g=p&&D.call(e,\"__wrapped__\"),v=b&&D.call(t,\"__wrapped__\");if(g||v){var m=g?e.value():e,w=v?t.value():t;return u||(u=new he),r(m,w,s,f,u)}}if(!y)return!1;return u||(u=new he),function(e,t,r,n,i,o){var a=2&i,s=Ze(e),f=s.length,u=Ze(t).length;if(f!=u&&!a)return!1;var c=f;for(;c--;){var h=s[c];if(!(a?h in t:D.call(t,h)))return!1}var d=o.get(e);if(d&&o.get(t))return d==t;var l=!0;o.set(e,t),o.set(t,e);var p=a;for(;++c<f;){h=s[c];var b=e[h],y=t[h];if(n)var g=a?n(y,b,h,t,e,o):n(b,y,h,e,t,o);if(!(void 0===g?b===y||r(b,y,n,i,o):g)){l=!1;break}p||(p=\"constructor\"==h)}if(l&&!p){var v=e.constructor,m=t.constructor;v==m||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof v&&v instanceof v&&\"function\"==typeof m&&m instanceof m||(l=!1)}return o.delete(e),o.delete(t),l}(e,t,r,s,f,u)}(e,t,we,r,s,f))}function _e(e){return!(!Ve(e)||function(e){return!!N&&N in e}(e))&&(Ke(e)||k(e)?z:d).test(je(e))}function Ee(e){return\"function\"==typeof e?e:null==e?Je:\"object\"==typeof e?qe(e)?function(e,t){if(Le(e)&&Be(t))return Ce(Ne(e),t);return function(r){var n=function(e,t,r){var n=null==e?void 0:ve(e,t);return void 0===n?r:n}(r,e);return void 0===n&&n===t?function(e,t){return null!=e&&function(e,t,r){t=Le(t,e)?[t]:xe(t);var n,i=-1,o=t.length;for(;++i<o;){var a=Ne(t[i]);if(!(n=null!=e&&r(e,a)))break;e=e[a]}if(n)return n;return!!(o=e?e.length:0)&&He(o)&&Pe(a,o)&&(qe(e)||ze(e))}(e,t,me)}(r,e):we(t,n,void 0,3)}}(e[0],e[1]):function(e){var t=function(e){var t=Ze(e),r=t.length;for(;r--;){var n=t[r],i=e[n];t[r]=[n,i,Be(i)]}return t}(e);if(1==t.length&&t[0][2])return Ce(t[0][0],t[0][1]);return function(r){return r===e||function(e,t,r,n){var i=r.length,o=i,a=!n;if(null==e)return!o;for(e=Object(e);i--;){var s=r[i];if(a&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++i<o;){var f=(s=r[i])[0],u=e[f],c=s[1];if(a&&s[2]){if(void 0===u&&!(f in e))return!1}else{var h=new he;if(n)var d=n(u,c,f,e,t,h);if(!(void 0===d?we(c,u,n,3,h):d))return!1}}return!0}(r,e,t)}}(e):Le(t=e)?(r=Ne(t),function(e){return null==e?void 0:e[r]}):function(e){return function(t){return ve(t,e)}}(t);var t,r}function Se(e){if(r=(t=e)&&t.constructor,n=\"function\"==typeof r&&r.prototype||C,t!==n)return Y(e);var t,r,n,i=[];for(var o in Object(e))D.call(e,o)&&\"constructor\"!=o&&i.push(o);return i}function Ae(e,t){var r=-1,n=Fe(e)?Array(e.length):[];return ye(e,(function(e,i,o){n[++r]=t(e,i,o)})),n}function xe(e){return qe(e)?e:Oe(e)}function ke(e,t,r,n,i,o){var a=2&i,s=e.length,f=t.length;if(s!=f&&!(a&&f>s))return!1;var u=o.get(e);if(u&&o.get(t))return u==t;var c=-1,h=!0,d=1&i?new ce:void 0;for(o.set(e,t),o.set(t,e);++c<s;){var l=e[c],p=t[c];if(n)var b=a?n(p,l,c,t,e,o):n(l,p,c,e,t,o);if(void 0!==b){if(b)continue;h=!1;break}if(d){if(!x(t,(function(e,t){if(!d.has(t)&&(l===e||r(l,e,n,i,o)))return d.add(t)}))){h=!1;break}}else if(l!==p&&!r(l,p,n,i,o)){h=!1;break}}return o.delete(e),o.delete(t),h}function Me(e,t){var r,n,i=e.__data__;return(\"string\"==(n=typeof(r=t))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?i[\"string\"==typeof t?\"string\":\"hash\"]:i.map}function Te(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return _e(r)?r:void 0}var Ie=function(e){return U.call(e)};function Re(e){return qe(e)||ze(e)||!!(V&&e&&e[V])}function Pe(e,t){return!!(t=null==t?9007199254740991:t)&&(\"number\"==typeof e||l.test(e))&&e>-1&&e%1==0&&e<t}function Le(e,t){if(qe(e))return!1;var r=typeof e;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=e&&!We(e))||(f.test(e)||!s.test(e)||null!=t&&e in Object(t))}function Be(e){return e==e&&!Ve(e)}function Ce(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}(W&&\"[object DataView]\"!=Ie(new W(new ArrayBuffer(1)))||G&&Ie(new G)!=i||Z&&\"[object Promise]\"!=Ie(Z.resolve())||J&&Ie(new J)!=a||$&&\"[object WeakMap]\"!=Ie(new $))&&(Ie=function(e){var t=U.call(e),r=t==o?e.constructor:void 0,n=r?je(r):void 0;if(n)switch(n){case Q:return\"[object DataView]\";case ee:return i;case te:return\"[object Promise]\";case re:return a;case ne:return\"[object WeakMap]\"}return t});var Oe=De((function(e){var t;e=null==(t=e)?\"\":function(e){if(\"string\"==typeof e)return e;if(We(e))return ae?ae.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}(t);var r=[];return u.test(e)&&r.push(\"\"),e.replace(c,(function(e,t,n,i){r.push(n?i.replace(h,\"$1\"):t||e)})),r}));function Ne(e){if(\"string\"==typeof e||We(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function je(e){if(null!=e){try{return j.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}function De(e,t){if(\"function\"!=typeof e||t&&\"function\"!=typeof t)throw new TypeError(\"Expected a function\");var r=function(){var n=arguments,i=t?t.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var a=e.apply(this,n);return r.cache=o.set(i,a),a};return r.cache=new(De.Cache||ue),r}function Ue(e,t){return e===t||e!=e&&t!=t}function ze(e){return function(e){return Ye(e)&&Fe(e)}(e)&&D.call(e,\"callee\")&&(!K.call(e,\"callee\")||U.call(e)==n)}De.Cache=ue;var qe=Array.isArray;function Fe(e){return null!=e&&He(e.length)&&!Ke(e)}function Ke(e){var t=Ve(e)?U.call(e):\"\";return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t}function He(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Ve(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}function Ye(e){return!!e&&\"object\"==typeof e}function We(e){return\"symbol\"==typeof e||Ye(e)&&\"[object Symbol]\"==U.call(e)}var Ge=E?function(e){return function(t){return e(t)}}(E):function(e){return Ye(e)&&He(e.length)&&!!p[U.call(e)]};function Ze(e){return Fe(e)?de(e):Se(e)}function Je(e){return e}r.exports=function(e,t){return function e(t,r,n,i,o){var a=-1,s=t.length;for(n||(n=Re),o||(o=[]);++a<s;){var f=t[a];r>0&&n(f)?r>1?e(f,r-1,n,i,o):A(o,f):i||(o[o.length]=f)}return o}(function(e,t){return(qe(e)?S:Ae)(e,Ee(t))}(e,t),1)}}).call(this,r(5),r(25)(e))},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){if(t=(0,o.default)(t||i.default),!(0,n.default)(e))return t(new Error(\"First argument to waterfall must be an array of functions\"));if(!e.length)return t();var r=0;function u(t){var n=(0,f.default)(e[r++]);t.push((0,s.default)(c)),n.apply(null,t)}function c(n){if(n||r===e.length)return t.apply(null,arguments);u((0,a.default)(arguments,1))}u([])};var n=u(r(90)),i=u(r(22)),o=u(r(43)),a=u(r(28)),s=u(r(45)),f=u(r(13));function u(e){return e&&e.__esModule?e:{default:e}}e.exports=t.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){(0,i.default)(n.default,e,t)};var n=o(r(82)),i=o(r(226));function o(e){return e&&e.__esModule?e:{default:e}}e.exports=t.default},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,r){r=r||n.default;var s=(0,i.default)(t)?[]:{};e(t,(function(e,t,r){(0,a.default)(e)((function(e,n){arguments.length>2&&(n=(0,o.default)(arguments,1)),s[t]=n,r(e)}))}),(function(e){r(e,s)}))};var n=s(r(22)),i=s(r(27)),o=s(r(28)),a=s(r(13));function s(e){return e&&e.__esModule?e:{default:e}}e.exports=t.default},function(e,t,r){\"use strict\";(function(e){var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var i in t=arguments[r])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};Object.defineProperty(t,\"__esModule\",{value:!0});var i=r(14),o=r(228),a=r(247),s=r(249),f={type:\"object\",properties:{types:{type:\"object\",additionalProperties:{type:\"array\",items:{type:\"object\",properties:{name:{type:\"string\"},type:{type:\"string\"}},required:[\"name\",\"type\"]}}},primaryType:{type:\"string\"},domain:{type:\"object\"},message:{type:\"object\"}},required:[\"types\",\"primaryType\",\"domain\",\"message\"]};t.TYPED_MESSAGE_SCHEMA=f;var u={encodeData:function(t,r,n,a){var s=this;void 0===a&&(a=!0);var f=[\"bytes32\"],u=[this.hashType(t,n)];if(a)for(var c=function(t,r,f){if(void 0!==n[r])return[\"bytes32\",null==f?\"0x0000000000000000000000000000000000000000000000000000000000000000\":i.sha3(s.encodeData(r,f,n,a))];if(void 0===f)throw new Error(\"missing value for field \"+t+\" of type \"+r);if(\"bytes\"===r)return[\"bytes32\",i.sha3(f)];if(\"string\"===r)return\"string\"==typeof f&&(f=e.from(f,\"utf8\")),[\"bytes32\",i.sha3(f)];if(r.lastIndexOf(\"]\")===r.length-1){var u=r.slice(0,r.lastIndexOf(\"[\")),h=f.map((function(e){return c(t,u,e)}));return[\"bytes32\",i.sha3(o.rawEncode(h.map((function(e){return e[0]})),h.map((function(e){return e[1]}))))]}return[r,f]},h=0,d=n[t];h<d.length;h++){var l=d[h],p=c(l.name,l.type,r[l.name]),b=p[0],y=p[1];f.push(b),u.push(y)}else for(var g=0,v=n[t];g<v.length;g++){if(void 0!==(y=r[(l=v[g]).name]))if(\"bytes\"===l.type)f.push(\"bytes32\"),y=i.sha3(y),u.push(y);else if(\"string\"===l.type)f.push(\"bytes32\"),\"string\"==typeof y&&(y=e.from(y,\"utf8\")),y=i.sha3(y),u.push(y);else if(void 0!==n[l.type])f.push(\"bytes32\"),y=i.sha3(this.encodeData(l.type,y,n,a)),u.push(y);else{if(l.type.lastIndexOf(\"]\")===l.type.length-1)throw new Error(\"Arrays currently unimplemented in encodeData\");f.push(l.type),u.push(y)}}return o.rawEncode(f,u)},encodeType:function(e,t){for(var r=\"\",n=this.findTypeDependencies(e,t).filter((function(t){return t!==e})),i=0,o=n=[e].concat(n.sort());i<o.length;i++){var a=o[i];if(!t[a])throw new Error(\"No type definition specified: \"+a);r+=a+\"(\"+t[a].map((function(e){var t=e.name;return e.type+\" \"+t})).join(\",\")+\")\"}return r},findTypeDependencies:function(e,t,r){if(void 0===r&&(r=[]),e=e.match(/^\\w*/u)[0],r.includes(e)||void 0===t[e])return r;r.push(e);for(var n=0,i=t[e];n<i.length;n++)for(var o=i[n],a=0,s=this.findTypeDependencies(o.type,t,r);a<s.length;a++){var f=s[a];!r.includes(f)&&r.push(f)}return r},hashStruct:function(e,t,r,n){return void 0===n&&(n=!0),i.sha3(this.encodeData(e,t,r,n))},hashType:function(e,t){return i.sha3(this.encodeType(e,t))},sanitizeData:function(e){var t={};for(var r in f.properties)e[r]&&(t[r]=e[r]);return\"types\"in t&&(t.types=n({EIP712Domain:[]},t.types)),t},sign:function(t,r){void 0===r&&(r=!0);var n=this.sanitizeData(t),o=[e.from(\"1901\",\"hex\")];return o.push(this.hashStruct(\"EIP712Domain\",n.domain,n.types,r)),\"EIP712Domain\"!==n.primaryType&&o.push(this.hashStruct(n.primaryType,n.message,n.types,r)),i.sha3(e.concat(o))}};function c(e,t,r){var n=i.fromSigned(t),o=i.fromSigned(r),a=i.bufferToInt(e),s=E(i.toUnsigned(n).toString(\"hex\"),64),f=E(i.toUnsigned(o).toString(\"hex\"),64),u=i.stripHexPrefix(i.intToHex(a));return i.addHexPrefix(s.concat(f,u)).toString(\"hex\")}function h(e,t){var r=m(t.data),n=i.ecsign(r,e);return i.bufferToHex(c(n.v,n.r,n.s))}function d(e){var t=w(m(e.data),e.sig),r=i.publicToAddress(t);return i.bufferToHex(r)}function l(e,t,r){switch(r){case\"x25519-xsalsa20-poly1305\":if(\"string\"!=typeof t.data)throw new Error('Cannot detect secret message, message params should be of the form {data: \"secret message\"} ');var n=a.box.keyPair(),i=void 0;try{i=s.decodeBase64(e)}catch(e){throw new Error(\"Bad public key\")}var o=s.decodeUTF8(t.data),f=a.randomBytes(a.box.nonceLength),u=a.box(o,f,i,n.secretKey);return{version:\"x25519-xsalsa20-poly1305\",nonce:s.encodeBase64(f),ephemPublicKey:s.encodeBase64(n.publicKey),ciphertext:s.encodeBase64(u)};default:throw new Error(\"Encryption type/version not supported\")}}function p(e,t){switch(e.version){case\"x25519-xsalsa20-poly1305\":var r=S(t),n=a.box.keyPair.fromSecretKey(r).secretKey,i=s.decodeBase64(e.nonce),o=s.decodeBase64(e.ciphertext),f=s.decodeBase64(e.ephemPublicKey),u=a.box.open(o,i,f,n),c=void 0;try{c=s.encodeUTF8(u)}catch(e){throw new Error(\"Decryption failed.\")}if(c)return c;throw new Error(\"Decryption failed.\");default:throw new Error(\"Encryption type/version not supported.\")}}function b(e,t){var r=u.sign(t.data,!1),n=i.ecsign(r,e);return i.bufferToHex(c(n.v,n.r,n.s))}function y(e,t){var r=u.sign(t.data),n=i.ecsign(r,e);return i.bufferToHex(c(n.v,n.r,n.s))}function g(e){var t=w(u.sign(e.data,!1),e.sig),r=i.publicToAddress(t);return i.bufferToHex(r)}function v(e){var t=w(u.sign(e.data),e.sig),r=i.publicToAddress(t);return i.bufferToHex(r)}function m(e){var t=new Error(\"Expect argument to be non-empty array\");if(\"object\"!=typeof e||!(\"length\"in e)||!e.length)throw t;var r=e.map((function(e){return\"bytes\"===e.type?i.toBuffer(e.value):e.value})),n=e.map((function(e){return e.type})),a=e.map((function(e){if(!e.name)throw t;return e.type+\" \"+e.name}));return o.soliditySHA3([\"bytes32\",\"bytes32\"],[o.soliditySHA3(new Array(e.length).fill(\"string\"),a),o.soliditySHA3(n,r)])}function w(e,t){var r=i.toBuffer(t),n=i.fromRpcSig(r);return i.ecrecover(e,n.v,n.r,n.s)}function _(e){var t=i.toBuffer(e.data);return w(i.hashPersonalMessage(t),e.sig)}function E(e,t){for(var r=\"\"+e;r.length<t;)r=\"0\"+r;return r}function S(t){var r=e.from(t,\"hex\").toString(\"base64\");return s.decodeBase64(r)}t.TypedDataUtils=u,t.concatSig=c,t.normalize=function(e){if(e){if(\"number\"==typeof e){var t=i.toBuffer(e);e=i.bufferToHex(t)}if(\"string\"!=typeof e){var r=\"eth-sig-util.normalize() requires hex string or integer input.\";throw new Error(r+=\" received \"+typeof e+\": \"+e)}return i.addHexPrefix(e.toLowerCase())}},t.personalSign=function(e,t){var r=i.toBuffer(t.data),n=i.hashPersonalMessage(r),o=i.ecsign(n,e);return i.bufferToHex(c(o.v,o.r,o.s))},t.recoverPersonalSignature=function(e){var t=_(e),r=i.publicToAddress(t);return i.bufferToHex(r)},t.extractPublicKey=function(e){return\"0x\"+_(e).toString(\"hex\")},t.typedSignatureHash=function(e){var t=m(e);return i.bufferToHex(t)},t.signTypedDataLegacy=h,t.recoverTypedSignatureLegacy=d,t.encrypt=l,t.encryptSafely=function(t,r,n){var i=Math.pow(2,11),o=r.data;if(!o)throw new Error(\"Cannot encrypt empty msg.data\");if(\"object\"==typeof o&&\"toJSON\"in o)throw new Error(\"Cannot encrypt with toJSON property.  Please remove toJSON property\");var a={data:o,padding:\"\"},s=e.byteLength(JSON.stringify(a),\"utf-8\")%i,f=0;return s>0&&(f=i-s-16),a.padding=\"0\".repeat(f),l(t,{data:JSON.stringify(a)},n)},t.decrypt=p,t.decryptSafely=function(e,t){return JSON.parse(p(e,t)).data},t.getEncryptionPublicKey=function(e){var t=S(e),r=a.box.keyPair.fromSecretKey(t).publicKey;return s.encodeBase64(r)},t.signTypedMessage=function(e,t,r){switch(void 0===r&&(r=\"V4\"),r){case\"V1\":return h(e,t);case\"V3\":return b(e,t);case\"V4\":default:return y(e,t)}},t.recoverTypedMessage=function(e,t){switch(void 0===t&&(t=\"V4\"),t){case\"V1\":return d(e);case\"V3\":return g(e);case\"V4\":default:return v(e)}},t.signTypedData=b,t.signTypedData_v4=y,t.recoverTypedSignature=g,t.recoverTypedSignature_v4=v}).call(this,r(1).Buffer)},function(e,t,r){e.exports=r(229)},function(e,t,r){(function(t){const n=r(230),i=r(4);var o=function(){};function a(e){return e.startsWith(\"int[\")?\"int256\"+e.slice(3):\"int\"===e?\"int256\":e.startsWith(\"uint[\")?\"uint256\"+e.slice(4):\"uint\"===e?\"uint256\":e.startsWith(\"fixed[\")?\"fixed128x128\"+e.slice(5):\"fixed\"===e?\"fixed128x128\":e.startsWith(\"ufixed[\")?\"ufixed128x128\"+e.slice(6):\"ufixed\"===e?\"ufixed128x128\":e}function s(e){return parseInt(/^\\D+(\\d+)$/.exec(e)[1],10)}function f(e){var t=/^\\D+(\\d+)x(\\d+)$/.exec(e);return[parseInt(t[1],10),parseInt(t[2],10)]}function u(e){var t=e.match(/(.*)\\[(.*?)\\]$/);return t?\"\"===t[2]?\"dynamic\":parseInt(t[2],10):null}function c(e){var t=typeof e;if(\"string\"===t)return n.isHexPrefixed(e)?new i(n.stripHexPrefix(e),16):new i(e,10);if(\"number\"===t)return new i(e);if(e.toArray)return e;throw new Error(\"Argument is not a number\")}function h(e){var t=/^(\\w+)\\((.+)\\)$/.exec(e);if(3!==t.length)throw new Error(\"Invalid method signature\");var r=/^(.+)\\):\\((.+)$/.exec(t[2]);return null!==r&&3===r.length?{method:t[1],args:r[1].split(\",\"),retargs:r[2].split(\",\")}:{method:t[1],args:t[2].split(\",\")}}function d(e,r){var o,a,h,l;if(\"address\"===e)return d(\"uint160\",c(r));if(\"bool\"===e)return d(\"uint8\",r?1:0);if(\"string\"===e)return d(\"bytes\",new t(r,\"utf8\"));if(y(e)){if(void 0===r.length)throw new Error(\"Not an array?\");if(\"dynamic\"!==(o=u(e))&&0!==o&&r.length>o)throw new Error(\"Elements exceed array size: \"+o);for(l in h=[],e=e.slice(0,e.lastIndexOf(\"[\")),\"string\"==typeof r&&(r=JSON.parse(r)),r)h.push(d(e,r[l]));if(\"dynamic\"===o){var p=d(\"uint256\",r.length);h.unshift(p)}return t.concat(h)}if(\"bytes\"===e)return r=new t(r),h=t.concat([d(\"uint256\",r.length),r]),r.length%32!=0&&(h=t.concat([h,n.zeros(32-r.length%32)])),h;if(e.startsWith(\"bytes\")){if((o=s(e))<1||o>32)throw new Error(\"Invalid bytes<N> width: \"+o);return n.setLengthRight(r,32)}if(e.startsWith(\"uint\")){if((o=s(e))%8||o<8||o>256)throw new Error(\"Invalid uint<N> width: \"+o);if((a=c(r)).bitLength()>o)throw new Error(\"Supplied uint exceeds width: \"+o+\" vs \"+a.bitLength());if(a<0)throw new Error(\"Supplied uint is negative\");return a.toArrayLike(t,\"be\",32)}if(e.startsWith(\"int\")){if((o=s(e))%8||o<8||o>256)throw new Error(\"Invalid int<N> width: \"+o);if((a=c(r)).bitLength()>o)throw new Error(\"Supplied int exceeds width: \"+o+\" vs \"+a.bitLength());return a.toTwos(256).toArrayLike(t,\"be\",32)}if(e.startsWith(\"ufixed\")){if(o=f(e),(a=c(r))<0)throw new Error(\"Supplied ufixed is negative\");return d(\"uint256\",a.mul(new i(2).pow(new i(o[1]))))}if(e.startsWith(\"fixed\"))return o=f(e),d(\"int256\",c(r).mul(new i(2).pow(new i(o[1]))));throw new Error(\"Unsupported or invalid type: \"+e)}function l(e,r,n){var o,a,s,f;if(\"string\"==typeof e&&(e=p(e)),\"address\"===e.name)return l(e.rawType,r,n).toArrayLike(t,\"be\",20).toString(\"hex\");if(\"bool\"===e.name)return l(e.rawType,r,n).toString()===new i(1).toString();if(\"string\"===e.name){var u=l(e.rawType,r,n);return new t(u,\"utf8\").toString()}if(e.isArray){for(s=[],o=e.size,\"dynamic\"===e.size&&(n=l(\"uint256\",r,n).toNumber(),o=l(\"uint256\",r,n).toNumber(),n+=32),f=0;f<o;f++){var c=l(e.subArray,r,n);s.push(c),n+=e.subArray.memoryUsage}return s}if(\"bytes\"===e.name)return n=l(\"uint256\",r,n).toNumber(),o=l(\"uint256\",r,n).toNumber(),r.slice(n+32,n+32+o);if(e.name.startsWith(\"bytes\"))return r.slice(n,n+e.size);if(e.name.startsWith(\"uint\")){if((a=new i(r.slice(n,n+32),16,\"be\")).bitLength()>e.size)throw new Error(\"Decoded int exceeds width: \"+e.size+\" vs \"+a.bitLength());return a}if(e.name.startsWith(\"int\")){if((a=new i(r.slice(n,n+32),16,\"be\").fromTwos(256)).bitLength()>e.size)throw new Error(\"Decoded uint exceeds width: \"+e.size+\" vs \"+a.bitLength());return a}if(e.name.startsWith(\"ufixed\")){if(o=new i(2).pow(new i(e.size[1])),!(a=l(\"uint256\",r,n)).mod(o).isZero())throw new Error(\"Decimals not supported yet\");return a.div(o)}if(e.name.startsWith(\"fixed\")){if(o=new i(2).pow(new i(e.size[1])),!(a=l(\"int256\",r,n)).mod(o).isZero())throw new Error(\"Decimals not supported yet\");return a.div(o)}throw new Error(\"Unsupported or invalid type: \"+e.name)}function p(e){var t,r,n;if(y(e)){t=u(e);var i=e.slice(0,e.lastIndexOf(\"[\"));return i=p(i),r={isArray:!0,name:e,size:t,memoryUsage:\"dynamic\"===t?32:i.memoryUsage*t,subArray:i}}switch(e){case\"address\":n=\"uint160\";break;case\"bool\":n=\"uint8\";break;case\"string\":n=\"bytes\"}if(r={rawType:n,name:e,memoryUsage:32},e.startsWith(\"bytes\")&&\"bytes\"!==e||e.startsWith(\"uint\")||e.startsWith(\"int\")?r.size=s(e):(e.startsWith(\"ufixed\")||e.startsWith(\"fixed\"))&&(r.size=f(e)),e.startsWith(\"bytes\")&&\"bytes\"!==e&&(r.size<1||r.size>32))throw new Error(\"Invalid bytes<N> width: \"+r.size);if((e.startsWith(\"uint\")||e.startsWith(\"int\"))&&(r.size%8||r.size<8||r.size>256))throw new Error(\"Invalid int/uint<N> width: \"+r.size);return r}function b(e){return\"string\"===e||\"bytes\"===e||\"dynamic\"===u(e)}function y(e){return e.lastIndexOf(\"]\")===e.length-1}function g(e,t){return e.startsWith(\"address\")||e.startsWith(\"bytes\")?\"0x\"+t.toString(\"hex\"):t.toString()}o.eventID=function(e,r){var i=e+\"(\"+r.map(a).join(\",\")+\")\";return n.sha3(new t(i))},o.methodID=function(e,t){return o.eventID(e,t).slice(0,4)},o.rawEncode=function(e,r){var n=[],i=[],o=32*e.length;for(var s in e){var f=a(e[s]),u=d(f,r[s]);b(f)?(n.push(d(\"uint256\",o)),i.push(u),o+=u.length):n.push(u)}return t.concat(n.concat(i))},o.rawDecode=function(e,r){var n=[];r=new t(r);var i=0;for(var o in e){var s=p(a(e[o])),f=l(s,r,i);i+=s.memoryUsage,n.push(f)}return n},o.simpleEncode=function(e){var r=Array.prototype.slice.call(arguments).slice(1),n=h(e);if(r.length!==n.args.length)throw new Error(\"Argument count mismatch\");return t.concat([o.methodID(n.method,n.args),o.rawEncode(n.args,r)])},o.simpleDecode=function(e,t){var r=h(e);if(!r.retargs)throw new Error(\"No return values in method\");return o.rawDecode(r.retargs,t)},o.stringify=function(e,t){var r=[];for(var n in e){var i=e[n],o=t[n];o=/^[^\\[]+\\[.*\\]$/.test(i)?o.map((function(e){return g(i,e)})).join(\", \"):g(i,o),r.push(o)}return r},o.solidityPack=function(e,r){if(e.length!==r.length)throw new Error(\"Number of types are not matching the values\");for(var i,o,f=[],u=0;u<e.length;u++){var h=a(e[u]),d=r[u];if(\"bytes\"===h)f.push(d);else if(\"string\"===h)f.push(new t(d,\"utf8\"));else if(\"bool\"===h)f.push(new t(d?\"01\":\"00\",\"hex\"));else if(\"address\"===h)f.push(n.setLengthLeft(d,20));else if(h.startsWith(\"bytes\")){if((i=s(h))<1||i>32)throw new Error(\"Invalid bytes<N> width: \"+i);f.push(n.setLengthRight(d,i))}else if(h.startsWith(\"uint\")){if((i=s(h))%8||i<8||i>256)throw new Error(\"Invalid uint<N> width: \"+i);if((o=c(d)).bitLength()>i)throw new Error(\"Supplied uint exceeds width: \"+i+\" vs \"+o.bitLength());f.push(o.toArrayLike(t,\"be\",i/8))}else{if(!h.startsWith(\"int\"))throw new Error(\"Unsupported or invalid type: \"+h);if((i=s(h))%8||i<8||i>256)throw new Error(\"Invalid int<N> width: \"+i);if((o=c(d)).bitLength()>i)throw new Error(\"Supplied int exceeds width: \"+i+\" vs \"+o.bitLength());f.push(o.toTwos(i).toArrayLike(t,\"be\",i/8))}}return t.concat(f)},o.soliditySHA3=function(e,t){return n.sha3(o.solidityPack(e,t))},o.soliditySHA256=function(e,t){return n.sha256(o.solidityPack(e,t))},o.solidityRIPEMD160=function(e,t){return n.ripemd160(o.solidityPack(e,t),!0)},o.fromSerpent=function(e){for(var t,r=[],n=0;n<e.length;n++){var i=e[n];if(\"s\"===i)r.push(\"bytes\");else if(\"b\"===i){for(var o=\"bytes\",a=n+1;a<e.length&&((t=e[a])>=\"0\"&&t<=\"9\");)o+=e[a]-\"0\",a++;n=a-1,r.push(o)}else if(\"i\"===i)r.push(\"int256\");else{if(\"a\"!==i)throw new Error(\"Unsupported or invalid type: \"+i);r.push(\"int256[]\")}}return r},o.toSerpent=function(e){for(var t=[],r=0;r<e.length;r++){var n=e[r];if(\"bytes\"===n)t.push(\"s\");else if(n.startsWith(\"bytes\"))t.push(\"b\"+s(n));else if(\"int256\"===n)t.push(\"i\");else{if(\"int256[]\"!==n)throw new Error(\"Unsupported or invalid type: \"+n);t.push(\"a\")}}return t.join(\"\")},e.exports=o}).call(this,r(1).Buffer)},function(e,t,r){\"use strict\";(function(e){var n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i=r(231),o=i.keccak224,a=i.keccak384,s=i.keccak256,f=i.keccak512,u=r(239),c=r(78),h=r(79),d=r(4),l=r(34);t.MAX_INTEGER=new d(\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\",16),t.TWO_POW256=new d(\"10000000000000000000000000000000000000000000000000000000000000000\",16),t.SHA3_NULL_S=\"c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\",t.SHA3_NULL=new e(t.SHA3_NULL_S,\"hex\"),t.SHA3_RLP_ARRAY_S=\"1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347\",t.SHA3_RLP_ARRAY=new e(t.SHA3_RLP_ARRAY_S,\"hex\"),t.SHA3_RLP_S=\"56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421\",t.SHA3_RLP=new e(t.SHA3_RLP_S,\"hex\"),t.BN=d,t.rlp=h,t.secp256k1=u,t.zeros=function(t){var r=new e(t);return r.fill(0),r},t.setLengthLeft=t.setLength=function(e,r,n){var i=t.zeros(r);return e=t.toBuffer(e),n?e.length<r?(e.copy(i),i):e.slice(0,r):e.length<r?(e.copy(i,r-e.length),i):e.slice(-r)},t.setLengthRight=function(e,r){return t.setLength(e,r,!0)},t.unpad=t.stripZeros=function(e){for(var r=(e=t.stripHexPrefix(e))[0];e.length>0&&\"0\"===r.toString();)r=(e=e.slice(1))[0];return e},t.toBuffer=function(r){if(!e.isBuffer(r))if(Array.isArray(r))r=new e(r);else if(\"string\"==typeof r)r=t.isHexPrefixed(r)?new e(t.padToEven(t.stripHexPrefix(r)),\"hex\"):new e(r);else if(\"number\"==typeof r)r=t.intToBuffer(r);else if(null==r)r=new e([]);else{if(!r.toArray)throw new Error(\"invalid type\");r=new e(r.toArray())}return r},t.intToHex=function(e){c(e%1==0,\"number is not a integer\"),c(e>=0,\"number must be positive\");var t=e.toString(16);return t.length%2&&(t=\"0\"+t),\"0x\"+t},t.intToBuffer=function(r){var n=t.intToHex(r);return new e(n.slice(2),\"hex\")},t.bufferToInt=function(e){return parseInt(t.bufferToHex(e),16)},t.bufferToHex=function(e){return 0===(e=t.toBuffer(e)).length?0:\"0x\"+e.toString(\"hex\")},t.fromSigned=function(e){return new d(e).fromTwos(256)},t.toUnsigned=function(t){return new e(t.toTwos(256).toArray())},t.sha3=function(e,r){switch(e=t.toBuffer(e),r||(r=256),r){case 224:return o(e);case 256:return s(e);case 384:return a(e);case 512:return f(e);default:throw new Error(\"Invalid algorithm: keccak\"+r)}},t.sha256=function(e){return e=t.toBuffer(e),l(\"sha256\").update(e).digest()},t.ripemd160=function(e,r){e=t.toBuffer(e);var n=l(\"rmd160\").update(e).digest();return!0===r?t.setLength(n,32):n},t.rlphash=function(e){return t.sha3(h.encode(e))},t.isValidPrivate=function(e){return u.privateKeyVerify(e)},t.isValidPublic=function(t,r){return 64===t.length?u.publicKeyVerify(e.concat([new e([4]),t])):!!r&&u.publicKeyVerify(t)},t.pubToAddress=t.publicToAddress=function(e,r){return e=t.toBuffer(e),r&&64!==e.length&&(e=u.publicKeyConvert(e,!1).slice(1)),c(64===e.length),t.sha3(e).slice(-20)};var p=t.privateToPublic=function(e){return e=t.toBuffer(e),u.publicKeyCreate(e,!1).slice(1)};t.importPublic=function(e){return 64!==(e=t.toBuffer(e)).length&&(e=u.publicKeyConvert(e,!1).slice(1)),e},t.ecsign=function(e,t){var r=u.sign(e,t),n={};return n.r=r.signature.slice(0,32),n.s=r.signature.slice(32,64),n.v=r.recovery+27,n},t.ecrecover=function(r,n,i,o){var a=e.concat([t.setLength(i,32),t.setLength(o,32)],64),s=t.bufferToInt(n)-27;if(0!==s&&1!==s)throw new Error(\"Invalid signature v value\");var f=u.recover(r,a,s);return u.publicKeyConvert(f,!1).slice(1)},t.toRpcSig=function(r,n,i){return t.bufferToHex(e.concat([n,i,t.toBuffer(r-27)]))},t.fromRpcSig=function(e){var r=(e=t.toBuffer(e))[64];return r<27&&(r+=27),{v:r,r:e.slice(0,32),s:e.slice(32,64)}},t.privateToAddress=function(e){return t.publicToAddress(p(e))},t.isValidAddress=function(e){return/^0x[0-9a-fA-F]{40}$/i.test(e)},t.toChecksumAddress=function(e){e=t.stripHexPrefix(e).toLowerCase();for(var r=t.sha3(e).toString(\"hex\"),n=\"0x\",i=0;i<e.length;i++)parseInt(r[i],16)>=8?n+=e[i].toUpperCase():n+=e[i];return n},t.isValidChecksumAddress=function(e){return t.isValidAddress(e)&&t.toChecksumAddress(e)===e},t.generateAddress=function(r,n){return r=t.toBuffer(r),n=(n=new d(n)).isZero()?null:new e(n.toArray()),t.rlphash([r,n]).slice(-20)},t.isPrecompiled=function(e){var r=t.unpad(e);return 1===r.length&&r[0]>0&&r[0]<5},t.isHexPrefixed=function(e){return\"0x\"===e.slice(0,2)},t.stripHexPrefix=function(e){return\"string\"!=typeof e?e:t.isHexPrefixed(e)?e.slice(2):e},t.addHexPrefix=function(e){return\"string\"!=typeof e||t.isHexPrefixed(e)?e:\"0x\"+e},t.padToEven=function(e){return e.length%2&&(e=\"0\"+e),e},t.baToJSON=function(r){if(e.isBuffer(r))return\"0x\"+r.toString(\"hex\");if(r instanceof Array){for(var n=[],i=0;i<r.length;i++)n.push(t.baToJSON(r[i]));return n}},t.defineProperties=function(r,i,o){if(r.raw=[],r._fields=[],r.toJSON=function(e){if(e){var n={};return r._fields.forEach((function(e){n[e]=\"0x\"+r[e].toString(\"hex\")})),n}return t.baToJSON(this.raw)},r.serialize=function(){return h.encode(r.raw)},i.forEach((function(n,i){function o(){return r.raw[i]}function a(o){\"00\"!==(o=t.toBuffer(o)).toString(\"hex\")||n.allowZero||(o=new e([])),n.allowLess&&n.length?(o=t.stripZeros(o),c(n.length>=o.length,\"The field \"+n.name+\" must not have more \"+n.length+\" bytes\")):n.allowZero&&0===o.length||!n.length||c(n.length===o.length,\"The field \"+n.name+\" must have byte length of \"+n.length),r.raw[i]=o}r._fields.push(n.name),Object.defineProperty(r,n.name,{enumerable:!0,configurable:!0,get:o,set:a}),n.default&&(r[n.name]=n.default),n.alias&&Object.defineProperty(r,n.alias,{enumerable:!1,configurable:!0,set:a,get:o})})),o)if(\"string\"==typeof o&&(o=new e(t.stripHexPrefix(o),\"hex\")),e.isBuffer(o)&&(o=h.decode(o)),Array.isArray(o)){if(o.length>r._fields.length)throw new Error(\"wrong number of fields in data\");o.forEach((function(e,n){r[r._fields[n]]=t.toBuffer(e)}))}else{if(\"object\"!==(void 0===o?\"undefined\":n(o)))throw new Error(\"invalid data\");for(var a in o)-1!==r._fields.indexOf(a)&&(r[a]=o[a])}}}).call(this,r(1).Buffer)},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=r(232),i=r(233);t.keccak224=n.createHashFunction((function(){return i(\"keccak224\")})),t.keccak256=n.createHashFunction((function(){return i(\"keccak256\")})),t.keccak384=n.createHashFunction((function(){return i(\"keccak384\")})),t.keccak512=n.createHashFunction((function(){return i(\"keccak512\")}))},function(e,t,r){\"use strict\";(function(e){Object.defineProperty(t,\"__esModule\",{value:!0}),t.createHashFunction=function(t){return function(r){var n=t();return n.update(r),e.from(n.digest())}}}).call(this,r(1).Buffer)},function(e,t,r){e.exports=r(234)(r(237))},function(e,t,r){const n=r(235),i=r(236);e.exports=function(e){const t=n(e),r=i(e);return function(e,n){switch(\"string\"==typeof e?e.toLowerCase():e){case\"keccak224\":return new t(1152,448,null,224,n);case\"keccak256\":return new t(1088,512,null,256,n);case\"keccak384\":return new t(832,768,null,384,n);case\"keccak512\":return new t(576,1024,null,512,n);case\"sha3-224\":return new t(1152,448,6,224,n);case\"sha3-256\":return new t(1088,512,6,256,n);case\"sha3-384\":return new t(832,768,6,384,n);case\"sha3-512\":return new t(576,1024,6,512,n);case\"shake128\":return new r(1344,256,31,n);case\"shake256\":return new r(1088,512,31,n);default:throw new Error(\"Invald algorithm: \"+e)}}}},function(e,t,r){(function(t){const{Transform:n}=r(18);e.exports=e=>class r extends n{constructor(t,r,n,i,o){super(o),this._rate=t,this._capacity=r,this._delimitedSuffix=n,this._hashBitLength=i,this._options=o,this._state=new e,this._state.initialize(t,r),this._finalized=!1}_transform(e,t,r){let n=null;try{this.update(e,t)}catch(e){n=e}r(n)}_flush(e){let t=null;try{this.push(this.digest())}catch(e){t=e}e(t)}update(e,r){if(!t.isBuffer(e)&&\"string\"!=typeof e)throw new TypeError(\"Data must be a string or a buffer\");if(this._finalized)throw new Error(\"Digest already called\");return t.isBuffer(e)||(e=t.from(e,r)),this._state.absorb(e),this}digest(e){if(this._finalized)throw new Error(\"Digest already called\");this._finalized=!0,this._delimitedSuffix&&this._state.absorbLastFewBits(this._delimitedSuffix);let t=this._state.squeeze(this._hashBitLength/8);return void 0!==e&&(t=t.toString(e)),this._resetState(),t}_resetState(){return this._state.initialize(this._rate,this._capacity),this}_clone(){const e=new r(this._rate,this._capacity,this._delimitedSuffix,this._hashBitLength,this._options);return this._state.copy(e._state),e._finalized=this._finalized,e}}}).call(this,r(1).Buffer)},function(e,t,r){(function(t){const{Transform:n}=r(18);e.exports=e=>class r extends n{constructor(t,r,n,i){super(i),this._rate=t,this._capacity=r,this._delimitedSuffix=n,this._options=i,this._state=new e,this._state.initialize(t,r),this._finalized=!1}_transform(e,t,r){let n=null;try{this.update(e,t)}catch(e){n=e}r(n)}_flush(){}_read(e){this.push(this.squeeze(e))}update(e,r){if(!t.isBuffer(e)&&\"string\"!=typeof e)throw new TypeError(\"Data must be a string or a buffer\");if(this._finalized)throw new Error(\"Squeeze already called\");return t.isBuffer(e)||(e=t.from(e,r)),this._state.absorb(e),this}squeeze(e,t){this._finalized||(this._finalized=!0,this._state.absorbLastFewBits(this._delimitedSuffix));let r=this._state.squeeze(e);return void 0!==t&&(r=r.toString(t)),r}_resetState(){return this._state.initialize(this._rate,this._capacity),this}_clone(){const e=new r(this._rate,this._capacity,this._delimitedSuffix,this._options);return this._state.copy(e._state),e._finalized=this._finalized,e}}}).call(this,r(1).Buffer)},function(e,t,r){(function(t){const n=r(238);function i(){this.state=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.blockSize=null,this.count=0,this.squeezing=!1}i.prototype.initialize=function(e,t){for(let e=0;e<50;++e)this.state[e]=0;this.blockSize=e/8,this.count=0,this.squeezing=!1},i.prototype.absorb=function(e){for(let t=0;t<e.length;++t)this.state[~~(this.count/4)]^=e[t]<<this.count%4*8,this.count+=1,this.count===this.blockSize&&(n.p1600(this.state),this.count=0)},i.prototype.absorbLastFewBits=function(e){this.state[~~(this.count/4)]^=e<<this.count%4*8,0!=(128&e)&&this.count===this.blockSize-1&&n.p1600(this.state),this.state[~~((this.blockSize-1)/4)]^=128<<(this.blockSize-1)%4*8,n.p1600(this.state),this.count=0,this.squeezing=!0},i.prototype.squeeze=function(e){this.squeezing||this.absorbLastFewBits(1);const r=t.alloc(e);for(let t=0;t<e;++t)r[t]=this.state[~~(this.count/4)]>>>this.count%4*8&255,this.count+=1,this.count===this.blockSize&&(n.p1600(this.state),this.count=0);return r},i.prototype.copy=function(e){for(let t=0;t<50;++t)e.state[t]=this.state[t];e.blockSize=this.blockSize,e.count=this.count,e.squeezing=this.squeezing},e.exports=i}).call(this,r(1).Buffer)},function(e,t){const r=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648];t.p1600=function(e){for(let t=0;t<24;++t){const n=e[0]^e[10]^e[20]^e[30]^e[40],i=e[1]^e[11]^e[21]^e[31]^e[41],o=e[2]^e[12]^e[22]^e[32]^e[42],a=e[3]^e[13]^e[23]^e[33]^e[43],s=e[4]^e[14]^e[24]^e[34]^e[44],f=e[5]^e[15]^e[25]^e[35]^e[45],u=e[6]^e[16]^e[26]^e[36]^e[46],c=e[7]^e[17]^e[27]^e[37]^e[47],h=e[8]^e[18]^e[28]^e[38]^e[48],d=e[9]^e[19]^e[29]^e[39]^e[49];let l=h^(o<<1|a>>>31),p=d^(a<<1|o>>>31);const b=e[0]^l,y=e[1]^p,g=e[10]^l,v=e[11]^p,m=e[20]^l,w=e[21]^p,_=e[30]^l,E=e[31]^p,S=e[40]^l,A=e[41]^p;l=n^(s<<1|f>>>31),p=i^(f<<1|s>>>31);const x=e[2]^l,k=e[3]^p,M=e[12]^l,T=e[13]^p,I=e[22]^l,R=e[23]^p,P=e[32]^l,L=e[33]^p,B=e[42]^l,C=e[43]^p;l=o^(u<<1|c>>>31),p=a^(c<<1|u>>>31);const O=e[4]^l,N=e[5]^p,j=e[14]^l,D=e[15]^p,U=e[24]^l,z=e[25]^p,q=e[34]^l,F=e[35]^p,K=e[44]^l,H=e[45]^p;l=s^(h<<1|d>>>31),p=f^(d<<1|h>>>31);const V=e[6]^l,Y=e[7]^p,W=e[16]^l,G=e[17]^p,Z=e[26]^l,J=e[27]^p,$=e[36]^l,X=e[37]^p,Q=e[46]^l,ee=e[47]^p;l=u^(n<<1|i>>>31),p=c^(i<<1|n>>>31);const te=e[8]^l,re=e[9]^p,ne=e[18]^l,ie=e[19]^p,oe=e[28]^l,ae=e[29]^p,se=e[38]^l,fe=e[39]^p,ue=e[48]^l,ce=e[49]^p,he=b,de=y,le=v<<4|g>>>28,pe=g<<4|v>>>28,be=m<<3|w>>>29,ye=w<<3|m>>>29,ge=E<<9|_>>>23,ve=_<<9|E>>>23,me=S<<18|A>>>14,we=A<<18|S>>>14,_e=x<<1|k>>>31,Ee=k<<1|x>>>31,Se=T<<12|M>>>20,Ae=M<<12|T>>>20,xe=I<<10|R>>>22,ke=R<<10|I>>>22,Me=L<<13|P>>>19,Te=P<<13|L>>>19,Ie=B<<2|C>>>30,Re=C<<2|B>>>30,Pe=N<<30|O>>>2,Le=O<<30|N>>>2,Be=j<<6|D>>>26,Ce=D<<6|j>>>26,Oe=z<<11|U>>>21,Ne=U<<11|z>>>21,je=q<<15|F>>>17,De=F<<15|q>>>17,Ue=H<<29|K>>>3,ze=K<<29|H>>>3,qe=V<<28|Y>>>4,Fe=Y<<28|V>>>4,Ke=G<<23|W>>>9,He=W<<23|G>>>9,Ve=Z<<25|J>>>7,Ye=J<<25|Z>>>7,We=$<<21|X>>>11,Ge=X<<21|$>>>11,Ze=ee<<24|Q>>>8,Je=Q<<24|ee>>>8,$e=te<<27|re>>>5,Xe=re<<27|te>>>5,Qe=ne<<20|ie>>>12,et=ie<<20|ne>>>12,tt=ae<<7|oe>>>25,rt=oe<<7|ae>>>25,nt=se<<8|fe>>>24,it=fe<<8|se>>>24,ot=ue<<14|ce>>>18,at=ce<<14|ue>>>18;e[0]=he^~Se&Oe,e[1]=de^~Ae&Ne,e[10]=qe^~Qe&be,e[11]=Fe^~et&ye,e[20]=_e^~Be&Ve,e[21]=Ee^~Ce&Ye,e[30]=$e^~le&xe,e[31]=Xe^~pe&ke,e[40]=Pe^~Ke&tt,e[41]=Le^~He&rt,e[2]=Se^~Oe&We,e[3]=Ae^~Ne&Ge,e[12]=Qe^~be&Me,e[13]=et^~ye&Te,e[22]=Be^~Ve&nt,e[23]=Ce^~Ye&it,e[32]=le^~xe&je,e[33]=pe^~ke&De,e[42]=Ke^~tt&ge,e[43]=He^~rt&ve,e[4]=Oe^~We&ot,e[5]=Ne^~Ge&at,e[14]=be^~Me&Ue,e[15]=ye^~Te&ze,e[24]=Ve^~nt&me,e[25]=Ye^~it&we,e[34]=xe^~je&Ze,e[35]=ke^~De&Je,e[44]=tt^~ge&Ie,e[45]=rt^~ve&Re,e[6]=We^~ot&he,e[7]=Ge^~at&de,e[16]=Me^~Ue&qe,e[17]=Te^~ze&Fe,e[26]=nt^~me&_e,e[27]=it^~we&Ee,e[36]=je^~Ze&$e,e[37]=De^~Je&Xe,e[46]=ge^~Ie&Pe,e[47]=ve^~Re&Le,e[8]=ot^~he&Se,e[9]=at^~de&Ae,e[18]=Ue^~qe&Qe,e[19]=ze^~Fe&et,e[28]=me^~_e&Be,e[29]=we^~Ee&Ce,e[38]=Ze^~$e&le,e[39]=Je^~Xe&pe,e[48]=Ie^~Pe&Ke,e[49]=Re^~Le&He,e[0]^=r[2*t],e[1]^=r[2*t+1]}}},function(e,t,r){\"use strict\";(function(t){var n=r(240),i=r(245),o=r(246),a=function(e){return 32===e.length&&n.privateKeyVerify(Uint8Array.from(e))};e.exports={privateKeyVerify:a,privateKeyExport:function(e,t){if(32!==e.length)throw new RangeError(\"private key length is invalid\");var r=i.privateKeyExport(e,t);return o.privateKeyExport(e,r,t)},privateKeyImport:function(e){if(null!==(e=o.privateKeyImport(e))&&32===e.length&&a(e))return e;throw new Error(\"couldn't import from DER format\")},privateKeyNegate:function(e){return t.from(n.privateKeyNegate(Uint8Array.from(e)))},privateKeyModInverse:function(e){if(32!==e.length)throw new Error(\"private key length is invalid\");return t.from(i.privateKeyModInverse(Uint8Array.from(e)))},privateKeyTweakAdd:function(e,r){return t.from(n.privateKeyTweakAdd(Uint8Array.from(e),r))},privateKeyTweakMul:function(e,r){return t.from(n.privateKeyTweakMul(Uint8Array.from(e),Uint8Array.from(r)))},publicKeyCreate:function(e,r){return t.from(n.publicKeyCreate(Uint8Array.from(e),r))},publicKeyConvert:function(e,r){return t.from(n.publicKeyConvert(Uint8Array.from(e),r))},publicKeyVerify:function(e){return(33===e.length||65===e.length)&&n.publicKeyVerify(Uint8Array.from(e))},publicKeyTweakAdd:function(e,r,i){return t.from(n.publicKeyTweakAdd(Uint8Array.from(e),Uint8Array.from(r),i))},publicKeyTweakMul:function(e,r,i){return t.from(n.publicKeyTweakMul(Uint8Array.from(e),Uint8Array.from(r),i))},publicKeyCombine:function(e,r){var i=[];return e.forEach((function(e){i.push(Uint8Array.from(e))})),t.from(n.publicKeyCombine(i,r))},signatureNormalize:function(e){return t.from(n.signatureNormalize(Uint8Array.from(e)))},signatureExport:function(e){return t.from(n.signatureExport(Uint8Array.from(e)))},signatureImport:function(e){return t.from(n.signatureImport(Uint8Array.from(e)))},signatureImportLax:function(e){if(0===e.length)throw new RangeError(\"signature length is invalid\");var t=o.signatureImportLax(e);if(null===t)throw new Error(\"couldn't parse DER signature\");return i.signatureImport(t)},sign:function(e,r,i){if(null===i)throw new TypeError(\"options should be an Object\");var o=void 0;if(i){if(o={},null===i.data)throw new TypeError(\"options.data should be a Buffer\");if(i.data){if(32!==i.data.length)throw new RangeError(\"options.data length is invalid\");o.data=new Uint8Array(i.data)}if(null===i.noncefn)throw new TypeError(\"options.noncefn should be a Function\");i.noncefn&&(o.noncefn=function(e,r,n,o,a){var s=null!=n?t.from(n):null,f=null!=o?t.from(o):null,u=t.from(\"\");return i.noncefn&&(u=i.noncefn(t.from(e),t.from(r),s,f,a)),Uint8Array.from(u)})}var a=n.ecdsaSign(Uint8Array.from(e),Uint8Array.from(r),o);return{signature:t.from(a.signature),recovery:a.recid}},verify:function(e,t,r){return n.ecdsaVerify(Uint8Array.from(t),Uint8Array.from(e),r)},recover:function(e,r,i,o){return t.from(n.ecdsaRecover(Uint8Array.from(r),i,Uint8Array.from(e),o))},ecdh:function(e,r){return t.from(n.ecdh(Uint8Array.from(e),Uint8Array.from(r),{}))},ecdhUnsafe:function(e,r,n){if(33!==e.length&&65!==e.length)throw new RangeError(\"public key length is invalid\");if(32!==r.length)throw new RangeError(\"private key length is invalid\");return t.from(i.ecdhUnsafe(Uint8Array.from(e),Uint8Array.from(r),n))}}}).call(this,r(1).Buffer)},function(e,t,r){\"use strict\";var n=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{f(n.next(e))}catch(e){o(e)}}function s(e){try{f(n.throw(e))}catch(e){o(e)}}function f(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,s)}f((n=n.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},\"function\"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(r)throw new TypeError(\"Generator is already executing.\");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}};Object.defineProperty(t,\"__esModule\",{value:!0});var o=r(96),a=r(243);t.createPrivateKey=function(){return n(this,void 0,void 0,(function(){var e;return i(this,(function(t){switch(t.label){case 0:return[4,a.getRandomBytes(32)];case 1:return e=t.sent(),o.privateKeyVerify(e)?[2,e]:[3,0];case 2:return[2]}}))}))},t.createPrivateKeySync=function(){for(;;){var e=a.getRandomBytesSync(32);if(o.privateKeyVerify(e))return e}},function(e){for(var r in e)t.hasOwnProperty(r)||(t[r]=e[r])}(r(96))},function(e,t){const r=\"Impossible case. Please create issue.\",n=\"The tweak was out of range or the resulted private key is invalid\",i=\"The tweak was out of range or equal to zero\",o=\"Unknow error on context randomization\",a=\"Private Key is invalid\",s=\"Public Key could not be parsed\",f=\"Public Key serialization error\",u=\"The sum of the public keys is not valid\",c=\"Signature could not be parsed\",h=\"The nonce generation function failed, or the private key was invalid\",d=\"Public key could not be recover\",l=\"Scalar was invalid (zero or overflow)\";function p(e,t){if(!e)throw new Error(t)}function b(e,t,r){if(p(t instanceof Uint8Array,`Expected ${e} to be an Uint8Array`),void 0!==r)if(Array.isArray(r)){const n=`Expected ${e} to be an Uint8Array with length [${r.join(\", \")}]`;p(r.includes(t.length),n)}else{const n=`Expected ${e} to be an Uint8Array with length ${r}`;p(t.length===r,n)}}function y(e){p(\"Boolean\"===v(e),\"Expected compressed to be a Boolean\")}function g(e=(e=>new Uint8Array(e)),t){return\"function\"==typeof e&&(e=e(t)),b(\"output\",e,t),e}function v(e){return Object.prototype.toString.call(e).slice(8,-1)}e.exports=e=>({contextRandomize(t){switch(p(null===t||t instanceof Uint8Array,\"Expected seed to be an Uint8Array or null\"),null!==t&&b(\"seed\",t,32),e.contextRandomize(t)){case 1:throw new Error(o)}},privateKeyVerify:t=>(b(\"private key\",t,32),0===e.privateKeyVerify(t)),privateKeyNegate(t){switch(b(\"private key\",t,32),e.privateKeyNegate(t)){case 0:return t;case 1:throw new Error(r)}},privateKeyTweakAdd(t,r){switch(b(\"private key\",t,32),b(\"tweak\",r,32),e.privateKeyTweakAdd(t,r)){case 0:return t;case 1:throw new Error(n)}},privateKeyTweakMul(t,r){switch(b(\"private key\",t,32),b(\"tweak\",r,32),e.privateKeyTweakMul(t,r)){case 0:return t;case 1:throw new Error(i)}},publicKeyVerify:t=>(b(\"public key\",t,[33,65]),0===e.publicKeyVerify(t)),publicKeyCreate(t,r=!0,n){switch(b(\"private key\",t,32),y(r),n=g(n,r?33:65),e.publicKeyCreate(n,t)){case 0:return n;case 1:throw new Error(a);case 2:throw new Error(f)}},publicKeyConvert(t,r=!0,n){switch(b(\"public key\",t,[33,65]),y(r),n=g(n,r?33:65),e.publicKeyConvert(n,t)){case 0:return n;case 1:throw new Error(s);case 2:throw new Error(f)}},publicKeyNegate(t,n=!0,i){switch(b(\"public key\",t,[33,65]),y(n),i=g(i,n?33:65),e.publicKeyNegate(i,t)){case 0:return i;case 1:throw new Error(s);case 2:throw new Error(r);case 3:throw new Error(f)}},publicKeyCombine(t,r=!0,n){p(Array.isArray(t),\"Expected public keys to be an Array\"),p(t.length>0,\"Expected public keys array will have more than zero items\");for(const e of t)b(\"public key\",e,[33,65]);switch(y(r),n=g(n,r?33:65),e.publicKeyCombine(n,t)){case 0:return n;case 1:throw new Error(s);case 2:throw new Error(u);case 3:throw new Error(f)}},publicKeyTweakAdd(t,r,i=!0,o){switch(b(\"public key\",t,[33,65]),b(\"tweak\",r,32),y(i),o=g(o,i?33:65),e.publicKeyTweakAdd(o,t,r)){case 0:return o;case 1:throw new Error(s);case 2:throw new Error(n)}},publicKeyTweakMul(t,r,n=!0,o){switch(b(\"public key\",t,[33,65]),b(\"tweak\",r,32),y(n),o=g(o,n?33:65),e.publicKeyTweakMul(o,t,r)){case 0:return o;case 1:throw new Error(s);case 2:throw new Error(i)}},signatureNormalize(t){switch(b(\"signature\",t,64),e.signatureNormalize(t)){case 0:return t;case 1:throw new Error(c)}},signatureExport(t,n){b(\"signature\",t,64);const i={output:n=g(n,72),outputlen:72};switch(e.signatureExport(i,t)){case 0:return n.slice(0,i.outputlen);case 1:throw new Error(c);case 2:throw new Error(r)}},signatureImport(t,n){switch(b(\"signature\",t),n=g(n,64),e.signatureImport(n,t)){case 0:return n;case 1:throw new Error(c);case 2:throw new Error(r)}},ecdsaSign(t,n,i={},o){b(\"message\",t,32),b(\"private key\",n,32),p(\"Object\"===v(i),\"Expected options to be an Object\"),void 0!==i.data&&b(\"options.data\",i.data),void 0!==i.noncefn&&p(\"Function\"===v(i.noncefn),\"Expected options.noncefn to be a Function\");const a={signature:o=g(o,64),recid:null};switch(e.ecdsaSign(a,t,n,i.data,i.noncefn)){case 0:return a;case 1:throw new Error(h);case 2:throw new Error(r)}},ecdsaVerify(t,r,n){switch(b(\"signature\",t,64),b(\"message\",r,32),b(\"public key\",n,[33,65]),e.ecdsaVerify(t,r,n)){case 0:return!0;case 3:return!1;case 1:throw new Error(c);case 2:throw new Error(s)}},ecdsaRecover(t,n,i,o=!0,a){switch(b(\"signature\",t,64),p(\"Number\"===v(n)&&n>=0&&n<=3,\"Expected recovery id to be a Number within interval [0, 3]\"),b(\"message\",i,32),y(o),a=g(a,o?33:65),e.ecdsaRecover(a,t,n,i)){case 0:return a;case 1:throw new Error(c);case 2:throw new Error(d);case 3:throw new Error(r)}},ecdh(t,r,n={},i){switch(b(\"public key\",t,[33,65]),b(\"private key\",r,32),p(\"Object\"===v(n),\"Expected options to be an Object\"),void 0!==n.data&&b(\"options.data\",n.data),void 0!==n.hashfn?(p(\"Function\"===v(n.hashfn),\"Expected options.hashfn to be a Function\"),void 0!==n.xbuf&&b(\"options.xbuf\",n.xbuf,32),void 0!==n.ybuf&&b(\"options.ybuf\",n.ybuf,32),b(\"output\",i)):i=g(i,32),e.ecdh(i,t,r,n.data,n.hashfn,n.xbuf,n.ybuf)){case 0:return i;case 1:throw new Error(s);case 2:throw new Error(l)}}})},function(e,t,r){const n=new(0,r(36).ec)(\"secp256k1\"),i=n.curve,o=i.n.constructor;function a(e){const t=e[0];switch(t){case 2:case 3:return 33!==e.length?null:function(e,t){let r=new o(t);if(r.cmp(i.p)>=0)return null;r=r.toRed(i.red);let a=r.redSqr().redIMul(r).redIAdd(i.b).redSqrt();return 3===e!==a.isOdd()&&(a=a.redNeg()),n.keyPair({pub:{x:r,y:a}})}(t,e.subarray(1,33));case 4:case 6:case 7:return 65!==e.length?null:function(e,t,r){let a=new o(t),s=new o(r);if(a.cmp(i.p)>=0||s.cmp(i.p)>=0)return null;if(a=a.toRed(i.red),s=s.toRed(i.red),(6===e||7===e)&&s.isOdd()!==(7===e))return null;const f=a.redSqr().redIMul(a);return s.redSqr().redISub(f.redIAdd(i.b)).isZero()?n.keyPair({pub:{x:a,y:s}}):null}(t,e.subarray(1,33),e.subarray(33,65));default:return null}}function s(e,t){const r=t.encode(null,33===e.length);for(let t=0;t<e.length;++t)e[t]=r[t]}e.exports={contextRandomize:()=>0,privateKeyVerify(e){const t=new o(e);return t.cmp(i.n)<0&&!t.isZero()?0:1},privateKeyNegate(e){const t=new o(e),r=i.n.sub(t).umod(i.n).toArrayLike(Uint8Array,\"be\",32);return e.set(r),0},privateKeyTweakAdd(e,t){const r=new o(t);if(r.cmp(i.n)>=0)return 1;if(r.iadd(new o(e)),r.cmp(i.n)>=0&&r.isub(i.n),r.isZero())return 1;const n=r.toArrayLike(Uint8Array,\"be\",32);return e.set(n),0},privateKeyTweakMul(e,t){let r=new o(t);if(r.cmp(i.n)>=0||r.isZero())return 1;r.imul(new o(e)),r.cmp(i.n)>=0&&(r=r.umod(i.n));const n=r.toArrayLike(Uint8Array,\"be\",32);return e.set(n),0},publicKeyVerify:e=>null===a(e)?1:0,publicKeyCreate(e,t){const r=new o(t);if(r.cmp(i.n)>=0||r.isZero())return 1;return s(e,n.keyFromPrivate(t).getPublic()),0},publicKeyConvert(e,t){const r=a(t);if(null===r)return 1;return s(e,r.getPublic()),0},publicKeyNegate(e,t){const r=a(t);if(null===r)return 1;const n=r.getPublic();return n.y=n.y.redNeg(),s(e,n),0},publicKeyCombine(e,t){const r=new Array(t.length);for(let e=0;e<t.length;++e)if(r[e]=a(t[e]),null===r[e])return 1;let n=r[0].getPublic();for(let e=1;e<r.length;++e)n=n.add(r[e].pub);return n.isInfinity()?2:(s(e,n),0)},publicKeyTweakAdd(e,t,r){const n=a(t);if(null===n)return 1;if((r=new o(r)).cmp(i.n)>=0)return 2;const f=n.getPublic().add(i.g.mul(r));return f.isInfinity()?2:(s(e,f),0)},publicKeyTweakMul(e,t,r){const n=a(t);if(null===n)return 1;if((r=new o(r)).cmp(i.n)>=0||r.isZero())return 2;return s(e,n.getPublic().mul(r)),0},signatureNormalize(e){const t=new o(e.subarray(0,32)),r=new o(e.subarray(32,64));return t.cmp(i.n)>=0||r.cmp(i.n)>=0?1:(1===r.cmp(n.nh)&&e.set(i.n.sub(r).toArrayLike(Uint8Array,\"be\",32),32),0)},signatureExport(e,t){const r=t.subarray(0,32),n=t.subarray(32,64);if(new o(r).cmp(i.n)>=0)return 1;if(new o(n).cmp(i.n)>=0)return 1;const{output:a}=e;let s=a.subarray(4,37);s[0]=0,s.set(r,1);let f=33,u=0;for(;f>1&&0===s[u]&&!(128&s[u+1]);--f,++u);if(s=s.subarray(u),128&s[0])return 1;if(f>1&&0===s[0]&&!(128&s[1]))return 1;let c=a.subarray(39,72);c[0]=0,c.set(n,1);let h=33,d=0;for(;h>1&&0===c[d]&&!(128&c[d+1]);--h,++d);return c=c.subarray(d),128&c[0]||h>1&&0===c[0]&&!(128&c[1])?1:(e.outputlen=6+f+h,a[0]=48,a[1]=e.outputlen-2,a[2]=2,a[3]=s.length,a.set(s,4),a[4+f]=2,a[5+f]=c.length,a.set(c,6+f),0)},signatureImport(e,t){if(t.length<8)return 1;if(t.length>72)return 1;if(48!==t[0])return 1;if(t[1]!==t.length-2)return 1;if(2!==t[2])return 1;const r=t[3];if(0===r)return 1;if(5+r>=t.length)return 1;if(2!==t[4+r])return 1;const n=t[5+r];if(0===n)return 1;if(6+r+n!==t.length)return 1;if(128&t[4])return 1;if(r>1&&0===t[4]&&!(128&t[5]))return 1;if(128&t[r+6])return 1;if(n>1&&0===t[r+6]&&!(128&t[r+7]))return 1;let a=t.subarray(4,4+r);if(33===a.length&&0===a[0]&&(a=a.subarray(1)),a.length>32)return 1;let s=t.subarray(6+r);if(33===s.length&&0===s[0]&&(s=s.slice(1)),s.length>32)throw new Error(\"S length is too long\");let f=new o(a);f.cmp(i.n)>=0&&(f=new o(0));let u=new o(t.subarray(6+r));return u.cmp(i.n)>=0&&(u=new o(0)),e.set(f.toArrayLike(Uint8Array,\"be\",32),0),e.set(u.toArrayLike(Uint8Array,\"be\",32),32),0},ecdsaSign(e,t,r,a,s){if(s){const e=s;s=n=>{const i=e(t,r,null,a,n);if(!(i instanceof Uint8Array&&32===i.length))throw new Error(\"This is the way\");return new o(i)}}const f=new o(r);if(f.cmp(i.n)>=0||f.isZero())return 1;let u;try{u=n.sign(t,r,{canonical:!0,k:s,pers:a})}catch(e){return 1}return e.signature.set(u.r.toArrayLike(Uint8Array,\"be\",32),0),e.signature.set(u.s.toArrayLike(Uint8Array,\"be\",32),32),e.recid=u.recoveryParam,0},ecdsaVerify(e,t,r){const s={r:e.subarray(0,32),s:e.subarray(32,64)},f=new o(s.r),u=new o(s.s);if(f.cmp(i.n)>=0||u.cmp(i.n)>=0)return 1;if(1===u.cmp(n.nh)||f.isZero()||u.isZero())return 3;const c=a(r);if(null===c)return 2;const h=c.getPublic();return n.verify(t,s,h)?0:3},ecdsaRecover(e,t,r,a){const f={r:t.slice(0,32),s:t.slice(32,64)},u=new o(f.r),c=new o(f.s);if(u.cmp(i.n)>=0||c.cmp(i.n)>=0)return 1;if(u.isZero()||c.isZero())return 2;let h;try{h=n.recoverPubKey(a,f,r)}catch(e){return 2}return s(e,h),0},ecdh(e,t,r,s,f,u,c){const h=a(t);if(null===h)return 1;const d=new o(r);if(d.cmp(i.n)>=0||d.isZero())return 2;const l=h.getPublic().mul(d);if(void 0===f){const t=l.encode(null,!0),r=n.hash().update(t).digest();for(let t=0;t<32;++t)e[t]=r[t]}else{u||(u=new Uint8Array(32));const t=l.getX().toArray(\"be\",32);for(let e=0;e<32;++e)u[e]=t[e];c||(c=new Uint8Array(32));const r=l.getY().toArray(\"be\",32);for(let e=0;e<32;++e)c[e]=r[e];const n=f(u,c,s);if(!(n instanceof Uint8Array&&n.length===e.length))return 2;e.set(n)}return 0}}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=r(244);t.getRandomBytes=function(e){return new Promise((function(t,r){n(e,(function(e,n){e?r(e):t(n)}))}))},t.getRandomBytesSync=function(e){return n(e)}},function(e,t,r){\"use strict\";(function(t,n){var i=r(2).Buffer,o=t.crypto||t.msCrypto;o&&o.getRandomValues?e.exports=function(e,t){if(e>4294967295)throw new RangeError(\"requested too many random bytes\");var r=i.allocUnsafe(e);if(e>0)if(e>65536)for(var a=0;a<e;a+=65536)o.getRandomValues(r.slice(a,a+65536));else o.getRandomValues(r);if(\"function\"==typeof t)return n.nextTick((function(){t(null,r)}));return r}:e.exports=function(){throw new Error(\"Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11\")}}).call(this,r(5),r(3))},function(e,t,r){\"use strict\";(function(e){var n=r(4),i=new(0,r(36).ec)(\"secp256k1\"),o=i.curve;t.privateKeyExport=function(e,t){var r=new n(e);if(r.ucmp(o.n)>=0)throw new Error(\"couldn't export to DER format\");var s=i.g.mul(r);return a(s.getX(),s.getY(),t)},t.privateKeyModInverse=function(t){var r=new n(t);if(r.ucmp(o.n)>=0||r.isZero())throw new Error(\"private key range is invalid\");return r.invm(o.n).toArrayLike(e,\"be\",32)},t.signatureImport=function(t){var r=new n(t.r);r.ucmp(o.n)>=0&&(r=new n(0));var i=new n(t.s);return i.ucmp(o.n)>=0&&(i=new n(0)),e.concat([r.toArrayLike(e,\"be\",32),i.toArrayLike(e,\"be\",32)])},t.ecdhUnsafe=function(e,t,r){var s=i.keyFromPublic(e),f=new n(t);if(f.ucmp(o.n)>=0||f.isZero())throw new Error(\"scalar was invalid (zero or overflow)\");var u=s.pub.mul(f);return a(u.getX(),u.getY(),r)};var a=function(t,r,n){var i=void 0;return n?((i=e.alloc(33))[0]=r.isOdd()?3:2,t.toArrayLike(e,\"be\",32).copy(i,1)):((i=e.alloc(65))[0]=4,t.toArrayLike(e,\"be\",32).copy(i,1),r.toArrayLike(e,\"be\",32).copy(i,33)),i}}).call(this,r(1).Buffer)},function(e,t,r){\"use strict\";(function(e){var r=e.from([48,129,211,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,133,48,129,130,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,33,2,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,36,3,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),n=e.from([48,130,1,19,2,1,1,4,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,129,165,48,129,162,2,1,1,48,44,6,7,42,134,72,206,61,1,1,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,252,47,48,6,4,1,0,4,1,7,4,65,4,121,190,102,126,249,220,187,172,85,160,98,149,206,135,11,7,2,155,252,219,45,206,40,217,89,242,129,91,22,248,23,152,72,58,218,119,38,163,196,101,93,164,251,252,14,17,8,168,253,23,180,72,166,133,84,25,156,71,208,143,251,16,212,184,2,33,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,186,174,220,230,175,72,160,59,191,210,94,140,208,54,65,65,2,1,1,161,68,3,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);t.privateKeyExport=function(t,i,o){var a=e.from(o?r:n);return t.copy(a,o?8:9),i.copy(a,o?181:214),a},t.privateKeyImport=function(e){var t=e.length,r=0;if(t<r+1||48!==e[r])return null;if(t<(r+=1)+1||!(128&e[r]))return null;var n=127&e[r];if(n<1||n>2)return null;if(t<(r+=1)+n)return null;var i=e[r+n-1]|(n>1?e[r+n-2]<<8:0);return t<(r+=n)+i||t<r+3||2!==e[r]||1!==e[r+1]||1!==e[r+2]||t<(r+=3)+2||4!==e[r]||e[r+1]>32||t<r+2+e[r+1]?null:e.slice(r+2,r+2+e[r+1])},t.signatureImportLax=function(t){var r=e.alloc(32,0),n=e.alloc(32,0),i=t.length,o=0;if(48!==t[o++])return null;var a=t[o++];if(128&a&&(o+=a-128)>i)return null;if(2!==t[o++])return null;var s=t[o++];if(128&s){if(o+(a=s-128)>i)return null;for(;a>0&&0===t[o];o+=1,a-=1);for(s=0;a>0;o+=1,a-=1)s=(s<<8)+t[o]}if(s>i-o)return null;var f=o;if(o+=s,2!==t[o++])return null;var u=t[o++];if(128&u){if(o+(a=u-128)>i)return null;for(;a>0&&0===t[o];o+=1,a-=1);for(u=0;a>0;o+=1,a-=1)u=(u<<8)+t[o]}if(u>i-o)return null;var c=o;for(o+=u;s>0&&0===t[f];s-=1,f+=1);if(s>32)return null;var h=t.slice(f,f+s);for(h.copy(r,32-h.length);u>0&&0===t[c];u-=1,c+=1);if(u>32)return null;var d=t.slice(c,c+u);return d.copy(n,32-d.length),{r:r,s:n}}}).call(this,r(1).Buffer)},function(e,t,r){!function(e){\"use strict\";var t=function(e){var t,r=new Float64Array(16);if(e)for(t=0;t<e.length;t++)r[t]=e[t];return r},n=function(){throw new Error(\"no PRNG\")},i=new Uint8Array(16),o=new Uint8Array(32);o[0]=9;var a=t(),s=t([1]),f=t([56129,1]),u=t([30883,4953,19914,30187,55467,16705,2637,112,59544,30585,16505,36039,65139,11119,27886,20995]),c=t([61785,9906,39828,60374,45398,33411,5274,224,53552,61171,33010,6542,64743,22239,55772,9222]),h=t([54554,36645,11616,51542,42930,38181,51040,26924,56412,64982,57905,49316,21502,52590,14035,8553]),d=t([26200,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214]),l=t([41136,18958,6951,50414,58488,44335,6150,12099,55207,15867,153,11085,57099,20417,9344,11139]);function p(e,t,r,n){e[t]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r,e[t+4]=n>>24&255,e[t+5]=n>>16&255,e[t+6]=n>>8&255,e[t+7]=255&n}function b(e,t,r,n,i){var o,a=0;for(o=0;o<i;o++)a|=e[t+o]^r[n+o];return(1&a-1>>>8)-1}function y(e,t,r,n){return b(e,t,r,n,16)}function g(e,t,r,n){return b(e,t,r,n,32)}function v(e,t,r,n){!function(e,t,r,n){for(var i,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,s=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,f=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,u=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,c=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,h=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,d=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,p=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,b=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,y=255&r[16]|(255&r[17])<<8|(255&r[18])<<16|(255&r[19])<<24,g=255&r[20]|(255&r[21])<<8|(255&r[22])<<16|(255&r[23])<<24,v=255&r[24]|(255&r[25])<<8|(255&r[26])<<16|(255&r[27])<<24,m=255&r[28]|(255&r[29])<<8|(255&r[30])<<16|(255&r[31])<<24,w=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,_=o,E=a,S=s,A=f,x=u,k=c,M=h,T=d,I=l,R=p,P=b,L=y,B=g,C=v,O=m,N=w,j=0;j<20;j+=2)_^=(i=(B^=(i=(I^=(i=(x^=(i=_+B|0)<<7|i>>>25)+_|0)<<9|i>>>23)+x|0)<<13|i>>>19)+I|0)<<18|i>>>14,k^=(i=(E^=(i=(C^=(i=(R^=(i=k+E|0)<<7|i>>>25)+k|0)<<9|i>>>23)+R|0)<<13|i>>>19)+C|0)<<18|i>>>14,P^=(i=(M^=(i=(S^=(i=(O^=(i=P+M|0)<<7|i>>>25)+P|0)<<9|i>>>23)+O|0)<<13|i>>>19)+S|0)<<18|i>>>14,N^=(i=(L^=(i=(T^=(i=(A^=(i=N+L|0)<<7|i>>>25)+N|0)<<9|i>>>23)+A|0)<<13|i>>>19)+T|0)<<18|i>>>14,_^=(i=(A^=(i=(S^=(i=(E^=(i=_+A|0)<<7|i>>>25)+_|0)<<9|i>>>23)+E|0)<<13|i>>>19)+S|0)<<18|i>>>14,k^=(i=(x^=(i=(T^=(i=(M^=(i=k+x|0)<<7|i>>>25)+k|0)<<9|i>>>23)+M|0)<<13|i>>>19)+T|0)<<18|i>>>14,P^=(i=(R^=(i=(I^=(i=(L^=(i=P+R|0)<<7|i>>>25)+P|0)<<9|i>>>23)+L|0)<<13|i>>>19)+I|0)<<18|i>>>14,N^=(i=(O^=(i=(C^=(i=(B^=(i=N+O|0)<<7|i>>>25)+N|0)<<9|i>>>23)+B|0)<<13|i>>>19)+C|0)<<18|i>>>14;_=_+o|0,E=E+a|0,S=S+s|0,A=A+f|0,x=x+u|0,k=k+c|0,M=M+h|0,T=T+d|0,I=I+l|0,R=R+p|0,P=P+b|0,L=L+y|0,B=B+g|0,C=C+v|0,O=O+m|0,N=N+w|0,e[0]=_>>>0&255,e[1]=_>>>8&255,e[2]=_>>>16&255,e[3]=_>>>24&255,e[4]=E>>>0&255,e[5]=E>>>8&255,e[6]=E>>>16&255,e[7]=E>>>24&255,e[8]=S>>>0&255,e[9]=S>>>8&255,e[10]=S>>>16&255,e[11]=S>>>24&255,e[12]=A>>>0&255,e[13]=A>>>8&255,e[14]=A>>>16&255,e[15]=A>>>24&255,e[16]=x>>>0&255,e[17]=x>>>8&255,e[18]=x>>>16&255,e[19]=x>>>24&255,e[20]=k>>>0&255,e[21]=k>>>8&255,e[22]=k>>>16&255,e[23]=k>>>24&255,e[24]=M>>>0&255,e[25]=M>>>8&255,e[26]=M>>>16&255,e[27]=M>>>24&255,e[28]=T>>>0&255,e[29]=T>>>8&255,e[30]=T>>>16&255,e[31]=T>>>24&255,e[32]=I>>>0&255,e[33]=I>>>8&255,e[34]=I>>>16&255,e[35]=I>>>24&255,e[36]=R>>>0&255,e[37]=R>>>8&255,e[38]=R>>>16&255,e[39]=R>>>24&255,e[40]=P>>>0&255,e[41]=P>>>8&255,e[42]=P>>>16&255,e[43]=P>>>24&255,e[44]=L>>>0&255,e[45]=L>>>8&255,e[46]=L>>>16&255,e[47]=L>>>24&255,e[48]=B>>>0&255,e[49]=B>>>8&255,e[50]=B>>>16&255,e[51]=B>>>24&255,e[52]=C>>>0&255,e[53]=C>>>8&255,e[54]=C>>>16&255,e[55]=C>>>24&255,e[56]=O>>>0&255,e[57]=O>>>8&255,e[58]=O>>>16&255,e[59]=O>>>24&255,e[60]=N>>>0&255,e[61]=N>>>8&255,e[62]=N>>>16&255,e[63]=N>>>24&255}(e,t,r,n)}function m(e,t,r,n){!function(e,t,r,n){for(var i,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,a=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,s=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,f=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,u=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,c=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,h=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,d=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,p=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,b=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,y=255&r[16]|(255&r[17])<<8|(255&r[18])<<16|(255&r[19])<<24,g=255&r[20]|(255&r[21])<<8|(255&r[22])<<16|(255&r[23])<<24,v=255&r[24]|(255&r[25])<<8|(255&r[26])<<16|(255&r[27])<<24,m=255&r[28]|(255&r[29])<<8|(255&r[30])<<16|(255&r[31])<<24,w=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,_=0;_<20;_+=2)o^=(i=(g^=(i=(l^=(i=(u^=(i=o+g|0)<<7|i>>>25)+o|0)<<9|i>>>23)+u|0)<<13|i>>>19)+l|0)<<18|i>>>14,c^=(i=(a^=(i=(v^=(i=(p^=(i=c+a|0)<<7|i>>>25)+c|0)<<9|i>>>23)+p|0)<<13|i>>>19)+v|0)<<18|i>>>14,b^=(i=(h^=(i=(s^=(i=(m^=(i=b+h|0)<<7|i>>>25)+b|0)<<9|i>>>23)+m|0)<<13|i>>>19)+s|0)<<18|i>>>14,w^=(i=(y^=(i=(d^=(i=(f^=(i=w+y|0)<<7|i>>>25)+w|0)<<9|i>>>23)+f|0)<<13|i>>>19)+d|0)<<18|i>>>14,o^=(i=(f^=(i=(s^=(i=(a^=(i=o+f|0)<<7|i>>>25)+o|0)<<9|i>>>23)+a|0)<<13|i>>>19)+s|0)<<18|i>>>14,c^=(i=(u^=(i=(d^=(i=(h^=(i=c+u|0)<<7|i>>>25)+c|0)<<9|i>>>23)+h|0)<<13|i>>>19)+d|0)<<18|i>>>14,b^=(i=(p^=(i=(l^=(i=(y^=(i=b+p|0)<<7|i>>>25)+b|0)<<9|i>>>23)+y|0)<<13|i>>>19)+l|0)<<18|i>>>14,w^=(i=(m^=(i=(v^=(i=(g^=(i=w+m|0)<<7|i>>>25)+w|0)<<9|i>>>23)+g|0)<<13|i>>>19)+v|0)<<18|i>>>14;e[0]=o>>>0&255,e[1]=o>>>8&255,e[2]=o>>>16&255,e[3]=o>>>24&255,e[4]=c>>>0&255,e[5]=c>>>8&255,e[6]=c>>>16&255,e[7]=c>>>24&255,e[8]=b>>>0&255,e[9]=b>>>8&255,e[10]=b>>>16&255,e[11]=b>>>24&255,e[12]=w>>>0&255,e[13]=w>>>8&255,e[14]=w>>>16&255,e[15]=w>>>24&255,e[16]=h>>>0&255,e[17]=h>>>8&255,e[18]=h>>>16&255,e[19]=h>>>24&255,e[20]=d>>>0&255,e[21]=d>>>8&255,e[22]=d>>>16&255,e[23]=d>>>24&255,e[24]=l>>>0&255,e[25]=l>>>8&255,e[26]=l>>>16&255,e[27]=l>>>24&255,e[28]=p>>>0&255,e[29]=p>>>8&255,e[30]=p>>>16&255,e[31]=p>>>24&255}(e,t,r,n)}var w=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function _(e,t,r,n,i,o,a){var s,f,u=new Uint8Array(16),c=new Uint8Array(64);for(f=0;f<16;f++)u[f]=0;for(f=0;f<8;f++)u[f]=o[f];for(;i>=64;){for(v(c,u,a,w),f=0;f<64;f++)e[t+f]=r[n+f]^c[f];for(s=1,f=8;f<16;f++)s=s+(255&u[f])|0,u[f]=255&s,s>>>=8;i-=64,t+=64,n+=64}if(i>0)for(v(c,u,a,w),f=0;f<i;f++)e[t+f]=r[n+f]^c[f];return 0}function E(e,t,r,n,i){var o,a,s=new Uint8Array(16),f=new Uint8Array(64);for(a=0;a<16;a++)s[a]=0;for(a=0;a<8;a++)s[a]=n[a];for(;r>=64;){for(v(f,s,i,w),a=0;a<64;a++)e[t+a]=f[a];for(o=1,a=8;a<16;a++)o=o+(255&s[a])|0,s[a]=255&o,o>>>=8;r-=64,t+=64}if(r>0)for(v(f,s,i,w),a=0;a<r;a++)e[t+a]=f[a];return 0}function S(e,t,r,n,i){var o=new Uint8Array(32);m(o,n,i,w);for(var a=new Uint8Array(8),s=0;s<8;s++)a[s]=n[s+16];return E(e,t,r,a,o)}function A(e,t,r,n,i,o,a){var s=new Uint8Array(32);m(s,o,a,w);for(var f=new Uint8Array(8),u=0;u<8;u++)f[u]=o[u+16];return _(e,t,r,n,i,f,s)}var x=function(e){var t,r,n,i,o,a,s,f;this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.leftover=0,this.fin=0,t=255&e[0]|(255&e[1])<<8,this.r[0]=8191&t,r=255&e[2]|(255&e[3])<<8,this.r[1]=8191&(t>>>13|r<<3),n=255&e[4]|(255&e[5])<<8,this.r[2]=7939&(r>>>10|n<<6),i=255&e[6]|(255&e[7])<<8,this.r[3]=8191&(n>>>7|i<<9),o=255&e[8]|(255&e[9])<<8,this.r[4]=255&(i>>>4|o<<12),this.r[5]=o>>>1&8190,a=255&e[10]|(255&e[11])<<8,this.r[6]=8191&(o>>>14|a<<2),s=255&e[12]|(255&e[13])<<8,this.r[7]=8065&(a>>>11|s<<5),f=255&e[14]|(255&e[15])<<8,this.r[8]=8191&(s>>>8|f<<8),this.r[9]=f>>>5&127,this.pad[0]=255&e[16]|(255&e[17])<<8,this.pad[1]=255&e[18]|(255&e[19])<<8,this.pad[2]=255&e[20]|(255&e[21])<<8,this.pad[3]=255&e[22]|(255&e[23])<<8,this.pad[4]=255&e[24]|(255&e[25])<<8,this.pad[5]=255&e[26]|(255&e[27])<<8,this.pad[6]=255&e[28]|(255&e[29])<<8,this.pad[7]=255&e[30]|(255&e[31])<<8};function k(e,t,r,n,i,o){var a=new x(o);return a.update(r,n,i),a.finish(e,t),0}function M(e,t,r,n,i,o){var a=new Uint8Array(16);return k(a,0,r,n,i,o),y(e,t,a,0)}function T(e,t,r,n,i){var o;if(r<32)return-1;for(A(e,0,t,0,r,n,i),k(e,16,e,32,r-32,e),o=0;o<16;o++)e[o]=0;return 0}function I(e,t,r,n,i){var o,a=new Uint8Array(32);if(r<32)return-1;if(S(a,0,32,n,i),0!==M(t,16,t,32,r-32,a))return-1;for(A(e,0,t,0,r,n,i),o=0;o<32;o++)e[o]=0;return 0}function R(e,t){var r;for(r=0;r<16;r++)e[r]=0|t[r]}function P(e){var t,r,n=1;for(t=0;t<16;t++)r=e[t]+n+65535,n=Math.floor(r/65536),e[t]=r-65536*n;e[0]+=n-1+37*(n-1)}function L(e,t,r){for(var n,i=~(r-1),o=0;o<16;o++)n=i&(e[o]^t[o]),e[o]^=n,t[o]^=n}function B(e,r){var n,i,o,a=t(),s=t();for(n=0;n<16;n++)s[n]=r[n];for(P(s),P(s),P(s),i=0;i<2;i++){for(a[0]=s[0]-65517,n=1;n<15;n++)a[n]=s[n]-65535-(a[n-1]>>16&1),a[n-1]&=65535;a[15]=s[15]-32767-(a[14]>>16&1),o=a[15]>>16&1,a[14]&=65535,L(s,a,1-o)}for(n=0;n<16;n++)e[2*n]=255&s[n],e[2*n+1]=s[n]>>8}function C(e,t){var r=new Uint8Array(32),n=new Uint8Array(32);return B(r,e),B(n,t),g(r,0,n,0)}function O(e){var t=new Uint8Array(32);return B(t,e),1&t[0]}function N(e,t){var r;for(r=0;r<16;r++)e[r]=t[2*r]+(t[2*r+1]<<8);e[15]&=32767}function j(e,t,r){for(var n=0;n<16;n++)e[n]=t[n]+r[n]}function D(e,t,r){for(var n=0;n<16;n++)e[n]=t[n]-r[n]}function U(e,t,r){var n,i,o=0,a=0,s=0,f=0,u=0,c=0,h=0,d=0,l=0,p=0,b=0,y=0,g=0,v=0,m=0,w=0,_=0,E=0,S=0,A=0,x=0,k=0,M=0,T=0,I=0,R=0,P=0,L=0,B=0,C=0,O=0,N=r[0],j=r[1],D=r[2],U=r[3],z=r[4],q=r[5],F=r[6],K=r[7],H=r[8],V=r[9],Y=r[10],W=r[11],G=r[12],Z=r[13],J=r[14],$=r[15];o+=(n=t[0])*N,a+=n*j,s+=n*D,f+=n*U,u+=n*z,c+=n*q,h+=n*F,d+=n*K,l+=n*H,p+=n*V,b+=n*Y,y+=n*W,g+=n*G,v+=n*Z,m+=n*J,w+=n*$,a+=(n=t[1])*N,s+=n*j,f+=n*D,u+=n*U,c+=n*z,h+=n*q,d+=n*F,l+=n*K,p+=n*H,b+=n*V,y+=n*Y,g+=n*W,v+=n*G,m+=n*Z,w+=n*J,_+=n*$,s+=(n=t[2])*N,f+=n*j,u+=n*D,c+=n*U,h+=n*z,d+=n*q,l+=n*F,p+=n*K,b+=n*H,y+=n*V,g+=n*Y,v+=n*W,m+=n*G,w+=n*Z,_+=n*J,E+=n*$,f+=(n=t[3])*N,u+=n*j,c+=n*D,h+=n*U,d+=n*z,l+=n*q,p+=n*F,b+=n*K,y+=n*H,g+=n*V,v+=n*Y,m+=n*W,w+=n*G,_+=n*Z,E+=n*J,S+=n*$,u+=(n=t[4])*N,c+=n*j,h+=n*D,d+=n*U,l+=n*z,p+=n*q,b+=n*F,y+=n*K,g+=n*H,v+=n*V,m+=n*Y,w+=n*W,_+=n*G,E+=n*Z,S+=n*J,A+=n*$,c+=(n=t[5])*N,h+=n*j,d+=n*D,l+=n*U,p+=n*z,b+=n*q,y+=n*F,g+=n*K,v+=n*H,m+=n*V,w+=n*Y,_+=n*W,E+=n*G,S+=n*Z,A+=n*J,x+=n*$,h+=(n=t[6])*N,d+=n*j,l+=n*D,p+=n*U,b+=n*z,y+=n*q,g+=n*F,v+=n*K,m+=n*H,w+=n*V,_+=n*Y,E+=n*W,S+=n*G,A+=n*Z,x+=n*J,k+=n*$,d+=(n=t[7])*N,l+=n*j,p+=n*D,b+=n*U,y+=n*z,g+=n*q,v+=n*F,m+=n*K,w+=n*H,_+=n*V,E+=n*Y,S+=n*W,A+=n*G,x+=n*Z,k+=n*J,M+=n*$,l+=(n=t[8])*N,p+=n*j,b+=n*D,y+=n*U,g+=n*z,v+=n*q,m+=n*F,w+=n*K,_+=n*H,E+=n*V,S+=n*Y,A+=n*W,x+=n*G,k+=n*Z,M+=n*J,T+=n*$,p+=(n=t[9])*N,b+=n*j,y+=n*D,g+=n*U,v+=n*z,m+=n*q,w+=n*F,_+=n*K,E+=n*H,S+=n*V,A+=n*Y,x+=n*W,k+=n*G,M+=n*Z,T+=n*J,I+=n*$,b+=(n=t[10])*N,y+=n*j,g+=n*D,v+=n*U,m+=n*z,w+=n*q,_+=n*F,E+=n*K,S+=n*H,A+=n*V,x+=n*Y,k+=n*W,M+=n*G,T+=n*Z,I+=n*J,R+=n*$,y+=(n=t[11])*N,g+=n*j,v+=n*D,m+=n*U,w+=n*z,_+=n*q,E+=n*F,S+=n*K,A+=n*H,x+=n*V,k+=n*Y,M+=n*W,T+=n*G,I+=n*Z,R+=n*J,P+=n*$,g+=(n=t[12])*N,v+=n*j,m+=n*D,w+=n*U,_+=n*z,E+=n*q,S+=n*F,A+=n*K,x+=n*H,k+=n*V,M+=n*Y,T+=n*W,I+=n*G,R+=n*Z,P+=n*J,L+=n*$,v+=(n=t[13])*N,m+=n*j,w+=n*D,_+=n*U,E+=n*z,S+=n*q,A+=n*F,x+=n*K,k+=n*H,M+=n*V,T+=n*Y,I+=n*W,R+=n*G,P+=n*Z,L+=n*J,B+=n*$,m+=(n=t[14])*N,w+=n*j,_+=n*D,E+=n*U,S+=n*z,A+=n*q,x+=n*F,k+=n*K,M+=n*H,T+=n*V,I+=n*Y,R+=n*W,P+=n*G,L+=n*Z,B+=n*J,C+=n*$,w+=(n=t[15])*N,a+=38*(E+=n*D),s+=38*(S+=n*U),f+=38*(A+=n*z),u+=38*(x+=n*q),c+=38*(k+=n*F),h+=38*(M+=n*K),d+=38*(T+=n*H),l+=38*(I+=n*V),p+=38*(R+=n*Y),b+=38*(P+=n*W),y+=38*(L+=n*G),g+=38*(B+=n*Z),v+=38*(C+=n*J),m+=38*(O+=n*$),o=(n=(o+=38*(_+=n*j))+(i=1)+65535)-65536*(i=Math.floor(n/65536)),a=(n=a+i+65535)-65536*(i=Math.floor(n/65536)),s=(n=s+i+65535)-65536*(i=Math.floor(n/65536)),f=(n=f+i+65535)-65536*(i=Math.floor(n/65536)),u=(n=u+i+65535)-65536*(i=Math.floor(n/65536)),c=(n=c+i+65535)-65536*(i=Math.floor(n/65536)),h=(n=h+i+65535)-65536*(i=Math.floor(n/65536)),d=(n=d+i+65535)-65536*(i=Math.floor(n/65536)),l=(n=l+i+65535)-65536*(i=Math.floor(n/65536)),p=(n=p+i+65535)-65536*(i=Math.floor(n/65536)),b=(n=b+i+65535)-65536*(i=Math.floor(n/65536)),y=(n=y+i+65535)-65536*(i=Math.floor(n/65536)),g=(n=g+i+65535)-65536*(i=Math.floor(n/65536)),v=(n=v+i+65535)-65536*(i=Math.floor(n/65536)),m=(n=m+i+65535)-65536*(i=Math.floor(n/65536)),w=(n=w+i+65535)-65536*(i=Math.floor(n/65536)),o=(n=(o+=i-1+37*(i-1))+(i=1)+65535)-65536*(i=Math.floor(n/65536)),a=(n=a+i+65535)-65536*(i=Math.floor(n/65536)),s=(n=s+i+65535)-65536*(i=Math.floor(n/65536)),f=(n=f+i+65535)-65536*(i=Math.floor(n/65536)),u=(n=u+i+65535)-65536*(i=Math.floor(n/65536)),c=(n=c+i+65535)-65536*(i=Math.floor(n/65536)),h=(n=h+i+65535)-65536*(i=Math.floor(n/65536)),d=(n=d+i+65535)-65536*(i=Math.floor(n/65536)),l=(n=l+i+65535)-65536*(i=Math.floor(n/65536)),p=(n=p+i+65535)-65536*(i=Math.floor(n/65536)),b=(n=b+i+65535)-65536*(i=Math.floor(n/65536)),y=(n=y+i+65535)-65536*(i=Math.floor(n/65536)),g=(n=g+i+65535)-65536*(i=Math.floor(n/65536)),v=(n=v+i+65535)-65536*(i=Math.floor(n/65536)),m=(n=m+i+65535)-65536*(i=Math.floor(n/65536)),w=(n=w+i+65535)-65536*(i=Math.floor(n/65536)),o+=i-1+37*(i-1),e[0]=o,e[1]=a,e[2]=s,e[3]=f,e[4]=u,e[5]=c,e[6]=h,e[7]=d,e[8]=l,e[9]=p,e[10]=b,e[11]=y,e[12]=g,e[13]=v,e[14]=m,e[15]=w}function z(e,t){U(e,t,t)}function q(e,r){var n,i=t();for(n=0;n<16;n++)i[n]=r[n];for(n=253;n>=0;n--)z(i,i),2!==n&&4!==n&&U(i,i,r);for(n=0;n<16;n++)e[n]=i[n]}function F(e,r){var n,i=t();for(n=0;n<16;n++)i[n]=r[n];for(n=250;n>=0;n--)z(i,i),1!==n&&U(i,i,r);for(n=0;n<16;n++)e[n]=i[n]}function K(e,r,n){var i,o,a=new Uint8Array(32),s=new Float64Array(80),u=t(),c=t(),h=t(),d=t(),l=t(),p=t();for(o=0;o<31;o++)a[o]=r[o];for(a[31]=127&r[31]|64,a[0]&=248,N(s,n),o=0;o<16;o++)c[o]=s[o],d[o]=u[o]=h[o]=0;for(u[0]=d[0]=1,o=254;o>=0;--o)L(u,c,i=a[o>>>3]>>>(7&o)&1),L(h,d,i),j(l,u,h),D(u,u,h),j(h,c,d),D(c,c,d),z(d,l),z(p,u),U(u,h,u),U(h,c,l),j(l,u,h),D(u,u,h),z(c,u),D(h,d,p),U(u,h,f),j(u,u,d),U(h,h,u),U(u,d,p),U(d,c,s),z(c,l),L(u,c,i),L(h,d,i);for(o=0;o<16;o++)s[o+16]=u[o],s[o+32]=h[o],s[o+48]=c[o],s[o+64]=d[o];var b=s.subarray(32),y=s.subarray(16);return q(b,b),U(y,y,b),B(e,y),0}function H(e,t){return K(e,t,o)}function V(e,t){return n(t,32),H(e,t)}function Y(e,t,r){var n=new Uint8Array(32);return K(n,r,t),m(e,i,n,w)}x.prototype.blocks=function(e,t,r){for(var n,i,o,a,s,f,u,c,h,d,l,p,b,y,g,v,m,w,_,E=this.fin?0:2048,S=this.h[0],A=this.h[1],x=this.h[2],k=this.h[3],M=this.h[4],T=this.h[5],I=this.h[6],R=this.h[7],P=this.h[8],L=this.h[9],B=this.r[0],C=this.r[1],O=this.r[2],N=this.r[3],j=this.r[4],D=this.r[5],U=this.r[6],z=this.r[7],q=this.r[8],F=this.r[9];r>=16;)d=h=0,d+=(S+=8191&(n=255&e[t+0]|(255&e[t+1])<<8))*B,d+=(A+=8191&(n>>>13|(i=255&e[t+2]|(255&e[t+3])<<8)<<3))*(5*F),d+=(x+=8191&(i>>>10|(o=255&e[t+4]|(255&e[t+5])<<8)<<6))*(5*q),d+=(k+=8191&(o>>>7|(a=255&e[t+6]|(255&e[t+7])<<8)<<9))*(5*z),h=(d+=(M+=8191&(a>>>4|(s=255&e[t+8]|(255&e[t+9])<<8)<<12))*(5*U))>>>13,d&=8191,d+=(T+=s>>>1&8191)*(5*D),d+=(I+=8191&(s>>>14|(f=255&e[t+10]|(255&e[t+11])<<8)<<2))*(5*j),d+=(R+=8191&(f>>>11|(u=255&e[t+12]|(255&e[t+13])<<8)<<5))*(5*N),d+=(P+=8191&(u>>>8|(c=255&e[t+14]|(255&e[t+15])<<8)<<8))*(5*O),l=h+=(d+=(L+=c>>>5|E)*(5*C))>>>13,l+=S*C,l+=A*B,l+=x*(5*F),l+=k*(5*q),h=(l+=M*(5*z))>>>13,l&=8191,l+=T*(5*U),l+=I*(5*D),l+=R*(5*j),l+=P*(5*N),h+=(l+=L*(5*O))>>>13,l&=8191,p=h,p+=S*O,p+=A*C,p+=x*B,p+=k*(5*F),h=(p+=M*(5*q))>>>13,p&=8191,p+=T*(5*z),p+=I*(5*U),p+=R*(5*D),p+=P*(5*j),b=h+=(p+=L*(5*N))>>>13,b+=S*N,b+=A*O,b+=x*C,b+=k*B,h=(b+=M*(5*F))>>>13,b&=8191,b+=T*(5*q),b+=I*(5*z),b+=R*(5*U),b+=P*(5*D),y=h+=(b+=L*(5*j))>>>13,y+=S*j,y+=A*N,y+=x*O,y+=k*C,h=(y+=M*B)>>>13,y&=8191,y+=T*(5*F),y+=I*(5*q),y+=R*(5*z),y+=P*(5*U),g=h+=(y+=L*(5*D))>>>13,g+=S*D,g+=A*j,g+=x*N,g+=k*O,h=(g+=M*C)>>>13,g&=8191,g+=T*B,g+=I*(5*F),g+=R*(5*q),g+=P*(5*z),v=h+=(g+=L*(5*U))>>>13,v+=S*U,v+=A*D,v+=x*j,v+=k*N,h=(v+=M*O)>>>13,v&=8191,v+=T*C,v+=I*B,v+=R*(5*F),v+=P*(5*q),m=h+=(v+=L*(5*z))>>>13,m+=S*z,m+=A*U,m+=x*D,m+=k*j,h=(m+=M*N)>>>13,m&=8191,m+=T*O,m+=I*C,m+=R*B,m+=P*(5*F),w=h+=(m+=L*(5*q))>>>13,w+=S*q,w+=A*z,w+=x*U,w+=k*D,h=(w+=M*j)>>>13,w&=8191,w+=T*N,w+=I*O,w+=R*C,w+=P*B,_=h+=(w+=L*(5*F))>>>13,_+=S*F,_+=A*q,_+=x*z,_+=k*U,h=(_+=M*D)>>>13,_&=8191,_+=T*j,_+=I*N,_+=R*O,_+=P*C,S=d=8191&(h=(h=((h+=(_+=L*B)>>>13)<<2)+h|0)+(d&=8191)|0),A=l+=h>>>=13,x=p&=8191,k=b&=8191,M=y&=8191,T=g&=8191,I=v&=8191,R=m&=8191,P=w&=8191,L=_&=8191,t+=16,r-=16;this.h[0]=S,this.h[1]=A,this.h[2]=x,this.h[3]=k,this.h[4]=M,this.h[5]=T,this.h[6]=I,this.h[7]=R,this.h[8]=P,this.h[9]=L},x.prototype.finish=function(e,t){var r,n,i,o,a=new Uint16Array(10);if(this.leftover){for(o=this.leftover,this.buffer[o++]=1;o<16;o++)this.buffer[o]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(r=this.h[1]>>>13,this.h[1]&=8191,o=2;o<10;o++)this.h[o]+=r,r=this.h[o]>>>13,this.h[o]&=8191;for(this.h[0]+=5*r,r=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=r,r=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=r,a[0]=this.h[0]+5,r=a[0]>>>13,a[0]&=8191,o=1;o<10;o++)a[o]=this.h[o]+r,r=a[o]>>>13,a[o]&=8191;for(a[9]-=8192,n=(1^r)-1,o=0;o<10;o++)a[o]&=n;for(n=~n,o=0;o<10;o++)this.h[o]=this.h[o]&n|a[o];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),i=this.h[0]+this.pad[0],this.h[0]=65535&i,o=1;o<8;o++)i=(this.h[o]+this.pad[o]|0)+(i>>>16)|0,this.h[o]=65535&i;e[t+0]=this.h[0]>>>0&255,e[t+1]=this.h[0]>>>8&255,e[t+2]=this.h[1]>>>0&255,e[t+3]=this.h[1]>>>8&255,e[t+4]=this.h[2]>>>0&255,e[t+5]=this.h[2]>>>8&255,e[t+6]=this.h[3]>>>0&255,e[t+7]=this.h[3]>>>8&255,e[t+8]=this.h[4]>>>0&255,e[t+9]=this.h[4]>>>8&255,e[t+10]=this.h[5]>>>0&255,e[t+11]=this.h[5]>>>8&255,e[t+12]=this.h[6]>>>0&255,e[t+13]=this.h[6]>>>8&255,e[t+14]=this.h[7]>>>0&255,e[t+15]=this.h[7]>>>8&255},x.prototype.update=function(e,t,r){var n,i;if(this.leftover){for((i=16-this.leftover)>r&&(i=r),n=0;n<i;n++)this.buffer[this.leftover+n]=e[t+n];if(r-=i,t+=i,this.leftover+=i,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(r>=16&&(i=r-r%16,this.blocks(e,t,i),t+=i,r-=i),r){for(n=0;n<r;n++)this.buffer[this.leftover+n]=e[t+n];this.leftover+=r}};var W=T,G=I;var Z=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function J(e,t,r,n){for(var i,o,a,s,f,u,c,h,d,l,p,b,y,g,v,m,w,_,E,S,A,x,k,M,T,I,R=new Int32Array(16),P=new Int32Array(16),L=e[0],B=e[1],C=e[2],O=e[3],N=e[4],j=e[5],D=e[6],U=e[7],z=t[0],q=t[1],F=t[2],K=t[3],H=t[4],V=t[5],Y=t[6],W=t[7],G=0;n>=128;){for(E=0;E<16;E++)S=8*E+G,R[E]=r[S+0]<<24|r[S+1]<<16|r[S+2]<<8|r[S+3],P[E]=r[S+4]<<24|r[S+5]<<16|r[S+6]<<8|r[S+7];for(E=0;E<80;E++)if(i=L,o=B,a=C,s=O,f=N,u=j,c=D,U,d=z,l=q,p=F,b=K,y=H,g=V,v=Y,W,k=65535&(x=W),M=x>>>16,T=65535&(A=U),I=A>>>16,k+=65535&(x=(H>>>14|N<<18)^(H>>>18|N<<14)^(N>>>9|H<<23)),M+=x>>>16,T+=65535&(A=(N>>>14|H<<18)^(N>>>18|H<<14)^(H>>>9|N<<23)),I+=A>>>16,k+=65535&(x=H&V^~H&Y),M+=x>>>16,T+=65535&(A=N&j^~N&D),I+=A>>>16,k+=65535&(x=Z[2*E+1]),M+=x>>>16,T+=65535&(A=Z[2*E]),I+=A>>>16,A=R[E%16],M+=(x=P[E%16])>>>16,T+=65535&A,I+=A>>>16,T+=(M+=(k+=65535&x)>>>16)>>>16,k=65535&(x=_=65535&k|M<<16),M=x>>>16,T=65535&(A=w=65535&T|(I+=T>>>16)<<16),I=A>>>16,k+=65535&(x=(z>>>28|L<<4)^(L>>>2|z<<30)^(L>>>7|z<<25)),M+=x>>>16,T+=65535&(A=(L>>>28|z<<4)^(z>>>2|L<<30)^(z>>>7|L<<25)),I+=A>>>16,M+=(x=z&q^z&F^q&F)>>>16,T+=65535&(A=L&B^L&C^B&C),I+=A>>>16,h=65535&(T+=(M+=(k+=65535&x)>>>16)>>>16)|(I+=T>>>16)<<16,m=65535&k|M<<16,k=65535&(x=b),M=x>>>16,T=65535&(A=s),I=A>>>16,M+=(x=_)>>>16,T+=65535&(A=w),I+=A>>>16,B=i,C=o,O=a,N=s=65535&(T+=(M+=(k+=65535&x)>>>16)>>>16)|(I+=T>>>16)<<16,j=f,D=u,U=c,L=h,q=d,F=l,K=p,H=b=65535&k|M<<16,V=y,Y=g,W=v,z=m,E%16==15)for(S=0;S<16;S++)A=R[S],k=65535&(x=P[S]),M=x>>>16,T=65535&A,I=A>>>16,A=R[(S+9)%16],k+=65535&(x=P[(S+9)%16]),M+=x>>>16,T+=65535&A,I+=A>>>16,w=R[(S+1)%16],k+=65535&(x=((_=P[(S+1)%16])>>>1|w<<31)^(_>>>8|w<<24)^(_>>>7|w<<25)),M+=x>>>16,T+=65535&(A=(w>>>1|_<<31)^(w>>>8|_<<24)^w>>>7),I+=A>>>16,w=R[(S+14)%16],M+=(x=((_=P[(S+14)%16])>>>19|w<<13)^(w>>>29|_<<3)^(_>>>6|w<<26))>>>16,T+=65535&(A=(w>>>19|_<<13)^(_>>>29|w<<3)^w>>>6),I+=A>>>16,I+=(T+=(M+=(k+=65535&x)>>>16)>>>16)>>>16,R[S]=65535&T|I<<16,P[S]=65535&k|M<<16;k=65535&(x=z),M=x>>>16,T=65535&(A=L),I=A>>>16,A=e[0],M+=(x=t[0])>>>16,T+=65535&A,I+=A>>>16,I+=(T+=(M+=(k+=65535&x)>>>16)>>>16)>>>16,e[0]=L=65535&T|I<<16,t[0]=z=65535&k|M<<16,k=65535&(x=q),M=x>>>16,T=65535&(A=B),I=A>>>16,A=e[1],M+=(x=t[1])>>>16,T+=65535&A,I+=A>>>16,I+=(T+=(M+=(k+=65535&x)>>>16)>>>16)>>>16,e[1]=B=65535&T|I<<16,t[1]=q=65535&k|M<<16,k=65535&(x=F),M=x>>>16,T=65535&(A=C),I=A>>>16,A=e[2],M+=(x=t[2])>>>16,T+=65535&A,I+=A>>>16,I+=(T+=(M+=(k+=65535&x)>>>16)>>>16)>>>16,e[2]=C=65535&T|I<<16,t[2]=F=65535&k|M<<16,k=65535&(x=K),M=x>>>16,T=65535&(A=O),I=A>>>16,A=e[3],M+=(x=t[3])>>>16,T+=65535&A,I+=A>>>16,I+=(T+=(M+=(k+=65535&x)>>>16)>>>16)>>>16,e[3]=O=65535&T|I<<16,t[3]=K=65535&k|M<<16,k=65535&(x=H),M=x>>>16,T=65535&(A=N),I=A>>>16,A=e[4],M+=(x=t[4])>>>16,T+=65535&A,I+=A>>>16,I+=(T+=(M+=(k+=65535&x)>>>16)>>>16)>>>16,e[4]=N=65535&T|I<<16,t[4]=H=65535&k|M<<16,k=65535&(x=V),M=x>>>16,T=65535&(A=j),I=A>>>16,A=e[5],M+=(x=t[5])>>>16,T+=65535&A,I+=A>>>16,I+=(T+=(M+=(k+=65535&x)>>>16)>>>16)>>>16,e[5]=j=65535&T|I<<16,t[5]=V=65535&k|M<<16,k=65535&(x=Y),M=x>>>16,T=65535&(A=D),I=A>>>16,A=e[6],M+=(x=t[6])>>>16,T+=65535&A,I+=A>>>16,I+=(T+=(M+=(k+=65535&x)>>>16)>>>16)>>>16,e[6]=D=65535&T|I<<16,t[6]=Y=65535&k|M<<16,k=65535&(x=W),M=x>>>16,T=65535&(A=U),I=A>>>16,A=e[7],M+=(x=t[7])>>>16,T+=65535&A,I+=A>>>16,I+=(T+=(M+=(k+=65535&x)>>>16)>>>16)>>>16,e[7]=U=65535&T|I<<16,t[7]=W=65535&k|M<<16,G+=128,n-=128}return n}function $(e,t,r){var n,i=new Int32Array(8),o=new Int32Array(8),a=new Uint8Array(256),s=r;for(i[0]=1779033703,i[1]=3144134277,i[2]=1013904242,i[3]=2773480762,i[4]=1359893119,i[5]=2600822924,i[6]=528734635,i[7]=1541459225,o[0]=4089235720,o[1]=2227873595,o[2]=4271175723,o[3]=1595750129,o[4]=2917565137,o[5]=725511199,o[6]=4215389547,o[7]=327033209,J(i,o,t,r),r%=128,n=0;n<r;n++)a[n]=t[s-r+n];for(a[r]=128,a[(r=256-128*(r<112?1:0))-9]=0,p(a,r-8,s/536870912|0,s<<3),J(i,o,a,r),n=0;n<8;n++)p(e,8*n,i[n],o[n]);return 0}function X(e,r){var n=t(),i=t(),o=t(),a=t(),s=t(),f=t(),u=t(),h=t(),d=t();D(n,e[1],e[0]),D(d,r[1],r[0]),U(n,n,d),j(i,e[0],e[1]),j(d,r[0],r[1]),U(i,i,d),U(o,e[3],r[3]),U(o,o,c),U(a,e[2],r[2]),j(a,a,a),D(s,i,n),D(f,a,o),j(u,a,o),j(h,i,n),U(e[0],s,f),U(e[1],h,u),U(e[2],u,f),U(e[3],s,h)}function Q(e,t,r){var n;for(n=0;n<4;n++)L(e[n],t[n],r)}function ee(e,r){var n=t(),i=t(),o=t();q(o,r[2]),U(n,r[0],o),U(i,r[1],o),B(e,i),e[31]^=O(n)<<7}function te(e,t,r){var n,i;for(R(e[0],a),R(e[1],s),R(e[2],s),R(e[3],a),i=255;i>=0;--i)Q(e,t,n=r[i/8|0]>>(7&i)&1),X(t,e),X(e,e),Q(e,t,n)}function re(e,r){var n=[t(),t(),t(),t()];R(n[0],h),R(n[1],d),R(n[2],s),U(n[3],h,d),te(e,n,r)}function ne(e,r,i){var o,a=new Uint8Array(64),s=[t(),t(),t(),t()];for(i||n(r,32),$(a,r,32),a[0]&=248,a[31]&=127,a[31]|=64,re(s,a),ee(e,s),o=0;o<32;o++)r[o+32]=e[o];return 0}var ie=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function oe(e,t){var r,n,i,o;for(n=63;n>=32;--n){for(r=0,i=n-32,o=n-12;i<o;++i)t[i]+=r-16*t[n]*ie[i-(n-32)],r=Math.floor((t[i]+128)/256),t[i]-=256*r;t[i]+=r,t[n]=0}for(r=0,i=0;i<32;i++)t[i]+=r-(t[31]>>4)*ie[i],r=t[i]>>8,t[i]&=255;for(i=0;i<32;i++)t[i]-=r*ie[i];for(n=0;n<32;n++)t[n+1]+=t[n]>>8,e[n]=255&t[n]}function ae(e){var t,r=new Float64Array(64);for(t=0;t<64;t++)r[t]=e[t];for(t=0;t<64;t++)e[t]=0;oe(e,r)}function se(e,r,n,i){var o,a,s=new Uint8Array(64),f=new Uint8Array(64),u=new Uint8Array(64),c=new Float64Array(64),h=[t(),t(),t(),t()];$(s,i,32),s[0]&=248,s[31]&=127,s[31]|=64;var d=n+64;for(o=0;o<n;o++)e[64+o]=r[o];for(o=0;o<32;o++)e[32+o]=s[32+o];for($(u,e.subarray(32),n+32),ae(u),re(h,u),ee(e,h),o=32;o<64;o++)e[o]=i[o];for($(f,e,n+64),ae(f),o=0;o<64;o++)c[o]=0;for(o=0;o<32;o++)c[o]=u[o];for(o=0;o<32;o++)for(a=0;a<32;a++)c[o+a]+=f[o]*s[a];return oe(e.subarray(32),c),d}function fe(e,r,n,i){var o,f=new Uint8Array(32),c=new Uint8Array(64),h=[t(),t(),t(),t()],d=[t(),t(),t(),t()];if(n<64)return-1;if(function(e,r){var n=t(),i=t(),o=t(),f=t(),c=t(),h=t(),d=t();return R(e[2],s),N(e[1],r),z(o,e[1]),U(f,o,u),D(o,o,e[2]),j(f,e[2],f),z(c,f),z(h,c),U(d,h,c),U(n,d,o),U(n,n,f),F(n,n),U(n,n,o),U(n,n,f),U(n,n,f),U(e[0],n,f),z(i,e[0]),U(i,i,f),C(i,o)&&U(e[0],e[0],l),z(i,e[0]),U(i,i,f),C(i,o)?-1:(O(e[0])===r[31]>>7&&D(e[0],a,e[0]),U(e[3],e[0],e[1]),0)}(d,i))return-1;for(o=0;o<n;o++)e[o]=r[o];for(o=0;o<32;o++)e[o+32]=i[o];if($(c,e,n),ae(c),te(h,d,c),re(d,r.subarray(32)),X(h,d),ee(f,h),n-=64,g(r,0,f,0)){for(o=0;o<n;o++)e[o]=0;return-1}for(o=0;o<n;o++)e[o]=r[o+64];return n}function ue(e,t){if(32!==e.length)throw new Error(\"bad key size\");if(24!==t.length)throw new Error(\"bad nonce size\")}function ce(){for(var e=0;e<arguments.length;e++)if(!(arguments[e]instanceof Uint8Array))throw new TypeError(\"unexpected type, use Uint8Array\")}function he(e){for(var t=0;t<e.length;t++)e[t]=0}e.lowlevel={crypto_core_hsalsa20:m,crypto_stream_xor:A,crypto_stream:S,crypto_stream_salsa20_xor:_,crypto_stream_salsa20:E,crypto_onetimeauth:k,crypto_onetimeauth_verify:M,crypto_verify_16:y,crypto_verify_32:g,crypto_secretbox:T,crypto_secretbox_open:I,crypto_scalarmult:K,crypto_scalarmult_base:H,crypto_box_beforenm:Y,crypto_box_afternm:W,crypto_box:function(e,t,r,n,i,o){var a=new Uint8Array(32);return Y(a,i,o),W(e,t,r,n,a)},crypto_box_open:function(e,t,r,n,i,o){var a=new Uint8Array(32);return Y(a,i,o),G(e,t,r,n,a)},crypto_box_keypair:V,crypto_hash:$,crypto_sign:se,crypto_sign_keypair:ne,crypto_sign_open:fe,crypto_secretbox_KEYBYTES:32,crypto_secretbox_NONCEBYTES:24,crypto_secretbox_ZEROBYTES:32,crypto_secretbox_BOXZEROBYTES:16,crypto_scalarmult_BYTES:32,crypto_scalarmult_SCALARBYTES:32,crypto_box_PUBLICKEYBYTES:32,crypto_box_SECRETKEYBYTES:32,crypto_box_BEFORENMBYTES:32,crypto_box_NONCEBYTES:24,crypto_box_ZEROBYTES:32,crypto_box_BOXZEROBYTES:16,crypto_sign_BYTES:64,crypto_sign_PUBLICKEYBYTES:32,crypto_sign_SECRETKEYBYTES:64,crypto_sign_SEEDBYTES:32,crypto_hash_BYTES:64,gf:t,D:u,L:ie,pack25519:B,unpack25519:N,M:U,A:j,S:z,Z:D,pow2523:F,add:X,set25519:R,modL:oe,scalarmult:te,scalarbase:re},e.randomBytes=function(e){var t=new Uint8Array(e);return n(t,e),t},e.secretbox=function(e,t,r){ce(e,t,r),ue(r,t);for(var n=new Uint8Array(32+e.length),i=new Uint8Array(n.length),o=0;o<e.length;o++)n[o+32]=e[o];return T(i,n,n.length,t,r),i.subarray(16)},e.secretbox.open=function(e,t,r){ce(e,t,r),ue(r,t);for(var n=new Uint8Array(16+e.length),i=new Uint8Array(n.length),o=0;o<e.length;o++)n[o+16]=e[o];return n.length<32||0!==I(i,n,n.length,t,r)?null:i.subarray(32)},e.secretbox.keyLength=32,e.secretbox.nonceLength=24,e.secretbox.overheadLength=16,e.scalarMult=function(e,t){if(ce(e,t),32!==e.length)throw new Error(\"bad n size\");if(32!==t.length)throw new Error(\"bad p size\");var r=new Uint8Array(32);return K(r,e,t),r},e.scalarMult.base=function(e){if(ce(e),32!==e.length)throw new Error(\"bad n size\");var t=new Uint8Array(32);return H(t,e),t},e.scalarMult.scalarLength=32,e.scalarMult.groupElementLength=32,e.box=function(t,r,n,i){var o=e.box.before(n,i);return e.secretbox(t,r,o)},e.box.before=function(e,t){ce(e,t),function(e,t){if(32!==e.length)throw new Error(\"bad public key size\");if(32!==t.length)throw new Error(\"bad secret key size\")}(e,t);var r=new Uint8Array(32);return Y(r,e,t),r},e.box.after=e.secretbox,e.box.open=function(t,r,n,i){var o=e.box.before(n,i);return e.secretbox.open(t,r,o)},e.box.open.after=e.secretbox.open,e.box.keyPair=function(){var e=new Uint8Array(32),t=new Uint8Array(32);return V(e,t),{publicKey:e,secretKey:t}},e.box.keyPair.fromSecretKey=function(e){if(ce(e),32!==e.length)throw new Error(\"bad secret key size\");var t=new Uint8Array(32);return H(t,e),{publicKey:t,secretKey:new Uint8Array(e)}},e.box.publicKeyLength=32,e.box.secretKeyLength=32,e.box.sharedKeyLength=32,e.box.nonceLength=24,e.box.overheadLength=e.secretbox.overheadLength,e.sign=function(e,t){if(ce(e,t),64!==t.length)throw new Error(\"bad secret key size\");var r=new Uint8Array(64+e.length);return se(r,e,e.length,t),r},e.sign.open=function(e,t){if(ce(e,t),32!==t.length)throw new Error(\"bad public key size\");var r=new Uint8Array(e.length),n=fe(r,e,e.length,t);if(n<0)return null;for(var i=new Uint8Array(n),o=0;o<i.length;o++)i[o]=r[o];return i},e.sign.detached=function(t,r){for(var n=e.sign(t,r),i=new Uint8Array(64),o=0;o<i.length;o++)i[o]=n[o];return i},e.sign.detached.verify=function(e,t,r){if(ce(e,t,r),64!==t.length)throw new Error(\"bad signature size\");if(32!==r.length)throw new Error(\"bad public key size\");var n,i=new Uint8Array(64+e.length),o=new Uint8Array(64+e.length);for(n=0;n<64;n++)i[n]=t[n];for(n=0;n<e.length;n++)i[n+64]=e[n];return fe(o,i,i.length,r)>=0},e.sign.keyPair=function(){var e=new Uint8Array(32),t=new Uint8Array(64);return ne(e,t),{publicKey:e,secretKey:t}},e.sign.keyPair.fromSecretKey=function(e){if(ce(e),64!==e.length)throw new Error(\"bad secret key size\");for(var t=new Uint8Array(32),r=0;r<t.length;r++)t[r]=e[32+r];return{publicKey:t,secretKey:new Uint8Array(e)}},e.sign.keyPair.fromSeed=function(e){if(ce(e),32!==e.length)throw new Error(\"bad seed size\");for(var t=new Uint8Array(32),r=new Uint8Array(64),n=0;n<32;n++)r[n]=e[n];return ne(t,r,!0),{publicKey:t,secretKey:r}},e.sign.publicKeyLength=32,e.sign.secretKeyLength=64,e.sign.seedLength=32,e.sign.signatureLength=64,e.hash=function(e){ce(e);var t=new Uint8Array(64);return $(t,e,e.length),t},e.hash.hashLength=64,e.verify=function(e,t){return ce(e,t),0!==e.length&&0!==t.length&&(e.length===t.length&&0===b(e,0,t,0,e.length))},e.setPRNG=function(e){n=e},function(){var t=\"undefined\"!=typeof self?self.crypto||self.msCrypto:null;if(t&&t.getRandomValues){e.setPRNG((function(e,r){var n,i=new Uint8Array(r);for(n=0;n<r;n+=65536)t.getRandomValues(i.subarray(n,n+Math.min(r-n,65536)));for(n=0;n<r;n++)e[n]=i[n];he(i)}))}else(t=r(248))&&t.randomBytes&&e.setPRNG((function(e,r){var n,i=t.randomBytes(r);for(n=0;n<r;n++)e[n]=i[n];he(i)}))}()}(e.exports?e.exports:self.nacl=self.nacl||{})},function(e,t){},function(e,t,r){(function(t){!function(t,r){\"use strict\";e.exports?e.exports=r():(t.nacl||(t.nacl={}),t.nacl.util=r())}(this,(function(){\"use strict\";var e={};function r(e){if(!/^(?:[A-Za-z0-9+\\/]{2}[A-Za-z0-9+\\/]{2})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=)?$/.test(e))throw new TypeError(\"invalid encoding\")}return e.decodeUTF8=function(e){if(\"string\"!=typeof e)throw new TypeError(\"expected string\");var t,r=unescape(encodeURIComponent(e)),n=new Uint8Array(r.length);for(t=0;t<r.length;t++)n[t]=r.charCodeAt(t);return n},e.encodeUTF8=function(e){var t,r=[];for(t=0;t<e.length;t++)r.push(String.fromCharCode(e[t]));return decodeURIComponent(escape(r.join(\"\")))},\"undefined\"==typeof atob?void 0!==t.from?(e.encodeBase64=function(e){return t.from(e).toString(\"base64\")},e.decodeBase64=function(e){return r(e),new Uint8Array(Array.prototype.slice.call(t.from(e,\"base64\"),0))}):(e.encodeBase64=function(e){return new t(e).toString(\"base64\")},e.decodeBase64=function(e){return r(e),new Uint8Array(Array.prototype.slice.call(new t(e,\"base64\"),0))}):(e.encodeBase64=function(e){var t,r=[],n=e.length;for(t=0;t<n;t++)r.push(String.fromCharCode(e[t]));return btoa(r.join(\"\"))},e.decodeBase64=function(e){r(e);var t,n=atob(e),i=new Uint8Array(n.length);for(t=0;t<n.length;t++)i[t]=n.charCodeAt(t);return i}),e}))}).call(this,r(1).Buffer)},function(e,t,r){(function(t){!function(r){\"use strict\";var n=function(e){setTimeout(e,0)};void 0!==t&&t&&\"function\"==typeof t.nextTick&&(n=t.nextTick),e.exports=function(e){var t={capacity:e||1,current:0,queue:[],firstHere:!1,take:function(){if(!1===t.firstHere){t.current++,t.firstHere=!0;var e=1}else e=0;var r={n:1};\"function\"==typeof arguments[0]?r.task=arguments[0]:r.n=arguments[0],arguments.length>=2&&(\"function\"==typeof arguments[1]?r.task=arguments[1]:r.n=arguments[1]);var n=r.task;if(r.task=function(){n(t.leave)},t.current+r.n-e>t.capacity)return 1===e&&(t.current--,t.firstHere=!1),t.queue.push(r);t.current+=r.n-e,r.task(t.leave),1===e&&(t.firstHere=!1)},leave:function(e){if(e=e||1,t.current-=e,t.queue.length){var r=t.queue[0];r.n+t.current>t.capacity||(t.queue.shift(),t.current+=r.n,n(r.task))}else if(t.current<0)throw new Error(\"leave called too many times.\")},available:function(e){return e=e||1,t.current+e<=t.capacity}};return t}}()}).call(this,r(3))},function(e,t,r){\"use strict\";var n=r(46);e.exports=function(e,t,r){e.sendAsync(n({method:\"eth_estimateGas\",params:[t]}),(function(e,t){if(e)return\"no contract code at given address\"===e.message?r(null,\"0xcf08\"):r(e);r(null,t.result)}))}},function(e,t,r){\"use strict\";(function(t){var n=r(14),i=r(253),o=n.BN,a=new o(\"7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0\",16),s=function(){function e(r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),r=r||{};var i=[{name:\"nonce\",length:32,allowLess:!0,default:new t([])},{name:\"gasPrice\",length:32,allowLess:!0,default:new t([])},{name:\"gasLimit\",alias:\"gas\",length:32,allowLess:!0,default:new t([])},{name:\"to\",allowZero:!0,length:20,default:new t([])},{name:\"value\",length:32,allowLess:!0,default:new t([])},{name:\"data\",alias:\"input\",allowZero:!0,default:new t([])},{name:\"v\",allowZero:!0,default:new t([28])},{name:\"r\",length:32,allowZero:!0,allowLess:!0,default:new t([])},{name:\"s\",length:32,allowZero:!0,allowLess:!0,default:new t([])}];n.defineProperties(this,i,r),Object.defineProperty(this,\"from\",{enumerable:!0,configurable:!0,get:this.getSenderAddress.bind(this)});var o=n.bufferToInt(this.v),a=Math.floor((o-35)/2);a<0&&(a=0),this._chainId=a||r.chainId||0,this._homestead=!0}return e.prototype.toCreationAddress=function(){return\"\"===this.to.toString(\"hex\")},e.prototype.hash=function(e){void 0===e&&(e=!0);var t=void 0;if(e)t=this.raw;else if(this._chainId>0){var r=this.raw.slice();this.v=this._chainId,this.r=0,this.s=0,t=this.raw,this.raw=r}else t=this.raw.slice(0,6);return n.rlphash(t)},e.prototype.getChainId=function(){return this._chainId},e.prototype.getSenderAddress=function(){if(this._from)return this._from;var e=this.getSenderPublicKey();return this._from=n.publicToAddress(e),this._from},e.prototype.getSenderPublicKey=function(){if(!(this._senderPubKey&&this._senderPubKey.length||this.verifySignature()))throw new Error(\"Invalid Signature\");return this._senderPubKey},e.prototype.verifySignature=function(){var e=this.hash(!1);if(this._homestead&&1===new o(this.s).cmp(a))return!1;try{var t=n.bufferToInt(this.v);this._chainId>0&&(t-=2*this._chainId+8),this._senderPubKey=n.ecrecover(e,t,this.r,this.s)}catch(e){return!1}return!!this._senderPubKey},e.prototype.sign=function(e){var t=this.hash(!1),r=n.ecsign(t,e);this._chainId>0&&(r.v+=2*this._chainId+8),Object.assign(this,r)},e.prototype.getDataFee=function(){for(var e=this.raw[5],t=new o(0),r=0;r<e.length;r++)0===e[r]?t.iaddn(i.txDataZeroGas.v):t.iaddn(i.txDataNonZeroGas.v);return t},e.prototype.getBaseFee=function(){var e=this.getDataFee().iaddn(i.txGas.v);return this._homestead&&this.toCreationAddress()&&e.iaddn(i.txCreation.v),e},e.prototype.getUpfrontCost=function(){return new o(this.gasLimit).imul(new o(this.gasPrice)).iadd(new o(this.value))},e.prototype.validate=function(e){var t=[];return this.verifySignature()||t.push(\"Invalid Signature\"),this.getBaseFee().cmp(new o(this.gasLimit))>0&&t.push([\"gas limit is too low. Need at least \"+this.getBaseFee()]),void 0===e||!1===e?0===t.length:t.join(\" \")},e}();e.exports=s}).call(this,r(1).Buffer)},function(e){e.exports={genesisGasLimit:{v:5e3,d:\"Gas limit of the Genesis block.\"},genesisDifficulty:{v:17179869184,d:\"Difficulty of the Genesis block.\"},genesisNonce:{v:\"0x0000000000000042\",d:\"the geneis nonce\"},genesisExtraData:{v:\"0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa\",d:\"extra data \"},genesisHash:{v:\"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3\",d:\"genesis hash\"},genesisStateRoot:{v:\"0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544\",d:\"the genesis state root\"},minGasLimit:{v:5e3,d:\"Minimum the gas limit may ever be.\"},gasLimitBoundDivisor:{v:1024,d:\"The bound divisor of the gas limit, used in update calculations.\"},minimumDifficulty:{v:131072,d:\"The minimum that the difficulty may ever be.\"},difficultyBoundDivisor:{v:2048,d:\"The bound divisor of the difficulty, used in the update calculations.\"},durationLimit:{v:13,d:\"The decision boundary on the blocktime duration used to determine whether difficulty should go up or not.\"},maximumExtraDataSize:{v:32,d:\"Maximum size extra data may be after Genesis.\"},epochDuration:{v:3e4,d:\"Duration between proof-of-work epochs.\"},stackLimit:{v:1024,d:\"Maximum size of VM stack allowed.\"},callCreateDepth:{v:1024,d:\"Maximum depth of call/create stack.\"},tierStepGas:{v:[0,2,3,5,8,10,20],d:\"Once per operation, for a selection of them.\"},expGas:{v:10,d:\"Once per EXP instuction.\"},expByteGas:{v:10,d:\"Times ceil(log256(exponent)) for the EXP instruction.\"},sha3Gas:{v:30,d:\"Once per SHA3 operation.\"},sha3WordGas:{v:6,d:\"Once per word of the SHA3 operation's data.\"},sloadGas:{v:50,d:\"Once per SLOAD operation.\"},sstoreSetGas:{v:2e4,d:\"Once per SSTORE operation if the zeroness changes from zero.\"},sstoreResetGas:{v:5e3,d:\"Once per SSTORE operation if the zeroness does not change from zero.\"},sstoreRefundGas:{v:15e3,d:\"Once per SSTORE operation if the zeroness changes to zero.\"},jumpdestGas:{v:1,d:\"Refunded gas, once per SSTORE operation if the zeroness changes to zero.\"},logGas:{v:375,d:\"Per LOG* operation.\"},logDataGas:{v:8,d:\"Per byte in a LOG* operation's data.\"},logTopicGas:{v:375,d:\"Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas.\"},createGas:{v:32e3,d:\"Once per CREATE operation & contract-creation transaction.\"},callGas:{v:40,d:\"Once per CALL operation & message call transaction.\"},callStipend:{v:2300,d:\"Free gas given at beginning of call.\"},callValueTransferGas:{v:9e3,d:\"Paid for CALL when the value transfor is non-zero.\"},callNewAccountGas:{v:25e3,d:\"Paid for CALL when the destination address didn't exist prior.\"},suicideRefundGas:{v:24e3,d:\"Refunded following a suicide operation.\"},memoryGas:{v:3,d:\"Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL.\"},quadCoeffDiv:{v:512,d:\"Divisor for the quadratic particle of the memory cost equation.\"},createDataGas:{v:200,d:\"\"},txGas:{v:21e3,d:\"Per transaction. NOTE: Not payable on data of calls between transactions.\"},txCreation:{v:32e3,d:\"the cost of creating a contract via tx\"},txDataZeroGas:{v:4,d:\"Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions.\"},txDataNonZeroGas:{v:68,d:\"Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions.\"},copyGas:{v:3,d:\"Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added.\"},ecrecoverGas:{v:3e3,d:\"\"},sha256Gas:{v:60,d:\"\"},sha256WordGas:{v:12,d:\"\"},ripemd160Gas:{v:600,d:\"\"},ripemd160WordGas:{v:120,d:\"\"},identityGas:{v:15,d:\"\"},identityWordGas:{v:3,d:\"\"},minerReward:{v:\"5000000000000000000\",d:\"the amount a miner get rewarded for mining a block\"},ommerReward:{v:\"625000000000000000\",d:\"The amount of wei a miner of an uncle block gets for being inculded in the blockchain\"},niblingReward:{v:\"156250000000000000\",d:\"the amount a miner gets for inculding a uncle\"},homeSteadForkNumber:{v:115e4,d:\"the block that the Homestead fork started at\"},homesteadRepriceForkNumber:{v:2463e3,d:\"the block that the Homestead Reprice (EIP150) fork started at\"},timebombPeriod:{v:1e5,d:\"Exponential difficulty timebomb period\"},freeBlockPeriod:{v:2}}},function(e,t,r){const n=r(41),i=r(95),o=r(48),a=r(94),{unsafeRandomBytes:s,incrementHexInt:f}=r(23),u=r(50);function c(e){return{hash:e.hash,parentHash:e.parentHash,sha3Uncles:e.sha3Uncles,miner:e.miner,stateRoot:e.stateRoot,transactionsRoot:e.transactionsRoot,receiptsRoot:e.receiptsRoot,logsBloom:e.logsBloom,difficulty:e.difficulty,number:e.number,gasLimit:e.gasLimit,gasUsed:e.gasUsed,nonce:e.nonce,mixHash:e.mixHash,timestamp:e.timestamp,extraData:e.extraData}}e.exports=function({blockTracker:e,provider:t}){const r={},h=a({blockTracker:e,provider:t});let d=!1;const l=new n,p=i({eth_subscribe:o((async function(n,i){if(d)throw new Error(\"SubscriptionManager - attempting to use after destroying\");const o=n.params[0],a=s(16);let l;switch(o){case\"newHeads\":l=function({subId:r}){const n={type:o,destroy:async()=>{e.removeListener(\"sync\",n.update)},update:async({oldBlock:e,newBlock:n})=>{const i=n,o=f(e);(await u({provider:t,fromBlock:o,toBlock:i})).map(c).forEach(e=>{b(r,e)})}};return e.on(\"sync\",n.update),n}({subId:a});break;case\"logs\":const r=n.params[1],i=await h.newLogFilter(r);l=function({subId:e,filter:t}){t.on(\"update\",t=>b(e,t));return{type:o,destroy:async()=>await h.uninstallFilter(t.idHex)}}({subId:a,filter:i});break;default:throw new Error(`SubscriptionManager - unsupported subscription type \"${o}\"`)}return r[a]=l,void(i.result=a)})),eth_unsubscribe:o((async function(e,t){if(d)throw new Error(\"SubscriptionManager - attempting to use after destroying\");const n=e.params[0],i=r[n];if(!i)return void(t.result=!1);delete r[n],await i.destroy(),t.result=!0}))});return p.destroy=function(){l.removeAllListeners();for(const e in r)r[e].destroy(),delete r[e];d=!0},{events:l,middleware:p};function b(e,t){l.emit(\"notification\",{jsonrpc:\"2.0\",method:\"eth_subscription\",params:{subscription:e,result:t}})}}},function(e,t){e.exports={Blockchain:class{constructor(e,t){this.name=e,this.netID=t}toJSON(){return JSON.parse('{ \"name\":\"'+this.name+'\", \"netID\":\"'+this.netID+'\"}')}}}},function(e,t,r){const n=r(51),i=r(103).Node,o=r(53);e.exports={Dispatch:class{constructor(e){this.configuration=e,this.axiosInstance=n.create({baseURL:o.dispatchNodeURL,path:o.dispatchPath,timeout:this.configuration.requestTimeOut,headers:{\"Content-Type\":\"application/json\"}})}blockchainsJSON(){var e=[];return this.configuration.blockchains.forEach(t=>{e.push(t)}),e}async retrieveServiceNodes(e){try{var t;if(null!=(t=await this.axiosInstance.post(o.dispatchPath,{DevID:this.configuration.devID,Blockchains:this.blockchainsJSON()}))&&200==t.status&&null!=t.data){var r=this.parseDispatchResponse(t.data);return e?void e(r,null):r}return e?void e(null,new Error(\"Failed to retrieve service nodes with error: \"+t.data)):new Error(\"Failed to retrieve service nodes with error: \"+t.data)}catch(t){return e?void e(null,new Error(\"Failed to retrieve service nodes with error: \"+t)):new Error(\"Failed to retrieve service nodes with error: \"+t)}}parseDispatchResponse(e){try{var t=[];if(Array.isArray(e))e.forEach(e=>{var r=e.name,n=e.netid;e.ips&&e.ips.forEach(e=>{var o=new i(r,n,e);t.push(o)})});else{var r=e.name,n=e.netid;e.ips&&e.ips.forEach(e=>{var o=new i(r,n,e);t.push(o)})}return t}catch(e){return new Error(\"Failed to parsed service nodes with error: \"+e)}}}}},function(e,t,r){\"use strict\";var n=r(7),i=r(98),o=r(259),a=r(52);function s(e){var t=new o(e),r=i(o.prototype.request,t);return n.extend(r,o.prototype,t),n.extend(r,t),r}var f=s(a);f.Axios=o,f.create=function(e){return s(n.merge(a,e))},f.Cancel=r(102),f.CancelToken=r(272),f.isCancel=r(101),f.all=function(e){return Promise.all(e)},f.spread=r(273),e.exports=f,e.exports.default=f},function(e,t){\n/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\ne.exports=function(e){return null!=e&&null!=e.constructor&&\"function\"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},function(e,t,r){\"use strict\";var n=r(52),i=r(7),o=r(267),a=r(268);function s(e){this.defaults=e,this.interceptors={request:new o,response:new o}}s.prototype.request=function(e){\"string\"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),(e=i.merge(n,{method:\"get\"},this.defaults,e)).method=e.method.toLowerCase();var t=[a,void 0],r=Promise.resolve(e);for(this.interceptors.request.forEach((function(e){t.unshift(e.fulfilled,e.rejected)})),this.interceptors.response.forEach((function(e){t.push(e.fulfilled,e.rejected)}));t.length;)r=r.then(t.shift(),t.shift());return r},i.forEach([\"delete\",\"get\",\"head\",\"options\"],(function(e){s.prototype[e]=function(t,r){return this.request(i.merge(r||{},{method:e,url:t}))}})),i.forEach([\"post\",\"put\",\"patch\"],(function(e){s.prototype[e]=function(t,r,n){return this.request(i.merge(n||{},{method:e,url:t,data:r}))}})),e.exports=s},function(e,t,r){\"use strict\";var n=r(7);e.exports=function(e,t){n.forEach(e,(function(r,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=r,delete e[n])}))}},function(e,t,r){\"use strict\";var n=r(100);e.exports=function(e,t,r){var i=r.config.validateStatus;r.status&&i&&!i(r.status)?t(n(\"Request failed with status code \"+r.status,r.config,null,r.request,r)):e(r)}},function(e,t,r){\"use strict\";e.exports=function(e,t,r,n,i){return e.config=t,r&&(e.code=r),e.request=n,e.response=i,e}},function(e,t,r){\"use strict\";var n=r(7);function i(e){return encodeURIComponent(e).replace(/%40/gi,\"@\").replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}e.exports=function(e,t,r){if(!t)return e;var o;if(r)o=r(t);else if(n.isURLSearchParams(t))o=t.toString();else{var a=[];n.forEach(t,(function(e,t){null!=e&&(n.isArray(e)?t+=\"[]\":e=[e],n.forEach(e,(function(e){n.isDate(e)?e=e.toISOString():n.isObject(e)&&(e=JSON.stringify(e)),a.push(i(t)+\"=\"+i(e))})))})),o=a.join(\"&\")}return o&&(e+=(-1===e.indexOf(\"?\")?\"?\":\"&\")+o),e}},function(e,t,r){\"use strict\";var n=r(7),i=[\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"];e.exports=function(e){var t,r,o,a={};return e?(n.forEach(e.split(\"\\n\"),(function(e){if(o=e.indexOf(\":\"),t=n.trim(e.substr(0,o)).toLowerCase(),r=n.trim(e.substr(o+1)),t){if(a[t]&&i.indexOf(t)>=0)return;a[t]=\"set-cookie\"===t?(a[t]?a[t]:[]).concat([r]):a[t]?a[t]+\", \"+r:r}})),a):a}},function(e,t,r){\"use strict\";var n=r(7);e.exports=n.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement(\"a\");function i(e){var n=e;return t&&(r.setAttribute(\"href\",n),n=r.href),r.setAttribute(\"href\",n),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,\"\"):\"\",host:r.host,search:r.search?r.search.replace(/^\\?/,\"\"):\"\",hash:r.hash?r.hash.replace(/^#/,\"\"):\"\",hostname:r.hostname,port:r.port,pathname:\"/\"===r.pathname.charAt(0)?r.pathname:\"/\"+r.pathname}}return e=i(window.location.href),function(t){var r=n.isString(t)?i(t):t;return r.protocol===e.protocol&&r.host===e.host}}():function(){return!0}},function(e,t,r){\"use strict\";var n=r(7);e.exports=n.isStandardBrowserEnv()?{write:function(e,t,r,i,o,a){var s=[];s.push(e+\"=\"+encodeURIComponent(t)),n.isNumber(r)&&s.push(\"expires=\"+new Date(r).toGMTString()),n.isString(i)&&s.push(\"path=\"+i),n.isString(o)&&s.push(\"domain=\"+o),!0===a&&s.push(\"secure\"),document.cookie=s.join(\"; \")},read:function(e){var t=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+e+\")=([^;]*)\"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,\"\",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(e,t,r){\"use strict\";var n=r(7);function i(){this.handlers=[]}i.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},i.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},i.prototype.forEach=function(e){n.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=i},function(e,t,r){\"use strict\";var n=r(7),i=r(269),o=r(101),a=r(52),s=r(270),f=r(271);function u(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){return u(e),e.baseURL&&!s(e.url)&&(e.url=f(e.baseURL,e.url)),e.headers=e.headers||{},e.data=i(e.data,e.headers,e.transformRequest),e.headers=n.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),n.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],(function(t){delete e.headers[t]})),(e.adapter||a.adapter)(e).then((function(t){return u(e),t.data=i(t.data,t.headers,e.transformResponse),t}),(function(t){return o(t)||(u(e),t&&t.response&&(t.response.data=i(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},function(e,t,r){\"use strict\";var n=r(7);e.exports=function(e,t,r){return n.forEach(r,(function(r){e=r(e,t)})),e}},function(e,t,r){\"use strict\";e.exports=function(e){return/^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(e)}},function(e,t,r){\"use strict\";e.exports=function(e,t){return t?e.replace(/\\/+$/,\"\")+\"/\"+t.replace(/^\\/+/,\"\"):e}},function(e,t,r){\"use strict\";var n=r(102);function i(e){if(\"function\"!=typeof e)throw new TypeError(\"executor must be a function.\");var t;this.promise=new Promise((function(e){t=e}));var r=this;e((function(e){r.reason||(r.reason=new n(e),t(r.reason))}))}i.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},i.source=function(){var e;return{token:new i((function(t){e=t})),cancel:e}},e.exports=i},function(e,t,r){\"use strict\";e.exports=function(e){return function(t){return e.apply(null,t)}}},function(e,t){e.exports={Relay:class{constructor(e,t,r,n){this.blockchain=e,this.netID=t,this.data=r,this.configuration=n}toJSON(){return{Blockchain:this.blockchain,NetID:this.netID,Data:this.data,DevID:this.configuration.devID}}isValid(){for(var e in this)if(!this.hasOwnProperty(e)||\"\"==this[e])return!1;return!0}}}},function(e,t,r){const n=r(51),i=r(53);e.exports={Report:class{constructor(e,t,r){this.ip=e,this.message=t,this.configuration=r}toJSON(){return{IP:this.ip,Message:this.message}}isValid(){for(var e in this)if(!this.hasOwnProperty(e)||\"\"==this[e])return!1;return!0}async send(e){const t=n.create({baseURL:i.dispatchNodeURL,timeout:this.configuration.requestTimeOut,headers:{\"Content-Type\":\"application/json\"}});var r=await t.post(i.reportPath,this.toJSON());return 200==r.status&&null!=r.data?e?void e(null,r.data):r.data:e?void e(new Error(\"Failed to send report with error: \"+r.data)):new Error(\"Failed to send report with error: \"+r.data)}}}},function(e,t){e.exports={Wallet:class{constructor(e,t,r,n,i){this.address=e,this.privateKey=t,this.network=r,this.networkID=n,this.data=i}}}},function(e,t,r){const n=r(97),i=n.Blockchain,o=n.Dispatch,a=n.Relay,s=n.Report;class f{constructor(e,t,r,n){this.devID=e,this.blockchains=t,this.maxNodes=r||5,this.nodes=[],this.requestTimeOut=n||1e4,this.dispatch=null}nodesIsEmpty(){return null==this.nodes||0==this.nodes.length}}e.exports=class{constructor(e){var t=[];if(null==e.devID||null==e.networkName||null==e.netIDs)return new Error(\"Invalid number of arguments\");if(Array.isArray(e.netIDs))e.netIDs.forEach(r=>{var n=new i(e.networkName,r);t.push(n.toJSON())});else{var r=new i(e.networkName,e.netIDs);t.push(r.toJSON())}this.configuration=new f(e.devID,t,e.maxNodes||5,e.requestTimeOut||1e4)}createRelay(e,t,r){return new a(e,t,\"string\"==typeof r?r:JSON.stringify(r),this.configuration)}createReport(e,t){return new s(e,t,this.configuration)}getDispatch(){return null==this.dispatch&&(this.dispatch=new o(this.configuration)),this.dispatch}async getNode(e,t){try{var r=[];if(this.configuration.nodesIsEmpty()){var n=await this.retrieveNodes();if(n instanceof Error==1)throw n;this.configuration.nodes=n}return this.configuration.nodes.forEach(n=>{n.isEqual(e,t)&&r.push(n)}),r.length<=0?null:r[Math.floor(Math.random()*r.length)]}catch(e){return null}}async sendReport(e,t){try{if(null==e)throw new Error(\"Report is null\");if(!e.isValid())throw new Error(\"One or more Report properties are empty.\");var r=await e.send();return r instanceof Error==0?t?void t(null,r):r:t?void t(r):r}catch(e){return t?void t(e):e}}async sendRelay(e,t){try{if(null==e||null==e.data)return t?void t(new Error(\"Relay is null or data field is missing\")):new Error(\"Relay is null or data field is missing\");if(!e.isValid())return t?void t(new Error(\"Relay is missing a property, please verify all properties.\")):new Error(\"Relay is missing a property, please verify all properties.\");var r=await this.getNode(e.netID,e.blockchain);if(null==r)return t?void t(new Error(\"Node is empty.\")):new Error(\"Node is empty.\");var n=await r.sendRelay(e);return n instanceof Error==0?t?void t(null,n):n:t?void t(n):n}catch(e){return t?void t(new Error(\"Failed to send relay with error: \"+e)):new Error(\"Failed to send relay with error: \"+e)}}async retrieveNodes(e){try{var t=this.getDispatch(),r=await t.retrieveServiceNodes();return r instanceof Error==0&&0!=r.length?(this.configuration.nodes=r,e?void e(null,r):r):e?void e(new Error(\"Failed to retrieve a list of nodes.\"),null):new Error(\"Failed to retrieve a list of nodes.\")}catch(t){return e?void e(new Error(\"Failed to retrieve a list of nodes with error: \"+t),null):new Error(\"Failed to retrieve a list of nodes with error: \"+t)}}}},function(e,t,r){\"use strict\";r.r(t);var n=r(104),i=r.n(n),o=r(54),a=r.n(o),s=r(105),f=r.n(s),u=r(106),c=r.n(u),h=r(107),d=r.n(h),l=r(55),p=r.n(l),b=r(108),y=r.n(b),g=r(109),v=r.n(g);function m(e,t){var r=\"string\"==typeof e?Object.assign({},w[e]):e;if(\"object\"!=typeof r)throw new Error(\"[Portis] illegal 'network' parameter. Read more about it here: https://docs.portis.io/#/configuration?id=network\");if(!r.nodeUrl)throw new Error(\"[Portis] 'nodeUrl' is required. Read more about it here: https://docs.portis.io/#/configuration?id=network\");if(t&&!r.gasRelayHubAddress)throw new Error(\"[Portis] can't find default gas relay hub for \"+e);return\"string\"!=typeof e||t||delete r.gasRelayHubAddress,r}var w={mainnet:{nodeUrl:\"https://mainnet.infura.io/v3/faa4639b090f46499f29d894da0551a0\",chainId:\"1\",gasRelayHubAddress:\"0xD216153c06E857cD7f72665E0aF1d7D82172F494\"},ropsten:{nodeUrl:\"https://ropsten.infura.io/v3/faa4639b090f46499f29d894da0551a0\",chainId:\"3\",gasRelayHubAddress:\"0xD216153c06E857cD7f72665E0aF1d7D82172F494\"},rinkeby:{nodeUrl:\"https://rinkeby.infura.io/v3/faa4639b090f46499f29d894da0551a0\",chainId:\"4\",gasRelayHubAddress:\"0xD216153c06E857cD7f72665E0aF1d7D82172F494\"},goerli:{nodeUrl:\"https://goerli.prylabs.net\",chainId:\"5\"},ubiq:{nodeUrl:\"https://rpc1.ubiqscan.io\",chainId:\"8\"},thundercoreTestnet:{nodeUrl:\"https://testnet-rpc.thundercore.com:8544\",chainId:\"18\"},orchid:{nodeUrl:\"https://public-node.rsk.co\",chainId:\"30\"},orchidTestnet:{nodeUrl:\"https://public-node.testnet.rsk.co\",chainId:\"31\"},kovan:{nodeUrl:\"https://kovan.infura.io/v3/faa4639b090f46499f29d894da0551a0\",chainId:\"42\",gasRelayHubAddress:\"0xD216153c06E857cD7f72665E0aF1d7D82172F494\"},classic:{nodeUrl:\"https://ethereumclassic.network\",chainId:\"61\"},sokol:{nodeUrl:\"https://sokol.poa.network\",chainId:\"77\"},core:{nodeUrl:\"https://core.poa.network\",chainId:\"99\"},xdai:{nodeUrl:\"https://dai.poa.network\",chainId:\"100\",gasRelayHubAddress:\"0xD216153c06E857cD7f72665E0aF1d7D82172F494\"},thundercore:{nodeUrl:\"https://mainnet-rpc.thundercore.com\",chainId:\"108\"},fuse:{nodeUrl:\"https://rpc.fusenet.io\",chainId:\"122\"},lightstreams:{nodeUrl:\"https://node.mainnet.lightstreams.io\",chainId:\"163\"},matic:{nodeUrl:\"https://rpc-mainnet.matic.network\",chainId:\"137\"},maticMumbai:{nodeUrl:\"https://rpc-mumbai.matic.today\",chainId:\"80001\"},maticAlpha:{nodeUrl:\"https://alpha.ethereum.matic.network\",chainId:\"4626\"},maticTestnet:{nodeUrl:\"https://testnet2.matic.network\",chainId:\"8995\"}},_=function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{f(n.next(e))}catch(e){o(e)}}function s(e){try{f(n.throw(e))}catch(e){o(e)}}function f(e){e.done?i(e.value):new r((function(t){t(e.value)})).then(a,s)}f((n=n.apply(e,t||[])).next())}))},E=function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},\"function\"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(r)throw new TypeError(\"Generator is already executing.\");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}},S=r(14),A=S.addHexPrefix,x=S.stripHexPrefix,k=S.BN;function M(e,t){return _(this,void 0,void 0,(function(){var r,n,i,o,a;return E(this,(function(s){switch(s.label){case 0:return[4,e.getBlockByNumber(\"latest\",!1)];case 1:return r=s.sent(),[4,T(e,t,r.gasLimit)];case 2:if(n=s.sent(),i=n.safeGas,o=n.simpleSend,a=n.gasLimitSpecified,o||a)return[2,i];s.label=3;case 3:return s.trys.push([3,5,,6]),[4,I(e,t,r.gasLimit,i)];case 4:return[2,s.sent()];case 5:return s.sent(),[2,i];case 6:return[2]}}))}))}function T(e,t,r){return _(this,void 0,void 0,(function(){var n,i,o;return E(this,(function(a){switch(a.label){case 0:return Boolean(t.gas)?[2,{safeGas:t.gas,simpleSend:!1,gasLimitSpecified:!0}]:(n=t.to,Boolean(n)?[4,e.getCode(n)]:[3,2]);case 1:if(i=a.sent(),!i||\"0x\"===i||\"0x0\"===i){if(t.data)throw new Error(\"Trying to call a function on a non-contract address\");return[2,{safeGas:\"0x5208\",simpleSend:!0,gasLimitSpecified:!1}]}a.label=2;case 2:return o=P(r),s=o,f=20,u=new k(19),c=new k(f),[2,{safeGas:L(s.mul(u).div(c)),simpleSend:!1,gasLimitSpecified:!1}]}var s,f,u,c}))}))}function I(e,t,r,n){return _(this,void 0,void 0,(function(){var i;return E(this,(function(o){switch(o.label){case 0:return t.gas=n,i=A,[4,e.estimateGas(t)];case 1:return[2,R(i.apply(void 0,[o.sent()]),r)]}}))}))}function R(e,t){var r=P(e),n=P(t).muln(.9),i=r.muln(1.5);return r.gt(n)?L(r):i.lt(n)?L(i):L(n)}function P(e){return new k(x(e),16)}function L(e){return A(e.toString(16))}var B=function(){function e(e){this.provider=e}return e.prototype.getBlockByNumber=function(e,t){return this.sendAsync(\"eth_getBlockByNumber\",e,t)},e.prototype.getCode=function(e,t){return void 0===t&&(t=\"latest\"),this.sendAsync(\"eth_getCode\",e,t)},e.prototype.estimateGas=function(e){return this.sendAsync(\"eth_estimateGas\",e)},e.prototype.sendAsync=function(e){for(var t=this,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return new Promise((function(n,i){t.provider.sendAsync({id:42,jsonrpc:\"2.0\",method:e,params:r},(function(e,t){e?i(e):n(t.result)}))}))},e}(),C=!1;function O(){return new Promise((function(e){C?e():[\"loaded\",\"interactive\",\"complete\"].indexOf(document.readyState)>-1?(C=!0,e()):window.addEventListener(\"load\",(function(){C=!0,e()}),!1)}))}var N=r(56),j=r.n(N),D=function(e,t,r,n){return new(r||(r=Promise))((function(i,o){function a(e){try{f(n.next(e))}catch(e){o(e)}}function s(e){try{f(n.throw(e))}catch(e){o(e)}}function f(e){e.done?i(e.value):new r((function(t){t(e.value)})).then(a,s)}f((n=n.apply(e,t||[])).next())}))},U=function(e,t){var r,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},\"function\"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(r)throw new TypeError(\"Generator is already executing.\");for(;a;)try{if(r=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(e){o=[6,e],n=0}finally{r=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,s])}}},z=[\"email\",\"reputation\"],q=document.createElement(\"iframe\");q.className=\"por_portis-iframe\",q.style.width=\"0\",q.style.height=\"0\",q.style.border=\"none\",q.style.position=\"absolute\",q.style.top=\"-999px\",q.style.left=\"-999px\",q.src=\"https://widget.portis.io\",O().then((function(){document.getElementsByClassName(\"por_portis-iframe\").length&&console.warn(\"Portis script was already loaded. This might cause unexpected behavior. If loading with a <script> tag, please make sure that you only load it once.\"),document.body.appendChild(q)}));var F=function(){function e(e,t,r){void 0===r&&(r={}),this._widgetUrl=\"https://widget.portis.io\",function(){var e=\"localhost\"===location.hostname||\"127.0.0.1\"===location.hostname,t=\"https:\"===location.protocol;if(!(e||t))throw\"[Portis] Access to the WebCrypto API is restricted to secure origins.\\nIf this is a development environment please use http://localhost:\"+location.port+\" instead.\\nOtherwise, please use an SSL certificate.\"}(),this._checkIfWidgetAlreadyInitialized(),this._validateParams(e,t,r),this.config={dappId:e,network:m(t,r.gasRelay),version:\"2.0.0-beta.59\",scope:r.scope,registerPageByDefault:r.registerPageByDefault},this.widget=this._initWidget(),this.provider=this._initProvider(r)}return e.prototype.changeNetwork=function(e,t){var r=m(e,t);this.clearSubprovider(p.a),this.clearSubprovider(a.a),this.config.network=r},e.prototype.setDefaultEmail=function(e){this.config.defaultEmail=e},e.prototype.showPortis=function(){return D(this,void 0,void 0,(function(){return U(this,(function(e){switch(e.label){case 0:return[4,this.widget];case 1:return[2,e.sent().communication.showPortis(this.config)]}}))}))},e.prototype.logout=function(){return D(this,void 0,void 0,(function(){return U(this,(function(e){switch(e.label){case 0:return[4,this.widget];case 1:return[2,e.sent().communication.logout()]}}))}))},e.prototype.onLogin=function(e){this._onLoginCallback=e},e.prototype.onLogout=function(e){this._onLogoutCallback=e},e.prototype.onActiveWalletChanged=function(e){this._onActiveWalletChangedCallback=e},e.prototype.onError=function(e){this._onErrorCallback=e},e.prototype.getExtendedPublicKey=function(e,t){return void 0===e&&(e=\"m/44'/60'/0'/0/0\"),void 0===t&&(t=\"Ethereum\"),D(this,void 0,void 0,(function(){return U(this,(function(r){switch(r.label){case 0:return[4,this.widget];case 1:return[2,r.sent().communication.getExtendedPublicKey(e,t,this.config)]}}))}))},e.prototype.importWallet=function(e){return D(this,void 0,void 0,(function(){return U(this,(function(t){switch(t.label){case 0:return[4,this.widget];case 1:return[2,t.sent().communication.importWallet(e,this.config)]}}))}))},e.prototype.isLoggedIn=function(){return D(this,void 0,void 0,(function(){return U(this,(function(e){switch(e.label){case 0:return[4,this.widget];case 1:return[2,e.sent().communication.isLoggedIn()]}}))}))},e.prototype.signBitcoinTransaction=function(e){return D(this,void 0,void 0,(function(){return U(this,(function(t){switch(t.label){case 0:return[4,this.widget];case 1:return[2,t.sent().communication.signBitcoinTransaction(e,this.config)]}}))}))},e.prototype.showBitcoinWallet=function(e){return void 0===e&&(e=\"m/49'/0'/0'/0/0\"),D(this,void 0,void 0,(function(){return U(this,(function(t){switch(t.label){case 0:return[4,this.widget];case 1:return[2,t.sent().communication.showBitcoinWallet(e,this.config)]}}))}))},e.prototype._checkIfWidgetAlreadyInitialized=function(){document.getElementsByClassName(\"por_portis-container\").length&&console.warn(\"An instance of Portis was already initialized. This is probably a mistake. Make sure that you use the same Portis instance throughout your app.\")},e.prototype._validateParams=function(e,t,r){if(!e)throw new Error(\"[Portis] 'dappId' is required. Get your dappId here: https://dashboard.portis.io\");if(!t)throw new Error(\"[Portis] 'network' is required. Read more about it here: https://docs.portis.io/#/configuration?id=network\");if(r.scope){if(!Array.isArray(r.scope))throw new Error(\"[Portis] 'scope' must be an array. Read more about it here: https://docs.portis.io/#/configuration?id=scope\");if(r.scope.filter((function(e){return z.indexOf(e)<0})).length>0)throw new Error(\"[Portis] invalid 'scope' parameter. Read more about it here: https://docs.portis.io/#/configuration?id=scope\")}if(void 0!==r.registerPageByDefault&&\"boolean\"!=typeof r.registerPageByDefault)throw new Error(\"[Portis] invalid 'registerPageByDefault' parameter, must be a boolean. Read more about it here: https://docs.portis.io/#/configuration?id=registerPageByDefault\");r.staging&&(console.warn(\"Please note: you are using the Portis STAGING environment.\"),this._widgetUrl=\"https://widget-staging.portis.io\")},e.prototype._initWidget=function(){return D(this,void 0,void 0,(function(){var e,t,r,n,i;return U(this,(function(o){switch(o.label){case 0:return[4,O()];case 1:return o.sent(),document.body.contains(q)&&document.body.removeChild(q),(e=document.createElement(\"style\")).innerHTML=\"\\n.por_portis-container {\\n  position: fixed;\\n  width: 0px;\\n  height: 0px;\\n  top: 0px;\\n  right: 0px;\\n  z-index: 2147483647;\\n}\\n\\n@media (max-width: 576px) {\\n  .por_portis-container {\\n    bottom: 0;\\n    top: auto;\\n  }\\n}\\n\\n.por_portis-widget-frame {\\n  position: fixed;\\n  width: 375px;\\n  height: 0;\\n  top: 20px;\\n  right: 20px;\\n  box-shadow: 0 5px 40px rgba(0,0,0,.16);\\n  border-radius: 8px;\\n  overflow: hidden;\\n  z-index: 2147483000;\\n}\\n\\n@media (max-width: 576px) {\\n  .por_portis-widget-frame {\\n    bottom: 0;\\n    top: auto;\\n    width: 100%;\\n    right: 0;\\n    left: 0;\\n    border-bottom-left-radius: 0;\\n    border-bottom-right-radius: 0;\\n  }\\n}\\n\",(t=document.createElement(\"div\")).className=\"por_portis-container\",(r=document.createElement(\"div\")).id=\"portis-container-\"+Date.now(),r.className=\"por_portis-widget-frame\",t.appendChild(r),document.body.appendChild(t),document.head.appendChild(e),(n=v.a.connectToChild({url:this._widgetUrl,appendTo:document.getElementById(r.id),methods:{setHeight:this._setHeight.bind(this),getWindowSize:this._getWindowSize.bind(this),onLogin:this._onLogin.bind(this),onLogout:this._onLogout.bind(this),onActiveWalletChanged:this._onActiveWalletChanged.bind(this),onError:this._onError.bind(this)}})).iframe.style.position=\"absolute\",n.iframe.style.height=\"100%\",n.iframe.style.width=\"100%\",n.iframe.style.border=\"0 transparent\",[4,n.promise];case 2:return(i=o.sent()).retrieveSession(this.config),[2,{communication:i,iframe:n.iframe,widgetFrame:r}]}}))}))},e.prototype._initProvider=function(e){var t=this,r=new i.a,n=new B(r);if(r.send=function(e,n){if(\"string\"==typeof e)return new Promise((function(t,i){r.sendAsync({jsonrpc:\"2.0\",id:42,method:e,params:n||[]},(function(e,r){e?i(e):t(r.result)}))}));if(!n){var i=null;switch(e.method){case\"eth_accounts\":case\"eth_coinbase\":i=t._selectedAddress?[t._selectedAddress]:[];break;case\"net_version\":i=t._network;break;case\"eth_uninstallFilter\":r.sendAsync(e,(function(e){return e})),i=!0;break;default:var o=\"The Portis Web3 object does not support synchronous methods like \"+e.method+\" without a callback parameter.\";throw new Error(o)}return{id:e.id,jsonrpc:e.jsonrpc,result:i}}r.sendAsync(e,n)},r.addProvider(new f.a({web3_clientVersion:\"Portis/v\"+this.config.version+\"/javascript\",net_listening:!0,eth_hashrate:\"0x00\",eth_mining:!1,eth_syncing:!0})),r.addProvider(new a.a),r.addProvider(new y.a),r.addProvider(new c.a),r.addProvider(new p.a),r.addProvider({setEngine:function(e){return e},handleRequest:function(e,r,n){return D(t,void 0,void 0,(function(){return U(this,(function(t){return e.id||(e.id=42),r(),[2]}))}))}}),r.addProvider(new d.a({getAccounts:function(e){return D(t,void 0,void 0,(function(){var t,r,n;return U(this,(function(i){switch(i.label){case 0:return[4,this.widget];case 1:return[4,i.sent().communication.getAccounts(this.config)];case 2:return t=i.sent(),r=t.error,n=t.result,!r&&n&&(this._selectedAddress=n[0]),e(r,n),[2]}}))}))},signTransaction:function(e,r){return D(t,void 0,void 0,(function(){var t,n,i;return U(this,(function(o){switch(o.label){case 0:return[4,this.widget];case 1:return[4,o.sent().communication.signTransaction(e,this.config)];case 2:return t=o.sent(),n=t.error,i=t.result,r(n,i),[2]}}))}))},signMessage:function(e,r){return D(t,void 0,void 0,(function(){var t,n,i,o,a;return U(this,(function(s){switch(s.label){case 0:return[4,this.widget];case 1:return t=s.sent().communication,n=Object.assign({},e,{messageStandard:\"signMessage\"}),[4,t.signMessage(n,this.config)];case 2:return i=s.sent(),o=i.error,a=i.result,r(o,a),[2]}}))}))},signPersonalMessage:function(e,r){return D(t,void 0,void 0,(function(){var t,n,i,o,a;return U(this,(function(s){switch(s.label){case 0:return[4,this.widget];case 1:return t=s.sent().communication,n=Object.assign({},e,{messageStandard:\"signPersonalMessage\"}),[4,t.signMessage(n,this.config)];case 2:return i=s.sent(),o=i.error,a=i.result,r(o,a),[2]}}))}))},signTypedMessage:function(e,r){return D(t,void 0,void 0,(function(){var t,n,i,o,a;return U(this,(function(s){switch(s.label){case 0:return[4,this.widget];case 1:return t=s.sent().communication,n=Object.assign({},e,{messageStandard:\"signTypedMessage\"}),[4,t.signMessage(n,this.config)];case 2:return i=s.sent(),o=i.error,a=i.result,r(o,a),[2]}}))}))},signTypedMessageV3:function(e,r){return D(t,void 0,void 0,(function(){var t,n,i,o,a;return U(this,(function(s){switch(s.label){case 0:return[4,this.widget];case 1:return t=s.sent().communication,n=Object.assign({},e,{messageStandard:\"signTypedMessageV3\"}),[4,t.signMessage(n,this.config)];case 2:return i=s.sent(),o=i.error,a=i.result,r(o,a),[2]}}))}))},estimateGas:function(e,r){return D(t,void 0,void 0,(function(){var t;return U(this,(function(i){switch(i.label){case 0:return[4,M(n,e)];case 1:return t=i.sent(),r(null,t),[2]}}))}))},getGasPrice:function(e){return D(t,void 0,void 0,(function(){return U(this,(function(t){return e(null,\"\"),[2]}))}))}})),e.pocketDevId){var o=new j.a.Pocket({devID:e.pocketDevId,networkName:\"ETH\",netIDs:[this.config.network.chainId]});r.addProvider({setEngine:function(e){return e},handleRequest:function(e,n,i){return D(t,void 0,void 0,(function(){var t,n,a;return U(this,(function(s){switch(s.label){case 0:return[4,o.sendRelay(new j.a.Relay(\"ETH\",this.config.network.chainId,JSON.stringify(e),o.configuration))];case 1:if((t=s.sent())instanceof Error||!t)a=t||new Error(\"Unknown error\"),n=null;else try{n=JSON.parse(t).result,a=null}catch(e){n=null,a=e}return\"net_version\"===e.method&&(this._network=n,r.networkVersion=this._network),i(a,n),[2]}}))}))}})}else r.addProvider({setEngine:function(e){return e},handleRequest:function(e,n,i){return D(t,void 0,void 0,(function(){var t,n,o;return U(this,(function(a){switch(a.label){case 0:return[4,this.widget];case 1:return[4,a.sent().communication.relay(e,this.config)];case 2:return t=a.sent(),n=t.error,o=t.result,\"net_version\"===e.method&&(this._network=o,r.networkVersion=this._network),i(n,o),[2]}}))}))}});return r.enable=function(){return new Promise((function(e,t){r.sendAsync({method:\"eth_accounts\"},(function(r,n){r?t(r):e(n.result)}))}))},r.isConnected=function(){return!0},r.isPortis=!0,r.on(\"error\",(function(e){e&&e.message&&e.message.includes(\"PollingBlockTracker\")?console.warn(\"If you see this warning constantly, there might be an error with your RPC node.\"):console.error(e)})),r.start(),r},e.prototype._setHeight=function(e){return D(this,void 0,void 0,(function(){return U(this,(function(t){switch(t.label){case 0:return[4,this.widget];case 1:return t.sent().widgetFrame.style.height=e+\"px\",[2]}}))}))},e.prototype._getWindowSize=function(){var e=document.getElementsByTagName(\"body\")[0];return{width:window.innerWidth||document.documentElement.clientWidth||e.clientWidth,height:window.innerHeight||document.documentElement.clientHeight||e.clientHeight}},e.prototype._onLogin=function(e,t,r){this._onLoginCallback&&this._onLoginCallback(e,t,r)},e.prototype._onLogout=function(){this._selectedAddress=\"\",this._onLogoutCallback&&this._onLogoutCallback()},e.prototype._onActiveWalletChanged=function(e){this._onActiveWalletChangedCallback&&this._onActiveWalletChangedCallback(e)},e.prototype._onError=function(e){this._onErrorCallback&&this._onErrorCallback(e)},e.prototype.clearSubprovider=function(e){var t=this.provider._providers.find((function(t){return t instanceof e}));this.provider.removeProvider(t),this.provider.addProvider(new e)},e}();t.default=F}]).default}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0Bwb3J0aXMvd2ViMy91bWQvaW5kZXguanM/MzFhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQWlELG9CQUFvQixTQUEyRyxDQUFDLGtCQUFrQixtQkFBbUIsU0FBUyxjQUFjLDRCQUE0QixZQUFZLHFCQUFxQiwyREFBMkQsdUNBQXVDLHFDQUFxQyxvQkFBb0IsRUFBRSxpQkFBaUIsNEZBQTRGLGVBQWUsd0NBQXdDLFNBQVMsRUFBRSxtQkFBbUIsOEJBQThCLHFEQUFxRCwwQkFBMEIsNkNBQTZDLHNCQUFzQiw2REFBNkQsWUFBWSxlQUFlLFNBQVMsaUJBQWlCLGlDQUFpQyxpQkFBaUIsWUFBWSxVQUFVLHNCQUFzQixtQkFBbUIsaURBQWlELG1CQUFtQixnQkFBZ0IseURBQXlELHNEQUFzRCxhQUFhLG1EQUFtRCxHQUFHLHlCQUF5QixNQUFNLFdBQVcsbUJBQW1CLHNFQUFzRSxpQkFBaUIsYUFBYTtBQUNsOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGFBQWEsbURBQW1ELGdCQUFnQiw0REFBNEQsK0dBQStHLGtCQUFrQixtRUFBbUUsdUJBQXVCLDJHQUEyRyxpQkFBaUIscUJBQXFCLG9CQUFvQixtRkFBbUYsa0ZBQWtGLHNGQUFzRiwyRUFBMkUsZ0dBQWdHLDJEQUEyRCxTQUFTLDZDQUE2Qyx1Q0FBdUMsc0ZBQXNGLHVDQUF1Qyx3QkFBd0IsU0FBUyxzQkFBc0Isa0JBQWtCLG9CQUFvQixnREFBZ0QsTUFBTSxpSkFBaUosbURBQW1ELE1BQU0sMEdBQTBHLE1BQU0sY0FBYyw4RUFBOEUsb0VBQW9FLGdCQUFnQiwrREFBK0QsSUFBSSxXQUFXLFNBQVMsZ0JBQWdCLGlDQUFpQyxTQUFTLFlBQVksSUFBSSxtQkFBbUIsU0FBUyxjQUFjLG9IQUFvSCxXQUFXLGdCQUFnQixpQ0FBaUMsaUpBQWlKLDZCQUE2QixlQUFlLGtCQUFrQixjQUFjLFdBQVcsK0NBQStD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aW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXSx0KTpcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzLlBvcnRpcz10KCk6ZS5Qb3J0aXM9dCgpfSh0aGlzLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgaT10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxyKSxpLmw9ITAsaS5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmQ9ZnVuY3Rpb24oZSx0LG4pe3IubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIucj1mdW5jdGlvbihlKXtcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxyLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPXIoZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtpZihyLnIobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpZm9yKHZhciBpIGluIGUpci5kKG4saSxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLGkpKTtyZXR1cm4gbn0sci5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiByLmQodCxcImFcIix0KSx0fSxyLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LHIucD1cIlwiLHIoci5zPTI3OCl9KFtmdW5jdGlvbihlLHQpe1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dCYmKGUuc3VwZXJfPXQsZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSkpfTplLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZih0KXtlLnN1cGVyXz10O3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT10LnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgcixlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lfX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7XG4vKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xudmFyIG49cigxMTUpLGk9cigxMTYpLG89cigxMTcpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBzKGUsdCl7aWYoYSgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aFwiKTtyZXR1cm4gZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189Zi5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgZih0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBmKGUsdCxyKXtpZighKGYuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIGYpKXJldHVybiBuZXcgZihlLHQscik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcihcIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nXCIpO3JldHVybiBoKHRoaXMsZSl9cmV0dXJuIHUodGhpcyxlLHQscil9ZnVuY3Rpb24gdShlLHQscixuKXtpZihcIm51bWJlclwiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQscixuKXtpZih0LmJ5dGVMZW5ndGgscjwwfHx0LmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHNcIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKFwiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kc1wiKTt0PXZvaWQgMD09PXImJnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0LHIpOm5ldyBVaW50OEFycmF5KHQscixuKTtmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPWYucHJvdG90eXBlOmU9ZChlLHQpO3JldHVybiBlfShlLHQscixuKTpcInN0cmluZ1wiPT10eXBlb2YgdD9mdW5jdGlvbihlLHQscil7XCJzdHJpbmdcIj09dHlwZW9mIHImJlwiXCIhPT1yfHwocj1cInV0ZjhcIik7aWYoIWYuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciBuPTB8cCh0LHIpLGk9KGU9cyhlLG4pKS53cml0ZSh0LHIpO2khPT1uJiYoZT1lLnNsaWNlKDAsaSkpO3JldHVybiBlfShlLHQscik6ZnVuY3Rpb24oZSx0KXtpZihmLmlzQnVmZmVyKHQpKXt2YXIgcj0wfGwodC5sZW5ndGgpO3JldHVybiAwPT09KGU9cyhlLHIpKS5sZW5ndGh8fHQuY29weShlLDAsMCxyKSxlfWlmKHQpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8XCJsZW5ndGhcImluIHQpcmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPW4/cyhlLDApOmQoZSx0KTtpZihcIkJ1ZmZlclwiPT09dC50eXBlJiZvKHQuZGF0YSkpcmV0dXJuIGQoZSx0LmRhdGEpfXZhciBuO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuXCIpfShlLHQpfWZ1bmN0aW9uIGMoZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiBoKGUsdCl7aWYoYyh0KSxlPXMoZSx0PDA/MDowfGwodCkpLCFmLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gZChlLHQpe3ZhciByPXQubGVuZ3RoPDA/MDowfGwodC5sZW5ndGgpO2U9cyhlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gbChlKXtpZihlPj1hKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4XCIrYSgpLnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIHAoZSx0KXtpZihmLmlzQnVmZmVyKGUpKXJldHVybiBlLmxlbmd0aDtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoO1wic3RyaW5nXCIhPXR5cGVvZiBlJiYoZT1cIlwiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiByO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2Ugdm9pZCAwOnJldHVybiB6KGUpLmxlbmd0aDtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gMipyO2Nhc2VcImhleFwiOnJldHVybiByPj4+MTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gcShlKS5sZW5ndGg7ZGVmYXVsdDppZihuKXJldHVybiB6KGUpLmxlbmd0aDt0PShcIlwiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gYihlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuXCJcIjtpZigodm9pZCAwPT09cnx8cj50aGlzLmxlbmd0aCkmJihyPXRoaXMubGVuZ3RoKSxyPD0wKXJldHVyblwiXCI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVyblwiXCI7Zm9yKGV8fChlPVwidXRmOFwiKTs7KXN3aXRjaChlKXtjYXNlXCJoZXhcIjpyZXR1cm4gSSh0aGlzLHQscik7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIGsodGhpcyx0LHIpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIE0odGhpcyx0LHIpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBUKHRoaXMsdCxyKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4geCh0aGlzLHQscik7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIFIodGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrZSk7ZT0oZStcIlwiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHkoZSx0LHIpe3ZhciBuPWVbdF07ZVt0XT1lW3JdLGVbcl09bn1mdW5jdGlvbiBnKGUsdCxyLG4saSl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9Zi5mcm9tKHQsbikpLGYuaXNCdWZmZXIodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTp2KGUsdCxyLG4saSk7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LHIpOnYoZSxbdF0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXJcIil9ZnVuY3Rpb24gdihlLHQscixuLGkpe3ZhciBvLGE9MSxzPWUubGVuZ3RoLGY9dC5sZW5ndGg7aWYodm9pZCAwIT09biYmKFwidWNzMlwiPT09KG49U3RyaW5nKG4pLnRvTG93ZXJDYXNlKCkpfHxcInVjcy0yXCI9PT1ufHxcInV0ZjE2bGVcIj09PW58fFwidXRmLTE2bGVcIj09PW4pKXtpZihlLmxlbmd0aDwyfHx0Lmxlbmd0aDwyKXJldHVybi0xO2E9MixzLz0yLGYvPTIsci89Mn1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIDE9PT1hP2VbdF06ZS5yZWFkVUludDE2QkUodCphKX1pZihpKXt2YXIgYz0tMTtmb3Iobz1yO288cztvKyspaWYodShlLG8pPT09dSh0LC0xPT09Yz8wOm8tYykpe2lmKC0xPT09YyYmKGM9byksby1jKzE9PT1mKXJldHVybiBjKmF9ZWxzZS0xIT09YyYmKG8tPW8tYyksYz0tMX1lbHNlIGZvcihyK2Y+cyYmKHI9cy1mKSxvPXI7bz49MDtvLS0pe2Zvcih2YXIgaD0hMCxkPTA7ZDxmO2QrKylpZih1KGUsbytkKSE9PXUodCxkKSl7aD0hMTticmVha31pZihoKXJldHVybiBvfXJldHVybi0xfWZ1bmN0aW9uIG0oZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBoZXggc3RyaW5nXCIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgYT0wO2E8bjsrK2Epe3ZhciBzPXBhcnNlSW50KHQuc3Vic3RyKDIqYSwyKSwxNik7aWYoaXNOYU4ocykpcmV0dXJuIGE7ZVtyK2FdPXN9cmV0dXJuIGF9ZnVuY3Rpb24gdyhlLHQscixuKXtyZXR1cm4gRih6KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIF8oZSx0LHIsbil7cmV0dXJuIEYoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBFKGUsdCxyLG4pe3JldHVybiBfKGUsdCxyLG4pfWZ1bmN0aW9uIFMoZSx0LHIsbil7cmV0dXJuIEYocSh0KSxlLHIsbil9ZnVuY3Rpb24gQShlLHQscixuKXtyZXR1cm4gRihmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxhPTA7YTxlLmxlbmd0aCYmISgodC09Mik8MCk7KythKXI9ZS5jaGFyQ29kZUF0KGEpLG49cj4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIHgoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP24uZnJvbUJ5dGVBcnJheShlKTpuLmZyb21CeXRlQXJyYXkoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBrKGUsdCxyKXtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPXQ7aTxyOyl7dmFyIG8sYSxzLGYsdT1lW2ldLGM9bnVsbCxoPXU+MjM5PzQ6dT4yMjM/Mzp1PjE5MT8yOjE7aWYoaStoPD1yKXN3aXRjaChoKXtjYXNlIDE6dTwxMjgmJihjPXUpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKG89ZVtpKzFdKSkmJihmPSgzMSZ1KTw8Nnw2MyZvKT4xMjcmJihjPWYpO2JyZWFrO2Nhc2UgMzpvPWVbaSsxXSxhPWVbaSsyXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZhKSYmKGY9KDE1JnUpPDwxMnwoNjMmbyk8PDZ8NjMmYSk+MjA0NyYmKGY8NTUyOTZ8fGY+NTczNDMpJiYoYz1mKTticmVhaztjYXNlIDQ6bz1lW2krMV0sYT1lW2krMl0scz1lW2krM10sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZzKSYmKGY9KDE1JnUpPDwxOHwoNjMmbyk8PDEyfCg2MyZhKTw8Nnw2MyZzKT42NTUzNSYmZjwxMTE0MTEyJiYoYz1mKX1udWxsPT09Yz8oYz02NTUzMyxoPTEpOmM+NjU1MzUmJihjLT02NTUzNixuLnB1c2goYz4+PjEwJjEwMjN8NTUyOTYpLGM9NTYzMjB8MTAyMyZjKSxuLnB1c2goYyksaSs9aH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9NDA5NilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7dmFyIHI9XCJcIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz00MDk2KSk7cmV0dXJuIHJ9KG4pfXQuQnVmZmVyPWYsdC5TbG93QnVmZmVyPWZ1bmN0aW9uKGUpeytlIT1lJiYoZT0wKTtyZXR1cm4gZi5hbGxvYygrZSl9LHQuSU5TUEVDVF9NQVhfQllURVM9NTAsZi5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMCE9PWUuVFlQRURfQVJSQVlfU1VQUE9SVD9lLlRZUEVEX0FSUkFZX1NVUFBPUlQ6ZnVuY3Rpb24oKXt0cnl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIGUuX19wcm90b19fPXtfX3Byb3RvX186VWludDhBcnJheS5wcm90b3R5cGUsZm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX0sNDI9PT1lLmZvbygpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnN1YmFycmF5JiYwPT09ZS5zdWJhcnJheSgxLDEpLmJ5dGVMZW5ndGh9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLHQua01heExlbmd0aD1hKCksZi5wb29sU2l6ZT04MTkyLGYuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPWYucHJvdG90eXBlLGV9LGYuZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHUobnVsbCxlLHQscil9LGYuVFlQRURfQVJSQVlfU1VQUE9SVCYmKGYucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxmLl9fcHJvdG9fXz1VaW50OEFycmF5LFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5zcGVjaWVzJiZmW1N5bWJvbC5zcGVjaWVzXT09PWYmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMH0pKSxmLmFsbG9jPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGModCksdDw9MD9zKGUsdCk6dm9pZCAwIT09cj9cInN0cmluZ1wiPT10eXBlb2Ygbj9zKGUsdCkuZmlsbChyLG4pOnMoZSx0KS5maWxsKHIpOnMoZSx0KX0obnVsbCxlLHQscil9LGYuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGgobnVsbCxlKX0sZi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIGgobnVsbCxlKX0sZi5pc0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9LGYuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFmLmlzQnVmZmVyKGUpfHwhZi5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVyc1wiKTtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIHI9ZS5sZW5ndGgsbj10Lmxlbmd0aCxpPTAsbz1NYXRoLm1pbihyLG4pO2k8bzsrK2kpaWYoZVtpXSE9PXRbaV0pe3I9ZVtpXSxuPXRbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfSxmLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxmLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFvKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZi5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT10KWZvcih0PTAscj0wO3I8ZS5sZW5ndGg7KytyKXQrPWVbcl0ubGVuZ3RoO3ZhciBuPWYuYWxsb2NVbnNhZmUodCksaT0wO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3Ipe3ZhciBhPWVbcl07aWYoIWYuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7YS5jb3B5KG4saSksaSs9YS5sZW5ndGh9cmV0dXJuIG59LGYuYnl0ZUxlbmd0aD1wLGYucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxmLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0c1wiKTtmb3IodmFyIHQ9MDt0PGU7dCs9Mil5KHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxmLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0c1wiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NCl5KHRoaXMsdCx0KzMpLHkodGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30sZi5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHNcIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpeSh0aGlzLHQsdCs3KSx5KHRoaXMsdCsxLHQrNikseSh0aGlzLHQrMix0KzUpLHkodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sZi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT9cIlwiOjA9PT1hcmd1bWVudHMubGVuZ3RoP2sodGhpcywwLGUpOmIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxmLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIWYuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXJcIik7cmV0dXJuIHRoaXM9PT1lfHwwPT09Zi5jb21wYXJlKHRoaXMsZSl9LGYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgZT1cIlwiLHI9dC5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZyhcImhleFwiLDAscikubWF0Y2goLy57Mn0vZykuam9pbihcIiBcIiksdGhpcy5sZW5ndGg+ciYmKGUrPVwiIC4uLiBcIikpLFwiPEJ1ZmZlciBcIitlK1wiPlwifSxmLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4saSl7aWYoIWYuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXJcIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYobj49aSYmdD49cilyZXR1cm4gMDtpZihuPj1pKXJldHVybi0xO2lmKHQ+PXIpcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShuPj4+PTApLGE9KHI+Pj49MCktKHQ+Pj49MCkscz1NYXRoLm1pbihvLGEpLHU9dGhpcy5zbGljZShuLGkpLGM9ZS5zbGljZSh0LHIpLGg9MDtoPHM7KytoKWlmKHVbaF0hPT1jW2hdKXtvPXVbaF0sYT1jW2hdO2JyZWFrfXJldHVybiBvPGE/LTE6YTxvPzE6MH0sZi5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxyKX0sZi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIGcodGhpcyxlLHQsciwhMCl9LGYucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZyh0aGlzLGUsdCxyLCExKX0sZi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodm9pZCAwPT09dCluPVwidXRmOFwiLHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09ciYmXCJzdHJpbmdcIj09dHlwZW9mIHQpbj10LHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcihcIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkXCIpO3R8PTAsaXNGaW5pdGUocik/KHJ8PTAsdm9pZCAwPT09biYmKG49XCJ1dGY4XCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSxlLmxlbmd0aD4wJiYocjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIik7bnx8KG49XCJ1dGY4XCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChuKXtjYXNlXCJoZXhcIjpyZXR1cm4gbSh0aGlzLGUsdCxyKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gdyh0aGlzLGUsdCxyKTtjYXNlXCJhc2NpaVwiOnJldHVybiBfKHRoaXMsZSx0LHIpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBFKHRoaXMsZSx0LHIpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBTKHRoaXMsZSx0LHIpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBBKHRoaXMsZSx0LHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrbik7bj0oXCJcIituKS50b0xvd2VyQ2FzZSgpLG89ITB9fSxmLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcIkJ1ZmZlclwiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07ZnVuY3Rpb24gTShlLHQscil7dmFyIG49XCJcIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gVChlLHQscil7dmFyIG49XCJcIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBJKGUsdCxyKXt2YXIgbj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9XCJcIixvPXQ7bzxyOysrbylpKz1VKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIFIoZSx0LHIpe2Zvcih2YXIgbj1lLnNsaWNlKHQsciksaT1cIlwiLG89MDtvPG4ubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKzI1NipuW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIFAoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IGlzIG5vdCB1aW50XCIpO2lmKGUrdD5yKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aFwiKX1mdW5jdGlvbiBMKGUsdCxyLG4saSxvKXtpZighZi5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gQihlLHQscixuKXt0PDAmJih0PTY1NTM1K3QrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aC1yLDIpO2k8bzsrK2kpZVtyK2ldPSh0JjI1NTw8OCoobj9pOjEtaSkpPj4+OCoobj9pOjEtaSl9ZnVuY3Rpb24gQyhlLHQscixuKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsNCk7aTxvOysraSllW3IraV09dD4+PjgqKG4/aTozLWkpJjI1NX1mdW5jdGlvbiBPKGUsdCxyLG4saSxvKXtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIE4oZSx0LHIsbixvKXtyZXR1cm4gb3x8TyhlLDAsciw0KSxpLndyaXRlKGUsdCxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIGooZSx0LHIsbixvKXtyZXR1cm4gb3x8TyhlLDAsciw4KSxpLndyaXRlKGUsdCxyLG4sNTIsOCkscis4fWYucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLGYuVFlQRURfQVJSQVlfU1VQUE9SVCkocj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1mLnByb3RvdHlwZTtlbHNle3ZhciBpPXQtZTtyPW5ldyBmKGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKXJbb109dGhpc1tvK2VdfXJldHVybiByfSxmLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8UChlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2VdLGk9MSxvPTA7KytvPHQmJihpKj0yNTYpOyluKz10aGlzW2Urb10qaTtyZXR1cm4gbn0sZi5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fFAoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlKy0tdF0saT0xO3Q+MCYmKGkqPTI1Nik7KW4rPXRoaXNbZSstLXRdKmk7cmV0dXJuIG59LGYucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxQKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sZi5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFAoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OH0sZi5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFAoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdPDw4fHRoaXNbZSsxXX0sZi5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFAoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxmLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8UChlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbZV0rKHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXSl9LGYucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fFAoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspbis9dGhpc1tlK29dKmk7cmV0dXJuIG4+PShpKj0xMjgpJiYobi09TWF0aC5wb3coMiw4KnQpKSxufSxmLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxQKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsaT0xLG89dGhpc1tlKy0tbl07bj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tbl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LGYucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFAoZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0sZi5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxQKGUsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LGYucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7dHx8UChlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxmLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxQKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNnx0aGlzW2UrM108PDI0fSxmLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxQKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxmLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxQKGUsNCx0aGlzLmxlbmd0aCksaS5yZWFkKHRoaXMsZSwhMCwyMyw0KX0sZi5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8UChlLDQsdGhpcy5sZW5ndGgpLGkucmVhZCh0aGlzLGUsITEsMjMsNCl9LGYucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxQKGUsOCx0aGlzLmxlbmd0aCksaS5yZWFkKHRoaXMsZSwhMCw1Miw4KX0sZi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fFAoZSw4LHRoaXMubGVuZ3RoKSxpLnJlYWQodGhpcyxlLCExLDUyLDgpfSxmLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXsoZT0rZSx0fD0wLHJ8PTAsbil8fEwodGhpcyxlLHQscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT0xLG89MDtmb3IodGhpc1t0XT0yNTUmZTsrK288ciYmKGkqPTI1Nik7KXRoaXNbdCtvXT1lL2kmMjU1O3JldHVybiB0K3J9LGYucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8TCh0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPXItMSxvPTE7Zm9yKHRoaXNbdCtpXT0yNTUmZTstLWk+PTAmJihvKj0yNTYpOyl0aGlzW3QraV09ZS9vJjI1NTtyZXR1cm4gdCtyfSxmLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fEwodGhpcyxlLHQsMSwyNTUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0sZi5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxMKHRoaXMsZSx0LDIsNjU1MzUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6Qih0aGlzLGUsdCwhMCksdCsyfSxmLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fEwodGhpcyxlLHQsMiw2NTUzNSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpCKHRoaXMsZSx0LCExKSx0KzJ9LGYucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8TCh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOkModGhpcyxlLHQsITApLHQrNH0sZi5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxMKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxmLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Qyh0aGlzLGUsdCwhMSksdCs0fSxmLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7TCh0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89MCxhPTEscz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoYSo9MjU2KTspZTwwJiYwPT09cyYmMCE9PXRoaXNbdCtvLTFdJiYocz0xKSx0aGlzW3Qrb109KGUvYT4+MCktcyYyNTU7cmV0dXJuIHQrcn0sZi5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO0wodGhpcyxlLHQscixpLTEsLWkpfXZhciBvPXItMSxhPTEscz0wO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYoYSo9MjU2KTspZTwwJiYwPT09cyYmMCE9PXRoaXNbdCtvKzFdJiYocz0xKSx0aGlzW3Qrb109KGUvYT4+MCktcyYyNTU7cmV0dXJuIHQrcn0sZi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fEwodGhpcyxlLHQsMSwxMjcsLTEyOCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxmLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8TCh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6Qih0aGlzLGUsdCwhMCksdCsyfSxmLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8TCh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6Qih0aGlzLGUsdCwhMSksdCsyfSxmLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8TCh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGYuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpDKHRoaXMsZSx0LCEwKSx0KzR9LGYucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxMKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksZi5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOkModGhpcyxlLHQsITEpLHQrNH0sZi5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTih0aGlzLGUsdCwhMCxyKX0sZi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTih0aGlzLGUsdCwhMSxyKX0sZi5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGoodGhpcyxlLHQsITAscil9LGYucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBqKHRoaXMsZSx0LCExLHIpfSxmLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kc1wiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxuLXImJihuPWUubGVuZ3RoLXQrcik7dmFyIGksbz1uLXI7aWYodGhpcz09PWUmJnI8dCYmdDxuKWZvcihpPW8tMTtpPj0wOy0taSllW2krdF09dGhpc1tpK3JdO2Vsc2UgaWYobzwxZTN8fCFmLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKWVbaSt0XT10aGlzW2krcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkocixyK28pLHQpO3JldHVybiBvfSxmLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdD8obj10LHQ9MCxyPXRoaXMubGVuZ3RoKTpcInN0cmluZ1wiPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBpPWUuY2hhckNvZGVBdCgwKTtpPDI1NiYmKGU9aSl9aWYodm9pZCAwIT09biYmXCJzdHJpbmdcIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmdcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4mJiFmLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK24pfWVsc2VcIm51bWJlclwiPT10eXBlb2YgZSYmKGUmPTI1NSk7aWYodDwwfHx0aGlzLmxlbmd0aDx0fHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKFwiT3V0IG9mIHJhbmdlIGluZGV4XCIpO2lmKHI8PXQpcmV0dXJuIHRoaXM7dmFyIG87aWYodD4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCxlfHwoZT0wKSxcIm51bWJlclwiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIGE9Zi5pc0J1ZmZlcihlKT9lOnoobmV3IGYoZSxuKS50b1N0cmluZygpKSxzPWEubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1hW28lc119cmV0dXJuIHRoaXN9O3ZhciBEPS9bXitcXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBVKGUpe3JldHVybiBlPDE2P1wiMFwiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHooZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10sYT0wO2E8bjsrK2Epe2lmKChyPWUuY2hhckNvZGVBdChhKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoYSsxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb2RlIHBvaW50XCIpO2lmKCh0LT00KTwwKWJyZWFrO28ucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX19cmV0dXJuIG99ZnVuY3Rpb24gcShlKXtyZXR1cm4gbi50b0J5dGVBcnJheShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxccyt8XFxzKyQvZyxcIlwiKX0oZSkucmVwbGFjZShELFwiXCIpKS5sZW5ndGg8MilyZXR1cm5cIlwiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9XCI9XCI7cmV0dXJuIGV9KGUpKX1mdW5jdGlvbiBGKGUsdCxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PXQubGVuZ3RofHxpPj1lLmxlbmd0aCk7KytpKXRbaStyXT1lW2ldO3JldHVybiBpfX0pLmNhbGwodGhpcyxyKDUpKX0sZnVuY3Rpb24oZSx0LHIpe1xuLyohIHNhZmUtYnVmZmVyLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG52YXIgbj1yKDEpLGk9bi5CdWZmZXI7ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBhKGUsdCxyKXtyZXR1cm4gaShlLHQscil9aS5mcm9tJiZpLmFsbG9jJiZpLmFsbG9jVW5zYWZlJiZpLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9bjoobyhuLHQpLHQuQnVmZmVyPWEpLGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLG8oaSxhKSxhLmZyb209ZnVuY3Rpb24oZSx0LHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlclwiKTtyZXR1cm4gaShlLHQscil9LGEuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyXCIpO3ZhciBuPWkoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/XCJzdHJpbmdcIj09dHlwZW9mIHI/bi5maWxsKHQscik6bi5maWxsKHQpOm4uZmlsbCgwKSxufSxhLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyXCIpO3JldHVybiBpKGUpfSxhLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlclwiKTtyZXR1cm4gbi5TbG93QnVmZmVyKGUpfX0sZnVuY3Rpb24oZSx0KXt2YXIgcixuLGk9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIG8oKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGEoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gcyhlKXtpZihyPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlLDApO2lmKChyPT09b3x8IXIpJiZzZXRUaW1lb3V0KXJldHVybiByPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gcihlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gci5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gci5jYWxsKHRoaXMsZSwwKX19fSFmdW5jdGlvbigpe3RyeXtyPVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpvfWNhdGNoKGUpe3I9b310cnl7bj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OmF9Y2F0Y2goZSl7bj1hfX0oKTt2YXIgZix1PVtdLGM9ITEsaD0tMTtmdW5jdGlvbiBkKCl7YyYmZiYmKGM9ITEsZi5sZW5ndGg/dT1mLmNvbmNhdCh1KTpoPS0xLHUubGVuZ3RoJiZsKCkpfWZ1bmN0aW9uIGwoKXtpZighYyl7dmFyIGU9cyhkKTtjPSEwO2Zvcih2YXIgdD11Lmxlbmd0aDt0Oyl7Zm9yKGY9dSx1PVtdOysraDx0OylmJiZmW2hdLnJ1bigpO2g9LTEsdD11Lmxlbmd0aH1mPW51bGwsYz0hMSxmdW5jdGlvbihlKXtpZihuPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKG49PT1hfHwhbikmJmNsZWFyVGltZW91dClyZXR1cm4gbj1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtuKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuIG4uY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiBwKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9ZnVuY3Rpb24gYigpe31pLm5leHRUaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07dS5wdXNoKG5ldyBwKGUsdCkpLDEhPT11Lmxlbmd0aHx8Y3x8cyhsKX0scC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0saS50aXRsZT1cImJyb3dzZXJcIixpLmJyb3dzZXI9ITAsaS5lbnY9e30saS5hcmd2PVtdLGkudmVyc2lvbj1cIlwiLGkudmVyc2lvbnM9e30saS5vbj1iLGkuYWRkTGlzdGVuZXI9YixpLm9uY2U9YixpLm9mZj1iLGkucmVtb3ZlTGlzdGVuZXI9YixpLnJlbW92ZUFsbExpc3RlbmVycz1iLGkuZW1pdD1iLGkucHJlcGVuZExpc3RlbmVyPWIsaS5wcmVwZW5kT25jZUxpc3RlbmVyPWIsaS5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuW119LGkuYmluZGluZz1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX0saS5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm5cIi9cIn0saS5jaGRpcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9LGkudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGZ1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbihlLHQpe2lmKCFlKXRocm93IG5ldyBFcnJvcih0fHxcIkFzc2VydGlvbiBmYWlsZWRcIil9ZnVuY3Rpb24gaShlLHQpe2Uuc3VwZXJfPXQ7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyByLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gbyhlLHQscil7aWYoby5pc0JOKGUpKXJldHVybiBlO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1lJiYoXCJsZVwiIT09dCYmXCJiZVwiIT09dHx8KHI9dCx0PTEwKSx0aGlzLl9pbml0KGV8fDAsdHx8MTAscnx8XCJiZVwiKSl9dmFyIGE7XCJvYmplY3RcIj09dHlwZW9mIGU/ZS5leHBvcnRzPW86dC5CTj1vLG8uQk49byxvLndvcmRTaXplPTI2O3RyeXthPXIoMTUzKS5CdWZmZXJ9Y2F0Y2goZSl7fWZ1bmN0aW9uIHMoZSx0LHIpe2Zvcih2YXIgbj0wLGk9TWF0aC5taW4oZS5sZW5ndGgsciksbz10O288aTtvKyspe3ZhciBhPWUuY2hhckNvZGVBdChvKS00ODtuPDw9NCxufD1hPj00OSYmYTw9NTQ/YS00OSsxMDphPj0xNyYmYTw9MjI/YS0xNysxMDoxNSZhfXJldHVybiBufWZ1bmN0aW9uIGYoZSx0LHIsbil7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbihlLmxlbmd0aCxyKSxhPXQ7YTxvO2ErKyl7dmFyIHM9ZS5jaGFyQ29kZUF0KGEpLTQ4O2kqPW4saSs9cz49NDk/cy00OSsxMDpzPj0xNz9zLTE3KzEwOnN9cmV0dXJuIGl9by5pc0JOPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2Ygb3x8bnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yLndvcmRTaXplPT09by53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShlLndvcmRzKX0sby5tYXg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jbXAodCk+MD9lOnR9LG8ubWluPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY21wKHQpPDA/ZTp0fSxvLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihlLHQscil7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZSx0LHIpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZSx0LHIpO1wiaGV4XCI9PT10JiYodD0xNiksbih0PT09KDB8dCkmJnQ+PTImJnQ8PTM2KTt2YXIgaT0wO1wiLVwiPT09KGU9ZS50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZyxcIlwiKSlbMF0mJmkrKywxNj09PXQ/dGhpcy5fcGFyc2VIZXgoZSxpKTp0aGlzLl9wYXJzZUJhc2UoZSx0LGkpLFwiLVwiPT09ZVswXSYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx0LHIpfSxvLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihlLHQscil7ZTwwJiYodGhpcy5uZWdhdGl2ZT0xLGU9LWUpLGU8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmVdLHRoaXMubGVuZ3RoPTEpOmU8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZSxlLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobihlPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmUsZS82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksdCxyKX0sby5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihlLHQscil7aWYobihcIm51bWJlclwiPT10eXBlb2YgZS5sZW5ndGgpLGUubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGUubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIG8sYSxzPTA7aWYoXCJiZVwiPT09cilmb3IoaT1lLmxlbmd0aC0xLG89MDtpPj0wO2ktPTMpYT1lW2ldfGVbaS0xXTw8OHxlW2ktMl08PDE2LHRoaXMud29yZHNbb118PWE8PHMmNjcxMDg4NjMsdGhpcy53b3Jkc1tvKzFdPWE+Pj4yNi1zJjY3MTA4ODYzLChzKz0yNCk+PTI2JiYocy09MjYsbysrKTtlbHNlIGlmKFwibGVcIj09PXIpZm9yKGk9MCxvPTA7aTxlLmxlbmd0aDtpKz0zKWE9ZVtpXXxlW2krMV08PDh8ZVtpKzJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxzJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtcyY2NzEwODg2Mywocys9MjQpPj0yNiYmKHMtPTI2LG8rKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGUsdCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChlLmxlbmd0aC10KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO3ZhciBuLGksbz0wO2ZvcihyPWUubGVuZ3RoLTYsbj0wO3I+PXQ7ci09NilpPXMoZSxyLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMsKG8rPTI0KT49MjYmJihvLT0yNixuKyspO3IrNiE9PXQmJihpPXMoZSx0LHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihlLHQscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9dCluKys7bi0tLGk9aS90fDA7Zm9yKHZhciBvPWUubGVuZ3RoLXIsYT1vJW4scz1NYXRoLm1pbihvLG8tYSkrcix1PTAsYz1yO2M8cztjKz1uKXU9ZihlLGMsYytuLHQpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSk7aWYoMCE9PWEpe3ZhciBoPTE7Zm9yKHU9ZihlLGMsZS5sZW5ndGgsdCksYz0wO2M8YTtjKyspaCo9dDt0aGlzLmltdWxuKGgpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpfX0sby5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlKXtlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB0PTA7dDx0aGlzLmxlbmd0aDt0KyspZS53b3Jkc1t0XT10aGlzLndvcmRzW3RdO2UubGVuZ3RoPXRoaXMubGVuZ3RoLGUubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxlLnJlZD10aGlzLnJlZH0sby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGUpLGV9LG8ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZSl7Zm9yKDt0aGlzLmxlbmd0aDxlOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sby5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LG8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/XCI8Qk4tUjogXCI6XCI8Qk46IFwiKSt0aGlzLnRvU3RyaW5nKDE2KStcIj5cIn07dmFyIHU9W1wiXCIsXCIwXCIsXCIwMFwiLFwiMDAwXCIsXCIwMDAwXCIsXCIwMDAwMFwiLFwiMDAwMDAwXCIsXCIwMDAwMDAwXCIsXCIwMDAwMDAwMFwiLFwiMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCJdLGM9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0saD1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBkKGUsdCxyKXtyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZTt2YXIgbj1lLmxlbmd0aCt0Lmxlbmd0aHwwO3IubGVuZ3RoPW4sbj1uLTF8MDt2YXIgaT0wfGUud29yZHNbMF0sbz0wfHQud29yZHNbMF0sYT1pKm8scz02NzEwODg2MyZhLGY9YS82NzEwODg2NHwwO3Iud29yZHNbMF09cztmb3IodmFyIHU9MTt1PG47dSsrKXtmb3IodmFyIGM9Zj4+PjI2LGg9NjcxMDg4NjMmZixkPU1hdGgubWluKHUsdC5sZW5ndGgtMSksbD1NYXRoLm1heCgwLHUtZS5sZW5ndGgrMSk7bDw9ZDtsKyspe3ZhciBwPXUtbHwwO2MrPShhPShpPTB8ZS53b3Jkc1twXSkqKG89MHx0LndvcmRzW2xdKStoKS82NzEwODg2NHwwLGg9NjcxMDg4NjMmYX1yLndvcmRzW3VdPTB8aCxmPTB8Y31yZXR1cm4gMCE9PWY/ci53b3Jkc1t1XT0wfGY6ci5sZW5ndGgtLSxyLnN0cmlwKCl9by5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZih0PTB8dHx8MSwxNj09PShlPWV8fDEwKXx8XCJoZXhcIj09PWUpe3I9XCJcIjtmb3IodmFyIGk9MCxvPTAsYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgcz10aGlzLndvcmRzW2FdLGY9KDE2Nzc3MjE1JihzPDxpfG8pKS50b1N0cmluZygxNik7cj0wIT09KG89cz4+PjI0LWkmMTY3NzcyMTUpfHxhIT09dGhpcy5sZW5ndGgtMT91WzYtZi5sZW5ndGhdK2YrcjpmK3IsKGkrPTIpPj0yNiYmKGktPTI2LGEtLSl9Zm9yKDAhPT1vJiYocj1vLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCV0IT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfWlmKGU9PT0oMHxlKSYmZT49MiYmZTw9MzYpe3ZhciBkPWNbZV0sbD1oW2VdO3I9XCJcIjt2YXIgcD10aGlzLmNsb25lKCk7Zm9yKHAubmVnYXRpdmU9MDshcC5pc1plcm8oKTspe3ZhciBiPXAubW9kbihsKS50b1N0cmluZyhlKTtyPShwPXAuaWRpdm4obCkpLmlzWmVybygpP2Ircjp1W2QtYi5sZW5ndGhdK2Ircn1mb3IodGhpcy5pc1plcm8oKSYmKHI9XCIwXCIrcik7ci5sZW5ndGgldCE9MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1uKCExLFwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNlwiKX0sby5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/ZSs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2UrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZuKCExLFwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzXCIpLDAhPT10aGlzLm5lZ2F0aXZlPy1lOmV9LG8ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sby5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbih2b2lkIDAhPT1hKSx0aGlzLnRvQXJyYXlMaWtlKGEsZSx0KX0sby5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGUsdCl9LG8ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxvPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1vLFwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aFwiKSxuKG8+MCxcIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMFwiKSx0aGlzLnN0cmlwKCk7dmFyIGEscyxmPVwibGVcIj09PXQsdT1uZXcgZShvKSxjPXRoaXMuY2xvbmUoKTtpZihmKXtmb3Iocz0wOyFjLmlzWmVybygpO3MrKylhPWMuYW5kbG4oMjU1KSxjLml1c2hybig4KSx1W3NdPWE7Zm9yKDtzPG87cysrKXVbc109MH1lbHNle2ZvcihzPTA7czxvLWk7cysrKXVbc109MDtmb3Iocz0wOyFjLmlzWmVybygpO3MrKylhPWMuYW5kbG4oMjU1KSxjLml1c2hybig4KSx1W28tcy0xXT1hfXJldHVybiB1fSxNYXRoLmNsejMyP28ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24oZSl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZSl9Om8ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPTA7cmV0dXJuIHQ+PTQwOTYmJihyKz0xMyx0Pj4+PTEzKSx0Pj02NCYmKHIrPTcsdD4+Pj03KSx0Pj04JiYocis9NCx0Pj4+PTQpLHQ+PTImJihyKz0yLHQ+Pj49Mikscit0fSxvLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZSl7aWYoMD09PWUpcmV0dXJuIDI2O3ZhciB0PWUscj0wO3JldHVybiAwPT0oODE5MSZ0KSYmKHIrPTEzLHQ+Pj49MTMpLDA9PSgxMjcmdCkmJihyKz03LHQ+Pj49NyksMD09KDE1JnQpJiYocis9NCx0Pj4+PTQpLDA9PSgzJnQpJiYocis9Mix0Pj4+PTIpLDA9PSgxJnQpJiZyKysscn0sby5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSx0PXRoaXMuX2NvdW50Qml0cyhlKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3R9LG8ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGU9MCx0PTA7dDx0aGlzLmxlbmd0aDt0Kyspe3ZhciByPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbdF0pO2lmKGUrPXIsMjYhPT1yKWJyZWFrfXJldHVybiBlfSxvLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxvLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZSl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZSkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxvLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50ZXN0bihlLTEpP3RoaXMubm90bihlKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxvLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sby5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LG8ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LG8ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZSl7Zm9yKDt0aGlzLmxlbmd0aDxlLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXRoaXMud29yZHNbdF09dGhpcy53b3Jkc1t0XXxlLndvcmRzW3RdO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlvcj1mdW5jdGlvbihlKXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGUpfSxvLnByb3RvdHlwZS5vcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sZW5ndGg+ZS5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihlKTplLmNsb25lKCkuaW9yKHRoaXMpfSxvLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGVuZ3RoPmUubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGUpOmUuY2xvbmUoKS5pdW9yKHRoaXMpfSxvLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihlKXt2YXIgdDt0PXRoaXMubGVuZ3RoPmUubGVuZ3RoP2U6dGhpcztmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mZS53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9dC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGUpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfGUubmVnYXRpdmUpKSx0aGlzLml1YW5kKGUpfSxvLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGVuZ3RoPmUubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGUpOmUuY2xvbmUoKS5pYW5kKHRoaXMpfSxvLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxlbmd0aD5lLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZSk6ZS5jbG9uZSgpLml1YW5kKHRoaXMpfSxvLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihlKXt2YXIgdCxyO3RoaXMubGVuZ3RoPmUubGVuZ3RoPyh0PXRoaXMscj1lKToodD1lLHI9dGhpcyk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT10LndvcmRzW25dXnIud29yZHNbbl07aWYodGhpcyE9PXQpZm9yKDtuPHQubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPXQud29yZHNbbl07cmV0dXJuIHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihlKXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihlKX0sby5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxlbmd0aD5lLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihlKTplLmNsb25lKCkuaXhvcih0aGlzKX0sby5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sZW5ndGg+ZS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGUpOmUuY2xvbmUoKS5pdXhvcih0aGlzKX0sby5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZSl7bihcIm51bWJlclwiPT10eXBlb2YgZSYmZT49MCk7dmFyIHQ9MHxNYXRoLmNlaWwoZS8yNikscj1lJTI2O3RoaXMuX2V4cGFuZCh0KSxyPjAmJnQtLTtmb3IodmFyIGk9MDtpPHQ7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIHI+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LXIpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubm90bj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGUpfSxvLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGUsdCl7bihcIm51bWJlclwiPT10eXBlb2YgZSYmZT49MCk7dmFyIHI9ZS8yNnwwLGk9ZSUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXT10P3RoaXMud29yZHNbcl18MTw8aTp0aGlzLndvcmRzW3JdJn4oMTw8aSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWUubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0PXRoaXMuaXN1YihlKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1lLm5lZ2F0aXZlKXJldHVybiBlLm5lZ2F0aXZlPTAsdD10aGlzLmlzdWIoZSksZS5uZWdhdGl2ZT0xLHQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+ZS5sZW5ndGg/KHI9dGhpcyxuPWUpOihyPWUsbj10aGlzKTtmb3IodmFyIGk9MCxvPTA7bzxuLmxlbmd0aDtvKyspdD0oMHxyLndvcmRzW29dKSsoMHxuLndvcmRzW29dKStpLHRoaXMud29yZHNbb109NjcxMDg4NjMmdCxpPXQ+Pj4yNjtmb3IoOzAhPT1pJiZvPHIubGVuZ3RoO28rKyl0PSgwfHIud29yZHNbb10pK2ksdGhpcy53b3Jkc1tvXT02NzEwODg2MyZ0LGk9dD4+PjI2O2lmKHRoaXMubGVuZ3RoPXIubGVuZ3RoLDAhPT1pKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWksdGhpcy5sZW5ndGgrKztlbHNlIGlmKHIhPT10aGlzKWZvcig7bzxyLmxlbmd0aDtvKyspdGhpcy53b3Jkc1tvXT1yLndvcmRzW29dO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIDAhPT1lLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHQ9dGhpcy5zdWIoZSksZS5uZWdhdGl2ZV49MSx0KTowPT09ZS5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx0PWUuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSx0KTp0aGlzLmxlbmd0aD5lLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChlKTplLmNsb25lKCkuaWFkZCh0aGlzKX0sby5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihlKXtpZigwIT09ZS5uZWdhdGl2ZSl7ZS5uZWdhdGl2ZT0wO3ZhciB0PXRoaXMuaWFkZChlKTtyZXR1cm4gZS5uZWdhdGl2ZT0xLHQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHIsbixpPXRoaXMuY21wKGUpO2lmKDA9PT1pKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztpPjA/KHI9dGhpcyxuPWUpOihyPWUsbj10aGlzKTtmb3IodmFyIG89MCxhPTA7YTxuLmxlbmd0aDthKyspbz0odD0oMHxyLndvcmRzW2FdKS0oMHxuLndvcmRzW2FdKStvKT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZ0O2Zvcig7MCE9PW8mJmE8ci5sZW5ndGg7YSsrKW89KHQ9KDB8ci53b3Jkc1thXSkrbyk+PjI2LHRoaXMud29yZHNbYV09NjcxMDg4NjMmdDtpZigwPT09byYmYTxyLmxlbmd0aCYmciE9PXRoaXMpZm9yKDthPHIubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPXIud29yZHNbYV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGEpLHIhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZSl9O3ZhciBsPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpLG8sYT1lLndvcmRzLHM9dC53b3JkcyxmPXIud29yZHMsdT0wLGM9MHxhWzBdLGg9ODE5MSZjLGQ9Yz4+PjEzLGw9MHxhWzFdLHA9ODE5MSZsLGI9bD4+PjEzLHk9MHxhWzJdLGc9ODE5MSZ5LHY9eT4+PjEzLG09MHxhWzNdLHc9ODE5MSZtLF89bT4+PjEzLEU9MHxhWzRdLFM9ODE5MSZFLEE9RT4+PjEzLHg9MHxhWzVdLGs9ODE5MSZ4LE09eD4+PjEzLFQ9MHxhWzZdLEk9ODE5MSZULFI9VD4+PjEzLFA9MHxhWzddLEw9ODE5MSZQLEI9UD4+PjEzLEM9MHxhWzhdLE89ODE5MSZDLE49Qz4+PjEzLGo9MHxhWzldLEQ9ODE5MSZqLFU9aj4+PjEzLHo9MHxzWzBdLHE9ODE5MSZ6LEY9ej4+PjEzLEs9MHxzWzFdLEg9ODE5MSZLLFY9Sz4+PjEzLFk9MHxzWzJdLFc9ODE5MSZZLEc9WT4+PjEzLFo9MHxzWzNdLEo9ODE5MSZaLCQ9Wj4+PjEzLFg9MHxzWzRdLFE9ODE5MSZYLGVlPVg+Pj4xMyx0ZT0wfHNbNV0scmU9ODE5MSZ0ZSxuZT10ZT4+PjEzLGllPTB8c1s2XSxvZT04MTkxJmllLGFlPWllPj4+MTMsc2U9MHxzWzddLGZlPTgxOTEmc2UsdWU9c2U+Pj4xMyxjZT0wfHNbOF0saGU9ODE5MSZjZSxkZT1jZT4+PjEzLGxlPTB8c1s5XSxwZT04MTkxJmxlLGJlPWxlPj4+MTM7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9MTk7dmFyIHllPSh1KyhuPU1hdGguaW11bChoLHEpKXwwKSsoKDgxOTEmKGk9KGk9TWF0aC5pbXVsKGgsRikpK01hdGguaW11bChkLHEpfDApKTw8MTMpfDA7dT0oKG89TWF0aC5pbXVsKGQsRikpKyhpPj4+MTMpfDApKyh5ZT4+PjI2KXwwLHllJj02NzEwODg2MyxuPU1hdGguaW11bChwLHEpLGk9KGk9TWF0aC5pbXVsKHAsRikpK01hdGguaW11bChiLHEpfDAsbz1NYXRoLmltdWwoYixGKTt2YXIgZ2U9KHUrKG49bitNYXRoLmltdWwoaCxIKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxWKXwwKStNYXRoLmltdWwoZCxIKXwwKSk8PDEzKXwwO3U9KChvPW8rTWF0aC5pbXVsKGQsVil8MCkrKGk+Pj4xMyl8MCkrKGdlPj4+MjYpfDAsZ2UmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGcscSksaT0oaT1NYXRoLmltdWwoZyxGKSkrTWF0aC5pbXVsKHYscSl8MCxvPU1hdGguaW11bCh2LEYpLG49bitNYXRoLmltdWwocCxIKXwwLGk9KGk9aStNYXRoLmltdWwocCxWKXwwKStNYXRoLmltdWwoYixIKXwwLG89bytNYXRoLmltdWwoYixWKXwwO3ZhciB2ZT0odSsobj1uK01hdGguaW11bChoLFcpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLEcpfDApK01hdGguaW11bChkLFcpfDApKTw8MTMpfDA7dT0oKG89bytNYXRoLmltdWwoZCxHKXwwKSsoaT4+PjEzKXwwKSsodmU+Pj4yNil8MCx2ZSY9NjcxMDg4NjMsbj1NYXRoLmltdWwodyxxKSxpPShpPU1hdGguaW11bCh3LEYpKStNYXRoLmltdWwoXyxxKXwwLG89TWF0aC5pbXVsKF8sRiksbj1uK01hdGguaW11bChnLEgpfDAsaT0oaT1pK01hdGguaW11bChnLFYpfDApK01hdGguaW11bCh2LEgpfDAsbz1vK01hdGguaW11bCh2LFYpfDAsbj1uK01hdGguaW11bChwLFcpfDAsaT0oaT1pK01hdGguaW11bChwLEcpfDApK01hdGguaW11bChiLFcpfDAsbz1vK01hdGguaW11bChiLEcpfDA7dmFyIG1lPSh1KyhuPW4rTWF0aC5pbXVsKGgsSil8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsJCl8MCkrTWF0aC5pbXVsKGQsSil8MCkpPDwxMyl8MDt1PSgobz1vK01hdGguaW11bChkLCQpfDApKyhpPj4+MTMpfDApKyhtZT4+PjI2KXwwLG1lJj02NzEwODg2MyxuPU1hdGguaW11bChTLHEpLGk9KGk9TWF0aC5pbXVsKFMsRikpK01hdGguaW11bChBLHEpfDAsbz1NYXRoLmltdWwoQSxGKSxuPW4rTWF0aC5pbXVsKHcsSCl8MCxpPShpPWkrTWF0aC5pbXVsKHcsVil8MCkrTWF0aC5pbXVsKF8sSCl8MCxvPW8rTWF0aC5pbXVsKF8sVil8MCxuPW4rTWF0aC5pbXVsKGcsVyl8MCxpPShpPWkrTWF0aC5pbXVsKGcsRyl8MCkrTWF0aC5pbXVsKHYsVyl8MCxvPW8rTWF0aC5pbXVsKHYsRyl8MCxuPW4rTWF0aC5pbXVsKHAsSil8MCxpPShpPWkrTWF0aC5pbXVsKHAsJCl8MCkrTWF0aC5pbXVsKGIsSil8MCxvPW8rTWF0aC5pbXVsKGIsJCl8MDt2YXIgd2U9KHUrKG49bitNYXRoLmltdWwoaCxRKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxlZSl8MCkrTWF0aC5pbXVsKGQsUSl8MCkpPDwxMyl8MDt1PSgobz1vK01hdGguaW11bChkLGVlKXwwKSsoaT4+PjEzKXwwKSsod2U+Pj4yNil8MCx3ZSY9NjcxMDg4NjMsbj1NYXRoLmltdWwoayxxKSxpPShpPU1hdGguaW11bChrLEYpKStNYXRoLmltdWwoTSxxKXwwLG89TWF0aC5pbXVsKE0sRiksbj1uK01hdGguaW11bChTLEgpfDAsaT0oaT1pK01hdGguaW11bChTLFYpfDApK01hdGguaW11bChBLEgpfDAsbz1vK01hdGguaW11bChBLFYpfDAsbj1uK01hdGguaW11bCh3LFcpfDAsaT0oaT1pK01hdGguaW11bCh3LEcpfDApK01hdGguaW11bChfLFcpfDAsbz1vK01hdGguaW11bChfLEcpfDAsbj1uK01hdGguaW11bChnLEopfDAsaT0oaT1pK01hdGguaW11bChnLCQpfDApK01hdGguaW11bCh2LEopfDAsbz1vK01hdGguaW11bCh2LCQpfDAsbj1uK01hdGguaW11bChwLFEpfDAsaT0oaT1pK01hdGguaW11bChwLGVlKXwwKStNYXRoLmltdWwoYixRKXwwLG89bytNYXRoLmltdWwoYixlZSl8MDt2YXIgX2U9KHUrKG49bitNYXRoLmltdWwoaCxyZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsbmUpfDApK01hdGguaW11bChkLHJlKXwwKSk8PDEzKXwwO3U9KChvPW8rTWF0aC5pbXVsKGQsbmUpfDApKyhpPj4+MTMpfDApKyhfZT4+PjI2KXwwLF9lJj02NzEwODg2MyxuPU1hdGguaW11bChJLHEpLGk9KGk9TWF0aC5pbXVsKEksRikpK01hdGguaW11bChSLHEpfDAsbz1NYXRoLmltdWwoUixGKSxuPW4rTWF0aC5pbXVsKGssSCl8MCxpPShpPWkrTWF0aC5pbXVsKGssVil8MCkrTWF0aC5pbXVsKE0sSCl8MCxvPW8rTWF0aC5pbXVsKE0sVil8MCxuPW4rTWF0aC5pbXVsKFMsVyl8MCxpPShpPWkrTWF0aC5pbXVsKFMsRyl8MCkrTWF0aC5pbXVsKEEsVyl8MCxvPW8rTWF0aC5pbXVsKEEsRyl8MCxuPW4rTWF0aC5pbXVsKHcsSil8MCxpPShpPWkrTWF0aC5pbXVsKHcsJCl8MCkrTWF0aC5pbXVsKF8sSil8MCxvPW8rTWF0aC5pbXVsKF8sJCl8MCxuPW4rTWF0aC5pbXVsKGcsUSl8MCxpPShpPWkrTWF0aC5pbXVsKGcsZWUpfDApK01hdGguaW11bCh2LFEpfDAsbz1vK01hdGguaW11bCh2LGVlKXwwLG49bitNYXRoLmltdWwocCxyZSl8MCxpPShpPWkrTWF0aC5pbXVsKHAsbmUpfDApK01hdGguaW11bChiLHJlKXwwLG89bytNYXRoLmltdWwoYixuZSl8MDt2YXIgRWU9KHUrKG49bitNYXRoLmltdWwoaCxvZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsYWUpfDApK01hdGguaW11bChkLG9lKXwwKSk8PDEzKXwwO3U9KChvPW8rTWF0aC5pbXVsKGQsYWUpfDApKyhpPj4+MTMpfDApKyhFZT4+PjI2KXwwLEVlJj02NzEwODg2MyxuPU1hdGguaW11bChMLHEpLGk9KGk9TWF0aC5pbXVsKEwsRikpK01hdGguaW11bChCLHEpfDAsbz1NYXRoLmltdWwoQixGKSxuPW4rTWF0aC5pbXVsKEksSCl8MCxpPShpPWkrTWF0aC5pbXVsKEksVil8MCkrTWF0aC5pbXVsKFIsSCl8MCxvPW8rTWF0aC5pbXVsKFIsVil8MCxuPW4rTWF0aC5pbXVsKGssVyl8MCxpPShpPWkrTWF0aC5pbXVsKGssRyl8MCkrTWF0aC5pbXVsKE0sVyl8MCxvPW8rTWF0aC5pbXVsKE0sRyl8MCxuPW4rTWF0aC5pbXVsKFMsSil8MCxpPShpPWkrTWF0aC5pbXVsKFMsJCl8MCkrTWF0aC5pbXVsKEEsSil8MCxvPW8rTWF0aC5pbXVsKEEsJCl8MCxuPW4rTWF0aC5pbXVsKHcsUSl8MCxpPShpPWkrTWF0aC5pbXVsKHcsZWUpfDApK01hdGguaW11bChfLFEpfDAsbz1vK01hdGguaW11bChfLGVlKXwwLG49bitNYXRoLmltdWwoZyxyZSl8MCxpPShpPWkrTWF0aC5pbXVsKGcsbmUpfDApK01hdGguaW11bCh2LHJlKXwwLG89bytNYXRoLmltdWwodixuZSl8MCxuPW4rTWF0aC5pbXVsKHAsb2UpfDAsaT0oaT1pK01hdGguaW11bChwLGFlKXwwKStNYXRoLmltdWwoYixvZSl8MCxvPW8rTWF0aC5pbXVsKGIsYWUpfDA7dmFyIFNlPSh1KyhuPW4rTWF0aC5pbXVsKGgsZmUpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLHVlKXwwKStNYXRoLmltdWwoZCxmZSl8MCkpPDwxMyl8MDt1PSgobz1vK01hdGguaW11bChkLHVlKXwwKSsoaT4+PjEzKXwwKSsoU2U+Pj4yNil8MCxTZSY9NjcxMDg4NjMsbj1NYXRoLmltdWwoTyxxKSxpPShpPU1hdGguaW11bChPLEYpKStNYXRoLmltdWwoTixxKXwwLG89TWF0aC5pbXVsKE4sRiksbj1uK01hdGguaW11bChMLEgpfDAsaT0oaT1pK01hdGguaW11bChMLFYpfDApK01hdGguaW11bChCLEgpfDAsbz1vK01hdGguaW11bChCLFYpfDAsbj1uK01hdGguaW11bChJLFcpfDAsaT0oaT1pK01hdGguaW11bChJLEcpfDApK01hdGguaW11bChSLFcpfDAsbz1vK01hdGguaW11bChSLEcpfDAsbj1uK01hdGguaW11bChrLEopfDAsaT0oaT1pK01hdGguaW11bChrLCQpfDApK01hdGguaW11bChNLEopfDAsbz1vK01hdGguaW11bChNLCQpfDAsbj1uK01hdGguaW11bChTLFEpfDAsaT0oaT1pK01hdGguaW11bChTLGVlKXwwKStNYXRoLmltdWwoQSxRKXwwLG89bytNYXRoLmltdWwoQSxlZSl8MCxuPW4rTWF0aC5pbXVsKHcscmUpfDAsaT0oaT1pK01hdGguaW11bCh3LG5lKXwwKStNYXRoLmltdWwoXyxyZSl8MCxvPW8rTWF0aC5pbXVsKF8sbmUpfDAsbj1uK01hdGguaW11bChnLG9lKXwwLGk9KGk9aStNYXRoLmltdWwoZyxhZSl8MCkrTWF0aC5pbXVsKHYsb2UpfDAsbz1vK01hdGguaW11bCh2LGFlKXwwLG49bitNYXRoLmltdWwocCxmZSl8MCxpPShpPWkrTWF0aC5pbXVsKHAsdWUpfDApK01hdGguaW11bChiLGZlKXwwLG89bytNYXRoLmltdWwoYix1ZSl8MDt2YXIgQWU9KHUrKG49bitNYXRoLmltdWwoaCxoZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsZGUpfDApK01hdGguaW11bChkLGhlKXwwKSk8PDEzKXwwO3U9KChvPW8rTWF0aC5pbXVsKGQsZGUpfDApKyhpPj4+MTMpfDApKyhBZT4+PjI2KXwwLEFlJj02NzEwODg2MyxuPU1hdGguaW11bChELHEpLGk9KGk9TWF0aC5pbXVsKEQsRikpK01hdGguaW11bChVLHEpfDAsbz1NYXRoLmltdWwoVSxGKSxuPW4rTWF0aC5pbXVsKE8sSCl8MCxpPShpPWkrTWF0aC5pbXVsKE8sVil8MCkrTWF0aC5pbXVsKE4sSCl8MCxvPW8rTWF0aC5pbXVsKE4sVil8MCxuPW4rTWF0aC5pbXVsKEwsVyl8MCxpPShpPWkrTWF0aC5pbXVsKEwsRyl8MCkrTWF0aC5pbXVsKEIsVyl8MCxvPW8rTWF0aC5pbXVsKEIsRyl8MCxuPW4rTWF0aC5pbXVsKEksSil8MCxpPShpPWkrTWF0aC5pbXVsKEksJCl8MCkrTWF0aC5pbXVsKFIsSil8MCxvPW8rTWF0aC5pbXVsKFIsJCl8MCxuPW4rTWF0aC5pbXVsKGssUSl8MCxpPShpPWkrTWF0aC5pbXVsKGssZWUpfDApK01hdGguaW11bChNLFEpfDAsbz1vK01hdGguaW11bChNLGVlKXwwLG49bitNYXRoLmltdWwoUyxyZSl8MCxpPShpPWkrTWF0aC5pbXVsKFMsbmUpfDApK01hdGguaW11bChBLHJlKXwwLG89bytNYXRoLmltdWwoQSxuZSl8MCxuPW4rTWF0aC5pbXVsKHcsb2UpfDAsaT0oaT1pK01hdGguaW11bCh3LGFlKXwwKStNYXRoLmltdWwoXyxvZSl8MCxvPW8rTWF0aC5pbXVsKF8sYWUpfDAsbj1uK01hdGguaW11bChnLGZlKXwwLGk9KGk9aStNYXRoLmltdWwoZyx1ZSl8MCkrTWF0aC5pbXVsKHYsZmUpfDAsbz1vK01hdGguaW11bCh2LHVlKXwwLG49bitNYXRoLmltdWwocCxoZSl8MCxpPShpPWkrTWF0aC5pbXVsKHAsZGUpfDApK01hdGguaW11bChiLGhlKXwwLG89bytNYXRoLmltdWwoYixkZSl8MDt2YXIgeGU9KHUrKG49bitNYXRoLmltdWwoaCxwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsYmUpfDApK01hdGguaW11bChkLHBlKXwwKSk8PDEzKXwwO3U9KChvPW8rTWF0aC5pbXVsKGQsYmUpfDApKyhpPj4+MTMpfDApKyh4ZT4+PjI2KXwwLHhlJj02NzEwODg2MyxuPU1hdGguaW11bChELEgpLGk9KGk9TWF0aC5pbXVsKEQsVikpK01hdGguaW11bChVLEgpfDAsbz1NYXRoLmltdWwoVSxWKSxuPW4rTWF0aC5pbXVsKE8sVyl8MCxpPShpPWkrTWF0aC5pbXVsKE8sRyl8MCkrTWF0aC5pbXVsKE4sVyl8MCxvPW8rTWF0aC5pbXVsKE4sRyl8MCxuPW4rTWF0aC5pbXVsKEwsSil8MCxpPShpPWkrTWF0aC5pbXVsKEwsJCl8MCkrTWF0aC5pbXVsKEIsSil8MCxvPW8rTWF0aC5pbXVsKEIsJCl8MCxuPW4rTWF0aC5pbXVsKEksUSl8MCxpPShpPWkrTWF0aC5pbXVsKEksZWUpfDApK01hdGguaW11bChSLFEpfDAsbz1vK01hdGguaW11bChSLGVlKXwwLG49bitNYXRoLmltdWwoayxyZSl8MCxpPShpPWkrTWF0aC5pbXVsKGssbmUpfDApK01hdGguaW11bChNLHJlKXwwLG89bytNYXRoLmltdWwoTSxuZSl8MCxuPW4rTWF0aC5pbXVsKFMsb2UpfDAsaT0oaT1pK01hdGguaW11bChTLGFlKXwwKStNYXRoLmltdWwoQSxvZSl8MCxvPW8rTWF0aC5pbXVsKEEsYWUpfDAsbj1uK01hdGguaW11bCh3LGZlKXwwLGk9KGk9aStNYXRoLmltdWwodyx1ZSl8MCkrTWF0aC5pbXVsKF8sZmUpfDAsbz1vK01hdGguaW11bChfLHVlKXwwLG49bitNYXRoLmltdWwoZyxoZSl8MCxpPShpPWkrTWF0aC5pbXVsKGcsZGUpfDApK01hdGguaW11bCh2LGhlKXwwLG89bytNYXRoLmltdWwodixkZSl8MDt2YXIga2U9KHUrKG49bitNYXRoLmltdWwocCxwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKHAsYmUpfDApK01hdGguaW11bChiLHBlKXwwKSk8PDEzKXwwO3U9KChvPW8rTWF0aC5pbXVsKGIsYmUpfDApKyhpPj4+MTMpfDApKyhrZT4+PjI2KXwwLGtlJj02NzEwODg2MyxuPU1hdGguaW11bChELFcpLGk9KGk9TWF0aC5pbXVsKEQsRykpK01hdGguaW11bChVLFcpfDAsbz1NYXRoLmltdWwoVSxHKSxuPW4rTWF0aC5pbXVsKE8sSil8MCxpPShpPWkrTWF0aC5pbXVsKE8sJCl8MCkrTWF0aC5pbXVsKE4sSil8MCxvPW8rTWF0aC5pbXVsKE4sJCl8MCxuPW4rTWF0aC5pbXVsKEwsUSl8MCxpPShpPWkrTWF0aC5pbXVsKEwsZWUpfDApK01hdGguaW11bChCLFEpfDAsbz1vK01hdGguaW11bChCLGVlKXwwLG49bitNYXRoLmltdWwoSSxyZSl8MCxpPShpPWkrTWF0aC5pbXVsKEksbmUpfDApK01hdGguaW11bChSLHJlKXwwLG89bytNYXRoLmltdWwoUixuZSl8MCxuPW4rTWF0aC5pbXVsKGssb2UpfDAsaT0oaT1pK01hdGguaW11bChrLGFlKXwwKStNYXRoLmltdWwoTSxvZSl8MCxvPW8rTWF0aC5pbXVsKE0sYWUpfDAsbj1uK01hdGguaW11bChTLGZlKXwwLGk9KGk9aStNYXRoLmltdWwoUyx1ZSl8MCkrTWF0aC5pbXVsKEEsZmUpfDAsbz1vK01hdGguaW11bChBLHVlKXwwLG49bitNYXRoLmltdWwodyxoZSl8MCxpPShpPWkrTWF0aC5pbXVsKHcsZGUpfDApK01hdGguaW11bChfLGhlKXwwLG89bytNYXRoLmltdWwoXyxkZSl8MDt2YXIgTWU9KHUrKG49bitNYXRoLmltdWwoZyxwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGcsYmUpfDApK01hdGguaW11bCh2LHBlKXwwKSk8PDEzKXwwO3U9KChvPW8rTWF0aC5pbXVsKHYsYmUpfDApKyhpPj4+MTMpfDApKyhNZT4+PjI2KXwwLE1lJj02NzEwODg2MyxuPU1hdGguaW11bChELEopLGk9KGk9TWF0aC5pbXVsKEQsJCkpK01hdGguaW11bChVLEopfDAsbz1NYXRoLmltdWwoVSwkKSxuPW4rTWF0aC5pbXVsKE8sUSl8MCxpPShpPWkrTWF0aC5pbXVsKE8sZWUpfDApK01hdGguaW11bChOLFEpfDAsbz1vK01hdGguaW11bChOLGVlKXwwLG49bitNYXRoLmltdWwoTCxyZSl8MCxpPShpPWkrTWF0aC5pbXVsKEwsbmUpfDApK01hdGguaW11bChCLHJlKXwwLG89bytNYXRoLmltdWwoQixuZSl8MCxuPW4rTWF0aC5pbXVsKEksb2UpfDAsaT0oaT1pK01hdGguaW11bChJLGFlKXwwKStNYXRoLmltdWwoUixvZSl8MCxvPW8rTWF0aC5pbXVsKFIsYWUpfDAsbj1uK01hdGguaW11bChrLGZlKXwwLGk9KGk9aStNYXRoLmltdWwoayx1ZSl8MCkrTWF0aC5pbXVsKE0sZmUpfDAsbz1vK01hdGguaW11bChNLHVlKXwwLG49bitNYXRoLmltdWwoUyxoZSl8MCxpPShpPWkrTWF0aC5pbXVsKFMsZGUpfDApK01hdGguaW11bChBLGhlKXwwLG89bytNYXRoLmltdWwoQSxkZSl8MDt2YXIgVGU9KHUrKG49bitNYXRoLmltdWwodyxwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKHcsYmUpfDApK01hdGguaW11bChfLHBlKXwwKSk8PDEzKXwwO3U9KChvPW8rTWF0aC5pbXVsKF8sYmUpfDApKyhpPj4+MTMpfDApKyhUZT4+PjI2KXwwLFRlJj02NzEwODg2MyxuPU1hdGguaW11bChELFEpLGk9KGk9TWF0aC5pbXVsKEQsZWUpKStNYXRoLmltdWwoVSxRKXwwLG89TWF0aC5pbXVsKFUsZWUpLG49bitNYXRoLmltdWwoTyxyZSl8MCxpPShpPWkrTWF0aC5pbXVsKE8sbmUpfDApK01hdGguaW11bChOLHJlKXwwLG89bytNYXRoLmltdWwoTixuZSl8MCxuPW4rTWF0aC5pbXVsKEwsb2UpfDAsaT0oaT1pK01hdGguaW11bChMLGFlKXwwKStNYXRoLmltdWwoQixvZSl8MCxvPW8rTWF0aC5pbXVsKEIsYWUpfDAsbj1uK01hdGguaW11bChJLGZlKXwwLGk9KGk9aStNYXRoLmltdWwoSSx1ZSl8MCkrTWF0aC5pbXVsKFIsZmUpfDAsbz1vK01hdGguaW11bChSLHVlKXwwLG49bitNYXRoLmltdWwoayxoZSl8MCxpPShpPWkrTWF0aC5pbXVsKGssZGUpfDApK01hdGguaW11bChNLGhlKXwwLG89bytNYXRoLmltdWwoTSxkZSl8MDt2YXIgSWU9KHUrKG49bitNYXRoLmltdWwoUyxwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKFMsYmUpfDApK01hdGguaW11bChBLHBlKXwwKSk8PDEzKXwwO3U9KChvPW8rTWF0aC5pbXVsKEEsYmUpfDApKyhpPj4+MTMpfDApKyhJZT4+PjI2KXwwLEllJj02NzEwODg2MyxuPU1hdGguaW11bChELHJlKSxpPShpPU1hdGguaW11bChELG5lKSkrTWF0aC5pbXVsKFUscmUpfDAsbz1NYXRoLmltdWwoVSxuZSksbj1uK01hdGguaW11bChPLG9lKXwwLGk9KGk9aStNYXRoLmltdWwoTyxhZSl8MCkrTWF0aC5pbXVsKE4sb2UpfDAsbz1vK01hdGguaW11bChOLGFlKXwwLG49bitNYXRoLmltdWwoTCxmZSl8MCxpPShpPWkrTWF0aC5pbXVsKEwsdWUpfDApK01hdGguaW11bChCLGZlKXwwLG89bytNYXRoLmltdWwoQix1ZSl8MCxuPW4rTWF0aC5pbXVsKEksaGUpfDAsaT0oaT1pK01hdGguaW11bChJLGRlKXwwKStNYXRoLmltdWwoUixoZSl8MCxvPW8rTWF0aC5pbXVsKFIsZGUpfDA7dmFyIFJlPSh1KyhuPW4rTWF0aC5pbXVsKGsscGUpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChrLGJlKXwwKStNYXRoLmltdWwoTSxwZSl8MCkpPDwxMyl8MDt1PSgobz1vK01hdGguaW11bChNLGJlKXwwKSsoaT4+PjEzKXwwKSsoUmU+Pj4yNil8MCxSZSY9NjcxMDg4NjMsbj1NYXRoLmltdWwoRCxvZSksaT0oaT1NYXRoLmltdWwoRCxhZSkpK01hdGguaW11bChVLG9lKXwwLG89TWF0aC5pbXVsKFUsYWUpLG49bitNYXRoLmltdWwoTyxmZSl8MCxpPShpPWkrTWF0aC5pbXVsKE8sdWUpfDApK01hdGguaW11bChOLGZlKXwwLG89bytNYXRoLmltdWwoTix1ZSl8MCxuPW4rTWF0aC5pbXVsKEwsaGUpfDAsaT0oaT1pK01hdGguaW11bChMLGRlKXwwKStNYXRoLmltdWwoQixoZSl8MCxvPW8rTWF0aC5pbXVsKEIsZGUpfDA7dmFyIFBlPSh1KyhuPW4rTWF0aC5pbXVsKEkscGUpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChJLGJlKXwwKStNYXRoLmltdWwoUixwZSl8MCkpPDwxMyl8MDt1PSgobz1vK01hdGguaW11bChSLGJlKXwwKSsoaT4+PjEzKXwwKSsoUGU+Pj4yNil8MCxQZSY9NjcxMDg4NjMsbj1NYXRoLmltdWwoRCxmZSksaT0oaT1NYXRoLmltdWwoRCx1ZSkpK01hdGguaW11bChVLGZlKXwwLG89TWF0aC5pbXVsKFUsdWUpLG49bitNYXRoLmltdWwoTyxoZSl8MCxpPShpPWkrTWF0aC5pbXVsKE8sZGUpfDApK01hdGguaW11bChOLGhlKXwwLG89bytNYXRoLmltdWwoTixkZSl8MDt2YXIgTGU9KHUrKG49bitNYXRoLmltdWwoTCxwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKEwsYmUpfDApK01hdGguaW11bChCLHBlKXwwKSk8PDEzKXwwO3U9KChvPW8rTWF0aC5pbXVsKEIsYmUpfDApKyhpPj4+MTMpfDApKyhMZT4+PjI2KXwwLExlJj02NzEwODg2MyxuPU1hdGguaW11bChELGhlKSxpPShpPU1hdGguaW11bChELGRlKSkrTWF0aC5pbXVsKFUsaGUpfDAsbz1NYXRoLmltdWwoVSxkZSk7dmFyIEJlPSh1KyhuPW4rTWF0aC5pbXVsKE8scGUpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChPLGJlKXwwKStNYXRoLmltdWwoTixwZSl8MCkpPDwxMyl8MDt1PSgobz1vK01hdGguaW11bChOLGJlKXwwKSsoaT4+PjEzKXwwKSsoQmU+Pj4yNil8MCxCZSY9NjcxMDg4NjM7dmFyIENlPSh1KyhuPU1hdGguaW11bChELHBlKSl8MCkrKCg4MTkxJihpPShpPU1hdGguaW11bChELGJlKSkrTWF0aC5pbXVsKFUscGUpfDApKTw8MTMpfDA7cmV0dXJuIHU9KChvPU1hdGguaW11bChVLGJlKSkrKGk+Pj4xMyl8MCkrKENlPj4+MjYpfDAsQ2UmPTY3MTA4ODYzLGZbMF09eWUsZlsxXT1nZSxmWzJdPXZlLGZbM109bWUsZls0XT13ZSxmWzVdPV9lLGZbNl09RWUsZls3XT1TZSxmWzhdPUFlLGZbOV09eGUsZlsxMF09a2UsZlsxMV09TWUsZlsxMl09VGUsZlsxM109SWUsZlsxNF09UmUsZlsxNV09UGUsZlsxNl09TGUsZlsxN109QmUsZlsxOF09Q2UsMCE9PXUmJihmWzE5XT11LHIubGVuZ3RoKyspLHJ9O2Z1bmN0aW9uIHAoZSx0LHIpe3JldHVybihuZXcgYikubXVscChlLHQscil9ZnVuY3Rpb24gYihlLHQpe3RoaXMueD1lLHRoaXMueT10fU1hdGguaW11bHx8KGw9ZCksby5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmxlbmd0aCtlLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1lLmxlbmd0aD9sKHRoaXMsZSx0KTpyPDYzP2QodGhpcyxlLHQpOnI8MTAyND9mdW5jdGlvbihlLHQscil7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9ZS5sZW5ndGgrdC5sZW5ndGg7Zm9yKHZhciBuPTAsaT0wLG89MDtvPHIubGVuZ3RoLTE7bysrKXt2YXIgYT1pO2k9MDtmb3IodmFyIHM9NjcxMDg4NjMmbixmPU1hdGgubWluKG8sdC5sZW5ndGgtMSksdT1NYXRoLm1heCgwLG8tZS5sZW5ndGgrMSk7dTw9Zjt1Kyspe3ZhciBjPW8tdSxoPSgwfGUud29yZHNbY10pKigwfHQud29yZHNbdV0pLGQ9NjcxMDg4NjMmaDtzPTY3MTA4ODYzJihkPWQrc3wwKSxpKz0oYT0oYT1hKyhoLzY3MTA4ODY0fDApfDApKyhkPj4+MjYpfDApPj4+MjYsYSY9NjcxMDg4NjN9ci53b3Jkc1tvXT1zLG49YSxhPWl9cmV0dXJuIDAhPT1uP3Iud29yZHNbb109bjpyLmxlbmd0aC0tLHIuc3RyaXAoKX0odGhpcyxlLHQpOnAodGhpcyxlLHQpfSxiLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgQXJyYXkoZSkscj1vLnByb3RvdHlwZS5fY291bnRCaXRzKGUpLTEsbj0wO248ZTtuKyspdFtuXT10aGlzLnJldkJpbihuLHIsZSk7cmV0dXJuIHR9LGIucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihlLHQscil7aWYoMD09PWV8fGU9PT1yLTEpcmV0dXJuIGU7Zm9yKHZhciBuPTAsaT0wO2k8dDtpKyspbnw9KDEmZSk8PHQtaS0xLGU+Pj0xO3JldHVybiBufSxiLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MDthPG87YSsrKW5bYV09dFtlW2FdXSxpW2FdPXJbZVthXV19LGIucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5wZXJtdXRlKG8sZSx0LHIsbixpKTtmb3IodmFyIGE9MTthPGk7YTw8PTEpZm9yKHZhciBzPWE8PDEsZj1NYXRoLmNvcygyKk1hdGguUEkvcyksdT1NYXRoLnNpbigyKk1hdGguUEkvcyksYz0wO2M8aTtjKz1zKWZvcih2YXIgaD1mLGQ9dSxsPTA7bDxhO2wrKyl7dmFyIHA9cltjK2xdLGI9bltjK2xdLHk9cltjK2wrYV0sZz1uW2MrbCthXSx2PWgqeS1kKmc7Zz1oKmcrZCp5LHk9dixyW2MrbF09cCt5LG5bYytsXT1iK2cscltjK2wrYV09cC15LG5bYytsK2FdPWItZyxsIT09cyYmKHY9ZipoLXUqZCxkPWYqZCt1KmgsaD12KX19LGIucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MXxNYXRoLm1heCh0LGUpLG49MSZyLGk9MDtmb3Iocj1yLzJ8MDtyO3I+Pj49MSlpKys7cmV0dXJuIDE8PGkrMStufSxiLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZSx0LHIpe2lmKCEocjw9MSkpZm9yKHZhciBuPTA7bjxyLzI7bisrKXt2YXIgaT1lW25dO2Vbbl09ZVtyLW4tMV0sZVtyLW4tMV09aSxpPXRbbl0sdFtuXT0tdFtyLW4tMV0sdFtyLW4tMV09LWl9fSxiLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MCxuPTA7bjx0LzI7bisrKXt2YXIgaT04MTkyKk1hdGgucm91bmQoZVsyKm4rMV0vdCkrTWF0aC5yb3VuZChlWzIqbl0vdCkrcjtlW25dPTY3MTA4ODYzJmkscj1pPDY3MTA4ODY0PzA6aS82NzEwODg2NHwwfXJldHVybiBlfSxiLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGUsdCxyLGkpe2Zvcih2YXIgbz0wLGE9MDthPHQ7YSsrKW8rPTB8ZVthXSxyWzIqYV09ODE5MSZvLG8+Pj49MTMsclsyKmErMV09ODE5MSZvLG8+Pj49MTM7Zm9yKGE9Mip0O2E8aTsrK2EpclthXT0wO24oMD09PW8pLG4oMD09KC04MTkyJm8pKX0sYi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09MDtyZXR1cm4gdH0sYi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihlLHQscil7dmFyIG49Mip0aGlzLmd1ZXNzTGVuMTNiKGUubGVuZ3RoLHQubGVuZ3RoKSxpPXRoaXMubWFrZVJCVChuKSxvPXRoaXMuc3R1YihuKSxhPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSxmPW5ldyBBcnJheShuKSx1PW5ldyBBcnJheShuKSxjPW5ldyBBcnJheShuKSxoPW5ldyBBcnJheShuKSxkPXIud29yZHM7ZC5sZW5ndGg9bix0aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCxhLG4pLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLHUsbiksdGhpcy50cmFuc2Zvcm0oYSxvLHMsZixuLGkpLHRoaXMudHJhbnNmb3JtKHUsbyxjLGgsbixpKTtmb3IodmFyIGw9MDtsPG47bCsrKXt2YXIgcD1zW2xdKmNbbF0tZltsXSpoW2xdO2ZbbF09c1tsXSpoW2xdK2ZbbF0qY1tsXSxzW2xdPXB9cmV0dXJuIHRoaXMuY29uanVnYXRlKHMsZixuKSx0aGlzLnRyYW5zZm9ybShzLGYsZCxvLG4saSksdGhpcy5jb25qdWdhdGUoZCxvLG4pLHRoaXMubm9ybWFsaXplMTNiKGQsbiksci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9ZS5sZW5ndGgrdC5sZW5ndGgsci5zdHJpcCgpfSxvLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2UubGVuZ3RoKSx0aGlzLm11bFRvKGUsdCl9LG8ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2UubGVuZ3RoKSxwKHRoaXMsZSx0KX0sby5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGUsdGhpcyl9LG8ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGUpe24oXCJudW1iZXJcIj09dHlwZW9mIGUpLG4oZTw2NzEwODg2NCk7Zm9yKHZhciB0PTAscj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSplLG89KDY3MTA4ODYzJmkpKyg2NzEwODg2MyZ0KTt0Pj49MjYsdCs9aS82NzEwODg2NHwwLHQrPW8+Pj4yNix0aGlzLndvcmRzW3JdPTY3MTA4ODYzJm99cmV0dXJuIDAhPT10JiYodGhpcy53b3Jkc1tyXT10LHRoaXMubGVuZ3RoKyspLHRoaXN9LG8ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihlKX0sby5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxvLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxvLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBBcnJheShlLmJpdExlbmd0aCgpKSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXIvMjZ8MCxpPXIlMjY7dFtyXT0oZS53b3Jkc1tuXSYxPDxpKT4+Pml9cmV0dXJuIHR9KGUpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbmV3IG8oMSk7Zm9yKHZhciByPXRoaXMsbj0wO248dC5sZW5ndGgmJjA9PT10W25dO24rKyxyPXIuc3FyKCkpO2lmKCsrbjx0Lmxlbmd0aClmb3IodmFyIGk9ci5zcXIoKTtuPHQubGVuZ3RoO24rKyxpPWkuc3FyKCkpMCE9PXRbbl0mJihyPXIubXVsKGkpKTtyZXR1cm4gcn0sby5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGUpe24oXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+PTApO3ZhciB0LHI9ZSUyNixpPShlLXIpLzI2LG89NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgYT0wO2Zvcih0PTA7dDx0aGlzLmxlbmd0aDt0Kyspe3ZhciBzPXRoaXMud29yZHNbdF0mbyxmPSgwfHRoaXMud29yZHNbdF0pLXM8PHI7dGhpcy53b3Jkc1t0XT1mfGEsYT1zPj4+MjYtcn1hJiYodGhpcy53b3Jkc1t0XT1hLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1pKXtmb3IodD10aGlzLmxlbmd0aC0xO3Q+PTA7dC0tKXRoaXMud29yZHNbdCtpXT10aGlzLndvcmRzW3RdO2Zvcih0PTA7dDxpO3QrKyl0aGlzLndvcmRzW3RdPTA7dGhpcy5sZW5ndGgrPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZSl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGUpfSxvLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZSx0LHIpe3ZhciBpO24oXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+PTApLGk9dD8odC10JTI2KS8yNjowO3ZhciBvPWUlMjYsYT1NYXRoLm1pbigoZS1vKS8yNix0aGlzLmxlbmd0aCkscz02NzEwODg2M142NzEwODg2Mz4+Pm88PG8sZj1yO2lmKGktPWEsaT1NYXRoLm1heCgwLGkpLGYpe2Zvcih2YXIgdT0wO3U8YTt1KyspZi53b3Jkc1t1XT10aGlzLndvcmRzW3VdO2YubGVuZ3RoPWF9aWYoMD09PWEpO2Vsc2UgaWYodGhpcy5sZW5ndGg+YSlmb3IodGhpcy5sZW5ndGgtPWEsdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXRoaXMud29yZHNbdV09dGhpcy53b3Jkc1t1K2FdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGM9MDtmb3IodT10aGlzLmxlbmd0aC0xO3U+PTAmJigwIT09Y3x8dT49aSk7dS0tKXt2YXIgaD0wfHRoaXMud29yZHNbdV07dGhpcy53b3Jkc1t1XT1jPDwyNi1vfGg+Pj5vLGM9aCZzfXJldHVybiBmJiYwIT09YyYmKGYud29yZHNbZi5sZW5ndGgrK109YyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihlLHQscil9LG8ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihlKX0sby5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZSl9LG8ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihlKX0sby5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZSl9LG8ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGUpe24oXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+PTApO3ZhciB0PWUlMjYscj0oZS10KS8yNixpPTE8PHQ7cmV0dXJuISh0aGlzLmxlbmd0aDw9cikmJiEhKHRoaXMud29yZHNbcl0maSl9LG8ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPj0wKTt2YXIgdD1lJTI2LHI9KGUtdCkvMjY7aWYobigwPT09dGhpcy5uZWdhdGl2ZSxcImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVyc1wiKSx0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcztpZigwIT09dCYmcisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHIsdGhpcy5sZW5ndGgpLDAhPT10KXt2YXIgaT02NzEwODg2M142NzEwODg2Mz4+PnQ8PHQ7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihlKX0sby5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZSl7cmV0dXJuIG4oXCJudW1iZXJcIj09dHlwZW9mIGUpLG4oZTw2NzEwODg2NCksZTwwP3RoaXMuaXN1Ym4oLWUpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8ZT8odGhpcy53b3Jkc1swXT1lLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGUpfSxvLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZSl7dGhpcy53b3Jkc1swXSs9ZTtmb3IodmFyIHQ9MDt0PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3RdPj02NzEwODg2NDt0KyspdGhpcy53b3Jkc1t0XS09NjcxMDg4NjQsdD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t0KzFdPTE6dGhpcy53b3Jkc1t0KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHQrMSksdGhpc30sby5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZSl7aWYobihcIm51bWJlclwiPT10eXBlb2YgZSksbihlPDY3MTA4ODY0KSxlPDApcmV0dXJuIHRoaXMuaWFkZG4oLWUpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihlKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1lLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB0PTA7dDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t0XTwwO3QrKyl0aGlzLndvcmRzW3RdKz02NzEwODg2NCx0aGlzLndvcmRzW3QrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGUpfSxvLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZSl9LG8ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LG8ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxvLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpLG8sYT1lLmxlbmd0aCtyO3RoaXMuX2V4cGFuZChhKTt2YXIgcz0wO2ZvcihpPTA7aTxlLmxlbmd0aDtpKyspe289KDB8dGhpcy53b3Jkc1tpK3JdKStzO3ZhciBmPSgwfGUud29yZHNbaV0pKnQ7cz0oKG8tPTY3MTA4ODYzJmYpPj4yNiktKGYvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJm99Zm9yKDtpPHRoaXMubGVuZ3RoLXI7aSsrKXM9KG89KDB8dGhpcy53b3Jkc1tpK3JdKStzKT4+MjYsdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJm87aWYoMD09PXMpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobigtMT09PXMpLHM9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspcz0obz0tKDB8dGhpcy53b3Jkc1tpXSkrcyk+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmbztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZSx0KXt2YXIgcj0odGhpcy5sZW5ndGgsZS5sZW5ndGgpLG49dGhpcy5jbG9uZSgpLGk9ZSxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXTswIT09KHI9MjYtdGhpcy5fY291bnRCaXRzKGEpKSYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsZj1uLmxlbmd0aC1pLmxlbmd0aDtpZihcIm1vZFwiIT09dCl7KHM9bmV3IG8obnVsbCkpLmxlbmd0aD1mKzEscy53b3Jkcz1uZXcgQXJyYXkocy5sZW5ndGgpO2Zvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKXMud29yZHNbdV09MH12YXIgYz1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGksMSxmKTswPT09Yy5uZWdhdGl2ZSYmKG49YyxzJiYocy53b3Jkc1tmXT0xKSk7Zm9yKHZhciBoPWYtMTtoPj0wO2gtLSl7dmFyIGQ9NjcxMDg4NjQqKDB8bi53b3Jkc1tpLmxlbmd0aCtoXSkrKDB8bi53b3Jkc1tpLmxlbmd0aCtoLTFdKTtmb3IoZD1NYXRoLm1pbihkL2F8MCw2NzEwODg2Myksbi5faXNobG5zdWJtdWwoaSxkLGgpOzAhPT1uLm5lZ2F0aXZlOylkLS0sbi5uZWdhdGl2ZT0wLG4uX2lzaGxuc3VibXVsKGksMSxoKSxuLmlzWmVybygpfHwobi5uZWdhdGl2ZV49MSk7cyYmKHMud29yZHNbaF09ZCl9cmV0dXJuIHMmJnMuc3RyaXAoKSxuLnN0cmlwKCksXCJkaXZcIiE9PXQmJjAhPT1yJiZuLml1c2hybihyKSx7ZGl2OnN8fG51bGwsbW9kOm59fSxvLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBuKCFlLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IG8oMCksbW9kOm5ldyBvKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWUubmVnYXRpdmU/KHM9dGhpcy5uZWcoKS5kaXZtb2QoZSx0KSxcIm1vZFwiIT09dCYmKGk9cy5kaXYubmVnKCkpLFwiZGl2XCIhPT10JiYoYT1zLm1vZC5uZWcoKSxyJiYwIT09YS5uZWdhdGl2ZSYmYS5pYWRkKGUpKSx7ZGl2OmksbW9kOmF9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWUubmVnYXRpdmU/KHM9dGhpcy5kaXZtb2QoZS5uZWcoKSx0KSxcIm1vZFwiIT09dCYmKGk9cy5kaXYubmVnKCkpLHtkaXY6aSxtb2Q6cy5tb2R9KTowIT0odGhpcy5uZWdhdGl2ZSZlLm5lZ2F0aXZlKT8ocz10aGlzLm5lZygpLmRpdm1vZChlLm5lZygpLHQpLFwiZGl2XCIhPT10JiYoYT1zLm1vZC5uZWcoKSxyJiYwIT09YS5uZWdhdGl2ZSYmYS5pc3ViKGUpKSx7ZGl2OnMuZGl2LG1vZDphfSk6ZS5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGUpPDA/e2RpdjpuZXcgbygwKSxtb2Q6dGhpc306MT09PWUubGVuZ3RoP1wiZGl2XCI9PT10P3tkaXY6dGhpcy5kaXZuKGUud29yZHNbMF0pLG1vZDpudWxsfTpcIm1vZFwiPT09dD97ZGl2Om51bGwsbW9kOm5ldyBvKHRoaXMubW9kbihlLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGUud29yZHNbMF0pLG1vZDpuZXcgbyh0aGlzLm1vZG4oZS53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGUsdCk7dmFyIGksYSxzfSxvLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGl2bW9kKGUsXCJkaXZcIiwhMSkuZGl2fSxvLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGl2bW9kKGUsXCJtb2RcIiwhMSkubW9kfSxvLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRpdm1vZChlLFwibW9kXCIsITApLm1vZH0sby5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5kaXZtb2QoZSk7aWYodC5tb2QuaXNaZXJvKCkpcmV0dXJuIHQuZGl2O3ZhciByPTAhPT10LmRpdi5uZWdhdGl2ZT90Lm1vZC5pc3ViKGUpOnQubW9kLG49ZS51c2hybigxKSxpPWUuYW5kbG4oMSksbz1yLmNtcChuKTtyZXR1cm4gbzwwfHwxPT09aSYmMD09PW8/dC5kaXY6MCE9PXQuZGl2Lm5lZ2F0aXZlP3QuZGl2LmlzdWJuKDEpOnQuZGl2LmlhZGRuKDEpfSxvLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGUpe24oZTw9NjcxMDg4NjMpO2Zvcih2YXIgdD0oMTw8MjYpJWUscj0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSlyPSh0KnIrKDB8dGhpcy53b3Jkc1tpXSkpJWU7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGUpe24oZTw9NjcxMDg4NjMpO2Zvcih2YXIgdD0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkrNjcxMDg4NjQqdDt0aGlzLndvcmRzW3JdPWkvZXwwLHQ9aSVlfXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihlKX0sby5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihlKXtuKDA9PT1lLm5lZ2F0aXZlKSxuKCFlLmlzWmVybygpKTt2YXIgdD10aGlzLHI9ZS5jbG9uZSgpO3Q9MCE9PXQubmVnYXRpdmU/dC51bW9kKGUpOnQuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxzPW5ldyBvKDApLGY9bmV3IG8oMSksdT0wO3QuaXNFdmVuKCkmJnIuaXNFdmVuKCk7KXQuaXVzaHJuKDEpLHIuaXVzaHJuKDEpLCsrdTtmb3IodmFyIGM9ci5jbG9uZSgpLGg9dC5jbG9uZSgpOyF0LmlzWmVybygpOyl7Zm9yKHZhciBkPTAsbD0xOzA9PSh0LndvcmRzWzBdJmwpJiZkPDI2OysrZCxsPDw9MSk7aWYoZD4wKWZvcih0Lml1c2hybihkKTtkLS0gPjA7KShpLmlzT2RkKCl8fGEuaXNPZGQoKSkmJihpLmlhZGQoYyksYS5pc3ViKGgpKSxpLml1c2hybigxKSxhLml1c2hybigxKTtmb3IodmFyIHA9MCxiPTE7MD09KHIud29yZHNbMF0mYikmJnA8MjY7KytwLGI8PD0xKTtpZihwPjApZm9yKHIuaXVzaHJuKHApO3AtLSA+MDspKHMuaXNPZGQoKXx8Zi5pc09kZCgpKSYmKHMuaWFkZChjKSxmLmlzdWIoaCkpLHMuaXVzaHJuKDEpLGYuaXVzaHJuKDEpO3QuY21wKHIpPj0wPyh0LmlzdWIociksaS5pc3ViKHMpLGEuaXN1YihmKSk6KHIuaXN1Yih0KSxzLmlzdWIoaSksZi5pc3ViKGEpKX1yZXR1cm57YTpzLGI6ZixnY2Q6ci5pdXNobG4odSl9fSxvLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZSl7bigwPT09ZS5uZWdhdGl2ZSksbighZS5pc1plcm8oKSk7dmFyIHQ9dGhpcyxyPWUuY2xvbmUoKTt0PTAhPT10Lm5lZ2F0aXZlP3QudW1vZChlKTp0LmNsb25lKCk7Zm9yKHZhciBpLGE9bmV3IG8oMSkscz1uZXcgbygwKSxmPXIuY2xvbmUoKTt0LmNtcG4oMSk+MCYmci5jbXBuKDEpPjA7KXtmb3IodmFyIHU9MCxjPTE7MD09KHQud29yZHNbMF0mYykmJnU8MjY7Kyt1LGM8PD0xKTtpZih1PjApZm9yKHQuaXVzaHJuKHUpO3UtLSA+MDspYS5pc09kZCgpJiZhLmlhZGQoZiksYS5pdXNocm4oMSk7Zm9yKHZhciBoPTAsZD0xOzA9PShyLndvcmRzWzBdJmQpJiZoPDI2OysraCxkPDw9MSk7aWYoaD4wKWZvcihyLml1c2hybihoKTtoLS0gPjA7KXMuaXNPZGQoKSYmcy5pYWRkKGYpLHMuaXVzaHJuKDEpO3QuY21wKHIpPj0wPyh0LmlzdWIociksYS5pc3ViKHMpKTooci5pc3ViKHQpLHMuaXN1YihhKSl9cmV0dXJuKGk9MD09PXQuY21wbigxKT9hOnMpLmNtcG4oMCk8MCYmaS5pYWRkKGUpLGl9LG8ucHJvdG90eXBlLmdjZD1mdW5jdGlvbihlKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBlLmFicygpO2lmKGUuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHQ9dGhpcy5jbG9uZSgpLHI9ZS5jbG9uZSgpO3QubmVnYXRpdmU9MCxyLm5lZ2F0aXZlPTA7Zm9yKHZhciBuPTA7dC5pc0V2ZW4oKSYmci5pc0V2ZW4oKTtuKyspdC5pdXNocm4oMSksci5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3QuaXNFdmVuKCk7KXQuaXVzaHJuKDEpO2Zvcig7ci5pc0V2ZW4oKTspci5pdXNocm4oMSk7dmFyIGk9dC5jbXAocik7aWYoaTwwKXt2YXIgbz10O3Q9cixyPW99ZWxzZSBpZigwPT09aXx8MD09PXIuY21wbigxKSlicmVhazt0LmlzdWIocil9cmV0dXJuIHIuaXVzaGxuKG4pfSxvLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVnY2QoZSkuYS51bW9kKGUpfSxvLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LG8ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZlfSxvLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiBlKTt2YXIgdD1lJTI2LHI9KGUtdCkvMjYsaT0xPDx0O2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdfD1pLHRoaXM7Zm9yKHZhciBvPWksYT1yOzAhPT1vJiZhPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9MHx0aGlzLndvcmRzW2FdO289KHMrPW8pPj4+MjYscyY9NjcxMDg4NjMsdGhpcy53b3Jkc1thXT1zfXJldHVybiAwIT09byYmKHRoaXMud29yZHNbYV09byx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sby5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihlKXt2YXIgdCxyPWU8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpdD0xO2Vsc2V7ciYmKGU9LWUpLG4oZTw9NjcxMDg4NjMsXCJOdW1iZXIgaXMgdG9vIGJpZ1wiKTt2YXIgaT0wfHRoaXMud29yZHNbMF07dD1pPT09ZT8wOmk8ZT8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC10OnR9LG8ucHJvdG90eXBlLmNtcD1mdW5jdGlvbihlKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWUubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1lLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB0PXRoaXMudWNtcChlKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtdDp0fSxvLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGUpe2lmKHRoaXMubGVuZ3RoPmUubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGUubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgdD0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49MHx0aGlzLndvcmRzW3JdLGk9MHxlLndvcmRzW3JdO2lmKG4hPT1pKXtuPGk/dD0tMTpuPmkmJih0PTEpO2JyZWFrfX1yZXR1cm4gdH0sby5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGUpe3JldHVybiAxPT09dGhpcy5jbXBuKGUpfSxvLnByb3RvdHlwZS5ndD1mdW5jdGlvbihlKXtyZXR1cm4gMT09PXRoaXMuY21wKGUpfSxvLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNtcG4oZSk+PTB9LG8ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbXAoZSk+PTB9LG8ucHJvdG90eXBlLmx0bj1mdW5jdGlvbihlKXtyZXR1cm4tMT09PXRoaXMuY21wbihlKX0sby5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT10aGlzLmNtcChlKX0sby5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbXBuKGUpPD0wfSxvLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY21wKGUpPD0wfSxvLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZSl9LG8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGUpe3JldHVybiAwPT09dGhpcy5jbXAoZSl9LG8ucmVkPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRShlKX0sby5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSxuKDA9PT10aGlzLm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksZS5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGUpfSxvLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxvLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVkPWUsdGhpc30sby5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLl9mb3JjZVJlZChlKX0sby5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMucmVkLFwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5hZGQodGhpcyxlKX0sby5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihlKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlhZGQodGhpcyxlKX0sby5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zdWIodGhpcyxlKX0sby5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihlKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlzdWIodGhpcyxlKX0sby5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zaGwodGhpcyxlKX0sby5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGUpLHRoaXMucmVkLm11bCh0aGlzLGUpfSxvLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGUpLHRoaXMucmVkLmltdWwodGhpcyxlKX0sby5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sby5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sby5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sby5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMucmVkJiYhZS5yZWQsXCJyZWRQb3cobm9ybWFsTnVtKVwiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxlKX07dmFyIHk9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBnKGUsdCl7dGhpcy5uYW1lPWUsdGhpcy5wPW5ldyBvKHQsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBvKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB2KCl7Zy5jYWxsKHRoaXMsXCJrMjU2XCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZlwiKX1mdW5jdGlvbiBtKCl7Zy5jYWxsKHRoaXMsXCJwMjI0XCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMVwiKX1mdW5jdGlvbiB3KCl7Zy5jYWxsKHRoaXMsXCJwMTkyXCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZlwiKX1mdW5jdGlvbiBfKCl7Zy5jYWxsKHRoaXMsXCIyNTUxOVwiLFwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiKX1mdW5jdGlvbiBFKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXt2YXIgdD1vLl9wcmltZShlKTt0aGlzLm09dC5wLHRoaXMucHJpbWU9dH1lbHNlIG4oZS5ndG4oMSksXCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDFcIiksdGhpcy5tPWUsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIFMoZSl7RS5jYWxsKHRoaXMsZSksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgbygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1nLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IG8obnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxlfSxnLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGUpe3ZhciB0LHI9ZTtkb3t0aGlzLnNwbGl0KHIsdGhpcy50bXApLHQ9KHI9KHI9dGhpcy5pbXVsSyhyKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHQ+dGhpcy5uKTt2YXIgbj10PHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6dm9pZCAwIT09ci5zdHJpcD9yLnN0cmlwKCk6ci5fc3RyaXAoKSxyfSxnLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihlLHQpe2UuaXVzaHJuKHRoaXMubiwwLHQpfSxnLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihlKXtyZXR1cm4gZS5pbXVsKHRoaXMuayl9LGkodixnKSx2LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1NYXRoLm1pbihlLmxlbmd0aCw5KSxuPTA7bjxyO24rKyl0LndvcmRzW25dPWUud29yZHNbbl07aWYodC5sZW5ndGg9cixlLmxlbmd0aDw9OSlyZXR1cm4gZS53b3Jkc1swXT0wLHZvaWQoZS5sZW5ndGg9MSk7dmFyIGk9ZS53b3Jkc1s5XTtmb3IodC53b3Jkc1t0Lmxlbmd0aCsrXT00MTk0MzAzJmksbj0xMDtuPGUubGVuZ3RoO24rKyl7dmFyIG89MHxlLndvcmRzW25dO2Uud29yZHNbbi0xMF09KDQxOTQzMDMmbyk8PDR8aT4+PjIyLGk9b31pPj4+PTIyLGUud29yZHNbbi0xMF09aSwwPT09aSYmZS5sZW5ndGg+MTA/ZS5sZW5ndGgtPTEwOmUubGVuZ3RoLT05fSx2LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihlKXtlLndvcmRzW2UubGVuZ3RoXT0wLGUud29yZHNbZS5sZW5ndGgrMV09MCxlLmxlbmd0aCs9Mjtmb3IodmFyIHQ9MCxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPTB8ZS53b3Jkc1tyXTt0Kz05NzcqbixlLndvcmRzW3JdPTY3MTA4ODYzJnQsdD02NCpuKyh0LzY3MTA4ODY0fDApfXJldHVybiAwPT09ZS53b3Jkc1tlLmxlbmd0aC0xXSYmKGUubGVuZ3RoLS0sMD09PWUud29yZHNbZS5sZW5ndGgtMV0mJmUubGVuZ3RoLS0pLGV9LGkobSxnKSxpKHcsZyksaShfLGcpLF8ucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49MTkqKDB8ZS53b3Jkc1tyXSkrdCxpPTY3MTA4ODYzJm47bj4+Pj0yNixlLndvcmRzW3JdPWksdD1ufXJldHVybiAwIT09dCYmKGUud29yZHNbZS5sZW5ndGgrK109dCksZX0sby5fcHJpbWU9ZnVuY3Rpb24oZSl7aWYoeVtlXSlyZXR1cm4geVtlXTt2YXIgdDtpZihcImsyNTZcIj09PWUpdD1uZXcgdjtlbHNlIGlmKFwicDIyNFwiPT09ZSl0PW5ldyBtO2Vsc2UgaWYoXCJwMTkyXCI9PT1lKXQ9bmV3IHc7ZWxzZXtpZihcInAyNTUxOVwiIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHByaW1lIFwiK2UpO3Q9bmV3IF99cmV0dXJuIHlbZV09dCx0fSxFLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihlKXtuKDA9PT1lLm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbihlLnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LEUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGUsdCl7bigwPT0oZS5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4oZS5yZWQmJmUucmVkPT09dC5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxFLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShlKS5fZm9yY2VSZWQodGhpcyk6ZS51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxFLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNaZXJvKCk/ZS5jbG9uZSgpOnRoaXMubS5zdWIoZSkuX2ZvcmNlUmVkKHRoaXMpfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl92ZXJpZnkyKGUsdCk7dmFyIHI9ZS5hZGQodCk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGUsdCl7dGhpcy5fdmVyaWZ5MihlLHQpO3ZhciByPWUuaWFkZCh0KTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSkscn0sRS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGUsdCl7dGhpcy5fdmVyaWZ5MihlLHQpO3ZhciByPWUuc3ViKHQpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LEUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZSx0KXt0aGlzLl92ZXJpZnkyKGUsdCk7dmFyIHI9ZS5pc3ViKHQpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSkscn0sRS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZSksdGhpcy5pbW9kKGUudXNobG4odCkpfSxFLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZSx0KSx0aGlzLmltb2QoZS5pbXVsKHQpKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZSx0KSx0aGlzLmltb2QoZS5tdWwodCkpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmltdWwoZSxlLmNsb25lKCkpfSxFLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubXVsKGUsZSl9LEUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZSl7aWYoZS5pc1plcm8oKSlyZXR1cm4gZS5jbG9uZSgpO3ZhciB0PXRoaXMubS5hbmRsbigzKTtpZihuKHQlMj09MSksMz09PXQpe3ZhciByPXRoaXMubS5hZGQobmV3IG8oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZSxyKX1mb3IodmFyIGk9dGhpcy5tLnN1Ym4oMSksYT0wOyFpLmlzWmVybygpJiYwPT09aS5hbmRsbigxKTspYSsrLGkuaXVzaHJuKDEpO24oIWkuaXNaZXJvKCkpO3ZhciBzPW5ldyBvKDEpLnRvUmVkKHRoaXMpLGY9cy5yZWROZWcoKSx1PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxjPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoYz1uZXcgbygyKmMqYykudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGMsdSkuY21wKGYpOyljLnJlZElBZGQoZik7Zm9yKHZhciBoPXRoaXMucG93KGMsaSksZD10aGlzLnBvdyhlLGkuYWRkbigxKS5pdXNocm4oMSkpLGw9dGhpcy5wb3coZSxpKSxwPWE7MCE9PWwuY21wKHMpOyl7Zm9yKHZhciBiPWwseT0wOzAhPT1iLmNtcChzKTt5KyspYj1iLnJlZFNxcigpO24oeTxwKTt2YXIgZz10aGlzLnBvdyhoLG5ldyBvKDEpLml1c2hsbihwLXktMSkpO2Q9ZC5yZWRNdWwoZyksaD1nLnJlZFNxcigpLGw9bC5yZWRNdWwoaCkscD15fXJldHVybiBkfSxFLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT10Lm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHQpLnJlZE5lZygpKTp0aGlzLmltb2QodCl9LEUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihlLHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT10LmNtcG4oMSkpcmV0dXJuIGUuY2xvbmUoKTt2YXIgcj1uZXcgQXJyYXkoMTYpO3JbMF09bmV3IG8oMSkudG9SZWQodGhpcyksclsxXT1lO2Zvcih2YXIgbj0yO248ci5sZW5ndGg7bisrKXJbbl09dGhpcy5tdWwocltuLTFdLGUpO3ZhciBpPXJbMF0sYT0wLHM9MCxmPXQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1mJiYoZj0yNiksbj10Lmxlbmd0aC0xO24+PTA7bi0tKXtmb3IodmFyIHU9dC53b3Jkc1tuXSxjPWYtMTtjPj0wO2MtLSl7dmFyIGg9dT4+YyYxO2khPT1yWzBdJiYoaT10aGlzLnNxcihpKSksMCE9PWh8fDAhPT1hPyhhPDw9MSxhfD1oLCg0PT09KytzfHwwPT09biYmMD09PWMpJiYoaT10aGlzLm11bChpLHJbYV0pLHM9MCxhPTApKTpzPTB9Zj0yNn1yZXR1cm4gaX0sRS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGUpe3ZhciB0PWUudW1vZCh0aGlzLm0pO3JldHVybiB0PT09ZT90LmNsb25lKCk6dH0sRS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbG9uZSgpO3JldHVybiB0LnJlZD1udWxsLHR9LG8ubW9udD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFMoZSl9LGkoUyxFKSxTLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW1vZChlLnVzaGxuKHRoaXMuc2hpZnQpKX0sUy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbW9kKGUubXVsKHRoaXMucmludikpO3JldHVybiB0LnJlZD1udWxsLHR9LFMucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZSx0KXtpZihlLmlzWmVybygpfHx0LmlzWmVybygpKXJldHVybiBlLndvcmRzWzBdPTAsZS5sZW5ndGg9MSxlO3ZhciByPWUuaW11bCh0KSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/bz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKG89aS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxTLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZSx0KXtpZihlLmlzWmVybygpfHx0LmlzWmVybygpKXJldHVybiBuZXcgbygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHI9ZS5tdWwodCksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0sUy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbW9kKGUuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShlLHRoaXMpfSkuY2FsbCh0aGlzLHIoMjUpKGUpKX0sZnVuY3Rpb24oZSx0KXt2YXIgcjtyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7dHJ5e3I9cnx8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiYocj13aW5kb3cpfWUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dCxpPXIoNCksbz1yKDEyKSxhPXIoNzIpO24uYXNzZXJ0PW8sbi50b0FycmF5PWEudG9BcnJheSxuLnplcm8yPWEuemVybzIsbi50b0hleD1hLnRvSGV4LG4uZW5jb2RlPWEuZW5jb2RlLG4uZ2V0TkFGPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgQXJyYXkoTWF0aC5tYXgoZS5iaXRMZW5ndGgoKSxyKSsxKTtuLmZpbGwoMCk7Zm9yKHZhciBpPTE8PHQrMSxvPWUuY2xvbmUoKSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzLGY9by5hbmRsbihpLTEpO28uaXNPZGQoKT8ocz1mPihpPj4xKS0xPyhpPj4xKS1mOmYsby5pc3VibihzKSk6cz0wLG5bYV09cyxvLml1c2hybigxKX1yZXR1cm4gbn0sbi5nZXRKU0Y9ZnVuY3Rpb24oZSx0KXt2YXIgcj1bW10sW11dO2U9ZS5jbG9uZSgpLHQ9dC5jbG9uZSgpO2Zvcih2YXIgbj0wLGk9MDtlLmNtcG4oLW4pPjB8fHQuY21wbigtaSk+MDspe3ZhciBvLGEscyxmPWUuYW5kbG4oMykrbiYzLHU9dC5hbmRsbigzKStpJjM7aWYoMz09PWYmJihmPS0xKSwzPT09dSYmKHU9LTEpLDA9PSgxJmYpKW89MDtlbHNlIG89MyE9PShzPWUuYW5kbG4oNykrbiY3KSYmNSE9PXN8fDIhPT11P2Y6LWY7aWYoclswXS5wdXNoKG8pLDA9PSgxJnUpKWE9MDtlbHNlIGE9MyE9PShzPXQuYW5kbG4oNykraSY3KSYmNSE9PXN8fDIhPT1mP3U6LXU7clsxXS5wdXNoKGEpLDIqbj09PW8rMSYmKG49MS1uKSwyKmk9PT1hKzEmJihpPTEtaSksZS5pdXNocm4oMSksdC5pdXNocm4oMSl9cmV0dXJuIHJ9LG4uY2FjaGVkUHJvcGVydHk9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVwiX1wiK3Q7ZS5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tuXT90aGlzW25dOnRoaXNbbl09ci5jYWxsKHRoaXMpfX0sbi5wYXJzZUJ5dGVzPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP24udG9BcnJheShlLFwiaGV4XCIpOmV9LG4uaW50RnJvbUxFPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaShlLFwiaGV4XCIsXCJsZVwiKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDk4KSxpPXIoMjU4KSxvPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gYShlKXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PT1vLmNhbGwoZSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfWZ1bmN0aW9uIGYoZSl7cmV0dXJuXCJbb2JqZWN0IEZ1bmN0aW9uXVwiPT09by5jYWxsKGUpfWZ1bmN0aW9uIHUoZSx0KXtpZihudWxsIT1lKWlmKFwib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT1bZV0pLGEoZSkpZm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKXQuY2FsbChudWxsLGVbcl0scixlKTtlbHNlIGZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiZ0LmNhbGwobnVsbCxlW2ldLGksZSl9ZS5leHBvcnRzPXtpc0FycmF5OmEsaXNBcnJheUJ1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm5cIltvYmplY3QgQXJyYXlCdWZmZXJdXCI9PT1vLmNhbGwoZSl9LGlzQnVmZmVyOmksaXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgRm9ybURhdGEmJmUgaW5zdGFuY2VvZiBGb3JtRGF0YX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24oZSl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KGUpOmUmJmUuYnVmZmVyJiZlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfSxpc1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGV9LGlzT2JqZWN0OnMsaXNVbmRlZmluZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWV9LGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm5cIltvYmplY3QgRGF0ZV1cIj09PW8uY2FsbChlKX0saXNGaWxlOmZ1bmN0aW9uKGUpe3JldHVyblwiW29iamVjdCBGaWxlXVwiPT09by5jYWxsKGUpfSxpc0Jsb2I6ZnVuY3Rpb24oZSl7cmV0dXJuXCJbb2JqZWN0IEJsb2JdXCI9PT1vLmNhbGwoZSl9LGlzRnVuY3Rpb246Zixpc1N0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gcyhlKSYmZihlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zJiZlIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zfSxpc1N0YW5kYXJkQnJvd3NlckVudjpmdW5jdGlvbigpe3JldHVybihcInVuZGVmaW5lZFwiPT10eXBlb2YgbmF2aWdhdG9yfHxcIlJlYWN0TmF0aXZlXCIhPT1uYXZpZ2F0b3IucHJvZHVjdCkmJihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQpfSxmb3JFYWNoOnUsbWVyZ2U6ZnVuY3Rpb24gZSgpe3ZhciB0PXt9O2Z1bmN0aW9uIHIocixuKXtcIm9iamVjdFwiPT10eXBlb2YgdFtuXSYmXCJvYmplY3RcIj09dHlwZW9mIHI/dFtuXT1lKHRbbl0scik6dFtuXT1yfWZvcih2YXIgbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKXUoYXJndW1lbnRzW25dLHIpO3JldHVybiB0fSxleHRlbmQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB1KHQsKGZ1bmN0aW9uKHQsaSl7ZVtpXT1yJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P24odCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXlxccyovLFwiXCIpLnJlcGxhY2UoL1xccyokLyxcIlwiKX19fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxMiksaT1yKDApO2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm4gNTUyOTY9PSg2NDUxMiZlLmNoYXJDb2RlQXQodCkpJiYoISh0PDB8fHQrMT49ZS5sZW5ndGgpJiY1NjMyMD09KDY0NTEyJmUuY2hhckNvZGVBdCh0KzEpKSl9ZnVuY3Rpb24gYShlKXtyZXR1cm4oZT4+PjI0fGU+Pj44JjY1MjgwfGU8PDgmMTY3MTE2ODB8KDI1NSZlKTw8MjQpPj4+MH1mdW5jdGlvbiBzKGUpe3JldHVybiAxPT09ZS5sZW5ndGg/XCIwXCIrZTplfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIDc9PT1lLmxlbmd0aD9cIjBcIitlOjY9PT1lLmxlbmd0aD9cIjAwXCIrZTo1PT09ZS5sZW5ndGg/XCIwMDBcIitlOjQ9PT1lLmxlbmd0aD9cIjAwMDBcIitlOjM9PT1lLmxlbmd0aD9cIjAwMDAwXCIrZToyPT09ZS5sZW5ndGg/XCIwMDAwMDBcIitlOjE9PT1lLmxlbmd0aD9cIjAwMDAwMDBcIitlOmV9dC5pbmhlcml0cz1pLHQudG9BcnJheT1mdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUuc2xpY2UoKTtpZighZSlyZXR1cm5bXTt2YXIgcj1bXTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlpZih0KXtpZihcImhleFwiPT09dClmb3IoKGU9ZS5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLFwiXCIpKS5sZW5ndGglMiE9MCYmKGU9XCIwXCIrZSksaT0wO2k8ZS5sZW5ndGg7aSs9MilyLnB1c2gocGFyc2VJbnQoZVtpXStlW2krMV0sMTYpKX1lbHNlIGZvcih2YXIgbj0wLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZS5jaGFyQ29kZUF0KGkpO2E8MTI4P3JbbisrXT1hOmE8MjA0OD8ocltuKytdPWE+PjZ8MTkyLHJbbisrXT02MyZhfDEyOCk6byhlLGkpPyhhPTY1NTM2KygoMTAyMyZhKTw8MTApKygxMDIzJmUuY2hhckNvZGVBdCgrK2kpKSxyW24rK109YT4+MTh8MjQwLHJbbisrXT1hPj4xMiY2M3wxMjgscltuKytdPWE+PjYmNjN8MTI4LHJbbisrXT02MyZhfDEyOCk6KHJbbisrXT1hPj4xMnwyMjQscltuKytdPWE+PjYmNjN8MTI4LHJbbisrXT02MyZhfDEyOCl9ZWxzZSBmb3IoaT0wO2k8ZS5sZW5ndGg7aSsrKXJbaV09MHxlW2ldO3JldHVybiByfSx0LnRvSGV4PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1cIlwiLHI9MDtyPGUubGVuZ3RoO3IrKyl0Kz1zKGVbcl0udG9TdHJpbmcoMTYpKTtyZXR1cm4gdH0sdC5odG9ubD1hLHQudG9IZXgzMj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1cIlwiLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtcImxpdHRsZVwiPT09dCYmKGk9YShpKSkscis9ZihpLnRvU3RyaW5nKDE2KSl9cmV0dXJuIHJ9LHQuemVybzI9cyx0Lnplcm84PWYsdC5qb2luMzI9ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIG89ci10O24obyU0PT0wKTtmb3IodmFyIGE9bmV3IEFycmF5KG8vNCkscz0wLGY9dDtzPGEubGVuZ3RoO3MrKyxmKz00KXt2YXIgdTt1PVwiYmlnXCI9PT1pP2VbZl08PDI0fGVbZisxXTw8MTZ8ZVtmKzJdPDw4fGVbZiszXTplW2YrM108PDI0fGVbZisyXTw8MTZ8ZVtmKzFdPDw4fGVbZl0sYVtzXT11Pj4+MH1yZXR1cm4gYX0sdC5zcGxpdDMyPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPW5ldyBBcnJheSg0KmUubGVuZ3RoKSxuPTAsaT0wO248ZS5sZW5ndGg7bisrLGkrPTQpe3ZhciBvPWVbbl07XCJiaWdcIj09PXQ/KHJbaV09bz4+PjI0LHJbaSsxXT1vPj4+MTYmMjU1LHJbaSsyXT1vPj4+OCYyNTUscltpKzNdPTI1NSZvKToocltpKzNdPW8+Pj4yNCxyW2krMl09bz4+PjE2JjI1NSxyW2krMV09bz4+PjgmMjU1LHJbaV09MjU1Jm8pfXJldHVybiByfSx0LnJvdHIzMj1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+dHxlPDwzMi10fSx0LnJvdGwzMj1mdW5jdGlvbihlLHQpe3JldHVybiBlPDx0fGU+Pj4zMi10fSx0LnN1bTMyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdD4+PjB9LHQuc3VtMzJfMz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGUrdCtyPj4+MH0sdC5zdW0zMl80PWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBlK3QrcituPj4+MH0sdC5zdW0zMl81PWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGUrdCtyK24raT4+PjB9LHQuc3VtNjQ9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ZVt0XSxvPW4rZVt0KzFdPj4+MCxhPShvPG4/MTowKStyK2k7ZVt0XT1hPj4+MCxlW3QrMV09b30sdC5zdW02NF9oaT1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4odCtuPj4+MDx0PzE6MCkrZStyPj4+MH0sdC5zdW02NF9sbz1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gdCtuPj4+MH0sdC5zdW02NF80X2hpPWZ1bmN0aW9uKGUsdCxyLG4saSxvLGEscyl7dmFyIGY9MCx1PXQ7cmV0dXJuIGYrPSh1PXUrbj4+PjApPHQ/MTowLGYrPSh1PXUrbz4+PjApPG8/MTowLGUrcitpK2ErKGYrPSh1PXUrcz4+PjApPHM/MTowKT4+PjB9LHQuc3VtNjRfNF9sbz1mdW5jdGlvbihlLHQscixuLGksbyxhLHMpe3JldHVybiB0K24rbytzPj4+MH0sdC5zdW02NF81X2hpPWZ1bmN0aW9uKGUsdCxyLG4saSxvLGEscyxmLHUpe3ZhciBjPTAsaD10O3JldHVybiBjKz0oaD1oK24+Pj4wKTx0PzE6MCxjKz0oaD1oK28+Pj4wKTxvPzE6MCxjKz0oaD1oK3M+Pj4wKTxzPzE6MCxlK3IraSthK2YrKGMrPShoPWgrdT4+PjApPHU/MTowKT4+PjB9LHQuc3VtNjRfNV9sbz1mdW5jdGlvbihlLHQscixuLGksbyxhLHMsZix1KXtyZXR1cm4gdCtuK28rcyt1Pj4+MH0sdC5yb3RyNjRfaGk9ZnVuY3Rpb24oZSx0LHIpe3JldHVybih0PDwzMi1yfGU+Pj5yKT4+PjB9LHQucm90cjY0X2xvPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4oZTw8MzItcnx0Pj4+cik+Pj4wfSx0LnNocjY0X2hpPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT4+PnJ9LHQuc2hyNjRfbG89ZnVuY3Rpb24oZSx0LHIpe3JldHVybihlPDwzMi1yfHQ+Pj5yKT4+PjB9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT1cIm9iamVjdFwiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwsbz1pJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmFwcGx5P2kuYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChlLHQscil9O249aSYmXCJmdW5jdGlvblwiPT10eXBlb2YgaS5vd25LZXlzP2kub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKSl9OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKX07dmFyIGE9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihlKXtyZXR1cm4gZSE9ZX07ZnVuY3Rpb24gcygpe3MuaW5pdC5jYWxsKHRoaXMpfWUuZXhwb3J0cz1zLGUuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2Z1bmN0aW9uIGkoKXt2b2lkIDAhPT1vJiZlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixvKSxyKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9dmFyIG87XCJlcnJvclwiIT09dCYmKG89ZnVuY3Rpb24ocil7ZS5yZW1vdmVMaXN0ZW5lcih0LGkpLG4ocil9LGUub25jZShcImVycm9yXCIsbykpLGUub25jZSh0LGkpfSkpfSxzLkV2ZW50RW1pdHRlcj1zLHMucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLHMucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLHMucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBmPTEwO2Z1bmN0aW9uIHUoZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBlKX1mdW5jdGlvbiBjKGUpe3JldHVybiB2b2lkIDA9PT1lLl9tYXhMaXN0ZW5lcnM/cy5kZWZhdWx0TWF4TGlzdGVuZXJzOmUuX21heExpc3RlbmVyc31mdW5jdGlvbiBoKGUsdCxyLG4pe3ZhciBpLG8sYSxzO2lmKHUociksdm9pZCAwPT09KG89ZS5fZXZlbnRzKT8obz1lLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09by5uZXdMaXN0ZW5lciYmKGUuZW1pdChcIm5ld0xpc3RlbmVyXCIsdCxyLmxpc3RlbmVyP3IubGlzdGVuZXI6ciksbz1lLl9ldmVudHMpLGE9b1t0XSksdm9pZCAwPT09YSlhPW9bdF09ciwrK2UuX2V2ZW50c0NvdW50O2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYT9hPW9bdF09bj9bcixhXTpbYSxyXTpuP2EudW5zaGlmdChyKTphLnB1c2gociksKGk9YyhlKSk+MCYmYS5sZW5ndGg+aSYmIWEud2FybmVkKXthLndhcm5lZD0hMDt2YXIgZj1uZXcgRXJyb3IoXCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuIFwiK2EubGVuZ3RoK1wiIFwiK1N0cmluZyh0KStcIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0XCIpO2YubmFtZT1cIk1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZ1wiLGYuZW1pdHRlcj1lLGYudHlwZT10LGYuY291bnQ9YS5sZW5ndGgscz1mLGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKHMpfXJldHVybiBlfWZ1bmN0aW9uIGQoKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIGwoZSx0LHIpe3ZhciBuPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDplLHR5cGU6dCxsaXN0ZW5lcjpyfSxpPWQuYmluZChuKTtyZXR1cm4gaS5saXN0ZW5lcj1yLG4ud3JhcEZuPWksaX1mdW5jdGlvbiBwKGUsdCxyKXt2YXIgbj1lLl9ldmVudHM7aWYodm9pZCAwPT09bilyZXR1cm5bXTt2YXIgaT1uW3RdO3JldHVybiB2b2lkIDA9PT1pP1tdOlwiZnVuY3Rpb25cIj09dHlwZW9mIGk/cj9baS5saXN0ZW5lcnx8aV06W2ldOnI/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBBcnJheShlLmxlbmd0aCkscj0wO3I8dC5sZW5ndGg7KytyKXRbcl09ZVtyXS5saXN0ZW5lcnx8ZVtyXTtyZXR1cm4gdH0oaSk6eShpLGkubGVuZ3RoKX1mdW5jdGlvbiBiKGUpe3ZhciB0PXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT10KXt2YXIgcj10W2VdO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpcmV0dXJuIDE7aWYodm9pZCAwIT09cilyZXR1cm4gci5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24geShlLHQpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lW25dO3JldHVybiByfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLFwiZGVmYXVsdE1heExpc3RlbmVyc1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmfSxzZXQ6ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGV8fGU8MHx8YShlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrZStcIi5cIik7Zj1lfX0pLHMuaW5pdD1mdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9LHMucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbihlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZXx8ZTwwfHxhKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytlK1wiLlwiKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPWUsdGhpc30scy5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcyl9LHMucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXQucHVzaChhcmd1bWVudHNbcl0pO3ZhciBuPVwiZXJyb3JcIj09PWUsaT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09aSluPW4mJnZvaWQgMD09PWkuZXJyb3I7ZWxzZSBpZighbilyZXR1cm4hMTtpZihuKXt2YXIgYTtpZih0Lmxlbmd0aD4wJiYoYT10WzBdKSxhIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgYTt2YXIgcz1uZXcgRXJyb3IoXCJVbmhhbmRsZWQgZXJyb3IuXCIrKGE/XCIgKFwiK2EubWVzc2FnZStcIilcIjpcIlwiKSk7dGhyb3cgcy5jb250ZXh0PWEsc312YXIgZj1pW2VdO2lmKHZvaWQgMD09PWYpcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZilvKGYsdGhpcyx0KTtlbHNle3ZhciB1PWYubGVuZ3RoLGM9eShmLHUpO2ZvcihyPTA7cjx1OysrcilvKGNbcl0sdGhpcyx0KX1yZXR1cm4hMH0scy5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaCh0aGlzLGUsdCwhMSl9LHMucHJvdG90eXBlLm9uPXMucHJvdG90eXBlLmFkZExpc3RlbmVyLHMucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVybiBoKHRoaXMsZSx0LCEwKX0scy5wcm90b3R5cGUub25jZT1mdW5jdGlvbihlLHQpe3JldHVybiB1KHQpLHRoaXMub24oZSxsKHRoaXMsZSx0KSksdGhpc30scy5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVybiB1KHQpLHRoaXMucHJlcGVuZExpc3RlbmVyKGUsbCh0aGlzLGUsdCkpLHRoaXN9LHMucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLG8sYTtpZih1KHQpLHZvaWQgMD09PShuPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KHI9bltlXSkpcmV0dXJuIHRoaXM7aWYocj09PXR8fHIubGlzdGVuZXI9PT10KTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBuW2VdLG4ucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsZSxyLmxpc3RlbmVyfHx0KSk7ZWxzZSBpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiByKXtmb3IoaT0tMSxvPXIubGVuZ3RoLTE7bz49MDtvLS0paWYocltvXT09PXR8fHJbb10ubGlzdGVuZXI9PT10KXthPXJbb10ubGlzdGVuZXIsaT1vO2JyZWFrfWlmKGk8MClyZXR1cm4gdGhpczswPT09aT9yLnNoaWZ0KCk6ZnVuY3Rpb24oZSx0KXtmb3IoO3QrMTxlLmxlbmd0aDt0KyspZVt0XT1lW3QrMV07ZS5wb3AoKX0ocixpKSwxPT09ci5sZW5ndGgmJihuW2VdPXJbMF0pLHZvaWQgMCE9PW4ucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsZSxhfHx0KX1yZXR1cm4gdGhpc30scy5wcm90b3R5cGUub2ZmPXMucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLHMucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihlKXt2YXIgdCxyLG47aWYodm9pZCAwPT09KHI9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1yLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6dm9pZCAwIT09cltlXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIHJbZV0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBpLG89T2JqZWN0LmtleXMocik7Zm9yKG49MDtuPG8ubGVuZ3RoOysrbilcInJlbW92ZUxpc3RlbmVyXCIhPT0oaT1vW25dKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoaSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFwicmVtb3ZlTGlzdGVuZXJcIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mKHQ9cltlXSkpdGhpcy5yZW1vdmVMaXN0ZW5lcihlLHQpO2Vsc2UgaWYodm9pZCAwIT09dClmb3Iobj10Lmxlbmd0aC0xO24+PTA7bi0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoZSx0W25dKTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybiBwKHRoaXMsZSwhMCl9LHMucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm4gcCh0aGlzLGUsITEpfSxzLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmxpc3RlbmVyQ291bnQ/ZS5saXN0ZW5lckNvdW50KHQpOmIuY2FsbChlLHQpfSxzLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PWIscy5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP24odGhpcy5fZXZlbnRzKTpbXX19LGZ1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnN8fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1PYmplY3Qua2V5cyhlKSxyPXt9LG49MDtuPHQubGVuZ3RoO24rKylyW3Rbbl1dPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0W25dKTtyZXR1cm4gcn0saT0vJVtzZGolXS9nO3QuZm9ybWF0PWZ1bmN0aW9uKGUpe2lmKCFnKGUpKXtmb3IodmFyIHQ9W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdC5wdXNoKHMoYXJndW1lbnRzW3JdKSk7cmV0dXJuIHQuam9pbihcIiBcIil9cj0xO2Zvcih2YXIgbj1hcmd1bWVudHMsbz1uLmxlbmd0aCxhPVN0cmluZyhlKS5yZXBsYWNlKGksKGZ1bmN0aW9uKGUpe2lmKFwiJSVcIj09PWUpcmV0dXJuXCIlXCI7aWYocj49bylyZXR1cm4gZTtzd2l0Y2goZSl7Y2FzZVwiJXNcIjpyZXR1cm4gU3RyaW5nKG5bcisrXSk7Y2FzZVwiJWRcIjpyZXR1cm4gTnVtYmVyKG5bcisrXSk7Y2FzZVwiJWpcIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5bcisrXSl9Y2F0Y2goZSl7cmV0dXJuXCJbQ2lyY3VsYXJdXCJ9ZGVmYXVsdDpyZXR1cm4gZX19KSksZj1uW3JdO3I8bztmPW5bKytyXSliKGYpfHwhdyhmKT9hKz1cIiBcIitmOmErPVwiIFwiK3MoZik7cmV0dXJuIGF9LHQuZGVwcmVjYXRlPWZ1bmN0aW9uKHIsbil7aWYodm9pZCAwIT09ZSYmITA9PT1lLm5vRGVwcmVjYXRpb24pcmV0dXJuIHI7aWYodm9pZCAwPT09ZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5kZXByZWNhdGUocixuKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBpPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFpKXtpZihlLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKG4pO2UudHJhY2VEZXByZWNhdGlvbj9jb25zb2xlLnRyYWNlKG4pOmNvbnNvbGUuZXJyb3IobiksaT0hMH1yZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgbyxhPXt9O2Z1bmN0aW9uIHMoZSxyKXt2YXIgbj17c2VlbjpbXSxzdHlsaXplOnV9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYobi5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihuLmNvbG9ycz1hcmd1bWVudHNbM10pLHAocik/bi5zaG93SGlkZGVuPXI6ciYmdC5fZXh0ZW5kKG4sciksdihuLnNob3dIaWRkZW4pJiYobi5zaG93SGlkZGVuPSExKSx2KG4uZGVwdGgpJiYobi5kZXB0aD0yKSx2KG4uY29sb3JzKSYmKG4uY29sb3JzPSExKSx2KG4uY3VzdG9tSW5zcGVjdCkmJihuLmN1c3RvbUluc3BlY3Q9ITApLG4uY29sb3JzJiYobi5zdHlsaXplPWYpLGMobixlLG4uZGVwdGgpfWZ1bmN0aW9uIGYoZSx0KXt2YXIgcj1zLnN0eWxlc1t0XTtyZXR1cm4gcj9cIlx1MDAxYltcIitzLmNvbG9yc1tyXVswXStcIm1cIitlK1wiXHUwMDFiW1wiK3MuY29sb3JzW3JdWzFdK1wibVwiOmV9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBlfWZ1bmN0aW9uIGMoZSxyLG4pe2lmKGUuY3VzdG9tSW5zcGVjdCYmciYmUyhyLmluc3BlY3QpJiZyLmluc3BlY3QhPT10Lmluc3BlY3QmJighci5jb25zdHJ1Y3Rvcnx8ci5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1yKSl7dmFyIGk9ci5pbnNwZWN0KG4sZSk7cmV0dXJuIGcoaSl8fChpPWMoZSxpLG4pKSxpfXZhciBvPWZ1bmN0aW9uKGUsdCl7aWYodih0KSlyZXR1cm4gZS5zdHlsaXplKFwidW5kZWZpbmVkXCIsXCJ1bmRlZmluZWRcIik7aWYoZyh0KSl7dmFyIHI9XCInXCIrSlNPTi5zdHJpbmdpZnkodCkucmVwbGFjZSgvXlwifFwiJC9nLFwiXCIpLnJlcGxhY2UoLycvZyxcIlxcXFwnXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpK1wiJ1wiO3JldHVybiBlLnN0eWxpemUocixcInN0cmluZ1wiKX1pZih5KHQpKXJldHVybiBlLnN0eWxpemUoXCJcIit0LFwibnVtYmVyXCIpO2lmKHAodCkpcmV0dXJuIGUuc3R5bGl6ZShcIlwiK3QsXCJib29sZWFuXCIpO2lmKGIodCkpcmV0dXJuIGUuc3R5bGl6ZShcIm51bGxcIixcIm51bGxcIil9KGUscik7aWYobylyZXR1cm4gbzt2YXIgYT1PYmplY3Qua2V5cyhyKSxzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dFtlXT0hMH0pKSx0fShhKTtpZihlLnNob3dIaWRkZW4mJihhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpKSxFKHIpJiYoYS5pbmRleE9mKFwibWVzc2FnZVwiKT49MHx8YS5pbmRleE9mKFwiZGVzY3JpcHRpb25cIik+PTApKXJldHVybiBoKHIpO2lmKDA9PT1hLmxlbmd0aCl7aWYoUyhyKSl7dmFyIGY9ci5uYW1lP1wiOiBcIityLm5hbWU6XCJcIjtyZXR1cm4gZS5zdHlsaXplKFwiW0Z1bmN0aW9uXCIrZitcIl1cIixcInNwZWNpYWxcIil9aWYobShyKSlyZXR1cm4gZS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKSxcInJlZ2V4cFwiKTtpZihfKHIpKXJldHVybiBlLnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKSxcImRhdGVcIik7aWYoRShyKSlyZXR1cm4gaChyKX12YXIgdSx3PVwiXCIsQT0hMSx4PVtcIntcIixcIn1cIl07KGwocikmJihBPSEwLHg9W1wiW1wiLFwiXVwiXSksUyhyKSkmJih3PVwiIFtGdW5jdGlvblwiKyhyLm5hbWU/XCI6IFwiK3IubmFtZTpcIlwiKStcIl1cIik7cmV0dXJuIG0ocikmJih3PVwiIFwiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKSksXyhyKSYmKHc9XCIgXCIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChyKSksRShyKSYmKHc9XCIgXCIraChyKSksMCE9PWEubGVuZ3RofHxBJiYwIT1yLmxlbmd0aD9uPDA/bShyKT9lLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpLFwicmVnZXhwXCIpOmUuc3R5bGl6ZShcIltPYmplY3RdXCIsXCJzcGVjaWFsXCIpOihlLnNlZW4ucHVzaChyKSx1PUE/ZnVuY3Rpb24oZSx0LHIsbixpKXtmb3IodmFyIG89W10sYT0wLHM9dC5sZW5ndGg7YTxzOysrYSlUKHQsU3RyaW5nKGEpKT9vLnB1c2goZChlLHQscixuLFN0cmluZyhhKSwhMCkpOm8ucHVzaChcIlwiKTtyZXR1cm4gaS5mb3JFYWNoKChmdW5jdGlvbihpKXtpLm1hdGNoKC9eXFxkKyQvKXx8by5wdXNoKGQoZSx0LHIsbixpLCEwKSl9KSksb30oZSxyLG4scyxhKTphLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGQoZSxyLG4scyx0LEEpfSkpLGUuc2Vlbi5wb3AoKSxmdW5jdGlvbihlLHQscil7aWYoZS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuaW5kZXhPZihcIlxcblwiKT49MCYmMCxlK3QucmVwbGFjZSgvXFx1MDAxYlxcW1xcZFxcZD9tL2csXCJcIikubGVuZ3RoKzF9KSwwKT42MClyZXR1cm4gclswXSsoXCJcIj09PXQ/XCJcIjp0K1wiXFxuIFwiKStcIiBcIitlLmpvaW4oXCIsXFxuICBcIikrXCIgXCIrclsxXTtyZXR1cm4gclswXSt0K1wiIFwiK2Uuam9pbihcIiwgXCIpK1wiIFwiK3JbMV19KHUsdyx4KSk6eFswXSt3K3hbMV19ZnVuY3Rpb24gaChlKXtyZXR1cm5cIltcIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKStcIl1cIn1mdW5jdGlvbiBkKGUsdCxyLG4saSxvKXt2YXIgYSxzLGY7aWYoKGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGkpfHx7dmFsdWU6dFtpXX0pLmdldD9zPWYuc2V0P2Uuc3R5bGl6ZShcIltHZXR0ZXIvU2V0dGVyXVwiLFwic3BlY2lhbFwiKTplLnN0eWxpemUoXCJbR2V0dGVyXVwiLFwic3BlY2lhbFwiKTpmLnNldCYmKHM9ZS5zdHlsaXplKFwiW1NldHRlcl1cIixcInNwZWNpYWxcIikpLFQobixpKXx8KGE9XCJbXCIraStcIl1cIiksc3x8KGUuc2Vlbi5pbmRleE9mKGYudmFsdWUpPDA/KHM9YihyKT9jKGUsZi52YWx1ZSxudWxsKTpjKGUsZi52YWx1ZSxyLTEpKS5pbmRleE9mKFwiXFxuXCIpPi0xJiYocz1vP3Muc3BsaXQoXCJcXG5cIikubWFwKChmdW5jdGlvbihlKXtyZXR1cm5cIiAgXCIrZX0pKS5qb2luKFwiXFxuXCIpLnN1YnN0cigyKTpcIlxcblwiK3Muc3BsaXQoXCJcXG5cIikubWFwKChmdW5jdGlvbihlKXtyZXR1cm5cIiAgIFwiK2V9KSkuam9pbihcIlxcblwiKSk6cz1lLnN0eWxpemUoXCJbQ2lyY3VsYXJdXCIsXCJzcGVjaWFsXCIpKSx2KGEpKXtpZihvJiZpLm1hdGNoKC9eXFxkKyQvKSlyZXR1cm4gczsoYT1KU09OLnN0cmluZ2lmeShcIlwiK2kpKS5tYXRjaCgvXlwiKFthLXpBLVpfXVthLXpBLVpfMC05XSopXCIkLyk/KGE9YS5zdWJzdHIoMSxhLmxlbmd0aC0yKSxhPWUuc3R5bGl6ZShhLFwibmFtZVwiKSk6KGE9YS5yZXBsYWNlKC8nL2csXCJcXFxcJ1wiKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKS5yZXBsYWNlKC8oXlwifFwiJCkvZyxcIidcIiksYT1lLnN0eWxpemUoYSxcInN0cmluZ1wiKSl9cmV0dXJuIGErXCI6IFwiK3N9ZnVuY3Rpb24gbChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBwKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZX1mdW5jdGlvbiBiKGUpe3JldHVybiBudWxsPT09ZX1mdW5jdGlvbiB5KGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfWZ1bmN0aW9uIGcoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV9ZnVuY3Rpb24gdihlKXtyZXR1cm4gdm9pZCAwPT09ZX1mdW5jdGlvbiBtKGUpe3JldHVybiB3KGUpJiZcIltvYmplY3QgUmVnRXhwXVwiPT09QShlKX1mdW5jdGlvbiB3KGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZX1mdW5jdGlvbiBfKGUpe3JldHVybiB3KGUpJiZcIltvYmplY3QgRGF0ZV1cIj09PUEoZSl9ZnVuY3Rpb24gRShlKXtyZXR1cm4gdyhlKSYmKFwiW29iamVjdCBFcnJvcl1cIj09PUEoZSl8fGUgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gUyhlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1mdW5jdGlvbiB4KGUpe3JldHVybiBlPDEwP1wiMFwiK2UudG9TdHJpbmcoMTApOmUudG9TdHJpbmcoMTApfXQuZGVidWdsb2c9ZnVuY3Rpb24ocil7aWYodihvKSYmKG89ZS5lbnYuTk9ERV9ERUJVR3x8XCJcIikscj1yLnRvVXBwZXJDYXNlKCksIWFbcl0paWYobmV3IFJlZ0V4cChcIlxcXFxiXCIrcitcIlxcXFxiXCIsXCJpXCIpLnRlc3Qobykpe3ZhciBuPWUucGlkO2Fbcl09ZnVuY3Rpb24oKXt2YXIgZT10LmZvcm1hdC5hcHBseSh0LGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcihcIiVzICVkOiAlc1wiLHIsbixlKX19ZWxzZSBhW3JdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gYVtyXX0sdC5pbnNwZWN0PXMscy5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LHMuc3R5bGVzPXtzcGVjaWFsOlwiY3lhblwiLG51bWJlcjpcInllbGxvd1wiLGJvb2xlYW46XCJ5ZWxsb3dcIix1bmRlZmluZWQ6XCJncmV5XCIsbnVsbDpcImJvbGRcIixzdHJpbmc6XCJncmVlblwiLGRhdGU6XCJtYWdlbnRhXCIscmVnZXhwOlwicmVkXCJ9LHQuaXNBcnJheT1sLHQuaXNCb29sZWFuPXAsdC5pc051bGw9Yix0LmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfSx0LmlzTnVtYmVyPXksdC5pc1N0cmluZz1nLHQuaXNTeW1ib2w9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGV9LHQuaXNVbmRlZmluZWQ9dix0LmlzUmVnRXhwPW0sdC5pc09iamVjdD13LHQuaXNEYXRlPV8sdC5pc0Vycm9yPUUsdC5pc0Z1bmN0aW9uPVMsdC5pc1ByaW1pdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV8fFwiYm9vbGVhblwiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGV8fFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcInN5bWJvbFwiPT10eXBlb2YgZXx8dm9pZCAwPT09ZX0sdC5pc0J1ZmZlcj1yKDExMCk7dmFyIGs9W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYXlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2N0XCIsXCJOb3ZcIixcIkRlY1wiXTtmdW5jdGlvbiBNKCl7dmFyIGU9bmV3IERhdGUsdD1beChlLmdldEhvdXJzKCkpLHgoZS5nZXRNaW51dGVzKCkpLHgoZS5nZXRTZWNvbmRzKCkpXS5qb2luKFwiOlwiKTtyZXR1cm5bZS5nZXREYXRlKCksa1tlLmdldE1vbnRoKCldLHRdLmpvaW4oXCIgXCIpfWZ1bmN0aW9uIFQoZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9dC5sb2c9ZnVuY3Rpb24oKXtjb25zb2xlLmxvZyhcIiVzIC0gJXNcIixNKCksdC5mb3JtYXQuYXBwbHkodCxhcmd1bWVudHMpKX0sdC5pbmhlcml0cz1yKDExMSksdC5fZXh0ZW5kPWZ1bmN0aW9uKGUsdCl7aWYoIXR8fCF3KHQpKXJldHVybiBlO2Zvcih2YXIgcj1PYmplY3Qua2V5cyh0KSxuPXIubGVuZ3RoO24tLTspZVtyW25dXT10W3Jbbl1dO3JldHVybiBlfTt2YXIgST1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sP1N5bWJvbChcInV0aWwucHJvbWlzaWZ5LmN1c3RvbVwiKTp2b2lkIDA7ZnVuY3Rpb24gUihlLHQpe2lmKCFlKXt2YXIgcj1uZXcgRXJyb3IoXCJQcm9taXNlIHdhcyByZWplY3RlZCB3aXRoIGEgZmFsc3kgdmFsdWVcIik7ci5yZWFzb249ZSxlPXJ9cmV0dXJuIHQoZSl9dC5wcm9taXNpZnk9ZnVuY3Rpb24oZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcmlnaW5hbFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2lmKEkmJmVbSV0pe3ZhciB0O2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mKHQ9ZVtJXSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidXRpbC5wcm9taXNpZnkuY3VzdG9tXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LEkse3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0fWZ1bmN0aW9uIHQoKXtmb3IodmFyIHQscixuPW5ldyBQcm9taXNlKChmdW5jdGlvbihlLG4pe3Q9ZSxyPW59KSksaT1bXSxvPTA7bzxhcmd1bWVudHMubGVuZ3RoO28rKylpLnB1c2goYXJndW1lbnRzW29dKTtpLnB1c2goKGZ1bmN0aW9uKGUsbil7ZT9yKGUpOnQobil9KSk7dHJ5e2UuYXBwbHkodGhpcyxpKX1jYXRjaChlKXtyKGUpfXJldHVybiBufXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YodCxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLEkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LEkse3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LG4oZSkpfSx0LnByb21pc2lmeS5jdXN0b209SSx0LmNhbGxiYWNraWZ5PWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3JpZ2luYWxcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtmdW5jdGlvbiByKCl7Zm9yKHZhciByPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXIucHVzaChhcmd1bWVudHNbbl0pO3ZhciBpPXIucG9wKCk7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgaSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGxhc3QgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uXCIpO3ZhciBvPXRoaXMsYT1mdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KG8sYXJndW1lbnRzKX07dC5hcHBseSh0aGlzLHIpLnRoZW4oKGZ1bmN0aW9uKHQpe2UubmV4dFRpY2soYSxudWxsLHQpfSksKGZ1bmN0aW9uKHQpe2UubmV4dFRpY2soUix0LGEpfSkpfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YocixPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIsbih0KSkscn19KS5jYWxsKHRoaXMscigzKSl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDI0KSxpPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2gocik7cmV0dXJuIHR9O2UuZXhwb3J0cz1oO3ZhciBvPU9iamVjdC5jcmVhdGUocigxOSkpO28uaW5oZXJpdHM9cigwKTt2YXIgYT1yKDU3KSxzPXIoMzIpO28uaW5oZXJpdHMoaCxhKTtmb3IodmFyIGY9aShzLnByb3RvdHlwZSksdT0wO3U8Zi5sZW5ndGg7dSsrKXt2YXIgYz1mW3VdO2gucHJvdG90eXBlW2NdfHwoaC5wcm90b3R5cGVbY109cy5wcm90b3R5cGVbY10pfWZ1bmN0aW9uIGgoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgaCkpcmV0dXJuIG5ldyBoKGUpO2EuY2FsbCh0aGlzLGUpLHMuY2FsbCh0aGlzLGUpLGUmJiExPT09ZS5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLGUmJiExPT09ZS53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxlJiYhMT09PWUuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSksdGhpcy5vbmNlKFwiZW5kXCIsZCl9ZnVuY3Rpb24gZCgpe3RoaXMuYWxsb3dIYWxmT3Blbnx8dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8bi5uZXh0VGljayhsLHRoaXMpfWZ1bmN0aW9uIGwoZSl7ZS5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoaC5wcm90b3R5cGUsXCJ3cml0YWJsZUhpZ2hXYXRlck1hcmtcIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLnByb3RvdHlwZSxcImRlc3Ryb3llZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCl9LHNldDpmdW5jdGlvbihlKXt2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1lKX19KSxoLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHQpe3RoaXMucHVzaChudWxsKSx0aGlzLmVuZCgpLG4ubmV4dFRpY2sodCxlKX19LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcihlLHQpe2lmKCFlKXRocm93IG5ldyBFcnJvcih0fHxcIkFzc2VydGlvbiBmYWlsZWRcIil9ZS5leHBvcnRzPXIsci5lcXVhbD1mdW5jdGlvbihlLHQscil7aWYoZSE9dCl0aHJvdyBuZXcgRXJyb3Iocnx8XCJBc3NlcnRpb24gZmFpbGVkOiBcIitlK1wiICE9IFwiK3QpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuaXNBc3luYz12b2lkIDA7dmFyIG4saT1yKDIwMyksbz0obj1pKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn07dmFyIGE9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGEmJlwiQXN5bmNGdW5jdGlvblwiPT09ZVtTeW1ib2wudG9TdHJpbmdUYWddfXQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4gcyhlKT8oMCxvLmRlZmF1bHQpKGUpOmV9LHQuaXNBc3luYz1zfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0saT1yKDExMiksbz1yKDEzMSksYT1yKDc4KSxzPXIoNzkpLGY9cig0KSx1PXIoMzQpLGM9cigyKS5CdWZmZXI7T2JqZWN0LmFzc2lnbih0LHIoMTc0KSksdC5NQVhfSU5URUdFUj1uZXcgZihcImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZcIiwxNiksdC5UV09fUE9XMjU2PW5ldyBmKFwiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIiwxNiksdC5LRUNDQUsyNTZfTlVMTF9TPVwiYzVkMjQ2MDE4NmY3MjMzYzkyN2U3ZGIyZGNjNzAzYzBlNTAwYjY1M2NhODIyNzNiN2JmYWQ4MDQ1ZDg1YTQ3MFwiLHQuU0hBM19OVUxMX1M9dC5LRUNDQUsyNTZfTlVMTF9TLHQuS0VDQ0FLMjU2X05VTEw9Yy5mcm9tKHQuS0VDQ0FLMjU2X05VTExfUyxcImhleFwiKSx0LlNIQTNfTlVMTD10LktFQ0NBSzI1Nl9OVUxMLHQuS0VDQ0FLMjU2X1JMUF9BUlJBWV9TPVwiMWRjYzRkZThkZWM3NWQ3YWFiODViNTY3YjZjY2Q0MWFkMzEyNDUxYjk0OGE3NDEzZjBhMTQyZmQ0MGQ0OTM0N1wiLHQuU0hBM19STFBfQVJSQVlfUz10LktFQ0NBSzI1Nl9STFBfQVJSQVlfUyx0LktFQ0NBSzI1Nl9STFBfQVJSQVk9Yy5mcm9tKHQuS0VDQ0FLMjU2X1JMUF9BUlJBWV9TLFwiaGV4XCIpLHQuU0hBM19STFBfQVJSQVk9dC5LRUNDQUsyNTZfUkxQX0FSUkFZLHQuS0VDQ0FLMjU2X1JMUF9TPVwiNTZlODFmMTcxYmNjNTVhNmZmODM0NWU2OTJjMGY4NmU1YjQ4ZTAxYjk5NmNhZGMwMDE2MjJmYjVlMzYzYjQyMVwiLHQuU0hBM19STFBfUz10LktFQ0NBSzI1Nl9STFBfUyx0LktFQ0NBSzI1Nl9STFA9Yy5mcm9tKHQuS0VDQ0FLMjU2X1JMUF9TLFwiaGV4XCIpLHQuU0hBM19STFA9dC5LRUNDQUsyNTZfUkxQLHQuQk49Zix0LnJscD1zLHQuc2VjcDI1NmsxPW8sdC56ZXJvcz1mdW5jdGlvbihlKXtyZXR1cm4gYy5hbGxvY1Vuc2FmZShlKS5maWxsKDApfSx0Lnplcm9BZGRyZXNzPWZ1bmN0aW9uKCl7dmFyIGU9dC56ZXJvcygyMCk7cmV0dXJuIHQuYnVmZmVyVG9IZXgoZSl9LHQuc2V0TGVuZ3RoTGVmdD10LnNldExlbmd0aD1mdW5jdGlvbihlLHIsbil7dmFyIGk9dC56ZXJvcyhyKTtyZXR1cm4gZT10LnRvQnVmZmVyKGUpLG4/ZS5sZW5ndGg8cj8oZS5jb3B5KGkpLGkpOmUuc2xpY2UoMCxyKTplLmxlbmd0aDxyPyhlLmNvcHkoaSxyLWUubGVuZ3RoKSxpKTplLnNsaWNlKC1yKX0sdC5zZXRMZW5ndGhSaWdodD1mdW5jdGlvbihlLHIpe3JldHVybiB0LnNldExlbmd0aChlLHIsITApfSx0LnVucGFkPXQuc3RyaXBaZXJvcz1mdW5jdGlvbihlKXtmb3IodmFyIHI9KGU9dC5zdHJpcEhleFByZWZpeChlKSlbMF07ZS5sZW5ndGg+MCYmXCIwXCI9PT1yLnRvU3RyaW5nKCk7KXI9KGU9ZS5zbGljZSgxKSlbMF07cmV0dXJuIGV9LHQudG9CdWZmZXI9ZnVuY3Rpb24oZSl7aWYoIWMuaXNCdWZmZXIoZSkpaWYoQXJyYXkuaXNBcnJheShlKSllPWMuZnJvbShlKTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBlKWU9dC5pc0hleFN0cmluZyhlKT9jLmZyb20odC5wYWRUb0V2ZW4odC5zdHJpcEhleFByZWZpeChlKSksXCJoZXhcIik6Yy5mcm9tKGUpO2Vsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIGUpZT10LmludFRvQnVmZmVyKGUpO2Vsc2UgaWYobnVsbD09ZSllPWMuYWxsb2NVbnNhZmUoMCk7ZWxzZSBpZihmLmlzQk4oZSkpZT1lLnRvQXJyYXlMaWtlKGMpO2Vsc2V7aWYoIWUudG9BcnJheSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHR5cGVcIik7ZT1jLmZyb20oZS50b0FycmF5KCkpfXJldHVybiBlfSx0LmJ1ZmZlclRvSW50PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZih0LnRvQnVmZmVyKGUpKS50b051bWJlcigpfSx0LmJ1ZmZlclRvSGV4PWZ1bmN0aW9uKGUpe3JldHVyblwiMHhcIisoZT10LnRvQnVmZmVyKGUpKS50b1N0cmluZyhcImhleFwiKX0sdC5mcm9tU2lnbmVkPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZihlKS5mcm9tVHdvcygyNTYpfSx0LnRvVW5zaWduZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGMuZnJvbShlLnRvVHdvcygyNTYpLnRvQXJyYXkoKSl9LHQua2VjY2FrPWZ1bmN0aW9uKGUscil7cmV0dXJuIGU9dC50b0J1ZmZlcihlKSxyfHwocj0yNTYpLGkoXCJrZWNjYWtcIityKS51cGRhdGUoZSkuZGlnZXN0KCl9LHQua2VjY2FrMjU2PWZ1bmN0aW9uKGUpe3JldHVybiB0LmtlY2NhayhlKX0sdC5zaGEzPXQua2VjY2FrLHQuc2hhMjU2PWZ1bmN0aW9uKGUpe3JldHVybiBlPXQudG9CdWZmZXIoZSksdShcInNoYTI1NlwiKS51cGRhdGUoZSkuZGlnZXN0KCl9LHQucmlwZW1kMTYwPWZ1bmN0aW9uKGUscil7ZT10LnRvQnVmZmVyKGUpO3ZhciBuPXUoXCJybWQxNjBcIikudXBkYXRlKGUpLmRpZ2VzdCgpO3JldHVybiEwPT09cj90LnNldExlbmd0aChuLDMyKTpufSx0LnJscGhhc2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHQua2VjY2FrKHMuZW5jb2RlKGUpKX0sdC5pc1ZhbGlkUHJpdmF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gby5wcml2YXRlS2V5VmVyaWZ5KGUpfSx0LmlzVmFsaWRQdWJsaWM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gNjQ9PT1lLmxlbmd0aD9vLnB1YmxpY0tleVZlcmlmeShjLmNvbmNhdChbYy5mcm9tKFs0XSksZV0pKTohIXQmJm8ucHVibGljS2V5VmVyaWZ5KGUpfSx0LnB1YlRvQWRkcmVzcz10LnB1YmxpY1RvQWRkcmVzcz1mdW5jdGlvbihlLHIpe3JldHVybiBlPXQudG9CdWZmZXIoZSksciYmNjQhPT1lLmxlbmd0aCYmKGU9by5wdWJsaWNLZXlDb252ZXJ0KGUsITEpLnNsaWNlKDEpKSxhKDY0PT09ZS5sZW5ndGgpLHQua2VjY2FrKGUpLnNsaWNlKC0yMCl9O3ZhciBoPXQucHJpdmF0ZVRvUHVibGljPWZ1bmN0aW9uKGUpe3JldHVybiBlPXQudG9CdWZmZXIoZSksby5wdWJsaWNLZXlDcmVhdGUoZSwhMSkuc2xpY2UoMSl9O3QuaW1wb3J0UHVibGljPWZ1bmN0aW9uKGUpe3JldHVybiA2NCE9PShlPXQudG9CdWZmZXIoZSkpLmxlbmd0aCYmKGU9by5wdWJsaWNLZXlDb252ZXJ0KGUsITEpLnNsaWNlKDEpKSxlfSx0LmVjc2lnbj1mdW5jdGlvbihlLHQpe3ZhciByPW8uc2lnbihlLHQpLG49e307cmV0dXJuIG4ucj1yLnNpZ25hdHVyZS5zbGljZSgwLDMyKSxuLnM9ci5zaWduYXR1cmUuc2xpY2UoMzIsNjQpLG4udj1yLnJlY292ZXJ5KzI3LG59LHQuaGFzaFBlcnNvbmFsTWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgcj10LnRvQnVmZmVyKFwiXHUwMDE5RXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6XFxuXCIrZS5sZW5ndGgudG9TdHJpbmcoKSk7cmV0dXJuIHQua2VjY2FrKGMuY29uY2F0KFtyLGVdKSl9LHQuZWNyZWNvdmVyPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPWMuY29uY2F0KFt0LnNldExlbmd0aChuLDMyKSx0LnNldExlbmd0aChpLDMyKV0sNjQpLHM9ci0yNztpZigwIT09cyYmMSE9PXMpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzaWduYXR1cmUgdiB2YWx1ZVwiKTt2YXIgZj1vLnJlY292ZXIoZSxhLHMpO3JldHVybiBvLnB1YmxpY0tleUNvbnZlcnQoZiwhMSkuc2xpY2UoMSl9LHQudG9ScGNTaWc9ZnVuY3Rpb24oZSxyLG4pe2lmKDI3IT09ZSYmMjghPT1lKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmVjb3ZlcnkgaWRcIik7cmV0dXJuIHQuYnVmZmVyVG9IZXgoYy5jb25jYXQoW3Quc2V0TGVuZ3RoTGVmdChyLDMyKSx0LnNldExlbmd0aExlZnQobiwzMiksdC50b0J1ZmZlcihlLTI3KV0pKX0sdC5mcm9tUnBjU2lnPWZ1bmN0aW9uKGUpe2lmKDY1IT09KGU9dC50b0J1ZmZlcihlKSkubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc2lnbmF0dXJlIGxlbmd0aFwiKTt2YXIgcj1lWzY0XTtyZXR1cm4gcjwyNyYmKHIrPTI3KSx7djpyLHI6ZS5zbGljZSgwLDMyKSxzOmUuc2xpY2UoMzIsNjQpfX0sdC5wcml2YXRlVG9BZGRyZXNzPWZ1bmN0aW9uKGUpe3JldHVybiB0LnB1YmxpY1RvQWRkcmVzcyhoKGUpKX0sdC5pc1ZhbGlkQWRkcmVzcz1mdW5jdGlvbihlKXtyZXR1cm4vXjB4WzAtOWEtZkEtRl17NDB9JC8udGVzdChlKX0sdC5pc1plcm9BZGRyZXNzPWZ1bmN0aW9uKGUpe3JldHVybiB0Lnplcm9BZGRyZXNzKCk9PT10LmFkZEhleFByZWZpeChlKX0sdC50b0NoZWNrc3VtQWRkcmVzcz1mdW5jdGlvbihlKXtlPXQuc3RyaXBIZXhQcmVmaXgoZSkudG9Mb3dlckNhc2UoKTtmb3IodmFyIHI9dC5rZWNjYWsoZSkudG9TdHJpbmcoXCJoZXhcIiksbj1cIjB4XCIsaT0wO2k8ZS5sZW5ndGg7aSsrKXBhcnNlSW50KHJbaV0sMTYpPj04P24rPWVbaV0udG9VcHBlckNhc2UoKTpuKz1lW2ldO3JldHVybiBufSx0LmlzVmFsaWRDaGVja3N1bUFkZHJlc3M9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaXNWYWxpZEFkZHJlc3MoZSkmJnQudG9DaGVja3N1bUFkZHJlc3MoZSk9PT1lfSx0LmdlbmVyYXRlQWRkcmVzcz1mdW5jdGlvbihlLHIpe3JldHVybiBlPXQudG9CdWZmZXIoZSkscj0ocj1uZXcgZihyKSkuaXNaZXJvKCk/bnVsbDpjLmZyb20oci50b0FycmF5KCkpLHQucmxwaGFzaChbZSxyXSkuc2xpY2UoLTIwKX0sdC5pc1ByZWNvbXBpbGVkPWZ1bmN0aW9uKGUpe3ZhciByPXQudW5wYWQoZSk7cmV0dXJuIDE9PT1yLmxlbmd0aCYmclswXT49MSYmclswXTw9OH0sdC5hZGRIZXhQcmVmaXg9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGV8fHQuaXNIZXhQcmVmaXhlZChlKT9lOlwiMHhcIitlfSx0LmlzVmFsaWRTaWduYXR1cmU9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9bmV3IGYoXCI3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjVkNTc2ZTczNTdhNDUwMWRkZmU5MmY0NjY4MWIyMGEwXCIsMTYpLG89bmV3IGYoXCJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWJhYWVkY2U2YWY0OGEwM2JiZmQyNWU4Y2QwMzY0MTQxXCIsMTYpO3JldHVybiAzMj09PXQubGVuZ3RoJiYzMj09PXIubGVuZ3RoJiYoKDI3PT09ZXx8Mjg9PT1lKSYmKHQ9bmV3IGYodCkscj1uZXcgZihyKSwhKHQuaXNaZXJvKCl8fHQuZ3Qobyl8fHIuaXNaZXJvKCl8fHIuZ3QobykpJiYoITEhPT1ufHwxIT09bmV3IGYocikuY21wKGkpKSkpfSx0LmJhVG9KU09OPWZ1bmN0aW9uKGUpe2lmKGMuaXNCdWZmZXIoZSkpcmV0dXJuXCIweFwiK2UudG9TdHJpbmcoXCJoZXhcIik7aWYoZSBpbnN0YW5jZW9mIEFycmF5KXtmb3IodmFyIHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXIucHVzaCh0LmJhVG9KU09OKGVbbl0pKTtyZXR1cm4gcn19LHQuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihlLHIsaSl7aWYoZS5yYXc9W10sZS5fZmllbGRzPVtdLGUudG9KU09OPWZ1bmN0aW9uKHIpe2lmKHIpe3ZhciBuPXt9O3JldHVybiBlLl9maWVsZHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7blt0XT1cIjB4XCIrZVt0XS50b1N0cmluZyhcImhleFwiKX0pKSxufXJldHVybiB0LmJhVG9KU09OKHRoaXMucmF3KX0sZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gcy5lbmNvZGUoZS5yYXcpfSxyLmZvckVhY2goKGZ1bmN0aW9uKHIsbil7ZnVuY3Rpb24gaSgpe3JldHVybiBlLnJhd1tuXX1mdW5jdGlvbiBvKGkpe1wiMDBcIiE9PShpPXQudG9CdWZmZXIoaSkpLnRvU3RyaW5nKFwiaGV4XCIpfHxyLmFsbG93WmVyb3x8KGk9Yy5hbGxvY1Vuc2FmZSgwKSksci5hbGxvd0xlc3MmJnIubGVuZ3RoPyhpPXQuc3RyaXBaZXJvcyhpKSxhKHIubGVuZ3RoPj1pLmxlbmd0aCxcIlRoZSBmaWVsZCBcIityLm5hbWUrXCIgbXVzdCBub3QgaGF2ZSBtb3JlIFwiK3IubGVuZ3RoK1wiIGJ5dGVzXCIpKTpyLmFsbG93WmVybyYmMD09PWkubGVuZ3RofHwhci5sZW5ndGh8fGEoci5sZW5ndGg9PT1pLmxlbmd0aCxcIlRoZSBmaWVsZCBcIityLm5hbWUrXCIgbXVzdCBoYXZlIGJ5dGUgbGVuZ3RoIG9mIFwiK3IubGVuZ3RoKSxlLnJhd1tuXT1pfWUuX2ZpZWxkcy5wdXNoKHIubmFtZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5uYW1lLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6aSxzZXQ6b30pLHIuZGVmYXVsdCYmKGVbci5uYW1lXT1yLmRlZmF1bHQpLHIuYWxpYXMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIuYWxpYXMse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHNldDpvLGdldDppfSl9KSksaSlpZihcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9Yy5mcm9tKHQuc3RyaXBIZXhQcmVmaXgoaSksXCJoZXhcIikpLGMuaXNCdWZmZXIoaSkmJihpPXMuZGVjb2RlKGkpKSxBcnJheS5pc0FycmF5KGkpKXtpZihpLmxlbmd0aD5lLl9maWVsZHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIndyb25nIG51bWJlciBvZiBmaWVsZHMgaW4gZGF0YVwiKTtpLmZvckVhY2goKGZ1bmN0aW9uKHIsbil7ZVtlLl9maWVsZHNbbl1dPXQudG9CdWZmZXIocil9KSl9ZWxzZXtpZihcIm9iamVjdFwiIT09KHZvaWQgMD09PWk/XCJ1bmRlZmluZWRcIjpuKGkpKSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGFcIik7dmFyIG89T2JqZWN0LmtleXMoaSk7ci5mb3JFYWNoKChmdW5jdGlvbih0KXstMSE9PW8uaW5kZXhPZih0Lm5hbWUpJiYoZVt0Lm5hbWVdPWlbdC5uYW1lXSksLTEhPT1vLmluZGV4T2YodC5hbGlhcykmJihlW3QuYWxpYXNdPWlbdC5hbGlhc10pfSkpfX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtmdW5jdGlvbiBpKGUsdCxyKXtyfHwocj1FcnJvcik7dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHIsbjtmdW5jdGlvbiBpKHIsbixpKXtyZXR1cm4gZS5jYWxsKHRoaXMsZnVuY3Rpb24oZSxyLG4pe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P3Q6dChlLHIsbil9KHIsbixpKSl8fHRoaXN9cmV0dXJuIG49ZSwocj1pKS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLl9fcHJvdG9fXz1uLGl9KHIpO2kucHJvdG90eXBlLm5hbWU9ci5uYW1lLGkucHJvdG90eXBlLmNvZGU9ZSxuW2VdPWl9ZnVuY3Rpb24gbyhlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciByPWUubGVuZ3RoO3JldHVybiBlPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpfSkpLHI+Mj9cIm9uZSBvZiBcIi5jb25jYXQodCxcIiBcIikuY29uY2F0KGUuc2xpY2UoMCxyLTEpLmpvaW4oXCIsIFwiKSxcIiwgb3IgXCIpK2Vbci0xXToyPT09cj9cIm9uZSBvZiBcIi5jb25jYXQodCxcIiBcIikuY29uY2F0KGVbMF0sXCIgb3IgXCIpLmNvbmNhdChlWzFdKTpcIm9mIFwiLmNvbmNhdCh0LFwiIFwiKS5jb25jYXQoZVswXSl9cmV0dXJuXCJvZiBcIi5jb25jYXQodCxcIiBcIikuY29uY2F0KFN0cmluZyhlKSl9aShcIkVSUl9JTlZBTElEX09QVF9WQUxVRVwiLChmdW5jdGlvbihlLHQpe3JldHVybidUaGUgdmFsdWUgXCInK3QrJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcIicrZSsnXCInfSksVHlwZUVycm9yKSxpKFwiRVJSX0lOVkFMSURfQVJHX1RZUEVcIiwoZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGksYSxzO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYoaT1cIm5vdCBcIix0LnN1YnN0cighYXx8YTwwPzA6K2EsaS5sZW5ndGgpPT09aSk/KG49XCJtdXN0IG5vdCBiZVwiLHQ9dC5yZXBsYWNlKC9ebm90IC8sXCJcIikpOm49XCJtdXN0IGJlXCIsZnVuY3Rpb24oZSx0LHIpe3JldHVybih2b2lkIDA9PT1yfHxyPmUubGVuZ3RoKSYmKHI9ZS5sZW5ndGgpLGUuc3Vic3RyaW5nKHItdC5sZW5ndGgscik9PT10fShlLFwiIGFyZ3VtZW50XCIpKXM9XCJUaGUgXCIuY29uY2F0KGUsXCIgXCIpLmNvbmNhdChuLFwiIFwiKS5jb25jYXQobyh0LFwidHlwZVwiKSk7ZWxzZXt2YXIgZj1mdW5jdGlvbihlLHQscil7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIHImJihyPTApLCEocit0Lmxlbmd0aD5lLmxlbmd0aCkmJi0xIT09ZS5pbmRleE9mKHQscil9KGUsXCIuXCIpP1wicHJvcGVydHlcIjpcImFyZ3VtZW50XCI7cz0nVGhlIFwiJy5jb25jYXQoZSwnXCIgJykuY29uY2F0KGYsXCIgXCIpLmNvbmNhdChuLFwiIFwiKS5jb25jYXQobyh0LFwidHlwZVwiKSl9cmV0dXJuIHMrPVwiLiBSZWNlaXZlZCB0eXBlIFwiLmNvbmNhdCh0eXBlb2Ygcil9KSxUeXBlRXJyb3IpLGkoXCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GXCIsXCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRlwiKSxpKFwiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URURcIiwoZnVuY3Rpb24oZSl7cmV0dXJuXCJUaGUgXCIrZStcIiBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkXCJ9KSksaShcIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFXCIsXCJQcmVtYXR1cmUgY2xvc2VcIiksaShcIkVSUl9TVFJFQU1fREVTVFJPWUVEXCIsKGZ1bmN0aW9uKGUpe3JldHVyblwiQ2Fubm90IGNhbGwgXCIrZStcIiBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkXCJ9KSksaShcIkVSUl9NVUxUSVBMRV9DQUxMQkFDS1wiLFwiQ2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzXCIpLGkoXCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFXCIsXCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlXCIpLGkoXCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORFwiLFwid3JpdGUgYWZ0ZXIgZW5kXCIpLGkoXCJFUlJfU1RSRUFNX05VTExfVkFMVUVTXCIsXCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbVwiLFR5cGVFcnJvciksaShcIkVSUl9VTktOT1dOX0VOQ09ESU5HXCIsKGZ1bmN0aW9uKGUpe3JldHVyblwiVW5rbm93biBlbmNvZGluZzogXCIrZX0pLFR5cGVFcnJvciksaShcIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlRcIixcInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50XCIpLGUuZXhwb3J0cy5jb2Rlcz1ufSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQpe3ZhciBuPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2gocik7cmV0dXJuIHR9O2UuZXhwb3J0cz11O3ZhciBpPXIoNjQpLG89cig2OCk7cigwKSh1LGkpO2Zvcih2YXIgYT1uKG8ucHJvdG90eXBlKSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBmPWFbc107dS5wcm90b3R5cGVbZl18fCh1LnByb3RvdHlwZVtmXT1vLnByb3RvdHlwZVtmXSl9ZnVuY3Rpb24gdShlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB1KSlyZXR1cm4gbmV3IHUoZSk7aS5jYWxsKHRoaXMsZSksby5jYWxsKHRoaXMsZSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLGUmJighMT09PWUucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PWUud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PWUuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoXCJlbmRcIixjKSkpfWZ1bmN0aW9uIGMoKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHx0Lm5leHRUaWNrKGgsdGhpcyl9ZnVuY3Rpb24gaChlKXtlLmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LnByb3RvdHlwZSxcIndyaXRhYmxlSGlnaFdhdGVyTWFya1wiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUucHJvdG90eXBlLFwid3JpdGFibGVCdWZmZXJcIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodS5wcm90b3R5cGUsXCJ3cml0YWJsZUxlbmd0aFwiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodS5wcm90b3R5cGUsXCJkZXN0cm95ZWRcIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCl9LHNldDpmdW5jdGlvbihlKXt2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1lKX19KX0pLmNhbGwodGhpcyxyKDMpKX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMikuQnVmZmVyO2Z1bmN0aW9uIGkoZSx0KXt0aGlzLl9ibG9jaz1uLmFsbG9jKGUpLHRoaXMuX2ZpbmFsU2l6ZT10LHRoaXMuX2Jsb2NrU2l6ZT1lLHRoaXMuX2xlbj0wfWkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYodD10fHxcInV0ZjhcIixlPW4uZnJvbShlLHQpKTtmb3IodmFyIHI9dGhpcy5fYmxvY2ssaT10aGlzLl9ibG9ja1NpemUsbz1lLmxlbmd0aCxhPXRoaXMuX2xlbixzPTA7czxvOyl7Zm9yKHZhciBmPWElaSx1PU1hdGgubWluKG8tcyxpLWYpLGM9MDtjPHU7YysrKXJbZitjXT1lW3MrY107cys9dSwoYSs9dSklaT09MCYmdGhpcy5fdXBkYXRlKHIpfXJldHVybiB0aGlzLl9sZW4rPW8sdGhpc30saS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2xlbiV0aGlzLl9ibG9ja1NpemU7dGhpcy5fYmxvY2tbdF09MTI4LHRoaXMuX2Jsb2NrLmZpbGwoMCx0KzEpLHQ+PXRoaXMuX2ZpbmFsU2l6ZSYmKHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayksdGhpcy5fYmxvY2suZmlsbCgwKSk7dmFyIHI9OCp0aGlzLl9sZW47aWYocjw9NDI5NDk2NzI5NSl0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKHIsdGhpcy5fYmxvY2tTaXplLTQpO2Vsc2V7dmFyIG49KDQyOTQ5NjcyOTUmcik+Pj4wLGk9KHItbikvNDI5NDk2NzI5Njt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKGksdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUobix0aGlzLl9ibG9ja1NpemUtNCl9dGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKTt2YXIgbz10aGlzLl9oYXNoKCk7cmV0dXJuIGU/by50b1N0cmluZyhlKTpvfSxpLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzXCIpfSxlLmV4cG9ydHM9aX0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1pO3ZhciBuPXIoOSkuRXZlbnRFbWl0dGVyO2Z1bmN0aW9uIGkoKXtuLmNhbGwodGhpcyl9cigwKShpLG4pLGkuUmVhZGFibGU9cigzMCksaS5Xcml0YWJsZT1yKDEyNCksaS5EdXBsZXg9cigxMjUpLGkuVHJhbnNmb3JtPXIoMTI2KSxpLlBhc3NUaHJvdWdoPXIoMTI3KSxpLlN0cmVhbT1pLGkucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO2Z1bmN0aW9uIGkodCl7ZS53cml0YWJsZSYmITE9PT1lLndyaXRlKHQpJiZyLnBhdXNlJiZyLnBhdXNlKCl9ZnVuY3Rpb24gbygpe3IucmVhZGFibGUmJnIucmVzdW1lJiZyLnJlc3VtZSgpfXIub24oXCJkYXRhXCIsaSksZS5vbihcImRyYWluXCIsbyksZS5faXNTdGRpb3x8dCYmITE9PT10LmVuZHx8KHIub24oXCJlbmRcIixzKSxyLm9uKFwiY2xvc2VcIixmKSk7dmFyIGE9ITE7ZnVuY3Rpb24gcygpe2F8fChhPSEwLGUuZW5kKCkpfWZ1bmN0aW9uIGYoKXthfHwoYT0hMCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmRlc3Ryb3kmJmUuZGVzdHJveSgpKX1mdW5jdGlvbiB1KGUpe2lmKGMoKSwwPT09bi5saXN0ZW5lckNvdW50KHRoaXMsXCJlcnJvclwiKSl0aHJvdyBlfWZ1bmN0aW9uIGMoKXtyLnJlbW92ZUxpc3RlbmVyKFwiZGF0YVwiLGkpLGUucmVtb3ZlTGlzdGVuZXIoXCJkcmFpblwiLG8pLHIucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixzKSxyLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixmKSxyLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIix1KSxlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIix1KSxyLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsYyksci5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsYyksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsYyl9cmV0dXJuIHIub24oXCJlcnJvclwiLHUpLGUub24oXCJlcnJvclwiLHUpLHIub24oXCJlbmRcIixjKSxyLm9uKFwiY2xvc2VcIixjKSxlLm9uKFwiY2xvc2VcIixjKSxlLmVtaXQoXCJwaXBlXCIsciksZX19LGZ1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfXQuaXNBcnJheT1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5KGUpOlwiW29iamVjdCBBcnJheV1cIj09PXIoZSl9LHQuaXNCb29sZWFuPWZ1bmN0aW9uKGUpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZX0sdC5pc051bGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfSx0LmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfSx0LmlzTnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlfSx0LmlzU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfSx0LmlzU3ltYm9sPWZ1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfSx0LmlzVW5kZWZpbmVkPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfSx0LmlzUmVnRXhwPWZ1bmN0aW9uKGUpe3JldHVyblwiW29iamVjdCBSZWdFeHBdXCI9PT1yKGUpfSx0LmlzT2JqZWN0PWZ1bmN0aW9uKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZX0sdC5pc0RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJbb2JqZWN0IERhdGVdXCI9PT1yKGUpfSx0LmlzRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuXCJbb2JqZWN0IEVycm9yXVwiPT09cihlKXx8ZSBpbnN0YW5jZW9mIEVycm9yfSx0LmlzRnVuY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZX0sdC5pc1ByaW1pdGl2ZT1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV8fFwiYm9vbGVhblwiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGV8fFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcInN5bWJvbFwiPT10eXBlb2YgZXx8dm9pZCAwPT09ZX0sdC5pc0J1ZmZlcj1lLmlzQnVmZmVyfSkuY2FsbCh0aGlzLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMikuQnVmZmVyLGk9bi5pc0VuY29kaW5nfHxmdW5jdGlvbihlKXtzd2l0Y2goKGU9XCJcIitlKSYmZS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOmNhc2VcInJhd1wiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiBvKGUpe3ZhciB0O3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVyblwidXRmOFwiO2Zvcih2YXIgdDs7KXN3aXRjaChlKXtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm5cInV0ZjhcIjtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm5cInV0ZjE2bGVcIjtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm5cImxhdGluMVwiO2Nhc2VcImJhc2U2NFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwiaGV4XCI6cmV0dXJuIGU7ZGVmYXVsdDppZih0KXJldHVybjtlPShcIlwiK2UpLnRvTG93ZXJDYXNlKCksdD0hMH19KGUpO2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0JiYobi5pc0VuY29kaW5nPT09aXx8IWkoZSkpKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2UpO3JldHVybiB0fHxlfShlKSx0aGlzLmVuY29kaW5nKXtjYXNlXCJ1dGYxNmxlXCI6dGhpcy50ZXh0PWYsdGhpcy5lbmQ9dSx0PTQ7YnJlYWs7Y2FzZVwidXRmOFwiOnRoaXMuZmlsbExhc3Q9cyx0PTQ7YnJlYWs7Y2FzZVwiYmFzZTY0XCI6dGhpcy50ZXh0PWMsdGhpcy5lbmQ9aCx0PTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1kLHZvaWQodGhpcy5lbmQ9bCl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1uLmFsbG9jVW5zYWZlKHQpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGU8PTEyNz8wOmU+PjU9PTY/MjplPj40PT0xND8zOmU+PjM9PTMwPzQ6ZT4+Nj09Mj8tMTotMn1mdW5jdGlvbiBzKGUpe3ZhciB0PXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQscj1mdW5jdGlvbihlLHQscil7aWYoMTI4IT0oMTkyJnRbMF0pKXJldHVybiBlLmxhc3ROZWVkPTAsXCLvv71cIjtpZihlLmxhc3ROZWVkPjEmJnQubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZ0WzFdKSlyZXR1cm4gZS5sYXN0TmVlZD0xLFwi77+9XCI7aWYoZS5sYXN0TmVlZD4yJiZ0Lmxlbmd0aD4yJiYxMjghPSgxOTImdFsyXSkpcmV0dXJuIGUubGFzdE5lZWQ9MixcIu+/vVwifX0odGhpcyxlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnRoaXMubGFzdE5lZWQ8PWUubGVuZ3RoPyhlLmNvcHkodGhpcy5sYXN0Q2hhcix0LDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKTooZS5jb3B5KHRoaXMubGFzdENoYXIsdCwwLGUubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPWUubGVuZ3RoKSl9ZnVuY3Rpb24gZihlLHQpe2lmKChlLmxlbmd0aC10KSUyPT0wKXt2YXIgcj1lLnRvU3RyaW5nKFwidXRmMTZsZVwiLHQpO2lmKHIpe3ZhciBuPXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKTtpZihuPj01NTI5NiYmbjw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPWVbZS5sZW5ndGgtMV0sci5zbGljZSgwLC0xKX1yZXR1cm4gcn1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTFdLGUudG9TdHJpbmcoXCJ1dGYxNmxlXCIsdCxlLmxlbmd0aC0xKX1mdW5jdGlvbiB1KGUpe3ZhciB0PWUmJmUubGVuZ3RoP3RoaXMud3JpdGUoZSk6XCJcIjtpZih0aGlzLmxhc3ROZWVkKXt2YXIgcj10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkO3JldHVybiB0K3RoaXMubGFzdENoYXIudG9TdHJpbmcoXCJ1dGYxNmxlXCIsMCxyKX1yZXR1cm4gdH1mdW5jdGlvbiBjKGUsdCl7dmFyIHI9KGUubGVuZ3RoLXQpJTM7cmV0dXJuIDA9PT1yP2UudG9TdHJpbmcoXCJiYXNlNjRcIix0KToodGhpcy5sYXN0TmVlZD0zLXIsdGhpcy5sYXN0VG90YWw9MywxPT09cj90aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMV06KHRoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPWVbZS5sZW5ndGgtMV0pLGUudG9TdHJpbmcoXCJiYXNlNjRcIix0LGUubGVuZ3RoLXIpKX1mdW5jdGlvbiBoKGUpe3ZhciB0PWUmJmUubGVuZ3RoP3RoaXMud3JpdGUoZSk6XCJcIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD90K3RoaXMubGFzdENoYXIudG9TdHJpbmcoXCJiYXNlNjRcIiwwLDMtdGhpcy5sYXN0TmVlZCk6dH1mdW5jdGlvbiBkKGUpe3JldHVybiBlLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGUmJmUubGVuZ3RoP3RoaXMud3JpdGUoZSk6XCJcIn10LlN0cmluZ0RlY29kZXI9byxvLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuXCJcIjt2YXIgdCxyO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PSh0PXRoaXMuZmlsbExhc3QoZSkpKXJldHVyblwiXCI7cj10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1lbHNlIHI9MDtyZXR1cm4gcjxlLmxlbmd0aD90P3QrdGhpcy50ZXh0KGUscik6dGhpcy50ZXh0KGUscik6dHx8XCJcIn0sby5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUubGVuZ3RoP3RoaXMud3JpdGUoZSk6XCJcIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD90K1wi77+9XCI6dH0sby5wcm90b3R5cGUudGV4dD1mdW5jdGlvbihlLHQpe3ZhciByPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10Lmxlbmd0aC0xO2lmKG48cilyZXR1cm4gMDt2YXIgaT1hKHRbbl0pO2lmKGk+PTApcmV0dXJuIGk+MCYmKGUubGFzdE5lZWQ9aS0xKSxpO2lmKC0tbjxyfHwtMj09PWkpcmV0dXJuIDA7aWYoKGk9YSh0W25dKSk+PTApcmV0dXJuIGk+MCYmKGUubGFzdE5lZWQ9aS0yKSxpO2lmKC0tbjxyfHwtMj09PWkpcmV0dXJuIDA7aWYoKGk9YSh0W25dKSk+PTApcmV0dXJuIGk+MCYmKDI9PT1pP2k9MDplLmxhc3ROZWVkPWktMyksaTtyZXR1cm4gMH0odGhpcyxlLHQpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBlLnRvU3RyaW5nKFwidXRmOFwiLHQpO3RoaXMubGFzdFRvdGFsPXI7dmFyIG49ZS5sZW5ndGgtKHItdGhpcy5sYXN0TmVlZCk7cmV0dXJuIGUuY29weSh0aGlzLmxhc3RDaGFyLDAsbiksZS50b1N0cmluZyhcInV0ZjhcIix0LG4pfSxvLnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlvbihlKXtpZih0aGlzLmxhc3ROZWVkPD1lLmxlbmd0aClyZXR1cm4gZS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtlLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsZS5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPWUubGVuZ3RofX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoOCksaT1yKDEyKTtmdW5jdGlvbiBvKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49XCJiaWdcIix0aGlzLl9kZWx0YTg9dGhpcy5ibG9ja1NpemUvOCx0aGlzLl9kZWx0YTMyPXRoaXMuYmxvY2tTaXplLzMyfXQuQmxvY2tIYXNoPW8sby5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7aWYoZT1uLnRvQXJyYXkoZSx0KSx0aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZy5jb25jYXQoZSk6dGhpcy5wZW5kaW5nPWUsdGhpcy5wZW5kaW5nVG90YWwrPWUubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIHI9KGU9dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz1lLnNsaWNlKGUubGVuZ3RoLXIsZS5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLGU9bi5qb2luMzIoZSwwLGUubGVuZ3RoLXIsdGhpcy5lbmRpYW4pO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSs9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUoZSxpLGkrdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLGkobnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KGUpfSxvLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wZW5kaW5nVG90YWwsdD10aGlzLl9kZWx0YTgscj10LShlK3RoaXMucGFkTGVuZ3RoKSV0LG49bmV3IEFycmF5KHIrdGhpcy5wYWRMZW5ndGgpO25bMF09MTI4O2Zvcih2YXIgaT0xO2k8cjtpKyspbltpXT0wO2lmKGU8PD0zLFwiYmlnXCI9PT10aGlzLmVuZGlhbil7Zm9yKHZhciBvPTg7bzx0aGlzLnBhZExlbmd0aDtvKyspbltpKytdPTA7bltpKytdPTAsbltpKytdPTAsbltpKytdPTAsbltpKytdPTAsbltpKytdPWU+Pj4yNCYyNTUsbltpKytdPWU+Pj4xNiYyNTUsbltpKytdPWU+Pj44JjI1NSxuW2krK109MjU1JmV9ZWxzZSBmb3IobltpKytdPTI1NSZlLG5baSsrXT1lPj4+OCYyNTUsbltpKytdPWU+Pj4xNiYyNTUsbltpKytdPWU+Pj4yNCYyNTUsbltpKytdPTAsbltpKytdPTAsbltpKytdPTAsbltpKytdPTAsbz04O288dGhpcy5wYWRMZW5ndGg7bysrKW5baSsrXT0wO3JldHVybiBufX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUuc29ydCgoZSx0KT0+XCJsYXRlc3RcIj09PWV8fFwiZWFybGllc3RcIj09PXQ/MTpcImxhdGVzdFwiPT09dHx8XCJlYXJsaWVzdFwiPT09ZT8tMTpuKGUpLW4odCkpfWZ1bmN0aW9uIG4oZSl7cmV0dXJuIG51bGw9PWU/ZTpOdW1iZXIucGFyc2VJbnQoZSwxNil9ZnVuY3Rpb24gaShlKXtpZihudWxsPT1lKXJldHVybiBlO2xldCB0PWUudG9TdHJpbmcoMTYpO3JldHVybiB0Lmxlbmd0aCUyJiYodD1cIjBcIit0KSxcIjB4XCIrdH1mdW5jdGlvbiBvKCl7cmV0dXJuIE1hdGguZmxvb3IoMTYqTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMTYpfWUuZXhwb3J0cz17bWluQmxvY2tSZWY6ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIHIoZSlbMF19LG1heEJsb2NrUmVmOmZ1bmN0aW9uKC4uLmUpe2NvbnN0IHQ9cihlKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX0sc29ydEJsb2NrUmVmczpyLGJuVG9IZXg6ZnVuY3Rpb24oZSl7cmV0dXJuXCIweFwiK2UudG9TdHJpbmcoMTYpfSxibG9ja1JlZklzTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlJiYhW1wiZWFybGllc3RcIixcImxhdGVzdFwiLFwicGVuZGluZ1wiXS5pbmNsdWRlcyhlKX0saGV4VG9JbnQ6bixpbmNyZW1lbnRIZXhJbnQ6ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4gZTtyZXR1cm4gaShuKGUpKzEpfSxpbnRUb0hleDppLHVuc2FmZVJhbmRvbUJ5dGVzOmZ1bmN0aW9uKGUpe2xldCB0PVwiMHhcIjtmb3IobGV0IHI9MDtyPGU7cisrKXQrPW8oKSx0Kz1vKCk7cmV0dXJuIHR9fX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbih0KXt2b2lkIDA9PT10fHwhdC52ZXJzaW9ufHwwPT09dC52ZXJzaW9uLmluZGV4T2YoXCJ2MC5cIil8fDA9PT10LnZlcnNpb24uaW5kZXhPZihcInYxLlwiKSYmMCE9PXQudmVyc2lvbi5pbmRleE9mKFwidjEuOC5cIik/ZS5leHBvcnRzPXtuZXh0VGljazpmdW5jdGlvbihlLHIsbixpKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiY2FsbGJhY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTt2YXIgbyxhLHM9YXJndW1lbnRzLmxlbmd0aDtzd2l0Y2gocyl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gdC5uZXh0VGljayhlKTtjYXNlIDI6cmV0dXJuIHQubmV4dFRpY2soKGZ1bmN0aW9uKCl7ZS5jYWxsKG51bGwscil9KSk7Y2FzZSAzOnJldHVybiB0Lm5leHRUaWNrKChmdW5jdGlvbigpe2UuY2FsbChudWxsLHIsbil9KSk7Y2FzZSA0OnJldHVybiB0Lm5leHRUaWNrKChmdW5jdGlvbigpe2UuY2FsbChudWxsLHIsbixpKX0pKTtkZWZhdWx0OmZvcihvPW5ldyBBcnJheShzLTEpLGE9MDthPG8ubGVuZ3RoOylvW2ErK109YXJndW1lbnRzW2FdO3JldHVybiB0Lm5leHRUaWNrKChmdW5jdGlvbigpe2UuYXBwbHkobnVsbCxvKX0pKX19fTplLmV4cG9ydHM9dH0pLmNhbGwodGhpcyxyKDMpKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUud2VicGFja1BvbHlmaWxsfHwoZS5kZXByZWNhdGU9ZnVuY3Rpb24oKXt9LGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwibG9hZGVkXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImlkXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuaX19KSxlLndlYnBhY2tQb2x5ZmlsbD0xKSxlfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNCksaT1yKDYpLG89aS5nZXROQUYsYT1pLmdldEpTRixzPWkuYXNzZXJ0O2Z1bmN0aW9uIGYoZSx0KXt0aGlzLnR5cGU9ZSx0aGlzLnA9bmV3IG4odC5wLDE2KSx0aGlzLnJlZD10LnByaW1lP24ucmVkKHQucHJpbWUpOm4ubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgbigwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IG4oMSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdvPW5ldyBuKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49dC5uJiZuZXcgbih0Lm4sMTYpLHRoaXMuZz10LmcmJnRoaXMucG9pbnRGcm9tSlNPTih0LmcsdC5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpLHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIHI9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IXJ8fHIuY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gdShlLHQpe3RoaXMuY3VydmU9ZSx0aGlzLnR5cGU9dCx0aGlzLnByZWNvbXB1dGVkPW51bGx9ZS5leHBvcnRzPWYsZi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIil9LGYucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSxmLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oZSx0KXtzKGUucHJlY29tcHV0ZWQpO3ZhciByPWUuX2dldERvdWJsZXMoKSxuPW8odCwxLHRoaXMuX2JpdExlbmd0aCksaT0oMTw8ci5zdGVwKzEpLShyLnN0ZXAlMj09MD8yOjEpO2kvPTM7Zm9yKHZhciBhPVtdLGY9MDtmPG4ubGVuZ3RoO2YrPXIuc3RlcCl7dmFyIHU9MDtmb3IodD1mK3Iuc3RlcC0xO3Q+PWY7dC0tKXU9KHU8PDEpK25bdF07YS5wdXNoKHUpfWZvcih2YXIgYz10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksaD10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksZD1pO2Q+MDtkLS0pe2ZvcihmPTA7ZjxhLmxlbmd0aDtmKyspeyh1PWFbZl0pPT09ZD9oPWgubWl4ZWRBZGQoci5wb2ludHNbZl0pOnU9PT0tZCYmKGg9aC5taXhlZEFkZChyLnBvaW50c1tmXS5uZWcoKSkpfWM9Yy5hZGQoaCl9cmV0dXJuIGMudG9QKCl9LGYucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKGUsdCl7dmFyIHI9NCxuPWUuX2dldE5BRlBvaW50cyhyKTtyPW4ud25kO2Zvcih2YXIgaT1uLnBvaW50cyxhPW8odCxyLHRoaXMuX2JpdExlbmd0aCksZj10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksdT1hLmxlbmd0aC0xO3U+PTA7dS0tKXtmb3IodD0wO3U+PTAmJjA9PT1hW3VdO3UtLSl0Kys7aWYodT49MCYmdCsrLGY9Zi5kYmxwKHQpLHU8MClicmVhazt2YXIgYz1hW3VdO3MoMCE9PWMpLGY9XCJhZmZpbmVcIj09PWUudHlwZT9jPjA/Zi5taXhlZEFkZChpW2MtMT4+MV0pOmYubWl4ZWRBZGQoaVstYy0xPj4xXS5uZWcoKSk6Yz4wP2YuYWRkKGlbYy0xPj4xXSk6Zi5hZGQoaVstYy0xPj4xXS5uZWcoKSl9cmV0dXJuXCJhZmZpbmVcIj09PWUudHlwZT9mLnRvUCgpOmZ9LGYucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKGUsdCxyLG4saSl7Zm9yKHZhciBzPXRoaXMuX3duYWZUMSxmPXRoaXMuX3duYWZUMix1PXRoaXMuX3duYWZUMyxjPTAsaD0wO2g8bjtoKyspe3ZhciBkPSh4PXRbaF0pLl9nZXROQUZQb2ludHMoZSk7c1toXT1kLnduZCxmW2hdPWQucG9pbnRzfWZvcihoPW4tMTtoPj0xO2gtPTIpe3ZhciBsPWgtMSxwPWg7aWYoMT09PXNbbF0mJjE9PT1zW3BdKXt2YXIgYj1bdFtsXSxudWxsLG51bGwsdFtwXV07MD09PXRbbF0ueS5jbXAodFtwXS55KT8oYlsxXT10W2xdLmFkZCh0W3BdKSxiWzJdPXRbbF0udG9KKCkubWl4ZWRBZGQodFtwXS5uZWcoKSkpOjA9PT10W2xdLnkuY21wKHRbcF0ueS5yZWROZWcoKSk/KGJbMV09dFtsXS50b0ooKS5taXhlZEFkZCh0W3BdKSxiWzJdPXRbbF0uYWRkKHRbcF0ubmVnKCkpKTooYlsxXT10W2xdLnRvSigpLm1peGVkQWRkKHRbcF0pLGJbMl09dFtsXS50b0ooKS5taXhlZEFkZCh0W3BdLm5lZygpKSk7dmFyIHk9Wy0zLC0xLC01LC03LDAsNyw1LDEsM10sZz1hKHJbbF0scltwXSk7Yz1NYXRoLm1heChnWzBdLmxlbmd0aCxjKSx1W2xdPW5ldyBBcnJheShjKSx1W3BdPW5ldyBBcnJheShjKTtmb3IodmFyIHY9MDt2PGM7disrKXt2YXIgbT0wfGdbMF1bdl0sdz0wfGdbMV1bdl07dVtsXVt2XT15WzMqKG0rMSkrKHcrMSldLHVbcF1bdl09MCxmW2xdPWJ9fWVsc2UgdVtsXT1vKHJbbF0sc1tsXSx0aGlzLl9iaXRMZW5ndGgpLHVbcF09byhyW3BdLHNbcF0sdGhpcy5fYml0TGVuZ3RoKSxjPU1hdGgubWF4KHVbbF0ubGVuZ3RoLGMpLGM9TWF0aC5tYXgodVtwXS5sZW5ndGgsYyl9dmFyIF89dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLEU9dGhpcy5fd25hZlQ0O2ZvcihoPWM7aD49MDtoLS0pe2Zvcih2YXIgUz0wO2g+PTA7KXt2YXIgQT0hMDtmb3Iodj0wO3Y8bjt2KyspRVt2XT0wfHVbdl1baF0sMCE9PUVbdl0mJihBPSExKTtpZighQSlicmVhaztTKyssaC0tfWlmKGg+PTAmJlMrKyxfPV8uZGJscChTKSxoPDApYnJlYWs7Zm9yKHY9MDt2PG47disrKXt2YXIgeCxrPUVbdl07MCE9PWsmJihrPjA/eD1mW3ZdW2stMT4+MV06azwwJiYoeD1mW3ZdWy1rLTE+PjFdLm5lZygpKSxfPVwiYWZmaW5lXCI9PT14LnR5cGU/Xy5taXhlZEFkZCh4KTpfLmFkZCh4KSl9fWZvcihoPTA7aDxuO2grKylmW2hdPW51bGw7cmV0dXJuIGk/XzpfLnRvUCgpfSxmLkJhc2VQb2ludD11LHUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSx1LnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxmLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihlLHQpe2U9aS50b0FycmF5KGUsdCk7dmFyIHI9dGhpcy5wLmJ5dGVMZW5ndGgoKTtpZigoND09PWVbMF18fDY9PT1lWzBdfHw3PT09ZVswXSkmJmUubGVuZ3RoLTE9PTIqcilyZXR1cm4gNj09PWVbMF0/cyhlW2UubGVuZ3RoLTFdJTI9PTApOjc9PT1lWzBdJiZzKGVbZS5sZW5ndGgtMV0lMj09MSksdGhpcy5wb2ludChlLnNsaWNlKDEsMStyKSxlLnNsaWNlKDErciwxKzIqcikpO2lmKCgyPT09ZVswXXx8Mz09PWVbMF0pJiZlLmxlbmd0aC0xPT09cilyZXR1cm4gdGhpcy5wb2ludEZyb21YKGUuc2xpY2UoMSwxK3IpLDM9PT1lWzBdKTt0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHBvaW50IGZvcm1hdFwiKX0sdS5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lbmNvZGUoZSwhMCl9LHUucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxyPXRoaXMuZ2V0WCgpLnRvQXJyYXkoXCJiZVwiLHQpO3JldHVybiBlP1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChyKTpbNF0uY29uY2F0KHIsdGhpcy5nZXRZKCkudG9BcnJheShcImJlXCIsdCkpfSx1LnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5lbmNvZGUodGhpcy5fZW5jb2RlKHQpLGUpfSx1LnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKGUpe2lmKHRoaXMucHJlY29tcHV0ZWQpcmV0dXJuIHRoaXM7dmFyIHQ9e2RvdWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRhOm51bGx9O3JldHVybiB0Lm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCksdC5kb3VibGVzPXRoaXMuX2dldERvdWJsZXMoNCxlKSx0LmJldGE9dGhpcy5fZ2V0QmV0YSgpLHRoaXMucHJlY29tcHV0ZWQ9dCx0aGlzfSx1LnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbihlKXtpZighdGhpcy5wcmVjb21wdXRlZClyZXR1cm4hMTt2YXIgdD10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISF0JiZ0LnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgoZS5iaXRMZW5ndGgoKSsxKS90LnN0ZXApfSx1LnByb3RvdHlwZS5fZ2V0RG91Ymxlcz1mdW5jdGlvbihlLHQpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgcj1bdGhpc10sbj10aGlzLGk9MDtpPHQ7aSs9ZSl7Zm9yKHZhciBvPTA7bzxlO28rKyluPW4uZGJsKCk7ci5wdXNoKG4pfXJldHVybntzdGVwOmUscG9pbnRzOnJ9fSx1LnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKGUpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFmKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtmb3IodmFyIHQ9W3RoaXNdLHI9KDE8PGUpLTEsbj0xPT09cj9udWxsOnRoaXMuZGJsKCksaT0xO2k8cjtpKyspdFtpXT10W2ktMV0uYWRkKG4pO3JldHVybnt3bmQ6ZSxwb2ludHM6dH19LHUucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHUucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMscj0wO3I8ZTtyKyspdD10LmRibCgpO3JldHVybiB0fX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMTgxKSxpPXIoODcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmaShlLmxlbmd0aCkmJiFuKGUpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQpe3R8PTA7Zm9yKHZhciByPU1hdGgubWF4KGUubGVuZ3RoLXQsMCksbj1BcnJheShyKSxpPTA7aTxyO2krKyluW2ldPWVbdCtpXTtyZXR1cm4gbn0sZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNDYpO2Z1bmN0aW9uIGkoKXt9ZS5leHBvcnRzPWksaS5wcm90b3R5cGUuc2V0RW5naW5lPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dC5lbmdpbmV8fCh0LmVuZ2luZT1lLGUub24oXCJibG9ja1wiLChmdW5jdGlvbihlKXt0LmN1cnJlbnRCbG9jaz1lfSkpLGUub24oXCJzdGFydFwiLChmdW5jdGlvbigpe3Quc3RhcnQoKX0pKSxlLm9uKFwic3RvcFwiLChmdW5jdGlvbigpe3Quc3RvcCgpfSkpKX0saS5wcm90b3R5cGUuaGFuZGxlUmVxdWVzdD1mdW5jdGlvbihlLHQscil7dGhyb3cgbmV3IEVycm9yKFwiU3VicHJvdmlkZXJzIHNob3VsZCBvdmVycmlkZSBgaGFuZGxlUmVxdWVzdGAuXCIpfSxpLnByb3RvdHlwZS5lbWl0UGF5bG9hZD1mdW5jdGlvbihlLHQpe3RoaXMuZW5naW5lLnNlbmRBc3luYyhuKGUpLHQpfSxpLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7fSxpLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe319LGZ1bmN0aW9uKGUsdCxyKXsodD1lLmV4cG9ydHM9cig1NykpLlN0cmVhbT10LHQuUmVhZGFibGU9dCx0LldyaXRhYmxlPXIoMzIpLHQuRHVwbGV4PXIoMTEpLHQuVHJhbnNmb3JtPXIoNjEpLHQuUGFzc1Rocm91Z2g9cigxMjMpfSxmdW5jdGlvbihlLHQscil7dmFyIG49cigxKSxpPW4uQnVmZmVyO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19ZnVuY3Rpb24gYShlLHQscil7cmV0dXJuIGkoZSx0LHIpfWkuZnJvbSYmaS5hbGxvYyYmaS5hbGxvY1Vuc2FmZSYmaS5hbGxvY1Vuc2FmZVNsb3c/ZS5leHBvcnRzPW46KG8obix0KSx0LkJ1ZmZlcj1hKSxvKGksYSksYS5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIGkoZSx0LHIpfSxhLmFsbG9jPWZ1bmN0aW9uKGUsdCxyKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlclwiKTt2YXIgbj1pKGUpO3JldHVybiB2b2lkIDAhPT10P1wic3RyaW5nXCI9PXR5cGVvZiByP24uZmlsbCh0LHIpOm4uZmlsbCh0KTpuLmZpbGwoMCksbn0sYS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlclwiKTtyZXR1cm4gaShlKX0sYS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIG4uU2xvd0J1ZmZlcihlKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24odCxuLGkpe3ZhciBvPXIoMjQpO2Z1bmN0aW9uIGEoZSl7dmFyIHQ9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUuZW50cnk7ZS5lbnRyeT1udWxsO2Zvcig7bjspe3ZhciBpPW4uY2FsbGJhY2s7dC5wZW5kaW5nY2ItLSxpKHIpLG49bi5uZXh0fXQuY29ya2VkUmVxdWVzdHNGcmVlP3QuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9ZTp0LmNvcmtlZFJlcXVlc3RzRnJlZT1lfSh0LGUpfX1lLmV4cG9ydHM9djt2YXIgcyxmPSF0LmJyb3dzZXImJltcInYwLjEwXCIsXCJ2MC45LlwiXS5pbmRleE9mKHQudmVyc2lvbi5zbGljZSgwLDUpKT4tMT9uOm8ubmV4dFRpY2s7di5Xcml0YWJsZVN0YXRlPWc7dmFyIHU9T2JqZWN0LmNyZWF0ZShyKDE5KSk7dS5pbmhlcml0cz1yKDApO3ZhciBjPXtkZXByZWNhdGU6cig2MCl9LGg9cig1OCksZD1yKDMxKS5CdWZmZXIsbD1pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fTt2YXIgcCxiPXIoNTkpO2Z1bmN0aW9uIHkoKXt9ZnVuY3Rpb24gZyhlLHQpe3M9c3x8cigxMSksZT1lfHx7fTt2YXIgbj10IGluc3RhbmNlb2Ygczt0aGlzLm9iamVjdE1vZGU9ISFlLm9iamVjdE1vZGUsbiYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhZS53cml0YWJsZU9iamVjdE1vZGUpO3ZhciBpPWUuaGlnaFdhdGVyTWFyayx1PWUud3JpdGFibGVIaWdoV2F0ZXJNYXJrLGM9dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0O3RoaXMuaGlnaFdhdGVyTWFyaz1pfHwwPT09aT9pOm4mJih1fHwwPT09dSk/dTpjLHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITE7dmFyIGg9ITE9PT1lLmRlY29kZVN0cmluZ3M7dGhpcy5kZWNvZGVTdHJpbmdzPSFoLHRoaXMuZGVmYXVsdEVuY29kaW5nPWUuZGVmYXVsdEVuY29kaW5nfHxcInV0ZjhcIix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe3ZhciByPWUuX3dyaXRhYmxlU3RhdGUsbj1yLnN5bmMsaT1yLndyaXRlY2I7aWYoZnVuY3Rpb24oZSl7ZS53cml0aW5nPSExLGUud3JpdGVjYj1udWxsLGUubGVuZ3RoLT1lLndyaXRlbGVuLGUud3JpdGVsZW49MH0ociksdCkhZnVuY3Rpb24oZSx0LHIsbixpKXstLXQucGVuZGluZ2NiLHI/KG8ubmV4dFRpY2soaSxuKSxvLm5leHRUaWNrKEEsZSx0KSxlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxlLmVtaXQoXCJlcnJvclwiLG4pKTooaShuKSxlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxlLmVtaXQoXCJlcnJvclwiLG4pLEEoZSx0KSl9KGUscixuLHQsaSk7ZWxzZXt2YXIgYT1FKHIpO2F8fHIuY29ya2VkfHxyLmJ1ZmZlclByb2Nlc3Npbmd8fCFyLmJ1ZmZlcmVkUmVxdWVzdHx8XyhlLHIpLG4/Zih3LGUscixhLGkpOncoZSxyLGEsaSl9fSh0LGUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBhKHRoaXMpfWZ1bmN0aW9uIHYoZSl7aWYocz1zfHxyKDExKSwhKHAuY2FsbCh2LHRoaXMpfHx0aGlzIGluc3RhbmNlb2YgcykpcmV0dXJuIG5ldyB2KGUpO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IGcoZSx0aGlzKSx0aGlzLndyaXRhYmxlPSEwLGUmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLndyaXRlJiYodGhpcy5fd3JpdGU9ZS53cml0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgZS53cml0ZXYmJih0aGlzLl93cml0ZXY9ZS53cml0ZXYpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9ZS5kZXN0cm95KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmZpbmFsJiYodGhpcy5fZmluYWw9ZS5maW5hbCkpLGguY2FsbCh0aGlzKX1mdW5jdGlvbiBtKGUsdCxyLG4saSxvLGEpe3Qud3JpdGVsZW49bix0LndyaXRlY2I9YSx0LndyaXRpbmc9ITAsdC5zeW5jPSEwLHI/ZS5fd3JpdGV2KGksdC5vbndyaXRlKTplLl93cml0ZShpLG8sdC5vbndyaXRlKSx0LnN5bmM9ITF9ZnVuY3Rpb24gdyhlLHQscixuKXtyfHxmdW5jdGlvbihlLHQpezA9PT10Lmxlbmd0aCYmdC5uZWVkRHJhaW4mJih0Lm5lZWREcmFpbj0hMSxlLmVtaXQoXCJkcmFpblwiKSl9KGUsdCksdC5wZW5kaW5nY2ItLSxuKCksQShlLHQpfWZ1bmN0aW9uIF8oZSx0KXt0LmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIHI9dC5idWZmZXJlZFJlcXVlc3Q7aWYoZS5fd3JpdGV2JiZyJiZyLm5leHQpe3ZhciBuPXQuYnVmZmVyZWRSZXF1ZXN0Q291bnQsaT1uZXcgQXJyYXkobiksbz10LmNvcmtlZFJlcXVlc3RzRnJlZTtvLmVudHJ5PXI7Zm9yKHZhciBzPTAsZj0hMDtyOylpW3NdPXIsci5pc0J1Znx8KGY9ITEpLHI9ci5uZXh0LHMrPTE7aS5hbGxCdWZmZXJzPWYsbShlLHQsITAsdC5sZW5ndGgsaSxcIlwiLG8uZmluaXNoKSx0LnBlbmRpbmdjYisrLHQubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLG8ubmV4dD8odC5jb3JrZWRSZXF1ZXN0c0ZyZWU9by5uZXh0LG8ubmV4dD1udWxsKTp0LmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgYSh0KSx0LmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO3I7KXt2YXIgdT1yLmNodW5rLGM9ci5lbmNvZGluZyxoPXIuY2FsbGJhY2s7aWYobShlLHQsITEsdC5vYmplY3RNb2RlPzE6dS5sZW5ndGgsdSxjLGgpLHI9ci5uZXh0LHQuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSx0LndyaXRpbmcpYnJlYWt9bnVsbD09PXImJih0Lmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9dC5idWZmZXJlZFJlcXVlc3Q9cix0LmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gRShlKXtyZXR1cm4gZS5lbmRpbmcmJjA9PT1lLmxlbmd0aCYmbnVsbD09PWUuYnVmZmVyZWRSZXF1ZXN0JiYhZS5maW5pc2hlZCYmIWUud3JpdGluZ31mdW5jdGlvbiBTKGUsdCl7ZS5fZmluYWwoKGZ1bmN0aW9uKHIpe3QucGVuZGluZ2NiLS0sciYmZS5lbWl0KFwiZXJyb3JcIixyKSx0LnByZWZpbmlzaGVkPSEwLGUuZW1pdChcInByZWZpbmlzaFwiKSxBKGUsdCl9KSl9ZnVuY3Rpb24gQShlLHQpe3ZhciByPUUodCk7cmV0dXJuIHImJighZnVuY3Rpb24oZSx0KXt0LnByZWZpbmlzaGVkfHx0LmZpbmFsQ2FsbGVkfHwoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5fZmluYWw/KHQucGVuZGluZ2NiKyssdC5maW5hbENhbGxlZD0hMCxvLm5leHRUaWNrKFMsZSx0KSk6KHQucHJlZmluaXNoZWQ9ITAsZS5lbWl0KFwicHJlZmluaXNoXCIpKSl9KGUsdCksMD09PXQucGVuZGluZ2NiJiYodC5maW5pc2hlZD0hMCxlLmVtaXQoXCJmaW5pc2hcIikpKSxyfXUuaW5oZXJpdHModixoKSxnLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5idWZmZXJlZFJlcXVlc3QsdD1bXTtlOyl0LnB1c2goZSksZT1lLm5leHQ7cmV0dXJuIHR9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShnLnByb3RvdHlwZSxcImJ1ZmZlclwiLHtnZXQ6Yy5kZXByZWNhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9KSxcIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuXCIsXCJERVAwMDAzXCIpfSl9Y2F0Y2goZSl7fX0oKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KHA9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHYsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hIXAuY2FsbCh0aGlzLGUpfHx0aGlzPT09diYmKGUmJmUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBnKX19KSk6cD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXN9LHYucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGVcIikpfSx2LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQscil7dmFyIG4saT10aGlzLl93cml0YWJsZVN0YXRlLGE9ITEscz0haS5vYmplY3RNb2RlJiYobj1lLGQuaXNCdWZmZXIobil8fG4gaW5zdGFuY2VvZiBsKTtyZXR1cm4gcyYmIWQuaXNCdWZmZXIoZSkmJihlPWZ1bmN0aW9uKGUpe3JldHVybiBkLmZyb20oZSl9KGUpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYocj10LHQ9bnVsbCkscz90PVwiYnVmZmVyXCI6dHx8KHQ9aS5kZWZhdWx0RW5jb2RpbmcpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIHImJihyPXkpLGkuZW5kZWQ/ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgRXJyb3IoXCJ3cml0ZSBhZnRlciBlbmRcIik7ZS5lbWl0KFwiZXJyb3JcIixyKSxvLm5leHRUaWNrKHQscil9KHRoaXMscik6KHN8fGZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPSEwLGE9ITE7cmV0dXJuIG51bGw9PT1yP2E9bmV3IFR5cGVFcnJvcihcIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtXCIpOlwic3RyaW5nXCI9PXR5cGVvZiByfHx2b2lkIDA9PT1yfHx0Lm9iamVjdE1vZGV8fChhPW5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rXCIpKSxhJiYoZS5lbWl0KFwiZXJyb3JcIixhKSxvLm5leHRUaWNrKG4sYSksaT0hMSksaX0odGhpcyxpLGUscikpJiYoaS5wZW5kaW5nY2IrKyxhPWZ1bmN0aW9uKGUsdCxyLG4saSxvKXtpZighcil7dmFyIGE9ZnVuY3Rpb24oZSx0LHIpe2Uub2JqZWN0TW9kZXx8ITE9PT1lLmRlY29kZVN0cmluZ3N8fFwic3RyaW5nXCIhPXR5cGVvZiB0fHwodD1kLmZyb20odCxyKSk7cmV0dXJuIHR9KHQsbixpKTtuIT09YSYmKHI9ITAsaT1cImJ1ZmZlclwiLG49YSl9dmFyIHM9dC5vYmplY3RNb2RlPzE6bi5sZW5ndGg7dC5sZW5ndGgrPXM7dmFyIGY9dC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrO2Z8fCh0Lm5lZWREcmFpbj0hMCk7aWYodC53cml0aW5nfHx0LmNvcmtlZCl7dmFyIHU9dC5sYXN0QnVmZmVyZWRSZXF1ZXN0O3QubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6bixlbmNvZGluZzppLGlzQnVmOnIsY2FsbGJhY2s6byxuZXh0Om51bGx9LHU/dS5uZXh0PXQubGFzdEJ1ZmZlcmVkUmVxdWVzdDp0LmJ1ZmZlcmVkUmVxdWVzdD10Lmxhc3RCdWZmZXJlZFJlcXVlc3QsdC5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIG0oZSx0LCExLHMsbixpLG8pO3JldHVybiBmfSh0aGlzLGkscyxlLHQscikpLGF9LHYucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSx2LnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl93cml0YWJsZVN0YXRlO2UuY29ya2VkJiYoZS5jb3JrZWQtLSxlLndyaXRpbmd8fGUuY29ya2VkfHxlLmZpbmlzaGVkfHxlLmJ1ZmZlclByb2Nlc3Npbmd8fCFlLmJ1ZmZlcmVkUmVxdWVzdHx8Xyh0aGlzLGUpKX0sdi5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1lLnRvTG93ZXJDYXNlKCkpLCEoW1wiaGV4XCIsXCJ1dGY4XCIsXCJ1dGYtOFwiLFwiYXNjaWlcIixcImJpbmFyeVwiLFwiYmFzZTY0XCIsXCJ1Y3MyXCIsXCJ1Y3MtMlwiLFwidXRmMTZsZVwiLFwidXRmLTE2bGVcIixcInJhd1wiXS5pbmRleE9mKChlK1wiXCIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPWUsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHYucHJvdG90eXBlLFwid3JpdGFibGVIaWdoV2F0ZXJNYXJrXCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSx2LnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oZSx0LHIpe3IobmV3IEVycm9yKFwiX3dyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkXCIpKX0sdi5wcm90b3R5cGUuX3dyaXRldj1udWxsLHYucHJvdG90eXBlLmVuZD1mdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5fd3JpdGFibGVTdGF0ZTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlPyhyPWUsZT1udWxsLHQ9bnVsbCk6XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKHI9dCx0PW51bGwpLG51bGwhPWUmJnRoaXMud3JpdGUoZSx0KSxuLmNvcmtlZCYmKG4uY29ya2VkPTEsdGhpcy51bmNvcmsoKSksbi5lbmRpbmd8fG4uZmluaXNoZWR8fGZ1bmN0aW9uKGUsdCxyKXt0LmVuZGluZz0hMCxBKGUsdCksciYmKHQuZmluaXNoZWQ/by5uZXh0VGljayhyKTplLm9uY2UoXCJmaW5pc2hcIixyKSk7dC5lbmRlZD0hMCxlLndyaXRhYmxlPSExfSh0aGlzLG4scil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2LnByb3RvdHlwZSxcImRlc3Ryb3llZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihlKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSl9fSksdi5wcm90b3R5cGUuZGVzdHJveT1iLmRlc3Ryb3ksdi5wcm90b3R5cGUuX3VuZGVzdHJveT1iLnVuZGVzdHJveSx2LnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHQpe3RoaXMuZW5kKCksdChlKX19KS5jYWxsKHRoaXMscigzKSxyKDMzKS5zZXRJbW1lZGlhdGUscig1KSl9LGZ1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSl7dmFyIG49dm9pZCAwIT09ZSYmZXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGZ8fHdpbmRvdyxpPUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtmdW5jdGlvbiBvKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9jbGVhckZuPXR9dC5zZXRUaW1lb3V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvKGkuY2FsbChzZXRUaW1lb3V0LG4sYXJndW1lbnRzKSxjbGVhclRpbWVvdXQpfSx0LnNldEludGVydmFsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvKGkuY2FsbChzZXRJbnRlcnZhbCxuLGFyZ3VtZW50cyksY2xlYXJJbnRlcnZhbCl9LHQuY2xlYXJUaW1lb3V0PXQuY2xlYXJJbnRlcnZhbD1mdW5jdGlvbihlKXtlJiZlLmNsb3NlKCl9LG8ucHJvdG90eXBlLnVucmVmPW8ucHJvdG90eXBlLnJlZj1mdW5jdGlvbigpe30sby5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9jbGVhckZuLmNhbGwobix0aGlzLl9pZCl9LHQuZW5yb2xsPWZ1bmN0aW9uKGUsdCl7Y2xlYXJUaW1lb3V0KGUuX2lkbGVUaW1lb3V0SWQpLGUuX2lkbGVUaW1lb3V0PXR9LHQudW5lbnJvbGw9ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KGUuX2lkbGVUaW1lb3V0SWQpLGUuX2lkbGVUaW1lb3V0PS0xfSx0Ll91bnJlZkFjdGl2ZT10LmFjdGl2ZT1mdW5jdGlvbihlKXtjbGVhclRpbWVvdXQoZS5faWRsZVRpbWVvdXRJZCk7dmFyIHQ9ZS5faWRsZVRpbWVvdXQ7dD49MCYmKGUuX2lkbGVUaW1lb3V0SWQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLl9vblRpbWVvdXQmJmUuX29uVGltZW91dCgpfSksdCkpfSxyKDEyMiksdC5zZXRJbW1lZGlhdGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYuc2V0SW1tZWRpYXRlfHx2b2lkIDAhPT1lJiZlLnNldEltbWVkaWF0ZXx8dGhpcyYmdGhpcy5zZXRJbW1lZGlhdGUsdC5jbGVhckltbWVkaWF0ZT1cInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5jbGVhckltbWVkaWF0ZXx8dm9pZCAwIT09ZSYmZS5jbGVhckltbWVkaWF0ZXx8dGhpcyYmdGhpcy5jbGVhckltbWVkaWF0ZX0pLmNhbGwodGhpcyxyKDUpKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDEzNyksbz1yKDE0NiksYT1yKDE0Nykscz1yKDE1Mik7ZnVuY3Rpb24gZihlKXtzLmNhbGwodGhpcyxcImRpZ2VzdFwiKSx0aGlzLl9oYXNoPWV9bihmLHMpLGYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5faGFzaC51cGRhdGUoZSl9LGYucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuXCJtZDVcIj09PShlPWUudG9Mb3dlckNhc2UoKSk/bmV3IGk6XCJybWQxNjBcIj09PWV8fFwicmlwZW1kMTYwXCI9PT1lP25ldyBvOm5ldyBmKGEoZSkpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTUpLmNvZGVzLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO2Z1bmN0aW9uIGkoKXt9ZS5leHBvcnRzPWZ1bmN0aW9uIGUodCxyLG8pe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpcmV0dXJuIGUodCxudWxsLHIpO3J8fChyPXt9KSxvPWZ1bmN0aW9uKGUpe3ZhciB0PSExO3JldHVybiBmdW5jdGlvbigpe2lmKCF0KXt0PSEwO2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7aSsrKW5baV09YXJndW1lbnRzW2ldO2UuYXBwbHkodGhpcyxuKX19fShvfHxpKTt2YXIgYT1yLnJlYWRhYmxlfHwhMSE9PXIucmVhZGFibGUmJnQucmVhZGFibGUscz1yLndyaXRhYmxlfHwhMSE9PXIud3JpdGFibGUmJnQud3JpdGFibGUsZj1mdW5jdGlvbigpe3Qud3JpdGFibGV8fGMoKX0sdT10Ll93cml0YWJsZVN0YXRlJiZ0Ll93cml0YWJsZVN0YXRlLmZpbmlzaGVkLGM9ZnVuY3Rpb24oKXtzPSExLHU9ITAsYXx8by5jYWxsKHQpfSxoPXQuX3JlYWRhYmxlU3RhdGUmJnQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxkPWZ1bmN0aW9uKCl7YT0hMSxoPSEwLHN8fG8uY2FsbCh0KX0sbD1mdW5jdGlvbihlKXtvLmNhbGwodCxlKX0scD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBhJiYhaD8odC5fcmVhZGFibGVTdGF0ZSYmdC5fcmVhZGFibGVTdGF0ZS5lbmRlZHx8KGU9bmV3IG4pLG8uY2FsbCh0LGUpKTpzJiYhdT8odC5fd3JpdGFibGVTdGF0ZSYmdC5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8KGU9bmV3IG4pLG8uY2FsbCh0LGUpKTp2b2lkIDB9LGI9ZnVuY3Rpb24oKXt0LnJlcS5vbihcImZpbmlzaFwiLGMpfTtyZXR1cm4hZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2V0SGVhZGVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmFib3J0fSh0KT9zJiYhdC5fd3JpdGFibGVTdGF0ZSYmKHQub24oXCJlbmRcIixmKSx0Lm9uKFwiY2xvc2VcIixmKSk6KHQub24oXCJjb21wbGV0ZVwiLGMpLHQub24oXCJhYm9ydFwiLHApLHQucmVxP2IoKTp0Lm9uKFwicmVxdWVzdFwiLGIpKSx0Lm9uKFwiZW5kXCIsZCksdC5vbihcImZpbmlzaFwiLGMpLCExIT09ci5lcnJvciYmdC5vbihcImVycm9yXCIsbCksdC5vbihcImNsb3NlXCIscCksZnVuY3Rpb24oKXt0LnJlbW92ZUxpc3RlbmVyKFwiY29tcGxldGVcIixjKSx0LnJlbW92ZUxpc3RlbmVyKFwiYWJvcnRcIixwKSx0LnJlbW92ZUxpc3RlbmVyKFwicmVxdWVzdFwiLGIpLHQucmVxJiZ0LnJlcS5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLGMpLHQucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixmKSx0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixmKSx0LnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsYyksdC5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLGQpLHQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGwpLHQucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLHApfX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10O24udmVyc2lvbj1yKDE1NCkudmVyc2lvbixuLnV0aWxzPXIoNiksbi5yYW5kPXIoNzMpLG4uY3VydmU9cig3NCksbi5jdXJ2ZXM9cigzNyksbi5lYz1yKDE2Niksbi5lZGRzYT1yKDE3MCl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpPXQsbz1yKDM4KSxhPXIoNzQpLHM9cig2KS5hc3NlcnQ7ZnVuY3Rpb24gZihlKXtcInNob3J0XCI9PT1lLnR5cGU/dGhpcy5jdXJ2ZT1uZXcgYS5zaG9ydChlKTpcImVkd2FyZHNcIj09PWUudHlwZT90aGlzLmN1cnZlPW5ldyBhLmVkd2FyZHMoZSk6dGhpcy5jdXJ2ZT1uZXcgYS5tb250KGUpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9ZS5oYXNoLHModGhpcy5nLnZhbGlkYXRlKCksXCJJbnZhbGlkIGN1cnZlXCIpLHModGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSxcIkludmFsaWQgY3VydmUsIEcqTiAhPSBPXCIpfWZ1bmN0aW9uIHUoZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgcj1uZXcgZih0KTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksZSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cn0pLHJ9fSl9aS5QcmVzZXRDdXJ2ZT1mLHUoXCJwMTkyXCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOlwicDE5MlwiLHA6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZlwiLGE6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmY1wiLGI6XCI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMVwiLG46XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMVwiLGhhc2g6by5zaGEyNTYsZ1JlZDohMSxnOltcIjE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGViIDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyXCIsXCIwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMVwiXX0pLHUoXCJwMjI0XCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOlwicDIyNFwiLHA6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMVwiLGE6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZVwiLGI6XCJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNFwiLG46XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZFwiLGhhc2g6by5zaGEyNTYsZ1JlZDohMSxnOltcImI3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxXCIsXCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNFwiXX0pLHUoXCJwMjU2XCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOm51bGwscDpcImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmXCIsYTpcImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjXCIsYjpcIjVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiXCIsbjpcImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxXCIsaGFzaDpvLnNoYTI1NixnUmVkOiExLGc6W1wiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUgZDg5OGMyOTZcIixcIjRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1XCJdfSksdShcInAzODRcIix7dHlwZTpcInNob3J0XCIscHJpbWU6bnVsbCxwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmZcIixhOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmNcIixiOlwiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWZcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzNcIixoYXNoOm8uc2hhMzg0LGdSZWQ6ITEsZzpbXCJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiN1wiLFwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWZcIl19KSx1KFwicDUyMVwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpudWxsLHA6XCIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZlwiLGE6XCIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmY1wiLGI6XCIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMFwiLG46XCIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOVwiLGhhc2g6by5zaGE1MTIsZ1JlZDohMSxnOltcIjAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2XCIsXCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MFwiXX0pLHUoXCJjdXJ2ZTI1NTE5XCIse3R5cGU6XCJtb250XCIscHJpbWU6XCJwMjU1MTlcIixwOlwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiLGE6XCI3NmQwNlwiLGI6XCIxXCIsbjpcIjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWRcIixoYXNoOm8uc2hhMjU2LGdSZWQ6ITEsZzpbXCI5XCJdfSksdShcImVkMjU1MTlcIix7dHlwZTpcImVkd2FyZHNcIixwcmltZTpcInAyNTUxOVwiLHA6XCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIsYTpcIi0xXCIsYzpcIjFcIixkOlwiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhM1wiLG46XCIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkXCIsaGFzaDpvLnNoYTI1NixnUmVkOiExLGc6W1wiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYVwiLFwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OFwiXX0pO3RyeXtuPXIoMTY1KX1jYXRjaChlKXtuPXZvaWQgMH11KFwic2VjcDI1NmsxXCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOlwiazI1NlwiLHA6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZlwiLGE6XCIwXCIsYjpcIjdcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDFcIixoOlwiMVwiLGhhc2g6by5zaGEyNTYsYmV0YTpcIjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWVcIixsYW1iZGE6XCI1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyXCIsYmFzaXM6W3thOlwiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTVcIixiOlwiLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzXCJ9LHthOlwiMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4XCIsYjpcIjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1XCJ9XSxnUmVkOiExLGc6W1wiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OFwiLFwiNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOFwiLG5dfSl9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10O24udXRpbHM9cig4KSxuLmNvbW1vbj1yKDIxKSxuLnNoYT1yKDE1OSksbi5yaXBlbWQ9cigxNjMpLG4uaG1hYz1yKDE2NCksbi5zaGExPW4uc2hhLnNoYTEsbi5zaGEyNTY9bi5zaGEuc2hhMjU2LG4uc2hhMjI0PW4uc2hhLnNoYTIyNCxuLnNoYTM4ND1uLnNoYS5zaGEzODQsbi5zaGE1MTI9bi5zaGEuc2hhNTEyLG4ucmlwZW1kMTYwPW4ucmlwZW1kLnJpcGVtZDE2MH0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49KGUsdCk9PmZ1bmN0aW9uKCl7Y29uc3Qgcj10LnByb21pc2VNb2R1bGUsbj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7Zm9yKGxldCBlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyluW2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gbmV3IHIoKHIsaSk9Pnt0LmVycm9yRmlyc3Q/bi5wdXNoKChmdW5jdGlvbihlLG4pe2lmKHQubXVsdGlBcmdzKXtjb25zdCB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2ZvcihsZXQgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlLTFdPWFyZ3VtZW50c1tlXTtlPyh0LnVuc2hpZnQoZSksaSh0KSk6cih0KX1lbHNlIGU/aShlKTpyKG4pfSkpOm4ucHVzaCgoZnVuY3Rpb24oZSl7aWYodC5tdWx0aUFyZ3Mpe2NvbnN0IGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7Zm9yKGxldCB0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtyKGUpfWVsc2UgcihlKX0pKSxlLmFwcGx5KHRoaXMsbil9KX07ZS5leHBvcnRzPShlLHQpPT57dD1PYmplY3QuYXNzaWduKHtleGNsdWRlOlsvLisoU3luY3xTdHJlYW0pJC9dLGVycm9yRmlyc3Q6ITAscHJvbWlzZU1vZHVsZTpQcm9taXNlfSx0KTtjb25zdCByPWU9Pntjb25zdCByPXQ9Plwic3RyaW5nXCI9PXR5cGVvZiB0P2U9PT10OnQudGVzdChlKTtyZXR1cm4gdC5pbmNsdWRlP3QuaW5jbHVkZS5zb21lKHIpOiF0LmV4Y2x1ZGUuc29tZShyKX07bGV0IGk7aT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZXhjbHVkZU1haW4/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bihlLHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX06T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpO2Zvcihjb25zdCBvIGluIGUpe2NvbnN0IGE9ZVtvXTtpW29dPVwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJnIobyk/bihhLHQpOmF9cmV0dXJuIGl9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgZT17fSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgaSBpbiBuKXIuY2FsbChuLGkpJiYoZVtpXT1uW2ldKX1yZXR1cm4gZX07dmFyIHI9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eX0sZnVuY3Rpb24oZSx0LHIpe2NvbnN0IG49cigxMCksaT1yKDkpO3ZhciBvPVwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxhPW8mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG8uYXBwbHk/by5hcHBseTpmdW5jdGlvbihlLHQscil7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGUsdCxyKX07ZnVuY3Rpb24gcygpe2kuY2FsbCh0aGlzKX1mdW5jdGlvbiBmKGUsdCxyKXt0cnl7YShlLHQscil9Y2F0Y2goZSl7c2V0VGltZW91dCgoKT0+e3Rocm93IGV9KX19ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj1uZXcgQXJyYXkodCksbj0wO248dDsrK24pcltuXT1lW25dO3JldHVybiByfWUuZXhwb3J0cz1zLG4uaW5oZXJpdHMocyxpKSxzLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0LnB1c2goYXJndW1lbnRzW3JdKTt2YXIgbj1cImVycm9yXCI9PT1lLGk9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PWkpbj1uJiZ2b2lkIDA9PT1pLmVycm9yO2Vsc2UgaWYoIW4pcmV0dXJuITE7aWYobil7dmFyIG87aWYodC5sZW5ndGg+MCYmKG89dFswXSksbyBpbnN0YW5jZW9mIEVycm9yKXRocm93IG87dmFyIGE9bmV3IEVycm9yKFwiVW5oYW5kbGVkIGVycm9yLlwiKyhvP1wiIChcIitvLm1lc3NhZ2UrXCIpXCI6XCJcIikpO3Rocm93IGEuY29udGV4dD1vLGF9dmFyIHM9aVtlXTtpZih2b2lkIDA9PT1zKXJldHVybiExO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHMpZihzLHRoaXMsdCk7ZWxzZXt2YXIgYz1zLmxlbmd0aCxoPXUocyxjKTtmb3Iocj0wO3I8YzsrK3IpZihoW3JdLHRoaXMsdCl9cmV0dXJuITB9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cig4MyksaT1yKDE4Miksbz1yKDE4MyksYT1uP24udG9TdHJpbmdUYWc6dm9pZCAwO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA9PT1lP1wiW29iamVjdCBVbmRlZmluZWRdXCI6XCJbb2JqZWN0IE51bGxdXCI6YSYmYSBpbiBPYmplY3QoZSk/aShlKTpvKGUpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihudWxsIT09ZSl7dmFyIHQ9ZTtlPW51bGwsdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihudWxsPT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJDYWxsYmFjayB3YXMgYWxyZWFkeSBjYWxsZWQuXCIpO3ZhciB0PWU7ZT1udWxsLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMjE0KSxpPXIoNDApO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaSh7aWQ6bigpLGpzb25ycGM6XCIyLjBcIixwYXJhbXM6W119LGUpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gciYmZSh0LnByb3RvdHlwZSxyKSxuJiZlKHQsbiksdH19KCk7dmFyIGk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLHQpO3ZhciByPWZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiF0fHxcIm9iamVjdFwiIT10eXBlb2YgdCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdD9lOnR9KHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwodGhpcykpO2lmKCFlKXRocm93IG5ldyBFcnJvcihcIkpzb25ScGNFbmdpbmVNaWRkbGV3YXJlU3VicHJvdmlkZXIgLSBubyBjb25zdHJ1Y3RvckZuIHNwZWNpZmllZFwiKTtyZXR1cm4gci5fY29uc3RydWN0b3JGbj1lLHJ9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9KHQsZSksbih0LFt7a2V5Olwic2V0RW5naW5lXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5taWRkbGV3YXJlKXRocm93IG5ldyBFcnJvcihcIkpzb25ScGNFbmdpbmVNaWRkbGV3YXJlU3VicHJvdmlkZXIgLSBzdWJwcm92aWRlciBhZGRlZCB0byBlbmdpbmUgdHdpY2VcIik7dmFyIHQ9ZS5fYmxvY2tUcmFja2VyLHI9dGhpcy5fY29uc3RydWN0b3JGbih7ZW5naW5lOmUscHJvdmlkZXI6ZSxibG9ja1RyYWNrZXI6dH0pO2lmKCFyKXRocm93IG5ldyBFcnJvcihcIkpzb25ScGNFbmdpbmVNaWRkbGV3YXJlU3VicHJvdmlkZXIgLSBfY29uc3RydWN0b3JGbiBkaWQgbm90IHJldHVybiBtaWRkbGV3YXJlXCIpO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHIpdGhyb3cgbmV3IEVycm9yKFwiSnNvblJwY0VuZ2luZU1pZGRsZXdhcmVTdWJwcm92aWRlciAtIHNwZWNpZmllZCBtaWRkbGV3YXJlIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO3RoaXMubWlkZGxld2FyZT1yfX0se2tleTpcImhhbmRsZVJlcXVlc3RcIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG49e2lkOmUuaWR9O3RoaXMubWlkZGxld2FyZShlLG4sKGZ1bmN0aW9uKGUpe3QoKGZ1bmN0aW9uKHQscixpKXt0PyhkZWxldGUgbi5yZXN1bHQsbi5lcnJvcj17bWVzc2FnZTp0Lm1lc3NhZ2V8fHR9KTpuLnJlc3VsdD1yLGU/ZShpKTppKCl9KSl9KSwoZnVuY3Rpb24oZSl7aWYoZSlyZXR1cm4gcihlKTtyKG51bGwsbi5yZXN1bHQpfSkpfX1dKSx0fShyKDI5KSk7ZS5leHBvcnRzPWl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybih0LHIsbixpKT0+e2xldCBvO2NvbnN0IGE9bmV3IFByb21pc2UoZT0+e289ZX0pO2xldCBzLGY7ZSh0LHIsYXN5bmMoKT0+e2Y9ITAsbihlPT57cz1lLG8oKX0pLGF3YWl0IGF9KS50aGVuKGFzeW5jKCk9PntmPyhhd2FpdCBhLHMobnVsbCkpOmkobnVsbCl9KS5jYXRjaChlPT57cz9zKGUpOmkoZSl9KX19fSxmdW5jdGlvbihlLHQscil7Y29uc3Qgbj1yKDQxKTtlLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnVwZGF0ZXM9W119YXN5bmMgaW5pdGlhbGl6ZSgpe31hc3luYyB1cGRhdGUoKXt0aHJvdyBuZXcgRXJyb3IoXCJCYXNlRmlsdGVyIC0gbm8gdXBkYXRlIG1ldGhvZCBzcGVjaWZpZWRcIil9YWRkUmVzdWx0cyhlKXt0aGlzLnVwZGF0ZXM9dGhpcy51cGRhdGVzLmNvbmNhdChlKSxlLmZvckVhY2goZT0+dGhpcy5lbWl0KFwidXBkYXRlXCIsZSkpfWFkZEluaXRpYWxSZXN1bHRzKGUpe31nZXRDaGFuZ2VzQW5kQ2xlYXIoKXtjb25zdCBlPXRoaXMudXBkYXRlcztyZXR1cm4gdGhpcy51cGRhdGVzPVtdLGV9fX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKGUpe3JldHVybiBudWxsPT1lP2U6TnVtYmVyLnBhcnNlSW50KGUsMTYpfWZ1bmN0aW9uIG4oZSl7aWYobnVsbD09ZSlyZXR1cm4gZTtyZXR1cm5cIjB4XCIrZS50b1N0cmluZygxNil9ZS5leHBvcnRzPWFzeW5jIGZ1bmN0aW9uKHtwcm92aWRlcjplLGZyb21CbG9jazp0LHRvQmxvY2s6aX0pe3R8fCh0PWkpO2NvbnN0IG89cih0KSxhPXIoaSkscz1BcnJheShhLW8rMSkuZmlsbCgpLm1hcCgoZSx0KT0+byt0KS5tYXAobik7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHMubWFwKHQ9PmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntlLnNlbmRBc3luYyh7aWQ6MSxqc29ucnBjOlwiMi4wXCIsbWV0aG9kOnQscGFyYW1zOnJ9LChlLHQpPT57aWYoZSlyZXR1cm4gaShlKTtuKHQucmVzdWx0KX0pfSl9KGUsXCJldGhfZ2V0QmxvY2tCeU51bWJlclwiLFt0LCExXSkpKX19LGZ1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9cigyNTcpfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQpe3ZhciBuPXIoNyksaT1yKDI2MCksbz17XCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwifTtmdW5jdGlvbiBhKGUsdCl7IW4uaXNVbmRlZmluZWQoZSkmJm4uaXNVbmRlZmluZWQoZVtcIkNvbnRlbnQtVHlwZVwiXSkmJihlW1wiQ29udGVudC1UeXBlXCJdPXQpfXZhciBzLGY9e2FkYXB0ZXI6KChcInVuZGVmaW5lZFwiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PXQpJiYocz1yKDk5KSkscyksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gaSh0LFwiQ29udGVudC1UeXBlXCIpLG4uaXNGb3JtRGF0YShlKXx8bi5pc0FycmF5QnVmZmVyKGUpfHxuLmlzQnVmZmVyKGUpfHxuLmlzU3RyZWFtKGUpfHxuLmlzRmlsZShlKXx8bi5pc0Jsb2IoZSk/ZTpuLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOm4uaXNVUkxTZWFyY2hQYXJhbXMoZSk/KGEodCxcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04XCIpLGUudG9TdHJpbmcoKSk6bi5pc09iamVjdChlKT8oYSh0LFwiYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04XCIpLEpTT04uc3RyaW5naWZ5KGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXRyeXtlPUpTT04ucGFyc2UoZSl9Y2F0Y2goZSl7fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOlwiWFNSRi1UT0tFTlwiLHhzcmZIZWFkZXJOYW1lOlwiWC1YU1JGLVRPS0VOXCIsbWF4Q29udGVudExlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH19O2YuaGVhZGVycz17Y29tbW9uOntBY2NlcHQ6XCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLypcIn19LG4uZm9yRWFjaChbXCJkZWxldGVcIixcImdldFwiLFwiaGVhZFwiXSwoZnVuY3Rpb24oZSl7Zi5oZWFkZXJzW2VdPXt9fSkpLG4uZm9yRWFjaChbXCJwb3N0XCIsXCJwdXRcIixcInBhdGNoXCJdLChmdW5jdGlvbihlKXtmLmhlYWRlcnNbZV09bi5tZXJnZShvKX0pKSxlLmV4cG9ydHM9Zn0pLmNhbGwodGhpcyxyKDMpKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e2Rpc3BhdGNoTm9kZVVSTDpcImh0dHBzOi8vZGlzcGF0Y2gucG9rdC5uZXR3b3JrXCIsZGlzcGF0Y2hQYXRoOlwiL3YxL2Rpc3BhdGNoXCIscmVwb3J0UGF0aDpcIi92MS9yZXBvcnRcIixyZWxheVBhdGg6XCIvdjEvcmVsYXkvXCJ9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0NyksaT1yKDIxNSksbz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsdCksZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIXR8fFwib2JqZWN0XCIhPXR5cGVvZiB0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0P2U6dH0odGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLChmdW5jdGlvbih0KXt2YXIgcj10LmJsb2NrVHJhY2tlcjtyZXR1cm4gaShPYmplY3QuYXNzaWduKHtibG9ja1RyYWNrZXI6cn0sZSkpfSkpKX1yZXR1cm4gZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0odCxlKSx0fShuKTtlLmV4cG9ydHM9b30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbih0KXt2YXIgbj1yKDEwKS5pbmhlcml0cyxpPXIoMjUyKSxvPXIoMTQpLGE9cigyOSkscz1yKDkyKS5ibG9ja1RhZ0ZvclBheWxvYWQ7ZnVuY3Rpb24gZihlKXt0aGlzLm5vbmNlQ2FjaGU9e319ZS5leHBvcnRzPWYsbihmLGEpLGYucHJvdG90eXBlLmhhbmRsZVJlcXVlc3Q9ZnVuY3Rpb24oZSxyLG4pe3ZhciBhPXRoaXM7c3dpdGNoKGUubWV0aG9kKXtjYXNlXCJldGhfZ2V0VHJhbnNhY3Rpb25Db3VudFwiOnZhciBmPXMoZSksdT1lLnBhcmFtc1swXS50b0xvd2VyQ2FzZSgpLGM9YS5ub25jZUNhY2hlW3VdO3JldHVybiB2b2lkKFwicGVuZGluZ1wiPT09Zj9jP24obnVsbCxjKTpyKChmdW5jdGlvbihlLHQscil7aWYoZSlyZXR1cm4gcigpO3ZvaWQgMD09PWEubm9uY2VDYWNoZVt1XSYmKGEubm9uY2VDYWNoZVt1XT10KSxyKCl9KSk6cigpKTtjYXNlXCJldGhfc2VuZFJhd1RyYW5zYWN0aW9uXCI6cmV0dXJuIHZvaWQgcigoZnVuY3Rpb24ocixuLHMpe2lmKHIpcmV0dXJuIHMoKTt2YXIgZj1lLnBhcmFtc1swXSx1PShvLnN0cmlwSGV4UHJlZml4KGYpLHQuZnJvbShvLnN0cmlwSGV4UHJlZml4KGYpLFwiaGV4XCIpLG5ldyBpKHQuZnJvbShvLnN0cmlwSGV4UHJlZml4KGYpLFwiaGV4XCIpKSksYz1cIjB4XCIrdS5nZXRTZW5kZXJBZGRyZXNzKCkudG9TdHJpbmcoXCJoZXhcIikudG9Mb3dlckNhc2UoKSxoPW8uYnVmZmVyVG9JbnQodS5ub25jZSksZD0oKytoKS50b1N0cmluZygxNik7ZC5sZW5ndGglMiYmKGQ9XCIwXCIrZCksZD1cIjB4XCIrZCxhLm5vbmNlQ2FjaGVbY109ZCxzKCl9KSk7Y2FzZVwiZXZtX3JldmVydFwiOnJldHVybiBhLm5vbmNlQ2FjaGU9e30sdm9pZCByKCk7ZGVmYXVsdDpyZXR1cm4gdm9pZCByKCl9fX0pLmNhbGwodGhpcyxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKGUsdCxyKXtjb25zdCBuPXIoOTcpLGk9bi5XYWxsZXQsbz1uLlJlbGF5LGE9cigyNzcpO2UuZXhwb3J0cz17UG9ja2V0OmEsV2FsbGV0OmksUmVsYXk6b319LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24odCxuKXt2YXIgaT1yKDI0KTtlLmV4cG9ydHM9bTt2YXIgbyxhPXIoMTE4KTttLlJlYWRhYmxlU3RhdGU9djtyKDkpLkV2ZW50RW1pdHRlcjt2YXIgcz1mdW5jdGlvbihlLHQpe3JldHVybiBlLmxpc3RlbmVycyh0KS5sZW5ndGh9LGY9cig1OCksdT1yKDMxKS5CdWZmZXIsYz10LlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fTt2YXIgaD1PYmplY3QuY3JlYXRlKHIoMTkpKTtoLmluaGVyaXRzPXIoMCk7dmFyIGQ9cigxMTkpLGw9dm9pZCAwO2w9ZCYmZC5kZWJ1Z2xvZz9kLmRlYnVnbG9nKFwic3RyZWFtXCIpOmZ1bmN0aW9uKCl7fTt2YXIgcCxiPXIoMTIwKSx5PXIoNTkpO2guaW5oZXJpdHMobSxmKTt2YXIgZz1bXCJlcnJvclwiLFwiY2xvc2VcIixcImRlc3Ryb3lcIixcInBhdXNlXCIsXCJyZXN1bWVcIl07ZnVuY3Rpb24gdihlLHQpe2U9ZXx8e307dmFyIG49dCBpbnN0YW5jZW9mKG89b3x8cigxMSkpO3RoaXMub2JqZWN0TW9kZT0hIWUub2JqZWN0TW9kZSxuJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFlLnJlYWRhYmxlT2JqZWN0TW9kZSk7dmFyIGk9ZS5oaWdoV2F0ZXJNYXJrLGE9ZS5yZWFkYWJsZUhpZ2hXYXRlck1hcmsscz10aGlzLm9iamVjdE1vZGU/MTY6MTYzODQ7dGhpcy5oaWdoV2F0ZXJNYXJrPWl8fDA9PT1pP2k6biYmKGF8fDA9PT1hKT9hOnMsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmJ1ZmZlcj1uZXcgYix0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9ZS5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLGUuZW5jb2RpbmcmJihwfHwocD1yKDIwKS5TdHJpbmdEZWNvZGVyKSx0aGlzLmRlY29kZXI9bmV3IHAoZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1lLmVuY29kaW5nKX1mdW5jdGlvbiBtKGUpe2lmKG89b3x8cigxMSksISh0aGlzIGluc3RhbmNlb2YgbSkpcmV0dXJuIG5ldyBtKGUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IHYoZSx0aGlzKSx0aGlzLnJlYWRhYmxlPSEwLGUmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnJlYWQmJih0aGlzLl9yZWFkPWUucmVhZCksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1lLmRlc3Ryb3kpKSxmLmNhbGwodGhpcyl9ZnVuY3Rpb24gdyhlLHQscixuLGkpe3ZhciBvLGE9ZS5fcmVhZGFibGVTdGF0ZTtudWxsPT09dD8oYS5yZWFkaW5nPSExLGZ1bmN0aW9uKGUsdCl7aWYodC5lbmRlZClyZXR1cm47aWYodC5kZWNvZGVyKXt2YXIgcj10LmRlY29kZXIuZW5kKCk7ciYmci5sZW5ndGgmJih0LmJ1ZmZlci5wdXNoKHIpLHQubGVuZ3RoKz10Lm9iamVjdE1vZGU/MTpyLmxlbmd0aCl9dC5lbmRlZD0hMCxTKGUpfShlLGEpKTooaXx8KG89ZnVuY3Rpb24oZSx0KXt2YXIgcjtuPXQsdS5pc0J1ZmZlcihuKXx8biBpbnN0YW5jZW9mIGN8fFwic3RyaW5nXCI9PXR5cGVvZiB0fHx2b2lkIDA9PT10fHxlLm9iamVjdE1vZGV8fChyPW5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rXCIpKTt2YXIgbjtyZXR1cm4gcn0oYSx0KSksbz9lLmVtaXQoXCJlcnJvclwiLG8pOmEub2JqZWN0TW9kZXx8dCYmdC5sZW5ndGg+MD8oXCJzdHJpbmdcIj09dHlwZW9mIHR8fGEub2JqZWN0TW9kZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09dS5wcm90b3R5cGV8fCh0PWZ1bmN0aW9uKGUpe3JldHVybiB1LmZyb20oZSl9KHQpKSxuP2EuZW5kRW1pdHRlZD9lLmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50XCIpKTpfKGUsYSx0LCEwKTphLmVuZGVkP2UuZW1pdChcImVycm9yXCIsbmV3IEVycm9yKFwic3RyZWFtLnB1c2goKSBhZnRlciBFT0ZcIikpOihhLnJlYWRpbmc9ITEsYS5kZWNvZGVyJiYhcj8odD1hLmRlY29kZXIud3JpdGUodCksYS5vYmplY3RNb2RlfHwwIT09dC5sZW5ndGg/XyhlLGEsdCwhMSk6eChlLGEpKTpfKGUsYSx0LCExKSkpOm58fChhLnJlYWRpbmc9ITEpKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIWUuZW5kZWQmJihlLm5lZWRSZWFkYWJsZXx8ZS5sZW5ndGg8ZS5oaWdoV2F0ZXJNYXJrfHwwPT09ZS5sZW5ndGgpfShhKX1mdW5jdGlvbiBfKGUsdCxyLG4pe3QuZmxvd2luZyYmMD09PXQubGVuZ3RoJiYhdC5zeW5jPyhlLmVtaXQoXCJkYXRhXCIsciksZS5yZWFkKDApKToodC5sZW5ndGgrPXQub2JqZWN0TW9kZT8xOnIubGVuZ3RoLG4/dC5idWZmZXIudW5zaGlmdChyKTp0LmJ1ZmZlci5wdXNoKHIpLHQubmVlZFJlYWRhYmxlJiZTKGUpKSx4KGUsdCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KG0ucHJvdG90eXBlLFwiZGVzdHJveWVkXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1lKX19KSxtLnByb3RvdHlwZS5kZXN0cm95PXkuZGVzdHJveSxtLnByb3RvdHlwZS5fdW5kZXN0cm95PXkudW5kZXN0cm95LG0ucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGUsdCl7dGhpcy5wdXNoKG51bGwpLHQoZSl9LG0ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIG4ub2JqZWN0TW9kZT9yPSEwOlwic3RyaW5nXCI9PXR5cGVvZiBlJiYoKHQ9dHx8bi5kZWZhdWx0RW5jb2RpbmcpIT09bi5lbmNvZGluZyYmKGU9dS5mcm9tKGUsdCksdD1cIlwiKSxyPSEwKSx3KHRoaXMsZSx0LCExLHIpfSxtLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKGUpe3JldHVybiB3KHRoaXMsZSxudWxsLCEwLCExKX0sbS5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sbS5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHB8fChwPXIoMjApLlN0cmluZ0RlY29kZXIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1uZXcgcChlKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPWUsdGhpc307ZnVuY3Rpb24gRShlLHQpe3JldHVybiBlPD0wfHwwPT09dC5sZW5ndGgmJnQuZW5kZWQ/MDp0Lm9iamVjdE1vZGU/MTplIT1lP3QuZmxvd2luZyYmdC5sZW5ndGg/dC5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDp0Lmxlbmd0aDooZT50LmhpZ2hXYXRlck1hcmsmJih0LmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTgzODg2MDg/ZT04Mzg4NjA4OihlLS0sZXw9ZT4+PjEsZXw9ZT4+PjIsZXw9ZT4+PjQsZXw9ZT4+PjgsZXw9ZT4+PjE2LGUrKyksZX0oZSkpLGU8PXQubGVuZ3RoP2U6dC5lbmRlZD90Lmxlbmd0aDoodC5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIFMoZSl7dmFyIHQ9ZS5fcmVhZGFibGVTdGF0ZTt0Lm5lZWRSZWFkYWJsZT0hMSx0LmVtaXR0ZWRSZWFkYWJsZXx8KGwoXCJlbWl0UmVhZGFibGVcIix0LmZsb3dpbmcpLHQuZW1pdHRlZFJlYWRhYmxlPSEwLHQuc3luYz9pLm5leHRUaWNrKEEsZSk6QShlKSl9ZnVuY3Rpb24gQShlKXtsKFwiZW1pdCByZWFkYWJsZVwiKSxlLmVtaXQoXCJyZWFkYWJsZVwiKSxJKGUpfWZ1bmN0aW9uIHgoZSx0KXt0LnJlYWRpbmdNb3JlfHwodC5yZWFkaW5nTW9yZT0hMCxpLm5leHRUaWNrKGssZSx0KSl9ZnVuY3Rpb24gayhlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aDshdC5yZWFkaW5nJiYhdC5mbG93aW5nJiYhdC5lbmRlZCYmdC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrJiYobChcIm1heWJlUmVhZE1vcmUgcmVhZCAwXCIpLGUucmVhZCgwKSxyIT09dC5sZW5ndGgpOylyPXQubGVuZ3RoO3QucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gTShlKXtsKFwicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwXCIpLGUucmVhZCgwKX1mdW5jdGlvbiBUKGUsdCl7dC5yZWFkaW5nfHwobChcInJlc3VtZSByZWFkIDBcIiksZS5yZWFkKDApKSx0LnJlc3VtZVNjaGVkdWxlZD0hMSx0LmF3YWl0RHJhaW49MCxlLmVtaXQoXCJyZXN1bWVcIiksSShlKSx0LmZsb3dpbmcmJiF0LnJlYWRpbmcmJmUucmVhZCgwKX1mdW5jdGlvbiBJKGUpe3ZhciB0PWUuX3JlYWRhYmxlU3RhdGU7Zm9yKGwoXCJmbG93XCIsdC5mbG93aW5nKTt0LmZsb3dpbmcmJm51bGwhPT1lLnJlYWQoKTspO31mdW5jdGlvbiBSKGUsdCl7cmV0dXJuIDA9PT10Lmxlbmd0aD9udWxsOih0Lm9iamVjdE1vZGU/cj10LmJ1ZmZlci5zaGlmdCgpOiFlfHxlPj10Lmxlbmd0aD8ocj10LmRlY29kZXI/dC5idWZmZXIuam9pbihcIlwiKToxPT09dC5idWZmZXIubGVuZ3RoP3QuYnVmZmVyLmhlYWQuZGF0YTp0LmJ1ZmZlci5jb25jYXQodC5sZW5ndGgpLHQuYnVmZmVyLmNsZWFyKCkpOnI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuO2U8dC5oZWFkLmRhdGEubGVuZ3RoPyhuPXQuaGVhZC5kYXRhLnNsaWNlKDAsZSksdC5oZWFkLmRhdGE9dC5oZWFkLmRhdGEuc2xpY2UoZSkpOm49ZT09PXQuaGVhZC5kYXRhLmxlbmd0aD90LnNoaWZ0KCk6cj9mdW5jdGlvbihlLHQpe3ZhciByPXQuaGVhZCxuPTEsaT1yLmRhdGE7ZS09aS5sZW5ndGg7Zm9yKDtyPXIubmV4dDspe3ZhciBvPXIuZGF0YSxhPWU+by5sZW5ndGg/by5sZW5ndGg6ZTtpZihhPT09by5sZW5ndGg/aSs9bzppKz1vLnNsaWNlKDAsZSksMD09PShlLT1hKSl7YT09PW8ubGVuZ3RoPygrK24sci5uZXh0P3QuaGVhZD1yLm5leHQ6dC5oZWFkPXQudGFpbD1udWxsKToodC5oZWFkPXIsci5kYXRhPW8uc2xpY2UoYSkpO2JyZWFrfSsrbn1yZXR1cm4gdC5sZW5ndGgtPW4saX0oZSx0KTpmdW5jdGlvbihlLHQpe3ZhciByPXUuYWxsb2NVbnNhZmUoZSksbj10LmhlYWQsaT0xO24uZGF0YS5jb3B5KHIpLGUtPW4uZGF0YS5sZW5ndGg7Zm9yKDtuPW4ubmV4dDspe3ZhciBvPW4uZGF0YSxhPWU+by5sZW5ndGg/by5sZW5ndGg6ZTtpZihvLmNvcHkocixyLmxlbmd0aC1lLDAsYSksMD09PShlLT1hKSl7YT09PW8ubGVuZ3RoPygrK2ksbi5uZXh0P3QuaGVhZD1uLm5leHQ6dC5oZWFkPXQudGFpbD1udWxsKToodC5oZWFkPW4sbi5kYXRhPW8uc2xpY2UoYSkpO2JyZWFrfSsraX1yZXR1cm4gdC5sZW5ndGgtPWkscn0oZSx0KTtyZXR1cm4gbn0oZSx0LmJ1ZmZlcix0LmRlY29kZXIpLHIpO3ZhciByfWZ1bmN0aW9uIFAoZSl7dmFyIHQ9ZS5fcmVhZGFibGVTdGF0ZTtpZih0Lmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcignXCJlbmRSZWFkYWJsZSgpXCIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTt0LmVuZEVtaXR0ZWR8fCh0LmVuZGVkPSEwLGkubmV4dFRpY2soTCx0LGUpKX1mdW5jdGlvbiBMKGUsdCl7ZS5lbmRFbWl0dGVkfHwwIT09ZS5sZW5ndGh8fChlLmVuZEVtaXR0ZWQ9ITAsdC5yZWFkYWJsZT0hMSx0LmVtaXQoXCJlbmRcIikpfWZ1bmN0aW9uIEIoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspaWYoZVtyXT09PXQpcmV0dXJuIHI7cmV0dXJuLTF9bS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihlKXtsKFwicmVhZFwiLGUpLGU9cGFyc2VJbnQoZSwxMCk7dmFyIHQ9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPWU7aWYoMCE9PWUmJih0LmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PWUmJnQubmVlZFJlYWRhYmxlJiYodC5sZW5ndGg+PXQuaGlnaFdhdGVyTWFya3x8dC5lbmRlZCkpcmV0dXJuIGwoXCJyZWFkOiBlbWl0UmVhZGFibGVcIix0Lmxlbmd0aCx0LmVuZGVkKSwwPT09dC5sZW5ndGgmJnQuZW5kZWQ/UCh0aGlzKTpTKHRoaXMpLG51bGw7aWYoMD09PShlPUUoZSx0KSkmJnQuZW5kZWQpcmV0dXJuIDA9PT10Lmxlbmd0aCYmUCh0aGlzKSxudWxsO3ZhciBuLGk9dC5uZWVkUmVhZGFibGU7cmV0dXJuIGwoXCJuZWVkIHJlYWRhYmxlXCIsaSksKDA9PT10Lmxlbmd0aHx8dC5sZW5ndGgtZTx0LmhpZ2hXYXRlck1hcmspJiZsKFwibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmtcIixpPSEwKSx0LmVuZGVkfHx0LnJlYWRpbmc/bChcInJlYWRpbmcgb3IgZW5kZWRcIixpPSExKTppJiYobChcImRvIHJlYWRcIiksdC5yZWFkaW5nPSEwLHQuc3luYz0hMCwwPT09dC5sZW5ndGgmJih0Lm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZCh0LmhpZ2hXYXRlck1hcmspLHQuc3luYz0hMSx0LnJlYWRpbmd8fChlPUUocix0KSkpLG51bGw9PT0obj1lPjA/UihlLHQpOm51bGwpPyh0Lm5lZWRSZWFkYWJsZT0hMCxlPTApOnQubGVuZ3RoLT1lLDA9PT10Lmxlbmd0aCYmKHQuZW5kZWR8fCh0Lm5lZWRSZWFkYWJsZT0hMCksciE9PWUmJnQuZW5kZWQmJlAodGhpcykpLG51bGwhPT1uJiZ0aGlzLmVtaXQoXCJkYXRhXCIsbiksbn0sbS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oZSl7dGhpcy5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJfcmVhZCgpIGlzIG5vdCBpbXBsZW1lbnRlZFwiKSl9LG0ucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLG89dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goby5waXBlc0NvdW50KXtjYXNlIDA6by5waXBlcz1lO2JyZWFrO2Nhc2UgMTpvLnBpcGVzPVtvLnBpcGVzLGVdO2JyZWFrO2RlZmF1bHQ6by5waXBlcy5wdXNoKGUpfW8ucGlwZXNDb3VudCs9MSxsKFwicGlwZSBjb3VudD0lZCBvcHRzPSVqXCIsby5waXBlc0NvdW50LHQpO3ZhciBmPSghdHx8ITEhPT10LmVuZCkmJmUhPT1uLnN0ZG91dCYmZSE9PW4uc3RkZXJyP2M6bTtmdW5jdGlvbiB1KHQsbil7bChcIm9udW5waXBlXCIpLHQ9PT1yJiZuJiYhMT09PW4uaGFzVW5waXBlZCYmKG4uaGFzVW5waXBlZD0hMCxsKFwiY2xlYW51cFwiKSxlLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixnKSxlLnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsdiksZS5yZW1vdmVMaXN0ZW5lcihcImRyYWluXCIsaCksZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIseSksZS5yZW1vdmVMaXN0ZW5lcihcInVucGlwZVwiLHUpLHIucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixjKSxyLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsbSksci5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIixiKSxkPSEwLCFvLmF3YWl0RHJhaW58fGUuX3dyaXRhYmxlU3RhdGUmJiFlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbnx8aCgpKX1mdW5jdGlvbiBjKCl7bChcIm9uZW5kXCIpLGUuZW5kKCl9by5lbmRFbWl0dGVkP2kubmV4dFRpY2soZik6ci5vbmNlKFwiZW5kXCIsZiksZS5vbihcInVucGlwZVwiLHUpO3ZhciBoPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuX3JlYWRhYmxlU3RhdGU7bChcInBpcGVPbkRyYWluXCIsdC5hd2FpdERyYWluKSx0LmF3YWl0RHJhaW4mJnQuYXdhaXREcmFpbi0tLDA9PT10LmF3YWl0RHJhaW4mJnMoZSxcImRhdGFcIikmJih0LmZsb3dpbmc9ITAsSShlKSl9fShyKTtlLm9uKFwiZHJhaW5cIixoKTt2YXIgZD0hMTt2YXIgcD0hMTtmdW5jdGlvbiBiKHQpe2woXCJvbmRhdGFcIikscD0hMSwhMSE9PWUud3JpdGUodCl8fHB8fCgoMT09PW8ucGlwZXNDb3VudCYmby5waXBlcz09PWV8fG8ucGlwZXNDb3VudD4xJiYtMSE9PUIoby5waXBlcyxlKSkmJiFkJiYobChcImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZVwiLHIuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbiksci5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKysscD0hMCksci5wYXVzZSgpKX1mdW5jdGlvbiB5KHQpe2woXCJvbmVycm9yXCIsdCksbSgpLGUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLHkpLDA9PT1zKGUsXCJlcnJvclwiKSYmZS5lbWl0KFwiZXJyb3JcIix0KX1mdW5jdGlvbiBnKCl7ZS5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLHYpLG0oKX1mdW5jdGlvbiB2KCl7bChcIm9uZmluaXNoXCIpLGUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLGcpLG0oKX1mdW5jdGlvbiBtKCl7bChcInVucGlwZVwiKSxyLnVucGlwZShlKX1yZXR1cm4gci5vbihcImRhdGFcIixiKSxmdW5jdGlvbihlLHQscil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIGUucHJlcGVuZExpc3RlbmVyKHQscik7ZS5fZXZlbnRzJiZlLl9ldmVudHNbdF0/YShlLl9ldmVudHNbdF0pP2UuX2V2ZW50c1t0XS51bnNoaWZ0KHIpOmUuX2V2ZW50c1t0XT1bcixlLl9ldmVudHNbdF1dOmUub24odCxyKX0oZSxcImVycm9yXCIseSksZS5vbmNlKFwiY2xvc2VcIixnKSxlLm9uY2UoXCJmaW5pc2hcIix2KSxlLmVtaXQoXCJwaXBlXCIsciksby5mbG93aW5nfHwobChcInBpcGUgcmVzdW1lXCIpLHIucmVzdW1lKCkpLGV9LG0ucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZWFkYWJsZVN0YXRlLHI9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT10LnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PXQucGlwZXNDb3VudClyZXR1cm4gZSYmZSE9PXQucGlwZXN8fChlfHwoZT10LnBpcGVzKSx0LnBpcGVzPW51bGwsdC5waXBlc0NvdW50PTAsdC5mbG93aW5nPSExLGUmJmUuZW1pdChcInVucGlwZVwiLHRoaXMscikpLHRoaXM7aWYoIWUpe3ZhciBuPXQucGlwZXMsaT10LnBpcGVzQ291bnQ7dC5waXBlcz1udWxsLHQucGlwZXNDb3VudD0wLHQuZmxvd2luZz0hMTtmb3IodmFyIG89MDtvPGk7bysrKW5bb10uZW1pdChcInVucGlwZVwiLHRoaXMscik7cmV0dXJuIHRoaXN9dmFyIGE9Qih0LnBpcGVzLGUpO3JldHVybi0xPT09YXx8KHQucGlwZXMuc3BsaWNlKGEsMSksdC5waXBlc0NvdW50LT0xLDE9PT10LnBpcGVzQ291bnQmJih0LnBpcGVzPXQucGlwZXNbMF0pLGUuZW1pdChcInVucGlwZVwiLHRoaXMscikpLHRoaXN9LG0ucHJvdG90eXBlLm9uPWZ1bmN0aW9uKGUsdCl7dmFyIHI9Zi5wcm90b3R5cGUub24uY2FsbCh0aGlzLGUsdCk7aWYoXCJkYXRhXCI9PT1lKSExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpO2Vsc2UgaWYoXCJyZWFkYWJsZVwiPT09ZSl7dmFyIG49dGhpcy5fcmVhZGFibGVTdGF0ZTtuLmVuZEVtaXR0ZWR8fG4ucmVhZGFibGVMaXN0ZW5pbmd8fChuLnJlYWRhYmxlTGlzdGVuaW5nPW4ubmVlZFJlYWRhYmxlPSEwLG4uZW1pdHRlZFJlYWRhYmxlPSExLG4ucmVhZGluZz9uLmxlbmd0aCYmUyh0aGlzKTppLm5leHRUaWNrKE0sdGhpcykpfXJldHVybiByfSxtLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1tLnByb3RvdHlwZS5vbixtLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBlLmZsb3dpbmd8fChsKFwicmVzdW1lXCIpLGUuZmxvd2luZz0hMCxmdW5jdGlvbihlLHQpe3QucmVzdW1lU2NoZWR1bGVkfHwodC5yZXN1bWVTY2hlZHVsZWQ9ITAsaS5uZXh0VGljayhULGUsdCkpfSh0aGlzLGUpKSx0aGlzfSxtLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBsKFwiY2FsbCBwYXVzZSBmbG93aW5nPSVqXCIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKGwoXCJwYXVzZVwiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KFwicGF1c2VcIikpLHRoaXN9LG0ucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMuX3JlYWRhYmxlU3RhdGUsbj0hMTtmb3IodmFyIGkgaW4gZS5vbihcImVuZFwiLChmdW5jdGlvbigpe2lmKGwoXCJ3cmFwcGVkIGVuZFwiKSxyLmRlY29kZXImJiFyLmVuZGVkKXt2YXIgZT1yLmRlY29kZXIuZW5kKCk7ZSYmZS5sZW5ndGgmJnQucHVzaChlKX10LnB1c2gobnVsbCl9KSksZS5vbihcImRhdGFcIiwoZnVuY3Rpb24oaSl7KGwoXCJ3cmFwcGVkIGRhdGFcIiksci5kZWNvZGVyJiYoaT1yLmRlY29kZXIud3JpdGUoaSkpLHIub2JqZWN0TW9kZSYmbnVsbD09aSl8fChyLm9iamVjdE1vZGV8fGkmJmkubGVuZ3RoKSYmKHQucHVzaChpKXx8KG49ITAsZS5wYXVzZSgpKSl9KSksZSl2b2lkIDA9PT10aGlzW2ldJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlW2ldJiYodGhpc1tpXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZVt0XS5hcHBseShlLGFyZ3VtZW50cyl9fShpKSk7Zm9yKHZhciBvPTA7bzxnLmxlbmd0aDtvKyspZS5vbihnW29dLHRoaXMuZW1pdC5iaW5kKHRoaXMsZ1tvXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKHQpe2woXCJ3cmFwcGVkIF9yZWFkXCIsdCksbiYmKG49ITEsZS5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLnByb3RvdHlwZSxcInJlYWRhYmxlSGlnaFdhdGVyTWFya1wiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksbS5fZnJvbUxpc3Q9Un0pLmNhbGwodGhpcyxyKDUpLHIoMykpfSxmdW5jdGlvbihlLHQscil7ZS5leHBvcnRzPXIoOSkuRXZlbnRFbWl0dGVyfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigyNCk7ZnVuY3Rpb24gaShlLHQpe2UuZW1pdChcImVycm9yXCIsdCl9ZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcyxvPXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkLGE9dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7cmV0dXJuIG98fGE/KHQ/dChlKTohZXx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fG4ubmV4dFRpY2soaSx0aGlzLGUpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveShlfHxudWxsLChmdW5jdGlvbihlKXshdCYmZT8obi5uZXh0VGljayhpLHIsZSksci5fd3JpdGFibGVTdGF0ZSYmKHIuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwKSk6dCYmdChlKX0pKSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9fX0sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKGUpe3RyeXtpZighdC5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2goZSl7cmV0dXJuITF9dmFyIHI9dC5sb2NhbFN0b3JhZ2VbZV07cmV0dXJuIG51bGwhPXImJlwidHJ1ZVwiPT09U3RyaW5nKHIpLnRvTG93ZXJDYXNlKCl9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYocihcIm5vRGVwcmVjYXRpb25cIikpcmV0dXJuIGU7dmFyIG49ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIW4pe2lmKHIoXCJ0aHJvd0RlcHJlY2F0aW9uXCIpKXRocm93IG5ldyBFcnJvcih0KTtyKFwidHJhY2VEZXByZWNhdGlvblwiKT9jb25zb2xlLnRyYWNlKHQpOmNvbnNvbGUud2Fybih0KSxuPSEwfXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSkuY2FsbCh0aGlzLHIoNSkpfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWE7dmFyIG49cigxMSksaT1PYmplY3QuY3JlYXRlKHIoMTkpKTtmdW5jdGlvbiBvKGUsdCl7dmFyIHI9dGhpcy5fdHJhbnNmb3JtU3RhdGU7ci50cmFuc2Zvcm1pbmc9ITE7dmFyIG49ci53cml0ZWNiO2lmKCFuKXJldHVybiB0aGlzLmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcIndyaXRlIGNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lc1wiKSk7ci53cml0ZWNodW5rPW51bGwsci53cml0ZWNiPW51bGwsbnVsbCE9dCYmdGhpcy5wdXNoKHQpLG4oZSk7dmFyIGk9dGhpcy5fcmVhZGFibGVTdGF0ZTtpLnJlYWRpbmc9ITEsKGkubmVlZFJlYWRhYmxlfHxpLmxlbmd0aDxpLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKGkuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gYShlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBhKSlyZXR1cm4gbmV3IGEoZSk7bi5jYWxsKHRoaXMsZSksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOm8uYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLGUmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1lLnRyYW5zZm9ybSksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5mbHVzaCYmKHRoaXMuX2ZsdXNoPWUuZmx1c2gpKSx0aGlzLm9uKFwicHJlZmluaXNoXCIscyl9ZnVuY3Rpb24gcygpe3ZhciBlPXRoaXM7XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5fZmx1c2g/dGhpcy5fZmx1c2goKGZ1bmN0aW9uKHQscil7ZihlLHQscil9KSk6Zih0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gZihlLHQscil7aWYodClyZXR1cm4gZS5lbWl0KFwiZXJyb3JcIix0KTtpZihudWxsIT1yJiZlLnB1c2gociksZS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwXCIpO2lmKGUuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgRXJyb3IoXCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nXCIpO3JldHVybiBlLnB1c2gobnVsbCl9aS5pbmhlcml0cz1yKDApLGkuaW5oZXJpdHMoYSxuKSxhLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsbi5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sYS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihlLHQscil7dGhyb3cgbmV3IEVycm9yKFwiX3RyYW5zZm9ybSgpIGlzIG5vdCBpbXBsZW1lbnRlZFwiKX0sYS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihuLndyaXRlY2I9cixuLndyaXRlY2h1bms9ZSxuLndyaXRlZW5jb2Rpbmc9dCwhbi50cmFuc2Zvcm1pbmcpe3ZhciBpPXRoaXMuX3JlYWRhYmxlU3RhdGU7KG4ubmVlZFRyYW5zZm9ybXx8aS5uZWVkUmVhZGFibGV8fGkubGVuZ3RoPGkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaS5oaWdoV2F0ZXJNYXJrKX19LGEucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGwhPT10LndyaXRlY2h1bmsmJnQud3JpdGVjYiYmIXQudHJhbnNmb3JtaW5nPyh0LnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0odC53cml0ZWNodW5rLHQud3JpdGVlbmNvZGluZyx0LmFmdGVyVHJhbnNmb3JtKSk6dC5uZWVkVHJhbnNmb3JtPSEwfSxhLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7bi5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLGUsKGZ1bmN0aW9uKGUpe3QoZSksci5lbWl0KFwiY2xvc2VcIil9KSl9fSxmdW5jdGlvbihlKXtlLmV4cG9ydHM9e0NPTVBSRVNTRURfVFlQRV9JTlZBTElEOlwiY29tcHJlc3NlZCBzaG91bGQgYmUgYSBib29sZWFuXCIsRUNfUFJJVkFURV9LRVlfVFlQRV9JTlZBTElEOlwicHJpdmF0ZSBrZXkgc2hvdWxkIGJlIGEgQnVmZmVyXCIsRUNfUFJJVkFURV9LRVlfTEVOR1RIX0lOVkFMSUQ6XCJwcml2YXRlIGtleSBsZW5ndGggaXMgaW52YWxpZFwiLEVDX1BSSVZBVEVfS0VZX1JBTkdFX0lOVkFMSUQ6XCJwcml2YXRlIGtleSByYW5nZSBpcyBpbnZhbGlkXCIsRUNfUFJJVkFURV9LRVlfVFdFQUtfQUREX0ZBSUw6XCJ0d2VhayBvdXQgb2YgcmFuZ2Ugb3IgcmVzdWx0aW5nIHByaXZhdGUga2V5IGlzIGludmFsaWRcIixFQ19QUklWQVRFX0tFWV9UV0VBS19NVUxfRkFJTDpcInR3ZWFrIG91dCBvZiByYW5nZVwiLEVDX1BSSVZBVEVfS0VZX0VYUE9SVF9ERVJfRkFJTDpcImNvdWxkbid0IGV4cG9ydCB0byBERVIgZm9ybWF0XCIsRUNfUFJJVkFURV9LRVlfSU1QT1JUX0RFUl9GQUlMOlwiY291bGRuJ3QgaW1wb3J0IGZyb20gREVSIGZvcm1hdFwiLEVDX1BVQkxJQ19LRVlTX1RZUEVfSU5WQUxJRDpcInB1YmxpYyBrZXlzIHNob3VsZCBiZSBhbiBBcnJheVwiLEVDX1BVQkxJQ19LRVlTX0xFTkdUSF9JTlZBTElEOlwicHVibGljIGtleXMgQXJyYXkgc2hvdWxkIGhhdmUgYXQgbGVhc3QgMSBlbGVtZW50XCIsRUNfUFVCTElDX0tFWV9UWVBFX0lOVkFMSUQ6XCJwdWJsaWMga2V5IHNob3VsZCBiZSBhIEJ1ZmZlclwiLEVDX1BVQkxJQ19LRVlfTEVOR1RIX0lOVkFMSUQ6XCJwdWJsaWMga2V5IGxlbmd0aCBpcyBpbnZhbGlkXCIsRUNfUFVCTElDX0tFWV9QQVJTRV9GQUlMOlwidGhlIHB1YmxpYyBrZXkgY291bGQgbm90IGJlIHBhcnNlZCBvciBpcyBpbnZhbGlkXCIsRUNfUFVCTElDX0tFWV9DUkVBVEVfRkFJTDpcInByaXZhdGUgd2FzIGludmFsaWQsIHRyeSBhZ2FpblwiLEVDX1BVQkxJQ19LRVlfVFdFQUtfQUREX0ZBSUw6XCJ0d2VhayBvdXQgb2YgcmFuZ2Ugb3IgcmVzdWx0aW5nIHB1YmxpYyBrZXkgaXMgaW52YWxpZFwiLEVDX1BVQkxJQ19LRVlfVFdFQUtfTVVMX0ZBSUw6XCJ0d2VhayBvdXQgb2YgcmFuZ2VcIixFQ19QVUJMSUNfS0VZX0NPTUJJTkVfRkFJTDpcInRoZSBzdW0gb2YgdGhlIHB1YmxpYyBrZXlzIGlzIG5vdCB2YWxpZFwiLEVDREhfRkFJTDpcInNjYWxhciB3YXMgaW52YWxpZCAoemVybyBvciBvdmVyZmxvdylcIixFQ0RTQV9TSUdOQVRVUkVfVFlQRV9JTlZBTElEOlwic2lnbmF0dXJlIHNob3VsZCBiZSBhIEJ1ZmZlclwiLEVDRFNBX1NJR05BVFVSRV9MRU5HVEhfSU5WQUxJRDpcInNpZ25hdHVyZSBsZW5ndGggaXMgaW52YWxpZFwiLEVDRFNBX1NJR05BVFVSRV9QQVJTRV9GQUlMOlwiY291bGRuJ3QgcGFyc2Ugc2lnbmF0dXJlXCIsRUNEU0FfU0lHTkFUVVJFX1BBUlNFX0RFUl9GQUlMOlwiY291bGRuJ3QgcGFyc2UgREVSIHNpZ25hdHVyZVwiLEVDRFNBX1NJR05BVFVSRV9TRVJJQUxJWkVfREVSX0ZBSUw6XCJjb3VsZG4ndCBzZXJpYWxpemUgc2lnbmF0dXJlIHRvIERFUiBmb3JtYXRcIixFQ0RTQV9TSUdOX0ZBSUw6XCJub25jZSBnZW5lcmF0aW9uIGZ1bmN0aW9uIGZhaWxlZCBvciBwcml2YXRlIGtleSBpcyBpbnZhbGlkXCIsRUNEU0FfUkVDT1ZFUl9GQUlMOlwiY291bGRuJ3QgcmVjb3ZlciBwdWJsaWMga2V5IGZyb20gc2lnbmF0dXJlXCIsTVNHMzJfVFlQRV9JTlZBTElEOlwibWVzc2FnZSBzaG91bGQgYmUgYSBCdWZmZXJcIixNU0czMl9MRU5HVEhfSU5WQUxJRDpcIm1lc3NhZ2UgbGVuZ3RoIGlzIGludmFsaWRcIixPUFRJT05TX1RZUEVfSU5WQUxJRDpcIm9wdGlvbnMgc2hvdWxkIGJlIGFuIE9iamVjdFwiLE9QVElPTlNfREFUQV9UWVBFX0lOVkFMSUQ6XCJvcHRpb25zLmRhdGEgc2hvdWxkIGJlIGEgQnVmZmVyXCIsT1BUSU9OU19EQVRBX0xFTkdUSF9JTlZBTElEOlwib3B0aW9ucy5kYXRhIGxlbmd0aCBpcyBpbnZhbGlkXCIsT1BUSU9OU19OT05DRUZOX1RZUEVfSU5WQUxJRDpcIm9wdGlvbnMubm9uY2VmbiBzaG91bGQgYmUgYSBGdW5jdGlvblwiLFJFQ09WRVJZX0lEX1RZUEVfSU5WQUxJRDpcInJlY292ZXJ5IHNob3VsZCBiZSBhIE51bWJlclwiLFJFQ09WRVJZX0lEX1ZBTFVFX0lOVkFMSUQ6XCJyZWNvdmVyeSBzaG91bGQgaGF2ZSB2YWx1ZSBiZXR3ZWVuIC0xIGFuZCA0XCIsVFdFQUtfVFlQRV9JTlZBTElEOlwidHdlYWsgc2hvdWxkIGJlIGEgQnVmZmVyXCIsVFdFQUtfTEVOR1RIX0lOVkFMSUQ6XCJ0d2VhayBsZW5ndGggaXMgaW52YWxpZFwifX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMikuQnVmZmVyLGk9cigxMzgpLlRyYW5zZm9ybTtmdW5jdGlvbiBvKGUpe2kuY2FsbCh0aGlzKSx0aGlzLl9ibG9jaz1uLmFsbG9jVW5zYWZlKGUpLHRoaXMuX2Jsb2NrU2l6ZT1lLHRoaXMuX2Jsb2NrT2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPVswLDAsMCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9cigwKShvLGkpLG8ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPW51bGw7dHJ5e3RoaXMudXBkYXRlKGUsdCl9Y2F0Y2goZSl7bj1lfXIobil9LG8ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihlKXt2YXIgdD1udWxsO3RyeXt0aGlzLnB1c2godGhpcy5kaWdlc3QoKSl9Y2F0Y2goZSl7dD1lfWUodCl9LG8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKGZ1bmN0aW9uKGUsdCl7aWYoIW4uaXNCdWZmZXIoZSkmJlwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IodCtcIiBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgYnVmZmVyXCIpfShlLFwiRGF0YVwiKSx0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKFwiRGlnZXN0IGFscmVhZHkgY2FsbGVkXCIpO24uaXNCdWZmZXIoZSl8fChlPW4uZnJvbShlLHQpKTtmb3IodmFyIHI9dGhpcy5fYmxvY2ssaT0wO3RoaXMuX2Jsb2NrT2Zmc2V0K2UubGVuZ3RoLWk+PXRoaXMuX2Jsb2NrU2l6ZTspe2Zvcih2YXIgbz10aGlzLl9ibG9ja09mZnNldDtvPHRoaXMuX2Jsb2NrU2l6ZTspcltvKytdPWVbaSsrXTt0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wfWZvcig7aTxlLmxlbmd0aDspclt0aGlzLl9ibG9ja09mZnNldCsrXT1lW2krK107Zm9yKHZhciBhPTAscz04KmUubGVuZ3RoO3M+MDsrK2EpdGhpcy5fbGVuZ3RoW2FdKz1zLChzPXRoaXMuX2xlbmd0aFthXS80Mjk0OTY3Mjk2fDApPjAmJih0aGlzLl9sZW5ndGhbYV0tPTQyOTQ5NjcyOTYqcyk7cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJfdXBkYXRlIGlzIG5vdCBpbXBsZW1lbnRlZFwiKX0sby5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoXCJEaWdlc3QgYWxyZWFkeSBjYWxsZWRcIik7dGhpcy5fZmluYWxpemVkPSEwO3ZhciB0PXRoaXMuX2RpZ2VzdCgpO3ZvaWQgMCE9PWUmJih0PXQudG9TdHJpbmcoZSkpLHRoaXMuX2Jsb2NrLmZpbGwoMCksdGhpcy5fYmxvY2tPZmZzZXQ9MDtmb3IodmFyIHI9MDtyPDQ7KytyKXRoaXMuX2xlbmd0aFtyXT0wO3JldHVybiB0fSxvLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWRcIil9LGUuZXhwb3J0cz1vfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQsbil7dmFyIGk7ZS5leHBvcnRzPXgseC5SZWFkYWJsZVN0YXRlPUE7cig5KS5FdmVudEVtaXR0ZXI7dmFyIG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5saXN0ZW5lcnModCkubGVuZ3RofSxhPXIoNjUpLHM9cigxKS5CdWZmZXIsZj10LlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fTt2YXIgdSxjPXIoMTM5KTt1PWMmJmMuZGVidWdsb2c/Yy5kZWJ1Z2xvZyhcInN0cmVhbVwiKTpmdW5jdGlvbigpe307dmFyIGgsZCxsLHA9cigxNDApLGI9cig2NikseT1yKDY3KS5nZXRIaWdoV2F0ZXJNYXJrLGc9cigxNSkuY29kZXMsdj1nLkVSUl9JTlZBTElEX0FSR19UWVBFLG09Zy5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLHc9Zy5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxfPWcuRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDtyKDApKHgsYSk7dmFyIEU9Yi5lcnJvck9yRGVzdHJveSxTPVtcImVycm9yXCIsXCJjbG9zZVwiLFwiZGVzdHJveVwiLFwicGF1c2VcIixcInJlc3VtZVwiXTtmdW5jdGlvbiBBKGUsdCxuKXtpPWl8fHIoMTYpLGU9ZXx8e30sXCJib29sZWFuXCIhPXR5cGVvZiBuJiYobj10IGluc3RhbmNlb2YgaSksdGhpcy5vYmplY3RNb2RlPSEhZS5vYmplY3RNb2RlLG4mJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIWUucmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9eSh0aGlzLGUsXCJyZWFkYWJsZUhpZ2hXYXRlck1hcmtcIixuKSx0aGlzLmJ1ZmZlcj1uZXcgcCx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1lLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhZS5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz1lLmRlZmF1bHRFbmNvZGluZ3x8XCJ1dGY4XCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsZS5lbmNvZGluZyYmKGh8fChoPXIoMjApLlN0cmluZ0RlY29kZXIpLHRoaXMuZGVjb2Rlcj1uZXcgaChlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPWUuZW5jb2RpbmcpfWZ1bmN0aW9uIHgoZSl7aWYoaT1pfHxyKDE2KSwhKHRoaXMgaW5zdGFuY2VvZiB4KSlyZXR1cm4gbmV3IHgoZSk7dmFyIHQ9dGhpcyBpbnN0YW5jZW9mIGk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgQShlLHRoaXMsdCksdGhpcy5yZWFkYWJsZT0hMCxlJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5yZWFkJiYodGhpcy5fcmVhZD1lLnJlYWQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9ZS5kZXN0cm95KSksYS5jYWxsKHRoaXMpfWZ1bmN0aW9uIGsoZSx0LHIsbixpKXt1KFwicmVhZGFibGVBZGRDaHVua1wiLHQpO3ZhciBvLGE9ZS5fcmVhZGFibGVTdGF0ZTtpZihudWxsPT09dClhLnJlYWRpbmc9ITEsZnVuY3Rpb24oZSx0KXtpZih1KFwib25Fb2ZDaHVua1wiKSx0LmVuZGVkKXJldHVybjtpZih0LmRlY29kZXIpe3ZhciByPXQuZGVjb2Rlci5lbmQoKTtyJiZyLmxlbmd0aCYmKHQuYnVmZmVyLnB1c2gociksdC5sZW5ndGgrPXQub2JqZWN0TW9kZT8xOnIubGVuZ3RoKX10LmVuZGVkPSEwLHQuc3luYz9JKGUpOih0Lm5lZWRSZWFkYWJsZT0hMSx0LmVtaXR0ZWRSZWFkYWJsZXx8KHQuZW1pdHRlZFJlYWRhYmxlPSEwLFIoZSkpKX0oZSxhKTtlbHNlIGlmKGl8fChvPWZ1bmN0aW9uKGUsdCl7dmFyIHI7bj10LHMuaXNCdWZmZXIobil8fG4gaW5zdGFuY2VvZiBmfHxcInN0cmluZ1wiPT10eXBlb2YgdHx8dm9pZCAwPT09dHx8ZS5vYmplY3RNb2RlfHwocj1uZXcgdihcImNodW5rXCIsW1wic3RyaW5nXCIsXCJCdWZmZXJcIixcIlVpbnQ4QXJyYXlcIl0sdCkpO3ZhciBuO3JldHVybiByfShhLHQpKSxvKUUoZSxvKTtlbHNlIGlmKGEub2JqZWN0TW9kZXx8dCYmdC5sZW5ndGg+MClpZihcInN0cmluZ1wiPT10eXBlb2YgdHx8YS5vYmplY3RNb2RlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1zLnByb3RvdHlwZXx8KHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHMuZnJvbShlKX0odCkpLG4pYS5lbmRFbWl0dGVkP0UoZSxuZXcgXyk6TShlLGEsdCwhMCk7ZWxzZSBpZihhLmVuZGVkKUUoZSxuZXcgbSk7ZWxzZXtpZihhLmRlc3Ryb3llZClyZXR1cm4hMTthLnJlYWRpbmc9ITEsYS5kZWNvZGVyJiYhcj8odD1hLmRlY29kZXIud3JpdGUodCksYS5vYmplY3RNb2RlfHwwIT09dC5sZW5ndGg/TShlLGEsdCwhMSk6UChlLGEpKTpNKGUsYSx0LCExKX1lbHNlIG58fChhLnJlYWRpbmc9ITEsUChlLGEpKTtyZXR1cm4hYS5lbmRlZCYmKGEubGVuZ3RoPGEuaGlnaFdhdGVyTWFya3x8MD09PWEubGVuZ3RoKX1mdW5jdGlvbiBNKGUsdCxyLG4pe3QuZmxvd2luZyYmMD09PXQubGVuZ3RoJiYhdC5zeW5jPyh0LmF3YWl0RHJhaW49MCxlLmVtaXQoXCJkYXRhXCIscikpOih0Lmxlbmd0aCs9dC5vYmplY3RNb2RlPzE6ci5sZW5ndGgsbj90LmJ1ZmZlci51bnNoaWZ0KHIpOnQuYnVmZmVyLnB1c2gociksdC5uZWVkUmVhZGFibGUmJkkoZSkpLFAoZSx0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoeC5wcm90b3R5cGUsXCJkZXN0cm95ZWRcIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSl9fSkseC5wcm90b3R5cGUuZGVzdHJveT1iLmRlc3Ryb3kseC5wcm90b3R5cGUuX3VuZGVzdHJveT1iLnVuZGVzdHJveSx4LnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHQpe3QoZSl9LHgucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIG4ub2JqZWN0TW9kZT9yPSEwOlwic3RyaW5nXCI9PXR5cGVvZiBlJiYoKHQ9dHx8bi5kZWZhdWx0RW5jb2RpbmcpIT09bi5lbmNvZGluZyYmKGU9cy5mcm9tKGUsdCksdD1cIlwiKSxyPSEwKSxrKHRoaXMsZSx0LCExLHIpfSx4LnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKGUpe3JldHVybiBrKHRoaXMsZSxudWxsLCEwLCExKX0seC5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30seC5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oZSl7aHx8KGg9cigyMCkuU3RyaW5nRGVjb2Rlcik7dmFyIHQ9bmV3IGgoZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPXQsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz10aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7Zm9yKHZhciBuPXRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmhlYWQsaT1cIlwiO251bGwhPT1uOylpKz10LndyaXRlKG4uZGF0YSksbj1uLm5leHQ7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmNsZWFyKCksXCJcIiE9PWkmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goaSksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9aS5sZW5ndGgsdGhpc307ZnVuY3Rpb24gVChlLHQpe3JldHVybiBlPD0wfHwwPT09dC5sZW5ndGgmJnQuZW5kZWQ/MDp0Lm9iamVjdE1vZGU/MTplIT1lP3QuZmxvd2luZyYmdC5sZW5ndGg/dC5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDp0Lmxlbmd0aDooZT50LmhpZ2hXYXRlck1hcmsmJih0LmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTEwNzM3NDE4MjQ/ZT0xMDczNzQxODI0OihlLS0sZXw9ZT4+PjEsZXw9ZT4+PjIsZXw9ZT4+PjQsZXw9ZT4+PjgsZXw9ZT4+PjE2LGUrKyksZX0oZSkpLGU8PXQubGVuZ3RoP2U6dC5lbmRlZD90Lmxlbmd0aDoodC5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIEkoZSl7dmFyIHQ9ZS5fcmVhZGFibGVTdGF0ZTt1KFwiZW1pdFJlYWRhYmxlXCIsdC5uZWVkUmVhZGFibGUsdC5lbWl0dGVkUmVhZGFibGUpLHQubmVlZFJlYWRhYmxlPSExLHQuZW1pdHRlZFJlYWRhYmxlfHwodShcImVtaXRSZWFkYWJsZVwiLHQuZmxvd2luZyksdC5lbWl0dGVkUmVhZGFibGU9ITAsbi5uZXh0VGljayhSLGUpKX1mdW5jdGlvbiBSKGUpe3ZhciB0PWUuX3JlYWRhYmxlU3RhdGU7dShcImVtaXRSZWFkYWJsZV9cIix0LmRlc3Ryb3llZCx0Lmxlbmd0aCx0LmVuZGVkKSx0LmRlc3Ryb3llZHx8IXQubGVuZ3RoJiYhdC5lbmRlZHx8KGUuZW1pdChcInJlYWRhYmxlXCIpLHQuZW1pdHRlZFJlYWRhYmxlPSExKSx0Lm5lZWRSZWFkYWJsZT0hdC5mbG93aW5nJiYhdC5lbmRlZCYmdC5sZW5ndGg8PXQuaGlnaFdhdGVyTWFyayxOKGUpfWZ1bmN0aW9uIFAoZSx0KXt0LnJlYWRpbmdNb3JlfHwodC5yZWFkaW5nTW9yZT0hMCxuLm5leHRUaWNrKEwsZSx0KSl9ZnVuY3Rpb24gTChlLHQpe2Zvcig7IXQucmVhZGluZyYmIXQuZW5kZWQmJih0Lmxlbmd0aDx0LmhpZ2hXYXRlck1hcmt8fHQuZmxvd2luZyYmMD09PXQubGVuZ3RoKTspe3ZhciByPXQubGVuZ3RoO2lmKHUoXCJtYXliZVJlYWRNb3JlIHJlYWQgMFwiKSxlLnJlYWQoMCkscj09PXQubGVuZ3RoKWJyZWFrfXQucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gQihlKXt2YXIgdD1lLl9yZWFkYWJsZVN0YXRlO3QucmVhZGFibGVMaXN0ZW5pbmc9ZS5saXN0ZW5lckNvdW50KFwicmVhZGFibGVcIik+MCx0LnJlc3VtZVNjaGVkdWxlZCYmIXQucGF1c2VkP3QuZmxvd2luZz0hMDplLmxpc3RlbmVyQ291bnQoXCJkYXRhXCIpPjAmJmUucmVzdW1lKCl9ZnVuY3Rpb24gQyhlKXt1KFwicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwXCIpLGUucmVhZCgwKX1mdW5jdGlvbiBPKGUsdCl7dShcInJlc3VtZVwiLHQucmVhZGluZyksdC5yZWFkaW5nfHxlLnJlYWQoMCksdC5yZXN1bWVTY2hlZHVsZWQ9ITEsZS5lbWl0KFwicmVzdW1lXCIpLE4oZSksdC5mbG93aW5nJiYhdC5yZWFkaW5nJiZlLnJlYWQoMCl9ZnVuY3Rpb24gTihlKXt2YXIgdD1lLl9yZWFkYWJsZVN0YXRlO2Zvcih1KFwiZmxvd1wiLHQuZmxvd2luZyk7dC5mbG93aW5nJiZudWxsIT09ZS5yZWFkKCk7KTt9ZnVuY3Rpb24gaihlLHQpe3JldHVybiAwPT09dC5sZW5ndGg/bnVsbDoodC5vYmplY3RNb2RlP3I9dC5idWZmZXIuc2hpZnQoKTohZXx8ZT49dC5sZW5ndGg/KHI9dC5kZWNvZGVyP3QuYnVmZmVyLmpvaW4oXCJcIik6MT09PXQuYnVmZmVyLmxlbmd0aD90LmJ1ZmZlci5maXJzdCgpOnQuYnVmZmVyLmNvbmNhdCh0Lmxlbmd0aCksdC5idWZmZXIuY2xlYXIoKSk6cj10LmJ1ZmZlci5jb25zdW1lKGUsdC5kZWNvZGVyKSxyKTt2YXIgcn1mdW5jdGlvbiBEKGUpe3ZhciB0PWUuX3JlYWRhYmxlU3RhdGU7dShcImVuZFJlYWRhYmxlXCIsdC5lbmRFbWl0dGVkKSx0LmVuZEVtaXR0ZWR8fCh0LmVuZGVkPSEwLG4ubmV4dFRpY2soVSx0LGUpKX1mdW5jdGlvbiBVKGUsdCl7aWYodShcImVuZFJlYWRhYmxlTlRcIixlLmVuZEVtaXR0ZWQsZS5sZW5ndGgpLCFlLmVuZEVtaXR0ZWQmJjA9PT1lLmxlbmd0aCYmKGUuZW5kRW1pdHRlZD0hMCx0LnJlYWRhYmxlPSExLHQuZW1pdChcImVuZFwiKSxlLmF1dG9EZXN0cm95KSl7dmFyIHI9dC5fd3JpdGFibGVTdGF0ZTsoIXJ8fHIuYXV0b0Rlc3Ryb3kmJnIuZmluaXNoZWQpJiZ0LmRlc3Ryb3koKX19ZnVuY3Rpb24geihlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylpZihlW3JdPT09dClyZXR1cm4gcjtyZXR1cm4tMX14LnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKGUpe3UoXCJyZWFkXCIsZSksZT1wYXJzZUludChlLDEwKTt2YXIgdD10aGlzLl9yZWFkYWJsZVN0YXRlLHI9ZTtpZigwIT09ZSYmKHQuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09ZSYmdC5uZWVkUmVhZGFibGUmJigoMCE9PXQuaGlnaFdhdGVyTWFyaz90Lmxlbmd0aD49dC5oaWdoV2F0ZXJNYXJrOnQubGVuZ3RoPjApfHx0LmVuZGVkKSlyZXR1cm4gdShcInJlYWQ6IGVtaXRSZWFkYWJsZVwiLHQubGVuZ3RoLHQuZW5kZWQpLDA9PT10Lmxlbmd0aCYmdC5lbmRlZD9EKHRoaXMpOkkodGhpcyksbnVsbDtpZigwPT09KGU9VChlLHQpKSYmdC5lbmRlZClyZXR1cm4gMD09PXQubGVuZ3RoJiZEKHRoaXMpLG51bGw7dmFyIG4saT10Lm5lZWRSZWFkYWJsZTtyZXR1cm4gdShcIm5lZWQgcmVhZGFibGVcIixpKSwoMD09PXQubGVuZ3RofHx0Lmxlbmd0aC1lPHQuaGlnaFdhdGVyTWFyaykmJnUoXCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFya1wiLGk9ITApLHQuZW5kZWR8fHQucmVhZGluZz91KFwicmVhZGluZyBvciBlbmRlZFwiLGk9ITEpOmkmJih1KFwiZG8gcmVhZFwiKSx0LnJlYWRpbmc9ITAsdC5zeW5jPSEwLDA9PT10Lmxlbmd0aCYmKHQubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKHQuaGlnaFdhdGVyTWFyayksdC5zeW5jPSExLHQucmVhZGluZ3x8KGU9VChyLHQpKSksbnVsbD09PShuPWU+MD9qKGUsdCk6bnVsbCk/KHQubmVlZFJlYWRhYmxlPXQubGVuZ3RoPD10LmhpZ2hXYXRlck1hcmssZT0wKToodC5sZW5ndGgtPWUsdC5hd2FpdERyYWluPTApLDA9PT10Lmxlbmd0aCYmKHQuZW5kZWR8fCh0Lm5lZWRSZWFkYWJsZT0hMCksciE9PWUmJnQuZW5kZWQmJkQodGhpcykpLG51bGwhPT1uJiZ0aGlzLmVtaXQoXCJkYXRhXCIsbiksbn0seC5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oZSl7RSh0aGlzLG5ldyB3KFwiX3JlYWQoKVwiKSl9LHgucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLGk9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goaS5waXBlc0NvdW50KXtjYXNlIDA6aS5waXBlcz1lO2JyZWFrO2Nhc2UgMTppLnBpcGVzPVtpLnBpcGVzLGVdO2JyZWFrO2RlZmF1bHQ6aS5waXBlcy5wdXNoKGUpfWkucGlwZXNDb3VudCs9MSx1KFwicGlwZSBjb3VudD0lZCBvcHRzPSVqXCIsaS5waXBlc0NvdW50LHQpO3ZhciBhPSghdHx8ITEhPT10LmVuZCkmJmUhPT1uLnN0ZG91dCYmZSE9PW4uc3RkZXJyP2Y6eTtmdW5jdGlvbiBzKHQsbil7dShcIm9udW5waXBlXCIpLHQ9PT1yJiZuJiYhMT09PW4uaGFzVW5waXBlZCYmKG4uaGFzVW5waXBlZD0hMCx1KFwiY2xlYW51cFwiKSxlLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixwKSxlLnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsYiksZS5yZW1vdmVMaXN0ZW5lcihcImRyYWluXCIsYyksZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsbCksZS5yZW1vdmVMaXN0ZW5lcihcInVucGlwZVwiLHMpLHIucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixmKSxyLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIseSksci5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIixkKSxoPSEwLCFpLmF3YWl0RHJhaW58fGUuX3dyaXRhYmxlU3RhdGUmJiFlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbnx8YygpKX1mdW5jdGlvbiBmKCl7dShcIm9uZW5kXCIpLGUuZW5kKCl9aS5lbmRFbWl0dGVkP24ubmV4dFRpY2soYSk6ci5vbmNlKFwiZW5kXCIsYSksZS5vbihcInVucGlwZVwiLHMpO3ZhciBjPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuX3JlYWRhYmxlU3RhdGU7dShcInBpcGVPbkRyYWluXCIsdC5hd2FpdERyYWluKSx0LmF3YWl0RHJhaW4mJnQuYXdhaXREcmFpbi0tLDA9PT10LmF3YWl0RHJhaW4mJm8oZSxcImRhdGFcIikmJih0LmZsb3dpbmc9ITAsTihlKSl9fShyKTtlLm9uKFwiZHJhaW5cIixjKTt2YXIgaD0hMTtmdW5jdGlvbiBkKHQpe3UoXCJvbmRhdGFcIik7dmFyIG49ZS53cml0ZSh0KTt1KFwiZGVzdC53cml0ZVwiLG4pLCExPT09biYmKCgxPT09aS5waXBlc0NvdW50JiZpLnBpcGVzPT09ZXx8aS5waXBlc0NvdW50PjEmJi0xIT09eihpLnBpcGVzLGUpKSYmIWgmJih1KFwiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlXCIsaS5hd2FpdERyYWluKSxpLmF3YWl0RHJhaW4rKyksci5wYXVzZSgpKX1mdW5jdGlvbiBsKHQpe3UoXCJvbmVycm9yXCIsdCkseSgpLGUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGwpLDA9PT1vKGUsXCJlcnJvclwiKSYmRShlLHQpfWZ1bmN0aW9uIHAoKXtlLnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsYikseSgpfWZ1bmN0aW9uIGIoKXt1KFwib25maW5pc2hcIiksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIscCkseSgpfWZ1bmN0aW9uIHkoKXt1KFwidW5waXBlXCIpLHIudW5waXBlKGUpfXJldHVybiByLm9uKFwiZGF0YVwiLGQpLGZ1bmN0aW9uKGUsdCxyKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gZS5wcmVwZW5kTGlzdGVuZXIodCxyKTtlLl9ldmVudHMmJmUuX2V2ZW50c1t0XT9BcnJheS5pc0FycmF5KGUuX2V2ZW50c1t0XSk/ZS5fZXZlbnRzW3RdLnVuc2hpZnQocik6ZS5fZXZlbnRzW3RdPVtyLGUuX2V2ZW50c1t0XV06ZS5vbih0LHIpfShlLFwiZXJyb3JcIixsKSxlLm9uY2UoXCJjbG9zZVwiLHApLGUub25jZShcImZpbmlzaFwiLGIpLGUuZW1pdChcInBpcGVcIixyKSxpLmZsb3dpbmd8fCh1KFwicGlwZSByZXN1bWVcIiksci5yZXN1bWUoKSksZX0seC5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3JlYWRhYmxlU3RhdGUscj17aGFzVW5waXBlZDohMX07aWYoMD09PXQucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09dC5waXBlc0NvdW50KXJldHVybiBlJiZlIT09dC5waXBlc3x8KGV8fChlPXQucGlwZXMpLHQucGlwZXM9bnVsbCx0LnBpcGVzQ291bnQ9MCx0LmZsb3dpbmc9ITEsZSYmZS5lbWl0KFwidW5waXBlXCIsdGhpcyxyKSksdGhpcztpZighZSl7dmFyIG49dC5waXBlcyxpPXQucGlwZXNDb3VudDt0LnBpcGVzPW51bGwsdC5waXBlc0NvdW50PTAsdC5mbG93aW5nPSExO2Zvcih2YXIgbz0wO288aTtvKyspbltvXS5lbWl0KFwidW5waXBlXCIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBhPXoodC5waXBlcyxlKTtyZXR1cm4tMT09PWF8fCh0LnBpcGVzLnNwbGljZShhLDEpLHQucGlwZXNDb3VudC09MSwxPT09dC5waXBlc0NvdW50JiYodC5waXBlcz10LnBpcGVzWzBdKSxlLmVtaXQoXCJ1bnBpcGVcIix0aGlzLHIpKSx0aGlzfSx4LnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe3ZhciByPWEucHJvdG90eXBlLm9uLmNhbGwodGhpcyxlLHQpLGk9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm5cImRhdGFcIj09PWU/KGkucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KFwicmVhZGFibGVcIik+MCwhMSE9PWkuZmxvd2luZyYmdGhpcy5yZXN1bWUoKSk6XCJyZWFkYWJsZVwiPT09ZSYmKGkuZW5kRW1pdHRlZHx8aS5yZWFkYWJsZUxpc3RlbmluZ3x8KGkucmVhZGFibGVMaXN0ZW5pbmc9aS5uZWVkUmVhZGFibGU9ITAsaS5mbG93aW5nPSExLGkuZW1pdHRlZFJlYWRhYmxlPSExLHUoXCJvbiByZWFkYWJsZVwiLGkubGVuZ3RoLGkucmVhZGluZyksaS5sZW5ndGg/SSh0aGlzKTppLnJlYWRpbmd8fG4ubmV4dFRpY2soQyx0aGlzKSkpLHJ9LHgucHJvdG90eXBlLmFkZExpc3RlbmVyPXgucHJvdG90eXBlLm9uLHgucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLGUsdCk7cmV0dXJuXCJyZWFkYWJsZVwiPT09ZSYmbi5uZXh0VGljayhCLHRoaXMpLHJ9LHgucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihlKXt2YXIgdD1hLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVyblwicmVhZGFibGVcIiE9PWUmJnZvaWQgMCE9PWV8fG4ubmV4dFRpY2soQix0aGlzKSx0fSx4LnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBlLmZsb3dpbmd8fCh1KFwicmVzdW1lXCIpLGUuZmxvd2luZz0hZS5yZWFkYWJsZUxpc3RlbmluZyxmdW5jdGlvbihlLHQpe3QucmVzdW1lU2NoZWR1bGVkfHwodC5yZXN1bWVTY2hlZHVsZWQ9ITAsbi5uZXh0VGljayhPLGUsdCkpfSh0aGlzLGUpKSxlLnBhdXNlZD0hMSx0aGlzfSx4LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiB1KFwiY2FsbCBwYXVzZSBmbG93aW5nPSVqXCIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKHUoXCJwYXVzZVwiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KFwicGF1c2VcIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRoaXN9LHgucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMuX3JlYWRhYmxlU3RhdGUsbj0hMTtmb3IodmFyIGkgaW4gZS5vbihcImVuZFwiLChmdW5jdGlvbigpe2lmKHUoXCJ3cmFwcGVkIGVuZFwiKSxyLmRlY29kZXImJiFyLmVuZGVkKXt2YXIgZT1yLmRlY29kZXIuZW5kKCk7ZSYmZS5sZW5ndGgmJnQucHVzaChlKX10LnB1c2gobnVsbCl9KSksZS5vbihcImRhdGFcIiwoZnVuY3Rpb24oaSl7KHUoXCJ3cmFwcGVkIGRhdGFcIiksci5kZWNvZGVyJiYoaT1yLmRlY29kZXIud3JpdGUoaSkpLHIub2JqZWN0TW9kZSYmbnVsbD09aSl8fChyLm9iamVjdE1vZGV8fGkmJmkubGVuZ3RoKSYmKHQucHVzaChpKXx8KG49ITAsZS5wYXVzZSgpKSl9KSksZSl2b2lkIDA9PT10aGlzW2ldJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlW2ldJiYodGhpc1tpXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZVt0XS5hcHBseShlLGFyZ3VtZW50cyl9fShpKSk7Zm9yKHZhciBvPTA7bzxTLmxlbmd0aDtvKyspZS5vbihTW29dLHRoaXMuZW1pdC5iaW5kKHRoaXMsU1tvXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKHQpe3UoXCJ3cmFwcGVkIF9yZWFkXCIsdCksbiYmKG49ITEsZS5yZXN1bWUoKSl9LHRoaXN9LFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKHgucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1kJiYoZD1yKDE0MikpLGQodGhpcyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeC5wcm90b3R5cGUsXCJyZWFkYWJsZUhpZ2hXYXRlck1hcmtcIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LnByb3RvdHlwZSxcInJlYWRhYmxlQnVmZmVyXCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LnByb3RvdHlwZSxcInJlYWRhYmxlRmxvd2luZ1wiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPWUpfX0pLHguX2Zyb21MaXN0PWosT2JqZWN0LmRlZmluZVByb3BlcnR5KHgucHJvdG90eXBlLFwicmVhZGFibGVMZW5ndGhcIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGh9fSksXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYoeC5mcm9tPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PWwmJihsPXIoMTQzKSksbCh4LGUsdCl9KX0pLmNhbGwodGhpcyxyKDUpLHIoMykpfSxmdW5jdGlvbihlLHQscil7ZS5leHBvcnRzPXIoOSkuRXZlbnRFbWl0dGVyfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoZSx0KXtpKGUsdCksbihlKX1mdW5jdGlvbiBuKGUpe2UuX3dyaXRhYmxlU3RhdGUmJiFlLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZXx8ZS5fcmVhZGFibGVTdGF0ZSYmIWUuX3JlYWRhYmxlU3RhdGUuZW1pdENsb3NlfHxlLmVtaXQoXCJjbG9zZVwiKX1mdW5jdGlvbiBpKGUsdCl7ZS5lbWl0KFwiZXJyb3JcIix0KX1lLmV4cG9ydHM9e2Rlc3Ryb3k6ZnVuY3Rpb24oZSxvKXt2YXIgYT10aGlzLHM9dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQsZj10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtyZXR1cm4gc3x8Zj8obz9vKGUpOmUmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsdC5uZXh0VGljayhpLHRoaXMsZSkpOnQubmV4dFRpY2soaSx0aGlzLGUpKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3koZXx8bnVsbCwoZnVuY3Rpb24oZSl7IW8mJmU/YS5fd3JpdGFibGVTdGF0ZT9hLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD90Lm5leHRUaWNrKG4sYSk6KGEuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHQubmV4dFRpY2socixhLGUpKTp0Lm5leHRUaWNrKHIsYSxlKTpvPyh0Lm5leHRUaWNrKG4sYSksbyhlKSk6dC5uZXh0VGljayhuLGEpfSkpLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9LGVycm9yT3JEZXN0cm95OmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fcmVhZGFibGVTdGF0ZSxuPWUuX3dyaXRhYmxlU3RhdGU7ciYmci5hdXRvRGVzdHJveXx8biYmbi5hdXRvRGVzdHJveT9lLmRlc3Ryb3kodCk6ZS5lbWl0KFwiZXJyb3JcIix0KX19fSkuY2FsbCh0aGlzLHIoMykpfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxNSkuY29kZXMuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO2UuZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbihlLHQscixpKXt2YXIgbz1mdW5jdGlvbihlLHQscil7cmV0dXJuIG51bGwhPWUuaGlnaFdhdGVyTWFyaz9lLmhpZ2hXYXRlck1hcms6dD9lW3JdOm51bGx9KHQsaSxyKTtpZihudWxsIT1vKXtpZighaXNGaW5pdGUobyl8fE1hdGguZmxvb3IobykhPT1vfHxvPDApdGhyb3cgbmV3IG4oaT9yOlwiaGlnaFdhdGVyTWFya1wiLG8pO3JldHVybiBNYXRoLmZsb29yKG8pfXJldHVybiBlLm9iamVjdE1vZGU/MTY6MTYzODR9fX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGkoZSl7dmFyIHQ9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUuZW50cnk7ZS5lbnRyeT1udWxsO2Zvcig7bjspe3ZhciBpPW4uY2FsbGJhY2s7dC5wZW5kaW5nY2ItLSxpKHIpLG49bi5uZXh0fXQuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9ZX0odCxlKX19dmFyIG87ZS5leHBvcnRzPXgseC5Xcml0YWJsZVN0YXRlPUE7dmFyIGE9e2RlcHJlY2F0ZTpyKDYwKX0scz1yKDY1KSxmPXIoMSkuQnVmZmVyLHU9dC5VaW50OEFycmF5fHxmdW5jdGlvbigpe307dmFyIGMsaD1yKDY2KSxkPXIoNjcpLmdldEhpZ2hXYXRlck1hcmssbD1yKDE1KS5jb2RlcyxwPWwuRVJSX0lOVkFMSURfQVJHX1RZUEUsYj1sLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELHk9bC5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssZz1sLkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsdj1sLkVSUl9TVFJFQU1fREVTVFJPWUVELG09bC5FUlJfU1RSRUFNX05VTExfVkFMVUVTLHc9bC5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxfPWwuRVJSX1VOS05PV05fRU5DT0RJTkcsRT1oLmVycm9yT3JEZXN0cm95O2Z1bmN0aW9uIFMoKXt9ZnVuY3Rpb24gQShlLHQsYSl7bz1vfHxyKDE2KSxlPWV8fHt9LFwiYm9vbGVhblwiIT10eXBlb2YgYSYmKGE9dCBpbnN0YW5jZW9mIG8pLHRoaXMub2JqZWN0TW9kZT0hIWUub2JqZWN0TW9kZSxhJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFlLndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPWQodGhpcyxlLFwid3JpdGFibGVIaWdoV2F0ZXJNYXJrXCIsYSksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITE7dmFyIHM9ITE9PT1lLmRlY29kZVN0cmluZ3M7dGhpcy5kZWNvZGVTdHJpbmdzPSFzLHRoaXMuZGVmYXVsdEVuY29kaW5nPWUuZGVmYXVsdEVuY29kaW5nfHxcInV0ZjhcIix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe3ZhciByPWUuX3dyaXRhYmxlU3RhdGUsaT1yLnN5bmMsbz1yLndyaXRlY2I7aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygbyl0aHJvdyBuZXcgeTtpZihmdW5jdGlvbihlKXtlLndyaXRpbmc9ITEsZS53cml0ZWNiPW51bGwsZS5sZW5ndGgtPWUud3JpdGVsZW4sZS53cml0ZWxlbj0wfShyKSx0KSFmdW5jdGlvbihlLHQscixpLG8pey0tdC5wZW5kaW5nY2Iscj8obi5uZXh0VGljayhvLGkpLG4ubmV4dFRpY2soUCxlLHQpLGUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEUoZSxpKSk6KG8oaSksZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsRShlLGkpLFAoZSx0KSl9KGUscixpLHQsbyk7ZWxzZXt2YXIgYT1JKHIpfHxlLmRlc3Ryb3llZDthfHxyLmNvcmtlZHx8ci5idWZmZXJQcm9jZXNzaW5nfHwhci5idWZmZXJlZFJlcXVlc3R8fFQoZSxyKSxpP24ubmV4dFRpY2soTSxlLHIsYSxvKTpNKGUscixhLG8pfX0odCxlKX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSExIT09ZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIWUuYXV0b0Rlc3Ryb3ksdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBpKHRoaXMpfWZ1bmN0aW9uIHgoZSl7dmFyIHQ9dGhpcyBpbnN0YW5jZW9mKG89b3x8cigxNikpO2lmKCF0JiYhYy5jYWxsKHgsdGhpcykpcmV0dXJuIG5ldyB4KGUpO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IEEoZSx0aGlzLHQpLHRoaXMud3JpdGFibGU9ITAsZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUud3JpdGUmJih0aGlzLl93cml0ZT1lLndyaXRlKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLndyaXRldiYmKHRoaXMuX3dyaXRldj1lLndyaXRldiksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1lLmRlc3Ryb3kpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZmluYWwmJih0aGlzLl9maW5hbD1lLmZpbmFsKSkscy5jYWxsKHRoaXMpfWZ1bmN0aW9uIGsoZSx0LHIsbixpLG8sYSl7dC53cml0ZWxlbj1uLHQud3JpdGVjYj1hLHQud3JpdGluZz0hMCx0LnN5bmM9ITAsdC5kZXN0cm95ZWQ/dC5vbndyaXRlKG5ldyB2KFwid3JpdGVcIikpOnI/ZS5fd3JpdGV2KGksdC5vbndyaXRlKTplLl93cml0ZShpLG8sdC5vbndyaXRlKSx0LnN5bmM9ITF9ZnVuY3Rpb24gTShlLHQscixuKXtyfHxmdW5jdGlvbihlLHQpezA9PT10Lmxlbmd0aCYmdC5uZWVkRHJhaW4mJih0Lm5lZWREcmFpbj0hMSxlLmVtaXQoXCJkcmFpblwiKSl9KGUsdCksdC5wZW5kaW5nY2ItLSxuKCksUChlLHQpfWZ1bmN0aW9uIFQoZSx0KXt0LmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIHI9dC5idWZmZXJlZFJlcXVlc3Q7aWYoZS5fd3JpdGV2JiZyJiZyLm5leHQpe3ZhciBuPXQuYnVmZmVyZWRSZXF1ZXN0Q291bnQsbz1uZXcgQXJyYXkobiksYT10LmNvcmtlZFJlcXVlc3RzRnJlZTthLmVudHJ5PXI7Zm9yKHZhciBzPTAsZj0hMDtyOylvW3NdPXIsci5pc0J1Znx8KGY9ITEpLHI9ci5uZXh0LHMrPTE7by5hbGxCdWZmZXJzPWYsayhlLHQsITAsdC5sZW5ndGgsbyxcIlwiLGEuZmluaXNoKSx0LnBlbmRpbmdjYisrLHQubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLGEubmV4dD8odC5jb3JrZWRSZXF1ZXN0c0ZyZWU9YS5uZXh0LGEubmV4dD1udWxsKTp0LmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgaSh0KSx0LmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO3I7KXt2YXIgdT1yLmNodW5rLGM9ci5lbmNvZGluZyxoPXIuY2FsbGJhY2s7aWYoayhlLHQsITEsdC5vYmplY3RNb2RlPzE6dS5sZW5ndGgsdSxjLGgpLHI9ci5uZXh0LHQuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSx0LndyaXRpbmcpYnJlYWt9bnVsbD09PXImJih0Lmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9dC5idWZmZXJlZFJlcXVlc3Q9cix0LmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gSShlKXtyZXR1cm4gZS5lbmRpbmcmJjA9PT1lLmxlbmd0aCYmbnVsbD09PWUuYnVmZmVyZWRSZXF1ZXN0JiYhZS5maW5pc2hlZCYmIWUud3JpdGluZ31mdW5jdGlvbiBSKGUsdCl7ZS5fZmluYWwoKGZ1bmN0aW9uKHIpe3QucGVuZGluZ2NiLS0sciYmRShlLHIpLHQucHJlZmluaXNoZWQ9ITAsZS5lbWl0KFwicHJlZmluaXNoXCIpLFAoZSx0KX0pKX1mdW5jdGlvbiBQKGUsdCl7dmFyIHI9SSh0KTtpZihyJiYoZnVuY3Rpb24oZSx0KXt0LnByZWZpbmlzaGVkfHx0LmZpbmFsQ2FsbGVkfHwoXCJmdW5jdGlvblwiIT10eXBlb2YgZS5fZmluYWx8fHQuZGVzdHJveWVkPyh0LnByZWZpbmlzaGVkPSEwLGUuZW1pdChcInByZWZpbmlzaFwiKSk6KHQucGVuZGluZ2NiKyssdC5maW5hbENhbGxlZD0hMCxuLm5leHRUaWNrKFIsZSx0KSkpfShlLHQpLDA9PT10LnBlbmRpbmdjYiYmKHQuZmluaXNoZWQ9ITAsZS5lbWl0KFwiZmluaXNoXCIpLHQuYXV0b0Rlc3Ryb3kpKSl7dmFyIGk9ZS5fcmVhZGFibGVTdGF0ZTsoIWl8fGkuYXV0b0Rlc3Ryb3kmJmkuZW5kRW1pdHRlZCkmJmUuZGVzdHJveSgpfXJldHVybiByfXIoMCkoeCxzKSxBLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5idWZmZXJlZFJlcXVlc3QsdD1bXTtlOyl0LnB1c2goZSksZT1lLm5leHQ7cmV0dXJuIHR9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSxcImJ1ZmZlclwiLHtnZXQ6YS5kZXByZWNhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9KSxcIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuXCIsXCJERVAwMDAzXCIpfSl9Y2F0Y2goZSl7fX0oKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KGM9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHgsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hIWMuY2FsbCh0aGlzLGUpfHx0aGlzPT09eCYmKGUmJmUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBBKX19KSk6Yz1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXN9LHgucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtFKHRoaXMsbmV3IGcpfSx4LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQscil7dmFyIGksbz10aGlzLl93cml0YWJsZVN0YXRlLGE9ITEscz0hby5vYmplY3RNb2RlJiYoaT1lLGYuaXNCdWZmZXIoaSl8fGkgaW5zdGFuY2VvZiB1KTtyZXR1cm4gcyYmIWYuaXNCdWZmZXIoZSkmJihlPWZ1bmN0aW9uKGUpe3JldHVybiBmLmZyb20oZSl9KGUpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYocj10LHQ9bnVsbCkscz90PVwiYnVmZmVyXCI6dHx8KHQ9by5kZWZhdWx0RW5jb2RpbmcpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIHImJihyPVMpLG8uZW5kaW5nP2Z1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IHc7RShlLHIpLG4ubmV4dFRpY2sodCxyKX0odGhpcyxyKTooc3x8ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIG87cmV0dXJuIG51bGw9PT1yP289bmV3IG06XCJzdHJpbmdcIj09dHlwZW9mIHJ8fHQub2JqZWN0TW9kZXx8KG89bmV3IHAoXCJjaHVua1wiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCJdLHIpKSwhb3x8KEUoZSxvKSxuLm5leHRUaWNrKGksbyksITEpfSh0aGlzLG8sZSxyKSkmJihvLnBlbmRpbmdjYisrLGE9ZnVuY3Rpb24oZSx0LHIsbixpLG8pe2lmKCFyKXt2YXIgYT1mdW5jdGlvbihlLHQscil7ZS5vYmplY3RNb2RlfHwhMT09PWUuZGVjb2RlU3RyaW5nc3x8XCJzdHJpbmdcIiE9dHlwZW9mIHR8fCh0PWYuZnJvbSh0LHIpKTtyZXR1cm4gdH0odCxuLGkpO24hPT1hJiYocj0hMCxpPVwiYnVmZmVyXCIsbj1hKX12YXIgcz10Lm9iamVjdE1vZGU/MTpuLmxlbmd0aDt0Lmxlbmd0aCs9czt2YXIgdT10Lmxlbmd0aDx0LmhpZ2hXYXRlck1hcms7dXx8KHQubmVlZERyYWluPSEwKTtpZih0LndyaXRpbmd8fHQuY29ya2VkKXt2YXIgYz10Lmxhc3RCdWZmZXJlZFJlcXVlc3Q7dC5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpuLGVuY29kaW5nOmksaXNCdWY6cixjYWxsYmFjazpvLG5leHQ6bnVsbH0sYz9jLm5leHQ9dC5sYXN0QnVmZmVyZWRSZXF1ZXN0OnQuYnVmZmVyZWRSZXF1ZXN0PXQubGFzdEJ1ZmZlcmVkUmVxdWVzdCx0LmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgayhlLHQsITEscyxuLGksbyk7cmV0dXJuIHV9KHRoaXMsbyxzLGUsdCxyKSksYX0seC5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LHgucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX3dyaXRhYmxlU3RhdGU7ZS5jb3JrZWQmJihlLmNvcmtlZC0tLGUud3JpdGluZ3x8ZS5jb3JrZWR8fGUuYnVmZmVyUHJvY2Vzc2luZ3x8IWUuYnVmZmVyZWRSZXF1ZXN0fHxUKHRoaXMsZSkpfSx4LnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPWUudG9Mb3dlckNhc2UoKSksIShbXCJoZXhcIixcInV0ZjhcIixcInV0Zi04XCIsXCJhc2NpaVwiLFwiYmluYXJ5XCIsXCJiYXNlNjRcIixcInVjczJcIixcInVjcy0yXCIsXCJ1dGYxNmxlXCIsXCJ1dGYtMTZsZVwiLFwicmF3XCJdLmluZGV4T2YoKGUrXCJcIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBfKGUpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1lLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LnByb3RvdHlwZSxcIndyaXRhYmxlQnVmZmVyXCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHgucHJvdG90eXBlLFwid3JpdGFibGVIaWdoV2F0ZXJNYXJrXCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSx4LnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oZSx0LHIpe3IobmV3IGIoXCJfd3JpdGUoKVwiKSl9LHgucHJvdG90eXBlLl93cml0ZXY9bnVsbCx4LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT8ocj1lLGU9bnVsbCx0PW51bGwpOlwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJihyPXQsdD1udWxsKSxudWxsIT1lJiZ0aGlzLndyaXRlKGUsdCksaS5jb3JrZWQmJihpLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLGkuZW5kaW5nfHxmdW5jdGlvbihlLHQscil7dC5lbmRpbmc9ITAsUChlLHQpLHImJih0LmZpbmlzaGVkP24ubmV4dFRpY2socik6ZS5vbmNlKFwiZmluaXNoXCIscikpO3QuZW5kZWQ9ITAsZS53cml0YWJsZT0hMX0odGhpcyxpLHIpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LnByb3RvdHlwZSxcIndyaXRhYmxlTGVuZ3RoXCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LnByb3RvdHlwZSxcImRlc3Ryb3llZFwiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1lKX19KSx4LnByb3RvdHlwZS5kZXN0cm95PWguZGVzdHJveSx4LnByb3RvdHlwZS5fdW5kZXN0cm95PWgudW5kZXN0cm95LHgucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGUsdCl7dChlKX19KS5jYWxsKHRoaXMscig1KSxyKDMpKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1jO3ZhciBuPXIoMTUpLmNvZGVzLGk9bi5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxvPW4uRVJSX01VTFRJUExFX0NBTExCQUNLLGE9bi5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLHM9bi5FUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAsZj1yKDE2KTtmdW5jdGlvbiB1KGUsdCl7dmFyIHI9dGhpcy5fdHJhbnNmb3JtU3RhdGU7ci50cmFuc2Zvcm1pbmc9ITE7dmFyIG49ci53cml0ZWNiO2lmKG51bGw9PT1uKXJldHVybiB0aGlzLmVtaXQoXCJlcnJvclwiLG5ldyBvKTtyLndyaXRlY2h1bms9bnVsbCxyLndyaXRlY2I9bnVsbCxudWxsIT10JiZ0aGlzLnB1c2godCksbihlKTt2YXIgaT10aGlzLl9yZWFkYWJsZVN0YXRlO2kucmVhZGluZz0hMSwoaS5uZWVkUmVhZGFibGV8fGkubGVuZ3RoPGkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaS5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBjKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGMpKXJldHVybiBuZXcgYyhlKTtmLmNhbGwodGhpcyxlKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06dS5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPWUudHJhbnNmb3JtKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmZsdXNoJiYodGhpcy5fZmx1c2g9ZS5mbHVzaCkpLHRoaXMub24oXCJwcmVmaW5pc2hcIixoKX1mdW5jdGlvbiBoKCl7dmFyIGU9dGhpcztcImZ1bmN0aW9uXCIhPXR5cGVvZiB0aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ/ZCh0aGlzLG51bGwsbnVsbCk6dGhpcy5fZmx1c2goKGZ1bmN0aW9uKHQscil7ZChlLHQscil9KSl9ZnVuY3Rpb24gZChlLHQscil7aWYodClyZXR1cm4gZS5lbWl0KFwiZXJyb3JcIix0KTtpZihudWxsIT1yJiZlLnB1c2gociksZS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IHM7aWYoZS5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBhO3JldHVybiBlLnB1c2gobnVsbCl9cigwKShjLGYpLGMucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxmLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxjLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxyKXtyKG5ldyBpKFwiX3RyYW5zZm9ybSgpXCIpKX0sYy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihuLndyaXRlY2I9cixuLndyaXRlY2h1bms9ZSxuLndyaXRlZW5jb2Rpbmc9dCwhbi50cmFuc2Zvcm1pbmcpe3ZhciBpPXRoaXMuX3JlYWRhYmxlU3RhdGU7KG4ubmVlZFRyYW5zZm9ybXx8aS5uZWVkUmVhZGFibGV8fGkubGVuZ3RoPGkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaS5oaWdoV2F0ZXJNYXJrKX19LGMucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT10LndyaXRlY2h1bmt8fHQudHJhbnNmb3JtaW5nP3QubmVlZFRyYW5zZm9ybT0hMDoodC50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKHQud3JpdGVjaHVuayx0LndyaXRlZW5jb2RpbmcsdC5hZnRlclRyYW5zZm9ybSkpfSxjLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHQpe2YucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxlLChmdW5jdGlvbihlKXt0KGUpfSkpfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMCksaT1yKDE3KSxvPXIoMikuQnVmZmVyLGE9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0scz1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIGYoKXt0aGlzLmluaXQoKSx0aGlzLl93PXMsaS5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIHUoZSx0LHIpe3JldHVybiByXmUmKHRecil9ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIGUmdHxyJihlfHQpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuKGU+Pj4yfGU8PDMwKV4oZT4+PjEzfGU8PDE5KV4oZT4+PjIyfGU8PDEwKX1mdW5jdGlvbiBkKGUpe3JldHVybihlPj4+NnxlPDwyNileKGU+Pj4xMXxlPDwyMSleKGU+Pj4yNXxlPDw3KX1mdW5jdGlvbiBsKGUpe3JldHVybihlPj4+N3xlPDwyNSleKGU+Pj4xOHxlPDwxNCleZT4+PjN9bihmLGkpLGYucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzc5MDMzNzAzLHRoaXMuX2I9MzE0NDEzNDI3Nyx0aGlzLl9jPTEwMTM5MDQyNDIsdGhpcy5fZD0yNzczNDgwNzYyLHRoaXMuX2U9MTM1OTg5MzExOSx0aGlzLl9mPTI2MDA4MjI5MjQsdGhpcy5fZz01Mjg3MzQ2MzUsdGhpcy5faD0xNTQxNDU5MjI1LHRoaXN9LGYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9dGhpcy5fdyxuPTB8dGhpcy5fYSxpPTB8dGhpcy5fYixvPTB8dGhpcy5fYyxzPTB8dGhpcy5fZCxmPTB8dGhpcy5fZSxwPTB8dGhpcy5fZixiPTB8dGhpcy5fZyx5PTB8dGhpcy5faCxnPTA7ZzwxNjsrK2cpcltnXT1lLnJlYWRJbnQzMkJFKDQqZyk7Zm9yKDtnPDY0OysrZylyW2ddPTB8KCgodD1yW2ctMl0pPj4+MTd8dDw8MTUpXih0Pj4+MTl8dDw8MTMpXnQ+Pj4xMCkrcltnLTddK2wocltnLTE1XSkrcltnLTE2XTtmb3IodmFyIHY9MDt2PDY0Oysrdil7dmFyIG09eStkKGYpK3UoZixwLGIpK2Fbdl0rclt2XXwwLHc9aChuKStjKG4saSxvKXwwO3k9YixiPXAscD1mLGY9cyttfDAscz1vLG89aSxpPW4sbj1tK3d8MH10aGlzLl9hPW4rdGhpcy5fYXwwLHRoaXMuX2I9aSt0aGlzLl9ifDAsdGhpcy5fYz1vK3RoaXMuX2N8MCx0aGlzLl9kPXMrdGhpcy5fZHwwLHRoaXMuX2U9Zit0aGlzLl9lfDAsdGhpcy5fZj1wK3RoaXMuX2Z8MCx0aGlzLl9nPWIrdGhpcy5fZ3wwLHRoaXMuX2g9eSt0aGlzLl9ofDB9LGYucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIGU9by5hbGxvY1Vuc2FmZSgzMik7cmV0dXJuIGUud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksZS53cml0ZUludDMyQkUodGhpcy5fYiw0KSxlLndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLGUud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLGUud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLGUud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLGUud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLGUud3JpdGVJbnQzMkJFKHRoaXMuX2gsMjgpLGV9LGUuZXhwb3J0cz1mfSxmdW5jdGlvbihlLHQscil7dmFyIG49cigwKSxpPXIoMTcpLG89cigyKS5CdWZmZXIsYT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLHM9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gZigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9cyxpLmNhbGwodGhpcywxMjgsMTEyKX1mdW5jdGlvbiB1KGUsdCxyKXtyZXR1cm4gcl5lJih0XnIpfWZ1bmN0aW9uIGMoZSx0LHIpe3JldHVybiBlJnR8ciYoZXx0KX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuKGU+Pj4yOHx0PDw0KV4odD4+PjJ8ZTw8MzApXih0Pj4+N3xlPDwyNSl9ZnVuY3Rpb24gZChlLHQpe3JldHVybihlPj4+MTR8dDw8MTgpXihlPj4+MTh8dDw8MTQpXih0Pj4+OXxlPDwyMyl9ZnVuY3Rpb24gbChlLHQpe3JldHVybihlPj4+MXx0PDwzMSleKGU+Pj44fHQ8PDI0KV5lPj4+N31mdW5jdGlvbiBwKGUsdCl7cmV0dXJuKGU+Pj4xfHQ8PDMxKV4oZT4+Pjh8dDw8MjQpXihlPj4+N3x0PDwyNSl9ZnVuY3Rpb24gYihlLHQpe3JldHVybihlPj4+MTl8dDw8MTMpXih0Pj4+Mjl8ZTw8MyleZT4+PjZ9ZnVuY3Rpb24geShlLHQpe3JldHVybihlPj4+MTl8dDw8MTMpXih0Pj4+Mjl8ZTw8MyleKGU+Pj42fHQ8PDI2KX1mdW5jdGlvbiBnKGUsdCl7cmV0dXJuIGU+Pj4wPHQ+Pj4wPzE6MH1uKGYsaSksZi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0xNzc5MDMzNzAzLHRoaXMuX2JoPTMxNDQxMzQyNzcsdGhpcy5fY2g9MTAxMzkwNDI0Mix0aGlzLl9kaD0yNzczNDgwNzYyLHRoaXMuX2VoPTEzNTk4OTMxMTksdGhpcy5fZmg9MjYwMDgyMjkyNCx0aGlzLl9naD01Mjg3MzQ2MzUsdGhpcy5faGg9MTU0MTQ1OTIyNSx0aGlzLl9hbD00MDg5MjM1NzIwLHRoaXMuX2JsPTIyMjc4NzM1OTUsdGhpcy5fY2w9NDI3MTE3NTcyMyx0aGlzLl9kbD0xNTk1NzUwMTI5LHRoaXMuX2VsPTI5MTc1NjUxMzcsdGhpcy5fZmw9NzI1NTExMTk5LHRoaXMuX2dsPTQyMTUzODk1NDcsdGhpcy5faGw9MzI3MDMzMjA5LHRoaXN9LGYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuX3cscj0wfHRoaXMuX2FoLG49MHx0aGlzLl9iaCxpPTB8dGhpcy5fY2gsbz0wfHRoaXMuX2RoLHM9MHx0aGlzLl9laCxmPTB8dGhpcy5fZmgsdj0wfHRoaXMuX2doLG09MHx0aGlzLl9oaCx3PTB8dGhpcy5fYWwsXz0wfHRoaXMuX2JsLEU9MHx0aGlzLl9jbCxTPTB8dGhpcy5fZGwsQT0wfHRoaXMuX2VsLHg9MHx0aGlzLl9mbCxrPTB8dGhpcy5fZ2wsTT0wfHRoaXMuX2hsLFQ9MDtUPDMyO1QrPTIpdFtUXT1lLnJlYWRJbnQzMkJFKDQqVCksdFtUKzFdPWUucmVhZEludDMyQkUoNCpUKzQpO2Zvcig7VDwxNjA7VCs9Mil7dmFyIEk9dFtULTMwXSxSPXRbVC0zMCsxXSxQPWwoSSxSKSxMPXAoUixJKSxCPWIoST10W1QtNF0sUj10W1QtNCsxXSksQz15KFIsSSksTz10W1QtMTRdLE49dFtULTE0KzFdLGo9dFtULTMyXSxEPXRbVC0zMisxXSxVPUwrTnwwLHo9UCtPK2coVSxMKXwwO3o9KHo9eitCK2coVT1VK0N8MCxDKXwwKStqK2coVT1VK0R8MCxEKXwwLHRbVF09eix0W1QrMV09VX1mb3IodmFyIHE9MDtxPDE2MDtxKz0yKXt6PXRbcV0sVT10W3ErMV07dmFyIEY9YyhyLG4saSksSz1jKHcsXyxFKSxIPWgocix3KSxWPWgodyxyKSxZPWQocyxBKSxXPWQoQSxzKSxHPWFbcV0sWj1hW3ErMV0sSj11KHMsZix2KSwkPXUoQSx4LGspLFg9TStXfDAsUT1tK1krZyhYLE0pfDA7UT0oUT0oUT1RK0orZyhYPVgrJHwwLCQpfDApK0crZyhYPVgrWnwwLFopfDApK3orZyhYPVgrVXwwLFUpfDA7dmFyIGVlPVYrS3wwLHRlPUgrRitnKGVlLFYpfDA7bT12LE09ayx2PWYsaz14LGY9cyx4PUEscz1vK1ErZyhBPVMrWHwwLFMpfDAsbz1pLFM9RSxpPW4sRT1fLG49cixfPXcscj1RK3RlK2codz1YK2VlfDAsWCl8MH10aGlzLl9hbD10aGlzLl9hbCt3fDAsdGhpcy5fYmw9dGhpcy5fYmwrX3wwLHRoaXMuX2NsPXRoaXMuX2NsK0V8MCx0aGlzLl9kbD10aGlzLl9kbCtTfDAsdGhpcy5fZWw9dGhpcy5fZWwrQXwwLHRoaXMuX2ZsPXRoaXMuX2ZsK3h8MCx0aGlzLl9nbD10aGlzLl9nbCtrfDAsdGhpcy5faGw9dGhpcy5faGwrTXwwLHRoaXMuX2FoPXRoaXMuX2FoK3IrZyh0aGlzLl9hbCx3KXwwLHRoaXMuX2JoPXRoaXMuX2JoK24rZyh0aGlzLl9ibCxfKXwwLHRoaXMuX2NoPXRoaXMuX2NoK2krZyh0aGlzLl9jbCxFKXwwLHRoaXMuX2RoPXRoaXMuX2RoK28rZyh0aGlzLl9kbCxTKXwwLHRoaXMuX2VoPXRoaXMuX2VoK3MrZyh0aGlzLl9lbCxBKXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK2YrZyh0aGlzLl9mbCx4KXwwLHRoaXMuX2doPXRoaXMuX2doK3YrZyh0aGlzLl9nbCxrKXwwLHRoaXMuX2hoPXRoaXMuX2hoK20rZyh0aGlzLl9obCxNKXwwfSxmLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBlPW8uYWxsb2NVbnNhZmUoNjQpO2Z1bmN0aW9uIHQodCxyLG4pe2Uud3JpdGVJbnQzMkJFKHQsbiksZS53cml0ZUludDMyQkUocixuKzQpfXJldHVybiB0KHRoaXMuX2FoLHRoaXMuX2FsLDApLHQodGhpcy5fYmgsdGhpcy5fYmwsOCksdCh0aGlzLl9jaCx0aGlzLl9jbCwxNiksdCh0aGlzLl9kaCx0aGlzLl9kbCwyNCksdCh0aGlzLl9laCx0aGlzLl9lbCwzMiksdCh0aGlzLl9maCx0aGlzLl9mbCw0MCksdCh0aGlzLl9naCx0aGlzLl9nbCw0OCksdCh0aGlzLl9oaCx0aGlzLl9obCw1NiksZX0sZS5leHBvcnRzPWZ9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10O2Z1bmN0aW9uIGkoZSl7cmV0dXJuIDE9PT1lLmxlbmd0aD9cIjBcIitlOmV9ZnVuY3Rpb24gbyhlKXtmb3IodmFyIHQ9XCJcIixyPTA7cjxlLmxlbmd0aDtyKyspdCs9aShlW3JdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHR9bi50b0FycmF5PWZ1bmN0aW9uKGUsdCl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZS5zbGljZSgpO2lmKCFlKXJldHVybltdO3ZhciByPVtdO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylyW25dPTB8ZVtuXTtyZXR1cm4gcn1pZihcImhleFwiPT09dCl7KGU9ZS5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLFwiXCIpKS5sZW5ndGglMiE9MCYmKGU9XCIwXCIrZSk7Zm9yKG49MDtuPGUubGVuZ3RoO24rPTIpci5wdXNoKHBhcnNlSW50KGVbbl0rZVtuKzFdLDE2KSl9ZWxzZSBmb3Iobj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lLmNoYXJDb2RlQXQobiksbz1pPj44LGE9MjU1Jmk7bz9yLnB1c2gobyxhKTpyLnB1c2goYSl9cmV0dXJuIHJ9LG4uemVybzI9aSxuLnRvSGV4PW8sbi5lbmNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm5cImhleFwiPT09dD9vKGUpOmV9fSxmdW5jdGlvbihlLHQscil7dmFyIG47ZnVuY3Rpb24gaShlKXt0aGlzLnJhbmQ9ZX1pZihlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG58fChuPW5ldyBpKG51bGwpKSxuLmdlbmVyYXRlKGUpfSxlLmV4cG9ydHMuUmFuZD1pLGkucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yYW5kKGUpfSxpLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihlKXtpZih0aGlzLnJhbmQuZ2V0Qnl0ZXMpcmV0dXJuIHRoaXMucmFuZC5nZXRCeXRlcyhlKTtmb3IodmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZSkscj0wO3I8dC5sZW5ndGg7cisrKXRbcl09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gdH0sXCJvYmplY3RcIj09dHlwZW9mIHNlbGYpc2VsZi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9pLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgVWludDhBcnJheShlKTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHQpLHR9OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP2kucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBVaW50OEFycmF5KGUpO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyh0KSx0fTpcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiYoaS5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWQgeWV0XCIpfSk7ZWxzZSB0cnl7dmFyIG89cigxNTUpO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIG8ucmFuZG9tQnl0ZXMpdGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZFwiKTtpLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihlKXtyZXR1cm4gby5yYW5kb21CeXRlcyhlKX19Y2F0Y2goZSl7fX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQ7bi5iYXNlPXIoMjYpLG4uc2hvcnQ9cigxNTYpLG4ubW9udD1yKDE1Nyksbi5lZHdhcmRzPXIoMTU4KX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoOCkucm90cjMyO2Z1bmN0aW9uIGkoZSx0LHIpe3JldHVybiBlJnRefmUmcn1mdW5jdGlvbiBvKGUsdCxyKXtyZXR1cm4gZSZ0XmUmcl50JnJ9ZnVuY3Rpb24gYShlLHQscil7cmV0dXJuIGVedF5yfXQuZnRfMT1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gMD09PWU/aSh0LHIsbik6MT09PWV8fDM9PT1lP2EodCxyLG4pOjI9PT1lP28odCxyLG4pOnZvaWQgMH0sdC5jaDMyPWksdC5tYWozMj1vLHQucDMyPWEsdC5zMF8yNTY9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSwyKV5uKGUsMTMpXm4oZSwyMil9LHQuczFfMjU2PWZ1bmN0aW9uKGUpe3JldHVybiBuKGUsNilebihlLDExKV5uKGUsMjUpfSx0LmcwXzI1Nj1mdW5jdGlvbihlKXtyZXR1cm4gbihlLDcpXm4oZSwxOCleZT4+PjN9LHQuZzFfMjU2PWZ1bmN0aW9uKGUpe3JldHVybiBuKGUsMTcpXm4oZSwxOSleZT4+PjEwfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoOCksaT1yKDIxKSxvPXIoNzUpLGE9cigxMikscz1uLnN1bTMyLGY9bi5zdW0zMl80LHU9bi5zdW0zMl81LGM9by5jaDMyLGg9by5tYWozMixkPW8uczBfMjU2LGw9by5zMV8yNTYscD1vLmcwXzI1NixiPW8uZzFfMjU2LHk9aS5CbG9ja0hhc2gsZz1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtmdW5jdGlvbiB2KCl7aWYoISh0aGlzIGluc3RhbmNlb2YgdikpcmV0dXJuIG5ldyB2O3kuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSx0aGlzLms9Zyx0aGlzLlc9bmV3IEFycmF5KDY0KX1uLmluaGVyaXRzKHYseSksZS5leHBvcnRzPXYsdi5ibG9ja1NpemU9NTEyLHYub3V0U2l6ZT0yNTYsdi5obWFjU3RyZW5ndGg9MTkyLHYucGFkTGVuZ3RoPTY0LHYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dGhpcy5XLG49MDtuPDE2O24rKylyW25dPWVbdCtuXTtmb3IoO248ci5sZW5ndGg7bisrKXJbbl09ZihiKHJbbi0yXSkscltuLTddLHAocltuLTE1XSkscltuLTE2XSk7dmFyIGk9dGhpcy5oWzBdLG89dGhpcy5oWzFdLHk9dGhpcy5oWzJdLGc9dGhpcy5oWzNdLHY9dGhpcy5oWzRdLG09dGhpcy5oWzVdLHc9dGhpcy5oWzZdLF89dGhpcy5oWzddO2ZvcihhKHRoaXMuay5sZW5ndGg9PT1yLmxlbmd0aCksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgRT11KF8sbCh2KSxjKHYsbSx3KSx0aGlzLmtbbl0scltuXSksUz1zKGQoaSksaChpLG8seSkpO189dyx3PW0sbT12LHY9cyhnLEUpLGc9eSx5PW8sbz1pLGk9cyhFLFMpfXRoaXMuaFswXT1zKHRoaXMuaFswXSxpKSx0aGlzLmhbMV09cyh0aGlzLmhbMV0sbyksdGhpcy5oWzJdPXModGhpcy5oWzJdLHkpLHRoaXMuaFszXT1zKHRoaXMuaFszXSxnKSx0aGlzLmhbNF09cyh0aGlzLmhbNF0sdiksdGhpcy5oWzVdPXModGhpcy5oWzVdLG0pLHRoaXMuaFs2XT1zKHRoaXMuaFs2XSx3KSx0aGlzLmhbN109cyh0aGlzLmhbN10sXyl9LHYucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuXCJoZXhcIj09PWU/bi50b0hleDMyKHRoaXMuaCxcImJpZ1wiKTpuLnNwbGl0MzIodGhpcy5oLFwiYmlnXCIpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoOCksaT1yKDIxKSxvPXIoMTIpLGE9bi5yb3RyNjRfaGkscz1uLnJvdHI2NF9sbyxmPW4uc2hyNjRfaGksdT1uLnNocjY0X2xvLGM9bi5zdW02NCxoPW4uc3VtNjRfaGksZD1uLnN1bTY0X2xvLGw9bi5zdW02NF80X2hpLHA9bi5zdW02NF80X2xvLGI9bi5zdW02NF81X2hpLHk9bi5zdW02NF81X2xvLGc9aS5CbG9ja0hhc2gsdj1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIG0oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBtKSlyZXR1cm4gbmV3IG07Zy5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPXYsdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIHcoZSx0LHIsbixpKXt2YXIgbz1lJnJefmUmaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBfKGUsdCxyLG4saSxvKXt2YXIgYT10Jm5efnQmbztyZXR1cm4gYTwwJiYoYSs9NDI5NDk2NzI5NiksYX1mdW5jdGlvbiBFKGUsdCxyLG4saSl7dmFyIG89ZSZyXmUmaV5yJmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gUyhlLHQscixuLGksbyl7dmFyIGE9dCZuXnQmb15uJm87cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24gQShlLHQpe3ZhciByPWEoZSx0LDI4KV5hKHQsZSwyKV5hKHQsZSw3KTtyZXR1cm4gcjwwJiYocis9NDI5NDk2NzI5Nikscn1mdW5jdGlvbiB4KGUsdCl7dmFyIHI9cyhlLHQsMjgpXnModCxlLDIpXnModCxlLDcpO3JldHVybiByPDAmJihyKz00Mjk0OTY3Mjk2KSxyfWZ1bmN0aW9uIGsoZSx0KXt2YXIgcj1hKGUsdCwxNCleYShlLHQsMTgpXmEodCxlLDkpO3JldHVybiByPDAmJihyKz00Mjk0OTY3Mjk2KSxyfWZ1bmN0aW9uIE0oZSx0KXt2YXIgcj1zKGUsdCwxNClecyhlLHQsMTgpXnModCxlLDkpO3JldHVybiByPDAmJihyKz00Mjk0OTY3Mjk2KSxyfWZ1bmN0aW9uIFQoZSx0KXt2YXIgcj1hKGUsdCwxKV5hKGUsdCw4KV5mKGUsdCw3KTtyZXR1cm4gcjwwJiYocis9NDI5NDk2NzI5Nikscn1mdW5jdGlvbiBJKGUsdCl7dmFyIHI9cyhlLHQsMSlecyhlLHQsOCledShlLHQsNyk7cmV0dXJuIHI8MCYmKHIrPTQyOTQ5NjcyOTYpLHJ9ZnVuY3Rpb24gUihlLHQpe3ZhciByPWEoZSx0LDE5KV5hKHQsZSwyOSleZihlLHQsNik7cmV0dXJuIHI8MCYmKHIrPTQyOTQ5NjcyOTYpLHJ9ZnVuY3Rpb24gUChlLHQpe3ZhciByPXMoZSx0LDE5KV5zKHQsZSwyOSledShlLHQsNik7cmV0dXJuIHI8MCYmKHIrPTQyOTQ5NjcyOTYpLHJ9bi5pbmhlcml0cyhtLGcpLGUuZXhwb3J0cz1tLG0uYmxvY2tTaXplPTEwMjQsbS5vdXRTaXplPTUxMixtLmhtYWNTdHJlbmd0aD0xOTIsbS5wYWRMZW5ndGg9MTI4LG0ucHJvdG90eXBlLl9wcmVwYXJlQmxvY2s9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dGhpcy5XLG49MDtuPDMyO24rKylyW25dPWVbdCtuXTtmb3IoO248ci5sZW5ndGg7bis9Mil7dmFyIGk9UihyW24tNF0scltuLTNdKSxvPVAocltuLTRdLHJbbi0zXSksYT1yW24tMTRdLHM9cltuLTEzXSxmPVQocltuLTMwXSxyW24tMjldKSx1PUkocltuLTMwXSxyW24tMjldKSxjPXJbbi0zMl0saD1yW24tMzFdO3Jbbl09bChpLG8sYSxzLGYsdSxjLGgpLHJbbisxXT1wKGksbyxhLHMsZix1LGMsaCl9fSxtLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUsdCl7dGhpcy5fcHJlcGFyZUJsb2NrKGUsdCk7dmFyIHI9dGhpcy5XLG49dGhpcy5oWzBdLGk9dGhpcy5oWzFdLGE9dGhpcy5oWzJdLHM9dGhpcy5oWzNdLGY9dGhpcy5oWzRdLHU9dGhpcy5oWzVdLGw9dGhpcy5oWzZdLHA9dGhpcy5oWzddLGc9dGhpcy5oWzhdLHY9dGhpcy5oWzldLG09dGhpcy5oWzEwXSxUPXRoaXMuaFsxMV0sST10aGlzLmhbMTJdLFI9dGhpcy5oWzEzXSxQPXRoaXMuaFsxNF0sTD10aGlzLmhbMTVdO28odGhpcy5rLmxlbmd0aD09PXIubGVuZ3RoKTtmb3IodmFyIEI9MDtCPHIubGVuZ3RoO0IrPTIpe3ZhciBDPVAsTz1MLE49ayhnLHYpLGo9TShnLHYpLEQ9dyhnLHYsbSxULEkpLFU9XyhnLHYsbSxULEksUiksej10aGlzLmtbQl0scT10aGlzLmtbQisxXSxGPXJbQl0sSz1yW0IrMV0sSD1iKEMsTyxOLGosRCxVLHoscSxGLEspLFY9eShDLE8sTixqLEQsVSx6LHEsRixLKTtDPUEobixpKSxPPXgobixpKSxOPUUobixpLGEscyxmKSxqPVMobixpLGEscyxmLHUpO3ZhciBZPWgoQyxPLE4saiksVz1kKEMsTyxOLGopO1A9SSxMPVIsST1tLFI9VCxtPWcsVD12LGc9aChsLHAsSCxWKSx2PWQocCxwLEgsViksbD1mLHA9dSxmPWEsdT1zLGE9bixzPWksbj1oKEgsVixZLFcpLGk9ZChILFYsWSxXKX1jKHRoaXMuaCwwLG4saSksYyh0aGlzLmgsMixhLHMpLGModGhpcy5oLDQsZix1KSxjKHRoaXMuaCw2LGwscCksYyh0aGlzLmgsOCxnLHYpLGModGhpcy5oLDEwLG0sVCksYyh0aGlzLmgsMTIsSSxSKSxjKHRoaXMuaCwxNCxQLEwpfSxtLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGUpe3JldHVyblwiaGV4XCI9PT1lP24udG9IZXgzMih0aGlzLmgsXCJiaWdcIik6bi5zcGxpdDMyKHRoaXMuaCxcImJpZ1wiKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24odCl7dmFyIG49cigxNzMpO1xuLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL2Z1bmN0aW9uIGkoZSx0KXtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIHI9ZS5sZW5ndGgsbj10Lmxlbmd0aCxpPTAsbz1NYXRoLm1pbihyLG4pO2k8bzsrK2kpaWYoZVtpXSE9PXRbaV0pe3I9ZVtpXSxuPXRbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIHQuQnVmZmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LkJ1ZmZlci5pc0J1ZmZlcj90LkJ1ZmZlci5pc0J1ZmZlcihlKTohKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9dmFyIGE9cigxMCkscz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGY9QXJyYXkucHJvdG90eXBlLnNsaWNlLHU9XCJmb29cIj09PWZ1bmN0aW9uKCl7fS5uYW1lO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1mdW5jdGlvbiBoKGUpe3JldHVybiFvKGUpJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC5BcnJheUJ1ZmZlciYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ISFlJiYoZSBpbnN0YW5jZW9mIERhdGFWaWV3fHwhIShlLmJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpKSl9dmFyIGQ9ZS5leHBvcnRzPXYsbD0vXFxzKmZ1bmN0aW9uXFxzKyhbXlxcKFxcc10qKVxccyovO2Z1bmN0aW9uIHAoZSl7aWYoYS5pc0Z1bmN0aW9uKGUpKXtpZih1KXJldHVybiBlLm5hbWU7dmFyIHQ9ZS50b1N0cmluZygpLm1hdGNoKGwpO3JldHVybiB0JiZ0WzFdfX1mdW5jdGlvbiBiKGUsdCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/ZS5sZW5ndGg8dD9lOmUuc2xpY2UoMCx0KTplfWZ1bmN0aW9uIHkoZSl7aWYodXx8IWEuaXNGdW5jdGlvbihlKSlyZXR1cm4gYS5pbnNwZWN0KGUpO3ZhciB0PXAoZSk7cmV0dXJuXCJbRnVuY3Rpb25cIisodD9cIjogXCIrdDpcIlwiKStcIl1cIn1mdW5jdGlvbiBnKGUsdCxyLG4saSl7dGhyb3cgbmV3IGQuQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6cixhY3R1YWw6ZSxleHBlY3RlZDp0LG9wZXJhdG9yOm4sc3RhY2tTdGFydEZ1bmN0aW9uOml9KX1mdW5jdGlvbiB2KGUsdCl7ZXx8ZyhlLCEwLHQsXCI9PVwiLGQub2spfWZ1bmN0aW9uIG0oZSx0LHIsbil7aWYoZT09PXQpcmV0dXJuITA7aWYobyhlKSYmbyh0KSlyZXR1cm4gMD09PWkoZSx0KTtpZihhLmlzRGF0ZShlKSYmYS5pc0RhdGUodCkpcmV0dXJuIGUuZ2V0VGltZSgpPT09dC5nZXRUaW1lKCk7aWYoYS5pc1JlZ0V4cChlKSYmYS5pc1JlZ0V4cCh0KSlyZXR1cm4gZS5zb3VyY2U9PT10LnNvdXJjZSYmZS5nbG9iYWw9PT10Lmdsb2JhbCYmZS5tdWx0aWxpbmU9PT10Lm11bHRpbGluZSYmZS5sYXN0SW5kZXg9PT10Lmxhc3RJbmRleCYmZS5pZ25vcmVDYXNlPT09dC5pZ25vcmVDYXNlO2lmKG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZXx8bnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0KXtpZihoKGUpJiZoKHQpJiZjKGUpPT09Yyh0KSYmIShlIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHxlIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSlyZXR1cm4gMD09PWkobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSk7aWYobyhlKSE9PW8odCkpcmV0dXJuITE7dmFyIHM9KG49bnx8e2FjdHVhbDpbXSxleHBlY3RlZDpbXX0pLmFjdHVhbC5pbmRleE9mKGUpO3JldHVybi0xIT09cyYmcz09PW4uZXhwZWN0ZWQuaW5kZXhPZih0KXx8KG4uYWN0dWFsLnB1c2goZSksbi5leHBlY3RlZC5wdXNoKHQpLGZ1bmN0aW9uKGUsdCxyLG4pe2lmKG51bGw9PWV8fG51bGw9PXQpcmV0dXJuITE7aWYoYS5pc1ByaW1pdGl2ZShlKXx8YS5pc1ByaW1pdGl2ZSh0KSlyZXR1cm4gZT09PXQ7aWYociYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKXJldHVybiExO3ZhciBpPXcoZSksbz13KHQpO2lmKGkmJiFvfHwhaSYmbylyZXR1cm4hMTtpZihpKXJldHVybiBlPWYuY2FsbChlKSx0PWYuY2FsbCh0KSxtKGUsdCxyKTt2YXIgcyx1LGM9UyhlKSxoPVModCk7aWYoYy5sZW5ndGghPT1oLmxlbmd0aClyZXR1cm4hMTtmb3IoYy5zb3J0KCksaC5zb3J0KCksdT1jLmxlbmd0aC0xO3U+PTA7dS0tKWlmKGNbdV0hPT1oW3VdKXJldHVybiExO2Zvcih1PWMubGVuZ3RoLTE7dT49MDt1LS0paWYocz1jW3VdLCFtKGVbc10sdFtzXSxyLG4pKXJldHVybiExO3JldHVybiEwfShlLHQscixuKSl9cmV0dXJuIHI/ZT09PXQ6ZT09dH1mdW5jdGlvbiB3KGUpe3JldHVyblwiW29iamVjdCBBcmd1bWVudHNdXCI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1mdW5jdGlvbiBfKGUsdCl7aWYoIWV8fCF0KXJldHVybiExO2lmKFwiW29iamVjdCBSZWdFeHBdXCI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSlyZXR1cm4gdC50ZXN0KGUpO3RyeXtpZihlIGluc3RhbmNlb2YgdClyZXR1cm4hMH1jYXRjaChlKXt9cmV0dXJuIUVycm9yLmlzUHJvdG90eXBlT2YodCkmJiEwPT09dC5jYWxsKHt9LGUpfWZ1bmN0aW9uIEUoZSx0LHIsbil7dmFyIGk7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XCJzdHJpbmdcIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxpPWZ1bmN0aW9uKGUpe3ZhciB0O3RyeXtlKCl9Y2F0Y2goZSl7dD1lfXJldHVybiB0fSh0KSxuPShyJiZyLm5hbWU/XCIgKFwiK3IubmFtZStcIikuXCI6XCIuXCIpKyhuP1wiIFwiK246XCIuXCIpLGUmJiFpJiZnKGkscixcIk1pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uXCIrbik7dmFyIG89XCJzdHJpbmdcIj09dHlwZW9mIG4scz0hZSYmaSYmIXI7aWYoKCFlJiZhLmlzRXJyb3IoaSkmJm8mJl8oaSxyKXx8cykmJmcoaSxyLFwiR290IHVud2FudGVkIGV4Y2VwdGlvblwiK24pLGUmJmkmJnImJiFfKGkscil8fCFlJiZpKXRocm93IGl9ZC5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbihlKXt0aGlzLm5hbWU9XCJBc3NlcnRpb25FcnJvclwiLHRoaXMuYWN0dWFsPWUuYWN0dWFsLHRoaXMuZXhwZWN0ZWQ9ZS5leHBlY3RlZCx0aGlzLm9wZXJhdG9yPWUub3BlcmF0b3IsZS5tZXNzYWdlPyh0aGlzLm1lc3NhZ2U9ZS5tZXNzYWdlLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMSk6KHRoaXMubWVzc2FnZT1mdW5jdGlvbihlKXtyZXR1cm4gYih5KGUuYWN0dWFsKSwxMjgpK1wiIFwiK2Uub3BlcmF0b3IrXCIgXCIrYih5KGUuZXhwZWN0ZWQpLDEyOCl9KHRoaXMpLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMCk7dmFyIHQ9ZS5zdGFja1N0YXJ0RnVuY3Rpb258fGc7aWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0KTtlbHNle3ZhciByPW5ldyBFcnJvcjtpZihyLnN0YWNrKXt2YXIgbj1yLnN0YWNrLGk9cCh0KSxvPW4uaW5kZXhPZihcIlxcblwiK2kpO2lmKG8+PTApe3ZhciBhPW4uaW5kZXhPZihcIlxcblwiLG8rMSk7bj1uLnN1YnN0cmluZyhhKzEpfXRoaXMuc3RhY2s9bn19fSxhLmluaGVyaXRzKGQuQXNzZXJ0aW9uRXJyb3IsRXJyb3IpLGQuZmFpbD1nLGQub2s9dixkLmVxdWFsPWZ1bmN0aW9uKGUsdCxyKXtlIT10JiZnKGUsdCxyLFwiPT1cIixkLmVxdWFsKX0sZC5ub3RFcXVhbD1mdW5jdGlvbihlLHQscil7ZT09dCYmZyhlLHQscixcIiE9XCIsZC5ub3RFcXVhbCl9LGQuZGVlcEVxdWFsPWZ1bmN0aW9uKGUsdCxyKXttKGUsdCwhMSl8fGcoZSx0LHIsXCJkZWVwRXF1YWxcIixkLmRlZXBFcXVhbCl9LGQuZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uKGUsdCxyKXttKGUsdCwhMCl8fGcoZSx0LHIsXCJkZWVwU3RyaWN0RXF1YWxcIixkLmRlZXBTdHJpY3RFcXVhbCl9LGQubm90RGVlcEVxdWFsPWZ1bmN0aW9uKGUsdCxyKXttKGUsdCwhMSkmJmcoZSx0LHIsXCJub3REZWVwRXF1YWxcIixkLm5vdERlZXBFcXVhbCl9LGQubm90RGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIGUodCxyLG4pe20odCxyLCEwKSYmZyh0LHIsbixcIm5vdERlZXBTdHJpY3RFcXVhbFwiLGUpfSxkLnN0cmljdEVxdWFsPWZ1bmN0aW9uKGUsdCxyKXtlIT09dCYmZyhlLHQscixcIj09PVwiLGQuc3RyaWN0RXF1YWwpfSxkLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uKGUsdCxyKXtlPT09dCYmZyhlLHQscixcIiE9PVwiLGQubm90U3RyaWN0RXF1YWwpfSxkLnRocm93cz1mdW5jdGlvbihlLHQscil7RSghMCxlLHQscil9LGQuZG9lc05vdFRocm93PWZ1bmN0aW9uKGUsdCxyKXtFKCExLGUsdCxyKX0sZC5pZkVycm9yPWZ1bmN0aW9uKGUpe2lmKGUpdGhyb3cgZX0sZC5zdHJpY3Q9bigoZnVuY3Rpb24gZSh0LHIpe3R8fGcodCwhMCxyLFwiPT1cIixlKX0pLGQse2VxdWFsOmQuc3RyaWN0RXF1YWwsZGVlcEVxdWFsOmQuZGVlcFN0cmljdEVxdWFsLG5vdEVxdWFsOmQubm90U3RyaWN0RXF1YWwsbm90RGVlcEVxdWFsOmQubm90RGVlcFN0cmljdEVxdWFsfSksZC5zdHJpY3Quc3RyaWN0PWQuc3RyaWN0O3ZhciBTPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSlzLmNhbGwoZSxyKSYmdC5wdXNoKHIpO3JldHVybiB0fX0pLmNhbGwodGhpcyxyKDUpKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmdldExlbmd0aD10LmRlY29kZT10LmVuY29kZT12b2lkIDA7dmFyIG49cig0KTtmdW5jdGlvbiBpKGUsdCl7aWYoXCIwMFwiPT09ZS5zbGljZSgwLDIpKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgUkxQOiBleHRyYSB6ZXJvc1wiKTtyZXR1cm4gcGFyc2VJbnQoZSx0KX1mdW5jdGlvbiBvKHQscil7aWYodDw1NilyZXR1cm4gZS5mcm9tKFt0K3JdKTt2YXIgbj1zKHQpLGk9cyhyKzU1K24ubGVuZ3RoLzIpO3JldHVybiBlLmZyb20oaStuLFwiaGV4XCIpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuXCIweFwiPT09ZS5zbGljZSgwLDIpfWZ1bmN0aW9uIHMoZSl7aWYoZTwwKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW50ZWdlciBhcyBhcmd1bWVudCwgbXVzdCBiZSB1bnNpZ25lZCFcIik7dmFyIHQ9ZS50b1N0cmluZygxNik7cmV0dXJuIHQubGVuZ3RoJTI/XCIwXCIrdDp0fWZ1bmN0aW9uIGYodCl7aWYoIWUuaXNCdWZmZXIodCkpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXJldHVybiBhKHQpP2UuZnJvbSgoaT1cInN0cmluZ1wiIT10eXBlb2Yobz10KT9vOmEobyk/by5zbGljZSgyKTpvKS5sZW5ndGglMj9cIjBcIitpOmksXCJoZXhcIik6ZS5mcm9tKHQpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0fHxcImJpZ2ludFwiPT10eXBlb2YgdClyZXR1cm4gdD8ocj1zKHQpLGUuZnJvbShyLFwiaGV4XCIpKTplLmZyb20oW10pO2lmKG51bGw9PXQpcmV0dXJuIGUuZnJvbShbXSk7aWYodCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIGUuZnJvbSh0KTtpZihuLmlzQk4odCkpcmV0dXJuIGUuZnJvbSh0LnRvQXJyYXkoKSk7dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCB0eXBlXCIpfXZhciByLGksbztyZXR1cm4gdH10LmVuY29kZT1mdW5jdGlvbiB0KHIpe2lmKEFycmF5LmlzQXJyYXkocikpe2Zvcih2YXIgbj1bXSxpPTA7aTxyLmxlbmd0aDtpKyspbi5wdXNoKHQocltpXSkpO3ZhciBhPWUuY29uY2F0KG4pO3JldHVybiBlLmNvbmNhdChbbyhhLmxlbmd0aCwxOTIpLGFdKX12YXIgcz1mKHIpO3JldHVybiAxPT09cy5sZW5ndGgmJnNbMF08MTI4P3M6ZS5jb25jYXQoW28ocy5sZW5ndGgsMTI4KSxzXSl9LHQuZGVjb2RlPWZ1bmN0aW9uKHQscil7aWYodm9pZCAwPT09ciYmKHI9ITEpLCF0fHwwPT09dC5sZW5ndGgpcmV0dXJuIGUuZnJvbShbXSk7dmFyIG49ZnVuY3Rpb24gdChyKXt2YXIgbixvLGEscyxmLHU9W10sYz1yWzBdO2lmKGM8PTEyNylyZXR1cm57ZGF0YTpyLnNsaWNlKDAsMSkscmVtYWluZGVyOnIuc2xpY2UoMSl9O2lmKGM8PTE4Myl7aWYobj1jLTEyNyxhPTEyOD09PWM/ZS5mcm9tKFtdKTpyLnNsaWNlKDEsbiksMj09PW4mJmFbMF08MTI4KXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcmxwIGVuY29kaW5nOiBieXRlIG11c3QgYmUgbGVzcyAweDgwXCIpO3JldHVybntkYXRhOmEscmVtYWluZGVyOnIuc2xpY2Uobil9fWlmKGM8PTE5MSl7aWYobz1jLTE4MixyLmxlbmd0aC0xPG8pdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBSTFA6IG5vdCBlbm91Z2ggYnl0ZXMgZm9yIHN0cmluZyBsZW5ndGhcIik7aWYoKG49aShyLnNsaWNlKDEsbykudG9TdHJpbmcoXCJoZXhcIiksMTYpKTw9NTUpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBSTFA6IGV4cGVjdGVkIHN0cmluZyBsZW5ndGggdG8gYmUgZ3JlYXRlciB0aGFuIDU1XCIpO2lmKChhPXIuc2xpY2UobyxuK28pKS5sZW5ndGg8bil0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIFJMUDogbm90IGVub3VnaCBieXRlcyBmb3Igc3RyaW5nXCIpO3JldHVybntkYXRhOmEscmVtYWluZGVyOnIuc2xpY2UobitvKX19aWYoYzw9MjQ3KXtmb3Iobj1jLTE5MSxzPXIuc2xpY2UoMSxuKTtzLmxlbmd0aDspZj10KHMpLHUucHVzaChmLmRhdGEpLHM9Zi5yZW1haW5kZXI7cmV0dXJue2RhdGE6dSxyZW1haW5kZXI6ci5zbGljZShuKX19bz1jLTI0NixuPWkoci5zbGljZSgxLG8pLnRvU3RyaW5nKFwiaGV4XCIpLDE2KTt2YXIgaD1vK247aWYoaD5yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHJscDogdG90YWwgbGVuZ3RoIGlzIGxhcmdlciB0aGFuIHRoZSBkYXRhXCIpO2lmKDA9PT0ocz1yLnNsaWNlKG8saCkpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHJscCwgTGlzdCBoYXMgYSBpbnZhbGlkIGxlbmd0aFwiKTtmb3IoO3MubGVuZ3RoOylmPXQocyksdS5wdXNoKGYuZGF0YSkscz1mLnJlbWFpbmRlcjtyZXR1cm57ZGF0YTp1LHJlbWFpbmRlcjpyLnNsaWNlKGgpfX0oZih0KSk7aWYocilyZXR1cm4gbjtpZigwIT09bi5yZW1haW5kZXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcmVtYWluZGVyXCIpO3JldHVybiBuLmRhdGF9LHQuZ2V0TGVuZ3RoPWZ1bmN0aW9uKHQpe2lmKCF0fHwwPT09dC5sZW5ndGgpcmV0dXJuIGUuZnJvbShbXSk7dmFyIHI9Zih0KSxuPXJbMF07aWYobjw9MTI3KXJldHVybiByLmxlbmd0aDtpZihuPD0xODMpcmV0dXJuIG4tMTI3O2lmKG48PTE5MSlyZXR1cm4gbi0xODI7aWYobjw9MjQ3KXJldHVybiBuLTE5MTt2YXIgbz1uLTI0NjtyZXR1cm4gbytpKHIuc2xpY2UoMSxvKS50b1N0cmluZyhcImhleFwiKSwxNil9fSkuY2FsbCh0aGlzLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKFwiW2lzLWhleC1wcmVmaXhlZF0gdmFsdWUgbXVzdCBiZSB0eXBlICdzdHJpbmcnLCBpcyBjdXJyZW50bHkgdHlwZSBcIit0eXBlb2YgZStcIiwgd2hpbGUgY2hlY2tpbmcgaXNIZXhQcmVmaXhlZC5cIik7cmV0dXJuXCIweFwiPT09ZS5zbGljZSgwLDIpfX0sZnVuY3Rpb24oZSx0LHIpe2NvbnN0IG49cig0MCksaT1yKDE3OCkoKTtmdW5jdGlvbiBvKGUpe3RoaXMuY3VycmVudFByb3ZpZGVyPWV9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCB0PXRoaXM7dmFyIHI9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLG49ci5wb3AoKTt0LnNlbmRBc3luYyh7bWV0aG9kOmUscGFyYW1zOnJ9LG4pfX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3Qgcj10aGlzO3ZhciBuPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxpPW4ucG9wKCk7bi5sZW5ndGg8ZSYmbi5wdXNoKFwibGF0ZXN0XCIpLHIuc2VuZEFzeW5jKHttZXRob2Q6dCxwYXJhbXM6bn0saSl9fWUuZXhwb3J0cz1vLG8ucHJvdG90eXBlLmdldEJhbGFuY2U9cygyLFwiZXRoX2dldEJhbGFuY2VcIiksby5wcm90b3R5cGUuZ2V0Q29kZT1zKDIsXCJldGhfZ2V0Q29kZVwiKSxvLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkNvdW50PXMoMixcImV0aF9nZXRUcmFuc2FjdGlvbkNvdW50XCIpLG8ucHJvdG90eXBlLmdldFN0b3JhZ2VBdD1zKDMsXCJldGhfZ2V0U3RvcmFnZUF0XCIpLG8ucHJvdG90eXBlLmNhbGw9cygyLFwiZXRoX2NhbGxcIiksby5wcm90b3R5cGUucHJvdG9jb2xWZXJzaW9uPWEoXCJldGhfcHJvdG9jb2xWZXJzaW9uXCIpLG8ucHJvdG90eXBlLnN5bmNpbmc9YShcImV0aF9zeW5jaW5nXCIpLG8ucHJvdG90eXBlLmNvaW5iYXNlPWEoXCJldGhfY29pbmJhc2VcIiksby5wcm90b3R5cGUubWluaW5nPWEoXCJldGhfbWluaW5nXCIpLG8ucHJvdG90eXBlLmhhc2hyYXRlPWEoXCJldGhfaGFzaHJhdGVcIiksby5wcm90b3R5cGUuZ2FzUHJpY2U9YShcImV0aF9nYXNQcmljZVwiKSxvLnByb3RvdHlwZS5hY2NvdW50cz1hKFwiZXRoX2FjY291bnRzXCIpLG8ucHJvdG90eXBlLmJsb2NrTnVtYmVyPWEoXCJldGhfYmxvY2tOdW1iZXJcIiksby5wcm90b3R5cGUuZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlIYXNoPWEoXCJldGhfZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlIYXNoXCIpLG8ucHJvdG90eXBlLmdldEJsb2NrVHJhbnNhY3Rpb25Db3VudEJ5TnVtYmVyPWEoXCJldGhfZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlOdW1iZXJcIiksby5wcm90b3R5cGUuZ2V0VW5jbGVDb3VudEJ5QmxvY2tIYXNoPWEoXCJldGhfZ2V0VW5jbGVDb3VudEJ5QmxvY2tIYXNoXCIpLG8ucHJvdG90eXBlLmdldFVuY2xlQ291bnRCeUJsb2NrTnVtYmVyPWEoXCJldGhfZ2V0VW5jbGVDb3VudEJ5QmxvY2tOdW1iZXJcIiksby5wcm90b3R5cGUuc2lnbj1hKFwiZXRoX3NpZ25cIiksby5wcm90b3R5cGUuc2VuZFRyYW5zYWN0aW9uPWEoXCJldGhfc2VuZFRyYW5zYWN0aW9uXCIpLG8ucHJvdG90eXBlLnNlbmRSYXdUcmFuc2FjdGlvbj1hKFwiZXRoX3NlbmRSYXdUcmFuc2FjdGlvblwiKSxvLnByb3RvdHlwZS5lc3RpbWF0ZUdhcz1hKFwiZXRoX2VzdGltYXRlR2FzXCIpLG8ucHJvdG90eXBlLmdldEJsb2NrQnlIYXNoPWEoXCJldGhfZ2V0QmxvY2tCeUhhc2hcIiksby5wcm90b3R5cGUuZ2V0QmxvY2tCeU51bWJlcj1hKFwiZXRoX2dldEJsb2NrQnlOdW1iZXJcIiksby5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25CeUhhc2g9YShcImV0aF9nZXRUcmFuc2FjdGlvbkJ5SGFzaFwiKSxvLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkJ5QmxvY2tIYXNoQW5kSW5kZXg9YShcImV0aF9nZXRUcmFuc2FjdGlvbkJ5QmxvY2tIYXNoQW5kSW5kZXhcIiksby5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25CeUJsb2NrTnVtYmVyQW5kSW5kZXg9YShcImV0aF9nZXRUcmFuc2FjdGlvbkJ5QmxvY2tOdW1iZXJBbmRJbmRleFwiKSxvLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvblJlY2VpcHQ9YShcImV0aF9nZXRUcmFuc2FjdGlvblJlY2VpcHRcIiksby5wcm90b3R5cGUuZ2V0VW5jbGVCeUJsb2NrSGFzaEFuZEluZGV4PWEoXCJldGhfZ2V0VW5jbGVCeUJsb2NrSGFzaEFuZEluZGV4XCIpLG8ucHJvdG90eXBlLmdldFVuY2xlQnlCbG9ja051bWJlckFuZEluZGV4PWEoXCJldGhfZ2V0VW5jbGVCeUJsb2NrTnVtYmVyQW5kSW5kZXhcIiksby5wcm90b3R5cGUuZ2V0Q29tcGlsZXJzPWEoXCJldGhfZ2V0Q29tcGlsZXJzXCIpLG8ucHJvdG90eXBlLmNvbXBpbGVMTEw9YShcImV0aF9jb21waWxlTExMXCIpLG8ucHJvdG90eXBlLmNvbXBpbGVTb2xpZGl0eT1hKFwiZXRoX2NvbXBpbGVTb2xpZGl0eVwiKSxvLnByb3RvdHlwZS5jb21waWxlU2VycGVudD1hKFwiZXRoX2NvbXBpbGVTZXJwZW50XCIpLG8ucHJvdG90eXBlLm5ld0ZpbHRlcj1hKFwiZXRoX25ld0ZpbHRlclwiKSxvLnByb3RvdHlwZS5uZXdCbG9ja0ZpbHRlcj1hKFwiZXRoX25ld0Jsb2NrRmlsdGVyXCIpLG8ucHJvdG90eXBlLm5ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlcj1hKFwiZXRoX25ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlclwiKSxvLnByb3RvdHlwZS51bmluc3RhbGxGaWx0ZXI9YShcImV0aF91bmluc3RhbGxGaWx0ZXJcIiksby5wcm90b3R5cGUuZ2V0RmlsdGVyQ2hhbmdlcz1hKFwiZXRoX2dldEZpbHRlckNoYW5nZXNcIiksby5wcm90b3R5cGUuZ2V0RmlsdGVyTG9ncz1hKFwiZXRoX2dldEZpbHRlckxvZ3NcIiksby5wcm90b3R5cGUuZ2V0TG9ncz1hKFwiZXRoX2dldExvZ3NcIiksby5wcm90b3R5cGUuZ2V0V29yaz1hKFwiZXRoX2dldFdvcmtcIiksby5wcm90b3R5cGUuc3VibWl0V29yaz1hKFwiZXRoX3N1Ym1pdFdvcmtcIiksby5wcm90b3R5cGUuc3VibWl0SGFzaHJhdGU9YShcImV0aF9zdWJtaXRIYXNocmF0ZVwiKSxvLnByb3RvdHlwZS5zZW5kQXN5bmM9ZnVuY3Rpb24oZSx0KXt2YXIgcjt0aGlzLmN1cnJlbnRQcm92aWRlci5zZW5kQXN5bmMoKHI9ZSxuKHtpZDppKCksanNvbnJwYzpcIjIuMFwiLHBhcmFtczpbXX0scikpLChmdW5jdGlvbihlLHIpe2lmKCFlJiZyLmVycm9yJiYoZT1uZXcgRXJyb3IoXCJFdGhRdWVyeSAtIFJQQyBFcnJvciAtIFwiK3IuZXJyb3IubWVzc2FnZSkpLGUpcmV0dXJuIHQoZSk7dChudWxsLHIucmVzdWx0KX0pKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0LHIpeygoMCxuLmRlZmF1bHQpKGUpP2Q6bCkoZSwoMCxjLmRlZmF1bHQpKHQpLHIpfTt2YXIgbj1oKHIoMjcpKSxpPWgocig4OCkpLG89aChyKDE4NCkpLGE9aChyKDkxKSkscz1oKHIoMjIpKSxmPWgocig0MykpLHU9aChyKDQ1KSksYz1oKHIoMTMpKTtmdW5jdGlvbiBoKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBkKGUsdCxyKXtyPSgwLGYuZGVmYXVsdCkocnx8cy5kZWZhdWx0KTt2YXIgbj0wLG89MCxhPWUubGVuZ3RoO2Z1bmN0aW9uIGMoZSx0KXtlP3IoZSk6KytvIT09YSYmdCE9PWkuZGVmYXVsdHx8cihudWxsKX1mb3IoMD09PWEmJnIobnVsbCk7bjxhO24rKyl0KGVbbl0sbiwoMCx1LmRlZmF1bHQpKGMpKX12YXIgbD0oMCxhLmRlZmF1bHQpKG8uZGVmYXVsdCwxLzApO2UuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDg0KS5TeW1ib2w7ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDg1KSxpPVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixvPW58fGl8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtlLmV4cG9ydHM9b30sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbih0KXt2YXIgcj1cIm9iamVjdFwiPT10eXBlb2YgdCYmdCYmdC5PYmplY3Q9PT1PYmplY3QmJnQ7ZS5leHBvcnRzPXJ9KS5jYWxsKHRoaXMscig1KSl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBudWxsIT1lJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PTkwMDcxOTkyNTQ3NDA5OTF9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXt9LGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixmKXtpZihmPSgwLGkuZGVmYXVsdCkoZnx8bi5kZWZhdWx0KSxlPD0wfHwhdClyZXR1cm4gZihudWxsKTt2YXIgdT0oMCxvLmRlZmF1bHQpKHQpLGM9ITEsaD0wLGQ9ITE7ZnVuY3Rpb24gbChlLHQpe2lmKGgtPTEsZSljPSEwLGYoZSk7ZWxzZXtpZih0PT09cy5kZWZhdWx0fHxjJiZoPD0wKXJldHVybiBjPSEwLGYobnVsbCk7ZHx8cCgpfX1mdW5jdGlvbiBwKCl7Zm9yKGQ9ITA7aDxlJiYhYzspe3ZhciB0PXUoKTtpZihudWxsPT09dClyZXR1cm4gYz0hMCx2b2lkKGg8PTAmJmYobnVsbCkpO2grPTEscih0LnZhbHVlLHQua2V5LCgwLGEuZGVmYXVsdCkobCkpfWQ9ITF9cCgpfX07dmFyIG49ZihyKDIyKSksaT1mKHIoNDMpKSxvPWYocigxODUpKSxhPWYocig0NSkpLHM9ZihyKDg4KSk7ZnVuY3Rpb24gZihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0KXt2YXIgcj1BcnJheS5pc0FycmF5O2UuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZShyLHQsbixpKX19LGUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDkzKTtmdW5jdGlvbiBpKGUpe3JldHVyblwibmV2ZXJcIiE9PXMoZSl9ZnVuY3Rpb24gbyhlKXt2YXIgdD1hKGUpO3JldHVybiB0Pj1lLnBhcmFtcy5sZW5ndGg/ZS5wYXJhbXM6XCJldGhfZ2V0QmxvY2tCeU51bWJlclwiPT09ZS5tZXRob2Q/ZS5wYXJhbXMuc2xpY2UoMSk6ZS5wYXJhbXMuc2xpY2UoMCx0KX1mdW5jdGlvbiBhKGUpe3N3aXRjaChlLm1ldGhvZCl7Y2FzZVwiZXRoX2dldFN0b3JhZ2VBdFwiOnJldHVybiAyO2Nhc2VcImV0aF9nZXRCYWxhbmNlXCI6Y2FzZVwiZXRoX2dldENvZGVcIjpjYXNlXCJldGhfZ2V0VHJhbnNhY3Rpb25Db3VudFwiOmNhc2VcImV0aF9jYWxsXCI6Y2FzZVwiZXRoX2VzdGltYXRlR2FzXCI6cmV0dXJuIDE7Y2FzZVwiZXRoX2dldEJsb2NrQnlOdW1iZXJcIjpyZXR1cm4gMDtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gcyhlKXtzd2l0Y2goZS5tZXRob2Qpe2Nhc2VcIndlYjNfY2xpZW50VmVyc2lvblwiOmNhc2VcIndlYjNfc2hhM1wiOmNhc2VcImV0aF9wcm90b2NvbFZlcnNpb25cIjpjYXNlXCJldGhfZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlIYXNoXCI6Y2FzZVwiZXRoX2dldFVuY2xlQ291bnRCeUJsb2NrSGFzaFwiOmNhc2VcImV0aF9nZXRDb2RlXCI6Y2FzZVwiZXRoX2dldEJsb2NrQnlIYXNoXCI6Y2FzZVwiZXRoX2dldFRyYW5zYWN0aW9uQnlIYXNoXCI6Y2FzZVwiZXRoX2dldFRyYW5zYWN0aW9uQnlCbG9ja0hhc2hBbmRJbmRleFwiOmNhc2VcImV0aF9nZXRUcmFuc2FjdGlvblJlY2VpcHRcIjpjYXNlXCJldGhfZ2V0VW5jbGVCeUJsb2NrSGFzaEFuZEluZGV4XCI6Y2FzZVwiZXRoX2dldENvbXBpbGVyc1wiOmNhc2VcImV0aF9jb21waWxlTExMXCI6Y2FzZVwiZXRoX2NvbXBpbGVTb2xpZGl0eVwiOmNhc2VcImV0aF9jb21waWxlU2VycGVudFwiOmNhc2VcInNoaF92ZXJzaW9uXCI6cmV0dXJuXCJwZXJtYVwiO2Nhc2VcImV0aF9nZXRCbG9ja0J5TnVtYmVyXCI6Y2FzZVwiZXRoX2dldEJsb2NrVHJhbnNhY3Rpb25Db3VudEJ5TnVtYmVyXCI6Y2FzZVwiZXRoX2dldFVuY2xlQ291bnRCeUJsb2NrTnVtYmVyXCI6Y2FzZVwiZXRoX2dldFRyYW5zYWN0aW9uQnlCbG9ja051bWJlckFuZEluZGV4XCI6Y2FzZVwiZXRoX2dldFVuY2xlQnlCbG9ja051bWJlckFuZEluZGV4XCI6cmV0dXJuXCJmb3JrXCI7Y2FzZVwiZXRoX2dhc1ByaWNlXCI6Y2FzZVwiZXRoX2dldEJhbGFuY2VcIjpjYXNlXCJldGhfZ2V0U3RvcmFnZUF0XCI6Y2FzZVwiZXRoX2dldFRyYW5zYWN0aW9uQ291bnRcIjpjYXNlXCJldGhfY2FsbFwiOmNhc2VcImV0aF9lc3RpbWF0ZUdhc1wiOmNhc2VcImV0aF9nZXRGaWx0ZXJMb2dzXCI6Y2FzZVwiZXRoX2dldExvZ3NcIjpjYXNlXCJldGhfYmxvY2tOdW1iZXJcIjpyZXR1cm5cImJsb2NrXCI7Y2FzZVwibmV0X3ZlcnNpb25cIjpjYXNlXCJuZXRfcGVlckNvdW50XCI6Y2FzZVwibmV0X2xpc3RlbmluZ1wiOmNhc2VcImV0aF9zeW5jaW5nXCI6Y2FzZVwiZXRoX3NpZ25cIjpjYXNlXCJldGhfY29pbmJhc2VcIjpjYXNlXCJldGhfbWluaW5nXCI6Y2FzZVwiZXRoX2hhc2hyYXRlXCI6Y2FzZVwiZXRoX2FjY291bnRzXCI6Y2FzZVwiZXRoX3NlbmRUcmFuc2FjdGlvblwiOmNhc2VcImV0aF9zZW5kUmF3VHJhbnNhY3Rpb25cIjpjYXNlXCJldGhfbmV3RmlsdGVyXCI6Y2FzZVwiZXRoX25ld0Jsb2NrRmlsdGVyXCI6Y2FzZVwiZXRoX25ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlclwiOmNhc2VcImV0aF91bmluc3RhbGxGaWx0ZXJcIjpjYXNlXCJldGhfZ2V0RmlsdGVyQ2hhbmdlc1wiOmNhc2VcImV0aF9nZXRXb3JrXCI6Y2FzZVwiZXRoX3N1Ym1pdFdvcmtcIjpjYXNlXCJldGhfc3VibWl0SGFzaHJhdGVcIjpjYXNlXCJkYl9wdXRTdHJpbmdcIjpjYXNlXCJkYl9nZXRTdHJpbmdcIjpjYXNlXCJkYl9wdXRIZXhcIjpjYXNlXCJkYl9nZXRIZXhcIjpjYXNlXCJzaGhfcG9zdFwiOmNhc2VcInNoaF9uZXdJZGVudGl0eVwiOmNhc2VcInNoaF9oYXNJZGVudGl0eVwiOmNhc2VcInNoaF9uZXdHcm91cFwiOmNhc2VcInNoaF9hZGRUb0dyb3VwXCI6Y2FzZVwic2hoX25ld0ZpbHRlclwiOmNhc2VcInNoaF91bmluc3RhbGxGaWx0ZXJcIjpjYXNlXCJzaGhfZ2V0RmlsdGVyQ2hhbmdlc1wiOmNhc2VcInNoaF9nZXRNZXNzYWdlc1wiOnJldHVyblwibmV2ZXJcIn19ZS5leHBvcnRzPXtjYWNoZUlkZW50aWZpZXJGb3JQYXlsb2FkOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighaShlKSlyZXR1cm4gbnVsbDt2YXIgcj10LmluY2x1ZGVCbG9ja1JlZixhPXI/ZS5wYXJhbXM6byhlKTtyZXR1cm4gZS5tZXRob2QrXCI6XCIrbihhKX0sY2FuQ2FjaGU6aSxibG9ja1RhZ0ZvclBheWxvYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9YShlKTtpZih0Pj1lLnBhcmFtcy5sZW5ndGgpcmV0dXJuIG51bGw7cmV0dXJuIGUucGFyYW1zW3RdfSxwYXJhbXNXaXRob3V0QmxvY2tUYWc6byxibG9ja1RhZ1BhcmFtSW5kZXg6YSxjYWNoZVR5cGVGb3JQYXlsb2FkOnN9fSxmdW5jdGlvbihlLHQscil7dmFyIG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEpTT04/SlNPTjpyKDIxMSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dHx8KHQ9e30pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJih0PXtjbXA6dH0pO3ZhciByPXQuc3BhY2V8fFwiXCI7XCJudW1iZXJcIj09dHlwZW9mIHImJihyPUFycmF5KHIrMSkuam9pbihcIiBcIikpO3ZhciBhLHM9XCJib29sZWFuXCI9PXR5cGVvZiB0LmN5Y2xlcyYmdC5jeWNsZXMsZj10LnJlcGxhY2VyfHxmdW5jdGlvbihlLHQpe3JldHVybiB0fSx1PXQuY21wJiYoYT10LmNtcCxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj17a2V5OnQsdmFsdWU6ZVt0XX0saT17a2V5OnIsdmFsdWU6ZVtyXX07cmV0dXJuIGEobixpKX19KSxjPVtdO3JldHVybiBmdW5jdGlvbiBlKHQsYSxoLGQpe3ZhciBsPXI/XCJcXG5cIituZXcgQXJyYXkoZCsxKS5qb2luKHIpOlwiXCIscD1yP1wiOiBcIjpcIjpcIjtpZihoJiZoLnRvSlNPTiYmXCJmdW5jdGlvblwiPT10eXBlb2YgaC50b0pTT04mJihoPWgudG9KU09OKCkpLHZvaWQgMCE9PShoPWYuY2FsbCh0LGEsaCkpKXtpZihcIm9iamVjdFwiIT10eXBlb2YgaHx8bnVsbD09PWgpcmV0dXJuIG4uc3RyaW5naWZ5KGgpO2lmKGkoaCkpe2Zvcih2YXIgYj1bXSx5PTA7eTxoLmxlbmd0aDt5Kyspe3ZhciBnPWUoaCx5LGhbeV0sZCsxKXx8bi5zdHJpbmdpZnkobnVsbCk7Yi5wdXNoKGwrcitnKX1yZXR1cm5cIltcIitiLmpvaW4oXCIsXCIpK2wrXCJdXCJ9aWYoLTEhPT1jLmluZGV4T2YoaCkpe2lmKHMpcmV0dXJuIG4uc3RyaW5naWZ5KFwiX19jeWNsZV9fXCIpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OXCIpfWMucHVzaChoKTt2YXIgdj1vKGgpLnNvcnQodSYmdShoKSk7Zm9yKGI9W10seT0wO3k8di5sZW5ndGg7eSsrKXt2YXIgbT1lKGgsYT12W3ldLGhbYV0sZCsxKTtpZihtKXt2YXIgdz1uLnN0cmluZ2lmeShhKStwK207Yi5wdXNoKGwrcit3KX19cmV0dXJuIGMuc3BsaWNlKGMuaW5kZXhPZihoKSwxKSxcIntcIitiLmpvaW4oXCIsXCIpK2wrXCJ9XCJ9fSh7XCJcIjplfSxcIlwiLGUsMCl9O3ZhciBpPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09PXt9LnRvU3RyaW5nLmNhbGwoZSl9LG89T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LHI9W107Zm9yKHZhciBuIGluIGUpdC5jYWxsKGUsbikmJnIucHVzaChuKTtyZXR1cm4gcn19LGZ1bmN0aW9uKGUsdCxyKXtjb25zdCBuPXIoMjE3KS5NdXRleCxpPXIoNDgpLG89cig5NSksYT1yKDIxOSkscz1yKDIyMSksZj1yKDIyMikse2ludFRvSGV4OnUsaGV4VG9JbnQ6Y309cigyMyk7ZnVuY3Rpb24gaChlKXtyZXR1cm4gZChhc3luYyguLi50KT0+e2NvbnN0IHI9YXdhaXQgZSguLi50KTtyZXR1cm4gdShyLmlkKX0pfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGkoYXN5bmModCxyKT0+e2NvbnN0IG49YXdhaXQgZS5hcHBseShudWxsLHQucGFyYW1zKTtyLnJlc3VsdD1ufSl9ZnVuY3Rpb24gbChlLHQpe2NvbnN0IHI9W107Zm9yKGxldCB0IGluIGUpci5wdXNoKGVbdF0pO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih7YmxvY2tUcmFja2VyOmUscHJvdmlkZXI6dH0pe2xldCByPTAsaT17fTtjb25zdCBwPW5ldyBuLGI9ZnVuY3Rpb24oe211dGV4OmV9KXtyZXR1cm4gdD0+YXN5bmMocixuLGksbyk9PnsoYXdhaXQgZS5hY3F1aXJlKCkpKCksdChyLG4saSxvKX19KHttdXRleDpwfSkseT1vKHtldGhfbmV3RmlsdGVyOmIoaCh2KSksZXRoX25ld0Jsb2NrRmlsdGVyOmIoaChtKSksZXRoX25ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlcjpiKGgodykpLGV0aF91bmluc3RhbGxGaWx0ZXI6YihkKFMpKSxldGhfZ2V0RmlsdGVyQ2hhbmdlczpiKGQoXykpLGV0aF9nZXRGaWx0ZXJMb2dzOmIoZChFKSl9KSxnPWFzeW5jKHtvbGRCbG9jazplLG5ld0Jsb2NrOnR9KT0+e2lmKDA9PT1pLmxlbmd0aClyZXR1cm47Y29uc3Qgcj1hd2FpdCBwLmFjcXVpcmUoKTt0cnl7YXdhaXQgUHJvbWlzZS5hbGwobChpKS5tYXAoYXN5bmMgcj0+e3RyeXthd2FpdCByLnVwZGF0ZSh7b2xkQmxvY2s6ZSxuZXdCbG9jazp0fSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19KSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX1yKCl9O3JldHVybiB5Lm5ld0xvZ0ZpbHRlcj12LHkubmV3QmxvY2tGaWx0ZXI9bSx5Lm5ld1BlbmRpbmdUcmFuc2FjdGlvbkZpbHRlcj13LHkudW5pbnN0YWxsRmlsdGVyPVMseS5nZXRGaWx0ZXJDaGFuZ2VzPV8seS5nZXRGaWx0ZXJMb2dzPUUseS5kZXN0cm95PSgpPT57IWFzeW5jIGZ1bmN0aW9uKCl7Y29uc3QgZT1sKGkpLmxlbmd0aDtpPXt9LHgoe3ByZXZGaWx0ZXJDb3VudDplLG5ld0ZpbHRlckNvdW50OjB9KX0oKX0seTthc3luYyBmdW5jdGlvbiB2KGUpe2NvbnN0IHI9bmV3IGEoe3Byb3ZpZGVyOnQscGFyYW1zOmV9KTthd2FpdCBBKHIpO3JldHVybiByfWFzeW5jIGZ1bmN0aW9uIG0oKXtjb25zdCBlPW5ldyBzKHtwcm92aWRlcjp0fSk7YXdhaXQgQShlKTtyZXR1cm4gZX1hc3luYyBmdW5jdGlvbiB3KCl7Y29uc3QgZT1uZXcgZih7cHJvdmlkZXI6dH0pO2F3YWl0IEEoZSk7cmV0dXJuIGV9YXN5bmMgZnVuY3Rpb24gXyhlKXtjb25zdCB0PWMoZSkscj1pW3RdO2lmKCFyKXRocm93IG5ldyBFcnJvcihgTm8gZmlsdGVyIGZvciBpbmRleCBcIiR7dH1cImApO3JldHVybiByLmdldENoYW5nZXNBbmRDbGVhcigpfWFzeW5jIGZ1bmN0aW9uIEUoZSl7Y29uc3QgdD1jKGUpLHI9aVt0XTtpZighcil0aHJvdyBuZXcgRXJyb3IoYE5vIGZpbHRlciBmb3IgaW5kZXggXCIke3R9XCJgKTtyZXR1cm5cImxvZ1wiPT09ci50eXBlP3Jlc3VsdHM9ci5nZXRBbGxSZXN1bHRzKCk6cmVzdWx0cz1bXSxyZXN1bHRzfWFzeW5jIGZ1bmN0aW9uIFMoZSl7Y29uc3QgdD1jKGUpLHI9aVt0XSxuPUJvb2xlYW4ocik7cmV0dXJuIG4mJmF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bChpKS5sZW5ndGg7ZGVsZXRlIGlbZV07Y29uc3Qgcj1sKGkpLmxlbmd0aDt4KHtwcmV2RmlsdGVyQ291bnQ6dCxuZXdGaWx0ZXJDb3VudDpyfSl9KHQpLG59YXN5bmMgZnVuY3Rpb24gQSh0KXtjb25zdCBuPWwoaSkubGVuZ3RoLG89YXdhaXQgZS5nZXRMYXRlc3RCbG9jaygpO2F3YWl0IHQuaW5pdGlhbGl6ZSh7Y3VycmVudEJsb2NrOm99KSxyKyssaVtyXT10LHQuaWQ9cix0LmlkSGV4PXUocik7cmV0dXJuIHgoe3ByZXZGaWx0ZXJDb3VudDpuLG5ld0ZpbHRlckNvdW50OmwoaSkubGVuZ3RofSkscn1mdW5jdGlvbiB4KHtwcmV2RmlsdGVyQ291bnQ6dCxuZXdGaWx0ZXJDb3VudDpyfSl7MD09PXQmJnI+MD9lLm9uKFwic3luY1wiLGcpOnQ+MCYmMD09PXImJmUucmVtb3ZlTGlzdGVuZXIoXCJzeW5jXCIsZyl9fX0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDIxOCl9LGZ1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9cigyNDEpKHIoMjQyKSl9LGZ1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9T2JqZWN0LmFzc2lnbihlLmV4cG9ydHMscigyNTUpLHIoMjU2KSxyKDEwMykscigyNzQpLHIoMjc1KSxyKDI3NikpfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuYXBwbHkodCxyKX19fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig3KSxpPXIoMjYxKSxvPXIoMjYzKSxhPXIoMjY0KSxzPXIoMjY1KSxmPXIoMTAwKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHUpe3ZhciBjPWUuZGF0YSxoPWUuaGVhZGVycztuLmlzRm9ybURhdGEoYykmJmRlbGV0ZSBoW1wiQ29udGVudC1UeXBlXCJdO3ZhciBkPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihlLmF1dGgpe3ZhciBsPWUuYXV0aC51c2VybmFtZXx8XCJcIixwPWUuYXV0aC5wYXNzd29yZHx8XCJcIjtoLkF1dGhvcml6YXRpb249XCJCYXNpYyBcIitidG9hKGwrXCI6XCIrcCl9aWYoZC5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksbyhlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxkLnRpbWVvdXQ9ZS50aW1lb3V0LGQub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoZCYmND09PWQucmVhZHlTdGF0ZSYmKDAhPT1kLnN0YXR1c3x8ZC5yZXNwb25zZVVSTCYmMD09PWQucmVzcG9uc2VVUkwuaW5kZXhPZihcImZpbGU6XCIpKSl7dmFyIHI9XCJnZXRBbGxSZXNwb25zZUhlYWRlcnNcImluIGQ/YShkLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsLG49e2RhdGE6ZS5yZXNwb25zZVR5cGUmJlwidGV4dFwiIT09ZS5yZXNwb25zZVR5cGU/ZC5yZXNwb25zZTpkLnJlc3BvbnNlVGV4dCxzdGF0dXM6ZC5zdGF0dXMsc3RhdHVzVGV4dDpkLnN0YXR1c1RleHQsaGVhZGVyczpyLGNvbmZpZzplLHJlcXVlc3Q6ZH07aSh0LHUsbiksZD1udWxsfX0sZC5vbmVycm9yPWZ1bmN0aW9uKCl7dShmKFwiTmV0d29yayBFcnJvclwiLGUsbnVsbCxkKSksZD1udWxsfSxkLm9udGltZW91dD1mdW5jdGlvbigpe3UoZihcInRpbWVvdXQgb2YgXCIrZS50aW1lb3V0K1wibXMgZXhjZWVkZWRcIixlLFwiRUNPTk5BQk9SVEVEXCIsZCkpLGQ9bnVsbH0sbi5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgYj1yKDI2NikseT0oZS53aXRoQ3JlZGVudGlhbHN8fHMoZS51cmwpKSYmZS54c3JmQ29va2llTmFtZT9iLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO3kmJihoW2UueHNyZkhlYWRlck5hbWVdPXkpfWlmKFwic2V0UmVxdWVzdEhlYWRlclwiaW4gZCYmbi5mb3JFYWNoKGgsKGZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09YyYmXCJjb250ZW50LXR5cGVcIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgaFt0XTpkLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxlLndpdGhDcmVkZW50aWFscyYmKGQud2l0aENyZWRlbnRpYWxzPSEwKSxlLnJlc3BvbnNlVHlwZSl0cnl7ZC5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGV9Y2F0Y2godCl7aWYoXCJqc29uXCIhPT1lLnJlc3BvbnNlVHlwZSl0aHJvdyB0fVwiZnVuY3Rpb25cIj09dHlwZW9mIGUub25Eb3dubG9hZFByb2dyZXNzJiZkLmFkZEV2ZW50TGlzdGVuZXIoXCJwcm9ncmVzc1wiLGUub25Eb3dubG9hZFByb2dyZXNzKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJmQudXBsb2FkJiZkLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKFwicHJvZ3Jlc3NcIixlLm9uVXBsb2FkUHJvZ3Jlc3MpLGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtkJiYoZC5hYm9ydCgpLHUoZSksZD1udWxsKX0pKSx2b2lkIDA9PT1jJiYoYz1udWxsKSxkLnNlbmQoYyl9KSl9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigyNjIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscixpLG8pe3ZhciBhPW5ldyBFcnJvcihlKTtyZXR1cm4gbihhLHQscixpLG8pfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwhZS5fX0NBTkNFTF9fKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUpe3RoaXMubWVzc2FnZT1lfW4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJDYW5jZWxcIisodGhpcy5tZXNzYWdlP1wiOiBcIit0aGlzLm1lc3NhZ2U6XCJcIil9LG4ucHJvdG90eXBlLl9fQ0FOQ0VMX189ITAsZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxyKXtjb25zdCBuPXIoNTEpLGk9cig1Myk7ZS5leHBvcnRzPXtOb2RlOmNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLm5ldHdvcms9ZSx0aGlzLm5ldElEPXQ7dmFyIG49ci5zcGxpdChcIjpcIik7dGhpcy5pcD1uWzBdLHRoaXMucG9ydD1uWzFdLHIuaW5jbHVkZXMoXCJodHRwczovL1wiKXx8ci5pbmNsdWRlcyhcImh0dHA6Ly9cIik/dGhpcy5pcFBvcnQ9cjpcIjQ0M1wiPT09dGhpcy5wb3J0fHw0NDM9PT10aGlzLnBvcnQ/dGhpcy5pcFBvcnQ9XCJodHRwczovL1wiK3I6dGhpcy5pcFBvcnQ9XCJodHRwOi8vXCIrcn1pc1ZhbGlkKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoIXRoaXMuaGFzT3duUHJvcGVydHkoZSl8fFwiXCI9PXRoaXNbZV0pcmV0dXJuITE7cmV0dXJuITB9aXNFcXVhbChlLHQpe3JldHVybiB0aGlzLm5ldElEPT1lLnRvU3RyaW5nKCkmJnRoaXMubmV0d29yaz09dC50b1N0cmluZygpfWFzeW5jIHNlbmRSZWxheShlLHQpe3RyeXtjb25zdCBhPW4uY3JlYXRlKHtiYXNlVVJMOnRoaXMuaXBQb3J0LHRpbWVvdXQ6ZS5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lT3V0LGhlYWRlcnM6e1wiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fSk7dmFyIHI9YXdhaXQgYS5wb3N0KGkucmVsYXlQYXRoLGUudG9KU09OKCkpO2lmKDIwMD09ci5zdGF0dXMmJm51bGwhPXIuZGF0YSl7dmFyIG89ci5kYXRhO3JldHVybiB0P3ZvaWQgdChvLG51bGwpOm99cmV0dXJuIHQ/dm9pZCB0KG51bGwsbmV3IEVycm9yKFwiRmFpbGVkIHRvIHNlbmQgcmVsYXkgd2l0aCBlcnJvcjogXCIrci5kYXRhKSk6bmV3IEVycm9yKFwiRmFpbGVkIHRvIHNlbmQgcmVsYXkgd2l0aCBlcnJvcjogXCIrci5kYXRhKX1jYXRjaChlKXtyZXR1cm4gdD92b2lkIHQobnVsbCxuZXcgRXJyb3IoXCJGYWlsZWQgdG8gc2VuZCByZWxheSB3aXRoIGVycm9yOiBcIitlKSk6bmV3IEVycm9yKFwiRmFpbGVkIHRvIHNlbmQgcmVsYXkgd2l0aCBlcnJvcjogXCIrZSl9fX19fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig5KS5FdmVudEVtaXR0ZXIsaT1yKDEwKS5pbmhlcml0cyxvPXIoMTQpLGE9cigxNzYpLHM9cigxNzkpLGY9cigyMDcpLHU9cigyMTApLGM9KHIoOTIpLHIoNDYpKTtmdW5jdGlvbiBoKGUpe24uY2FsbCh0aGlzKSx0aGlzLnNldE1heExpc3RlbmVycygzMCksZT1lfHx7fTt2YXIgdD17c2VuZEFzeW5jOnRoaXMuX2hhbmRsZUFzeW5jLmJpbmQodGhpcyl9LHI9ZS5ibG9ja1RyYWNrZXJQcm92aWRlcnx8dDt0aGlzLl9ibG9ja1RyYWNrZXI9ZS5ibG9ja1RyYWNrZXJ8fG5ldyBhKHtwcm92aWRlcjpyLHBvbGxpbmdJbnRlcnZhbDplLnBvbGxpbmdJbnRlcnZhbHx8NGUzLHNldFNraXBDYWNoZUZsYWc6ITB9KSx0aGlzLl9yZWFkeT1uZXcgdSx0aGlzLmN1cnJlbnRCbG9jaz1udWxsLHRoaXMuX3Byb3ZpZGVycz1bXX1mdW5jdGlvbiBkKGUpe3JldHVybntudW1iZXI6by50b0J1ZmZlcihlLm51bWJlciksaGFzaDpvLnRvQnVmZmVyKGUuaGFzaCkscGFyZW50SGFzaDpvLnRvQnVmZmVyKGUucGFyZW50SGFzaCksbm9uY2U6by50b0J1ZmZlcihlLm5vbmNlKSxtaXhIYXNoOm8udG9CdWZmZXIoZS5taXhIYXNoKSxzaGEzVW5jbGVzOm8udG9CdWZmZXIoZS5zaGEzVW5jbGVzKSxsb2dzQmxvb206by50b0J1ZmZlcihlLmxvZ3NCbG9vbSksdHJhbnNhY3Rpb25zUm9vdDpvLnRvQnVmZmVyKGUudHJhbnNhY3Rpb25zUm9vdCksc3RhdGVSb290Om8udG9CdWZmZXIoZS5zdGF0ZVJvb3QpLHJlY2VpcHRzUm9vdDpvLnRvQnVmZmVyKGUucmVjZWlwdFJvb3R8fGUucmVjZWlwdHNSb290KSxtaW5lcjpvLnRvQnVmZmVyKGUubWluZXIpLGRpZmZpY3VsdHk6by50b0J1ZmZlcihlLmRpZmZpY3VsdHkpLHRvdGFsRGlmZmljdWx0eTpvLnRvQnVmZmVyKGUudG90YWxEaWZmaWN1bHR5KSxzaXplOm8udG9CdWZmZXIoZS5zaXplKSxleHRyYURhdGE6by50b0J1ZmZlcihlLmV4dHJhRGF0YSksZ2FzTGltaXQ6by50b0J1ZmZlcihlLmdhc0xpbWl0KSxnYXNVc2VkOm8udG9CdWZmZXIoZS5nYXNVc2VkKSx0aW1lc3RhbXA6by50b0J1ZmZlcihlLnRpbWVzdGFtcCksdHJhbnNhY3Rpb25zOmUudHJhbnNhY3Rpb25zfX1lLmV4cG9ydHM9aCxpKGgsbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsXCJuYW1lXCIse3ZhbHVlOlwiSHR0cFByb3ZpZGVyXCJ9KSxoLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzO3QuX3JlYWR5LmdvKCksdC5fYmxvY2tUcmFja2VyLm9uKFwibGF0ZXN0XCIsKGZ1bmN0aW9uKHIpe3QuX2dldEJsb2NrQnlOdW1iZXIociwoZnVuY3Rpb24ocixuKXtpZihyKWUuZW1pdChcImVycm9yXCIscik7ZWxzZSBpZihuKXt2YXIgaT1kKG4pO3QuX3NldEN1cnJlbnRCbG9jayhpKSx0LmVtaXQoXCJyYXdCbG9ja1wiLG4pLHQuZW1pdChcImxhdGVzdFwiLG4pfX0pKX0pKSx0Ll9ibG9ja1RyYWNrZXIub24oXCJzeW5jXCIsdC5lbWl0LmJpbmQodCxcInN5bmNcIikpLHQuX2Jsb2NrVHJhY2tlci5vbihcImVycm9yXCIsdC5lbWl0LmJpbmQodCxcImVycm9yXCIpKSx0Ll9ydW5uaW5nPSEwLHQuZW1pdChcInN0YXJ0XCIpfSxoLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tUcmFja2VyLnJlbW92ZUFsbExpc3RlbmVycygpLHRoaXMuX3J1bm5pbmc9ITEsdGhpcy5lbWl0KFwic3RvcFwiKX0saC5wcm90b3R5cGUuaXNSdW5uaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3J1bm5pbmd9LGgucHJvdG90eXBlLmFkZFByb3ZpZGVyPWZ1bmN0aW9uKGUsdCl7XCJudW1iZXJcIj09dHlwZW9mIHQ/dGhpcy5fcHJvdmlkZXJzLnNwbGljZSh0LDAsZSk6dGhpcy5fcHJvdmlkZXJzLnB1c2goZSksZS5zZXRFbmdpbmUodGhpcyl9LGgucHJvdG90eXBlLnJlbW92ZVByb3ZpZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3Byb3ZpZGVycy5pbmRleE9mKGUpO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlciBub3QgZm91bmQuXCIpO3RoaXMuX3Byb3ZpZGVycy5zcGxpY2UodCwxKX0saC5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoXCJXZWIzUHJvdmlkZXJFbmdpbmUgZG9lcyBub3Qgc3VwcG9ydCBzeW5jaHJvbm91cyByZXF1ZXN0cy5cIil9LGgucHJvdG90eXBlLnNlbmRBc3luYz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7ci5fcmVhZHkuYXdhaXQoKGZ1bmN0aW9uKCl7QXJyYXkuaXNBcnJheShlKT9zKGUsci5faGFuZGxlQXN5bmMuYmluZChyKSx0KTpyLl9oYW5kbGVBc3luYyhlLHQpfSkpfSxoLnByb3RvdHlwZS5fZ2V0QmxvY2tCeU51bWJlcj1mdW5jdGlvbihlLHQpe3ZhciByPWMoe21ldGhvZDpcImV0aF9nZXRCbG9ja0J5TnVtYmVyXCIscGFyYW1zOltlLCExXSxza2lwQ2FjaGU6ITB9KTt0aGlzLl9oYW5kbGVBc3luYyhyLChmdW5jdGlvbihlLHIpe3JldHVybiBlP3QoZSk6dChudWxsLHIucmVzdWx0KX0pKX0saC5wcm90b3R5cGUuX2hhbmRsZUFzeW5jPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcyxuPS0xLGk9bnVsbCxvPW51bGwsYT1bXTtmdW5jdGlvbiBzKHIsbil7bz1yLGk9bixmKGEsKGZ1bmN0aW9uKGUsdCl7ZT9lKG8saSx0KTp0KCl9KSwoZnVuY3Rpb24oKXt2YXIgcj17aWQ6ZS5pZCxqc29ucnBjOmUuanNvbnJwYyxyZXN1bHQ6aX07bnVsbCE9bz8oci5lcnJvcj17bWVzc2FnZTpvLnN0YWNrfHxvLm1lc3NhZ2V8fG8sY29kZTotMzJlM30sdChvLHIpKTp0KG51bGwscil9KSl9IWZ1bmN0aW9uIHQoaSl7aWYobis9MSxhLnVuc2hpZnQoaSksbj49ci5fcHJvdmlkZXJzLmxlbmd0aClzKG5ldyBFcnJvcignUmVxdWVzdCBmb3IgbWV0aG9kIFwiJytlLm1ldGhvZCsnXCIgbm90IGhhbmRsZWQgYnkgYW55IHN1YnByb3ZpZGVyLiBQbGVhc2UgY2hlY2sgeW91ciBzdWJwcm92aWRlciBjb25maWd1cmF0aW9uIHRvIGVuc3VyZSB0aGlzIG1ldGhvZCBpcyBoYW5kbGVkLicpKTtlbHNlIHRyeXtyLl9wcm92aWRlcnNbbl0uaGFuZGxlUmVxdWVzdChlLHQscyl9Y2F0Y2goZSl7cyhlKX19KCl9LGgucHJvdG90eXBlLl9zZXRDdXJyZW50QmxvY2s9ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50QmxvY2s9ZSx0aGlzLmVtaXQoXCJibG9ja1wiLGUpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTApLmluaGVyaXRzLGk9cigyOSk7ZnVuY3Rpb24gbyhlKXtlPWV8fHt9LHRoaXMuc3RhdGljUmVzcG9uc2VzPWV9ZS5leHBvcnRzPW8sbihvLGkpLG8ucHJvdG90eXBlLmhhbmRsZVJlcXVlc3Q9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuc3RhdGljUmVzcG9uc2VzW2UubWV0aG9kXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24oZSx0LHIpOnZvaWQgMCE9PW4/c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gcihudWxsLG4pfSkpOnQoKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQ3KSxpPXIoOTQpLG89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsdCksZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIXR8fFwib2JqZWN0XCIhPXR5cGVvZiB0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0P2U6dH0odGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLChmdW5jdGlvbihlKXt2YXIgdD1lLmJsb2NrVHJhY2tlcixyPWUucHJvdmlkZXI7ZS5lbmdpbmU7cmV0dXJuIGkoe2Jsb2NrVHJhY2tlcjp0LHByb3ZpZGVyOnJ9KX0pKSl9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9KHQsZSksdH0obik7ZS5leHBvcnRzPW99LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDIyNCksaT1yKDIyNSksbz1yKDEwKS5pbmhlcml0cyxhPXIoMTQpLHM9cigyMjcpLGY9cig0MCksdT1yKDI1MCksYz1yKDI5KSxoPXIoMjUxKSxkPS9eWzAtOUEtRmEtZl0rJC9nO2Z1bmN0aW9uIGwoZSl7dGhpcy5ub25jZUxvY2s9dSgxKSxlLmdldEFjY291bnRzJiYodGhpcy5nZXRBY2NvdW50cz1lLmdldEFjY291bnRzKSxlLnByb2Nlc3NUcmFuc2FjdGlvbiYmKHRoaXMucHJvY2Vzc1RyYW5zYWN0aW9uPWUucHJvY2Vzc1RyYW5zYWN0aW9uKSxlLnByb2Nlc3NNZXNzYWdlJiYodGhpcy5wcm9jZXNzTWVzc2FnZT1lLnByb2Nlc3NNZXNzYWdlKSxlLnByb2Nlc3NQZXJzb25hbE1lc3NhZ2UmJih0aGlzLnByb2Nlc3NQZXJzb25hbE1lc3NhZ2U9ZS5wcm9jZXNzUGVyc29uYWxNZXNzYWdlKSxlLnByb2Nlc3NUeXBlZE1lc3NhZ2UmJih0aGlzLnByb2Nlc3NUeXBlZE1lc3NhZ2U9ZS5wcm9jZXNzVHlwZWRNZXNzYWdlKSxlLnByb2Nlc3NUeXBlZE1lc3NhZ2VWMyYmKHRoaXMucHJvY2Vzc1R5cGVkTWVzc2FnZVYzPWUucHJvY2Vzc1R5cGVkTWVzc2FnZVYzKSx0aGlzLmFwcHJvdmVUcmFuc2FjdGlvbj1lLmFwcHJvdmVUcmFuc2FjdGlvbnx8dGhpcy5hdXRvQXBwcm92ZSx0aGlzLmFwcHJvdmVNZXNzYWdlPWUuYXBwcm92ZU1lc3NhZ2V8fHRoaXMuYXV0b0FwcHJvdmUsdGhpcy5hcHByb3ZlUGVyc29uYWxNZXNzYWdlPWUuYXBwcm92ZVBlcnNvbmFsTWVzc2FnZXx8dGhpcy5hdXRvQXBwcm92ZSx0aGlzLmFwcHJvdmVUeXBlZE1lc3NhZ2U9ZS5hcHByb3ZlVHlwZWRNZXNzYWdlfHx0aGlzLmF1dG9BcHByb3ZlLHRoaXMuYXBwcm92ZVR5cGVkTWVzc2FnZVYzPWUuYXBwcm92ZVR5cGVkTWVzc2FnZVYzfHx0aGlzLmF1dG9BcHByb3ZlLGUuc2lnblRyYW5zYWN0aW9uJiYodGhpcy5zaWduVHJhbnNhY3Rpb249ZS5zaWduVHJhbnNhY3Rpb258fHYoXCJzaWduVHJhbnNhY3Rpb25cIikpLGUuc2lnbk1lc3NhZ2UmJih0aGlzLnNpZ25NZXNzYWdlPWUuc2lnbk1lc3NhZ2V8fHYoXCJzaWduTWVzc2FnZVwiKSksZS5zaWduUGVyc29uYWxNZXNzYWdlJiYodGhpcy5zaWduUGVyc29uYWxNZXNzYWdlPWUuc2lnblBlcnNvbmFsTWVzc2FnZXx8dihcInNpZ25QZXJzb25hbE1lc3NhZ2VcIikpLGUuc2lnblR5cGVkTWVzc2FnZSYmKHRoaXMuc2lnblR5cGVkTWVzc2FnZT1lLnNpZ25UeXBlZE1lc3NhZ2V8fHYoXCJzaWduVHlwZWRNZXNzYWdlXCIpKSxlLnNpZ25UeXBlZE1lc3NhZ2VWMyYmKHRoaXMuc2lnblR5cGVkTWVzc2FnZVYzPWUuc2lnblR5cGVkTWVzc2FnZVYzfHx2KFwic2lnblR5cGVkTWVzc2FnZVYzXCIpKSxlLnJlY292ZXJQZXJzb25hbFNpZ25hdHVyZSYmKHRoaXMucmVjb3ZlclBlcnNvbmFsU2lnbmF0dXJlPWUucmVjb3ZlclBlcnNvbmFsU2lnbmF0dXJlKSxlLnB1Ymxpc2hUcmFuc2FjdGlvbiYmKHRoaXMucHVibGlzaFRyYW5zYWN0aW9uPWUucHVibGlzaFRyYW5zYWN0aW9uKSx0aGlzLmVzdGltYXRlR2FzPWUuZXN0aW1hdGVHYXN8fHRoaXMuZXN0aW1hdGVHYXMsdGhpcy5nZXRHYXNQcmljZT1lLmdldEdhc1ByaWNlfHx0aGlzLmdldEdhc1ByaWNlfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBiKGUpe3ZhciB0PWEuYWRkSGV4UHJlZml4KGUpO3JldHVybiBhLmlzVmFsaWRBZGRyZXNzKHQpfWZ1bmN0aW9uIHkoZSl7dmFyIHQ9YS5hZGRIZXhQcmVmaXgoZSk7cmV0dXJuIWEuaXNWYWxpZEFkZHJlc3ModCkmJmcoZSl9ZnVuY3Rpb24gZyhlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmKFwiMHhcIj09PWUuc2xpY2UoMCwyKSYmZS5zbGljZSgyKS5tYXRjaChkKSl9ZnVuY3Rpb24gdihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyKG5ldyBFcnJvcignUHJvdmlkZXJFbmdpbmUgLSBIb29rZWRXYWxsZXRTdWJwcm92aWRlciAtIE11c3QgcHJvdmlkZSBcIicrZSsnXCIgZm4gaW4gY29uc3RydWN0b3Igb3B0aW9ucycpKX19ZS5leHBvcnRzPWwsbyhsLGMpLGwucHJvdG90eXBlLmhhbmRsZVJlcXVlc3Q9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXRoaXM7aS5fcGFyaXR5UmVxdWVzdHM9e30saS5fcGFyaXR5UmVxdWVzdENvdW50PTA7dmFyIG8sYT12b2lkIDAscz12b2lkIDAsdT12b2lkIDAsYz12b2lkIDAsaD12b2lkIDA7c3dpdGNoKGUubWV0aG9kKXtjYXNlXCJldGhfY29pbmJhc2VcIjpyZXR1cm4gdm9pZCBpLmdldEFjY291bnRzKChmdW5jdGlvbihlLHQpe2lmKGUpcmV0dXJuIHIoZSk7dmFyIG49dFswXXx8bnVsbDtyKG51bGwsbil9KSk7Y2FzZVwiZXRoX2FjY291bnRzXCI6cmV0dXJuIHZvaWQgaS5nZXRBY2NvdW50cygoZnVuY3Rpb24oZSx0KXtpZihlKXJldHVybiByKGUpO3IobnVsbCx0KX0pKTtjYXNlXCJldGhfc2VuZFRyYW5zYWN0aW9uXCI6cmV0dXJuIGE9ZS5wYXJhbXNbMF0sdm9pZCBuKFtmdW5jdGlvbihlKXtyZXR1cm4gaS52YWxpZGF0ZVRyYW5zYWN0aW9uKGEsZSl9LGZ1bmN0aW9uKGUpe3JldHVybiBpLnByb2Nlc3NUcmFuc2FjdGlvbihhLGUpfV0scik7Y2FzZVwiZXRoX3NpZ25UcmFuc2FjdGlvblwiOnJldHVybiBhPWUucGFyYW1zWzBdLHZvaWQgbihbZnVuY3Rpb24oZSl7cmV0dXJuIGkudmFsaWRhdGVUcmFuc2FjdGlvbihhLGUpfSxmdW5jdGlvbihlKXtyZXR1cm4gaS5wcm9jZXNzU2lnblRyYW5zYWN0aW9uKGEsZSl9XSxyKTtjYXNlXCJldGhfc2lnblwiOnJldHVybiB5KGUucGFyYW1zWzFdKSYmYihlLnBhcmFtc1swXSk/KGg9ZS5wYXJhbXNbMF0sYz1lLnBhcmFtc1sxXSk6KGM9ZS5wYXJhbXNbMF0saD1lLnBhcmFtc1sxXSksdT1lLnBhcmFtc1syXXx8e30scz1mKHUse2Zyb206aCxkYXRhOmN9KSx2b2lkIG4oW2Z1bmN0aW9uKGUpe3JldHVybiBpLnZhbGlkYXRlTWVzc2FnZShzLGUpfSxmdW5jdGlvbihlKXtyZXR1cm4gaS5wcm9jZXNzTWVzc2FnZShzLGUpfV0scik7Y2FzZVwicGVyc29uYWxfc2lnblwiOnJldHVybiBmdW5jdGlvbigpe3ZhciB0PWUucGFyYW1zWzBdO2lmKHkoZS5wYXJhbXNbMV0pJiZiKHQpKXtcIlttZXNzYWdlLCBhZGRyZXNzXS4gVGhpcyB3YXMgcHJldmlvdXNseSBoYW5kbGVkIGluY29ycmVjdGx5LCBcIixcImFuZCBoYXMgYmVlbiBjb3JyZWN0ZWQgYXV0b21hdGljYWxseS4gXCIsXCJQbGVhc2Ugc3dpdGNoIHRoaXMgcGFyYW0gb3JkZXIgZm9yIHNtb290aCBiZWhhdmlvciBpbiB0aGUgZnV0dXJlLlwiLGNvbnNvbGUud2FybihcIlRoZSBldGhfcGVyc29uYWxTaWduIG1ldGhvZCByZXF1aXJlcyBwYXJhbXMgb3JkZXJlZCBbbWVzc2FnZSwgYWRkcmVzc10uIFRoaXMgd2FzIHByZXZpb3VzbHkgaGFuZGxlZCBpbmNvcnJlY3RseSwgYW5kIGhhcyBiZWVuIGNvcnJlY3RlZCBhdXRvbWF0aWNhbGx5LiBQbGVhc2Ugc3dpdGNoIHRoaXMgcGFyYW0gb3JkZXIgZm9yIHNtb290aCBiZWhhdmlvciBpbiB0aGUgZnV0dXJlLlwiKSxoPWUucGFyYW1zWzBdLGM9ZS5wYXJhbXNbMV19ZWxzZSBjPWUucGFyYW1zWzBdLGg9ZS5wYXJhbXNbMV07dT1lLnBhcmFtc1syXXx8e30scz1mKHUse2Zyb206aCxkYXRhOmN9KSxuKFtmdW5jdGlvbihlKXtyZXR1cm4gaS52YWxpZGF0ZVBlcnNvbmFsTWVzc2FnZShzLGUpfSxmdW5jdGlvbihlKXtyZXR1cm4gaS5wcm9jZXNzUGVyc29uYWxNZXNzYWdlKHMsZSl9XSxyKX0oKTtjYXNlXCJwZXJzb25hbF9lY1JlY292ZXJcIjpyZXR1cm4gZnVuY3Rpb24oKXtjPWUucGFyYW1zWzBdO3ZhciB0PWUucGFyYW1zWzFdO3U9ZS5wYXJhbXNbMl18fHt9LHM9Zih1LHtzaWc6dCxkYXRhOmN9KSxpLnJlY292ZXJQZXJzb25hbFNpZ25hdHVyZShzLHIpfSgpO2Nhc2VcImV0aF9zaWduVHlwZWREYXRhXCI6cmV0dXJuIWIoZS5wYXJhbXNbMV0pJiZiKGUucGFyYW1zWzBdKT8oaD1lLnBhcmFtc1swXSxjPWUucGFyYW1zWzFdKTooYz1lLnBhcmFtc1swXSxoPWUucGFyYW1zWzFdKSx1PWUucGFyYW1zWzJdfHx7fSxzPWYodSx7ZnJvbTpoLGRhdGE6Y30pLHZvaWQgbihbZnVuY3Rpb24oZSl7cmV0dXJuIGkudmFsaWRhdGVUeXBlZE1lc3NhZ2UocyxlKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGkucHJvY2Vzc1R5cGVkTWVzc2FnZShzLGUpfV0scik7Y2FzZVwiZXRoX3NpZ25UeXBlZERhdGFfdjNcIjpyZXR1cm4hYihlLnBhcmFtc1sxXSkmJmIoZS5wYXJhbXNbMF0pPyhoPWUucGFyYW1zWzBdLGM9ZS5wYXJhbXNbMV0pOihjPWUucGFyYW1zWzBdLGg9ZS5wYXJhbXNbMV0pLHU9ZS5wYXJhbXNbMl18fHt9LHM9Zih1LHtmcm9tOmgsZGF0YTpjfSksdm9pZCBuKFtmdW5jdGlvbihlKXtyZXR1cm4gaS52YWxpZGF0ZVR5cGVkTWVzc2FnZVYzKHMsZSl9LGZ1bmN0aW9uKGUpe3JldHVybiBpLnByb2Nlc3NUeXBlZE1lc3NhZ2VWMyhzLGUpfV0scik7Y2FzZVwicGFyaXR5X3Bvc3RUcmFuc2FjdGlvblwiOnJldHVybiBhPWUucGFyYW1zWzBdLHZvaWQgaS5wYXJpdHlQb3N0VHJhbnNhY3Rpb24oYSxyKTtjYXNlXCJwYXJpdHlfcG9zdFNpZ25cIjpyZXR1cm4gaD1lLnBhcmFtc1swXSxjPWUucGFyYW1zWzFdLHZvaWQgaS5wYXJpdHlQb3N0U2lnbihoLGMscik7Y2FzZVwicGFyaXR5X2NoZWNrUmVxdWVzdFwiOnJldHVybiBvPWUucGFyYW1zWzBdLHZvaWQgaS5wYXJpdHlDaGVja1JlcXVlc3QobyxyKTtjYXNlXCJwYXJpdHlfZGVmYXVsdEFjY291bnRcIjpyZXR1cm4gdm9pZCBpLmdldEFjY291bnRzKChmdW5jdGlvbihlLHQpe2lmKGUpcmV0dXJuIHIoZSk7dmFyIG49dFswXXx8bnVsbDtyKG51bGwsbil9KSk7ZGVmYXVsdDpyZXR1cm4gdm9pZCB0KCl9fSxsLnByb3RvdHlwZS5nZXRBY2NvdW50cz1mdW5jdGlvbihlKXtlKG51bGwsW10pfSxsLnByb3RvdHlwZS5wcm9jZXNzVHJhbnNhY3Rpb249ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO24oW2Z1bmN0aW9uKHQpe3JldHVybiByLmFwcHJvdmVUcmFuc2FjdGlvbihlLHQpfSxmdW5jdGlvbihlLHQpe3JldHVybiByLmNoZWNrQXBwcm92YWwoXCJ0cmFuc2FjdGlvblwiLGUsdCl9LGZ1bmN0aW9uKHQpe3JldHVybiByLmZpbmFsaXplQW5kU3VibWl0VHgoZSx0KX1dLHQpfSxsLnByb3RvdHlwZS5wcm9jZXNzU2lnblRyYW5zYWN0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcztuKFtmdW5jdGlvbih0KXtyZXR1cm4gci5hcHByb3ZlVHJhbnNhY3Rpb24oZSx0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5jaGVja0FwcHJvdmFsKFwidHJhbnNhY3Rpb25cIixlLHQpfSxmdW5jdGlvbih0KXtyZXR1cm4gci5maW5hbGl6ZVR4KGUsdCl9XSx0KX0sbC5wcm90b3R5cGUucHJvY2Vzc01lc3NhZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO24oW2Z1bmN0aW9uKHQpe3JldHVybiByLmFwcHJvdmVNZXNzYWdlKGUsdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuY2hlY2tBcHByb3ZhbChcIm1lc3NhZ2VcIixlLHQpfSxmdW5jdGlvbih0KXtyZXR1cm4gci5zaWduTWVzc2FnZShlLHQpfV0sdCl9LGwucHJvdG90eXBlLnByb2Nlc3NQZXJzb25hbE1lc3NhZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO24oW2Z1bmN0aW9uKHQpe3JldHVybiByLmFwcHJvdmVQZXJzb25hbE1lc3NhZ2UoZSx0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5jaGVja0FwcHJvdmFsKFwibWVzc2FnZVwiLGUsdCl9LGZ1bmN0aW9uKHQpe3JldHVybiByLnNpZ25QZXJzb25hbE1lc3NhZ2UoZSx0KX1dLHQpfSxsLnByb3RvdHlwZS5wcm9jZXNzVHlwZWRNZXNzYWdlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcztuKFtmdW5jdGlvbih0KXtyZXR1cm4gci5hcHByb3ZlVHlwZWRNZXNzYWdlKGUsdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuY2hlY2tBcHByb3ZhbChcIm1lc3NhZ2VcIixlLHQpfSxmdW5jdGlvbih0KXtyZXR1cm4gci5zaWduVHlwZWRNZXNzYWdlKGUsdCl9XSx0KX0sbC5wcm90b3R5cGUucHJvY2Vzc1R5cGVkTWVzc2FnZVYzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcztuKFtmdW5jdGlvbih0KXtyZXR1cm4gci5hcHByb3ZlVHlwZWRNZXNzYWdlVjMoZSx0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5jaGVja0FwcHJvdmFsKFwibWVzc2FnZVwiLGUsdCl9LGZ1bmN0aW9uKHQpe3JldHVybiByLnNpZ25UeXBlZE1lc3NhZ2VWMyhlLHQpfV0sdCl9LGwucHJvdG90eXBlLmF1dG9BcHByb3ZlPWZ1bmN0aW9uKGUsdCl7dChudWxsLCEwKX0sbC5wcm90b3R5cGUuY2hlY2tBcHByb3ZhbD1mdW5jdGlvbihlLHQscil7cih0P251bGw6bmV3IEVycm9yKFwiVXNlciBkZW5pZWQgXCIrZStcIiBzaWduYXR1cmUuXCIpKX0sbC5wcm90b3R5cGUucGFyaXR5UG9zdFRyYW5zYWN0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcyxuPVwiMHhcIityLl9wYXJpdHlSZXF1ZXN0Q291bnQudG9TdHJpbmcoMTYpO3IuX3Bhcml0eVJlcXVlc3RDb3VudCsrLHIuZW1pdFBheWxvYWQoe21ldGhvZDpcImV0aF9zZW5kVHJhbnNhY3Rpb25cIixwYXJhbXM6W2VdfSwoZnVuY3Rpb24oZSx0KXtpZihlKXIuX3Bhcml0eVJlcXVlc3RzW25dPXtlcnJvcjplfTtlbHNle3ZhciBpPXQucmVzdWx0O3IuX3Bhcml0eVJlcXVlc3RzW25dPWl9fSkpLHQobnVsbCxuKX0sbC5wcm90b3R5cGUucGFyaXR5UG9zdFNpZ249ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMsaT1cIjB4XCIrbi5fcGFyaXR5UmVxdWVzdENvdW50LnRvU3RyaW5nKDE2KTtuLl9wYXJpdHlSZXF1ZXN0Q291bnQrKyxuLmVtaXRQYXlsb2FkKHttZXRob2Q6XCJldGhfc2lnblwiLHBhcmFtczpbZSx0XX0sKGZ1bmN0aW9uKGUsdCl7aWYoZSluLl9wYXJpdHlSZXF1ZXN0c1tpXT17ZXJyb3I6ZX07ZWxzZXt2YXIgcj10LnJlc3VsdDtuLl9wYXJpdHlSZXF1ZXN0c1tpXT1yfX0pKSxyKG51bGwsaSl9LGwucHJvdG90eXBlLnBhcml0eUNoZWNrUmVxdWVzdD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX3Bhcml0eVJlcXVlc3RzW2VdfHxudWxsO3JldHVybiByP3IuZXJyb3I/dChyLmVycm9yKTp2b2lkIHQobnVsbCxyKTp0KG51bGwsbnVsbCl9LGwucHJvdG90eXBlLnJlY292ZXJQZXJzb25hbFNpZ25hdHVyZT1mdW5jdGlvbihlLHQpe3ZhciByPXZvaWQgMDt0cnl7cj1zLnJlY292ZXJQZXJzb25hbFNpZ25hdHVyZShlKX1jYXRjaChlKXtyZXR1cm4gdChlKX10KG51bGwscil9LGwucHJvdG90eXBlLnZhbGlkYXRlVHJhbnNhY3Rpb249ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT1lLmZyb20pcmV0dXJuIHQobmV3IEVycm9yKFwiVW5kZWZpbmVkIGFkZHJlc3MgLSBmcm9tIGFkZHJlc3MgcmVxdWlyZWQgdG8gc2lnbiB0cmFuc2FjdGlvbi5cIikpO3RoaXMudmFsaWRhdGVTZW5kZXIoZS5mcm9tLChmdW5jdGlvbihyLG4pe3JldHVybiByP3Qocik6bj92b2lkIHQoKTp0KG5ldyBFcnJvcignVW5rbm93biBhZGRyZXNzIC0gdW5hYmxlIHRvIHNpZ24gdHJhbnNhY3Rpb24gZm9yIHRoaXMgYWRkcmVzczogXCInK2UuZnJvbSsnXCInKSl9KSl9LGwucHJvdG90eXBlLnZhbGlkYXRlTWVzc2FnZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PWUuZnJvbSlyZXR1cm4gdChuZXcgRXJyb3IoXCJVbmRlZmluZWQgYWRkcmVzcyAtIGZyb20gYWRkcmVzcyByZXF1aXJlZCB0byBzaWduIG1lc3NhZ2UuXCIpKTt0aGlzLnZhbGlkYXRlU2VuZGVyKGUuZnJvbSwoZnVuY3Rpb24ocixuKXtyZXR1cm4gcj90KHIpOm4/dm9pZCB0KCk6dChuZXcgRXJyb3IoJ1Vua25vd24gYWRkcmVzcyAtIHVuYWJsZSB0byBzaWduIG1lc3NhZ2UgZm9yIHRoaXMgYWRkcmVzczogXCInK2UuZnJvbSsnXCInKSl9KSl9LGwucHJvdG90eXBlLnZhbGlkYXRlUGVyc29uYWxNZXNzYWdlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PWUuZnJvbT90KG5ldyBFcnJvcihcIlVuZGVmaW5lZCBhZGRyZXNzIC0gZnJvbSBhZGRyZXNzIHJlcXVpcmVkIHRvIHNpZ24gcGVyc29uYWwgbWVzc2FnZS5cIikpOnZvaWQgMD09PWUuZGF0YT90KG5ldyBFcnJvcihcIlVuZGVmaW5lZCBtZXNzYWdlIC0gbWVzc2FnZSByZXF1aXJlZCB0byBzaWduIHBlcnNvbmFsIG1lc3NhZ2UuXCIpKTpnKGUuZGF0YSk/dm9pZCB0aGlzLnZhbGlkYXRlU2VuZGVyKGUuZnJvbSwoZnVuY3Rpb24ocixuKXtyZXR1cm4gcj90KHIpOm4/dm9pZCB0KCk6dChuZXcgRXJyb3IoJ1Vua25vd24gYWRkcmVzcyAtIHVuYWJsZSB0byBzaWduIG1lc3NhZ2UgZm9yIHRoaXMgYWRkcmVzczogXCInK2UuZnJvbSsnXCInKSl9KSk6dChuZXcgRXJyb3IoXCJIb29rZWRXYWxsZXRTdWJwcm92aWRlciAtIHZhbGlkYXRlTWVzc2FnZSAtIG1lc3NhZ2Ugd2FzIG5vdCBlbmNvZGVkIGFzIGhleC5cIikpfSxsLnByb3RvdHlwZS52YWxpZGF0ZVR5cGVkTWVzc2FnZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT1lLmZyb20/dChuZXcgRXJyb3IoXCJVbmRlZmluZWQgYWRkcmVzcyAtIGZyb20gYWRkcmVzcyByZXF1aXJlZCB0byBzaWduIHR5cGVkIGRhdGEuXCIpKTp2b2lkIDA9PT1lLmRhdGE/dChuZXcgRXJyb3IoXCJVbmRlZmluZWQgZGF0YSAtIG1lc3NhZ2UgcmVxdWlyZWQgdG8gc2lnbiB0eXBlZCBkYXRhLlwiKSk6dm9pZCB0aGlzLnZhbGlkYXRlU2VuZGVyKGUuZnJvbSwoZnVuY3Rpb24ocixuKXtyZXR1cm4gcj90KHIpOm4/dm9pZCB0KCk6dChuZXcgRXJyb3IoJ1Vua25vd24gYWRkcmVzcyAtIHVuYWJsZSB0byBzaWduIG1lc3NhZ2UgZm9yIHRoaXMgYWRkcmVzczogXCInK2UuZnJvbSsnXCInKSl9KSl9LGwucHJvdG90eXBlLnZhbGlkYXRlVHlwZWRNZXNzYWdlVjM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09ZS5mcm9tP3QobmV3IEVycm9yKFwiVW5kZWZpbmVkIGFkZHJlc3MgLSBmcm9tIGFkZHJlc3MgcmVxdWlyZWQgdG8gc2lnbiB0eXBlZCBkYXRhLlwiKSk6dm9pZCAwPT09ZS5kYXRhP3QobmV3IEVycm9yKFwiVW5kZWZpbmVkIGRhdGEgLSBtZXNzYWdlIHJlcXVpcmVkIHRvIHNpZ24gdHlwZWQgZGF0YS5cIikpOnZvaWQgdGhpcy52YWxpZGF0ZVNlbmRlcihlLmZyb20sKGZ1bmN0aW9uKHIsbil7cmV0dXJuIHI/dChyKTpuP3ZvaWQgdCgpOnQobmV3IEVycm9yKCdVbmtub3duIGFkZHJlc3MgLSB1bmFibGUgdG8gc2lnbiBtZXNzYWdlIGZvciB0aGlzIGFkZHJlc3M6IFwiJytlLmZyb20rJ1wiJykpfSkpfSxsLnByb3RvdHlwZS52YWxpZGF0ZVNlbmRlcj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiB0KG51bGwsITEpO3RoaXMuZ2V0QWNjb3VudHMoKGZ1bmN0aW9uKHIsbil7aWYocilyZXR1cm4gdChyKTt2YXIgaT0tMSE9PW4ubWFwKHApLmluZGV4T2YoZS50b0xvd2VyQ2FzZSgpKTt0KG51bGwsaSl9KSl9LGwucHJvdG90eXBlLmZpbmFsaXplQW5kU3VibWl0VHg9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO3Iubm9uY2VMb2NrLnRha2UoKGZ1bmN0aW9uKCl7bihbci5maWxsSW5UeEV4dHJhcy5iaW5kKHIsZSksci5zaWduVHJhbnNhY3Rpb24uYmluZChyKSxyLnB1Ymxpc2hUcmFuc2FjdGlvbi5iaW5kKHIpXSwoZnVuY3Rpb24oZSxuKXtpZihyLm5vbmNlTG9jay5sZWF2ZSgpLGUpcmV0dXJuIHQoZSk7dChudWxsLG4pfSkpfSkpfSxsLnByb3RvdHlwZS5maW5hbGl6ZVR4PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcztyLm5vbmNlTG9jay50YWtlKChmdW5jdGlvbigpe24oW3IuZmlsbEluVHhFeHRyYXMuYmluZChyLGUpLHIuc2lnblRyYW5zYWN0aW9uLmJpbmQocildLChmdW5jdGlvbihuLGkpe2lmKHIubm9uY2VMb2NrLmxlYXZlKCksbilyZXR1cm4gdChuKTt0KG51bGwse3JhdzppLHR4OmV9KX0pKX0pKX0sbC5wcm90b3R5cGUucHVibGlzaFRyYW5zYWN0aW9uPWZ1bmN0aW9uKGUsdCl7dGhpcy5lbWl0UGF5bG9hZCh7bWV0aG9kOlwiZXRoX3NlbmRSYXdUcmFuc2FjdGlvblwiLHBhcmFtczpbZV19LChmdW5jdGlvbihlLHIpe2lmKGUpcmV0dXJuIHQoZSk7dChudWxsLHIucmVzdWx0KX0pKX0sbC5wcm90b3R5cGUuZXN0aW1hdGVHYXM9ZnVuY3Rpb24oZSx0KXtoKHRoaXMuZW5naW5lLGUsdCl9LGwucHJvdG90eXBlLmdldEdhc1ByaWNlPWZ1bmN0aW9uKGUpe3RoaXMuZW1pdFBheWxvYWQoe21ldGhvZDpcImV0aF9nYXNQcmljZVwiLHBhcmFtczpbXX0sKGZ1bmN0aW9uKHQscil7aWYodClyZXR1cm4gZSh0KTtlKG51bGwsci5yZXN1bHQpfSkpfSxsLnByb3RvdHlwZS5maWxsSW5UeEV4dHJhcz1mdW5jdGlvbihlLHQpe3ZhciByPWUuZnJvbSxuPXt9O3ZvaWQgMD09PWUuZ2FzUHJpY2UmJihuLmdhc1ByaWNlPXRoaXMuZ2V0R2FzUHJpY2UuYmluZCh0aGlzKSksdm9pZCAwPT09ZS5ub25jZSYmKG4ubm9uY2U9dGhpcy5lbWl0UGF5bG9hZC5iaW5kKHRoaXMse21ldGhvZDpcImV0aF9nZXRUcmFuc2FjdGlvbkNvdW50XCIscGFyYW1zOltyLFwicGVuZGluZ1wiXX0pKSx2b2lkIDA9PT1lLmdhcyYmKG4uZ2FzPXRoaXMuZXN0aW1hdGVHYXMuYmluZCh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybntmcm9tOmUuZnJvbSx0bzplLnRvLHZhbHVlOmUudmFsdWUsZGF0YTplLmRhdGEsZ2FzOmUuZ2FzLGdhc1ByaWNlOmUuZ2FzUHJpY2Usbm9uY2U6ZS5ub25jZX19KGUpKSksaShuLChmdW5jdGlvbihyLG4pe2lmKHIpcmV0dXJuIHQocik7dmFyIGk9e307bi5nYXNQcmljZSYmKGkuZ2FzUHJpY2U9bi5nYXNQcmljZSksbi5ub25jZSYmKGkubm9uY2U9bi5ub25jZS5yZXN1bHQpLG4uZ2FzJiYoaS5nYXM9bi5nYXMpLHQobnVsbCxmKGUsaSkpfSkpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNDcpLGk9cigyNTQpLG89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsdCksZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIXR8fFwib2JqZWN0XCIhPXR5cGVvZiB0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0P2U6dH0odGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLChmdW5jdGlvbihlKXt2YXIgdD1lLmJsb2NrVHJhY2tlcixyPWUucHJvdmlkZXIsbj1lLmVuZ2luZSxvPWkoe2Jsb2NrVHJhY2tlcjp0LHByb3ZpZGVyOnJ9KSxhPW8uZXZlbnRzLHM9by5taWRkbGV3YXJlO3JldHVybiBhLm9uKFwibm90aWZpY2F0aW9uXCIsKGZ1bmN0aW9uKGUpe3JldHVybiBuLmVtaXQoXCJkYXRhXCIsbnVsbCxlKX0pKSxzfSkpKX1yZXR1cm4gZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0odCxlKSx0fShuKTtlLmV4cG9ydHM9b30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD10LkVSUl9OT1RfSU5fSUZSQU1FPXQuRVJSX0NPTk5FQ1RJT05fVElNRU9VVD10LkVSUl9DT05ORUNUSU9OX0RFU1RST1lFRD12b2lkIDA7dmFyIG49XCJtZXNzYWdlXCI7dC5FUlJfQ09OTkVDVElPTl9ERVNUUk9ZRUQ9XCJDb25uZWN0aW9uRGVzdHJveWVkXCI7dC5FUlJfQ09OTkVDVElPTl9USU1FT1VUPVwiQ29ubmVjdGlvblRpbWVvdXRcIjt0LkVSUl9OT1RfSU5fSUZSQU1FPVwiTm90SW5JZnJhbWVcIjt2YXIgaSxvPXtcImh0dHA6XCI6XCI4MFwiLFwiaHR0cHM6XCI6XCI0NDNcIn0sYT0vXihodHRwcz86KT9cXC9cXC8oW14vOl0rKSg6KFxcZCspKT8vLHM9e0VSUl9DT05ORUNUSU9OX0RFU1RST1lFRDpcIkNvbm5lY3Rpb25EZXN0cm95ZWRcIixFUlJfQ09OTkVDVElPTl9USU1FT1VUOlwiQ29ubmVjdGlvblRpbWVvdXRcIixFUlJfTk9UX0lOX0lGUkFNRTpcIk5vdEluSWZyYW1lXCIsUHJvbWlzZTpmdW5jdGlvbigpe3RyeXtyZXR1cm4gd2luZG93P3dpbmRvdy5Qcm9taXNlOm51bGx9Y2F0Y2goZSl7cmV0dXJuIG51bGx9fSgpLGRlYnVnOiExfSxmPShpPTAsZnVuY3Rpb24oKXtyZXR1cm4rK2l9KSx1PWZ1bmN0aW9uKCl7aWYocy5kZWJ1Zyl7Zm9yKHZhciBlLHQ9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheSh0KSxuPTA7bjx0O24rKylyW25dPWFyZ3VtZW50c1tuXTsoZT1jb25zb2xlKS5sb2cuYXBwbHkoZSxbXCJbUGVucGFsXVwiXS5jb25jYXQocikpfX0sYz1mdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gZSgoZnVuY3Rpb24oKXt0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2UoKX0pKX0pKSx7dGhlbjpmdW5jdGlvbihlKXt0LnB1c2goZSl9fX0saD1mdW5jdGlvbihlKXtyZXR1cm57bmFtZTplLm5hbWUsbWVzc2FnZTplLm1lc3NhZ2Usc3RhY2s6ZS5zdGFja319LGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEVycm9yO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihyKXtyZXR1cm4gdFtyXT1lW3JdfSkpLHR9LGw9ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIG89dC5sb2NhbE5hbWUsYT10LmxvY2FsLGM9dC5yZW1vdGUsaD10LnJlbW90ZU9yaWdpbixsPSExO3UoXCJcIi5jb25jYXQobyxcIjogQ29ubmVjdGluZyBjYWxsIHNlbmRlclwiKSk7aS50aGVuKChmdW5jdGlvbigpe2w9ITB9KSksci5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodCksaT0wO2k8dDtpKyspcltpXT1hcmd1bWVudHNbaV07aWYodShcIlwiLmNvbmNhdChvLFwiOiBTZW5kaW5nIFwiKS5jb25jYXQoZSxcIigpIGNhbGxcIikpLGwpe3ZhciBwPW5ldyBFcnJvcihcIlVuYWJsZSB0byBzZW5kIFwiLmNvbmNhdChlLFwiKCkgY2FsbCBkdWUgXCIpK1widG8gZGVzdHJveWVkIGNvbm5lY3Rpb25cIik7dGhyb3cgcC5jb2RlPVwiQ29ubmVjdGlvbkRlc3Ryb3llZFwiLHB9cmV0dXJuIG5ldyBzLlByb21pc2UoKGZ1bmN0aW9uKHQsaSl7dmFyIHM9ZigpO2EuYWRkRXZlbnRMaXN0ZW5lcihuLChmdW5jdGlvbiByKGYpe2lmKGYuc291cmNlPT09YyYmZi5vcmlnaW49PT1oJiZcInJlcGx5XCI9PT1mLmRhdGEucGVucGFsJiZmLmRhdGEuaWQ9PT1zKXt1KFwiXCIuY29uY2F0KG8sXCI6IFJlY2VpdmVkIFwiKS5jb25jYXQoZSxcIigpIHJlcGx5XCIpKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIobixyKTt2YXIgbD1mLmRhdGEucmV0dXJuVmFsdWU7Zi5kYXRhLnJldHVyblZhbHVlSXNFcnJvciYmKGw9ZChsKSksKFwiZnVsZmlsbGVkXCI9PT1mLmRhdGEucmVzb2x1dGlvbj90OmkpKGwpfX0pKSxjLnBvc3RNZXNzYWdlKHtwZW5wYWw6XCJjYWxsXCIsaWQ6cyxtZXRob2ROYW1lOmUsYXJnczpyfSxoKX0pKX19KHQpLGV9KSxlKX0scD1mdW5jdGlvbihlLHQscil7dmFyIGk9ZS5sb2NhbE5hbWUsbz1lLmxvY2FsLGE9ZS5yZW1vdGUsZj1lLnJlbW90ZU9yaWdpbixjPSExO3UoXCJcIi5jb25jYXQoaSxcIjogQ29ubmVjdGluZyBjYWxsIHJlY2VpdmVyXCIpKTt2YXIgZD1mdW5jdGlvbihlKXtpZihlLnNvdXJjZT09PWEmJmUub3JpZ2luPT09ZiYmXCJjYWxsXCI9PT1lLmRhdGEucGVucGFsKXt2YXIgcj1lLmRhdGEsbj1yLm1ldGhvZE5hbWUsbz1yLmFyZ3MsZD1yLmlkO2lmKHUoXCJcIi5jb25jYXQoaSxcIjogUmVjZWl2ZWQgXCIpLmNvbmNhdChuLFwiKCkgY2FsbFwiKSksbiBpbiB0KXt2YXIgbD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYodShcIlwiLmNvbmNhdChpLFwiOiBTZW5kaW5nIFwiKS5jb25jYXQobixcIigpIHJlcGx5XCIpKSxjKXUoXCJcIi5jb25jYXQoaSxcIjogVW5hYmxlIHRvIHNlbmQgXCIpLmNvbmNhdChuLFwiKCkgcmVwbHkgZHVlIHRvIGRlc3Ryb3llZCBjb25uZWN0aW9uXCIpKTtlbHNle3ZhciByPXtwZW5wYWw6XCJyZXBseVwiLGlkOmQscmVzb2x1dGlvbjplLHJldHVyblZhbHVlOnR9O1wicmVqZWN0ZWRcIj09PWUmJnQgaW5zdGFuY2VvZiBFcnJvciYmKHIucmV0dXJuVmFsdWU9aCh0KSxyLnJldHVyblZhbHVlSXNFcnJvcj0hMCk7dHJ5e2EucG9zdE1lc3NhZ2UocixmKX1jYXRjaChlKXt0aHJvd1wiRGF0YUNsb25lRXJyb3JcIj09PWUubmFtZSYmYS5wb3N0TWVzc2FnZSh7cGVucGFsOlwicmVwbHlcIixpZDpkLHJlc29sdXRpb246XCJyZWplY3RlZFwiLHJldHVyblZhbHVlOmgoZSkscmV0dXJuVmFsdWVJc0Vycm9yOiEwfSxmKSxlfX19fTtuZXcgcy5Qcm9taXNlKChmdW5jdGlvbihlKXtyZXR1cm4gZSh0W25dLmFwcGx5KHQsbykpfSkpLnRoZW4obChcImZ1bGZpbGxlZFwiKSxsKFwicmVqZWN0ZWRcIikpfX19O28uYWRkRXZlbnRMaXN0ZW5lcihuLGQpLHIudGhlbigoZnVuY3Rpb24oKXtjPSEwLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGQpfSkpfTtzLmNvbm5lY3RUb0NoaWxkPWZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS51cmwsaT1lLmFwcGVuZFRvLGY9ZS5tZXRob2RzLGg9dm9pZCAwPT09Zj97fTpmLGQ9ZS50aW1lb3V0LGI9bmV3IGMoKGZ1bmN0aW9uKGUpe3Q9ZX0pKSx5PXdpbmRvdyxnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7KGl8fGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKGcpLGIudGhlbigoZnVuY3Rpb24oKXtnLnBhcmVudE5vZGUmJmcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChnKX0pKTt2YXIgdj1nLmNvbnRlbnRXaW5kb3d8fGcuY29udGVudERvY3VtZW50LnBhcmVudFdpbmRvdyxtPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpPWRvY3VtZW50LmxvY2F0aW9uLHM9YS5leGVjKGUpO3M/KHQ9c1sxXT9zWzFdOmkucHJvdG9jb2wscj1zWzJdLG49c1s0XSk6KHQ9aS5wcm90b2NvbCxyPWkuaG9zdG5hbWUsbj1pLnBvcnQpO3ZhciBmPW4mJm4hPT1vW3RdP1wiOlwiLmNvbmNhdChuKTpcIlwiO3JldHVyblwiXCIuY29uY2F0KHQsXCIvL1wiKS5jb25jYXQocikuY29uY2F0KGYpfShyKTtyZXR1cm57cHJvbWlzZTpuZXcgcy5Qcm9taXNlKChmdW5jdGlvbihlLGkpe3ZhciBvO3ZvaWQgMCE9PWQmJihvPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIGU9bmV3IEVycm9yKFwiQ29ubmVjdGlvbiB0byBjaGlsZCB0aW1lZCBvdXQgYWZ0ZXIgXCIuY29uY2F0KGQsXCJtc1wiKSk7ZS5jb2RlPVwiQ29ubmVjdGlvblRpbWVvdXRcIixpKGUpLHQoKX0pLGQpKTt2YXIgYSxzLGY9e30sdz1mdW5jdGlvbih0KXtpZih0LnNvdXJjZT09PXYmJnQub3JpZ2luPT09bSYmXCJoYW5kc2hha2VcIj09PXQuZGF0YS5wZW5wYWwpe3UoXCJQYXJlbnQ6IFJlY2VpdmVkIGhhbmRzaGFrZSwgc2VuZGluZyByZXBseVwiKSx0LnNvdXJjZS5wb3N0TWVzc2FnZSh7cGVucGFsOlwiaGFuZHNoYWtlLXJlcGx5XCIsbWV0aG9kTmFtZXM6T2JqZWN0LmtleXMoaCl9LHQub3JpZ2luKTt2YXIgcj17bG9jYWxOYW1lOlwiUGFyZW50XCIsbG9jYWw6eSxyZW1vdGU6dixyZW1vdGVPcmlnaW46dC5vcmlnaW59O3MmJnMoKTt2YXIgbj1uZXcgYygoZnVuY3Rpb24oZSl7Yi50aGVuKGUpLHM9ZX0pKTtwKHIsaCxuKSxhJiZhLmZvckVhY2goKGZ1bmN0aW9uKGUpe2RlbGV0ZSBmW2VdfSkpLGE9dC5kYXRhLm1ldGhvZE5hbWVzLGwoZixyLGEsYiksY2xlYXJUaW1lb3V0KG8pLGUoZil9fTt5LmFkZEV2ZW50TGlzdGVuZXIobix3KSxiLnRoZW4oKGZ1bmN0aW9uKCl7eS5yZW1vdmVFdmVudExpc3RlbmVyKG4sdyk7dmFyIGU9bmV3IEVycm9yKFwiQ29ubmVjdGlvbiBkZXN0cm95ZWRcIik7ZS5jb2RlPVwiQ29ubmVjdGlvbkRlc3Ryb3llZFwiLGkoZSl9KSksdShcIlBhcmVudDogTG9hZGluZyBpZnJhbWVcIiksZy5zcmM9cn0pKSxpZnJhbWU6ZyxkZXN0cm95OnR9fSxzLmNvbm5lY3RUb1BhcmVudD1mdW5jdGlvbigpe3ZhciBlLHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHI9dC5wYXJlbnRPcmlnaW4saT12b2lkIDA9PT1yP1wiKlwiOnIsbz10Lm1ldGhvZHMsYT12b2lkIDA9PT1vP3t9Om8sZj10LnRpbWVvdXQ7aWYod2luZG93PT09d2luZG93LnRvcCl7dmFyIGg9bmV3IEVycm9yKFwiY29ubmVjdFRvUGFyZW50KCkgbXVzdCBiZSBjYWxsZWQgd2l0aGluIGFuIGlmcmFtZVwiKTt0aHJvdyBoLmNvZGU9XCJOb3RJbklmcmFtZVwiLGh9dmFyIGQ9bmV3IGMoKGZ1bmN0aW9uKHQpe2U9dH0pKSxiPXdpbmRvdyx5PWIucGFyZW50LGc9bmV3IHMuUHJvbWlzZSgoZnVuY3Rpb24odCxyKXt2YXIgbzt2b2lkIDAhPT1mJiYobz1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3ZhciB0PW5ldyBFcnJvcihcIkNvbm5lY3Rpb24gdG8gcGFyZW50IHRpbWVkIG91dCBhZnRlciBcIi5jb25jYXQoZixcIm1zXCIpKTt0LmNvZGU9XCJDb25uZWN0aW9uVGltZW91dFwiLHIodCksZSgpfSksZikpO3ZhciBzPWZ1bmN0aW9uIGUocil7aWYoKFwiKlwiPT09aXx8aT09PXIub3JpZ2luKSYmci5zb3VyY2U9PT15JiZcImhhbmRzaGFrZS1yZXBseVwiPT09ci5kYXRhLnBlbnBhbCl7dShcIkNoaWxkOiBSZWNlaXZlZCBoYW5kc2hha2UgcmVwbHlcIiksYi5yZW1vdmVFdmVudExpc3RlbmVyKG4sZSk7dmFyIHM9e2xvY2FsTmFtZTpcIkNoaWxkXCIsbG9jYWw6YixyZW1vdGU6eSxyZW1vdGVPcmlnaW46ci5vcmlnaW59LGY9e307cChzLGEsZCksbChmLHMsci5kYXRhLm1ldGhvZE5hbWVzLGQpLGNsZWFyVGltZW91dChvKSx0KGYpfX07Yi5hZGRFdmVudExpc3RlbmVyKG4scyksZC50aGVuKChmdW5jdGlvbigpe2IucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLHMpO3ZhciBlPW5ldyBFcnJvcihcIkNvbm5lY3Rpb24gZGVzdHJveWVkXCIpO2UuY29kZT1cIkNvbm5lY3Rpb25EZXN0cm95ZWRcIixyKGUpfSkpLHUoXCJDaGlsZDogU2VuZGluZyBoYW5kc2hha2VcIikseS5wb3N0TWVzc2FnZSh7cGVucGFsOlwiaGFuZHNoYWtlXCIsbWV0aG9kTmFtZXM6T2JqZWN0LmtleXMoYSl9LGkpfSkpO3JldHVybntwcm9taXNlOmcsZGVzdHJveTplfX07dmFyIGI9czt0LmRlZmF1bHQ9Yn0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNvcHkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZmlsbCYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5yZWFkVUludDh9fSxmdW5jdGlvbihlLHQpe1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7ZS5zdXBlcl89dCxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7ZS5zdXBlcl89dDt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9dC5wcm90b3R5cGUsZS5wcm90b3R5cGU9bmV3IHIsZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9cigxMTMpKHIoMTI5KSl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDExNCksaT1yKDEyOCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW4oZSkscj1pKGUpO3JldHVybiBmdW5jdGlvbihlLG4pe3N3aXRjaChcInN0cmluZ1wiPT10eXBlb2YgZT9lLnRvTG93ZXJDYXNlKCk6ZSl7Y2FzZVwia2VjY2FrMjI0XCI6cmV0dXJuIG5ldyB0KDExNTIsNDQ4LG51bGwsMjI0LG4pO2Nhc2VcImtlY2NhazI1NlwiOnJldHVybiBuZXcgdCgxMDg4LDUxMixudWxsLDI1NixuKTtjYXNlXCJrZWNjYWszODRcIjpyZXR1cm4gbmV3IHQoODMyLDc2OCxudWxsLDM4NCxuKTtjYXNlXCJrZWNjYWs1MTJcIjpyZXR1cm4gbmV3IHQoNTc2LDEwMjQsbnVsbCw1MTIsbik7Y2FzZVwic2hhMy0yMjRcIjpyZXR1cm4gbmV3IHQoMTE1Miw0NDgsNiwyMjQsbik7Y2FzZVwic2hhMy0yNTZcIjpyZXR1cm4gbmV3IHQoMTA4OCw1MTIsNiwyNTYsbik7Y2FzZVwic2hhMy0zODRcIjpyZXR1cm4gbmV3IHQoODMyLDc2OCw2LDM4NCxuKTtjYXNlXCJzaGEzLTUxMlwiOnJldHVybiBuZXcgdCg1NzYsMTAyNCw2LDUxMixuKTtjYXNlXCJzaGFrZTEyOFwiOnJldHVybiBuZXcgcigxMzQ0LDI1NiwzMSxuKTtjYXNlXCJzaGFrZTI1NlwiOnJldHVybiBuZXcgcigxMDg4LDUxMiwzMSxuKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsZCBhbGdvcml0aG06IFwiK2UpfX19fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigyKS5CdWZmZXIsaT1yKDE4KS5UcmFuc2Zvcm0sbz1yKDApO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQscixuLG8sYSl7aS5jYWxsKHRoaXMsYSksdGhpcy5fcmF0ZT10LHRoaXMuX2NhcGFjaXR5PXIsdGhpcy5fZGVsaW1pdGVkU3VmZml4PW4sdGhpcy5faGFzaEJpdExlbmd0aD1vLHRoaXMuX29wdGlvbnM9YSx0aGlzLl9zdGF0ZT1uZXcgZSx0aGlzLl9zdGF0ZS5pbml0aWFsaXplKHQsciksdGhpcy5fZmluYWxpemVkPSExfXJldHVybiBvKHQsaSksdC5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihlLHQscil7dmFyIG49bnVsbDt0cnl7dGhpcy51cGRhdGUoZSx0KX1jYXRjaChlKXtuPWV9cihuKX0sdC5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKGUpe3ZhciB0PW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChlKXt0PWV9ZSh0KX0sdC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7aWYoIW4uaXNCdWZmZXIoZSkmJlwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJEYXRhIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBidWZmZXJcIik7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcihcIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZFwiKTtyZXR1cm4gbi5pc0J1ZmZlcihlKXx8KGU9bi5mcm9tKGUsdCkpLHRoaXMuX3N0YXRlLmFic29yYihlKSx0aGlzfSx0LnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oZSl7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcihcIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZFwiKTt0aGlzLl9maW5hbGl6ZWQ9ITAsdGhpcy5fZGVsaW1pdGVkU3VmZml4JiZ0aGlzLl9zdGF0ZS5hYnNvcmJMYXN0RmV3Qml0cyh0aGlzLl9kZWxpbWl0ZWRTdWZmaXgpO3ZhciB0PXRoaXMuX3N0YXRlLnNxdWVlemUodGhpcy5faGFzaEJpdExlbmd0aC84KTtyZXR1cm4gdm9pZCAwIT09ZSYmKHQ9dC50b1N0cmluZyhlKSksdGhpcy5fcmVzZXRTdGF0ZSgpLHR9LHQucHJvdG90eXBlLl9yZXNldFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmluaXRpYWxpemUodGhpcy5fcmF0ZSx0aGlzLl9jYXBhY2l0eSksdGhpc30sdC5wcm90b3R5cGUuX2Nsb25lPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHQodGhpcy5fcmF0ZSx0aGlzLl9jYXBhY2l0eSx0aGlzLl9kZWxpbWl0ZWRTdWZmaXgsdGhpcy5faGFzaEJpdExlbmd0aCx0aGlzLl9vcHRpb25zKTtyZXR1cm4gdGhpcy5fc3RhdGUuY29weShlLl9zdGF0ZSksZS5fZmluYWxpemVkPXRoaXMuX2ZpbmFsaXplZCxlfSx0fX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuYnl0ZUxlbmd0aD1mdW5jdGlvbihlKXt2YXIgdD11KGUpLHI9dFswXSxuPXRbMV07cmV0dXJuIDMqKHIrbikvNC1ufSx0LnRvQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe3ZhciB0LHIsbj11KGUpLGE9blswXSxzPW5bMV0sZj1uZXcgbyhmdW5jdGlvbihlLHQscil7cmV0dXJuIDMqKHQrcikvNC1yfSgwLGEscykpLGM9MCxoPXM+MD9hLTQ6YTtmb3Iocj0wO3I8aDtyKz00KXQ9aVtlLmNoYXJDb2RlQXQocildPDwxOHxpW2UuY2hhckNvZGVBdChyKzEpXTw8MTJ8aVtlLmNoYXJDb2RlQXQocisyKV08PDZ8aVtlLmNoYXJDb2RlQXQociszKV0sZltjKytdPXQ+PjE2JjI1NSxmW2MrK109dD4+OCYyNTUsZltjKytdPTI1NSZ0OzI9PT1zJiYodD1pW2UuY2hhckNvZGVBdChyKV08PDJ8aVtlLmNoYXJDb2RlQXQocisxKV0+PjQsZltjKytdPTI1NSZ0KTsxPT09cyYmKHQ9aVtlLmNoYXJDb2RlQXQocildPDwxMHxpW2UuY2hhckNvZGVBdChyKzEpXTw8NHxpW2UuY2hhckNvZGVBdChyKzIpXT4+MixmW2MrK109dD4+OCYyNTUsZltjKytdPTI1NSZ0KTtyZXR1cm4gZn0sdC5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUubGVuZ3RoLGk9ciUzLG89W10sYT0wLHM9ci1pO2E8czthKz0xNjM4MylvLnB1c2goYyhlLGEsYSsxNjM4Mz5zP3M6YSsxNjM4MykpOzE9PT1pPyh0PWVbci0xXSxvLnB1c2goblt0Pj4yXStuW3Q8PDQmNjNdK1wiPT1cIikpOjI9PT1pJiYodD0oZVtyLTJdPDw4KStlW3ItMV0sby5wdXNoKG5bdD4+MTBdK25bdD4+NCY2M10rblt0PDwyJjYzXStcIj1cIikpO3JldHVybiBvLmpvaW4oXCJcIil9O2Zvcih2YXIgbj1bXSxpPVtdLG89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxhPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLHM9MCxmPWEubGVuZ3RoO3M8ZjsrK3MpbltzXT1hW3NdLGlbYS5jaGFyQ29kZUF0KHMpXT1zO2Z1bmN0aW9uIHUoZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodCU0PjApdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNFwiKTt2YXIgcj1lLmluZGV4T2YoXCI9XCIpO3JldHVybi0xPT09ciYmKHI9dCksW3Iscj09PXQ/MDo0LXIlNF19ZnVuY3Rpb24gYyhlLHQscil7Zm9yKHZhciBpLG8sYT1bXSxzPXQ7czxyO3MrPTMpaT0oZVtzXTw8MTYmMTY3MTE2ODApKyhlW3MrMV08PDgmNjUyODApKygyNTUmZVtzKzJdKSxhLnB1c2goblsobz1pKT4+MTgmNjNdK25bbz4+MTImNjNdK25bbz4+NiY2M10rbls2MyZvXSk7cmV0dXJuIGEuam9pbihcIlwiKX1pW1wiLVwiLmNoYXJDb2RlQXQoMCldPTYyLGlbXCJfXCIuY2hhckNvZGVBdCgwKV09NjN9LGZ1bmN0aW9uKGUsdCl7dC5yZWFkPWZ1bmN0aW9uKGUsdCxyLG4saSl7dmFyIG8sYSxzPTgqaS1uLTEsZj0oMTw8cyktMSx1PWY+PjEsYz0tNyxoPXI/aS0xOjAsZD1yPy0xOjEsbD1lW3QraF07Zm9yKGgrPWQsbz1sJigxPDwtYyktMSxsPj49LWMsYys9cztjPjA7bz0yNTYqbytlW3QraF0saCs9ZCxjLT04KTtmb3IoYT1vJigxPDwtYyktMSxvPj49LWMsYys9bjtjPjA7YT0yNTYqYStlW3QraF0saCs9ZCxjLT04KTtpZigwPT09bylvPTEtdTtlbHNle2lmKG89PT1mKXJldHVybiBhP05hTjoxLzAqKGw/LTE6MSk7YSs9TWF0aC5wb3coMixuKSxvLT11fXJldHVybihsPy0xOjEpKmEqTWF0aC5wb3coMixvLW4pfSx0LndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4saSxvKXt2YXIgYSxzLGYsdT04Km8taS0xLGM9KDE8PHUpLTEsaD1jPj4xLGQ9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxsPW4/MDpvLTEscD1uPzE6LTEsYj10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KHM9aXNOYU4odCk/MTowLGE9Yyk6KGE9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCooZj1NYXRoLnBvdygyLC1hKSk8MSYmKGEtLSxmKj0yKSwodCs9YStoPj0xP2QvZjpkKk1hdGgucG93KDIsMS1oKSkqZj49MiYmKGErKyxmLz0yKSxhK2g+PWM/KHM9MCxhPWMpOmEraD49MT8ocz0odCpmLTEpKk1hdGgucG93KDIsaSksYSs9aCk6KHM9dCpNYXRoLnBvdygyLGgtMSkqTWF0aC5wb3coMixpKSxhPTApKTtpPj04O2VbcitsXT0yNTUmcyxsKz1wLHMvPTI1NixpLT04KTtmb3IoYT1hPDxpfHMsdSs9aTt1PjA7ZVtyK2xdPTI1NSZhLGwrPXAsYS89MjU2LHUtPTgpO2VbcitsLXBdfD0xMjgqYn19LGZ1bmN0aW9uKGUsdCl7dmFyIHI9e30udG9TdHJpbmc7ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09ci5jYWxsKGUpfX0sZnVuY3Rpb24oZSx0KXt2YXIgcj17fS50b1N0cmluZztlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT1yLmNhbGwoZSl9fSxmdW5jdGlvbihlLHQpe30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMzEpLkJ1ZmZlcixpPXIoMTIxKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyxlKSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpe3ZhciB0PXtkYXRhOmUsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PXQ6dGhpcy5oZWFkPXQsdGhpcy50YWlsPXQsKyt0aGlzLmxlbmd0aH0sZS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihlKXt2YXIgdD17ZGF0YTplLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9dCksdGhpcy5oZWFkPXQsKyt0aGlzLmxlbmd0aH0sZS5wcm90b3R5cGUuc2hpZnQ9ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBlPXRoaXMuaGVhZC5kYXRhO3JldHVybiAxPT09dGhpcy5sZW5ndGg/dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsOnRoaXMuaGVhZD10aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLGV9fSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKGUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm5cIlwiO2Zvcih2YXIgdD10aGlzLmhlYWQscj1cIlwiK3QuZGF0YTt0PXQubmV4dDspcis9ZSt0LmRhdGE7cmV0dXJuIHJ9LGUucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihlKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIG4uYWxsb2MoMCk7aWYoMT09PXRoaXMubGVuZ3RoKXJldHVybiB0aGlzLmhlYWQuZGF0YTtmb3IodmFyIHQscixpLG89bi5hbGxvY1Vuc2FmZShlPj4+MCksYT10aGlzLmhlYWQscz0wO2E7KXQ9YS5kYXRhLHI9byxpPXMsdC5jb3B5KHIsaSkscys9YS5kYXRhLmxlbmd0aCxhPWEubmV4dDtyZXR1cm4gb30sZX0oKSxpJiZpLmluc3BlY3QmJmkuaW5zcGVjdC5jdXN0b20mJihlLmV4cG9ydHMucHJvdG90eXBlW2kuaW5zcGVjdC5jdXN0b21dPWZ1bmN0aW9uKCl7dmFyIGU9aS5pbnNwZWN0KHtsZW5ndGg6dGhpcy5sZW5ndGh9KTtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lK1wiIFwiK2V9KX0sZnVuY3Rpb24oZSx0KXt9LGZ1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oZSxyKXtcInVzZSBzdHJpY3RcIjtpZighZS5zZXRJbW1lZGlhdGUpe3ZhciBuLGksbyxhLHMsZj0xLHU9e30sYz0hMSxoPWUuZG9jdW1lbnQsZD1PYmplY3QuZ2V0UHJvdG90eXBlT2YmJk9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtkPWQmJmQuc2V0VGltZW91dD9kOmUsXCJbb2JqZWN0IHByb2Nlc3NdXCI9PT17fS50b1N0cmluZy5jYWxsKGUucHJvY2Vzcyk/bj1mdW5jdGlvbihlKXt0Lm5leHRUaWNrKChmdW5jdGlvbigpe3AoZSl9KSl9OiFmdW5jdGlvbigpe2lmKGUucG9zdE1lc3NhZ2UmJiFlLmltcG9ydFNjcmlwdHMpe3ZhciB0PSEwLHI9ZS5vbm1lc3NhZ2U7cmV0dXJuIGUub25tZXNzYWdlPWZ1bmN0aW9uKCl7dD0hMX0sZS5wb3N0TWVzc2FnZShcIlwiLFwiKlwiKSxlLm9ubWVzc2FnZT1yLHR9fSgpP2UuTWVzc2FnZUNoYW5uZWw/KChvPW5ldyBNZXNzYWdlQ2hhbm5lbCkucG9ydDEub25tZXNzYWdlPWZ1bmN0aW9uKGUpe3AoZS5kYXRhKX0sbj1mdW5jdGlvbihlKXtvLnBvcnQyLnBvc3RNZXNzYWdlKGUpfSk6aCYmXCJvbnJlYWR5c3RhdGVjaGFuZ2VcImluIGguY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKT8oaT1oLmRvY3VtZW50RWxlbWVudCxuPWZ1bmN0aW9uKGUpe3ZhciB0PWguY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTt0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe3AoZSksdC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxpLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH0saS5hcHBlbmRDaGlsZCh0KX0pOm49ZnVuY3Rpb24oZSl7c2V0VGltZW91dChwLDAsZSl9OihhPVwic2V0SW1tZWRpYXRlJFwiK01hdGgucmFuZG9tKCkrXCIkXCIscz1mdW5jdGlvbih0KXt0LnNvdXJjZT09PWUmJlwic3RyaW5nXCI9PXR5cGVvZiB0LmRhdGEmJjA9PT10LmRhdGEuaW5kZXhPZihhKSYmcCgrdC5kYXRhLnNsaWNlKGEubGVuZ3RoKSl9LGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIscywhMSk6ZS5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLHMpLG49ZnVuY3Rpb24odCl7ZS5wb3N0TWVzc2FnZShhK3QsXCIqXCIpfSksZC5zZXRJbW1lZGlhdGU9ZnVuY3Rpb24oZSl7XCJmdW5jdGlvblwiIT10eXBlb2YgZSYmKGU9bmV3IEZ1bmN0aW9uKFwiXCIrZSkpO2Zvcih2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT1hcmd1bWVudHNbcisxXTt2YXIgaT17Y2FsbGJhY2s6ZSxhcmdzOnR9O3JldHVybiB1W2ZdPWksbihmKSxmKyt9LGQuY2xlYXJJbW1lZGlhdGU9bH1mdW5jdGlvbiBsKGUpe2RlbGV0ZSB1W2VdfWZ1bmN0aW9uIHAoZSl7aWYoYylzZXRUaW1lb3V0KHAsMCxlKTtlbHNle3ZhciB0PXVbZV07aWYodCl7Yz0hMDt0cnl7IWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2FsbGJhY2sscj1lLmFyZ3M7c3dpdGNoKHIubGVuZ3RoKXtjYXNlIDA6dCgpO2JyZWFrO2Nhc2UgMTp0KHJbMF0pO2JyZWFrO2Nhc2UgMjp0KHJbMF0sclsxXSk7YnJlYWs7Y2FzZSAzOnQoclswXSxyWzFdLHJbMl0pO2JyZWFrO2RlZmF1bHQ6dC5hcHBseSh2b2lkIDAscil9fSh0KX1maW5hbGx5e2woZSksYz0hMX19fX19KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBzZWxmP3ZvaWQgMD09PWU/dGhpczplOnNlbGYpfSkuY2FsbCh0aGlzLHIoNSkscigzKSl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9bzt2YXIgbj1yKDYxKSxpPU9iamVjdC5jcmVhdGUocigxOSkpO2Z1bmN0aW9uIG8oZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbykpcmV0dXJuIG5ldyBvKGUpO24uY2FsbCh0aGlzLGUpfWkuaW5oZXJpdHM9cigwKSxpLmluaGVyaXRzKG8sbiksby5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihlLHQscil7cihudWxsLGUpfX0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDMyKX0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDExKX0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDMwKS5UcmFuc2Zvcm19LGZ1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9cigzMCkuUGFzc1Rocm91Z2h9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDIpLkJ1ZmZlcixpPXIoMTgpLlRyYW5zZm9ybSxvPXIoMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxyLG4sbyl7aS5jYWxsKHRoaXMsbyksdGhpcy5fcmF0ZT10LHRoaXMuX2NhcGFjaXR5PXIsdGhpcy5fZGVsaW1pdGVkU3VmZml4PW4sdGhpcy5fb3B0aW9ucz1vLHRoaXMuX3N0YXRlPW5ldyBlLHRoaXMuX3N0YXRlLmluaXRpYWxpemUodCxyKSx0aGlzLl9maW5hbGl6ZWQ9ITF9cmV0dXJuIG8odCxpKSx0LnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1udWxsO3RyeXt0aGlzLnVwZGF0ZShlLHQpfWNhdGNoKGUpe249ZX1yKG4pfSx0LnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKGUpe3RoaXMucHVzaCh0aGlzLnNxdWVlemUoZSkpfSx0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXtpZighbi5pc0J1ZmZlcihlKSYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRhdGEgbXVzdCBiZSBhIHN0cmluZyBvciBhIGJ1ZmZlclwiKTtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKFwiU3F1ZWV6ZSBhbHJlYWR5IGNhbGxlZFwiKTtyZXR1cm4gbi5pc0J1ZmZlcihlKXx8KGU9bi5mcm9tKGUsdCkpLHRoaXMuX3N0YXRlLmFic29yYihlKSx0aGlzfSx0LnByb3RvdHlwZS5zcXVlZXplPWZ1bmN0aW9uKGUsdCl7dGhpcy5fZmluYWxpemVkfHwodGhpcy5fZmluYWxpemVkPSEwLHRoaXMuX3N0YXRlLmFic29yYkxhc3RGZXdCaXRzKHRoaXMuX2RlbGltaXRlZFN1ZmZpeCkpO3ZhciByPXRoaXMuX3N0YXRlLnNxdWVlemUoZSk7cmV0dXJuIHZvaWQgMCE9PXQmJihyPXIudG9TdHJpbmcodCkpLHJ9LHQucHJvdG90eXBlLl9yZXNldFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmluaXRpYWxpemUodGhpcy5fcmF0ZSx0aGlzLl9jYXBhY2l0eSksdGhpc30sdC5wcm90b3R5cGUuX2Nsb25lPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHQodGhpcy5fcmF0ZSx0aGlzLl9jYXBhY2l0eSx0aGlzLl9kZWxpbWl0ZWRTdWZmaXgsdGhpcy5fb3B0aW9ucyk7cmV0dXJuIHRoaXMuX3N0YXRlLmNvcHkoZS5fc3RhdGUpLGUuX2ZpbmFsaXplZD10aGlzLl9maW5hbGl6ZWQsZX0sdH19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDIpLkJ1ZmZlcixpPXIoMTMwKTtmdW5jdGlvbiBvKCl7dGhpcy5zdGF0ZT1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdGhpcy5ibG9ja1NpemU9bnVsbCx0aGlzLmNvdW50PTAsdGhpcy5zcXVlZXppbmc9ITF9by5wcm90b3R5cGUuaW5pdGlhbGl6ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wO3I8NTA7KytyKXRoaXMuc3RhdGVbcl09MDt0aGlzLmJsb2NrU2l6ZT1lLzgsdGhpcy5jb3VudD0wLHRoaXMuc3F1ZWV6aW5nPSExfSxvLnByb3RvdHlwZS5hYnNvcmI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDsrK3QpdGhpcy5zdGF0ZVt+fih0aGlzLmNvdW50LzQpXV49ZVt0XTw8dGhpcy5jb3VudCU0KjgsdGhpcy5jb3VudCs9MSx0aGlzLmNvdW50PT09dGhpcy5ibG9ja1NpemUmJihpLnAxNjAwKHRoaXMuc3RhdGUpLHRoaXMuY291bnQ9MCl9LG8ucHJvdG90eXBlLmFic29yYkxhc3RGZXdCaXRzPWZ1bmN0aW9uKGUpe3RoaXMuc3RhdGVbfn4odGhpcy5jb3VudC80KV1ePWU8PHRoaXMuY291bnQlNCo4LDAhPSgxMjgmZSkmJnRoaXMuY291bnQ9PT10aGlzLmJsb2NrU2l6ZS0xJiZpLnAxNjAwKHRoaXMuc3RhdGUpLHRoaXMuc3RhdGVbfn4oKHRoaXMuYmxvY2tTaXplLTEpLzQpXV49MTI4PDwodGhpcy5ibG9ja1NpemUtMSklNCo4LGkucDE2MDAodGhpcy5zdGF0ZSksdGhpcy5jb3VudD0wLHRoaXMuc3F1ZWV6aW5nPSEwfSxvLnByb3RvdHlwZS5zcXVlZXplPWZ1bmN0aW9uKGUpe3RoaXMuc3F1ZWV6aW5nfHx0aGlzLmFic29yYkxhc3RGZXdCaXRzKDEpO2Zvcih2YXIgdD1uLmFsbG9jKGUpLHI9MDtyPGU7KytyKXRbcl09dGhpcy5zdGF0ZVt+fih0aGlzLmNvdW50LzQpXT4+PnRoaXMuY291bnQlNCo4JjI1NSx0aGlzLmNvdW50Kz0xLHRoaXMuY291bnQ9PT10aGlzLmJsb2NrU2l6ZSYmKGkucDE2MDAodGhpcy5zdGF0ZSksdGhpcy5jb3VudD0wKTtyZXR1cm4gdH0sby5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PDUwOysrdCllLnN0YXRlW3RdPXRoaXMuc3RhdGVbdF07ZS5ibG9ja1NpemU9dGhpcy5ibG9ja1NpemUsZS5jb3VudD10aGlzLmNvdW50LGUuc3F1ZWV6aW5nPXRoaXMuc3F1ZWV6aW5nfSxlLmV4cG9ydHM9b30sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPVsxLDAsMzI4OTgsMCwzMjkwNiwyMTQ3NDgzNjQ4LDIxNDc1MTY0MTYsMjE0NzQ4MzY0OCwzMjkwNywwLDIxNDc0ODM2NDksMCwyMTQ3NTE2NTQ1LDIxNDc0ODM2NDgsMzI3NzcsMjE0NzQ4MzY0OCwxMzgsMCwxMzYsMCwyMTQ3NTE2NDI1LDAsMjE0NzQ4MzY1OCwwLDIxNDc1MTY1NTUsMCwxMzksMjE0NzQ4MzY0OCwzMjkwNSwyMTQ3NDgzNjQ4LDMyNzcxLDIxNDc0ODM2NDgsMzI3NzAsMjE0NzQ4MzY0OCwxMjgsMjE0NzQ4MzY0OCwzMjc3OCwwLDIxNDc0ODM2NTgsMjE0NzQ4MzY0OCwyMTQ3NTE2NTQ1LDIxNDc0ODM2NDgsMzI4OTYsMjE0NzQ4MzY0OCwyMTQ3NDgzNjQ5LDAsMjE0NzUxNjQyNCwyMTQ3NDgzNjQ4XTt0LnAxNjAwPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8MjQ7Kyt0KXt2YXIgcj1lWzBdXmVbMTBdXmVbMjBdXmVbMzBdXmVbNDBdLGk9ZVsxXV5lWzExXV5lWzIxXV5lWzMxXV5lWzQxXSxvPWVbMl1eZVsxMl1eZVsyMl1eZVszMl1eZVs0Ml0sYT1lWzNdXmVbMTNdXmVbMjNdXmVbMzNdXmVbNDNdLHM9ZVs0XV5lWzE0XV5lWzI0XV5lWzM0XV5lWzQ0XSxmPWVbNV1eZVsxNV1eZVsyNV1eZVszNV1eZVs0NV0sdT1lWzZdXmVbMTZdXmVbMjZdXmVbMzZdXmVbNDZdLGM9ZVs3XV5lWzE3XV5lWzI3XV5lWzM3XV5lWzQ3XSxoPWVbOF1eZVsxOF1eZVsyOF1eZVszOF1eZVs0OF0sZD1lWzldXmVbMTldXmVbMjldXmVbMzldXmVbNDldLGw9aF4obzw8MXxhPj4+MzEpLHA9ZF4oYTw8MXxvPj4+MzEpLGI9ZVswXV5sLHk9ZVsxXV5wLGc9ZVsxMF1ebCx2PWVbMTFdXnAsbT1lWzIwXV5sLHc9ZVsyMV1ecCxfPWVbMzBdXmwsRT1lWzMxXV5wLFM9ZVs0MF1ebCxBPWVbNDFdXnA7bD1yXihzPDwxfGY+Pj4zMSkscD1pXihmPDwxfHM+Pj4zMSk7dmFyIHg9ZVsyXV5sLGs9ZVszXV5wLE09ZVsxMl1ebCxUPWVbMTNdXnAsST1lWzIyXV5sLFI9ZVsyM11ecCxQPWVbMzJdXmwsTD1lWzMzXV5wLEI9ZVs0Ml1ebCxDPWVbNDNdXnA7bD1vXih1PDwxfGM+Pj4zMSkscD1hXihjPDwxfHU+Pj4zMSk7dmFyIE89ZVs0XV5sLE49ZVs1XV5wLGo9ZVsxNF1ebCxEPWVbMTVdXnAsVT1lWzI0XV5sLHo9ZVsyNV1ecCxxPWVbMzRdXmwsRj1lWzM1XV5wLEs9ZVs0NF1ebCxIPWVbNDVdXnA7bD1zXihoPDwxfGQ+Pj4zMSkscD1mXihkPDwxfGg+Pj4zMSk7dmFyIFY9ZVs2XV5sLFk9ZVs3XV5wLFc9ZVsxNl1ebCxHPWVbMTddXnAsWj1lWzI2XV5sLEo9ZVsyN11ecCwkPWVbMzZdXmwsWD1lWzM3XV5wLFE9ZVs0Nl1ebCxlZT1lWzQ3XV5wO2w9dV4ocjw8MXxpPj4+MzEpLHA9Y14oaTw8MXxyPj4+MzEpO3ZhciB0ZT1lWzhdXmwscmU9ZVs5XV5wLG5lPWVbMThdXmwsaWU9ZVsxOV1ecCxvZT1lWzI4XV5sLGFlPWVbMjldXnAsc2U9ZVszOF1ebCxmZT1lWzM5XV5wLHVlPWVbNDhdXmwsY2U9ZVs0OV1ecCxoZT1iLGRlPXksbGU9djw8NHxnPj4+MjgscGU9Zzw8NHx2Pj4+MjgsYmU9bTw8M3x3Pj4+MjkseWU9dzw8M3xtPj4+MjksZ2U9RTw8OXxfPj4+MjMsdmU9Xzw8OXxFPj4+MjMsbWU9Uzw8MTh8QT4+PjE0LHdlPUE8PDE4fFM+Pj4xNCxfZT14PDwxfGs+Pj4zMSxFZT1rPDwxfHg+Pj4zMSxTZT1UPDwxMnxNPj4+MjAsQWU9TTw8MTJ8VD4+PjIwLHhlPUk8PDEwfFI+Pj4yMixrZT1SPDwxMHxJPj4+MjIsTWU9TDw8MTN8UD4+PjE5LFRlPVA8PDEzfEw+Pj4xOSxJZT1CPDwyfEM+Pj4zMCxSZT1DPDwyfEI+Pj4zMCxQZT1OPDwzMHxPPj4+MixMZT1PPDwzMHxOPj4+MixCZT1qPDw2fEQ+Pj4yNixDZT1EPDw2fGo+Pj4yNixPZT16PDwxMXxVPj4+MjEsTmU9VTw8MTF8ej4+PjIxLGplPXE8PDE1fEY+Pj4xNyxEZT1GPDwxNXxxPj4+MTcsVWU9SDw8Mjl8Sz4+PjMsemU9Szw8Mjl8SD4+PjMscWU9Vjw8Mjh8WT4+PjQsRmU9WTw8Mjh8Vj4+PjQsS2U9Rzw8MjN8Vz4+PjksSGU9Vzw8MjN8Rz4+PjksVmU9Wjw8MjV8Sj4+PjcsWWU9Sjw8MjV8Wj4+PjcsV2U9JDw8MjF8WD4+PjExLEdlPVg8PDIxfCQ+Pj4xMSxaZT1lZTw8MjR8UT4+PjgsSmU9UTw8MjR8ZWU+Pj44LCRlPXRlPDwyN3xyZT4+PjUsWGU9cmU8PDI3fHRlPj4+NSxRZT1uZTw8MjB8aWU+Pj4xMixldD1pZTw8MjB8bmU+Pj4xMix0dD1hZTw8N3xvZT4+PjI1LHJ0PW9lPDw3fGFlPj4+MjUsbnQ9c2U8PDh8ZmU+Pj4yNCxpdD1mZTw8OHxzZT4+PjI0LG90PXVlPDwxNHxjZT4+PjE4LGF0PWNlPDwxNHx1ZT4+PjE4O2VbMF09aGVeflNlJk9lLGVbMV09ZGVefkFlJk5lLGVbMTBdPXFlXn5RZSZiZSxlWzExXT1GZV5+ZXQmeWUsZVsyMF09X2VefkJlJlZlLGVbMjFdPUVlXn5DZSZZZSxlWzMwXT0kZV5+bGUmeGUsZVszMV09WGVefnBlJmtlLGVbNDBdPVBlXn5LZSZ0dCxlWzQxXT1MZV5+SGUmcnQsZVsyXT1TZV5+T2UmV2UsZVszXT1BZV5+TmUmR2UsZVsxMl09UWVefmJlJk1lLGVbMTNdPWV0Xn55ZSZUZSxlWzIyXT1CZV5+VmUmbnQsZVsyM109Q2VeflllJml0LGVbMzJdPWxlXn54ZSZqZSxlWzMzXT1wZV5+a2UmRGUsZVs0Ml09S2VefnR0JmdlLGVbNDNdPUhlXn5ydCZ2ZSxlWzRdPU9lXn5XZSZvdCxlWzVdPU5lXn5HZSZhdCxlWzE0XT1iZV5+TWUmVWUsZVsxNV09eWVeflRlJnplLGVbMjRdPVZlXn5udCZtZSxlWzI1XT1ZZV5+aXQmd2UsZVszNF09eGVefmplJlplLGVbMzVdPWtlXn5EZSZKZSxlWzQ0XT10dF5+Z2UmSWUsZVs0NV09cnRefnZlJlJlLGVbNl09V2Vefm90JmhlLGVbN109R2VefmF0JmRlLGVbMTZdPU1lXn5VZSZxZSxlWzE3XT1UZV5+emUmRmUsZVsyNl09bnRefm1lJl9lLGVbMjddPWl0Xn53ZSZFZSxlWzM2XT1qZV5+WmUmJGUsZVszN109RGVefkplJlhlLGVbNDZdPWdlXn5JZSZQZSxlWzQ3XT12ZV5+UmUmTGUsZVs4XT1vdF5+aGUmU2UsZVs5XT1hdF5+ZGUmQWUsZVsxOF09VWVefnFlJlFlLGVbMTldPXplXn5GZSZldCxlWzI4XT1tZV5+X2UmQmUsZVsyOV09d2VefkVlJkNlLGVbMzhdPVplXn4kZSZsZSxlWzM5XT1KZV5+WGUmcGUsZVs0OF09SWVeflBlJktlLGVbNDldPVJlXn5MZSZIZSxlWzBdXj1uWzIqdF0sZVsxXV49blsyKnQrMV19fX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1yKDEzMikocigxMzYpKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTMzKSxpPXIoMTM0KSxvPXIoNjIpO2Z1bmN0aW9uIGEoZSx0KXtyZXR1cm4gdm9pZCAwPT09ZT90OihuLmlzQm9vbGVhbihlLG8uQ09NUFJFU1NFRF9UWVBFX0lOVkFMSUQpLGUpfWUuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57cHJpdmF0ZUtleVZlcmlmeTpmdW5jdGlvbih0KXtyZXR1cm4gbi5pc0J1ZmZlcih0LG8uRUNfUFJJVkFURV9LRVlfVFlQRV9JTlZBTElEKSwzMj09PXQubGVuZ3RoJiZlLnByaXZhdGVLZXlWZXJpZnkodCl9LHByaXZhdGVLZXlFeHBvcnQ6ZnVuY3Rpb24odCxyKXtuLmlzQnVmZmVyKHQsby5FQ19QUklWQVRFX0tFWV9UWVBFX0lOVkFMSUQpLG4uaXNCdWZmZXJMZW5ndGgodCwzMixvLkVDX1BSSVZBVEVfS0VZX0xFTkdUSF9JTlZBTElEKSxyPWEociwhMCk7dmFyIHM9ZS5wcml2YXRlS2V5RXhwb3J0KHQscik7cmV0dXJuIGkucHJpdmF0ZUtleUV4cG9ydCh0LHMscil9LHByaXZhdGVLZXlJbXBvcnQ6ZnVuY3Rpb24odCl7aWYobi5pc0J1ZmZlcih0LG8uRUNfUFJJVkFURV9LRVlfVFlQRV9JTlZBTElEKSwodD1pLnByaXZhdGVLZXlJbXBvcnQodCkpJiYzMj09PXQubGVuZ3RoJiZlLnByaXZhdGVLZXlWZXJpZnkodCkpcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKG8uRUNfUFJJVkFURV9LRVlfSU1QT1JUX0RFUl9GQUlMKX0scHJpdmF0ZUtleU5lZ2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbi5pc0J1ZmZlcih0LG8uRUNfUFJJVkFURV9LRVlfVFlQRV9JTlZBTElEKSxuLmlzQnVmZmVyTGVuZ3RoKHQsMzIsby5FQ19QUklWQVRFX0tFWV9MRU5HVEhfSU5WQUxJRCksZS5wcml2YXRlS2V5TmVnYXRlKHQpfSxwcml2YXRlS2V5TW9kSW52ZXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gbi5pc0J1ZmZlcih0LG8uRUNfUFJJVkFURV9LRVlfVFlQRV9JTlZBTElEKSxuLmlzQnVmZmVyTGVuZ3RoKHQsMzIsby5FQ19QUklWQVRFX0tFWV9MRU5HVEhfSU5WQUxJRCksZS5wcml2YXRlS2V5TW9kSW52ZXJzZSh0KX0scHJpdmF0ZUtleVR3ZWFrQWRkOmZ1bmN0aW9uKHQscil7cmV0dXJuIG4uaXNCdWZmZXIodCxvLkVDX1BSSVZBVEVfS0VZX1RZUEVfSU5WQUxJRCksbi5pc0J1ZmZlckxlbmd0aCh0LDMyLG8uRUNfUFJJVkFURV9LRVlfTEVOR1RIX0lOVkFMSUQpLG4uaXNCdWZmZXIocixvLlRXRUFLX1RZUEVfSU5WQUxJRCksbi5pc0J1ZmZlckxlbmd0aChyLDMyLG8uVFdFQUtfTEVOR1RIX0lOVkFMSUQpLGUucHJpdmF0ZUtleVR3ZWFrQWRkKHQscil9LHByaXZhdGVLZXlUd2Vha011bDpmdW5jdGlvbih0LHIpe3JldHVybiBuLmlzQnVmZmVyKHQsby5FQ19QUklWQVRFX0tFWV9UWVBFX0lOVkFMSUQpLG4uaXNCdWZmZXJMZW5ndGgodCwzMixvLkVDX1BSSVZBVEVfS0VZX0xFTkdUSF9JTlZBTElEKSxuLmlzQnVmZmVyKHIsby5UV0VBS19UWVBFX0lOVkFMSUQpLG4uaXNCdWZmZXJMZW5ndGgociwzMixvLlRXRUFLX0xFTkdUSF9JTlZBTElEKSxlLnByaXZhdGVLZXlUd2Vha011bCh0LHIpfSxwdWJsaWNLZXlDcmVhdGU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gbi5pc0J1ZmZlcih0LG8uRUNfUFJJVkFURV9LRVlfVFlQRV9JTlZBTElEKSxuLmlzQnVmZmVyTGVuZ3RoKHQsMzIsby5FQ19QUklWQVRFX0tFWV9MRU5HVEhfSU5WQUxJRCkscj1hKHIsITApLGUucHVibGljS2V5Q3JlYXRlKHQscil9LHB1YmxpY0tleUNvbnZlcnQ6ZnVuY3Rpb24odCxyKXtyZXR1cm4gbi5pc0J1ZmZlcih0LG8uRUNfUFVCTElDX0tFWV9UWVBFX0lOVkFMSUQpLG4uaXNCdWZmZXJMZW5ndGgyKHQsMzMsNjUsby5FQ19QVUJMSUNfS0VZX0xFTkdUSF9JTlZBTElEKSxyPWEociwhMCksZS5wdWJsaWNLZXlDb252ZXJ0KHQscil9LHB1YmxpY0tleVZlcmlmeTpmdW5jdGlvbih0KXtyZXR1cm4gbi5pc0J1ZmZlcih0LG8uRUNfUFVCTElDX0tFWV9UWVBFX0lOVkFMSUQpLGUucHVibGljS2V5VmVyaWZ5KHQpfSxwdWJsaWNLZXlUd2Vha0FkZDpmdW5jdGlvbih0LHIsaSl7cmV0dXJuIG4uaXNCdWZmZXIodCxvLkVDX1BVQkxJQ19LRVlfVFlQRV9JTlZBTElEKSxuLmlzQnVmZmVyTGVuZ3RoMih0LDMzLDY1LG8uRUNfUFVCTElDX0tFWV9MRU5HVEhfSU5WQUxJRCksbi5pc0J1ZmZlcihyLG8uVFdFQUtfVFlQRV9JTlZBTElEKSxuLmlzQnVmZmVyTGVuZ3RoKHIsMzIsby5UV0VBS19MRU5HVEhfSU5WQUxJRCksaT1hKGksITApLGUucHVibGljS2V5VHdlYWtBZGQodCxyLGkpfSxwdWJsaWNLZXlUd2Vha011bDpmdW5jdGlvbih0LHIsaSl7cmV0dXJuIG4uaXNCdWZmZXIodCxvLkVDX1BVQkxJQ19LRVlfVFlQRV9JTlZBTElEKSxuLmlzQnVmZmVyTGVuZ3RoMih0LDMzLDY1LG8uRUNfUFVCTElDX0tFWV9MRU5HVEhfSU5WQUxJRCksbi5pc0J1ZmZlcihyLG8uVFdFQUtfVFlQRV9JTlZBTElEKSxuLmlzQnVmZmVyTGVuZ3RoKHIsMzIsby5UV0VBS19MRU5HVEhfSU5WQUxJRCksaT1hKGksITApLGUucHVibGljS2V5VHdlYWtNdWwodCxyLGkpfSxwdWJsaWNLZXlDb21iaW5lOmZ1bmN0aW9uKHQscil7bi5pc0FycmF5KHQsby5FQ19QVUJMSUNfS0VZU19UWVBFX0lOVkFMSUQpLG4uaXNMZW5ndGhHVFplcm8odCxvLkVDX1BVQkxJQ19LRVlTX0xFTkdUSF9JTlZBTElEKTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoOysraSluLmlzQnVmZmVyKHRbaV0sby5FQ19QVUJMSUNfS0VZX1RZUEVfSU5WQUxJRCksbi5pc0J1ZmZlckxlbmd0aDIodFtpXSwzMyw2NSxvLkVDX1BVQkxJQ19LRVlfTEVOR1RIX0lOVkFMSUQpO3JldHVybiByPWEociwhMCksZS5wdWJsaWNLZXlDb21iaW5lKHQscil9LHNpZ25hdHVyZU5vcm1hbGl6ZTpmdW5jdGlvbih0KXtyZXR1cm4gbi5pc0J1ZmZlcih0LG8uRUNEU0FfU0lHTkFUVVJFX1RZUEVfSU5WQUxJRCksbi5pc0J1ZmZlckxlbmd0aCh0LDY0LG8uRUNEU0FfU0lHTkFUVVJFX0xFTkdUSF9JTlZBTElEKSxlLnNpZ25hdHVyZU5vcm1hbGl6ZSh0KX0sc2lnbmF0dXJlRXhwb3J0OmZ1bmN0aW9uKHQpe24uaXNCdWZmZXIodCxvLkVDRFNBX1NJR05BVFVSRV9UWVBFX0lOVkFMSUQpLG4uaXNCdWZmZXJMZW5ndGgodCw2NCxvLkVDRFNBX1NJR05BVFVSRV9MRU5HVEhfSU5WQUxJRCk7dmFyIHI9ZS5zaWduYXR1cmVFeHBvcnQodCk7cmV0dXJuIGkuc2lnbmF0dXJlRXhwb3J0KHIpfSxzaWduYXR1cmVJbXBvcnQ6ZnVuY3Rpb24odCl7bi5pc0J1ZmZlcih0LG8uRUNEU0FfU0lHTkFUVVJFX1RZUEVfSU5WQUxJRCksbi5pc0xlbmd0aEdUWmVybyh0LG8uRUNEU0FfU0lHTkFUVVJFX0xFTkdUSF9JTlZBTElEKTt2YXIgcj1pLnNpZ25hdHVyZUltcG9ydCh0KTtpZihyKXJldHVybiBlLnNpZ25hdHVyZUltcG9ydChyKTt0aHJvdyBuZXcgRXJyb3Ioby5FQ0RTQV9TSUdOQVRVUkVfUEFSU0VfREVSX0ZBSUwpfSxzaWduYXR1cmVJbXBvcnRMYXg6ZnVuY3Rpb24odCl7bi5pc0J1ZmZlcih0LG8uRUNEU0FfU0lHTkFUVVJFX1RZUEVfSU5WQUxJRCksbi5pc0xlbmd0aEdUWmVybyh0LG8uRUNEU0FfU0lHTkFUVVJFX0xFTkdUSF9JTlZBTElEKTt2YXIgcj1pLnNpZ25hdHVyZUltcG9ydExheCh0KTtpZihyKXJldHVybiBlLnNpZ25hdHVyZUltcG9ydChyKTt0aHJvdyBuZXcgRXJyb3Ioby5FQ0RTQV9TSUdOQVRVUkVfUEFSU0VfREVSX0ZBSUwpfSxzaWduOmZ1bmN0aW9uKHQscixpKXtuLmlzQnVmZmVyKHQsby5NU0czMl9UWVBFX0lOVkFMSUQpLG4uaXNCdWZmZXJMZW5ndGgodCwzMixvLk1TRzMyX0xFTkdUSF9JTlZBTElEKSxuLmlzQnVmZmVyKHIsby5FQ19QUklWQVRFX0tFWV9UWVBFX0lOVkFMSUQpLG4uaXNCdWZmZXJMZW5ndGgociwzMixvLkVDX1BSSVZBVEVfS0VZX0xFTkdUSF9JTlZBTElEKTt2YXIgYT1udWxsLHM9bnVsbDtyZXR1cm4gdm9pZCAwIT09aSYmKG4uaXNPYmplY3QoaSxvLk9QVElPTlNfVFlQRV9JTlZBTElEKSx2b2lkIDAhPT1pLmRhdGEmJihuLmlzQnVmZmVyKGkuZGF0YSxvLk9QVElPTlNfREFUQV9UWVBFX0lOVkFMSUQpLG4uaXNCdWZmZXJMZW5ndGgoaS5kYXRhLDMyLG8uT1BUSU9OU19EQVRBX0xFTkdUSF9JTlZBTElEKSxhPWkuZGF0YSksdm9pZCAwIT09aS5ub25jZWZuJiYobi5pc0Z1bmN0aW9uKGkubm9uY2VmbixvLk9QVElPTlNfTk9OQ0VGTl9UWVBFX0lOVkFMSUQpLHM9aS5ub25jZWZuKSksZS5zaWduKHQscixzLGEpfSx2ZXJpZnk6ZnVuY3Rpb24odCxyLGkpe3JldHVybiBuLmlzQnVmZmVyKHQsby5NU0czMl9UWVBFX0lOVkFMSUQpLG4uaXNCdWZmZXJMZW5ndGgodCwzMixvLk1TRzMyX0xFTkdUSF9JTlZBTElEKSxuLmlzQnVmZmVyKHIsby5FQ0RTQV9TSUdOQVRVUkVfVFlQRV9JTlZBTElEKSxuLmlzQnVmZmVyTGVuZ3RoKHIsNjQsby5FQ0RTQV9TSUdOQVRVUkVfTEVOR1RIX0lOVkFMSUQpLG4uaXNCdWZmZXIoaSxvLkVDX1BVQkxJQ19LRVlfVFlQRV9JTlZBTElEKSxuLmlzQnVmZmVyTGVuZ3RoMihpLDMzLDY1LG8uRUNfUFVCTElDX0tFWV9MRU5HVEhfSU5WQUxJRCksZS52ZXJpZnkodCxyLGkpfSxyZWNvdmVyOmZ1bmN0aW9uKHQscixpLHMpe3JldHVybiBuLmlzQnVmZmVyKHQsby5NU0czMl9UWVBFX0lOVkFMSUQpLG4uaXNCdWZmZXJMZW5ndGgodCwzMixvLk1TRzMyX0xFTkdUSF9JTlZBTElEKSxuLmlzQnVmZmVyKHIsby5FQ0RTQV9TSUdOQVRVUkVfVFlQRV9JTlZBTElEKSxuLmlzQnVmZmVyTGVuZ3RoKHIsNjQsby5FQ0RTQV9TSUdOQVRVUkVfTEVOR1RIX0lOVkFMSUQpLG4uaXNOdW1iZXIoaSxvLlJFQ09WRVJZX0lEX1RZUEVfSU5WQUxJRCksbi5pc051bWJlckluSW50ZXJ2YWwoaSwtMSw0LG8uUkVDT1ZFUllfSURfVkFMVUVfSU5WQUxJRCkscz1hKHMsITApLGUucmVjb3Zlcih0LHIsaSxzKX0sZWNkaDpmdW5jdGlvbih0LHIpe3JldHVybiBuLmlzQnVmZmVyKHQsby5FQ19QVUJMSUNfS0VZX1RZUEVfSU5WQUxJRCksbi5pc0J1ZmZlckxlbmd0aDIodCwzMyw2NSxvLkVDX1BVQkxJQ19LRVlfTEVOR1RIX0lOVkFMSUQpLG4uaXNCdWZmZXIocixvLkVDX1BSSVZBVEVfS0VZX1RZUEVfSU5WQUxJRCksbi5pc0J1ZmZlckxlbmd0aChyLDMyLG8uRUNfUFJJVkFURV9LRVlfTEVOR1RIX0lOVkFMSUQpLGUuZWNkaCh0LHIpfSxlY2RoVW5zYWZlOmZ1bmN0aW9uKHQscixpKXtyZXR1cm4gbi5pc0J1ZmZlcih0LG8uRUNfUFVCTElDX0tFWV9UWVBFX0lOVkFMSUQpLG4uaXNCdWZmZXJMZW5ndGgyKHQsMzMsNjUsby5FQ19QVUJMSUNfS0VZX0xFTkdUSF9JTlZBTElEKSxuLmlzQnVmZmVyKHIsby5FQ19QUklWQVRFX0tFWV9UWVBFX0lOVkFMSUQpLG4uaXNCdWZmZXJMZW5ndGgociwzMixvLkVDX1BSSVZBVEVfS0VZX0xFTkdUSF9JTlZBTElEKSxpPWEoaSwhMCksZS5lY2RoVW5zYWZlKHQscixpKX19fX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3QuaXNBcnJheT1mdW5jdGlvbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IFR5cGVFcnJvcih0KX0sdC5pc0Jvb2xlYW49ZnVuY3Rpb24oZSx0KXtpZihcIltvYmplY3QgQm9vbGVhbl1cIiE9PXIuY2FsbChlKSl0aHJvdyBUeXBlRXJyb3IodCl9LHQuaXNCdWZmZXI9ZnVuY3Rpb24odCxyKXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBUeXBlRXJyb3Iocil9LHQuaXNGdW5jdGlvbj1mdW5jdGlvbihlLHQpe2lmKFwiW29iamVjdCBGdW5jdGlvbl1cIiE9PXIuY2FsbChlKSl0aHJvdyBUeXBlRXJyb3IodCl9LHQuaXNOdW1iZXI9ZnVuY3Rpb24oZSx0KXtpZihcIltvYmplY3QgTnVtYmVyXVwiIT09ci5jYWxsKGUpKXRocm93IFR5cGVFcnJvcih0KX0sdC5pc09iamVjdD1mdW5jdGlvbihlLHQpe2lmKFwiW29iamVjdCBPYmplY3RdXCIhPT1yLmNhbGwoZSkpdGhyb3cgVHlwZUVycm9yKHQpfSx0LmlzQnVmZmVyTGVuZ3RoPWZ1bmN0aW9uKGUsdCxyKXtpZihlLmxlbmd0aCE9PXQpdGhyb3cgUmFuZ2VFcnJvcihyKX0sdC5pc0J1ZmZlckxlbmd0aDI9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZS5sZW5ndGghPT10JiZlLmxlbmd0aCE9PXIpdGhyb3cgUmFuZ2VFcnJvcihuKX0sdC5pc0xlbmd0aEdUWmVybz1mdW5jdGlvbihlLHQpe2lmKDA9PT1lLmxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKHQpfSx0LmlzTnVtYmVySW5JbnRlcnZhbD1mdW5jdGlvbihlLHQscixuKXtpZihlPD10fHxlPj1yKXRocm93IFJhbmdlRXJyb3Iobil9fSkuY2FsbCh0aGlzLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMikuQnVmZmVyLGk9cigxMzUpLG89bi5mcm9tKFs0OCwxMjksMjExLDIsMSwxLDQsMzIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE2MCwxMjksMTMzLDQ4LDEyOSwxMzAsMiwxLDEsNDgsNDQsNiw3LDQyLDEzNCw3MiwyMDYsNjEsMSwxLDIsMzMsMCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTQsMjU1LDI1NSwyNTIsNDcsNDgsNiw0LDEsMCw0LDEsNyw0LDMzLDIsMTIxLDE5MCwxMDIsMTI2LDI0OSwyMjAsMTg3LDE3Miw4NSwxNjAsOTgsMTQ5LDIwNiwxMzUsMTEsNywyLDE1NSwyNTIsMjE5LDQ1LDIwNiw0MCwyMTcsODksMjQyLDEyOSw5MSwyMiwyNDgsMjMsMTUyLDIsMzMsMCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTQsMTg2LDE3NCwyMjAsMjMwLDE3NSw3MiwxNjAsNTksMTkxLDIxMCw5NCwxNDAsMjA4LDU0LDY1LDY1LDIsMSwxLDE2MSwzNiwzLDM0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKSxhPW4uZnJvbShbNDgsMTMwLDEsMTksMiwxLDEsNCwzMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTYwLDEyOSwxNjUsNDgsMTI5LDE2MiwyLDEsMSw0OCw0NCw2LDcsNDIsMTM0LDcyLDIwNiw2MSwxLDEsMiwzMywwLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NCwyNTUsMjU1LDI1Miw0Nyw0OCw2LDQsMSwwLDQsMSw3LDQsNjUsNCwxMjEsMTkwLDEwMiwxMjYsMjQ5LDIyMCwxODcsMTcyLDg1LDE2MCw5OCwxNDksMjA2LDEzNSwxMSw3LDIsMTU1LDI1MiwyMTksNDUsMjA2LDQwLDIxNyw4OSwyNDIsMTI5LDkxLDIyLDI0OCwyMywxNTIsNzIsNTgsMjE4LDExOSwzOCwxNjMsMTk2LDEwMSw5MywxNjQsMjUxLDI1MiwxNCwxNyw4LDE2OCwyNTMsMjMsMTgwLDcyLDE2NiwxMzMsODQsMjUsMTU2LDcxLDIwOCwxNDMsMjUxLDE2LDIxMiwxODQsMiwzMywwLDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NCwxODYsMTc0LDIyMCwyMzAsMTc1LDcyLDE2MCw1OSwxOTEsMjEwLDk0LDE0MCwyMDgsNTQsNjUsNjUsMiwxLDEsMTYxLDY4LDMsNjYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKTt0LnByaXZhdGVLZXlFeHBvcnQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPW4uZnJvbShyP286YSk7cmV0dXJuIGUuY29weShpLHI/ODo5KSx0LmNvcHkoaSxyPzE4MToyMTQpLGl9LHQucHJpdmF0ZUtleUltcG9ydD1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxyPTA7aWYoISh0PHIrMXx8NDghPT1lW3JdKSYmISh0PChyKz0xKSsxKSYmMTI4JmVbcl0pe3ZhciBuPTEyNyZlW3JdO2lmKHIrPTEsIShuPDF8fG4+Mnx8dDxyK24pKXt2YXIgaT1lW3Irbi0xXXwobj4xP2VbcituLTJdPDw4OjApO2lmKCEodDwocis9bikraXx8dDxyKzN8fDIhPT1lW3JdfHwxIT09ZVtyKzFdfHwxIT09ZVtyKzJdfHx0PChyKz0zKSsyfHw0IT09ZVtyXXx8ZVtyKzFdPjMyfHx0PHIrMitlW3IrMV0pKXJldHVybiBlLnNsaWNlKHIrMixyKzIrZVtyKzFdKX19fSx0LnNpZ25hdHVyZUV4cG9ydD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bi5jb25jYXQoW24uZnJvbShbMF0pLGUucl0pLHI9MzMsbz0wO3I+MSYmMD09PXRbb10mJiEoMTI4JnRbbysxXSk7LS1yLCsrbyk7Zm9yKHZhciBhPW4uY29uY2F0KFtuLmZyb20oWzBdKSxlLnNdKSxzPTMzLGY9MDtzPjEmJjA9PT1hW2ZdJiYhKDEyOCZhW2YrMV0pOy0tcywrK2YpO3JldHVybiBpLmVuY29kZSh0LnNsaWNlKG8pLGEuc2xpY2UoZikpfSx0LnNpZ25hdHVyZUltcG9ydD1mdW5jdGlvbihlKXt2YXIgdD1uLmFsbG9jKDMyLDApLHI9bi5hbGxvYygzMiwwKTt0cnl7dmFyIG89aS5kZWNvZGUoZSk7aWYoMzM9PT1vLnIubGVuZ3RoJiYwPT09by5yWzBdJiYoby5yPW8uci5zbGljZSgxKSksby5yLmxlbmd0aD4zMil0aHJvdyBuZXcgRXJyb3IoXCJSIGxlbmd0aCBpcyB0b28gbG9uZ1wiKTtpZigzMz09PW8ucy5sZW5ndGgmJjA9PT1vLnNbMF0mJihvLnM9by5zLnNsaWNlKDEpKSxvLnMubGVuZ3RoPjMyKXRocm93IG5ldyBFcnJvcihcIlMgbGVuZ3RoIGlzIHRvbyBsb25nXCIpfWNhdGNoKGUpe3JldHVybn1yZXR1cm4gby5yLmNvcHkodCwzMi1vLnIubGVuZ3RoKSxvLnMuY29weShyLDMyLW8ucy5sZW5ndGgpLHtyOnQsczpyfX0sdC5zaWduYXR1cmVJbXBvcnRMYXg9ZnVuY3Rpb24oZSl7dmFyIHQ9bi5hbGxvYygzMiwwKSxyPW4uYWxsb2MoMzIsMCksaT1lLmxlbmd0aCxvPTA7aWYoNDg9PT1lW28rK10pe3ZhciBhPWVbbysrXTtpZighKDEyOCZhJiYobys9YS0xMjgpPmkpJiYyPT09ZVtvKytdKXt2YXIgcz1lW28rK107aWYoMTI4JnMpe2lmKG8rKGE9cy0xMjgpPmkpcmV0dXJuO2Zvcig7YT4wJiYwPT09ZVtvXTtvKz0xLGEtPTEpO2ZvcihzPTA7YT4wO28rPTEsYS09MSlzPShzPDw4KStlW29dfWlmKCEocz5pLW8pKXt2YXIgZj1vO2lmKG8rPXMsMj09PWVbbysrXSl7dmFyIHU9ZVtvKytdO2lmKDEyOCZ1KXtpZihvKyhhPXUtMTI4KT5pKXJldHVybjtmb3IoO2E+MCYmMD09PWVbb107bys9MSxhLT0xKTtmb3IodT0wO2E+MDtvKz0xLGEtPTEpdT0odTw8OCkrZVtvXX1pZighKHU+aS1vKSl7dmFyIGM9bztmb3Iobys9dTtzPjAmJjA9PT1lW2ZdO3MtPTEsZis9MSk7aWYoIShzPjMyKSl7dmFyIGg9ZS5zbGljZShmLGYrcyk7Zm9yKGguY29weSh0LDMyLWgubGVuZ3RoKTt1PjAmJjA9PT1lW2NdO3UtPTEsYys9MSk7aWYoISh1PjMyKSl7dmFyIGQ9ZS5zbGljZShjLGMrdSk7cmV0dXJuIGQuY29weShyLDMyLWQubGVuZ3RoKSx7cjp0LHM6cn19fX19fX19fX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMikuQnVmZmVyO2UuZXhwb3J0cz17Y2hlY2s6ZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGg8OClyZXR1cm4hMTtpZihlLmxlbmd0aD43MilyZXR1cm4hMTtpZig0OCE9PWVbMF0pcmV0dXJuITE7aWYoZVsxXSE9PWUubGVuZ3RoLTIpcmV0dXJuITE7aWYoMiE9PWVbMl0pcmV0dXJuITE7dmFyIHQ9ZVszXTtpZigwPT09dClyZXR1cm4hMTtpZig1K3Q+PWUubGVuZ3RoKXJldHVybiExO2lmKDIhPT1lWzQrdF0pcmV0dXJuITE7dmFyIHI9ZVs1K3RdO3JldHVybiAwIT09ciYmKDYrdCtyPT09ZS5sZW5ndGgmJighKDEyOCZlWzRdKSYmKCEodD4xJiYwPT09ZVs0XSYmISgxMjgmZVs1XSkpJiYoISgxMjgmZVt0KzZdKSYmIShyPjEmJjA9PT1lW3QrNl0mJiEoMTI4JmVbdCs3XSkpKSkpKX0sZGVjb2RlOmZ1bmN0aW9uKGUpe2lmKGUubGVuZ3RoPDgpdGhyb3cgbmV3IEVycm9yKFwiREVSIHNlcXVlbmNlIGxlbmd0aCBpcyB0b28gc2hvcnRcIik7aWYoZS5sZW5ndGg+NzIpdGhyb3cgbmV3IEVycm9yKFwiREVSIHNlcXVlbmNlIGxlbmd0aCBpcyB0b28gbG9uZ1wiKTtpZig0OCE9PWVbMF0pdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgREVSIHNlcXVlbmNlXCIpO2lmKGVbMV0hPT1lLmxlbmd0aC0yKXRocm93IG5ldyBFcnJvcihcIkRFUiBzZXF1ZW5jZSBsZW5ndGggaXMgaW52YWxpZFwiKTtpZigyIT09ZVsyXSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBERVIgaW50ZWdlclwiKTt2YXIgdD1lWzNdO2lmKDA9PT10KXRocm93IG5ldyBFcnJvcihcIlIgbGVuZ3RoIGlzIHplcm9cIik7aWYoNSt0Pj1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJSIGxlbmd0aCBpcyB0b28gbG9uZ1wiKTtpZigyIT09ZVs0K3RdKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIERFUiBpbnRlZ2VyICgyKVwiKTt2YXIgcj1lWzUrdF07aWYoMD09PXIpdGhyb3cgbmV3IEVycm9yKFwiUyBsZW5ndGggaXMgemVyb1wiKTtpZig2K3QrciE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlMgbGVuZ3RoIGlzIGludmFsaWRcIik7aWYoMTI4JmVbNF0pdGhyb3cgbmV3IEVycm9yKFwiUiB2YWx1ZSBpcyBuZWdhdGl2ZVwiKTtpZih0PjEmJjA9PT1lWzRdJiYhKDEyOCZlWzVdKSl0aHJvdyBuZXcgRXJyb3IoXCJSIHZhbHVlIGV4Y2Vzc2l2ZWx5IHBhZGRlZFwiKTtpZigxMjgmZVt0KzZdKXRocm93IG5ldyBFcnJvcihcIlMgdmFsdWUgaXMgbmVnYXRpdmVcIik7aWYocj4xJiYwPT09ZVt0KzZdJiYhKDEyOCZlW3QrN10pKXRocm93IG5ldyBFcnJvcihcIlMgdmFsdWUgZXhjZXNzaXZlbHkgcGFkZGVkXCIpO3JldHVybntyOmUuc2xpY2UoNCw0K3QpLHM6ZS5zbGljZSg2K3QpfX0sZW5jb2RlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5sZW5ndGgsaT10Lmxlbmd0aDtpZigwPT09cil0aHJvdyBuZXcgRXJyb3IoXCJSIGxlbmd0aCBpcyB6ZXJvXCIpO2lmKDA9PT1pKXRocm93IG5ldyBFcnJvcihcIlMgbGVuZ3RoIGlzIHplcm9cIik7aWYocj4zMyl0aHJvdyBuZXcgRXJyb3IoXCJSIGxlbmd0aCBpcyB0b28gbG9uZ1wiKTtpZihpPjMzKXRocm93IG5ldyBFcnJvcihcIlMgbGVuZ3RoIGlzIHRvbyBsb25nXCIpO2lmKDEyOCZlWzBdKXRocm93IG5ldyBFcnJvcihcIlIgdmFsdWUgaXMgbmVnYXRpdmVcIik7aWYoMTI4JnRbMF0pdGhyb3cgbmV3IEVycm9yKFwiUyB2YWx1ZSBpcyBuZWdhdGl2ZVwiKTtpZihyPjEmJjA9PT1lWzBdJiYhKDEyOCZlWzFdKSl0aHJvdyBuZXcgRXJyb3IoXCJSIHZhbHVlIGV4Y2Vzc2l2ZWx5IHBhZGRlZFwiKTtpZihpPjEmJjA9PT10WzBdJiYhKDEyOCZ0WzFdKSl0aHJvdyBuZXcgRXJyb3IoXCJTIHZhbHVlIGV4Y2Vzc2l2ZWx5IHBhZGRlZFwiKTt2YXIgbz1uLmFsbG9jVW5zYWZlKDYrcitpKTtyZXR1cm4gb1swXT00OCxvWzFdPW8ubGVuZ3RoLTIsb1syXT0yLG9bM109ZS5sZW5ndGgsZS5jb3B5KG8sNCksb1s0K3JdPTIsb1s1K3JdPXQubGVuZ3RoLHQuY29weShvLDYrciksb319fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigyKS5CdWZmZXIsaT1yKDM0KSxvPXIoNCksYT1yKDM2KS5lYyxzPXIoNjIpLGY9bmV3IGEoXCJzZWNwMjU2azFcIiksdT1mLmN1cnZlO2Z1bmN0aW9uIGMoZSl7dmFyIHQ9ZVswXTtzd2l0Y2godCl7Y2FzZSAyOmNhc2UgMzpyZXR1cm4gMzMhPT1lLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IG8odCk7aWYoci5jbXAodS5wKT49MClyZXR1cm4gbnVsbDt2YXIgbj0ocj1yLnRvUmVkKHUucmVkKSkucmVkU3FyKCkucmVkSU11bChyKS5yZWRJQWRkKHUuYikucmVkU3FydCgpO3JldHVybiAzPT09ZSE9PW4uaXNPZGQoKSYmKG49bi5yZWROZWcoKSksZi5rZXlQYWlyKHtwdWI6e3g6cix5Om59fSl9KHQsZS5zbGljZSgxLDMzKSk7Y2FzZSA0OmNhc2UgNjpjYXNlIDc6cmV0dXJuIDY1IT09ZS5sZW5ndGg/bnVsbDpmdW5jdGlvbihlLHQscil7dmFyIG49bmV3IG8odCksaT1uZXcgbyhyKTtpZihuLmNtcCh1LnApPj0wfHxpLmNtcCh1LnApPj0wKXJldHVybiBudWxsO2lmKG49bi50b1JlZCh1LnJlZCksaT1pLnRvUmVkKHUucmVkKSwoNj09PWV8fDc9PT1lKSYmaS5pc09kZCgpIT09KDc9PT1lKSlyZXR1cm4gbnVsbDt2YXIgYT1uLnJlZFNxcigpLnJlZElNdWwobik7cmV0dXJuIGkucmVkU3FyKCkucmVkSVN1YihhLnJlZElBZGQodS5iKSkuaXNaZXJvKCk/Zi5rZXlQYWlyKHtwdWI6e3g6bix5Oml9fSk6bnVsbH0odCxlLnNsaWNlKDEsMzMpLGUuc2xpY2UoMzMsNjUpKTtkZWZhdWx0OnJldHVybiBudWxsfX10LnByaXZhdGVLZXlWZXJpZnk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IG8oZSk7cmV0dXJuIHQuY21wKHUubik8MCYmIXQuaXNaZXJvKCl9LHQucHJpdmF0ZUtleUV4cG9ydD1mdW5jdGlvbihlLHQpe3ZhciByPW5ldyBvKGUpO2lmKHIuY21wKHUubik+PTB8fHIuaXNaZXJvKCkpdGhyb3cgbmV3IEVycm9yKHMuRUNfUFJJVkFURV9LRVlfRVhQT1JUX0RFUl9GQUlMKTtyZXR1cm4gbi5mcm9tKGYua2V5RnJvbVByaXZhdGUoZSkuZ2V0UHVibGljKHQsITApKX0sdC5wcml2YXRlS2V5TmVnYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBvKGUpO3JldHVybiB0LmlzWmVybygpP24uYWxsb2MoMzIpOnUubi5zdWIodCkudW1vZCh1Lm4pLnRvQXJyYXlMaWtlKG4sXCJiZVwiLDMyKX0sdC5wcml2YXRlS2V5TW9kSW52ZXJzZT1mdW5jdGlvbihlKXt2YXIgdD1uZXcgbyhlKTtpZih0LmNtcCh1Lm4pPj0wfHx0LmlzWmVybygpKXRocm93IG5ldyBFcnJvcihzLkVDX1BSSVZBVEVfS0VZX1JBTkdFX0lOVkFMSUQpO3JldHVybiB0Lmludm0odS5uKS50b0FycmF5TGlrZShuLFwiYmVcIiwzMil9LHQucHJpdmF0ZUtleVR3ZWFrQWRkPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IG8odCk7aWYoci5jbXAodS5uKT49MCl0aHJvdyBuZXcgRXJyb3Iocy5FQ19QUklWQVRFX0tFWV9UV0VBS19BRERfRkFJTCk7aWYoci5pYWRkKG5ldyBvKGUpKSxyLmNtcCh1Lm4pPj0wJiZyLmlzdWIodS5uKSxyLmlzWmVybygpKXRocm93IG5ldyBFcnJvcihzLkVDX1BSSVZBVEVfS0VZX1RXRUFLX0FERF9GQUlMKTtyZXR1cm4gci50b0FycmF5TGlrZShuLFwiYmVcIiwzMil9LHQucHJpdmF0ZUtleVR3ZWFrTXVsPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IG8odCk7aWYoci5jbXAodS5uKT49MHx8ci5pc1plcm8oKSl0aHJvdyBuZXcgRXJyb3Iocy5FQ19QUklWQVRFX0tFWV9UV0VBS19NVUxfRkFJTCk7cmV0dXJuIHIuaW11bChuZXcgbyhlKSksci5jbXAodS5uKSYmKHI9ci51bW9kKHUubikpLHIudG9BcnJheUxpa2UobixcImJlXCIsMzIpfSx0LnB1YmxpY0tleUNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciByPW5ldyBvKGUpO2lmKHIuY21wKHUubik+PTB8fHIuaXNaZXJvKCkpdGhyb3cgbmV3IEVycm9yKHMuRUNfUFVCTElDX0tFWV9DUkVBVEVfRkFJTCk7cmV0dXJuIG4uZnJvbShmLmtleUZyb21Qcml2YXRlKGUpLmdldFB1YmxpYyh0LCEwKSl9LHQucHVibGljS2V5Q29udmVydD1mdW5jdGlvbihlLHQpe3ZhciByPWMoZSk7aWYobnVsbD09PXIpdGhyb3cgbmV3IEVycm9yKHMuRUNfUFVCTElDX0tFWV9QQVJTRV9GQUlMKTtyZXR1cm4gbi5mcm9tKHIuZ2V0UHVibGljKHQsITApKX0sdC5wdWJsaWNLZXlWZXJpZnk9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1jKGUpfSx0LnB1YmxpY0tleVR3ZWFrQWRkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1jKGUpO2lmKG51bGw9PT1pKXRocm93IG5ldyBFcnJvcihzLkVDX1BVQkxJQ19LRVlfUEFSU0VfRkFJTCk7aWYoKHQ9bmV3IG8odCkpLmNtcCh1Lm4pPj0wKXRocm93IG5ldyBFcnJvcihzLkVDX1BVQkxJQ19LRVlfVFdFQUtfQUREX0ZBSUwpO3ZhciBhPXUuZy5tdWwodCkuYWRkKGkucHViKTtpZihhLmlzSW5maW5pdHkoKSl0aHJvdyBuZXcgRXJyb3Iocy5FQ19QVUJMSUNfS0VZX1RXRUFLX0FERF9GQUlMKTtyZXR1cm4gbi5mcm9tKGEuZW5jb2RlKCEwLHIpKX0sdC5wdWJsaWNLZXlUd2Vha011bD1mdW5jdGlvbihlLHQscil7dmFyIGk9YyhlKTtpZihudWxsPT09aSl0aHJvdyBuZXcgRXJyb3Iocy5FQ19QVUJMSUNfS0VZX1BBUlNFX0ZBSUwpO2lmKCh0PW5ldyBvKHQpKS5jbXAodS5uKT49MHx8dC5pc1plcm8oKSl0aHJvdyBuZXcgRXJyb3Iocy5FQ19QVUJMSUNfS0VZX1RXRUFLX01VTF9GQUlMKTtyZXR1cm4gbi5mcm9tKGkucHViLm11bCh0KS5lbmNvZGUoITAscikpfSx0LnB1YmxpY0tleUNvbWJpbmU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoKSxpPTA7aTxlLmxlbmd0aDsrK2kpaWYocltpXT1jKGVbaV0pLG51bGw9PT1yW2ldKXRocm93IG5ldyBFcnJvcihzLkVDX1BVQkxJQ19LRVlfUEFSU0VfRkFJTCk7Zm9yKHZhciBvPXJbMF0ucHViLGE9MTthPHIubGVuZ3RoOysrYSlvPW8uYWRkKHJbYV0ucHViKTtpZihvLmlzSW5maW5pdHkoKSl0aHJvdyBuZXcgRXJyb3Iocy5FQ19QVUJMSUNfS0VZX0NPTUJJTkVfRkFJTCk7cmV0dXJuIG4uZnJvbShvLmVuY29kZSghMCx0KSl9LHQuc2lnbmF0dXJlTm9ybWFsaXplPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBvKGUuc2xpY2UoMCwzMikpLHI9bmV3IG8oZS5zbGljZSgzMiw2NCkpO2lmKHQuY21wKHUubik+PTB8fHIuY21wKHUubik+PTApdGhyb3cgbmV3IEVycm9yKHMuRUNEU0FfU0lHTkFUVVJFX1BBUlNFX0ZBSUwpO3ZhciBpPW4uZnJvbShlKTtyZXR1cm4gMT09PXIuY21wKGYubmgpJiZ1Lm4uc3ViKHIpLnRvQXJyYXlMaWtlKG4sXCJiZVwiLDMyKS5jb3B5KGksMzIpLGl9LHQuc2lnbmF0dXJlRXhwb3J0PWZ1bmN0aW9uKGUpe3ZhciB0PWUuc2xpY2UoMCwzMikscj1lLnNsaWNlKDMyLDY0KTtpZihuZXcgbyh0KS5jbXAodS5uKT49MHx8bmV3IG8ocikuY21wKHUubik+PTApdGhyb3cgbmV3IEVycm9yKHMuRUNEU0FfU0lHTkFUVVJFX1BBUlNFX0ZBSUwpO3JldHVybntyOnQsczpyfX0sdC5zaWduYXR1cmVJbXBvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IG8oZS5yKTt0LmNtcCh1Lm4pPj0wJiYodD1uZXcgbygwKSk7dmFyIHI9bmV3IG8oZS5zKTtyZXR1cm4gci5jbXAodS5uKT49MCYmKHI9bmV3IG8oMCkpLG4uY29uY2F0KFt0LnRvQXJyYXlMaWtlKG4sXCJiZVwiLDMyKSxyLnRvQXJyYXlMaWtlKG4sXCJiZVwiLDMyKV0pfSx0LnNpZ249ZnVuY3Rpb24oZSx0LHIsaSl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygcil7dmFyIGE9cjtyPWZ1bmN0aW9uKHIpe3ZhciBmPWEoZSx0LG51bGwsaSxyKTtpZighbi5pc0J1ZmZlcihmKXx8MzIhPT1mLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3Iocy5FQ0RTQV9TSUdOX0ZBSUwpO3JldHVybiBuZXcgbyhmKX19dmFyIGM9bmV3IG8odCk7aWYoYy5jbXAodS5uKT49MHx8Yy5pc1plcm8oKSl0aHJvdyBuZXcgRXJyb3Iocy5FQ0RTQV9TSUdOX0ZBSUwpO3ZhciBoPWYuc2lnbihlLHQse2Nhbm9uaWNhbDohMCxrOnIscGVyczppfSk7cmV0dXJue3NpZ25hdHVyZTpuLmNvbmNhdChbaC5yLnRvQXJyYXlMaWtlKG4sXCJiZVwiLDMyKSxoLnMudG9BcnJheUxpa2UobixcImJlXCIsMzIpXSkscmVjb3Zlcnk6aC5yZWNvdmVyeVBhcmFtfX0sdC52ZXJpZnk9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXtyOnQuc2xpY2UoMCwzMiksczp0LnNsaWNlKDMyLDY0KX0saT1uZXcgbyhuLnIpLGE9bmV3IG8obi5zKTtpZihpLmNtcCh1Lm4pPj0wfHxhLmNtcCh1Lm4pPj0wKXRocm93IG5ldyBFcnJvcihzLkVDRFNBX1NJR05BVFVSRV9QQVJTRV9GQUlMKTtpZigxPT09YS5jbXAoZi5uaCl8fGkuaXNaZXJvKCl8fGEuaXNaZXJvKCkpcmV0dXJuITE7dmFyIGg9YyhyKTtpZihudWxsPT09aCl0aHJvdyBuZXcgRXJyb3Iocy5FQ19QVUJMSUNfS0VZX1BBUlNFX0ZBSUwpO3JldHVybiBmLnZlcmlmeShlLG4se3g6aC5wdWIueCx5OmgucHViLnl9KX0sdC5yZWNvdmVyPWZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBhPXtyOnQuc2xpY2UoMCwzMiksczp0LnNsaWNlKDMyLDY0KX0sYz1uZXcgbyhhLnIpLGg9bmV3IG8oYS5zKTtpZihjLmNtcCh1Lm4pPj0wfHxoLmNtcCh1Lm4pPj0wKXRocm93IG5ldyBFcnJvcihzLkVDRFNBX1NJR05BVFVSRV9QQVJTRV9GQUlMKTt0cnl7aWYoYy5pc1plcm8oKXx8aC5pc1plcm8oKSl0aHJvdyBuZXcgRXJyb3I7dmFyIGQ9Zi5yZWNvdmVyUHViS2V5KGUsYSxyKTtyZXR1cm4gbi5mcm9tKGQuZW5jb2RlKCEwLGkpKX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3Iocy5FQ0RTQV9SRUNPVkVSX0ZBSUwpfX0sdC5lY2RoPWZ1bmN0aW9uKGUscil7dmFyIG49dC5lY2RoVW5zYWZlKGUsciwhMCk7cmV0dXJuIGkoXCJzaGEyNTZcIikudXBkYXRlKG4pLmRpZ2VzdCgpfSx0LmVjZGhVbnNhZmU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPWMoZSk7aWYobnVsbD09PWkpdGhyb3cgbmV3IEVycm9yKHMuRUNfUFVCTElDX0tFWV9QQVJTRV9GQUlMKTt2YXIgYT1uZXcgbyh0KTtpZihhLmNtcCh1Lm4pPj0wfHxhLmlzWmVybygpKXRocm93IG5ldyBFcnJvcihzLkVDREhfRkFJTCk7cmV0dXJuIG4uZnJvbShpLnB1Yi5tdWwoYSkuZW5jb2RlKCEwLHIpKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cig2Myksbz1yKDIpLkJ1ZmZlcixhPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gcygpe2kuY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OH1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGU8PHR8ZT4+PjMyLXR9ZnVuY3Rpb24gdShlLHQscixuLGksbyxhKXtyZXR1cm4gZihlKyh0JnJ8fnQmbikraStvfDAsYSkrdHwwfWZ1bmN0aW9uIGMoZSx0LHIsbixpLG8sYSl7cmV0dXJuIGYoZSsodCZufHImfm4pK2krb3wwLGEpK3R8MH1mdW5jdGlvbiBoKGUsdCxyLG4saSxvLGEpe3JldHVybiBmKGUrKHRecl5uKStpK298MCxhKSt0fDB9ZnVuY3Rpb24gZChlLHQscixuLGksbyxhKXtyZXR1cm4gZihlKyhyXih0fH5uKSkraStvfDAsYSkrdHwwfW4ocyxpKSxzLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWEsdD0wO3Q8MTY7Kyt0KWVbdF09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCp0KTt2YXIgcj10aGlzLl9hLG49dGhpcy5fYixpPXRoaXMuX2Msbz10aGlzLl9kO3I9dShyLG4saSxvLGVbMF0sMzYxNDA5MDM2MCw3KSxvPXUobyxyLG4saSxlWzFdLDM5MDU0MDI3MTAsMTIpLGk9dShpLG8scixuLGVbMl0sNjA2MTA1ODE5LDE3KSxuPXUobixpLG8scixlWzNdLDMyNTA0NDE5NjYsMjIpLHI9dShyLG4saSxvLGVbNF0sNDExODU0ODM5OSw3KSxvPXUobyxyLG4saSxlWzVdLDEyMDAwODA0MjYsMTIpLGk9dShpLG8scixuLGVbNl0sMjgyMTczNTk1NSwxNyksbj11KG4saSxvLHIsZVs3XSw0MjQ5MjYxMzEzLDIyKSxyPXUocixuLGksbyxlWzhdLDE3NzAwMzU0MTYsNyksbz11KG8scixuLGksZVs5XSwyMzM2NTUyODc5LDEyKSxpPXUoaSxvLHIsbixlWzEwXSw0Mjk0OTI1MjMzLDE3KSxuPXUobixpLG8scixlWzExXSwyMzA0NTYzMTM0LDIyKSxyPXUocixuLGksbyxlWzEyXSwxODA0NjAzNjgyLDcpLG89dShvLHIsbixpLGVbMTNdLDQyNTQ2MjYxOTUsMTIpLGk9dShpLG8scixuLGVbMTRdLDI3OTI5NjUwMDYsMTcpLHI9YyhyLG49dShuLGksbyxyLGVbMTVdLDEyMzY1MzUzMjksMjIpLGksbyxlWzFdLDQxMjkxNzA3ODYsNSksbz1jKG8scixuLGksZVs2XSwzMjI1NDY1NjY0LDkpLGk9YyhpLG8scixuLGVbMTFdLDY0MzcxNzcxMywxNCksbj1jKG4saSxvLHIsZVswXSwzOTIxMDY5OTk0LDIwKSxyPWMocixuLGksbyxlWzVdLDM1OTM0MDg2MDUsNSksbz1jKG8scixuLGksZVsxMF0sMzgwMTYwODMsOSksaT1jKGksbyxyLG4sZVsxNV0sMzYzNDQ4ODk2MSwxNCksbj1jKG4saSxvLHIsZVs0XSwzODg5NDI5NDQ4LDIwKSxyPWMocixuLGksbyxlWzldLDU2ODQ0NjQzOCw1KSxvPWMobyxyLG4saSxlWzE0XSwzMjc1MTYzNjA2LDkpLGk9YyhpLG8scixuLGVbM10sNDEwNzYwMzMzNSwxNCksbj1jKG4saSxvLHIsZVs4XSwxMTYzNTMxNTAxLDIwKSxyPWMocixuLGksbyxlWzEzXSwyODUwMjg1ODI5LDUpLG89YyhvLHIsbixpLGVbMl0sNDI0MzU2MzUxMiw5KSxpPWMoaSxvLHIsbixlWzddLDE3MzUzMjg0NzMsMTQpLHI9aChyLG49YyhuLGksbyxyLGVbMTJdLDIzNjgzNTk1NjIsMjApLGksbyxlWzVdLDQyOTQ1ODg3MzgsNCksbz1oKG8scixuLGksZVs4XSwyMjcyMzkyODMzLDExKSxpPWgoaSxvLHIsbixlWzExXSwxODM5MDMwNTYyLDE2KSxuPWgobixpLG8scixlWzE0XSw0MjU5NjU3NzQwLDIzKSxyPWgocixuLGksbyxlWzFdLDI3NjM5NzUyMzYsNCksbz1oKG8scixuLGksZVs0XSwxMjcyODkzMzUzLDExKSxpPWgoaSxvLHIsbixlWzddLDQxMzk0Njk2NjQsMTYpLG49aChuLGksbyxyLGVbMTBdLDMyMDAyMzY2NTYsMjMpLHI9aChyLG4saSxvLGVbMTNdLDY4MTI3OTE3NCw0KSxvPWgobyxyLG4saSxlWzBdLDM5MzY0MzAwNzQsMTEpLGk9aChpLG8scixuLGVbM10sMzU3MjQ0NTMxNywxNiksbj1oKG4saSxvLHIsZVs2XSw3NjAyOTE4OSwyMykscj1oKHIsbixpLG8sZVs5XSwzNjU0NjAyODA5LDQpLG89aChvLHIsbixpLGVbMTJdLDM4NzMxNTE0NjEsMTEpLGk9aChpLG8scixuLGVbMTVdLDUzMDc0MjUyMCwxNikscj1kKHIsbj1oKG4saSxvLHIsZVsyXSwzMjk5NjI4NjQ1LDIzKSxpLG8sZVswXSw0MDk2MzM2NDUyLDYpLG89ZChvLHIsbixpLGVbN10sMTEyNjg5MTQxNSwxMCksaT1kKGksbyxyLG4sZVsxNF0sMjg3ODYxMjM5MSwxNSksbj1kKG4saSxvLHIsZVs1XSw0MjM3NTMzMjQxLDIxKSxyPWQocixuLGksbyxlWzEyXSwxNzAwNDg1NTcxLDYpLG89ZChvLHIsbixpLGVbM10sMjM5OTk4MDY5MCwxMCksaT1kKGksbyxyLG4sZVsxMF0sNDI5MzkxNTc3MywxNSksbj1kKG4saSxvLHIsZVsxXSwyMjQwMDQ0NDk3LDIxKSxyPWQocixuLGksbyxlWzhdLDE4NzMzMTMzNTksNiksbz1kKG8scixuLGksZVsxNV0sNDI2NDM1NTU1MiwxMCksaT1kKGksbyxyLG4sZVs2XSwyNzM0NzY4OTE2LDE1KSxuPWQobixpLG8scixlWzEzXSwxMzA5MTUxNjQ5LDIxKSxyPWQocixuLGksbyxlWzRdLDQxNDk0NDQyMjYsNiksbz1kKG8scixuLGksZVsxMV0sMzE3NDc1NjkxNywxMCksaT1kKGksbyxyLG4sZVsyXSw3MTg3ODcyNTksMTUpLG49ZChuLGksbyxyLGVbOV0sMzk1MTQ4MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK3J8MCx0aGlzLl9iPXRoaXMuX2IrbnwwLHRoaXMuX2M9dGhpcy5fYytpfDAsdGhpcy5fZD10aGlzLl9kK298MH0scy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBlPW8uYWxsb2NVbnNhZmUoMTYpO3JldHVybiBlLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLGUud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksZS53cml0ZUludDMyTEUodGhpcy5fYyw4KSxlLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxlfSxlLmV4cG9ydHM9c30sZnVuY3Rpb24oZSx0LHIpeyh0PWUuZXhwb3J0cz1yKDY0KSkuU3RyZWFtPXQsdC5SZWFkYWJsZT10LHQuV3JpdGFibGU9cig2OCksdC5EdXBsZXg9cigxNiksdC5UcmFuc2Zvcm09cig2OSksdC5QYXNzVGhyb3VnaD1yKDE0NCksdC5maW5pc2hlZD1yKDM1KSx0LnBpcGVsaW5lPXIoMTQ1KX0sZnVuY3Rpb24oZSx0KXt9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUsdCl7dmFyIHI9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYobj1uLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxyLnB1c2guYXBwbHkocixuKX1yZXR1cm4gcn1mdW5jdGlvbiBpKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX12YXIgYT1yKDEpLkJ1ZmZlcixzPXIoMTQxKS5pbnNwZWN0LGY9cyYmcy5jdXN0b218fFwiaW5zcGVjdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGUpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9dmFyIHQscix1O3JldHVybiB0PWUsKHI9W3trZXk6XCJwdXNoXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9e2RhdGE6ZSxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9dDp0aGlzLmhlYWQ9dCx0aGlzLnRhaWw9dCwrK3RoaXMubGVuZ3RofX0se2tleTpcInVuc2hpZnRcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD17ZGF0YTplLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9dCksdGhpcy5oZWFkPXQsKyt0aGlzLmxlbmd0aH19LHtrZXk6XCJzaGlmdFwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgZT10aGlzLmhlYWQuZGF0YTtyZXR1cm4gMT09PXRoaXMubGVuZ3RoP3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQ9dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxlfX19LHtrZXk6XCJjbGVhclwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5Olwiam9pblwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm5cIlwiO2Zvcih2YXIgdD10aGlzLmhlYWQscj1cIlwiK3QuZGF0YTt0PXQubmV4dDspcis9ZSt0LmRhdGE7cmV0dXJuIHJ9fSx7a2V5OlwiY29uY2F0XCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBhLmFsbG9jKDApO2Zvcih2YXIgdCxyLG4saT1hLmFsbG9jVW5zYWZlKGU+Pj4wKSxvPXRoaXMuaGVhZCxzPTA7bzspdD1vLmRhdGEscj1pLG49cyxhLnByb3RvdHlwZS5jb3B5LmNhbGwodCxyLG4pLHMrPW8uZGF0YS5sZW5ndGgsbz1vLm5leHQ7cmV0dXJuIGl9fSx7a2V5OlwiY29uc3VtZVwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIGU8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhyPXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsZSksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoZSkpOnI9ZT09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6dD90aGlzLl9nZXRTdHJpbmcoZSk6dGhpcy5fZ2V0QnVmZmVyKGUpLHJ9fSx7a2V5OlwiZmlyc3RcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQuZGF0YX19LHtrZXk6XCJfZ2V0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oZWFkLHI9MSxuPXQuZGF0YTtmb3IoZS09bi5sZW5ndGg7dD10Lm5leHQ7KXt2YXIgaT10LmRhdGEsbz1lPmkubGVuZ3RoP2kubGVuZ3RoOmU7aWYobz09PWkubGVuZ3RoP24rPWk6bis9aS5zbGljZSgwLGUpLDA9PShlLT1vKSl7bz09PWkubGVuZ3RoPygrK3IsdC5uZXh0P3RoaXMuaGVhZD10Lm5leHQ6dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPXQsdC5kYXRhPWkuc2xpY2UobykpO2JyZWFrfSsrcn1yZXR1cm4gdGhpcy5sZW5ndGgtPXIsbn19LHtrZXk6XCJfZ2V0QnVmZmVyXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YS5hbGxvY1Vuc2FmZShlKSxyPXRoaXMuaGVhZCxuPTE7Zm9yKHIuZGF0YS5jb3B5KHQpLGUtPXIuZGF0YS5sZW5ndGg7cj1yLm5leHQ7KXt2YXIgaT1yLmRhdGEsbz1lPmkubGVuZ3RoP2kubGVuZ3RoOmU7aWYoaS5jb3B5KHQsdC5sZW5ndGgtZSwwLG8pLDA9PShlLT1vKSl7bz09PWkubGVuZ3RoPygrK24sci5uZXh0P3RoaXMuaGVhZD1yLm5leHQ6dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPXIsci5kYXRhPWkuc2xpY2UobykpO2JyZWFrfSsrbn1yZXR1cm4gdGhpcy5sZW5ndGgtPW4sdH19LHtrZXk6Zix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBzKHRoaXMsZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/bihPYmplY3QociksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe2koZSx0LHJbdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOm4oT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iocix0KSl9KSl9cmV0dXJuIGV9KHt9LHQse2RlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pKX19XSkmJm8odC5wcm90b3R5cGUsciksdSYmbyh0LHUpLGV9KCl9LGZ1bmN0aW9uKGUsdCl7fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQpe3ZhciBuO2Z1bmN0aW9uIGkoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfXZhciBvPXIoMzUpLGE9U3ltYm9sKFwibGFzdFJlc29sdmVcIikscz1TeW1ib2woXCJsYXN0UmVqZWN0XCIpLGY9U3ltYm9sKFwiZXJyb3JcIiksdT1TeW1ib2woXCJlbmRlZFwiKSxjPVN5bWJvbChcImxhc3RQcm9taXNlXCIpLGg9U3ltYm9sKFwiaGFuZGxlUHJvbWlzZVwiKSxkPVN5bWJvbChcInN0cmVhbVwiKTtmdW5jdGlvbiBsKGUsdCl7cmV0dXJue3ZhbHVlOmUsZG9uZTp0fX1mdW5jdGlvbiBwKGUpe3ZhciB0PWVbYV07aWYobnVsbCE9PXQpe3ZhciByPWVbZF0ucmVhZCgpO251bGwhPT1yJiYoZVtjXT1udWxsLGVbYV09bnVsbCxlW3NdPW51bGwsdChsKHIsITEpKSl9fWZ1bmN0aW9uIGIoZSl7dC5uZXh0VGljayhwLGUpfXZhciB5PU9iamVjdC5nZXRQcm90b3R5cGVPZigoZnVuY3Rpb24oKXt9KSksZz1PYmplY3Quc2V0UHJvdG90eXBlT2YoKGkobj17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW2RdfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPXRoaXNbZl07aWYobnVsbCE9PXIpcmV0dXJuIFByb21pc2UucmVqZWN0KHIpO2lmKHRoaXNbdV0pcmV0dXJuIFByb21pc2UucmVzb2x2ZShsKHZvaWQgMCwhMCkpO2lmKHRoaXNbZF0uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixuKXt0Lm5leHRUaWNrKChmdW5jdGlvbigpe2VbZl0/bihlW2ZdKTpyKGwodm9pZCAwLCEwKSl9KSl9KSk7dmFyIG4saT10aGlzW2NdO2lmKGkpbj1uZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2UudGhlbigoZnVuY3Rpb24oKXt0W3VdP3IobCh2b2lkIDAsITApKTp0W2hdKHIsbil9KSxuKX19KGksdGhpcykpO2Vsc2V7dmFyIG89dGhpc1tkXS5yZWFkKCk7aWYobnVsbCE9PW8pcmV0dXJuIFByb21pc2UucmVzb2x2ZShsKG8sITEpKTtuPW5ldyBQcm9taXNlKHRoaXNbaF0pfXJldHVybiB0aGlzW2NdPW4sbn19LFN5bWJvbC5hc3luY0l0ZXJhdG9yLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGkobixcInJldHVyblwiLChmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe2VbZF0uZGVzdHJveShudWxsLChmdW5jdGlvbihlKXtlP3IoZSk6dChsKHZvaWQgMCwhMCkpfSkpfSkpfSkpLG4pLHkpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxyPU9iamVjdC5jcmVhdGUoZywoaSh0PXt9LGQse3ZhbHVlOmUsd3JpdGFibGU6ITB9KSxpKHQsYSx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGkodCxzLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksaSh0LGYse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxpKHQsdSx7dmFsdWU6ZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSksaSh0LGgse3ZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49cltkXS5yZWFkKCk7bj8ocltjXT1udWxsLHJbYV09bnVsbCxyW3NdPW51bGwsZShsKG4sITEpKSk6KHJbYV09ZSxyW3NdPXQpfSx3cml0YWJsZTohMH0pLHQpKTtyZXR1cm4gcltjXT1udWxsLG8oZSwoZnVuY3Rpb24oZSl7aWYoZSYmXCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiIT09ZS5jb2RlKXt2YXIgdD1yW3NdO3JldHVybiBudWxsIT09dCYmKHJbY109bnVsbCxyW2FdPW51bGwscltzXT1udWxsLHQoZSkpLHZvaWQocltmXT1lKX12YXIgbj1yW2FdO251bGwhPT1uJiYocltjXT1udWxsLHJbYV09bnVsbCxyW3NdPW51bGwsbihsKHZvaWQgMCwhMCkpKSxyW3VdPSEwfSkpLGUub24oXCJyZWFkYWJsZVwiLGIuYmluZChudWxsLHIpKSxyfX0pLmNhbGwodGhpcyxyKDMpKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJSZWFkYWJsZS5mcm9tIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJyb3dzZXJcIil9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWk7dmFyIG49cig2OSk7ZnVuY3Rpb24gaShlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGkoZSk7bi5jYWxsKHRoaXMsZSl9cigwKShpLG4pLGkucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LHIpe3IobnVsbCxlKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbjt2YXIgaT1yKDE1KS5jb2RlcyxvPWkuRVJSX01JU1NJTkdfQVJHUyxhPWkuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gcyhlKXtpZihlKXRocm93IGV9ZnVuY3Rpb24gZihlLHQsaSxvKXtvPWZ1bmN0aW9uKGUpe3ZhciB0PSExO3JldHVybiBmdW5jdGlvbigpe3R8fCh0PSEwLGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfX0obyk7dmFyIHM9ITE7ZS5vbihcImNsb3NlXCIsKGZ1bmN0aW9uKCl7cz0hMH0pKSx2b2lkIDA9PT1uJiYobj1yKDM1KSksbihlLHtyZWFkYWJsZTp0LHdyaXRhYmxlOml9LChmdW5jdGlvbihlKXtpZihlKXJldHVybiBvKGUpO3M9ITAsbygpfSkpO3ZhciBmPSExO3JldHVybiBmdW5jdGlvbih0KXtpZighcyYmIWYpcmV0dXJuIGY9ITAsZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2V0SGVhZGVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmFib3J0fShlKT9lLmFib3J0KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZS5kZXN0cm95P2UuZGVzdHJveSgpOnZvaWQgbyh0fHxuZXcgYShcInBpcGVcIikpfX1mdW5jdGlvbiB1KGUpe2UoKX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGUucGlwZSh0KX1mdW5jdGlvbiBoKGUpe3JldHVybiBlLmxlbmd0aD9cImZ1bmN0aW9uXCIhPXR5cGVvZiBlW2UubGVuZ3RoLTFdP3M6ZS5wb3AoKTpzfWUuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3ZhciBuLGk9aCh0KTtpZihBcnJheS5pc0FycmF5KHRbMF0pJiYodD10WzBdKSx0Lmxlbmd0aDwyKXRocm93IG5ldyBvKFwic3RyZWFtc1wiKTt2YXIgYT10Lm1hcCgoZnVuY3Rpb24oZSxyKXt2YXIgbz1yPHQubGVuZ3RoLTE7cmV0dXJuIGYoZSxvLHI+MCwoZnVuY3Rpb24oZSl7bnx8KG49ZSksZSYmYS5mb3JFYWNoKHUpLG98fChhLmZvckVhY2godSksaShuKSl9KSl9KSk7cmV0dXJuIHQucmVkdWNlKGMpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMSkuQnVmZmVyLGk9cigwKSxvPXIoNjMpLGE9bmV3IEFycmF5KDE2KSxzPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLGY9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sdT1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sYz1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV0saD1bMCwxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSxkPVsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgzNjA3MjY5MSwyMDUzOTk0MjE3LDBdO2Z1bmN0aW9uIGwoKXtvLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwfWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gZTw8dHxlPj4+MzItdH1mdW5jdGlvbiBiKGUsdCxyLG4saSxvLGEscyl7cmV0dXJuIHAoZSsodF5yXm4pK28rYXwwLHMpK2l8MH1mdW5jdGlvbiB5KGUsdCxyLG4saSxvLGEscyl7cmV0dXJuIHAoZSsodCZyfH50Jm4pK28rYXwwLHMpK2l8MH1mdW5jdGlvbiBnKGUsdCxyLG4saSxvLGEscyl7cmV0dXJuIHAoZSsoKHR8fnIpXm4pK28rYXwwLHMpK2l8MH1mdW5jdGlvbiB2KGUsdCxyLG4saSxvLGEscyl7cmV0dXJuIHAoZSsodCZufHImfm4pK28rYXwwLHMpK2l8MH1mdW5jdGlvbiBtKGUsdCxyLG4saSxvLGEscyl7cmV0dXJuIHAoZSsodF4ocnx+bikpK28rYXwwLHMpK2l8MH1pKGwsbyksbC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1hLHQ9MDt0PDE2OysrdCllW3RdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqdCk7Zm9yKHZhciByPTB8dGhpcy5fYSxuPTB8dGhpcy5fYixpPTB8dGhpcy5fYyxvPTB8dGhpcy5fZCxsPTB8dGhpcy5fZSx3PTB8dGhpcy5fYSxfPTB8dGhpcy5fYixFPTB8dGhpcy5fYyxTPTB8dGhpcy5fZCxBPTB8dGhpcy5fZSx4PTA7eDw4MDt4Kz0xKXt2YXIgayxNO3g8MTY/KGs9YihyLG4saSxvLGwsZVtzW3hdXSxoWzBdLHVbeF0pLE09bSh3LF8sRSxTLEEsZVtmW3hdXSxkWzBdLGNbeF0pKTp4PDMyPyhrPXkocixuLGksbyxsLGVbc1t4XV0saFsxXSx1W3hdKSxNPXYodyxfLEUsUyxBLGVbZlt4XV0sZFsxXSxjW3hdKSk6eDw0OD8oaz1nKHIsbixpLG8sbCxlW3NbeF1dLGhbMl0sdVt4XSksTT1nKHcsXyxFLFMsQSxlW2ZbeF1dLGRbMl0sY1t4XSkpOng8NjQ/KGs9dihyLG4saSxvLGwsZVtzW3hdXSxoWzNdLHVbeF0pLE09eSh3LF8sRSxTLEEsZVtmW3hdXSxkWzNdLGNbeF0pKTooaz1tKHIsbixpLG8sbCxlW3NbeF1dLGhbNF0sdVt4XSksTT1iKHcsXyxFLFMsQSxlW2ZbeF1dLGRbNF0sY1t4XSkpLHI9bCxsPW8sbz1wKGksMTApLGk9bixuPWssdz1BLEE9UyxTPXAoRSwxMCksRT1fLF89TX12YXIgVD10aGlzLl9iK2krU3wwO3RoaXMuX2I9dGhpcy5fYytvK0F8MCx0aGlzLl9jPXRoaXMuX2QrbCt3fDAsdGhpcy5fZD10aGlzLl9lK3IrX3wwLHRoaXMuX2U9dGhpcy5fYStuK0V8MCx0aGlzLl9hPVR9LGwucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgZT1uLmFsbG9jP24uYWxsb2MoMjApOm5ldyBuKDIwKTtyZXR1cm4gZS53cml0ZUludDMyTEUodGhpcy5fYSwwKSxlLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLGUud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksZS53cml0ZUludDMyTEUodGhpcy5fZCwxMiksZS53cml0ZUludDMyTEUodGhpcy5fZSwxNiksZX0sZS5leHBvcnRzPWx9LGZ1bmN0aW9uKGUsdCxyKXsodD1lLmV4cG9ydHM9ZnVuY3Rpb24oZSl7ZT1lLnRvTG93ZXJDYXNlKCk7dmFyIHI9dFtlXTtpZighcil0aHJvdyBuZXcgRXJyb3IoZStcIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cylcIik7cmV0dXJuIG5ldyByfSkuc2hhPXIoMTQ4KSx0LnNoYTE9cigxNDkpLHQuc2hhMjI0PXIoMTUwKSx0LnNoYTI1Nj1yKDcwKSx0LnNoYTM4ND1yKDE1MSksdC5zaGE1MTI9cig3MSl9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDApLGk9cigxNyksbz1yKDIpLkJ1ZmZlcixhPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0scz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIGYoKXt0aGlzLmluaXQoKSx0aGlzLl93PXMsaS5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGU8PDMwfGU+Pj4yfWZ1bmN0aW9uIGMoZSx0LHIsbil7cmV0dXJuIDA9PT1lP3Qmcnx+dCZuOjI9PT1lP3Qmcnx0Jm58ciZuOnRecl5ufW4oZixpKSxmLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxmLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPXRoaXMuX3csbj0wfHRoaXMuX2EsaT0wfHRoaXMuX2Isbz0wfHRoaXMuX2Mscz0wfHRoaXMuX2QsZj0wfHRoaXMuX2UsaD0wO2g8MTY7KytoKXJbaF09ZS5yZWFkSW50MzJCRSg0KmgpO2Zvcig7aDw4MDsrK2gpcltoXT1yW2gtM11ecltoLThdXnJbaC0xNF1ecltoLTE2XTtmb3IodmFyIGQ9MDtkPDgwOysrZCl7dmFyIGw9fn4oZC8yMCkscD0wfCgodD1uKTw8NXx0Pj4+MjcpK2MobCxpLG8scykrZityW2RdK2FbbF07Zj1zLHM9byxvPXUoaSksaT1uLG49cH10aGlzLl9hPW4rdGhpcy5fYXwwLHRoaXMuX2I9aSt0aGlzLl9ifDAsdGhpcy5fYz1vK3RoaXMuX2N8MCx0aGlzLl9kPXMrdGhpcy5fZHwwLHRoaXMuX2U9Zit0aGlzLl9lfDB9LGYucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIGU9by5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIGUud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxlLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksZS53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLGUud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksZS53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxlfSxlLmV4cG9ydHM9Zn0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMCksaT1yKDE3KSxvPXIoMikuQnVmZmVyLGE9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSxzPW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gZigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9cyxpLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gZTw8NXxlPj4+Mjd9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZTw8MzB8ZT4+PjJ9ZnVuY3Rpb24gaChlLHQscixuKXtyZXR1cm4gMD09PWU/dCZyfH50Jm46Mj09PWU/dCZyfHQmbnxyJm46dF5yXm59bihmLGkpLGYucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LGYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9dGhpcy5fdyxuPTB8dGhpcy5fYSxpPTB8dGhpcy5fYixvPTB8dGhpcy5fYyxzPTB8dGhpcy5fZCxmPTB8dGhpcy5fZSxkPTA7ZDwxNjsrK2QpcltkXT1lLnJlYWRJbnQzMkJFKDQqZCk7Zm9yKDtkPDgwOysrZClyW2RdPSh0PXJbZC0zXV5yW2QtOF1ecltkLTE0XV5yW2QtMTZdKTw8MXx0Pj4+MzE7Zm9yKHZhciBsPTA7bDw4MDsrK2wpe3ZhciBwPX5+KGwvMjApLGI9dShuKStoKHAsaSxvLHMpK2YrcltsXSthW3BdfDA7Zj1zLHM9byxvPWMoaSksaT1uLG49Yn10aGlzLl9hPW4rdGhpcy5fYXwwLHRoaXMuX2I9aSt0aGlzLl9ifDAsdGhpcy5fYz1vK3RoaXMuX2N8MCx0aGlzLl9kPXMrdGhpcy5fZHwwLHRoaXMuX2U9Zit0aGlzLl9lfDB9LGYucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIGU9by5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIGUud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxlLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksZS53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLGUud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksZS53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxlfSxlLmV4cG9ydHM9Zn0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMCksaT1yKDcwKSxvPXIoMTcpLGE9cigyKS5CdWZmZXIscz1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIGYoKXt0aGlzLmluaXQoKSx0aGlzLl93PXMsby5jYWxsKHRoaXMsNjQsNTYpfW4oZixpKSxmLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MzIzODM3MTAzMix0aGlzLl9iPTkxNDE1MDY2Myx0aGlzLl9jPTgxMjcwMjk5OSx0aGlzLl9kPTQxNDQ5MTI2OTcsdGhpcy5fZT00MjkwNzc1ODU3LHRoaXMuX2Y9MTc1MDYwMzAyNSx0aGlzLl9nPTE2OTQwNzY4MzksdGhpcy5faD0zMjA0MDc1NDI4LHRoaXN9LGYucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIGU9YS5hbGxvY1Vuc2FmZSgyOCk7cmV0dXJuIGUud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksZS53cml0ZUludDMyQkUodGhpcy5fYiw0KSxlLndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLGUud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLGUud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLGUud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLGUud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLGV9LGUuZXhwb3J0cz1mfSxmdW5jdGlvbihlLHQscil7dmFyIG49cigwKSxpPXIoNzEpLG89cigxNyksYT1yKDIpLkJ1ZmZlcixzPW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIGYoKXt0aGlzLmluaXQoKSx0aGlzLl93PXMsby5jYWxsKHRoaXMsMTI4LDExMil9bihmLGkpLGYucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUwLHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIzMSx0aGlzLl9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5fY2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMuX2dsPTE2OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxmLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBlPWEuYWxsb2NVbnNhZmUoNDgpO2Z1bmN0aW9uIHQodCxyLG4pe2Uud3JpdGVJbnQzMkJFKHQsbiksZS53cml0ZUludDMyQkUocixuKzQpfXJldHVybiB0KHRoaXMuX2FoLHRoaXMuX2FsLDApLHQodGhpcy5fYmgsdGhpcy5fYmwsOCksdCh0aGlzLl9jaCx0aGlzLl9jbCwxNiksdCh0aGlzLl9kaCx0aGlzLl9kbCwyNCksdCh0aGlzLl9laCx0aGlzLl9lbCwzMiksdCh0aGlzLl9maCx0aGlzLl9mbCw0MCksZX0sZS5leHBvcnRzPWZ9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDIpLkJ1ZmZlcixpPXIoMTgpLlRyYW5zZm9ybSxvPXIoMjApLlN0cmluZ0RlY29kZXI7ZnVuY3Rpb24gYShlKXtpLmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT1cInN0cmluZ1wiPT10eXBlb2YgZSx0aGlzLmhhc2hNb2RlP3RoaXNbZV09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmluYWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9cigwKShhLGkpLGEucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQscil7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPW4uZnJvbShlLHQpKTt2YXIgaT10aGlzLl91cGRhdGUoZSk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczoociYmKGk9dGhpcy5fdG9TdHJpbmcoaSxyKSksaSl9LGEucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxhLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sYS5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LGEucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxhLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUoZSk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZShlKSl9Y2F0Y2goZSl7bj1lfWZpbmFsbHl7cihuKX19LGEucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihlKXt2YXIgdDt0cnl7dGhpcy5wdXNoKHRoaXMuX19maW5hbCgpKX1jYXRjaChlKXt0PWV9ZSh0KX0sYS5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2ZpbmFsKCl8fG4uYWxsb2MoMCk7cmV0dXJuIGUmJih0PXRoaXMuX3RvU3RyaW5nKHQsZSwhMCkpLHR9LGEucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbihlLHQscil7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IG8odCksdGhpcy5fZW5jb2Rpbmc9dCksdGhpcy5fZW5jb2RpbmchPT10KXRocm93IG5ldyBFcnJvcihcImNhbid0IHN3aXRjaCBlbmNvZGluZ3NcIik7dmFyIG49dGhpcy5fZGVjb2Rlci53cml0ZShlKTtyZXR1cm4gciYmKG4rPXRoaXMuX2RlY29kZXIuZW5kKCkpLG59LGUuZXhwb3J0cz1hfSxmdW5jdGlvbihlLHQpe30sZnVuY3Rpb24oZSl7ZS5leHBvcnRzPXtfYXJnczpbW1wiZWxsaXB0aWNANi41LjNcIixcIi9Vc2Vycy90b20vV29ya3NwYWNlcy9zYW5kYm94L3dlYi1zZGsvcGFja2FnZXMvcG9ydGlzLXdlYjNcIl1dLF9mcm9tOlwiZWxsaXB0aWNANi41LjNcIixfaWQ6XCJlbGxpcHRpY0A2LjUuM1wiLF9pbkJ1bmRsZTohMSxfaW50ZWdyaXR5Olwic2hhNTEyLUlNcXp2NXdOUWYrRTZhSGVJcUFUczB0T0xlT1R3ajFRS2JSY1MzakJiWWtsNW9MQXNlckE4eUpUVDcvVnlIVVlHOTFQUm1QeWVRRE9iS0xQcGVTNGR3PT1cIixfbG9jYXRpb246XCIvZWxsaXB0aWNcIixfcGhhbnRvbUNoaWxkcmVuOnt9LF9yZXF1ZXN0ZWQ6e3R5cGU6XCJ2ZXJzaW9uXCIscmVnaXN0cnk6ITAscmF3OlwiZWxsaXB0aWNANi41LjNcIixuYW1lOlwiZWxsaXB0aWNcIixlc2NhcGVkTmFtZTpcImVsbGlwdGljXCIscmF3U3BlYzpcIjYuNS4zXCIsc2F2ZVNwZWM6bnVsbCxmZXRjaFNwZWM6XCI2LjUuM1wifSxfcmVxdWlyZWRCeTpbXCIvYnJvd3NlcmlmeS1zaWduXCIsXCIvY3JlYXRlLWVjZGhcIixcIi9ldGgtanNvbi1ycGMtZmlsdGVycy9ldGhlcmV1bWpzLWFiaS9ldGhlcmV1bWpzLXV0aWxcIixcIi9ldGgtanNvbi1ycGMtbWlkZGxld2FyZS9ldGhlcmV1bWpzLWFiaS9ldGhlcmV1bWpzLXV0aWxcIixcIi9ldGgtc2lnLXV0aWxcIixcIi9ldGgtc2lnLXV0aWwvZXRoZXJldW1qcy1hYmkvZXRoZXJldW1qcy11dGlsXCIsXCIvZXRoZXJldW1qcy11dGlsL3NlY3AyNTZrMVwiLFwiL2V0aGVyZXVtanMtdm0vZXRoZXJldW1qcy1ibG9jay9ldGhlcmV1bWpzLXV0aWxcIixcIi9ldGhlcmV1bWpzLXZtL2V0aGVyZXVtanMtdXRpbFwiLFwiL3NlY3AyNTZrMVwiXSxfcmVzb2x2ZWQ6XCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGxpcHRpYy8tL2VsbGlwdGljLTYuNS4zLnRnelwiLF9zcGVjOlwiNi41LjNcIixfd2hlcmU6XCIvVXNlcnMvdG9tL1dvcmtzcGFjZXMvc2FuZGJveC93ZWItc2RrL3BhY2thZ2VzL3BvcnRpcy13ZWIzXCIsYXV0aG9yOntuYW1lOlwiRmVkb3IgSW5kdXRueVwiLGVtYWlsOlwiZmVkb3JAaW5kdXRueS5jb21cIn0sYnVnczp7dXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMvaXNzdWVzXCJ9LGRlcGVuZGVuY2llczp7XCJibi5qc1wiOlwiXjQuNC4wXCIsYnJvcmFuZDpcIl4xLjAuMVwiLFwiaGFzaC5qc1wiOlwiXjEuMC4wXCIsXCJobWFjLWRyYmdcIjpcIl4xLjAuMFwiLGluaGVyaXRzOlwiXjIuMC4xXCIsXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCI6XCJeMS4wLjBcIixcIm1pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHNcIjpcIl4xLjAuMFwifSxkZXNjcmlwdGlvbjpcIkVDIGNyeXB0b2dyYXBoeVwiLGRldkRlcGVuZGVuY2llczp7YnJmczpcIl4xLjQuM1wiLGNvdmVyYWxsczpcIl4zLjAuOFwiLGdydW50OlwiXjEuMC40XCIsXCJncnVudC1icm93c2VyaWZ5XCI6XCJeNS4wLjBcIixcImdydW50LWNsaVwiOlwiXjEuMi4wXCIsXCJncnVudC1jb250cmliLWNvbm5lY3RcIjpcIl4xLjAuMFwiLFwiZ3J1bnQtY29udHJpYi1jb3B5XCI6XCJeMS4wLjBcIixcImdydW50LWNvbnRyaWItdWdsaWZ5XCI6XCJeMS4wLjFcIixcImdydW50LW1vY2hhLWlzdGFuYnVsXCI6XCJeMy4wLjFcIixcImdydW50LXNhdWNlbGFic1wiOlwiXjkuMC4xXCIsaXN0YW5idWw6XCJeMC40LjJcIixqc2NzOlwiXjMuMC43XCIsanNoaW50OlwiXjIuMTAuM1wiLG1vY2hhOlwiXjYuMi4yXCJ9LGZpbGVzOltcImxpYlwiXSxob21lcGFnZTpcImh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljXCIsa2V5d29yZHM6W1wiRUNcIixcIkVsbGlwdGljXCIsXCJjdXJ2ZVwiLFwiQ3J5cHRvZ3JhcGh5XCJdLGxpY2Vuc2U6XCJNSVRcIixtYWluOlwibGliL2VsbGlwdGljLmpzXCIsbmFtZTpcImVsbGlwdGljXCIscmVwb3NpdG9yeTp7dHlwZTpcImdpdFwiLHVybDpcImdpdCtzc2g6Ly9naXRAZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljLmdpdFwifSxzY3JpcHRzOntqc2NzOlwianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qc1wiLGpzaGludDpcImpzY3MgYmVuY2htYXJrcy8qLmpzIGxpYi8qLmpzIGxpYi8qKi8qLmpzIGxpYi8qKi8qKi8qLmpzIHRlc3QvaW5kZXguanNcIixsaW50OlwibnBtIHJ1biBqc2NzICYmIG5wbSBydW4ganNoaW50XCIsdGVzdDpcIm5wbSBydW4gbGludCAmJiBucG0gcnVuIHVuaXRcIix1bml0OlwiaXN0YW5idWwgdGVzdCBfbW9jaGEgLS1yZXBvcnRlcj1zcGVjIHRlc3QvaW5kZXguanNcIix2ZXJzaW9uOlwiZ3J1bnQgZGlzdCAmJiBnaXQgYWRkIGRpc3QvXCJ9LHZlcnNpb246XCI2LjUuM1wifX0sZnVuY3Rpb24oZSx0KXt9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDYpLGk9cig0KSxvPXIoMCksYT1yKDI2KSxzPW4uYXNzZXJ0O2Z1bmN0aW9uIGYoZSl7YS5jYWxsKHRoaXMsXCJzaG9ydFwiLGUpLHRoaXMuYT1uZXcgaShlLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IGkoZS5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbShlKSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiB1KGUsdCxyLG4pe2EuQmFzZVBvaW50LmNhbGwodGhpcyxlLFwiYWZmaW5lXCIpLG51bGw9PT10JiZudWxsPT09cj8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IGkodCwxNiksdGhpcy55PW5ldyBpKHIsMTYpLG4mJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gYyhlLHQscixuKXthLkJhc2VQb2ludC5jYWxsKHRoaXMsZSxcImphY29iaWFuXCIpLG51bGw9PT10JiZudWxsPT09ciYmbnVsbD09PW4/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBpKDApKToodGhpcy54PW5ldyBpKHQsMTYpLHRoaXMueT1uZXcgaShyLDE2KSx0aGlzLno9bmV3IGkobiwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1vKGYsYSksZS5leHBvcnRzPWYsZi5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbT1mdW5jdGlvbihlKXtpZih0aGlzLnplcm9BJiZ0aGlzLmcmJnRoaXMubiYmMT09PXRoaXMucC5tb2RuKDMpKXt2YXIgdCxyO2lmKGUuYmV0YSl0PW5ldyBpKGUuYmV0YSwxNikudG9SZWQodGhpcy5yZWQpO2Vsc2V7dmFyIG49dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7dD0odD1uWzBdLmNtcChuWzFdKTwwP25bMF06blsxXSkudG9SZWQodGhpcy5yZWQpfWlmKGUubGFtYmRhKXI9bmV3IGkoZS5sYW1iZGEsMTYpO2Vsc2V7dmFyIG89dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7MD09PXRoaXMuZy5tdWwob1swXSkueC5jbXAodGhpcy5nLngucmVkTXVsKHQpKT9yPW9bMF06KHI9b1sxXSxzKDA9PT10aGlzLmcubXVsKHIpLnguY21wKHRoaXMuZy54LnJlZE11bCh0KSkpKX1yZXR1cm57YmV0YTp0LGxhbWJkYTpyLGJhc2lzOmUuYmFzaXM/ZS5iYXNpcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybnthOm5ldyBpKGUuYSwxNiksYjpuZXcgaShlLmIsMTYpfX0pKTp0aGlzLl9nZXRFbmRvQmFzaXMocil9fX0sZi5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbihlKXt2YXIgdD1lPT09dGhpcy5wP3RoaXMucmVkOmkubW9udChlKSxyPW5ldyBpKDIpLnRvUmVkKHQpLnJlZEludm0oKSxuPXIucmVkTmVnKCksbz1uZXcgaSgzKS50b1JlZCh0KS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKHIpO3JldHVybltuLnJlZEFkZChvKS5mcm9tUmVkKCksbi5yZWRTdWIobykuZnJvbVJlZCgpXX0sZi5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbihlKXtmb3IodmFyIHQscixuLG8sYSxzLGYsdSxjLGg9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxkPWUsbD10aGlzLm4uY2xvbmUoKSxwPW5ldyBpKDEpLGI9bmV3IGkoMCkseT1uZXcgaSgwKSxnPW5ldyBpKDEpLHY9MDswIT09ZC5jbXBuKDApOyl7dmFyIG09bC5kaXYoZCk7dT1sLnN1YihtLm11bChkKSksYz15LnN1YihtLm11bChwKSk7dmFyIHc9Zy5zdWIobS5tdWwoYikpO2lmKCFuJiZ1LmNtcChoKTwwKXQ9Zi5uZWcoKSxyPXAsbj11Lm5lZygpLG89YztlbHNlIGlmKG4mJjI9PSsrdilicmVhaztmPXUsbD1kLGQ9dSx5PXAscD1jLGc9YixiPXd9YT11Lm5lZygpLHM9Yzt2YXIgXz1uLnNxcigpLmFkZChvLnNxcigpKTtyZXR1cm4gYS5zcXIoKS5hZGQocy5zcXIoKSkuY21wKF8pPj0wJiYoYT10LHM9ciksbi5uZWdhdGl2ZSYmKG49bi5uZWcoKSxvPW8ubmVnKCkpLGEubmVnYXRpdmUmJihhPWEubmVnKCkscz1zLm5lZygpKSxbe2E6bixiOm99LHthOmEsYjpzfV19LGYucHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5lbmRvLmJhc2lzLHI9dFswXSxuPXRbMV0saT1uLmIubXVsKGUpLmRpdlJvdW5kKHRoaXMubiksbz1yLmIubmVnKCkubXVsKGUpLmRpdlJvdW5kKHRoaXMubiksYT1pLm11bChyLmEpLHM9by5tdWwobi5hKSxmPWkubXVsKHIuYiksdT1vLm11bChuLmIpO3JldHVybntrMTplLnN1YihhKS5zdWIocyksazI6Zi5hZGQodSkubmVnKCl9fSxmLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKGUsdCl7KGU9bmV3IGkoZSwxNikpLnJlZHx8KGU9ZS50b1JlZCh0aGlzLnJlZCkpO3ZhciByPWUucmVkU3FyKCkucmVkTXVsKGUpLnJlZElBZGQoZS5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLG49ci5yZWRTcXJ0KCk7aWYoMCE9PW4ucmVkU3FyKCkucmVkU3ViKHIpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7dmFyIG89bi5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4odCYmIW98fCF0JiZvKSYmKG49bi5yZWROZWcoKSksdGhpcy5wb2ludChlLG4pfSxmLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihlKXtpZihlLmluZilyZXR1cm4hMDt2YXIgdD1lLngscj1lLnksbj10aGlzLmEucmVkTXVsKHQpLGk9dC5yZWRTcXIoKS5yZWRNdWwodCkucmVkSUFkZChuKS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT1yLnJlZFNxcigpLnJlZElTdWIoaSkuY21wbigwKX0sZi5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49dGhpcy5fZW5kb1duYWZUMSxpPXRoaXMuX2VuZG9XbmFmVDIsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgYT10aGlzLl9lbmRvU3BsaXQodFtvXSkscz1lW29dLGY9cy5fZ2V0QmV0YSgpO2EuazEubmVnYXRpdmUmJihhLmsxLmluZWcoKSxzPXMubmVnKCEwKSksYS5rMi5uZWdhdGl2ZSYmKGEuazIuaW5lZygpLGY9Zi5uZWcoITApKSxuWzIqb109cyxuWzIqbysxXT1mLGlbMipvXT1hLmsxLGlbMipvKzFdPWEuazJ9Zm9yKHZhciB1PXRoaXMuX3duYWZNdWxBZGQoMSxuLGksMipvLHIpLGM9MDtjPDIqbztjKyspbltjXT1udWxsLGlbY109bnVsbDtyZXR1cm4gdX0sbyh1LGEuQmFzZVBvaW50KSxmLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihlLHQscil7cmV0dXJuIG5ldyB1KHRoaXMsZSx0LHIpfSxmLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUuZnJvbUpTT04odGhpcyxlLHQpfSx1LnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe2lmKHRoaXMuY3VydmUuZW5kbyl7dmFyIGU9dGhpcy5wcmVjb21wdXRlZDtpZihlJiZlLmJldGEpcmV0dXJuIGUuYmV0YTt2YXIgdD10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYoZSl7dmFyIHI9dGhpcy5jdXJ2ZSxuPWZ1bmN0aW9uKGUpe3JldHVybiByLnBvaW50KGUueC5yZWRNdWwoci5lbmRvLmJldGEpLGUueSl9O2UuYmV0YT10LHQucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6ZS5uYWYmJnt3bmQ6ZS5uYWYud25kLHBvaW50czplLm5hZi5wb2ludHMubWFwKG4pfSxkb3VibGVzOmUuZG91YmxlcyYme3N0ZXA6ZS5kb3VibGVzLnN0ZXAscG9pbnRzOmUuZG91Ymxlcy5wb2ludHMubWFwKG4pfX19cmV0dXJuIHR9fSx1LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlzLnldfSx1LmZyb21KU09OPWZ1bmN0aW9uKGUsdCxyKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9SlNPTi5wYXJzZSh0KSk7dmFyIG49ZS5wb2ludCh0WzBdLHRbMV0scik7aWYoIXRbMl0pcmV0dXJuIG47ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZS5wb2ludCh0WzBdLHRbMV0scil9dmFyIG89dFsyXTtyZXR1cm4gbi5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6by5kb3VibGVzJiZ7c3RlcDpvLmRvdWJsZXMuc3RlcCxwb2ludHM6W25dLmNvbmNhdChvLmRvdWJsZXMucG9pbnRzLm1hcChpKSl9LG5hZjpvLm5hZiYme3duZDpvLm5hZi53bmQscG9pbnRzOltuXS5jb25jYXQoby5uYWYucG9pbnRzLm1hcChpKSl9fSxufSx1LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP1wiPEVDIFBvaW50IEluZmluaXR5PlwiOlwiPEVDIFBvaW50IHg6IFwiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgeTogXCIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIj5cIn0sdS5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0sdS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe2lmKHRoaXMuaW5mKXJldHVybiBlO2lmKGUuaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEoZSkpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShlKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKGUueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgdD10aGlzLnkucmVkU3ViKGUueSk7MCE9PXQuY21wbigwKSYmKHQ9dC5yZWRNdWwodGhpcy54LnJlZFN1YihlLngpLnJlZEludm0oKSkpO3ZhciByPXQucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIoZS54KSxuPXQucmVkTXVsKHRoaXMueC5yZWRTdWIocikpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChyLG4pfSx1LnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgZT10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PWUuY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciB0PXRoaXMuY3VydmUuYSxyPXRoaXMueC5yZWRTcXIoKSxuPWUucmVkSW52bSgpLGk9ci5yZWRBZGQocikucmVkSUFkZChyKS5yZWRJQWRkKHQpLnJlZE11bChuKSxvPWkucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLGE9aS5yZWRNdWwodGhpcy54LnJlZFN1YihvKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KG8sYSl9LHUucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0sdS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSx1LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9bmV3IGkoZSwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNEb3VibGVzKGUpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsZSk6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbZV0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxlKX0sdS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1bdGhpcyx0XSxpPVtlLHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIpfSx1LnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1bdGhpcyx0XSxpPVtlLHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIsITApfSx1LnByb3RvdHlwZS5lcT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV8fHRoaXMuaW5mPT09ZS5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoZS54KSYmMD09PXRoaXMueS5jbXAoZS55KSl9LHUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihlKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgdD10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKGUmJnRoaXMucHJlY29tcHV0ZWQpe3ZhciByPXRoaXMucHJlY29tcHV0ZWQsbj1mdW5jdGlvbihlKXtyZXR1cm4gZS5uZWcoKX07dC5wcmVjb21wdXRlZD17bmFmOnIubmFmJiZ7d25kOnIubmFmLnduZCxwb2ludHM6ci5uYWYucG9pbnRzLm1hcChuKX0sZG91YmxlczpyLmRvdWJsZXMmJntzdGVwOnIuZG91Ymxlcy5zdGVwLHBvaW50czpyLmRvdWJsZXMucG9pbnRzLm1hcChuKX19fXJldHVybiB0fSx1LnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxvKGMsYS5CYXNlUG9pbnQpLGYucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihlLHQscil7cmV0dXJuIG5ldyBjKHRoaXMsZSx0LHIpfSxjLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBlPXRoaXMuei5yZWRJbnZtKCksdD1lLnJlZFNxcigpLHI9dGhpcy54LnJlZE11bCh0KSxuPXRoaXMueS5yZWRNdWwodCkucmVkTXVsKGUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHIsbil9LGMucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LGMucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gZTtpZihlLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgdD1lLnoucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCksbj10aGlzLngucmVkTXVsKHQpLGk9ZS54LnJlZE11bChyKSxvPXRoaXMueS5yZWRNdWwodC5yZWRNdWwoZS56KSksYT1lLnkucmVkTXVsKHIucmVkTXVsKHRoaXMueikpLHM9bi5yZWRTdWIoaSksZj1vLnJlZFN1YihhKTtpZigwPT09cy5jbXBuKDApKXJldHVybiAwIT09Zi5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciB1PXMucmVkU3FyKCksYz11LnJlZE11bChzKSxoPW4ucmVkTXVsKHUpLGQ9Zi5yZWRTcXIoKS5yZWRJQWRkKGMpLnJlZElTdWIoaCkucmVkSVN1YihoKSxsPWYucmVkTXVsKGgucmVkSVN1YihkKSkucmVkSVN1YihvLnJlZE11bChjKSkscD10aGlzLnoucmVkTXVsKGUueikucmVkTXVsKHMpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChkLGwscCl9LGMucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBlLnRvSigpO2lmKGUuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuei5yZWRTcXIoKSxyPXRoaXMueCxuPWUueC5yZWRNdWwodCksaT10aGlzLnksbz1lLnkucmVkTXVsKHQpLnJlZE11bCh0aGlzLnopLGE9ci5yZWRTdWIobikscz1pLnJlZFN1YihvKTtpZigwPT09YS5jbXBuKDApKXJldHVybiAwIT09cy5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBmPWEucmVkU3FyKCksdT1mLnJlZE11bChhKSxjPXIucmVkTXVsKGYpLGg9cy5yZWRTcXIoKS5yZWRJQWRkKHUpLnJlZElTdWIoYykucmVkSVN1YihjKSxkPXMucmVkTXVsKGMucmVkSVN1YihoKSkucmVkSVN1YihpLnJlZE11bCh1KSksbD10aGlzLnoucmVkTXVsKGEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChoLGQsbCl9LGMucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oZSl7aWYoMD09PWUpcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIWUpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe2Zvcih2YXIgdD10aGlzLHI9MDtyPGU7cisrKXQ9dC5kYmwoKTtyZXR1cm4gdH12YXIgbj10aGlzLmN1cnZlLmEsaT10aGlzLmN1cnZlLnRpbnYsbz10aGlzLngsYT10aGlzLnkscz10aGlzLnosZj1zLnJlZFNxcigpLnJlZFNxcigpLHU9YS5yZWRBZGQoYSk7Zm9yKHI9MDtyPGU7cisrKXt2YXIgYz1vLnJlZFNxcigpLGg9dS5yZWRTcXIoKSxkPWgucmVkU3FyKCksbD1jLnJlZEFkZChjKS5yZWRJQWRkKGMpLnJlZElBZGQobi5yZWRNdWwoZikpLHA9by5yZWRNdWwoaCksYj1sLnJlZFNxcigpLnJlZElTdWIocC5yZWRBZGQocCkpLHk9cC5yZWRJU3ViKGIpLGc9bC5yZWRNdWwoeSk7Zz1nLnJlZElBZGQoZykucmVkSVN1YihkKTt2YXIgdj11LnJlZE11bChzKTtyKzE8ZSYmKGY9Zi5yZWRNdWwoZCkpLG89YixzPXYsdT1nfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChvLHUucmVkTXVsKGkpLHMpfSxjLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxjLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBlLHQscjtpZih0aGlzLnpPbmUpe3ZhciBuPXRoaXMueC5yZWRTcXIoKSxpPXRoaXMueS5yZWRTcXIoKSxvPWkucmVkU3FyKCksYT10aGlzLngucmVkQWRkKGkpLnJlZFNxcigpLnJlZElTdWIobikucmVkSVN1YihvKTthPWEucmVkSUFkZChhKTt2YXIgcz1uLnJlZEFkZChuKS5yZWRJQWRkKG4pLGY9cy5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYSksdT1vLnJlZElBZGQobyk7dT0odT11LnJlZElBZGQodSkpLnJlZElBZGQodSksZT1mLHQ9cy5yZWRNdWwoYS5yZWRJU3ViKGYpKS5yZWRJU3ViKHUpLHI9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGM9dGhpcy54LnJlZFNxcigpLGg9dGhpcy55LnJlZFNxcigpLGQ9aC5yZWRTcXIoKSxsPXRoaXMueC5yZWRBZGQoaCkucmVkU3FyKCkucmVkSVN1YihjKS5yZWRJU3ViKGQpO2w9bC5yZWRJQWRkKGwpO3ZhciBwPWMucmVkQWRkKGMpLnJlZElBZGQoYyksYj1wLnJlZFNxcigpLHk9ZC5yZWRJQWRkKGQpO3k9KHk9eS5yZWRJQWRkKHkpKS5yZWRJQWRkKHkpLGU9Yi5yZWRJU3ViKGwpLnJlZElTdWIobCksdD1wLnJlZE11bChsLnJlZElTdWIoZSkpLnJlZElTdWIoeSkscj0ocj10aGlzLnkucmVkTXVsKHRoaXMueikpLnJlZElBZGQocil9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGUsdCxyKX0sYy5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIGUsdCxyO2lmKHRoaXMuek9uZSl7dmFyIG49dGhpcy54LnJlZFNxcigpLGk9dGhpcy55LnJlZFNxcigpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQoaSkucmVkU3FyKCkucmVkSVN1YihuKS5yZWRJU3ViKG8pO2E9YS5yZWRJQWRkKGEpO3ZhciBzPW4ucmVkQWRkKG4pLnJlZElBZGQobikucmVkSUFkZCh0aGlzLmN1cnZlLmEpLGY9cy5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYSk7ZT1mO3ZhciB1PW8ucmVkSUFkZChvKTt1PSh1PXUucmVkSUFkZCh1KSkucmVkSUFkZCh1KSx0PXMucmVkTXVsKGEucmVkSVN1YihmKSkucmVkSVN1Yih1KSxyPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBjPXRoaXMuei5yZWRTcXIoKSxoPXRoaXMueS5yZWRTcXIoKSxkPXRoaXMueC5yZWRNdWwoaCksbD10aGlzLngucmVkU3ViKGMpLnJlZE11bCh0aGlzLngucmVkQWRkKGMpKTtsPWwucmVkQWRkKGwpLnJlZElBZGQobCk7dmFyIHA9ZC5yZWRJQWRkKGQpLGI9KHA9cC5yZWRJQWRkKHApKS5yZWRBZGQocCk7ZT1sLnJlZFNxcigpLnJlZElTdWIoYikscj10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihoKS5yZWRJU3ViKGMpO3ZhciB5PWgucmVkU3FyKCk7eT0oeT0oeT15LnJlZElBZGQoeSkpLnJlZElBZGQoeSkpLnJlZElBZGQoeSksdD1sLnJlZE11bChwLnJlZElTdWIoZSkpLnJlZElTdWIoeSl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGUsdCxyKX0sYy5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VydmUuYSx0PXRoaXMueCxyPXRoaXMueSxuPXRoaXMueixpPW4ucmVkU3FyKCkucmVkU3FyKCksbz10LnJlZFNxcigpLGE9ci5yZWRTcXIoKSxzPW8ucmVkQWRkKG8pLnJlZElBZGQobykucmVkSUFkZChlLnJlZE11bChpKSksZj10LnJlZEFkZCh0KSx1PShmPWYucmVkSUFkZChmKSkucmVkTXVsKGEpLGM9cy5yZWRTcXIoKS5yZWRJU3ViKHUucmVkQWRkKHUpKSxoPXUucmVkSVN1YihjKSxkPWEucmVkU3FyKCk7ZD0oZD0oZD1kLnJlZElBZGQoZCkpLnJlZElBZGQoZCkpLnJlZElBZGQoZCk7dmFyIGw9cy5yZWRNdWwoaCkucmVkSVN1YihkKSxwPXIucmVkQWRkKHIpLnJlZE11bChuKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoYyxsLHApfSxjLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBlPXRoaXMueC5yZWRTcXIoKSx0PXRoaXMueS5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKSxuPXQucmVkU3FyKCksaT1lLnJlZEFkZChlKS5yZWRJQWRkKGUpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQodCkucmVkU3FyKCkucmVkSVN1YihlKS5yZWRJU3ViKG4pLHM9KGE9KGE9KGE9YS5yZWRJQWRkKGEpKS5yZWRBZGQoYSkucmVkSUFkZChhKSkucmVkSVN1YihvKSkucmVkU3FyKCksZj1uLnJlZElBZGQobik7Zj0oZj0oZj1mLnJlZElBZGQoZikpLnJlZElBZGQoZikpLnJlZElBZGQoZik7dmFyIHU9aS5yZWRJQWRkKGEpLnJlZFNxcigpLnJlZElTdWIobykucmVkSVN1YihzKS5yZWRJU3ViKGYpLGM9dC5yZWRNdWwodSk7Yz0oYz1jLnJlZElBZGQoYykpLnJlZElBZGQoYyk7dmFyIGg9dGhpcy54LnJlZE11bChzKS5yZWRJU3ViKGMpO2g9KGg9aC5yZWRJQWRkKGgpKS5yZWRJQWRkKGgpO3ZhciBkPXRoaXMueS5yZWRNdWwodS5yZWRNdWwoZi5yZWRJU3ViKHUpKS5yZWRJU3ViKGEucmVkTXVsKHMpKSk7ZD0oZD0oZD1kLnJlZElBZGQoZCkpLnJlZElBZGQoZCkpLnJlZElBZGQoZCk7dmFyIGw9dGhpcy56LnJlZEFkZChhKS5yZWRTcXIoKS5yZWRJU3ViKHIpLnJlZElTdWIocyk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGgsZCxsKX0sYy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bmV3IGkoZSx0KSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsZSl9LGMucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGUpe2lmKFwiYWZmaW5lXCI9PT1lLnR5cGUpcmV0dXJuIHRoaXMuZXEoZS50b0ooKSk7aWYodGhpcz09PWUpcmV0dXJuITA7dmFyIHQ9dGhpcy56LnJlZFNxcigpLHI9ZS56LnJlZFNxcigpO2lmKDAhPT10aGlzLngucmVkTXVsKHIpLnJlZElTdWIoZS54LnJlZE11bCh0KSkuY21wbigwKSlyZXR1cm4hMTt2YXIgbj10LnJlZE11bCh0aGlzLnopLGk9ci5yZWRNdWwoZS56KTtyZXR1cm4gMD09PXRoaXMueS5yZWRNdWwoaSkucmVkSVN1YihlLnkucmVkTXVsKG4pKS5jbXBuKDApfSxjLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy56LnJlZFNxcigpLHI9ZS50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHQpO2lmKDA9PT10aGlzLnguY21wKHIpKXJldHVybiEwO2Zvcih2YXIgbj1lLmNsb25lKCksaT10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHQpOzspe2lmKG4uaWFkZCh0aGlzLmN1cnZlLm4pLG4uY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoci5yZWRJQWRkKGkpLDA9PT10aGlzLnguY21wKHIpKXJldHVybiEwfX0sYy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBKUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgSlBvaW50IHg6IFwiK3RoaXMueC50b1N0cmluZygxNiwyKStcIiB5OiBcIit0aGlzLnkudG9TdHJpbmcoMTYsMikrXCIgejogXCIrdGhpcy56LnRvU3RyaW5nKDE2LDIpK1wiPlwifSxjLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQpLGk9cigwKSxvPXIoMjYpLGE9cig2KTtmdW5jdGlvbiBzKGUpe28uY2FsbCh0aGlzLFwibW9udFwiLGUpLHRoaXMuYT1uZXcgbihlLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IG4oZS5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgbig0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyBuKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gZihlLHQscil7by5CYXNlUG9pbnQuY2FsbCh0aGlzLGUsXCJwcm9qZWN0aXZlXCIpLG51bGw9PT10JiZudWxsPT09cj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IG4odCwxNiksdGhpcy56PW5ldyBuKHIsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9aShzLG8pLGUuZXhwb3J0cz1zLHMucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUubm9ybWFsaXplKCkueCxyPXQucmVkU3FyKCksbj1yLnJlZE11bCh0KS5yZWRBZGQoci5yZWRNdWwodGhpcy5hKSkucmVkQWRkKHQpO3JldHVybiAwPT09bi5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKG4pfSxpKGYsby5CYXNlUG9pbnQpLHMucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucG9pbnQoYS50b0FycmF5KGUsdCksMSl9LHMucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBmKHRoaXMsZSx0KX0scy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gZi5mcm9tSlNPTih0aGlzLGUpfSxmLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxmLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoXCJiZVwiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxmLmZyb21KU09OPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBmKGUsdFswXSx0WzFdfHxlLm9uZSl9LGYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgUG9pbnQgeDogXCIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB6OiBcIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiPlwifSxmLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0sZi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy54LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLHQ9dGhpcy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLHI9ZS5yZWRTdWIodCksbj1lLnJlZE11bCh0KSxpPXIucmVkTXVsKHQucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChyKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KG4saSl9LGYucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZVwiKX0sZi5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMueC5yZWRBZGQodGhpcy56KSxuPXRoaXMueC5yZWRTdWIodGhpcy56KSxpPWUueC5yZWRBZGQoZS56KSxvPWUueC5yZWRTdWIoZS56KS5yZWRNdWwociksYT1pLnJlZE11bChuKSxzPXQuei5yZWRNdWwoby5yZWRBZGQoYSkucmVkU3FyKCkpLGY9dC54LnJlZE11bChvLnJlZElTdWIoYSkucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHMsZil9LGYucHJvdG90eXBlLm11bD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5jbG9uZSgpLHI9dGhpcyxuPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxpPVtdOzAhPT10LmNtcG4oMCk7dC5pdXNocm4oMSkpaS5wdXNoKHQuYW5kbG4oMSkpO2Zvcih2YXIgbz1pLmxlbmd0aC0xO28+PTA7by0tKTA9PT1pW29dPyhyPXIuZGlmZkFkZChuLHRoaXMpLG49bi5kYmwoKSk6KG49ci5kaWZmQWRkKG4sdGhpcykscj1yLmRibCgpKTtyZXR1cm4gbn0sZi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxmLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxmLnByb3RvdHlwZS5lcT1mdW5jdGlvbihlKXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcChlLmdldFgoKSl9LGYucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sZi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig2KSxpPXIoNCksbz1yKDApLGE9cigyNikscz1uLmFzc2VydDtmdW5jdGlvbiBmKGUpe3RoaXMudHdpc3RlZD0xIT0oMHxlLmEpLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYtMT09KDB8ZS5hKSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsYS5jYWxsKHRoaXMsXCJlZHdhcmRzXCIsZSksdGhpcy5hPW5ldyBpKGUuYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IGkoZS5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBpKGUuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLHMoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfGUuYyl9ZnVuY3Rpb24gdShlLHQscixuLG8pe2EuQmFzZVBvaW50LmNhbGwodGhpcyxlLFwicHJvamVjdGl2ZVwiKSxudWxsPT09dCYmbnVsbD09PXImJm51bGw9PT1uPyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVybyx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IGkodCwxNiksdGhpcy55PW5ldyBpKHIsMTYpLHRoaXMuej1uP25ldyBpKG4sMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD1vJiZuZXcgaShvLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQmJiF0aGlzLnQucmVkJiYodGhpcy50PXRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZSx0aGlzLmN1cnZlLmV4dGVuZGVkJiYhdGhpcy50JiYodGhpcy50PXRoaXMueC5yZWRNdWwodGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9dGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSkpKX1vKGYsYSksZS5leHBvcnRzPWYsZi5wcm90b3R5cGUuX211bEE9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubU9uZUE/ZS5yZWROZWcoKTp0aGlzLmEucmVkTXVsKGUpfSxmLnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbmVDP2U6dGhpcy5jLnJlZE11bChlKX0sZi5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiB0aGlzLnBvaW50KGUsdCxyLG4pfSxmLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKGUsdCl7KGU9bmV3IGkoZSwxNikpLnJlZHx8KGU9ZS50b1JlZCh0aGlzLnJlZCkpO3ZhciByPWUucmVkU3FyKCksbj10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKHIpKSxvPXRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChyKSksYT1uLnJlZE11bChvLnJlZEludm0oKSkscz1hLnJlZFNxcnQoKTtpZigwIT09cy5yZWRTcXIoKS5yZWRTdWIoYSkuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTt2YXIgZj1zLmZyb21SZWQoKS5pc09kZCgpO3JldHVybih0JiYhZnx8IXQmJmYpJiYocz1zLnJlZE5lZygpKSx0aGlzLnBvaW50KGUscyl9LGYucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oZSx0KXsoZT1uZXcgaShlLDE2KSkucmVkfHwoZT1lLnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9ZS5yZWRTcXIoKSxuPXIucmVkU3ViKHRoaXMuYzIpLG89ci5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksYT1uLnJlZE11bChvLnJlZEludm0oKSk7aWYoMD09PWEuY21wKHRoaXMuemVybykpe2lmKHQpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTtyZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8sZSl9dmFyIHM9YS5yZWRTcXJ0KCk7aWYoMCE9PXMucmVkU3FyKCkucmVkU3ViKGEpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7cmV0dXJuIHMuZnJvbVJlZCgpLmlzT2RkKCkhPT10JiYocz1zLnJlZE5lZygpKSx0aGlzLnBvaW50KHMsZSl9LGYucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKGUpe2lmKGUuaXNJbmZpbml0eSgpKXJldHVybiEwO2Uubm9ybWFsaXplKCk7dmFyIHQ9ZS54LnJlZFNxcigpLHI9ZS55LnJlZFNxcigpLG49dC5yZWRNdWwodGhpcy5hKS5yZWRBZGQociksaT10aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bCh0KS5yZWRNdWwocikpKTtyZXR1cm4gMD09PW4uY21wKGkpfSxvKHUsYS5CYXNlUG9pbnQpLGYucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIHUuZnJvbUpTT04odGhpcyxlKX0sZi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIG5ldyB1KHRoaXMsZSx0LHIsbil9LHUuZnJvbUpTT049ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IHUoZSx0WzBdLHRbMV0sdFsyXSl9LHUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgUG9pbnQgeDogXCIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB5OiBcIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHo6IFwiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCI+XCJ9LHUucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMueC5jbXBuKDApJiYoMD09PXRoaXMueS5jbXAodGhpcy56KXx8dGhpcy56T25lJiYwPT09dGhpcy55LmNtcCh0aGlzLmN1cnZlLmMpKX0sdS5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigpe3ZhciBlPXRoaXMueC5yZWRTcXIoKSx0PXRoaXMueS5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKTtyPXIucmVkSUFkZChyKTt2YXIgbj10aGlzLmN1cnZlLl9tdWxBKGUpLGk9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIoZSkucmVkSVN1Yih0KSxvPW4ucmVkQWRkKHQpLGE9by5yZWRTdWIocikscz1uLnJlZFN1Yih0KSxmPWkucmVkTXVsKGEpLHU9by5yZWRNdWwocyksYz1pLnJlZE11bChzKSxoPWEucmVkTXVsKG8pO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KGYsdSxoLGMpfSx1LnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciBlLHQscixuPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSxpPXRoaXMueC5yZWRTcXIoKSxvPXRoaXMueS5yZWRTcXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3ZhciBhPSh1PXRoaXMuY3VydmUuX211bEEoaSkpLnJlZEFkZChvKTtpZih0aGlzLnpPbmUpZT1uLnJlZFN1YihpKS5yZWRTdWIobykucmVkTXVsKGEucmVkU3ViKHRoaXMuY3VydmUudHdvKSksdD1hLnJlZE11bCh1LnJlZFN1YihvKSkscj1hLnJlZFNxcigpLnJlZFN1YihhKS5yZWRTdWIoYSk7ZWxzZXt2YXIgcz10aGlzLnoucmVkU3FyKCksZj1hLnJlZFN1YihzKS5yZWRJU3ViKHMpO2U9bi5yZWRTdWIoaSkucmVkSVN1YihvKS5yZWRNdWwoZiksdD1hLnJlZE11bCh1LnJlZFN1YihvKSkscj1hLnJlZE11bChmKX19ZWxzZXt2YXIgdT1pLnJlZEFkZChvKTtzPXRoaXMuY3VydmUuX211bEModGhpcy56KS5yZWRTcXIoKSxmPXUucmVkU3ViKHMpLnJlZFN1YihzKTtlPXRoaXMuY3VydmUuX211bEMobi5yZWRJU3ViKHUpKS5yZWRNdWwoZiksdD10aGlzLmN1cnZlLl9tdWxDKHUpLnJlZE11bChpLnJlZElTdWIobykpLHI9dS5yZWRNdWwoZil9cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoZSx0LHIpfSx1LnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0sdS5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKGUueS5yZWRTdWIoZS54KSkscj10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKGUueS5yZWRBZGQoZS54KSksbj10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bChlLnQpLGk9dGhpcy56LnJlZE11bChlLnoucmVkQWRkKGUueikpLG89ci5yZWRTdWIodCksYT1pLnJlZFN1YihuKSxzPWkucmVkQWRkKG4pLGY9ci5yZWRBZGQodCksdT1vLnJlZE11bChhKSxjPXMucmVkTXVsKGYpLGg9by5yZWRNdWwoZiksZD1hLnJlZE11bChzKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh1LGMsZCxoKX0sdS5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24oZSl7dmFyIHQscixuPXRoaXMuei5yZWRNdWwoZS56KSxpPW4ucmVkU3FyKCksbz10aGlzLngucmVkTXVsKGUueCksYT10aGlzLnkucmVkTXVsKGUueSkscz10aGlzLmN1cnZlLmQucmVkTXVsKG8pLnJlZE11bChhKSxmPWkucmVkU3ViKHMpLHU9aS5yZWRBZGQocyksYz10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKGUueC5yZWRBZGQoZS55KSkucmVkSVN1YihvKS5yZWRJU3ViKGEpLGg9bi5yZWRNdWwoZikucmVkTXVsKGMpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KHQ9bi5yZWRNdWwodSkucmVkTXVsKGEucmVkU3ViKHRoaXMuY3VydmUuX211bEEobykpKSxyPWYucmVkTXVsKHUpKToodD1uLnJlZE11bCh1KS5yZWRNdWwoYS5yZWRTdWIobykpLHI9dGhpcy5jdXJ2ZS5fbXVsQyhmKS5yZWRNdWwodSkpLHRoaXMuY3VydmUucG9pbnQoaCx0LHIpfSx1LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP2U6ZS5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZChlKTp0aGlzLl9wcm9qQWRkKGUpfSx1LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXMoZSk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxlKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsZSl9LHUucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyx0XSxbZSxyXSwyLCExKX0sdS5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyx0XSxbZSxyXSwyLCEwKX0sdS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciBlPXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKGUpLHRoaXMueT10aGlzLnkucmVkTXVsKGUpLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKGUpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LHUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0sdS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LHUucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSx1LnByb3RvdHlwZS5lcT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV8fDA9PT10aGlzLmdldFgoKS5jbXAoZS5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKGUuZ2V0WSgpKX0sdS5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKGUpe3ZhciB0PWUudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKHQpKXJldHVybiEwO2Zvcih2YXIgcj1lLmNsb25lKCksbj10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoci5pYWRkKHRoaXMuY3VydmUubiksci5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZih0LnJlZElBZGQobiksMD09PXRoaXMueC5jbXAodCkpcmV0dXJuITB9fSx1LnByb3RvdHlwZS50b1A9dS5wcm90b3R5cGUubm9ybWFsaXplLHUucHJvdG90eXBlLm1peGVkQWRkPXUucHJvdG90eXBlLmFkZH0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3Quc2hhMT1yKDE2MCksdC5zaGEyMjQ9cigxNjEpLHQuc2hhMjU2PXIoNzYpLHQuc2hhMzg0PXIoMTYyKSx0LnNoYTUxMj1yKDc3KX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoOCksaT1yKDIxKSxvPXIoNzUpLGE9bi5yb3RsMzIscz1uLnN1bTMyLGY9bi5zdW0zMl81LHU9by5mdF8xLGM9aS5CbG9ja0hhc2gsaD1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07ZnVuY3Rpb24gZCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGQpKXJldHVybiBuZXcgZDtjLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5XPW5ldyBBcnJheSg4MCl9bi5pbmhlcml0cyhkLGMpLGUuZXhwb3J0cz1kLGQuYmxvY2tTaXplPTUxMixkLm91dFNpemU9MTYwLGQuaG1hY1N0cmVuZ3RoPTgwLGQucGFkTGVuZ3RoPTY0LGQucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dGhpcy5XLG49MDtuPDE2O24rKylyW25dPWVbdCtuXTtmb3IoO248ci5sZW5ndGg7bisrKXJbbl09YShyW24tM11ecltuLThdXnJbbi0xNF1ecltuLTE2XSwxKTt2YXIgaT10aGlzLmhbMF0sbz10aGlzLmhbMV0sYz10aGlzLmhbMl0sZD10aGlzLmhbM10sbD10aGlzLmhbNF07Zm9yKG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIHA9fn4obi8yMCksYj1mKGEoaSw1KSx1KHAsbyxjLGQpLGwscltuXSxoW3BdKTtsPWQsZD1jLGM9YShvLDMwKSxvPWksaT1ifXRoaXMuaFswXT1zKHRoaXMuaFswXSxpKSx0aGlzLmhbMV09cyh0aGlzLmhbMV0sbyksdGhpcy5oWzJdPXModGhpcy5oWzJdLGMpLHRoaXMuaFszXT1zKHRoaXMuaFszXSxkKSx0aGlzLmhbNF09cyh0aGlzLmhbNF0sbCl9LGQucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuXCJoZXhcIj09PWU/bi50b0hleDMyKHRoaXMuaCxcImJpZ1wiKTpuLnNwbGl0MzIodGhpcy5oLFwiYmlnXCIpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoOCksaT1yKDc2KTtmdW5jdGlvbiBvKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbykpcmV0dXJuIG5ldyBvO2kuY2FsbCh0aGlzKSx0aGlzLmg9WzMyMzgzNzEwMzIsOTE0MTUwNjYzLDgxMjcwMjk5OSw0MTQ0OTEyNjk3LDQyOTA3NzU4NTcsMTc1MDYwMzAyNSwxNjk0MDc2ODM5LDMyMDQwNzU0MjhdfW4uaW5oZXJpdHMobyxpKSxlLmV4cG9ydHM9byxvLmJsb2NrU2l6ZT01MTIsby5vdXRTaXplPTIyNCxvLmhtYWNTdHJlbmd0aD0xOTIsby5wYWRMZW5ndGg9NjQsby5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihlKXtyZXR1cm5cImhleFwiPT09ZT9uLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksXCJiaWdcIik6bi5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLFwiYmlnXCIpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoOCksaT1yKDc3KTtmdW5jdGlvbiBvKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbykpcmV0dXJuIG5ldyBvO2kuY2FsbCh0aGlzKSx0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1LDM2NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdfW4uaW5oZXJpdHMobyxpKSxlLmV4cG9ydHM9byxvLmJsb2NrU2l6ZT0xMDI0LG8ub3V0U2l6ZT0zODQsby5obWFjU3RyZW5ndGg9MTkyLG8ucGFkTGVuZ3RoPTEyOCxvLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGUpe3JldHVyblwiaGV4XCI9PT1lP24udG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksXCJiaWdcIik6bi5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSxcImJpZ1wiKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDgpLGk9cigyMSksbz1uLnJvdGwzMixhPW4uc3VtMzIscz1uLnN1bTMyXzMsZj1uLnN1bTMyXzQsdT1pLkJsb2NrSGFzaDtmdW5jdGlvbiBjKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjO3UuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLmVuZGlhbj1cImxpdHRsZVwifWZ1bmN0aW9uIGgoZSx0LHIsbil7cmV0dXJuIGU8PTE1P3Recl5uOmU8PTMxP3Qmcnx+dCZuOmU8PTQ3Pyh0fH5yKV5uOmU8PTYzP3QmbnxyJn5uOnReKHJ8fm4pfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGU8PTE1PzA6ZTw9MzE/MTUxODUwMDI0OTplPD00Nz8xODU5Nzc1MzkzOmU8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOH1mdW5jdGlvbiBsKGUpe3JldHVybiBlPD0xNT8xMzUyODI5OTI2OmU8PTMxPzE1NDg2MDM2ODQ6ZTw9NDc/MTgzNjA3MjY5MTplPD02Mz8yMDUzOTk0MjE3OjB9bi5pbmhlcml0cyhjLHUpLHQucmlwZW1kMTYwPWMsYy5ibG9ja1NpemU9NTEyLGMub3V0U2l6ZT0xNjAsYy5obWFjU3RyZW5ndGg9MTkyLGMucGFkTGVuZ3RoPTY0LGMucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dGhpcy5oWzBdLG49dGhpcy5oWzFdLGk9dGhpcy5oWzJdLHU9dGhpcy5oWzNdLGM9dGhpcy5oWzRdLHY9cixtPW4sdz1pLF89dSxFPWMsUz0wO1M8ODA7UysrKXt2YXIgQT1hKG8oZihyLGgoUyxuLGksdSksZVtwW1NdK3RdLGQoUykpLHlbU10pLGMpO3I9YyxjPXUsdT1vKGksMTApLGk9bixuPUEsQT1hKG8oZih2LGgoNzktUyxtLHcsXyksZVtiW1NdK3RdLGwoUykpLGdbU10pLEUpLHY9RSxFPV8sXz1vKHcsMTApLHc9bSxtPUF9QT1zKHRoaXMuaFsxXSxpLF8pLHRoaXMuaFsxXT1zKHRoaXMuaFsyXSx1LEUpLHRoaXMuaFsyXT1zKHRoaXMuaFszXSxjLHYpLHRoaXMuaFszXT1zKHRoaXMuaFs0XSxyLG0pLHRoaXMuaFs0XT1zKHRoaXMuaFswXSxuLHcpLHRoaXMuaFswXT1BfSxjLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGUpe3JldHVyblwiaGV4XCI9PT1lP24udG9IZXgzMih0aGlzLmgsXCJsaXR0bGVcIik6bi5zcGxpdDMyKHRoaXMuaCxcImxpdHRsZVwiKX07dmFyIHA9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sYj1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSx5PVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxnPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoOCksaT1yKDEyKTtmdW5jdGlvbiBvKGUsdCxyKXtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4gbmV3IG8oZSx0LHIpO3RoaXMuSGFzaD1lLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLzgsdGhpcy5vdXRTaXplPWUub3V0U2l6ZS84LHRoaXMuaW5uZXI9bnVsbCx0aGlzLm91dGVyPW51bGwsdGhpcy5faW5pdChuLnRvQXJyYXkodCxyKSl9ZS5leHBvcnRzPW8sby5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZSl7ZS5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJihlPShuZXcgdGhpcy5IYXNoKS51cGRhdGUoZSkuZGlnZXN0KCkpLGkoZS5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIHQ9ZS5sZW5ndGg7dDx0aGlzLmJsb2NrU2l6ZTt0KyspZS5wdXNoKDApO2Zvcih0PTA7dDxlLmxlbmd0aDt0KyspZVt0XV49NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShlKSx0PTA7dDxlLmxlbmd0aDt0KyspZVt0XV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShlKX0sby5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUsdCksdGhpc30sby5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdChlKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbXCJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhXCIsXCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxXCJdLFtcIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDhcIixcIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWZcIl0sW1wiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOVwiLFwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NVwiXSxbXCIzNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQwXCIsXCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTlcIl0sW1wiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwY1wiLFwiNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNlwiXSxbXCI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhXCIsXCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmXCJdLFtcImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmFcIixcIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTlcIl0sW1wiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMFwiLFwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOVwiXSxbXCJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkXCIsXCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkXCJdLFtcImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmRcIixcImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODhcIl0sW1wiZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMVwiLFwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZFwiXSxbXCI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwXCIsXCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4XCJdLFtcIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDdcIixcIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmFcIl0sW1wiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MlwiLFwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1M1wiXSxbXCI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTdcIixcIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjBcIl0sW1wiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZFwiLFwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMFwiXSxbXCI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzXCIsXCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2XCJdLFtcIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYVwiLFwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OVwiXSxbXCI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4XCIsXCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3XCJdLFtcImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmRcIixcIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGFcIl0sW1wiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNVwiLFwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZFwiXSxbXCIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0XCIsXCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyXCJdLFtcIjRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2NcIixcIjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTZcIl0sW1wiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNlwiLFwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZlwiXSxbXCI3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5XCIsXCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxXCJdLFtcImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTFcIixcIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzNcIl0sW1wiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YlwiLFwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZlwiXSxbXCJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzXCIsXCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3XCJdLFtcImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWRcIixcImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzhcIl0sW1wiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MFwiLFwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMVwiXSxbXCI5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0XCIsXCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTBcIl0sW1wiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYVwiLFwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MlwiXSxbXCJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExXCIsXCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjXCJdLFtcIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWVcIixcImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGJcIl0sW1wiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MVwiLFwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MVwiXSxbXCJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmXCIsXCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDVcIl0sW1wiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOFwiLFwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMFwiXSxbXCIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkXCIsXCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0XCJdLFtcIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTZcIixcIjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkXCJdLFtcIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2RcIixcImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWRcIl0sW1wiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNVwiLFwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOFwiXSxbXCJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2XCIsXCI0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4XCJdLFtcIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzFcIixcIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWNcIl0sW1wiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjXCIsXCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmXCJdLFtcIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTFcIixcIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjJcIl0sW1wiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZVwiLFwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwN1wiXSxbXCI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxXCIsXCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjXCJdLFtcImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjNcIixcImJlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2RcIl0sW1wiZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZlwiLFwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNFwiXSxbXCIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5XCIsXCJhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkXCJdLFtcIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmVcIixcImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDBcIl0sW1wiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOVwiLFwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMVwiXSxbXCJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyXCIsXCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxXCJdLFtcImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTNcIixcIjdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGNcIl0sW1wiMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3Y1wiLFwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3M1wiXSxbXCI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhXCIsXCIyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkXCJdLFtcImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTFcIixcImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDVcIl0sW1wiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3M1wiLFwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OVwiXSxbXCI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4XCIsXCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlXCJdLFtcIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmJcIixcIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjdcIl0sW1wiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NlwiLFwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxXCJdLFtcIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWFcIixcIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODJcIl0sW1wiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwXCIsXCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1XCJdLFtcImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODdcIixcIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzNcIl0sW1wiZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZVwiLFwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MlwiXV19LG5hZjp7d25kOjcscG9pbnRzOltbXCJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5XCIsXCIzODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyXCJdLFtcIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTRcIixcImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDZcIl0sW1wiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliY1wiLFwiNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYVwiXSxbXCJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlXCIsXCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3XCJdLFtcIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2JcIixcImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWJcIl0sW1wiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOFwiLFwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxXCJdLFtcImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGVcIixcIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNThcIl0sW1wiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNFwiLFwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3N1wiXSxbXCIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjXCIsXCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhXCJdLFtcIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDVcIixcIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGNcIl0sW1wiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZlwiLFwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3XCJdLFtcIjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTRcIixcIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDJcIl0sW1wiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOVwiLFwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NVwiXSxbXCJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiXCIsXCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyXCJdLFtcIjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjRcIixcImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODJcIl0sW1wiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNVwiLFwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NlwiXSxbXCI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5XCIsXCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDlcIl0sW1wiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZFwiLFwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZlwiXSxbXCI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmXCIsXCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhXCJdLFtcIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmJcIixcImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmN1wiXSxbXCJkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5XCIsXCJlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzXCJdLFtcIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2M1wiLFwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YVwiXSxbXCI3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0XCIsXCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2XCJdLFtcImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzBcIixcImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzdcIl0sW1wiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YlwiLFwiNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZVwiXSxbXCJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3XCIsXCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2XCJdLFtcImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDFcIixcImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzZcIl0sW1wiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMFwiLFwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MFwiXSxbXCI3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1XCIsXCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjFcIl0sW1wiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOFwiLFwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzXCJdLFtcImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZThcIixcIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjVcIl0sW1wiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYlwiLFwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YlwiXSxbXCJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmXCIsXCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3XCJdLFtcIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDNcIixcImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjhcIl0sW1wiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYVwiLFwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YVwiXSxbXCJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1XCIsXCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2XCJdLFtcIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWFcIixcIjc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTZcIl0sW1wiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZVwiLFwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZVwiXSxbXCJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4XCIsXCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkXCJdLFtcIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmNcIixcIjMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTJcIl0sW1wiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOVwiLFwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZVwiXSxbXCI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiXCIsXCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3XCJdLFtcIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2FcIixcImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTFcIl0sW1wiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZlwiLFwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNFwiXSxbXCIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwXCIsXCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1XCJdLFtcIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDRcIixcImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWRcIl0sW1wiMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1Y1wiLFwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZFwiXSxbXCJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwXCIsXCJlZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5XCJdLFtcImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODBcIixcImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNlwiXSxbXCIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzXCIsXCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0XCJdLFtcIjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGZcIixcIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZVwiXSxbXCJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzXCIsXCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxXCJdLFtcImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDhcIixcImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2JcIl0sW1wiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZlwiLFwiNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MVwiXSxbXCI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1XCIsXCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2XCJdLFtcImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDZcIixcIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWVcIl0sW1wiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNVwiLFwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZFwiXSxbXCJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5XCIsXCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjXCJdLFtcIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MVwiLFwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNFwiXSxbXCI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1XCIsXCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjXCJdLFtcImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjVcIixcIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmJcIl0sW1wiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5N1wiLFwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzXCJdLFtcIjg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODFcIixcIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NFwiXSxbXCI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1XCIsXCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1XCJdLFtcIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjZcIixcImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmNcIl0sW1wiMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2XCIsXCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0XCJdLFtcIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGVcIixcIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGVcIl0sW1wiMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NFwiLFwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2XCJdLFtcIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzFcIixcIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTFcIl0sW1wiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MVwiLFwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiXCJdLFtcImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTJcIixcImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjJcIl0sW1wiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1XCIsXCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNjXCJdLFtcImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2JcIixcIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTNcIl0sW1wiZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNFwiLFwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZFwiXSxbXCJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmXCIsXCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwXCJdLFtcImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5XCIsXCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0XCJdLFtcIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDZcIixcImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTZcIl0sW1wiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NFwiLFwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNFwiXSxbXCIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhXCIsXCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3XCJdLFtcImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzBcIixcImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTNcIl0sW1wiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5N1wiLFwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NlwiXSxbXCJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTNcIixcImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzhcIl0sW1wiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZlwiLFwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmXCJdLFtcIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzhcIixcIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDhcIl0sW1wiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YVwiLFwiNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YVwiXSxbXCJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExXCIsXCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0XCJdLFtcIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDJcIixcIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzdcIl0sW1wiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYVwiLFwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmN1wiXSxbXCJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2XCIsXCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkXCJdLFtcImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODZcIixcIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmFcIl0sW1wiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZVwiLFwiNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NFwiXSxbXCI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0XCIsXCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3XCJdLFtcImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGFcIixcImVjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTdcIl0sW1wiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OVwiLFwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMFwiXSxbXCJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmXCIsXCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1XCJdLFtcImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGNcIixcIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2VcIl0sW1wiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MlwiLFwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMVwiXSxbXCJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhXCIsXCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyXCJdLFtcImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODBcIixcIjVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjNcIl0sW1wiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZFwiLFwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOFwiXSxbXCI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExXCIsXCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4XCJdLFtcIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjNcIixcImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NVwiXSxbXCJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyXCIsXCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkXCJdLFtcIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTNcIixcImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWNcIl0sW1wiNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMFwiLFwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwXCJdLFtcIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNThcIixcImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2NcIl0sW1wiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmN1wiLFwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNFwiXSxbXCI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4XCIsXCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmXCJdLFtcIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2VcIixcIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDlcIl0sW1wiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZFwiLFwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2XCJdLFtcIjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmJcIixcIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTVcIl0sW1wiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZlwiLFwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4N1wiXSxbXCIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2XCIsXCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiXCJdLFtcImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTdcIixcIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmNcIl0sW1wiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YVwiLFwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3Y1wiXSxbXCJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjXCIsXCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmXCJdLFtcImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTJcIixcIjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2FcIl0sW1wiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYlwiLFwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NlwiXSxbXCI0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1XCIsXCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmXCJdLFtcIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTdcIixcIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDNcIl0sW1wiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOVwiLFwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOFwiXSxbXCIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzXCIsXCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4XCJdLFtcIjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTdcIixcIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3M1wiXSxbXCIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2XCIsXCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzXCJdLFtcIjc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYThcIixcIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDhcIl0sW1wiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMVwiLFwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMVwiXSxbXCIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwXCIsXCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5XCJdXX19fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0KSxpPXIoMTY3KSxvPXIoNiksYT1yKDM3KSxzPXIoNzMpLGY9by5hc3NlcnQsdT1yKDE2OCksYz1yKDE2OSk7ZnVuY3Rpb24gaChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBoKSlyZXR1cm4gbmV3IGgoZSk7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihmKGEuaGFzT3duUHJvcGVydHkoZSksXCJVbmtub3duIGN1cnZlIFwiK2UpLGU9YVtlXSksZSBpbnN0YW5jZW9mIGEuUHJlc2V0Q3VydmUmJihlPXtjdXJ2ZTplfSksdGhpcy5jdXJ2ZT1lLmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9ZS5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKGUuY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9ZS5oYXNofHxlLmN1cnZlLmhhc2h9ZS5leHBvcnRzPWgsaC5wcm90b3R5cGUua2V5UGFpcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHUodGhpcyxlKX0saC5wcm90b3R5cGUua2V5RnJvbVByaXZhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdS5mcm9tUHJpdmF0ZSh0aGlzLGUsdCl9LGgucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdS5mcm9tUHVibGljKHRoaXMsZSx0KX0saC5wcm90b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbihlKXtlfHwoZT17fSk7Zm9yKHZhciB0PW5ldyBpKHtoYXNoOnRoaXMuaGFzaCxwZXJzOmUucGVycyxwZXJzRW5jOmUucGVyc0VuY3x8XCJ1dGY4XCIsZW50cm9weTplLmVudHJvcHl8fHModGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksZW50cm9weUVuYzplLmVudHJvcHkmJmUuZW50cm9weUVuY3x8XCJ1dGY4XCIsbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLHI9dGhpcy5uLmJ5dGVMZW5ndGgoKSxvPXRoaXMubi5zdWIobmV3IG4oMikpOzspe3ZhciBhPW5ldyBuKHQuZ2VuZXJhdGUocikpO2lmKCEoYS5jbXAobyk+MCkpcmV0dXJuIGEuaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShhKX19LGgucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihlLHQpe3ZhciByPTgqZS5ieXRlTGVuZ3RoKCktdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiByPjAmJihlPWUudXNocm4ocikpLCF0JiZlLmNtcCh0aGlzLm4pPj0wP2Uuc3ViKHRoaXMubik6ZX0saC5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihlLHQscixvKXtcIm9iamVjdFwiPT10eXBlb2YgciYmKG89cixyPW51bGwpLG98fChvPXt9KSx0PXRoaXMua2V5RnJvbVByaXZhdGUodCxyKSxlPXRoaXMuX3RydW5jYXRlVG9OKG5ldyBuKGUsMTYpKTtmb3IodmFyIGE9dGhpcy5uLmJ5dGVMZW5ndGgoKSxzPXQuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoXCJiZVwiLGEpLGY9ZS50b0FycmF5KFwiYmVcIixhKSx1PW5ldyBpKHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5OnMsbm9uY2U6ZixwZXJzOm8ucGVycyxwZXJzRW5jOm8ucGVyc0VuY3x8XCJ1dGY4XCJ9KSxoPXRoaXMubi5zdWIobmV3IG4oMSkpLGQ9MDs7ZCsrKXt2YXIgbD1vLms/by5rKGQpOm5ldyBuKHUuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKCEoKGw9dGhpcy5fdHJ1bmNhdGVUb04obCwhMCkpLmNtcG4oMSk8PTB8fGwuY21wKGgpPj0wKSl7dmFyIHA9dGhpcy5nLm11bChsKTtpZighcC5pc0luZmluaXR5KCkpe3ZhciBiPXAuZ2V0WCgpLHk9Yi51bW9kKHRoaXMubik7aWYoMCE9PXkuY21wbigwKSl7dmFyIGc9bC5pbnZtKHRoaXMubikubXVsKHkubXVsKHQuZ2V0UHJpdmF0ZSgpKS5pYWRkKGUpKTtpZigwIT09KGc9Zy51bW9kKHRoaXMubikpLmNtcG4oMCkpe3ZhciB2PShwLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1iLmNtcCh5KT8yOjApO3JldHVybiBvLmNhbm9uaWNhbCYmZy5jbXAodGhpcy5uaCk+MCYmKGc9dGhpcy5uLnN1YihnKSx2Xj0xKSxuZXcgYyh7cjp5LHM6ZyxyZWNvdmVyeVBhcmFtOnZ9KX19fX19fSxoLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oZSx0LHIsaSl7ZT10aGlzLl90cnVuY2F0ZVRvTihuZXcgbihlLDE2KSkscj10aGlzLmtleUZyb21QdWJsaWMocixpKTt2YXIgbz0odD1uZXcgYyh0LFwiaGV4XCIpKS5yLGE9dC5zO2lmKG8uY21wbigxKTwwfHxvLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO2lmKGEuY21wbigxKTwwfHxhLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBzLGY9YS5pbnZtKHRoaXMubiksdT1mLm11bChlKS51bW9kKHRoaXMubiksaD1mLm11bChvKS51bW9kKHRoaXMubik7cmV0dXJuIHRoaXMuY3VydmUuX21heHdlbGxUcmljaz8hKHM9dGhpcy5nLmptdWxBZGQodSxyLmdldFB1YmxpYygpLGgpKS5pc0luZmluaXR5KCkmJnMuZXFYVG9QKG8pOiEocz10aGlzLmcubXVsQWRkKHUsci5nZXRQdWJsaWMoKSxoKSkuaXNJbmZpbml0eSgpJiYwPT09cy5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChvKX0saC5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihlLHQscixpKXtmKCgzJnIpPT09cixcIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHNcIiksdD1uZXcgYyh0LGkpO3ZhciBvPXRoaXMubixhPW5ldyBuKGUpLHM9dC5yLHU9dC5zLGg9MSZyLGQ9cj4+MTtpZihzLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmZCl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGVcIik7cz1kP3RoaXMuY3VydmUucG9pbnRGcm9tWChzLmFkZCh0aGlzLmN1cnZlLm4pLGgpOnRoaXMuY3VydmUucG9pbnRGcm9tWChzLGgpO3ZhciBsPXQuci5pbnZtKG8pLHA9by5zdWIoYSkubXVsKGwpLnVtb2QobyksYj11Lm11bChsKS51bW9kKG8pO3JldHVybiB0aGlzLmcubXVsQWRkKHAscyxiKX0saC5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJhbT1mdW5jdGlvbihlLHQscixuKXtpZihudWxsIT09KHQ9bmV3IGModCxuKSkucmVjb3ZlcnlQYXJhbSlyZXR1cm4gdC5yZWNvdmVyeVBhcmFtO2Zvcih2YXIgaT0wO2k8NDtpKyspe3ZhciBvO3RyeXtvPXRoaXMucmVjb3ZlclB1YktleShlLHQsaSl9Y2F0Y2goZSl7Y29udGludWV9aWYoby5lcShyKSlyZXR1cm4gaX10aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3JcIil9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigzOCksaT1yKDcyKSxvPXIoMTIpO2Z1bmN0aW9uIGEoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgYSkpcmV0dXJuIG5ldyBhKGUpO3RoaXMuaGFzaD1lLmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhZS5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT1lLm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgsdGhpcy5fcmVzZWVkPW51bGwsdGhpcy5yZXNlZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciB0PWkudG9BcnJheShlLmVudHJvcHksZS5lbnRyb3B5RW5jfHxcImhleFwiKSxyPWkudG9BcnJheShlLm5vbmNlLGUubm9uY2VFbmN8fFwiaGV4XCIpLG49aS50b0FycmF5KGUucGVycyxlLnBlcnNFbmN8fFwiaGV4XCIpO28odC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LFwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiBcIit0aGlzLm1pbkVudHJvcHkrXCIgYml0c1wiKSx0aGlzLl9pbml0KHQscixuKX1lLmV4cG9ydHM9YSxhLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihlLHQscil7dmFyIG49ZS5jb25jYXQodCkuY29uY2F0KHIpO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIGk9MDtpPHRoaXMuVi5sZW5ndGg7aSsrKXRoaXMuS1tpXT0wLHRoaXMuVltpXT0xO3RoaXMuX3VwZGF0ZShuKSx0aGlzLl9yZXNlZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0sYS5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4uaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sYS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFswXSk7ZSYmKHQ9dC51cGRhdGUoZSkpLHRoaXMuSz10LmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksZSYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFsxXSkudXBkYXRlKGUpLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkpfSxhLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24oZSx0LHIsbil7XCJzdHJpbmdcIiE9dHlwZW9mIHQmJihuPXIscj10LHQ9bnVsbCksZT1pLnRvQXJyYXkoZSx0KSxyPWkudG9BcnJheShyLG4pLG8oZS5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LFwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiBcIit0aGlzLm1pbkVudHJvcHkrXCIgYml0c1wiKSx0aGlzLl91cGRhdGUoZS5jb25jYXQocnx8W10pKSx0aGlzLl9yZXNlZWQ9MX0sYS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodGhpcy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKFwiUmVzZWVkIGlzIHJlcXVpcmVkXCIpO1wic3RyaW5nXCIhPXR5cGVvZiB0JiYobj1yLHI9dCx0PW51bGwpLHImJihyPWkudG9BcnJheShyLG58fFwiaGV4XCIpLHRoaXMuX3VwZGF0ZShyKSk7Zm9yKHZhciBvPVtdO28ubGVuZ3RoPGU7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksbz1vLmNvbmNhdCh0aGlzLlYpO3ZhciBhPW8uc2xpY2UoMCxlKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHIpLHRoaXMuX3Jlc2VlZCsrLGkuZW5jb2RlKGEsdCl9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0KSxpPXIoNikuYXNzZXJ0O2Z1bmN0aW9uIG8oZSx0KXt0aGlzLmVjPWUsdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCx0LnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUodC5wcml2LHQucHJpdkVuYyksdC5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyh0LnB1Yix0LnB1YkVuYyl9ZS5leHBvcnRzPW8sby5mcm9tUHVibGljPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdCBpbnN0YW5jZW9mIG8/dDpuZXcgbyhlLHtwdWI6dCxwdWJFbmM6cn0pfSxvLmZyb21Qcml2YXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdCBpbnN0YW5jZW9mIG8/dDpuZXcgbyhlLHtwcml2OnQscHJpdkVuYzpyfSl9LG8ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gZS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246XCJJbnZhbGlkIHB1YmxpYyBrZXlcIn06ZS52YWxpZGF0ZSgpP2UubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOlwiUHVibGljIGtleSAqIE4gIT0gT1wifTp7cmVzdWx0OiExLHJlYXNvbjpcIlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnRcIn19LG8ucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihlLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYodD1lLGU9bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLHQ/dGhpcy5wdWIuZW5jb2RlKHQsZSk6dGhpcy5wdWJ9LG8ucHJvdG90eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJoZXhcIj09PWU/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sby5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLnByaXY9bmV3IG4oZSx0fHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubil9LG8ucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24oZSx0KXtpZihlLnh8fGUueSlyZXR1cm5cIm1vbnRcIj09PXRoaXMuZWMuY3VydmUudHlwZT9pKGUueCxcIk5lZWQgeCBjb29yZGluYXRlXCIpOlwic2hvcnRcIiE9PXRoaXMuZWMuY3VydmUudHlwZSYmXCJlZHdhcmRzXCIhPT10aGlzLmVjLmN1cnZlLnR5cGV8fGkoZS54JiZlLnksXCJOZWVkIGJvdGggeCBhbmQgeSBjb29yZGluYXRlXCIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChlLngsZS55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChlLHQpfSxvLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxvLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5lYy5zaWduKGUsdGhpcyx0LHIpfSxvLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYy52ZXJpZnkoZSx0LHRoaXMpfSxvLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuXCI8S2V5IHByaXY6IFwiKyh0aGlzLnByaXYmJnRoaXMucHJpdi50b1N0cmluZygxNiwyKSkrXCIgcHViOiBcIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrXCIgPlwifX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNCksaT1yKDYpLG89aS5hc3NlcnQ7ZnVuY3Rpb24gYShlLHQpe2lmKGUgaW5zdGFuY2VvZiBhKXJldHVybiBlO3RoaXMuX2ltcG9ydERFUihlLHQpfHwobyhlLnImJmUucyxcIlNpZ25hdHVyZSB3aXRob3V0IHIgb3Igc1wiKSx0aGlzLnI9bmV3IG4oZS5yLDE2KSx0aGlzLnM9bmV3IG4oZS5zLDE2KSx2b2lkIDA9PT1lLnJlY292ZXJ5UGFyYW0/dGhpcy5yZWNvdmVyeVBhcmFtPW51bGw6dGhpcy5yZWNvdmVyeVBhcmFtPWUucmVjb3ZlcnlQYXJhbSl9ZnVuY3Rpb24gcygpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBmKGUsdCl7dmFyIHI9ZVt0LnBsYWNlKytdO2lmKCEoMTI4JnIpKXJldHVybiByO3ZhciBuPTE1JnI7aWYoMD09PW58fG4+NClyZXR1cm4hMTtmb3IodmFyIGk9MCxvPTAsYT10LnBsYWNlO288bjtvKyssYSsrKWk8PD04LGl8PWVbYV0saT4+Pj0wO3JldHVybiEoaTw9MTI3KSYmKHQucGxhY2U9YSxpKX1mdW5jdGlvbiB1KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGgtMTshZVt0XSYmISgxMjgmZVt0KzFdKSYmdDxyOyl0Kys7cmV0dXJuIDA9PT10P2U6ZS5zbGljZSh0KX1mdW5jdGlvbiBjKGUsdCl7aWYodDwxMjgpZS5wdXNoKHQpO2Vsc2V7dmFyIHI9MSsoTWF0aC5sb2codCkvTWF0aC5MTjI+Pj4zKTtmb3IoZS5wdXNoKDEyOHxyKTstLXI7KWUucHVzaCh0Pj4+KHI8PDMpJjI1NSk7ZS5wdXNoKHQpfX1lLmV4cG9ydHM9YSxhLnByb3RvdHlwZS5faW1wb3J0REVSPWZ1bmN0aW9uKGUsdCl7ZT1pLnRvQXJyYXkoZSx0KTt2YXIgcj1uZXcgcztpZig0OCE9PWVbci5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgbz1mKGUscik7aWYoITE9PT1vKXJldHVybiExO2lmKG8rci5wbGFjZSE9PWUubGVuZ3RoKXJldHVybiExO2lmKDIhPT1lW3IucGxhY2UrK10pcmV0dXJuITE7dmFyIGE9ZihlLHIpO2lmKCExPT09YSlyZXR1cm4hMTt2YXIgdT1lLnNsaWNlKHIucGxhY2UsYStyLnBsYWNlKTtpZihyLnBsYWNlKz1hLDIhPT1lW3IucGxhY2UrK10pcmV0dXJuITE7dmFyIGM9ZihlLHIpO2lmKCExPT09YylyZXR1cm4hMTtpZihlLmxlbmd0aCE9PWMrci5wbGFjZSlyZXR1cm4hMTt2YXIgaD1lLnNsaWNlKHIucGxhY2UsYytyLnBsYWNlKTtpZigwPT09dVswXSl7aWYoISgxMjgmdVsxXSkpcmV0dXJuITE7dT11LnNsaWNlKDEpfWlmKDA9PT1oWzBdKXtpZighKDEyOCZoWzFdKSlyZXR1cm4hMTtoPWguc2xpY2UoMSl9cmV0dXJuIHRoaXMucj1uZXcgbih1KSx0aGlzLnM9bmV3IG4oaCksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LGEucHJvdG90eXBlLnRvREVSPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuci50b0FycmF5KCkscj10aGlzLnMudG9BcnJheSgpO2ZvcigxMjgmdFswXSYmKHQ9WzBdLmNvbmNhdCh0KSksMTI4JnJbMF0mJihyPVswXS5jb25jYXQocikpLHQ9dSh0KSxyPXUocik7IShyWzBdfHwxMjgmclsxXSk7KXI9ci5zbGljZSgxKTt2YXIgbj1bMl07YyhuLHQubGVuZ3RoKSwobj1uLmNvbmNhdCh0KSkucHVzaCgyKSxjKG4sci5sZW5ndGgpO3ZhciBvPW4uY29uY2F0KHIpLGE9WzQ4XTtyZXR1cm4gYyhhLG8ubGVuZ3RoKSxhPWEuY29uY2F0KG8pLGkuZW5jb2RlKGEsZSl9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigzOCksaT1yKDM3KSxvPXIoNiksYT1vLmFzc2VydCxzPW8ucGFyc2VCeXRlcyxmPXIoMTcxKSx1PXIoMTcyKTtmdW5jdGlvbiBjKGUpe2lmKGEoXCJlZDI1NTE5XCI9PT1lLFwib25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhclwiKSwhKHRoaXMgaW5zdGFuY2VvZiBjKSlyZXR1cm4gbmV3IGMoZSk7ZT1pW2VdLmN1cnZlO3RoaXMuY3VydmU9ZSx0aGlzLmc9ZS5nLHRoaXMuZy5wcmVjb21wdXRlKGUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLnBvaW50Q2xhc3M9ZS5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWlsKGUubi5iaXRMZW5ndGgoKS84KSx0aGlzLmhhc2g9bi5zaGE1MTJ9ZS5leHBvcnRzPWMsYy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihlLHQpe2U9cyhlKTt2YXIgcj10aGlzLmtleUZyb21TZWNyZXQodCksbj10aGlzLmhhc2hJbnQoci5tZXNzYWdlUHJlZml4KCksZSksaT10aGlzLmcubXVsKG4pLG89dGhpcy5lbmNvZGVQb2ludChpKSxhPXRoaXMuaGFzaEludChvLHIucHViQnl0ZXMoKSxlKS5tdWwoci5wcml2KCkpLGY9bi5hZGQoYSkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6aSxTOmYsUmVuY29kZWQ6b30pfSxjLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oZSx0LHIpe2U9cyhlKSx0PXRoaXMubWFrZVNpZ25hdHVyZSh0KTt2YXIgbj10aGlzLmtleUZyb21QdWJsaWMociksaT10aGlzLmhhc2hJbnQodC5SZW5jb2RlZCgpLG4ucHViQnl0ZXMoKSxlKSxvPXRoaXMuZy5tdWwodC5TKCkpO3JldHVybiB0LlIoKS5hZGQobi5wdWIoKS5tdWwoaSkpLmVxKG8pfSxjLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuaGFzaCgpLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWUudXBkYXRlKGFyZ3VtZW50c1t0XSk7cmV0dXJuIG8uaW50RnJvbUxFKGUuZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sYy5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihlKXtyZXR1cm4gZi5mcm9tUHVibGljKHRoaXMsZSl9LGMucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGYuZnJvbVNlY3JldCh0aGlzLGUpfSxjLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdT9lOm5ldyB1KHRoaXMsZSl9LGMucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0WSgpLnRvQXJyYXkoXCJsZVwiLHRoaXMuZW5jb2RpbmdMZW5ndGgpO3JldHVybiB0W3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PWUuZ2V0WCgpLmlzT2RkKCk/MTI4OjAsdH0sYy5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9KGU9by5wYXJzZUJ5dGVzKGUpKS5sZW5ndGgtMSxyPWUuc2xpY2UoMCx0KS5jb25jYXQoLTEyOSZlW3RdKSxuPTAhPSgxMjgmZVt0XSksaT1vLmludEZyb21MRShyKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKGksbil9LGMucHJvdG90eXBlLmVuY29kZUludD1mdW5jdGlvbihlKXtyZXR1cm4gZS50b0FycmF5KFwibGVcIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sYy5wcm90b3R5cGUuZGVjb2RlSW50PWZ1bmN0aW9uKGUpe3JldHVybiBvLmludEZyb21MRShlKX0sYy5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDYpLGk9bi5hc3NlcnQsbz1uLnBhcnNlQnl0ZXMsYT1uLmNhY2hlZFByb3BlcnR5O2Z1bmN0aW9uIHMoZSx0KXt0aGlzLmVkZHNhPWUsdGhpcy5fc2VjcmV0PW8odC5zZWNyZXQpLGUuaXNQb2ludCh0LnB1Yik/dGhpcy5fcHViPXQucHViOnRoaXMuX3B1YkJ5dGVzPW8odC5wdWIpfXMuZnJvbVB1YmxpYz1mdW5jdGlvbihlLHQpe3JldHVybiB0IGluc3RhbmNlb2Ygcz90Om5ldyBzKGUse3B1Yjp0fSl9LHMuZnJvbVNlY3JldD1mdW5jdGlvbihlLHQpe3JldHVybiB0IGluc3RhbmNlb2Ygcz90Om5ldyBzKGUse3NlY3JldDp0fSl9LHMucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LGEocyxcInB1YkJ5dGVzXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSl9KSksYShzLFwicHViXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSkpLGEocyxcInByaXZCeXRlc1wiLChmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRkc2EsdD10aGlzLmhhc2goKSxyPWUuZW5jb2RpbmdMZW5ndGgtMSxuPXQuc2xpY2UoMCxlLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gblswXSY9MjQ4LG5bcl0mPTEyNyxuW3JdfD02NCxufSkpLGEocyxcInByaXZcIiwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5wcml2Qnl0ZXMoKSl9KSksYShzLFwiaGFzaFwiLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSksYShzLFwibWVzc2FnZVByZWZpeFwiLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pKSxzLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGUpe3JldHVybiBpKHRoaXMuX3NlY3JldCxcIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5XCIpLHRoaXMuZWRkc2Euc2lnbihlLHRoaXMpfSxzLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkoZSx0LHRoaXMpfSxzLnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGkodGhpcy5fc2VjcmV0LFwiS2V5UGFpciBpcyBwdWJsaWMgb25seVwiKSxuLmVuY29kZSh0aGlzLnNlY3JldCgpLGUpfSxzLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uZW5jb2RlKHRoaXMucHViQnl0ZXMoKSxlKX0sZS5leHBvcnRzPXN9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQpLGk9cig2KSxvPWkuYXNzZXJ0LGE9aS5jYWNoZWRQcm9wZXJ0eSxzPWkucGFyc2VCeXRlcztmdW5jdGlvbiBmKGUsdCl7dGhpcy5lZGRzYT1lLFwib2JqZWN0XCIhPXR5cGVvZiB0JiYodD1zKHQpKSxBcnJheS5pc0FycmF5KHQpJiYodD17Ujp0LnNsaWNlKDAsZS5lbmNvZGluZ0xlbmd0aCksUzp0LnNsaWNlKGUuZW5jb2RpbmdMZW5ndGgpfSksbyh0LlImJnQuUyxcIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgU1wiKSxlLmlzUG9pbnQodC5SKSYmKHRoaXMuX1I9dC5SKSx0LlMgaW5zdGFuY2VvZiBuJiYodGhpcy5fUz10LlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkodC5SKT90LlI6dC5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KHQuUyk/dC5TOnQuU2VuY29kZWR9YShmLFwiU1wiLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSkpLGEoZixcIlJcIiwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLlJlbmNvZGVkKCkpfSkpLGEoZixcIlJlbmNvZGVkXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSkpLGEoZixcIlNlbmNvZGVkXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pKSxmLnByb3RvdHlwZS50b0J5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sZi5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4gaS5lbmNvZGUodGhpcy50b0J5dGVzKCksXCJoZXhcIikudG9VcHBlckNhc2UoKX0sZS5leHBvcnRzPWZ9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtcbi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LG89T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtmdW5jdGlvbiBhKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpO3JldHVybiBPYmplY3QoZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoXCJhYmNcIik7aWYoZVs1XT1cImRlXCIsXCI1XCI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30scj0wO3I8MTA7cisrKXRbXCJfXCIrU3RyaW5nLmZyb21DaGFyQ29kZShyKV09cjtpZihcIjAxMjM0NTY3ODlcIiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSkuam9pbihcIlwiKSlyZXR1cm4hMTt2YXIgbj17fTtyZXR1cm5cImFiY2RlZmdoaWprbG1ub3BxcnN0XCIuc3BsaXQoXCJcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bltlXT1lfSkpLFwiYWJjZGVmZ2hpamtsbW5vcHFyc3RcIj09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sbikpLmpvaW4oXCJcIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIscyxmPWEoZSksdT0xO3U8YXJndW1lbnRzLmxlbmd0aDt1Kyspe2Zvcih2YXIgYyBpbiByPU9iamVjdChhcmd1bWVudHNbdV0pKWkuY2FsbChyLGMpJiYoZltjXT1yW2NdKTtpZihuKXtzPW4ocik7Zm9yKHZhciBoPTA7aDxzLmxlbmd0aDtoKyspby5jYWxsKHIsc1toXSkmJihmW3NbaF1dPXJbc1toXV0pfX1yZXR1cm4gZn19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24odCl7dmFyIG49cig4MCksaT1yKDE3NSk7ZnVuY3Rpb24gbyhlKXt2YXIgdD1lO2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcihcIltldGhqcy11dGlsXSB3aGlsZSBwYWRkaW5nIHRvIGV2ZW4sIHZhbHVlIG11c3QgYmUgc3RyaW5nLCBpcyBjdXJyZW50bHkgXCIrdHlwZW9mIHQrXCIsIHdoaWxlIHBhZFRvRXZlbi5cIik7cmV0dXJuIHQubGVuZ3RoJTImJih0PVwiMFwiK3QpLHR9ZnVuY3Rpb24gYShlKXtyZXR1cm5cIjB4XCIrZS50b1N0cmluZygxNil9ZS5leHBvcnRzPXthcnJheUNvbnRhaW5zQXJyYXk6ZnVuY3Rpb24oZSx0LHIpe2lmKCEwIT09QXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgRXJyb3IoXCJbZXRoanMtdXRpbF0gbWV0aG9kIGFycmF5Q29udGFpbnNBcnJheSByZXF1aXJlcyBpbnB1dCAnc3VwZXJzZXQnIHRvIGJlIGFuIGFycmF5IGdvdCB0eXBlICdcIit0eXBlb2YgZStcIidcIik7aWYoITAhPT1BcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcihcIltldGhqcy11dGlsXSBtZXRob2QgYXJyYXlDb250YWluc0FycmF5IHJlcXVpcmVzIGlucHV0ICdzdWJzZXQnIHRvIGJlIGFuIGFycmF5IGdvdCB0eXBlICdcIit0eXBlb2YgdCtcIidcIik7cmV0dXJuIHRbQm9vbGVhbihyKT9cInNvbWVcIjpcImV2ZXJ5XCJdKChmdW5jdGlvbih0KXtyZXR1cm4gZS5pbmRleE9mKHQpPj0wfSkpfSxpbnRUb0J1ZmZlcjpmdW5jdGlvbihlKXt2YXIgcj1hKGUpO3JldHVybiBuZXcgdChvKHIuc2xpY2UoMikpLFwiaGV4XCIpfSxnZXRCaW5hcnlTaXplOmZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcIltldGhqcy11dGlsXSB3aGlsZSBnZXR0aW5nIGJpbmFyeSBzaXplLCBtZXRob2QgZ2V0QmluYXJ5U2l6ZSByZXF1aXJlcyBpbnB1dCAnc3RyJyB0byBiZSB0eXBlIFN0cmluZywgZ290ICdcIit0eXBlb2YgZStcIicuXCIpO3JldHVybiB0LmJ5dGVMZW5ndGgoZSxcInV0ZjhcIil9LGlzSGV4UHJlZml4ZWQ6bixzdHJpcEhleFByZWZpeDppLHBhZFRvRXZlbjpvLGludFRvSGV4OmEsZnJvbUFzY2lpOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1cIlwiLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZS5jaGFyQ29kZUF0KHIpLnRvU3RyaW5nKDE2KTt0Kz1uLmxlbmd0aDwyP1wiMFwiK246bn1yZXR1cm5cIjB4XCIrdH0sZnJvbVV0Zjg6ZnVuY3Rpb24oZSl7cmV0dXJuXCIweFwiK28obmV3IHQoZSxcInV0ZjhcIikudG9TdHJpbmcoXCJoZXhcIikpLnJlcGxhY2UoL14wK3wwKyQvZyxcIlwiKX0sdG9Bc2NpaTpmdW5jdGlvbihlKXt2YXIgdD1cIlwiLHI9MCxuPWUubGVuZ3RoO2ZvcihcIjB4XCI9PT1lLnN1YnN0cmluZygwLDIpJiYocj0yKTtyPG47cis9Mil7dmFyIGk9cGFyc2VJbnQoZS5zdWJzdHIociwyKSwxNik7dCs9U3RyaW5nLmZyb21DaGFyQ29kZShpKX1yZXR1cm4gdH0sdG9VdGY4OmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChvKGkoZSkucmVwbGFjZSgvXjArfDArJC9nLFwiXCIpKSxcImhleFwiKS50b1N0cmluZyhcInV0ZjhcIil9LGdldEtleXM6ZnVuY3Rpb24oZSx0LHIpe2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBFcnJvcihcIltldGhqcy11dGlsXSBtZXRob2QgZ2V0S2V5cyBleHBlY3RpbmcgdHlwZSBBcnJheSBhcyAncGFyYW1zJyBpbnB1dCwgZ290ICdcIit0eXBlb2YgZStcIidcIik7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKFwiW2V0aGpzLXV0aWxdIG1ldGhvZCBnZXRLZXlzIGV4cGVjdGluZyB0eXBlIFN0cmluZyBmb3IgaW5wdXQgJ2tleScgZ290ICdcIit0eXBlb2YgdCtcIicuXCIpO2Zvcih2YXIgbj1bXSxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV1bdF07aWYociYmIW8pbz1cIlwiO2Vsc2UgaWYoXCJzdHJpbmdcIiE9dHlwZW9mIG8pdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBhYmlcIik7bi5wdXNoKG8pfXJldHVybiBufSxpc0hleFN0cmluZzpmdW5jdGlvbihlLHQpe3JldHVybiEoXCJzdHJpbmdcIiE9dHlwZW9mIGV8fCFlLm1hdGNoKC9eMHhbMC05QS1GYS1mXSokLykpJiYoIXR8fGUubGVuZ3RoPT09MisyKnQpfX19KS5jYWxsKHRoaXMscigxKS5CdWZmZXIpfSxmdW5jdGlvbihlLHQscil7dmFyIG49cig4MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBlP2U6bihlKT9lLnNsaWNlKDIpOmV9fSxmdW5jdGlvbihlLHQscil7Y29uc3Qgbj1yKDM5KSxpPXIoMTc3KTtmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9Pntjb25zdCBuPXNldFRpbWVvdXQocixlKTtuLnVucmVmJiZ0JiZuLnVucmVmKCl9KX1lLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGU9e30pe2lmKCFlLnByb3ZpZGVyKXRocm93IG5ldyBFcnJvcihcIlBvbGxpbmdCbG9ja1RyYWNrZXIgLSBubyBwcm92aWRlciBzcGVjaWZpZWQuXCIpO2NvbnN0IHQ9ZS5wb2xsaW5nSW50ZXJ2YWx8fDJlNCxyPWUucmV0cnlUaW1lb3V0fHx0LzEwLG49dm9pZCAwPT09ZS5rZWVwRXZlbnRMb29wQWN0aXZlfHxlLmtlZXBFdmVudExvb3BBY3RpdmUsaT1lLnNldFNraXBDYWNoZUZsYWd8fCExO3N1cGVyKE9iamVjdC5hc3NpZ24oe2Jsb2NrUmVzZXREdXJhdGlvbjp0fSxlKSksdGhpcy5fcHJvdmlkZXI9ZS5wcm92aWRlcix0aGlzLl9wb2xsaW5nSW50ZXJ2YWw9dCx0aGlzLl9yZXRyeVRpbWVvdXQ9cix0aGlzLl9rZWVwRXZlbnRMb29wQWN0aXZlPW4sdGhpcy5fc2V0U2tpcENhY2hlRmxhZz1pfWFzeW5jIGNoZWNrRm9yTGF0ZXN0QmxvY2soKXtyZXR1cm4gYXdhaXQgdGhpcy5fdXBkYXRlTGF0ZXN0QmxvY2soKSxhd2FpdCB0aGlzLmdldExhdGVzdEJsb2NrKCl9X3N0YXJ0KCl7dGhpcy5fcGVyZm9ybVN5bmMoKS5jYXRjaChlPT50aGlzLmVtaXQoXCJlcnJvclwiLGUpKX1hc3luYyBfcGVyZm9ybVN5bmMoKXtmb3IoO3RoaXMuX2lzUnVubmluZzspdHJ5e2F3YWl0IHRoaXMuX3VwZGF0ZUxhdGVzdEJsb2NrKCksYXdhaXQgbyh0aGlzLl9wb2xsaW5nSW50ZXJ2YWwsIXRoaXMuX2tlZXBFdmVudExvb3BBY3RpdmUpfWNhdGNoKGUpe2NvbnN0IHQ9bmV3IEVycm9yKFwiUG9sbGluZ0Jsb2NrVHJhY2tlciAtIGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIGF0dGVtcHRpbmcgdG8gdXBkYXRlIGxhdGVzdCBibG9jazpcXG5cIitlLnN0YWNrKTt0cnl7dGhpcy5lbWl0KFwiZXJyb3JcIix0KX1jYXRjaChlKXtjb25zb2xlLmVycm9yKHQpfWF3YWl0IG8odGhpcy5fcmV0cnlUaW1lb3V0LCF0aGlzLl9rZWVwRXZlbnRMb29wQWN0aXZlKX19YXN5bmMgX3VwZGF0ZUxhdGVzdEJsb2NrKCl7Y29uc3QgZT1hd2FpdCB0aGlzLl9mZXRjaExhdGVzdEJsb2NrKCk7dGhpcy5fbmV3UG90ZW50aWFsTGF0ZXN0KGUpfWFzeW5jIF9mZXRjaExhdGVzdEJsb2NrKCl7Y29uc3QgZT17anNvbnJwYzpcIjIuMFwiLGlkOjEsbWV0aG9kOlwiZXRoX2Jsb2NrTnVtYmVyXCIscGFyYW1zOltdfTt0aGlzLl9zZXRTa2lwQ2FjaGVGbGFnJiYoZS5za2lwQ2FjaGU9ITApO2NvbnN0IHQ9YXdhaXQgbih0PT50aGlzLl9wcm92aWRlci5zZW5kQXN5bmMoZSx0KSkoKTtpZih0LmVycm9yKXRocm93IG5ldyBFcnJvcihcIlBvbGxpbmdCbG9ja1RyYWNrZXIgLSBlbmNvdW50ZXJlZCBlcnJvciBmZXRjaGluZyBibG9jazpcXG5cIit0LmVycm9yKTtyZXR1cm4gdC5yZXN1bHR9fX0sZnVuY3Rpb24oZSx0LHIpe3IoODEpLHIoMzkpO2NvbnN0IG49cig0MSksaT0oZSx0KT0+ZSt0LG89W1wic3luY1wiLFwibGF0ZXN0XCJdO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIE51bWJlci5wYXJzZUludChlLDE2KX1lLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGU9e30pe3N1cGVyKCksdGhpcy5fYmxvY2tSZXNldER1cmF0aW9uPWUuYmxvY2tSZXNldER1cmF0aW9ufHwyZTQsdGhpcy5fYmxvY2tSZXNldFRpbWVvdXQsdGhpcy5fY3VycmVudEJsb2NrPW51bGwsdGhpcy5faXNSdW5uaW5nPSExLHRoaXMuX29uTmV3TGlzdGVuZXI9dGhpcy5fb25OZXdMaXN0ZW5lci5iaW5kKHRoaXMpLHRoaXMuX29uUmVtb3ZlTGlzdGVuZXI9dGhpcy5fb25SZW1vdmVMaXN0ZW5lci5iaW5kKHRoaXMpLHRoaXMuX3Jlc2V0Q3VycmVudEJsb2NrPXRoaXMuX3Jlc2V0Q3VycmVudEJsb2NrLmJpbmQodGhpcyksdGhpcy5fc2V0dXBJbnRlcm5hbEV2ZW50cygpfWlzUnVubmluZygpe3JldHVybiB0aGlzLl9pc1J1bm5pbmd9Z2V0Q3VycmVudEJsb2NrKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRCbG9ja31hc3luYyBnZXRMYXRlc3RCbG9jaygpe2lmKHRoaXMuX2N1cnJlbnRCbG9jaylyZXR1cm4gdGhpcy5fY3VycmVudEJsb2NrO3JldHVybiBhd2FpdCBuZXcgUHJvbWlzZShlPT50aGlzLm9uY2UoXCJsYXRlc3RcIixlKSl9cmVtb3ZlQWxsTGlzdGVuZXJzKGUpe2U/c3VwZXIucmVtb3ZlQWxsTGlzdGVuZXJzKGUpOnN1cGVyLnJlbW92ZUFsbExpc3RlbmVycygpLHRoaXMuX3NldHVwSW50ZXJuYWxFdmVudHMoKSx0aGlzLl9vblJlbW92ZUxpc3RlbmVyKCl9X3N0YXJ0KCl7fV9lbmQoKXt9X3NldHVwSW50ZXJuYWxFdmVudHMoKXt0aGlzLnJlbW92ZUxpc3RlbmVyKFwibmV3TGlzdGVuZXJcIix0aGlzLl9vbk5ld0xpc3RlbmVyKSx0aGlzLnJlbW92ZUxpc3RlbmVyKFwicmVtb3ZlTGlzdGVuZXJcIix0aGlzLl9vblJlbW92ZUxpc3RlbmVyKSx0aGlzLm9uKFwibmV3TGlzdGVuZXJcIix0aGlzLl9vbk5ld0xpc3RlbmVyKSx0aGlzLm9uKFwicmVtb3ZlTGlzdGVuZXJcIix0aGlzLl9vblJlbW92ZUxpc3RlbmVyKX1fb25OZXdMaXN0ZW5lcihlLHQpe28uaW5jbHVkZXMoZSkmJnRoaXMuX21heWJlU3RhcnQoKX1fb25SZW1vdmVMaXN0ZW5lcihlLHQpe3RoaXMuX2dldEJsb2NrVHJhY2tlckV2ZW50Q291bnQoKT4wfHx0aGlzLl9tYXliZUVuZCgpfV9tYXliZVN0YXJ0KCl7dGhpcy5faXNSdW5uaW5nfHwodGhpcy5faXNSdW5uaW5nPSEwLHRoaXMuX2NhbmNlbEJsb2NrUmVzZXRUaW1lb3V0KCksdGhpcy5fc3RhcnQoKSl9X21heWJlRW5kKCl7dGhpcy5faXNSdW5uaW5nJiYodGhpcy5faXNSdW5uaW5nPSExLHRoaXMuX3NldHVwQmxvY2tSZXNldFRpbWVvdXQoKSx0aGlzLl9lbmQoKSl9X2dldEJsb2NrVHJhY2tlckV2ZW50Q291bnQoKXtyZXR1cm4gby5tYXAoZT0+dGhpcy5saXN0ZW5lckNvdW50KGUpKS5yZWR1Y2UoaSl9X25ld1BvdGVudGlhbExhdGVzdChlKXtjb25zdCB0PXRoaXMuX2N1cnJlbnRCbG9jazt0JiZhKGUpPD1hKHQpfHx0aGlzLl9zZXRDdXJyZW50QmxvY2soZSl9X3NldEN1cnJlbnRCbG9jayhlKXtjb25zdCB0PXRoaXMuX2N1cnJlbnRCbG9jazt0aGlzLl9jdXJyZW50QmxvY2s9ZSx0aGlzLmVtaXQoXCJsYXRlc3RcIixlKSx0aGlzLmVtaXQoXCJzeW5jXCIse29sZEJsb2NrOnQsbmV3QmxvY2s6ZX0pfV9zZXR1cEJsb2NrUmVzZXRUaW1lb3V0KCl7dGhpcy5fY2FuY2VsQmxvY2tSZXNldFRpbWVvdXQoKSx0aGlzLl9ibG9ja1Jlc2V0VGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX3Jlc2V0Q3VycmVudEJsb2NrLHRoaXMuX2Jsb2NrUmVzZXREdXJhdGlvbiksdGhpcy5fYmxvY2tSZXNldFRpbWVvdXQudW5yZWYmJnRoaXMuX2Jsb2NrUmVzZXRUaW1lb3V0LnVucmVmKCl9X2NhbmNlbEJsb2NrUmVzZXRUaW1lb3V0KCl7Y2xlYXJUaW1lb3V0KHRoaXMuX2Jsb2NrUmVzZXRUaW1lb3V0KX1fcmVzZXRDdXJyZW50QmxvY2soKXt0aGlzLl9jdXJyZW50QmxvY2s9bnVsbH19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0oZT1lfHx7fSkubWF4fHxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixyPXZvaWQgMCE9PWUuc3RhcnQ/ZS5zdGFydDpNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIlPXQscisrfX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1vKHIoMTgwKSksaT1vKHIoMjA2KSk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5kZWZhdWx0PSgwLG4uZGVmYXVsdCkoaS5kZWZhdWx0KSxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbyl7cmV0dXJuIGUobi5kZWZhdWx0LHQsKDAsaS5kZWZhdWx0KShyKSxvKX19O3ZhciBuPW8ocig4MikpLGk9byhyKDEzKSk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNDIpLGk9cig4Nik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXJldHVybiExO3ZhciB0PW4oZSk7cmV0dXJuXCJbb2JqZWN0IEZ1bmN0aW9uXVwiPT10fHxcIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBBc3luY0Z1bmN0aW9uXVwiPT10fHxcIltvYmplY3QgUHJveHldXCI9PXR9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cig4MyksaT1PYmplY3QucHJvdG90eXBlLG89aS5oYXNPd25Qcm9wZXJ0eSxhPWkudG9TdHJpbmcscz1uP24udG9TdHJpbmdUYWc6dm9pZCAwO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1vLmNhbGwoZSxzKSxyPWVbc107dHJ5e2Vbc109dm9pZCAwO3ZhciBuPSEwfWNhdGNoKGUpe312YXIgaT1hLmNhbGwoZSk7cmV0dXJuIG4mJih0P2Vbc109cjpkZWxldGUgZVtzXSksaX19LGZ1bmN0aW9uKGUsdCl7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuY2FsbChlKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0LHIsbyl7KDAsbi5kZWZhdWx0KSh0KShlLCgwLGkuZGVmYXVsdCkociksbyl9O3ZhciBuPW8ocig4OSkpLGk9byhyKDEzKSk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtpZigoMCxuLmRlZmF1bHQpKGUpKXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD0tMSxyPWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbigpe3JldHVybisrdDxyP3t2YWx1ZTplW3RdLGtleTp0fTpudWxsfX0oZSk7dmFyIHQ9KDAsaS5kZWZhdWx0KShlKTtyZXR1cm4gdD9mdW5jdGlvbihlKXt2YXIgdD0tMTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLm5leHQoKTtyZXR1cm4gci5kb25lP251bGw6KHQrKyx7dmFsdWU6ci52YWx1ZSxrZXk6dH0pfX0odCk6KHI9ZSxhPSgwLG8uZGVmYXVsdCkocikscz0tMSxmPWEubGVuZ3RoLGZ1bmN0aW9uKCl7dmFyIGU9YVsrK3NdO3JldHVybiBzPGY/e3ZhbHVlOnJbZV0sa2V5OmV9Om51bGx9KTt2YXIgcixhLHMsZn07dmFyIG49YShyKDI3KSksaT1hKHIoMTg2KSksbz1hKHIoMTg3KSk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4gbiYmZVtuXSYmZVtuXSgpfTt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQscil7dmFyIG49cigxODgpLGk9cigxOTkpLG89cigyNyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUpP24oZSk6aShlKX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDE4OSksaT1yKDE5MCksbz1yKDkwKSxhPXIoMTkyKSxzPXIoMTk0KSxmPXIoMTk1KSx1PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9byhlKSxjPSFyJiZpKGUpLGg9IXImJiFjJiZhKGUpLGQ9IXImJiFjJiYhaCYmZihlKSxsPXJ8fGN8fGh8fGQscD1sP24oZS5sZW5ndGgsU3RyaW5nKTpbXSxiPXAubGVuZ3RoO2Zvcih2YXIgeSBpbiBlKSF0JiYhdS5jYWxsKGUseSl8fGwmJihcImxlbmd0aFwiPT15fHxoJiYoXCJvZmZzZXRcIj09eXx8XCJwYXJlbnRcIj09eSl8fGQmJihcImJ1ZmZlclwiPT15fHxcImJ5dGVMZW5ndGhcIj09eXx8XCJieXRlT2Zmc2V0XCI9PXkpfHxzKHksYikpfHxwLnB1c2goeSk7cmV0dXJuIHB9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0tMSxuPUFycmF5KGUpOysrcjxlOyluW3JdPXQocik7cmV0dXJuIG59fSxmdW5jdGlvbihlLHQscil7dmFyIG49cigxOTEpLGk9cig0NCksbz1PYmplY3QucHJvdG90eXBlLGE9by5oYXNPd25Qcm9wZXJ0eSxzPW8ucHJvcGVydHlJc0VudW1lcmFibGUsZj1uKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/bjpmdW5jdGlvbihlKXtyZXR1cm4gaShlKSYmYS5jYWxsKGUsXCJjYWxsZWVcIikmJiFzLmNhbGwoZSxcImNhbGxlZVwiKX07ZS5leHBvcnRzPWZ9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDQyKSxpPXIoNDQpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaShlKSYmXCJbb2JqZWN0IEFyZ3VtZW50c11cIj09bihlKX19LGZ1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSl7dmFyIG49cig4NCksaT1yKDE5Myksbz10JiYhdC5ub2RlVHlwZSYmdCxhPW8mJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiYhZS5ub2RlVHlwZSYmZSxzPWEmJmEuZXhwb3J0cz09PW8/bi5CdWZmZXI6dm9pZCAwLGY9KHM/cy5pc0J1ZmZlcjp2b2lkIDApfHxpO2UuZXhwb3J0cz1mfSkuY2FsbCh0aGlzLHIoMjUpKGUpKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4hMX19LGZ1bmN0aW9uKGUsdCl7dmFyIHI9L14oPzowfFsxLTldXFxkKikkLztlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZTtyZXR1cm4hISh0PW51bGw9PXQ/OTAwNzE5OTI1NDc0MDk5MTp0KSYmKFwibnVtYmVyXCI9PW58fFwic3ltYm9sXCIhPW4mJnIudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMTk2KSxpPXIoMTk3KSxvPXIoMTk4KSxhPW8mJm8uaXNUeXBlZEFycmF5LHM9YT9pKGEpOm47ZS5leHBvcnRzPXN9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDQyKSxpPXIoODcpLG89cig0NCksYT17fTthW1wiW29iamVjdCBGbG9hdDMyQXJyYXldXCJdPWFbXCJbb2JqZWN0IEZsb2F0NjRBcnJheV1cIl09YVtcIltvYmplY3QgSW50OEFycmF5XVwiXT1hW1wiW29iamVjdCBJbnQxNkFycmF5XVwiXT1hW1wiW29iamVjdCBJbnQzMkFycmF5XVwiXT1hW1wiW29iamVjdCBVaW50OEFycmF5XVwiXT1hW1wiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV1cIl09YVtcIltvYmplY3QgVWludDE2QXJyYXldXCJdPWFbXCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiXT0hMCxhW1wiW29iamVjdCBBcmd1bWVudHNdXCJdPWFbXCJbb2JqZWN0IEFycmF5XVwiXT1hW1wiW29iamVjdCBBcnJheUJ1ZmZlcl1cIl09YVtcIltvYmplY3QgQm9vbGVhbl1cIl09YVtcIltvYmplY3QgRGF0YVZpZXddXCJdPWFbXCJbb2JqZWN0IERhdGVdXCJdPWFbXCJbb2JqZWN0IEVycm9yXVwiXT1hW1wiW29iamVjdCBGdW5jdGlvbl1cIl09YVtcIltvYmplY3QgTWFwXVwiXT1hW1wiW29iamVjdCBOdW1iZXJdXCJdPWFbXCJbb2JqZWN0IE9iamVjdF1cIl09YVtcIltvYmplY3QgUmVnRXhwXVwiXT1hW1wiW29iamVjdCBTZXRdXCJdPWFbXCJbb2JqZWN0IFN0cmluZ11cIl09YVtcIltvYmplY3QgV2Vha01hcF1cIl09ITEsZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUpJiZpKGUubGVuZ3RoKSYmISFhW24oZSldfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX19LGZ1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSl7dmFyIG49cig4NSksaT10JiYhdC5ub2RlVHlwZSYmdCxvPWkmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiYhZS5ub2RlVHlwZSYmZSxhPW8mJm8uZXhwb3J0cz09PWkmJm4ucHJvY2VzcyxzPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW8mJm8ucmVxdWlyZSYmby5yZXF1aXJlKFwidXRpbFwiKS50eXBlcztyZXR1cm4gZXx8YSYmYS5iaW5kaW5nJiZhLmJpbmRpbmcoXCJ1dGlsXCIpfWNhdGNoKGUpe319KCk7ZS5leHBvcnRzPXN9KS5jYWxsKHRoaXMscigyNSkoZSkpfSxmdW5jdGlvbihlLHQscil7dmFyIG49cigyMDApLGk9cigyMDEpLG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIW4oZSkpcmV0dXJuIGkoZSk7dmFyIHQ9W107Zm9yKHZhciByIGluIE9iamVjdChlKSlvLmNhbGwoZSxyKSYmXCJjb25zdHJ1Y3RvclwiIT1yJiZ0LnB1c2gocik7cmV0dXJuIHR9fSxmdW5jdGlvbihlLHQpe3ZhciByPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuY29uc3RydWN0b3I7cmV0dXJuIGU9PT0oXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdC5wcm90b3R5cGV8fHIpfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMjAyKShPYmplY3Qua2V5cyxPYmplY3QpO2UuZXhwb3J0cz1ufSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZSh0KHIpKX19fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3JldHVybigwLGkuZGVmYXVsdCkoKGZ1bmN0aW9uKHQscil7dmFyIGk7dHJ5e2k9ZS5hcHBseSh0aGlzLHQpfWNhdGNoKGUpe3JldHVybiByKGUpfSgwLG4uZGVmYXVsdCkoaSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGkudGhlbj9pLnRoZW4oKGZ1bmN0aW9uKGUpe3MocixudWxsLGUpfSksKGZ1bmN0aW9uKGUpe3MocixlLm1lc3NhZ2U/ZTpuZXcgRXJyb3IoZSkpfSkpOnIobnVsbCxpKX0pKX07dmFyIG49YShyKDg2KSksaT1hKHIoMjA0KSksbz1hKHIoMjA1KSk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZnVuY3Rpb24gcyhlLHQscil7dHJ5e2UodCxyKX1jYXRjaChlKXsoMCxvLmRlZmF1bHQpKGYsZSl9fWZ1bmN0aW9uIGYoZSl7dGhyb3cgZX1lLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PSgwLG8uZGVmYXVsdCkoYXJndW1lbnRzKSxyPXQucG9wKCk7ZS5jYWxsKHRoaXMsdCxyKX19O3ZhciBuLGk9cigyOCksbz0obj1pKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn07ZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlLG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuaGFzTmV4dFRpY2s9dC5oYXNTZXRJbW1lZGlhdGU9dm9pZCAwLHQuZmFsbGJhY2s9Yyx0LndyYXA9aDt2YXIgaSxvPXIoMjgpLGE9KGk9bykmJmkuX19lc01vZHVsZT9pOntkZWZhdWx0Oml9O3ZhciBzLGY9dC5oYXNTZXRJbW1lZGlhdGU9XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSx1PXQuaGFzTmV4dFRpY2s9XCJvYmplY3RcIj09dHlwZW9mIG4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4ubmV4dFRpY2s7ZnVuY3Rpb24gYyhlKXtzZXRUaW1lb3V0KGUsMCl9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9KDAsYS5kZWZhdWx0KShhcmd1bWVudHMsMSk7ZSgoZnVuY3Rpb24oKXt0LmFwcGx5KG51bGwscil9KSl9fXM9Zj9lOnU/bi5uZXh0VGljazpjLHQuZGVmYXVsdD1oKHMpfSkuY2FsbCh0aGlzLHIoMzMpLnNldEltbWVkaWF0ZSxyKDMpKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQscixvKXtvPW98fG4uZGVmYXVsdCx0PXR8fFtdO3ZhciBhPVtdLHM9MCxmPSgwLGkuZGVmYXVsdCkocik7ZSh0LChmdW5jdGlvbihlLHQscil7dmFyIG49cysrO2YoZSwoZnVuY3Rpb24oZSx0KXthW25dPXQscihlKX0pKX0pLChmdW5jdGlvbihlKXtvKGUsYSl9KSl9O3ZhciBuPW8ocigyMikpLGk9byhyKDEzKSk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPW8ocigyMDgpKSxpPW8ocig5MSkpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuZGVmYXVsdD0oMCxpLmRlZmF1bHQpKG4uZGVmYXVsdCwxKSxlLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCxyLGEpeygwLG4uZGVmYXVsdCkodCkoZSwoMCxpLmRlZmF1bHQpKCgwLG8uZGVmYXVsdCkocikpLGEpfTt2YXIgbj1hKHIoODkpKSxpPWEocigyMDkpKSxvPWEocigxMykpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWUuZXhwb3J0cz10LmRlZmF1bHR9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZSh0LG4pfX0sZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoOSkuRXZlbnRFbWl0dGVyLGk9cigxMCkuaW5oZXJpdHM7ZnVuY3Rpb24gbygpe24uY2FsbCh0aGlzKSx0aGlzLmlzTG9ja2VkPSEwfWUuZXhwb3J0cz1vLGkobyxuKSxvLnByb3RvdHlwZS5nbz1mdW5jdGlvbigpe3RoaXMuaXNMb2NrZWQ9ITEsdGhpcy5lbWl0KFwidW5sb2NrXCIpfSxvLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5pc0xvY2tlZD0hMCx0aGlzLmVtaXQoXCJsb2NrXCIpfSxvLnByb3RvdHlwZS5hd2FpdD1mdW5jdGlvbihlKXt0aGlzLmlzTG9ja2VkP3RoaXMub25jZShcInVubG9ja1wiLGUpOnNldFRpbWVvdXQoZSl9fSxmdW5jdGlvbihlLHQscil7dC5wYXJzZT1yKDIxMiksdC5zdHJpbmdpZnk9cigyMTMpfSxmdW5jdGlvbihlLHQpe3ZhciByLG4saSxvLGE9eydcIic6J1wiJyxcIlxcXFxcIjpcIlxcXFxcIixcIi9cIjpcIi9cIixiOlwiXFxiXCIsZjpcIlxcZlwiLG46XCJcXG5cIixyOlwiXFxyXCIsdDpcIlxcdFwifSxzPWZ1bmN0aW9uKGUpe3Rocm93e25hbWU6XCJTeW50YXhFcnJvclwiLG1lc3NhZ2U6ZSxhdDpyLHRleHQ6aX19LGY9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUhPT1uJiZzKFwiRXhwZWN0ZWQgJ1wiK2UrXCInIGluc3RlYWQgb2YgJ1wiK24rXCInXCIpLG49aS5jaGFyQXQocikscis9MSxufSx1PWZ1bmN0aW9uKCl7dmFyIGUsdD1cIlwiO2ZvcihcIi1cIj09PW4mJih0PVwiLVwiLGYoXCItXCIpKTtuPj1cIjBcIiYmbjw9XCI5XCI7KXQrPW4sZigpO2lmKFwiLlwiPT09bilmb3IodCs9XCIuXCI7ZigpJiZuPj1cIjBcIiYmbjw9XCI5XCI7KXQrPW47aWYoXCJlXCI9PT1ufHxcIkVcIj09PW4pZm9yKHQrPW4sZigpLFwiLVwiIT09biYmXCIrXCIhPT1ufHwodCs9bixmKCkpO24+PVwiMFwiJiZuPD1cIjlcIjspdCs9bixmKCk7aWYoZT0rdCxpc0Zpbml0ZShlKSlyZXR1cm4gZTtzKFwiQmFkIG51bWJlclwiKX0sYz1mdW5jdGlvbigpe3ZhciBlLHQscixpPVwiXCI7aWYoJ1wiJz09PW4pZm9yKDtmKCk7KXtpZignXCInPT09bilyZXR1cm4gZigpLGk7aWYoXCJcXFxcXCI9PT1uKWlmKGYoKSxcInVcIj09PW4pe2ZvcihyPTAsdD0wO3Q8NCYmKGU9cGFyc2VJbnQoZigpLDE2KSxpc0Zpbml0ZShlKSk7dCs9MSlyPTE2KnIrZTtpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpfWVsc2V7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGFbbl0pYnJlYWs7aSs9YVtuXX1lbHNlIGkrPW59cyhcIkJhZCBzdHJpbmdcIil9LGg9ZnVuY3Rpb24oKXtmb3IoO24mJm48PVwiIFwiOylmKCl9O289ZnVuY3Rpb24oKXtzd2l0Y2goaCgpLG4pe2Nhc2VcIntcIjpyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZSx0PXt9O2lmKFwie1wiPT09bil7aWYoZihcIntcIiksaCgpLFwifVwiPT09bilyZXR1cm4gZihcIn1cIiksdDtmb3IoO247KXtpZihlPWMoKSxoKCksZihcIjpcIiksT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCxlKSYmcygnRHVwbGljYXRlIGtleSBcIicrZSsnXCInKSx0W2VdPW8oKSxoKCksXCJ9XCI9PT1uKXJldHVybiBmKFwifVwiKSx0O2YoXCIsXCIpLGgoKX19cyhcIkJhZCBvYmplY3RcIil9KCk7Y2FzZVwiW1wiOnJldHVybiBmdW5jdGlvbigpe3ZhciBlPVtdO2lmKFwiW1wiPT09bil7aWYoZihcIltcIiksaCgpLFwiXVwiPT09bilyZXR1cm4gZihcIl1cIiksZTtmb3IoO247KXtpZihlLnB1c2gobygpKSxoKCksXCJdXCI9PT1uKXJldHVybiBmKFwiXVwiKSxlO2YoXCIsXCIpLGgoKX19cyhcIkJhZCBhcnJheVwiKX0oKTtjYXNlJ1wiJzpyZXR1cm4gYygpO2Nhc2VcIi1cIjpyZXR1cm4gdSgpO2RlZmF1bHQ6cmV0dXJuIG4+PVwiMFwiJiZuPD1cIjlcIj91KCk6ZnVuY3Rpb24oKXtzd2l0Y2gobil7Y2FzZVwidFwiOnJldHVybiBmKFwidFwiKSxmKFwiclwiKSxmKFwidVwiKSxmKFwiZVwiKSwhMDtjYXNlXCJmXCI6cmV0dXJuIGYoXCJmXCIpLGYoXCJhXCIpLGYoXCJsXCIpLGYoXCJzXCIpLGYoXCJlXCIpLCExO2Nhc2VcIm5cIjpyZXR1cm4gZihcIm5cIiksZihcInVcIiksZihcImxcIiksZihcImxcIiksbnVsbH1zKFwiVW5leHBlY3RlZCAnXCIrbitcIidcIil9KCl9fSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgYTtyZXR1cm4gaT1lLHI9MCxuPVwiIFwiLGE9bygpLGgoKSxuJiZzKFwiU3ludGF4IGVycm9yXCIpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24gZShyLG4pe3ZhciBpLG8sYT1yW25dO2lmKGEmJlwib2JqZWN0XCI9PXR5cGVvZiBhKWZvcihpIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsaSkmJih2b2lkIDAhPT0obz1lKGEsaSkpP2FbaV09bzpkZWxldGUgYVtpXSk7cmV0dXJuIHQuY2FsbChyLG4sYSl9KHtcIlwiOmF9LFwiXCIpOmF9fSxmdW5jdGlvbihlLHQpe3ZhciByLG4saSxvPS9bXFxcXFxcXCJcXHgwMC1cXHgxZlxceDdmLVxceDlmXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csYT17XCJcXGJcIjpcIlxcXFxiXCIsXCJcXHRcIjpcIlxcXFx0XCIsXCJcXG5cIjpcIlxcXFxuXCIsXCJcXGZcIjpcIlxcXFxmXCIsXCJcXHJcIjpcIlxcXFxyXCIsJ1wiJzonXFxcXFwiJyxcIlxcXFxcIjpcIlxcXFxcXFxcXCJ9O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIG8ubGFzdEluZGV4PTAsby50ZXN0KGUpPydcIicrZS5yZXBsYWNlKG8sKGZ1bmN0aW9uKGUpe3ZhciB0PWFbZV07cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/dDpcIlxcXFx1XCIrKFwiMDAwMFwiK2UuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KX0pKSsnXCInOidcIicrZSsnXCInfWUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbyl7dmFyIGE7aWYocj1cIlwiLG49XCJcIixcIm51bWJlclwiPT10eXBlb2Ygbylmb3IoYT0wO2E8bzthKz0xKW4rPVwiIFwiO2Vsc2VcInN0cmluZ1wiPT10eXBlb2YgbyYmKG49byk7aWYoaT10LHQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJihcIm9iamVjdFwiIT10eXBlb2YgdHx8XCJudW1iZXJcIiE9dHlwZW9mIHQubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IoXCJKU09OLnN0cmluZ2lmeVwiKTtyZXR1cm4gZnVuY3Rpb24gZSh0LG8pe3ZhciBhLGYsdSxjLGgsZD1yLGw9b1t0XTtzd2l0Y2gobCYmXCJvYmplY3RcIj09dHlwZW9mIGwmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGwudG9KU09OJiYobD1sLnRvSlNPTih0KSksXCJmdW5jdGlvblwiPT10eXBlb2YgaSYmKGw9aS5jYWxsKG8sdCxsKSksdHlwZW9mIGwpe2Nhc2VcInN0cmluZ1wiOnJldHVybiBzKGwpO2Nhc2VcIm51bWJlclwiOnJldHVybiBpc0Zpbml0ZShsKT9TdHJpbmcobCk6XCJudWxsXCI7Y2FzZVwiYm9vbGVhblwiOmNhc2VcIm51bGxcIjpyZXR1cm4gU3RyaW5nKGwpO2Nhc2VcIm9iamVjdFwiOmlmKCFsKXJldHVyblwibnVsbFwiO2lmKHIrPW4saD1bXSxcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGwpKXtmb3IoYz1sLmxlbmd0aCxhPTA7YTxjO2ErPTEpaFthXT1lKGEsbCl8fFwibnVsbFwiO3JldHVybiB1PTA9PT1oLmxlbmd0aD9cIltdXCI6cj9cIltcXG5cIityK2guam9pbihcIixcXG5cIityKStcIlxcblwiK2QrXCJdXCI6XCJbXCIraC5qb2luKFwiLFwiKStcIl1cIixyPWQsdX1pZihpJiZcIm9iamVjdFwiPT10eXBlb2YgaSlmb3IoYz1pLmxlbmd0aCxhPTA7YTxjO2ErPTEpXCJzdHJpbmdcIj09dHlwZW9mKGY9aVthXSkmJih1PWUoZixsKSkmJmgucHVzaChzKGYpKyhyP1wiOiBcIjpcIjpcIikrdSk7ZWxzZSBmb3IoZiBpbiBsKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGYpJiYodT1lKGYsbCkpJiZoLnB1c2gocyhmKSsocj9cIjogXCI6XCI6XCIpK3UpO3JldHVybiB1PTA9PT1oLmxlbmd0aD9cInt9XCI6cj9cIntcXG5cIityK2guam9pbihcIixcXG5cIityKStcIlxcblwiK2QrXCJ9XCI6XCJ7XCIraC5qb2luKFwiLFwiKStcIn1cIixyPWQsdX19KFwiXCIse1wiXCI6ZX0pfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBlPShuZXcgRGF0ZSkuZ2V0VGltZSgpKk1hdGgucG93KDEwLDMpLHQ9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk1hdGgucG93KDEwLDMpKTtyZXR1cm4gZSt0fX0sZnVuY3Rpb24oZSx0LHIpe2NvbnN0IG49cigyMTYpLGk9cig0OCksbz1bdm9pZCAwLG51bGwsXCI8bmlsPlwiXTtlLmV4cG9ydHM9ZnVuY3Rpb24oZT17fSl7Y29uc3R7YmxvY2tUcmFja2VyOnR9PWU7aWYoIXQpdGhyb3cgbmV3IEVycm9yKFwiY3JlYXRlQmxvY2tDYWNoZU1pZGRsZXdhcmUgLSBObyBCbG9ja1RyYWNrZXIgc3BlY2lmaWVkXCIpO2NvbnN0IHI9bmV3IGEsbz17cGVybWE6cixibG9jazpyLGZvcms6cn07cmV0dXJuIGkoYXN5bmMoZSxpLGEpPT57aWYoZS5za2lwQ2FjaGUpcmV0dXJuIGEoKTtjb25zdCBzPW4uY2FjaGVUeXBlRm9yUGF5bG9hZChlKSxmPW9bc107aWYoIWYpcmV0dXJuIGEoKTtpZighZi5jYW5DYWNoZVJlcXVlc3QoZSkpcmV0dXJuIGEoKTtsZXQgdSxjPW4uYmxvY2tUYWdGb3JQYXlsb2FkKGUpO2lmKGN8fChjPVwibGF0ZXN0XCIpLFwiZWFybGllc3RcIj09PWMpdT1cIjB4MDBcIjtlbHNlIGlmKFwibGF0ZXN0XCI9PT1jKXtjb25zdCBlPWF3YWl0IHQuZ2V0TGF0ZXN0QmxvY2soKTtyLmNsZWFyQmVmb3JlKGUpLHU9ZX1lbHNlIHU9Yztjb25zdCBoPWF3YWl0IGYuZ2V0KGUsdSk7dm9pZCAwPT09aD8oYXdhaXQgYSgpLGF3YWl0IGYuc2V0KGUsdSxpLnJlc3VsdCkpOmkucmVzdWx0PWh9KX07Y2xhc3MgYXtjb25zdHJ1Y3Rvcigpe3RoaXMuY2FjaGU9e319Z2V0QmxvY2tDYWNoZUZvclBheWxvYWQoZSx0KXtjb25zdCByPU51bWJlci5wYXJzZUludCh0LDE2KTtsZXQgbj10aGlzLmNhY2hlW3JdO2lmKCFuKXtjb25zdCBlPXt9O3RoaXMuY2FjaGVbcl09ZSxuPWV9cmV0dXJuIG59YXN5bmMgZ2V0KGUsdCl7Y29uc3Qgcj10aGlzLmdldEJsb2NrQ2FjaGVGb3JQYXlsb2FkKGUsdCk7aWYoIXIpcmV0dXJuO3JldHVybiByW24uY2FjaGVJZGVudGlmaWVyRm9yUGF5bG9hZChlLCEwKV19YXN5bmMgc2V0KGUsdCxyKXtpZighdGhpcy5jYW5DYWNoZVJlc3VsdChlLHIpKXJldHVybjt0aGlzLmdldEJsb2NrQ2FjaGVGb3JQYXlsb2FkKGUsdClbbi5jYWNoZUlkZW50aWZpZXJGb3JQYXlsb2FkKGUsITApXT1yfWNhbkNhY2hlUmVxdWVzdChlKXtpZighbi5jYW5DYWNoZShlKSlyZXR1cm4hMTtyZXR1cm5cInBlbmRpbmdcIiE9PW4uYmxvY2tUYWdGb3JQYXlsb2FkKGUpfWNhbkNhY2hlUmVzdWx0KGUsdCl7aWYoIW8uaW5jbHVkZXModCkpcmV0dXJuISEoIVtcImV0aF9nZXRUcmFuc2FjdGlvbkJ5SGFzaFwiLFwiZXRoX2dldFRyYW5zYWN0aW9uUmVjZWlwdFwiXS5pbmNsdWRlcyhlLm1ldGhvZCl8fHQmJnQuYmxvY2tIYXNoJiZcIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiIT09dC5ibG9ja0hhc2gpfWNsZWFyQmVmb3JlKGUpe2NvbnN0IHQ9dGhpcyxyPU51bWJlci5wYXJzZUludChlLDE2KTtPYmplY3Qua2V5cyh0LmNhY2hlKS5tYXAoTnVtYmVyKS5maWx0ZXIoZT0+ZTxyKS5mb3JFYWNoKGU9PmRlbGV0ZSB0LmNhY2hlW2VdKX19fSxmdW5jdGlvbihlLHQscil7Y29uc3Qgbj1yKDkzKTtmdW5jdGlvbiBpKGUpe3JldHVyblwibmV2ZXJcIiE9PXMoZSl9ZnVuY3Rpb24gbyhlKXtjb25zdCB0PWEoZSk7cmV0dXJuIHQ+PWUucGFyYW1zLmxlbmd0aD9lLnBhcmFtczpcImV0aF9nZXRCbG9ja0J5TnVtYmVyXCI9PT1lLm1ldGhvZD9lLnBhcmFtcy5zbGljZSgxKTplLnBhcmFtcy5zbGljZSgwLHQpfWZ1bmN0aW9uIGEoZSl7c3dpdGNoKGUubWV0aG9kKXtjYXNlXCJldGhfZ2V0U3RvcmFnZUF0XCI6cmV0dXJuIDI7Y2FzZVwiZXRoX2dldEJhbGFuY2VcIjpjYXNlXCJldGhfZ2V0Q29kZVwiOmNhc2VcImV0aF9nZXRUcmFuc2FjdGlvbkNvdW50XCI6Y2FzZVwiZXRoX2NhbGxcIjpyZXR1cm4gMTtjYXNlXCJldGhfZ2V0QmxvY2tCeU51bWJlclwiOnJldHVybiAwO2RlZmF1bHQ6cmV0dXJufX1mdW5jdGlvbiBzKGUpe3N3aXRjaChlLm1ldGhvZCl7Y2FzZVwid2ViM19jbGllbnRWZXJzaW9uXCI6Y2FzZVwid2ViM19zaGEzXCI6Y2FzZVwiZXRoX3Byb3RvY29sVmVyc2lvblwiOmNhc2VcImV0aF9nZXRCbG9ja1RyYW5zYWN0aW9uQ291bnRCeUhhc2hcIjpjYXNlXCJldGhfZ2V0VW5jbGVDb3VudEJ5QmxvY2tIYXNoXCI6Y2FzZVwiZXRoX2dldENvZGVcIjpjYXNlXCJldGhfZ2V0QmxvY2tCeUhhc2hcIjpjYXNlXCJldGhfZ2V0VHJhbnNhY3Rpb25CeUhhc2hcIjpjYXNlXCJldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrSGFzaEFuZEluZGV4XCI6Y2FzZVwiZXRoX2dldFRyYW5zYWN0aW9uUmVjZWlwdFwiOmNhc2VcImV0aF9nZXRVbmNsZUJ5QmxvY2tIYXNoQW5kSW5kZXhcIjpjYXNlXCJldGhfZ2V0Q29tcGlsZXJzXCI6Y2FzZVwiZXRoX2NvbXBpbGVMTExcIjpjYXNlXCJldGhfY29tcGlsZVNvbGlkaXR5XCI6Y2FzZVwiZXRoX2NvbXBpbGVTZXJwZW50XCI6Y2FzZVwic2hoX3ZlcnNpb25cIjpjYXNlXCJ0ZXN0X3Blcm1hQ2FjaGVcIjpyZXR1cm5cInBlcm1hXCI7Y2FzZVwiZXRoX2dldEJsb2NrQnlOdW1iZXJcIjpjYXNlXCJldGhfZ2V0QmxvY2tUcmFuc2FjdGlvbkNvdW50QnlOdW1iZXJcIjpjYXNlXCJldGhfZ2V0VW5jbGVDb3VudEJ5QmxvY2tOdW1iZXJcIjpjYXNlXCJldGhfZ2V0VHJhbnNhY3Rpb25CeUJsb2NrTnVtYmVyQW5kSW5kZXhcIjpjYXNlXCJldGhfZ2V0VW5jbGVCeUJsb2NrTnVtYmVyQW5kSW5kZXhcIjpjYXNlXCJ0ZXN0X2ZvcmtDYWNoZVwiOnJldHVyblwiZm9ya1wiO2Nhc2VcImV0aF9nYXNQcmljZVwiOmNhc2VcImV0aF9ibG9ja051bWJlclwiOmNhc2VcImV0aF9nZXRCYWxhbmNlXCI6Y2FzZVwiZXRoX2dldFN0b3JhZ2VBdFwiOmNhc2VcImV0aF9nZXRUcmFuc2FjdGlvbkNvdW50XCI6Y2FzZVwiZXRoX2NhbGxcIjpjYXNlXCJldGhfZXN0aW1hdGVHYXNcIjpjYXNlXCJldGhfZ2V0RmlsdGVyTG9nc1wiOmNhc2VcImV0aF9nZXRMb2dzXCI6Y2FzZVwidGVzdF9ibG9ja0NhY2hlXCI6cmV0dXJuXCJibG9ja1wiO2Nhc2VcIm5ldF92ZXJzaW9uXCI6Y2FzZVwibmV0X3BlZXJDb3VudFwiOmNhc2VcIm5ldF9saXN0ZW5pbmdcIjpjYXNlXCJldGhfc3luY2luZ1wiOmNhc2VcImV0aF9zaWduXCI6Y2FzZVwiZXRoX2NvaW5iYXNlXCI6Y2FzZVwiZXRoX21pbmluZ1wiOmNhc2VcImV0aF9oYXNocmF0ZVwiOmNhc2VcImV0aF9hY2NvdW50c1wiOmNhc2VcImV0aF9zZW5kVHJhbnNhY3Rpb25cIjpjYXNlXCJldGhfc2VuZFJhd1RyYW5zYWN0aW9uXCI6Y2FzZVwiZXRoX25ld0ZpbHRlclwiOmNhc2VcImV0aF9uZXdCbG9ja0ZpbHRlclwiOmNhc2VcImV0aF9uZXdQZW5kaW5nVHJhbnNhY3Rpb25GaWx0ZXJcIjpjYXNlXCJldGhfdW5pbnN0YWxsRmlsdGVyXCI6Y2FzZVwiZXRoX2dldEZpbHRlckNoYW5nZXNcIjpjYXNlXCJldGhfZ2V0V29ya1wiOmNhc2VcImV0aF9zdWJtaXRXb3JrXCI6Y2FzZVwiZXRoX3N1Ym1pdEhhc2hyYXRlXCI6Y2FzZVwiZGJfcHV0U3RyaW5nXCI6Y2FzZVwiZGJfZ2V0U3RyaW5nXCI6Y2FzZVwiZGJfcHV0SGV4XCI6Y2FzZVwiZGJfZ2V0SGV4XCI6Y2FzZVwic2hoX3Bvc3RcIjpjYXNlXCJzaGhfbmV3SWRlbnRpdHlcIjpjYXNlXCJzaGhfaGFzSWRlbnRpdHlcIjpjYXNlXCJzaGhfbmV3R3JvdXBcIjpjYXNlXCJzaGhfYWRkVG9Hcm91cFwiOmNhc2VcInNoaF9uZXdGaWx0ZXJcIjpjYXNlXCJzaGhfdW5pbnN0YWxsRmlsdGVyXCI6Y2FzZVwic2hoX2dldEZpbHRlckNoYW5nZXNcIjpjYXNlXCJzaGhfZ2V0TWVzc2FnZXNcIjpjYXNlXCJ0ZXN0X25ldmVyQ2FjaGVcIjpyZXR1cm5cIm5ldmVyXCJ9fWUuZXhwb3J0cz17Y2FjaGVJZGVudGlmaWVyRm9yUGF5bG9hZDpmdW5jdGlvbihlLHQpe2NvbnN0IHI9dD9vKGUpOmUucGFyYW1zO3JldHVybiBpKGUpP2UubWV0aG9kK1wiOlwiK24ocik6bnVsbH0sY2FuQ2FjaGU6aSxibG9ja1RhZ0ZvclBheWxvYWQ6ZnVuY3Rpb24oZSl7bGV0IHQ9YShlKTtpZih0Pj1lLnBhcmFtcy5sZW5ndGgpcmV0dXJuIG51bGw7cmV0dXJuIGUucGFyYW1zW3RdfSxwYXJhbXNXaXRob3V0QmxvY2tUYWc6byxibG9ja1RhZ1BhcmFtSW5kZXg6YSxjYWNoZVR5cGVGb3JQYXlsb2FkOnN9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUscil7Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnRhc2tzPVtdLHRoaXMuY291bnQ9ZX1zY2hlZCgpe2lmKHRoaXMuY291bnQ+MCYmdGhpcy50YXNrcy5sZW5ndGg+MCl7dGhpcy5jb3VudC0tO2xldCBlPXRoaXMudGFza3Muc2hpZnQoKTtpZih2b2lkIDA9PT1lKXRocm93XCJVbmV4cGVjdGVkIHVuZGVmaW5lZCB2YWx1ZSBpbiB0YXNrcyBsaXN0XCI7ZSgpfX1hY3F1aXJlKCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57dGhpcy50YXNrcy5wdXNoKCgpPT57dmFyIGU9ITE7dCgoKT0+e2V8fChlPSEwLHRoaXMuY291bnQrKyx0aGlzLnNjaGVkKCkpfSl9KSxlJiZlLm5leHRUaWNrP2UubmV4dFRpY2sodGhpcy5zY2hlZC5iaW5kKHRoaXMpKTpyKHRoaXMuc2NoZWQuYmluZCh0aGlzKSl9KX11c2UoZSl7cmV0dXJuIHRoaXMuYWNxdWlyZSgpLnRoZW4odD0+ZSgpLnRoZW4oZT0+KHQoKSxlKSkuY2F0Y2goZT0+e3Rocm93IHQoKSxlfSkpfX10LlNlbWFwaG9yZT1uO3QuTXV0ZXg9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoMSl9fX0pLmNhbGwodGhpcyxyKDMpLHIoMzMpLnNldEltbWVkaWF0ZSl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybih0LHIsbixpKT0+e2NvbnN0IG89ZVt0Lm1ldGhvZF07cmV0dXJuIHZvaWQgMD09PW8/bigpOlwiZnVuY3Rpb25cIj09dHlwZW9mIG8/byh0LHIsbixpKTooci5yZXN1bHQ9byxpKCkpfX19LGZ1bmN0aW9uKGUsdCxyKXtjb25zdCBuPXIoODEpLGk9cigzOSksbz1yKDIyMCkse2JuVG9IZXg6YSxoZXhUb0ludDpzLGluY3JlbWVudEhleEludDpmLG1pbkJsb2NrUmVmOnUsYmxvY2tSZWZJc051bWJlcjpjfT1yKDIzKTtlLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBve2NvbnN0cnVjdG9yKHtwcm92aWRlcjplLHBhcmFtczp0fSl7c3VwZXIoKSx0aGlzLnR5cGU9XCJsb2dcIix0aGlzLmV0aFF1ZXJ5PW5ldyBuKGUpLHRoaXMucGFyYW1zPU9iamVjdC5hc3NpZ24oe2Zyb21CbG9jazpcImxhdGVzdFwiLHRvQmxvY2s6XCJsYXRlc3RcIixhZGRyZXNzOnZvaWQgMCx0b3BpY3M6W119LHQpLHRoaXMucGFyYW1zLmFkZHJlc3MmJihBcnJheS5pc0FycmF5KHRoaXMucGFyYW1zLmFkZHJlc3MpfHwodGhpcy5wYXJhbXMuYWRkcmVzcz1bdGhpcy5wYXJhbXMuYWRkcmVzc10pLHRoaXMucGFyYW1zLmFkZHJlc3M9dGhpcy5wYXJhbXMuYWRkcmVzcy5tYXAoZT0+ZS50b0xvd2VyQ2FzZSgpKSl9YXN5bmMgaW5pdGlhbGl6ZSh7Y3VycmVudEJsb2NrOmV9KXtsZXQgdD10aGlzLnBhcmFtcy5mcm9tQmxvY2s7W1wibGF0ZXN0XCIsXCJwZW5kaW5nXCJdLmluY2x1ZGVzKHQpJiYodD1lKSxcImVhcmxpZXN0XCI9PT10JiYodD1cIjB4MFwiKSx0aGlzLnBhcmFtcy5mcm9tQmxvY2s9dDtjb25zdCByPXUodGhpcy5wYXJhbXMudG9CbG9jayxlKSxuPU9iamVjdC5hc3NpZ24oe30sdGhpcy5wYXJhbXMse3RvQmxvY2s6cn0pLGk9YXdhaXQgdGhpcy5fZmV0Y2hMb2dzKG4pO3RoaXMuYWRkSW5pdGlhbFJlc3VsdHMoaSl9YXN5bmMgdXBkYXRlKHtvbGRCbG9jazplLG5ld0Jsb2NrOnR9KXtjb25zdCByPXQ7bGV0IG47bj1lP2YoZSk6dDtjb25zdCBpPU9iamVjdC5hc3NpZ24oe30sdGhpcy5wYXJhbXMse2Zyb21CbG9jazpuLHRvQmxvY2s6cn0pLG89KGF3YWl0IHRoaXMuX2ZldGNoTG9ncyhpKSkuZmlsdGVyKGU9PnRoaXMubWF0Y2hMb2coZSkpO3RoaXMuYWRkUmVzdWx0cyhvKX1hc3luYyBfZmV0Y2hMb2dzKGUpe3JldHVybiBhd2FpdCBpKHQ9PnRoaXMuZXRoUXVlcnkuZ2V0TG9ncyhlLHQpKSgpfW1hdGNoTG9nKGUpe2lmKHModGhpcy5wYXJhbXMuZnJvbUJsb2NrKT49cyhlLmJsb2NrTnVtYmVyKSlyZXR1cm4hMTtpZihjKHRoaXMucGFyYW1zLnRvQmxvY2spJiZzKHRoaXMucGFyYW1zLnRvQmxvY2spPD1zKGUuYmxvY2tOdW1iZXIpKXJldHVybiExO2NvbnN0IHQ9ZS5hZGRyZXNzJiZlLmFkZHJlc3MudG9Mb3dlckNhc2UoKTtpZih0aGlzLnBhcmFtcy5hZGRyZXNzJiZ0JiYhdGhpcy5wYXJhbXMuYWRkcmVzcy5pbmNsdWRlcyh0KSlyZXR1cm4hMTtyZXR1cm4gdGhpcy5wYXJhbXMudG9waWNzLmV2ZXJ5KCh0LHIpPT57bGV0IG49ZS50b3BpY3Nbcl07aWYoIW4pcmV0dXJuITE7bj1uLnRvTG93ZXJDYXNlKCk7bGV0IGk9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtpZihpLmluY2x1ZGVzKG51bGwpKXJldHVybiEwO2k9aS5tYXAoZT0+ZS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gaS5pbmNsdWRlcyhuKX0pfX19LGZ1bmN0aW9uKGUsdCxyKXtjb25zdCBuPXIoNDkpO2UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWxsUmVzdWx0cz1bXX1hc3luYyB1cGRhdGUoKXt0aHJvdyBuZXcgRXJyb3IoXCJCYXNlRmlsdGVyV2l0aEhpc3RvcnkgLSBubyB1cGRhdGUgbWV0aG9kIHNwZWNpZmllZFwiKX1hZGRSZXN1bHRzKGUpe3RoaXMuYWxsUmVzdWx0cz10aGlzLmFsbFJlc3VsdHMuY29uY2F0KGUpLHN1cGVyLmFkZFJlc3VsdHMoZSl9YWRkSW5pdGlhbFJlc3VsdHMoZSl7dGhpcy5hbGxSZXN1bHRzPXRoaXMuYWxsUmVzdWx0cy5jb25jYXQoZSksc3VwZXIuYWRkSW5pdGlhbFJlc3VsdHMoZSl9Z2V0QWxsUmVzdWx0cygpe3JldHVybiB0aGlzLmFsbFJlc3VsdHN9fX0sZnVuY3Rpb24oZSx0LHIpe2NvbnN0IG49cig0OSksaT1yKDUwKSx7aW5jcmVtZW50SGV4SW50Om99PXIoMjMpO2UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3Ioe3Byb3ZpZGVyOmUscGFyYW1zOnR9KXtzdXBlcigpLHRoaXMudHlwZT1cImJsb2NrXCIsdGhpcy5wcm92aWRlcj1lfWFzeW5jIHVwZGF0ZSh7b2xkQmxvY2s6ZSxuZXdCbG9jazp0fSl7Y29uc3Qgcj10LG49byhlKSxhPShhd2FpdCBpKHtwcm92aWRlcjp0aGlzLnByb3ZpZGVyLGZyb21CbG9jazpuLHRvQmxvY2s6cn0pKS5tYXAoZT0+ZS5oYXNoKTt0aGlzLmFkZFJlc3VsdHMoYSl9fX0sZnVuY3Rpb24oZSx0LHIpe2NvbnN0IG49cigyMjMpLGk9cig0OSksbz1yKDUwKSx7aW5jcmVtZW50SGV4SW50OmF9PXIoMjMpO2UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGl7Y29uc3RydWN0b3Ioe3Byb3ZpZGVyOmV9KXtzdXBlcigpLHRoaXMudHlwZT1cInR4XCIsdGhpcy5wcm92aWRlcj1lfWFzeW5jIHVwZGF0ZSh7b2xkQmxvY2s6ZX0pe2NvbnN0IHQ9ZSxyPWEoZSksaT1hd2FpdCBvKHtwcm92aWRlcjp0aGlzLnByb3ZpZGVyLGZyb21CbG9jazpyLHRvQmxvY2s6dH0pLHM9bihpLGU9PmUudHJhbnNhY3Rpb25zKTt0aGlzLmFkZFJlc3VsdHMocyl9fX0sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbihlLHIpe3ZhciBuPVwiW29iamVjdCBBcmd1bWVudHNdXCIsaT1cIltvYmplY3QgTWFwXVwiLG89XCJbb2JqZWN0IE9iamVjdF1cIixhPVwiW29iamVjdCBTZXRdXCIscz0vXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLGY9L15cXHcqJC8sdT0vXlxcLi8sYz0vW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2csaD0vXFxcXChcXFxcKT8vZyxkPS9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC8sbD0vXig/OjB8WzEtOV1cXGQqKSQvLHA9e307cFtcIltvYmplY3QgRmxvYXQzMkFycmF5XVwiXT1wW1wiW29iamVjdCBGbG9hdDY0QXJyYXldXCJdPXBbXCJbb2JqZWN0IEludDhBcnJheV1cIl09cFtcIltvYmplY3QgSW50MTZBcnJheV1cIl09cFtcIltvYmplY3QgSW50MzJBcnJheV1cIl09cFtcIltvYmplY3QgVWludDhBcnJheV1cIl09cFtcIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldXCJdPXBbXCJbb2JqZWN0IFVpbnQxNkFycmF5XVwiXT1wW1wiW29iamVjdCBVaW50MzJBcnJheV1cIl09ITAscFtuXT1wW1wiW29iamVjdCBBcnJheV1cIl09cFtcIltvYmplY3QgQXJyYXlCdWZmZXJdXCJdPXBbXCJbb2JqZWN0IEJvb2xlYW5dXCJdPXBbXCJbb2JqZWN0IERhdGFWaWV3XVwiXT1wW1wiW29iamVjdCBEYXRlXVwiXT1wW1wiW29iamVjdCBFcnJvcl1cIl09cFtcIltvYmplY3QgRnVuY3Rpb25dXCJdPXBbaV09cFtcIltvYmplY3QgTnVtYmVyXVwiXT1wW29dPXBbXCJbb2JqZWN0IFJlZ0V4cF1cIl09cFthXT1wW1wiW29iamVjdCBTdHJpbmddXCJdPXBbXCJbb2JqZWN0IFdlYWtNYXBdXCJdPSExO3ZhciBiPVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiZlLk9iamVjdD09PU9iamVjdCYmZSx5PVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixnPWJ8fHl8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSx2PXQmJiF0Lm5vZGVUeXBlJiZ0LG09diYmXCJvYmplY3RcIj09dHlwZW9mIHImJnImJiFyLm5vZGVUeXBlJiZyLHc9bSYmbS5leHBvcnRzPT09diYmYi5wcm9jZXNzLF89ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHcmJncuYmluZGluZyhcInV0aWxcIil9Y2F0Y2goZSl7fX0oKSxFPV8mJl8uaXNUeXBlZEFycmF5O2Z1bmN0aW9uIFMoZSx0KXtmb3IodmFyIHI9LTEsbj1lP2UubGVuZ3RoOjAsaT1BcnJheShuKTsrK3I8bjspaVtyXT10KGVbcl0scixlKTtyZXR1cm4gaX1mdW5jdGlvbiBBKGUsdCl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGgsaT1lLmxlbmd0aDsrK3I8bjspZVtpK3JdPXRbcl07cmV0dXJuIGV9ZnVuY3Rpb24geChlLHQpe2Zvcih2YXIgcj0tMSxuPWU/ZS5sZW5ndGg6MDsrK3I8bjspaWYodChlW3JdLHIsZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gayhlKXt2YXIgdD0hMTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLnRvU3RyaW5nKXRyeXt0PSEhKGUrXCJcIil9Y2F0Y2goZSl7fXJldHVybiB0fWZ1bmN0aW9uIE0oZSl7dmFyIHQ9LTEscj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUsbil7clsrK3RdPVtuLGVdfSkpLHJ9ZnVuY3Rpb24gVChlKXt2YXIgdD0tMSxyPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7clsrK3RdPWV9KSkscn12YXIgSSxSLFAsTD1BcnJheS5wcm90b3R5cGUsQj1GdW5jdGlvbi5wcm90b3R5cGUsQz1PYmplY3QucHJvdG90eXBlLE89Z1tcIl9fY29yZS1qc19zaGFyZWRfX1wiXSxOPShJPS9bXi5dKyQvLmV4ZWMoTyYmTy5rZXlzJiZPLmtleXMuSUVfUFJPVE98fFwiXCIpKT9cIlN5bWJvbChzcmMpXzEuXCIrSTpcIlwiLGo9Qi50b1N0cmluZyxEPUMuaGFzT3duUHJvcGVydHksVT1DLnRvU3RyaW5nLHo9UmVnRXhwKFwiXlwiK2ouY2FsbChEKS5yZXBsYWNlKC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLFwiJDEuKj9cIikrXCIkXCIpLHE9Zy5TeW1ib2wsRj1nLlVpbnQ4QXJyYXksSz1DLnByb3BlcnR5SXNFbnVtZXJhYmxlLEg9TC5zcGxpY2UsVj1xP3EuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMCxZPShSPU9iamVjdC5rZXlzLFA9T2JqZWN0LGZ1bmN0aW9uKGUpe3JldHVybiBSKFAoZSkpfSksVz1UZShnLFwiRGF0YVZpZXdcIiksRz1UZShnLFwiTWFwXCIpLFo9VGUoZyxcIlByb21pc2VcIiksSj1UZShnLFwiU2V0XCIpLCQ9VGUoZyxcIldlYWtNYXBcIiksWD1UZShPYmplY3QsXCJjcmVhdGVcIiksUT1qZShXKSxlZT1qZShHKSx0ZT1qZShaKSxyZT1qZShKKSxuZT1qZSgkKSxpZT1xP3EucHJvdG90eXBlOnZvaWQgMCxvZT1pZT9pZS52YWx1ZU9mOnZvaWQgMCxhZT1pZT9pZS50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gc2UoZSl7dmFyIHQ9LTEscj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8cjspe3ZhciBuPWVbdF07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gZmUoZSl7dmFyIHQ9LTEscj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8cjspe3ZhciBuPWVbdF07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gdWUoZSl7dmFyIHQ9LTEscj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8cjspe3ZhciBuPWVbdF07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gY2UoZSl7dmFyIHQ9LTEscj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuX19kYXRhX189bmV3IHVlOysrdDxyOyl0aGlzLmFkZChlW3RdKX1mdW5jdGlvbiBoZShlKXt0aGlzLl9fZGF0YV9fPW5ldyBmZShlKX1mdW5jdGlvbiBkZShlLHQpe3ZhciByPXFlKGUpfHx6ZShlKT9mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0tMSxuPUFycmF5KGUpOysrcjxlOyluW3JdPXQocik7cmV0dXJuIG59KGUubGVuZ3RoLFN0cmluZyk6W10sbj1yLmxlbmd0aCxpPSEhbjtmb3IodmFyIG8gaW4gZSkhdCYmIUQuY2FsbChlLG8pfHxpJiYoXCJsZW5ndGhcIj09b3x8UGUobyxuKSl8fHIucHVzaChvKTtyZXR1cm4gcn1mdW5jdGlvbiBsZShlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aDtyLS07KWlmKFVlKGVbcl1bMF0sdCkpcmV0dXJuIHI7cmV0dXJuLTF9c2UucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1YP1gobnVsbCk6e319LHNlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXX0sc2UucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKFgpe3ZhciByPXRbZV07cmV0dXJuXCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fXCI9PT1yP3ZvaWQgMDpyfXJldHVybiBELmNhbGwodCxlKT90W2VdOnZvaWQgMH0sc2UucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBYP3ZvaWQgMCE9PXRbZV06RC5jYWxsKHQsZSl9LHNlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fX2RhdGFfX1tlXT1YJiZ2b2lkIDA9PT10P1wiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiOnQsdGhpc30sZmUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXX0sZmUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLHI9bGUodCxlKTtyZXR1cm4hKHI8MCkmJihyPT10Lmxlbmd0aC0xP3QucG9wKCk6SC5jYWxsKHQsciwxKSwhMCl9LGZlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPWxlKHQsZSk7cmV0dXJuIHI8MD92b2lkIDA6dFtyXVsxXX0sZmUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gbGUodGhpcy5fX2RhdGFfXyxlKT4tMX0sZmUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX19kYXRhX18sbj1sZShyLGUpO3JldHVybiBuPDA/ci5wdXNoKFtlLHRdKTpyW25dWzFdPXQsdGhpc30sdWUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgc2UsbWFwOm5ldyhHfHxmZSksc3RyaW5nOm5ldyBzZX19LHVlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7cmV0dXJuIE1lKHRoaXMsZSkuZGVsZXRlKGUpfSx1ZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBNZSh0aGlzLGUpLmdldChlKX0sdWUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gTWUodGhpcyxlKS5oYXMoZSl9LHVlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWUodGhpcyxlKS5zZXQoZSx0KSx0aGlzfSxjZS5wcm90b3R5cGUuYWRkPWNlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLFwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiKSx0aGlzfSxjZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX0saGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1uZXcgZmV9LGhlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uZGVsZXRlKGUpfSxoZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX0saGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9LGhlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9fZGF0YV9fO2lmKHIgaW5zdGFuY2VvZiBmZSl7dmFyIG49ci5fX2RhdGFfXztpZighR3x8bi5sZW5ndGg8MTk5KXJldHVybiBuLnB1c2goW2UsdF0pLHRoaXM7cj10aGlzLl9fZGF0YV9fPW5ldyB1ZShuKX1yZXR1cm4gci5zZXQoZSx0KSx0aGlzfTt2YXIgcGUsYmUseWU9KHBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJmdlKGUsdCxaZSl9LGZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm4gZTtpZighRmUoZSkpcmV0dXJuIHBlKGUsdCk7Zm9yKHZhciByPWUubGVuZ3RoLG49YmU/cjotMSxpPU9iamVjdChlKTsoYmU/bi0tOisrbjxyKSYmITEhPT10KGlbbl0sbixpKTspO3JldHVybiBlfSk7dmFyIGdlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7Zm9yKHZhciBpPS0xLG89T2JqZWN0KHQpLGE9bih0KSxzPWEubGVuZ3RoO3MtLTspe3ZhciBmPWFbZT9zOisraV07aWYoITE9PT1yKG9bZl0sZixvKSlicmVha31yZXR1cm4gdH19KCk7ZnVuY3Rpb24gdmUoZSx0KXtmb3IodmFyIHI9MCxuPSh0PUxlKHQsZSk/W3RdOnhlKHQpKS5sZW5ndGg7bnVsbCE9ZSYmcjxuOyllPWVbTmUodFtyKytdKV07cmV0dXJuIHImJnI9PW4/ZTp2b2lkIDB9ZnVuY3Rpb24gbWUoZSx0KXtyZXR1cm4gbnVsbCE9ZSYmdCBpbiBPYmplY3QoZSl9ZnVuY3Rpb24gd2UoZSx0LHIscyxmKXtyZXR1cm4gZT09PXR8fChudWxsPT1lfHxudWxsPT10fHwhVmUoZSkmJiFZZSh0KT9lIT1lJiZ0IT10OmZ1bmN0aW9uKGUsdCxyLHMsZix1KXt2YXIgYz1xZShlKSxoPXFlKHQpLGQ9XCJbb2JqZWN0IEFycmF5XVwiLGw9XCJbb2JqZWN0IEFycmF5XVwiO2N8fChkPShkPUllKGUpKT09bj9vOmQpO2h8fChsPShsPUllKHQpKT09bj9vOmwpO3ZhciBwPWQ9PW8mJiFrKGUpLGI9bD09byYmIWsodCkseT1kPT1sO2lmKHkmJiFwKXJldHVybiB1fHwodT1uZXcgaGUpLGN8fEdlKGUpP2tlKGUsdCxyLHMsZix1KTpmdW5jdGlvbihlLHQscixuLG8scyxmKXtzd2l0Y2gocil7Y2FzZVwiW29iamVjdCBEYXRhVmlld11cIjppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2VcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IW4obmV3IEYoZSksbmV3IEYodCkpKTtjYXNlXCJbb2JqZWN0IEJvb2xlYW5dXCI6Y2FzZVwiW29iamVjdCBEYXRlXVwiOmNhc2VcIltvYmplY3QgTnVtYmVyXVwiOnJldHVybiBVZSgrZSwrdCk7Y2FzZVwiW29iamVjdCBFcnJvcl1cIjpyZXR1cm4gZS5uYW1lPT10Lm5hbWUmJmUubWVzc2FnZT09dC5tZXNzYWdlO2Nhc2VcIltvYmplY3QgUmVnRXhwXVwiOmNhc2VcIltvYmplY3QgU3RyaW5nXVwiOnJldHVybiBlPT10K1wiXCI7Y2FzZSBpOnZhciB1PU07Y2FzZSBhOnZhciBjPTImcztpZih1fHwodT1UKSxlLnNpemUhPXQuc2l6ZSYmIWMpcmV0dXJuITE7dmFyIGg9Zi5nZXQoZSk7aWYoaClyZXR1cm4gaD09dDtzfD0xLGYuc2V0KGUsdCk7dmFyIGQ9a2UodShlKSx1KHQpLG4sbyxzLGYpO3JldHVybiBmLmRlbGV0ZShlKSxkO2Nhc2VcIltvYmplY3QgU3ltYm9sXVwiOmlmKG9lKXJldHVybiBvZS5jYWxsKGUpPT1vZS5jYWxsKHQpfXJldHVybiExfShlLHQsZCxyLHMsZix1KTtpZighKDImZikpe3ZhciBnPXAmJkQuY2FsbChlLFwiX193cmFwcGVkX19cIiksdj1iJiZELmNhbGwodCxcIl9fd3JhcHBlZF9fXCIpO2lmKGd8fHYpe3ZhciBtPWc/ZS52YWx1ZSgpOmUsdz12P3QudmFsdWUoKTp0O3JldHVybiB1fHwodT1uZXcgaGUpLHIobSx3LHMsZix1KX19aWYoIXkpcmV0dXJuITE7cmV0dXJuIHV8fCh1PW5ldyBoZSksZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBhPTImaSxzPVplKGUpLGY9cy5sZW5ndGgsdT1aZSh0KS5sZW5ndGg7aWYoZiE9dSYmIWEpcmV0dXJuITE7dmFyIGM9Zjtmb3IoO2MtLTspe3ZhciBoPXNbY107aWYoIShhP2ggaW4gdDpELmNhbGwodCxoKSkpcmV0dXJuITF9dmFyIGQ9by5nZXQoZSk7aWYoZCYmby5nZXQodCkpcmV0dXJuIGQ9PXQ7dmFyIGw9ITA7by5zZXQoZSx0KSxvLnNldCh0LGUpO3ZhciBwPWE7Zm9yKDsrK2M8Zjspe2g9c1tjXTt2YXIgYj1lW2hdLHk9dFtoXTtpZihuKXZhciBnPWE/bih5LGIsaCx0LGUsbyk6bihiLHksaCxlLHQsbyk7aWYoISh2b2lkIDA9PT1nP2I9PT15fHxyKGIseSxuLGksbyk6Zykpe2w9ITE7YnJlYWt9cHx8KHA9XCJjb25zdHJ1Y3RvclwiPT1oKX1pZihsJiYhcCl7dmFyIHY9ZS5jb25zdHJ1Y3RvcixtPXQuY29uc3RydWN0b3I7dj09bXx8IShcImNvbnN0cnVjdG9yXCJpbiBlKXx8IShcImNvbnN0cnVjdG9yXCJpbiB0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgdiYmdiBpbnN0YW5jZW9mIHYmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG0mJm0gaW5zdGFuY2VvZiBtfHwobD0hMSl9cmV0dXJuIG8uZGVsZXRlKGUpLG8uZGVsZXRlKHQpLGx9KGUsdCxyLHMsZix1KX0oZSx0LHdlLHIscyxmKSl9ZnVuY3Rpb24gX2UoZSl7cmV0dXJuISghVmUoZSl8fGZ1bmN0aW9uKGUpe3JldHVybiEhTiYmTiBpbiBlfShlKSkmJihLZShlKXx8ayhlKT96OmQpLnRlc3QoamUoZSkpfWZ1bmN0aW9uIEVlKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpudWxsPT1lP0plOlwib2JqZWN0XCI9PXR5cGVvZiBlP3FlKGUpP2Z1bmN0aW9uKGUsdCl7aWYoTGUoZSkmJkJlKHQpKXJldHVybiBDZShOZShlKSx0KTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPW51bGw9PWU/dm9pZCAwOnZlKGUsdCk7cmV0dXJuIHZvaWQgMD09PW4/cjpufShyLGUpO3JldHVybiB2b2lkIDA9PT1uJiZuPT09dD9mdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT1lJiZmdW5jdGlvbihlLHQscil7dD1MZSh0LGUpP1t0XTp4ZSh0KTt2YXIgbixpPS0xLG89dC5sZW5ndGg7Zm9yKDsrK2k8bzspe3ZhciBhPU5lKHRbaV0pO2lmKCEobj1udWxsIT1lJiZyKGUsYSkpKWJyZWFrO2U9ZVthXX1pZihuKXJldHVybiBuO3JldHVybiEhKG89ZT9lLmxlbmd0aDowKSYmSGUobykmJlBlKGEsbykmJihxZShlKXx8emUoZSkpfShlLHQsbWUpfShyLGUpOndlKHQsbix2b2lkIDAsMyl9fShlWzBdLGVbMV0pOmZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUpe3ZhciB0PVplKGUpLHI9dC5sZW5ndGg7Zm9yKDtyLS07KXt2YXIgbj10W3JdLGk9ZVtuXTt0W3JdPVtuLGksQmUoaSldfXJldHVybiB0fShlKTtpZigxPT10Lmxlbmd0aCYmdFswXVsyXSlyZXR1cm4gQ2UodFswXVswXSx0WzBdWzFdKTtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHI9PT1lfHxmdW5jdGlvbihlLHQscixuKXt2YXIgaT1yLmxlbmd0aCxvPWksYT0hbjtpZihudWxsPT1lKXJldHVybiFvO2ZvcihlPU9iamVjdChlKTtpLS07KXt2YXIgcz1yW2ldO2lmKGEmJnNbMl0/c1sxXSE9PWVbc1swXV06IShzWzBdaW4gZSkpcmV0dXJuITF9Zm9yKDsrK2k8bzspe3ZhciBmPShzPXJbaV0pWzBdLHU9ZVtmXSxjPXNbMV07aWYoYSYmc1syXSl7aWYodm9pZCAwPT09dSYmIShmIGluIGUpKXJldHVybiExfWVsc2V7dmFyIGg9bmV3IGhlO2lmKG4pdmFyIGQ9bih1LGMsZixlLHQsaCk7aWYoISh2b2lkIDA9PT1kP3dlKGMsdSxuLDMsaCk6ZCkpcmV0dXJuITF9fXJldHVybiEwfShyLGUsdCl9fShlKTpMZSh0PWUpPyhyPU5lKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3JdfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB2ZSh0LGUpfX0odCk7dmFyIHQscn1mdW5jdGlvbiBTZShlKXtpZihyPSh0PWUpJiZ0LmNvbnN0cnVjdG9yLG49XCJmdW5jdGlvblwiPT10eXBlb2YgciYmci5wcm90b3R5cGV8fEMsdCE9PW4pcmV0dXJuIFkoZSk7dmFyIHQscixuLGk9W107Zm9yKHZhciBvIGluIE9iamVjdChlKSlELmNhbGwoZSxvKSYmXCJjb25zdHJ1Y3RvclwiIT1vJiZpLnB1c2gobyk7cmV0dXJuIGl9ZnVuY3Rpb24gQWUoZSx0KXt2YXIgcj0tMSxuPUZlKGUpP0FycmF5KGUubGVuZ3RoKTpbXTtyZXR1cm4geWUoZSwoZnVuY3Rpb24oZSxpLG8pe25bKytyXT10KGUsaSxvKX0pKSxufWZ1bmN0aW9uIHhlKGUpe3JldHVybiBxZShlKT9lOk9lKGUpfWZ1bmN0aW9uIGtlKGUsdCxyLG4saSxvKXt2YXIgYT0yJmkscz1lLmxlbmd0aCxmPXQubGVuZ3RoO2lmKHMhPWYmJiEoYSYmZj5zKSlyZXR1cm4hMTt2YXIgdT1vLmdldChlKTtpZih1JiZvLmdldCh0KSlyZXR1cm4gdT09dDt2YXIgYz0tMSxoPSEwLGQ9MSZpP25ldyBjZTp2b2lkIDA7Zm9yKG8uc2V0KGUsdCksby5zZXQodCxlKTsrK2M8czspe3ZhciBsPWVbY10scD10W2NdO2lmKG4pdmFyIGI9YT9uKHAsbCxjLHQsZSxvKTpuKGwscCxjLGUsdCxvKTtpZih2b2lkIDAhPT1iKXtpZihiKWNvbnRpbnVlO2g9ITE7YnJlYWt9aWYoZCl7aWYoIXgodCwoZnVuY3Rpb24oZSx0KXtpZighZC5oYXModCkmJihsPT09ZXx8cihsLGUsbixpLG8pKSlyZXR1cm4gZC5hZGQodCl9KSkpe2g9ITE7YnJlYWt9fWVsc2UgaWYobCE9PXAmJiFyKGwscCxuLGksbykpe2g9ITE7YnJlYWt9fXJldHVybiBvLmRlbGV0ZShlKSxvLmRlbGV0ZSh0KSxofWZ1bmN0aW9uIE1lKGUsdCl7dmFyIHIsbixpPWUuX19kYXRhX187cmV0dXJuKFwic3RyaW5nXCI9PShuPXR5cGVvZihyPXQpKXx8XCJudW1iZXJcIj09bnx8XCJzeW1ib2xcIj09bnx8XCJib29sZWFuXCI9PW4/XCJfX3Byb3RvX19cIiE9PXI6bnVsbD09PXIpP2lbXCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJzdHJpbmdcIjpcImhhc2hcIl06aS5tYXB9ZnVuY3Rpb24gVGUoZSx0KXt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfShlLHQpO3JldHVybiBfZShyKT9yOnZvaWQgMH12YXIgSWU9ZnVuY3Rpb24oZSl7cmV0dXJuIFUuY2FsbChlKX07ZnVuY3Rpb24gUmUoZSl7cmV0dXJuIHFlKGUpfHx6ZShlKXx8ISEoViYmZSYmZVtWXSl9ZnVuY3Rpb24gUGUoZSx0KXtyZXR1cm4hISh0PW51bGw9PXQ/OTAwNzE5OTI1NDc0MDk5MTp0KSYmKFwibnVtYmVyXCI9PXR5cGVvZiBlfHxsLnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH1mdW5jdGlvbiBMZShlLHQpe2lmKHFlKGUpKXJldHVybiExO3ZhciByPXR5cGVvZiBlO3JldHVybiEoXCJudW1iZXJcIiE9ciYmXCJzeW1ib2xcIiE9ciYmXCJib29sZWFuXCIhPXImJm51bGwhPWUmJiFXZShlKSl8fChmLnRlc3QoZSl8fCFzLnRlc3QoZSl8fG51bGwhPXQmJmUgaW4gT2JqZWN0KHQpKX1mdW5jdGlvbiBCZShlKXtyZXR1cm4gZT09ZSYmIVZlKGUpfWZ1bmN0aW9uIENlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBudWxsIT1yJiYocltlXT09PXQmJih2b2lkIDAhPT10fHxlIGluIE9iamVjdChyKSkpfX0oVyYmXCJbb2JqZWN0IERhdGFWaWV3XVwiIT1JZShuZXcgVyhuZXcgQXJyYXlCdWZmZXIoMSkpKXx8RyYmSWUobmV3IEcpIT1pfHxaJiZcIltvYmplY3QgUHJvbWlzZV1cIiE9SWUoWi5yZXNvbHZlKCkpfHxKJiZJZShuZXcgSikhPWF8fCQmJlwiW29iamVjdCBXZWFrTWFwXVwiIT1JZShuZXcgJCkpJiYoSWU9ZnVuY3Rpb24oZSl7dmFyIHQ9VS5jYWxsKGUpLHI9dD09bz9lLmNvbnN0cnVjdG9yOnZvaWQgMCxuPXI/amUocik6dm9pZCAwO2lmKG4pc3dpdGNoKG4pe2Nhc2UgUTpyZXR1cm5cIltvYmplY3QgRGF0YVZpZXddXCI7Y2FzZSBlZTpyZXR1cm4gaTtjYXNlIHRlOnJldHVyblwiW29iamVjdCBQcm9taXNlXVwiO2Nhc2UgcmU6cmV0dXJuIGE7Y2FzZSBuZTpyZXR1cm5cIltvYmplY3QgV2Vha01hcF1cIn1yZXR1cm4gdH0pO3ZhciBPZT1EZSgoZnVuY3Rpb24oZSl7dmFyIHQ7ZT1udWxsPT0odD1lKT9cIlwiOmZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKFdlKGUpKXJldHVybiBhZT9hZS5jYWxsKGUpOlwiXCI7dmFyIHQ9ZStcIlwiO3JldHVyblwiMFwiPT10JiYxL2U9PS0xLzA/XCItMFwiOnR9KHQpO3ZhciByPVtdO3JldHVybiB1LnRlc3QoZSkmJnIucHVzaChcIlwiKSxlLnJlcGxhY2UoYywoZnVuY3Rpb24oZSx0LG4saSl7ci5wdXNoKG4/aS5yZXBsYWNlKGgsXCIkMVwiKTp0fHxlKX0pKSxyfSkpO2Z1bmN0aW9uIE5lKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxXZShlKSlyZXR1cm4gZTt2YXIgdD1lK1wiXCI7cmV0dXJuXCIwXCI9PXQmJjEvZT09LTEvMD9cIi0wXCI6dH1mdW5jdGlvbiBqZShlKXtpZihudWxsIT1lKXt0cnl7cmV0dXJuIGouY2FsbChlKX1jYXRjaChlKXt9dHJ5e3JldHVybiBlK1wiXCJ9Y2F0Y2goZSl7fX1yZXR1cm5cIlwifWZ1bmN0aW9uIERlKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZXx8dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTt2YXIgcj1mdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxpPXQ/dC5hcHBseSh0aGlzLG4pOm5bMF0sbz1yLmNhY2hlO2lmKG8uaGFzKGkpKXJldHVybiBvLmdldChpKTt2YXIgYT1lLmFwcGx5KHRoaXMsbik7cmV0dXJuIHIuY2FjaGU9by5zZXQoaSxhKSxhfTtyZXR1cm4gci5jYWNoZT1uZXcoRGUuQ2FjaGV8fHVlKSxyfWZ1bmN0aW9uIFVlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT1lJiZ0IT10fWZ1bmN0aW9uIHplKGUpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gWWUoZSkmJkZlKGUpfShlKSYmRC5jYWxsKGUsXCJjYWxsZWVcIikmJighSy5jYWxsKGUsXCJjYWxsZWVcIil8fFUuY2FsbChlKT09bil9RGUuQ2FjaGU9dWU7dmFyIHFlPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gRmUoZSl7cmV0dXJuIG51bGwhPWUmJkhlKGUubGVuZ3RoKSYmIUtlKGUpfWZ1bmN0aW9uIEtlKGUpe3ZhciB0PVZlKGUpP1UuY2FsbChlKTpcIlwiO3JldHVyblwiW29iamVjdCBGdW5jdGlvbl1cIj09dHx8XCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXVwiPT10fWZ1bmN0aW9uIEhlKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PTkwMDcxOTkyNTQ3NDA5OTF9ZnVuY3Rpb24gVmUoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuISFlJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiBZZShlKXtyZXR1cm4hIWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfWZ1bmN0aW9uIFdlKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfHxZZShlKSYmXCJbb2JqZWN0IFN5bWJvbF1cIj09VS5jYWxsKGUpfXZhciBHZT1FP2Z1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KX19KEUpOmZ1bmN0aW9uKGUpe3JldHVybiBZZShlKSYmSGUoZS5sZW5ndGgpJiYhIXBbVS5jYWxsKGUpXX07ZnVuY3Rpb24gWmUoZSl7cmV0dXJuIEZlKGUpP2RlKGUpOlNlKGUpfWZ1bmN0aW9uIEplKGUpe3JldHVybiBlfXIuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbiBlKHQscixuLGksbyl7dmFyIGE9LTEscz10Lmxlbmd0aDtmb3Iobnx8KG49UmUpLG98fChvPVtdKTsrK2E8czspe3ZhciBmPXRbYV07cj4wJiZuKGYpP3I+MT9lKGYsci0xLG4saSxvKTpBKG8sZik6aXx8KG9bby5sZW5ndGhdPWYpfXJldHVybiBvfShmdW5jdGlvbihlLHQpe3JldHVybihxZShlKT9TOkFlKShlLEVlKHQpKX0oZSx0KSwxKX19KS5jYWxsKHRoaXMscig1KSxyKDI1KShlKSl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0KXtpZih0PSgwLG8uZGVmYXVsdCkodHx8aS5kZWZhdWx0KSwhKDAsbi5kZWZhdWx0KShlKSlyZXR1cm4gdChuZXcgRXJyb3IoXCJGaXJzdCBhcmd1bWVudCB0byB3YXRlcmZhbGwgbXVzdCBiZSBhbiBhcnJheSBvZiBmdW5jdGlvbnNcIikpO2lmKCFlLmxlbmd0aClyZXR1cm4gdCgpO3ZhciByPTA7ZnVuY3Rpb24gdSh0KXt2YXIgbj0oMCxmLmRlZmF1bHQpKGVbcisrXSk7dC5wdXNoKCgwLHMuZGVmYXVsdCkoYykpLG4uYXBwbHkobnVsbCx0KX1mdW5jdGlvbiBjKG4pe2lmKG58fHI9PT1lLmxlbmd0aClyZXR1cm4gdC5hcHBseShudWxsLGFyZ3VtZW50cyk7dSgoMCxhLmRlZmF1bHQpKGFyZ3VtZW50cywxKSl9dShbXSl9O3ZhciBuPXUocig5MCkpLGk9dShyKDIyKSksbz11KHIoNDMpKSxhPXUocigyOCkpLHM9dShyKDQ1KSksZj11KHIoMTMpKTtmdW5jdGlvbiB1KGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1lLmV4cG9ydHM9dC5kZWZhdWx0fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7KDAsaS5kZWZhdWx0KShuLmRlZmF1bHQsZSx0KX07dmFyIG49byhyKDgyKSksaT1vKHIoMjI2KSk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlLHQscil7cj1yfHxuLmRlZmF1bHQ7dmFyIHM9KDAsaS5kZWZhdWx0KSh0KT9bXTp7fTtlKHQsKGZ1bmN0aW9uKGUsdCxyKXsoMCxhLmRlZmF1bHQpKGUpKChmdW5jdGlvbihlLG4pe2FyZ3VtZW50cy5sZW5ndGg+MiYmKG49KDAsby5kZWZhdWx0KShhcmd1bWVudHMsMSkpLHNbdF09bixyKGUpfSkpfSksKGZ1bmN0aW9uKGUpe3IoZSxzKX0pKX07dmFyIG49cyhyKDIyKSksaT1zKHIoMjcpKSxvPXMocigyOCkpLGE9cyhyKDEzKSk7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ZS5leHBvcnRzPXQuZGVmYXVsdH0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXt2YXIgbj10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybihuPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPTEsbj1hcmd1bWVudHMubGVuZ3RoO3I8bjtyKyspZm9yKHZhciBpIGluIHQ9YXJndW1lbnRzW3JdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKTtyZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIGk9cigxNCksbz1yKDIyOCksYT1yKDI0Nykscz1yKDI0OSksZj17dHlwZTpcIm9iamVjdFwiLHByb3BlcnRpZXM6e3R5cGVzOnt0eXBlOlwib2JqZWN0XCIsYWRkaXRpb25hbFByb3BlcnRpZXM6e3R5cGU6XCJhcnJheVwiLGl0ZW1zOnt0eXBlOlwib2JqZWN0XCIscHJvcGVydGllczp7bmFtZTp7dHlwZTpcInN0cmluZ1wifSx0eXBlOnt0eXBlOlwic3RyaW5nXCJ9fSxyZXF1aXJlZDpbXCJuYW1lXCIsXCJ0eXBlXCJdfX19LHByaW1hcnlUeXBlOnt0eXBlOlwic3RyaW5nXCJ9LGRvbWFpbjp7dHlwZTpcIm9iamVjdFwifSxtZXNzYWdlOnt0eXBlOlwib2JqZWN0XCJ9fSxyZXF1aXJlZDpbXCJ0eXBlc1wiLFwicHJpbWFyeVR5cGVcIixcImRvbWFpblwiLFwibWVzc2FnZVwiXX07dC5UWVBFRF9NRVNTQUdFX1NDSEVNQT1mO3ZhciB1PXtlbmNvZGVEYXRhOmZ1bmN0aW9uKHQscixuLGEpe3ZhciBzPXRoaXM7dm9pZCAwPT09YSYmKGE9ITApO3ZhciBmPVtcImJ5dGVzMzJcIl0sdT1bdGhpcy5oYXNoVHlwZSh0LG4pXTtpZihhKWZvcih2YXIgYz1mdW5jdGlvbih0LHIsZil7aWYodm9pZCAwIT09bltyXSlyZXR1cm5bXCJieXRlczMyXCIsbnVsbD09Zj9cIjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiOmkuc2hhMyhzLmVuY29kZURhdGEocixmLG4sYSkpXTtpZih2b2lkIDA9PT1mKXRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgdmFsdWUgZm9yIGZpZWxkIFwiK3QrXCIgb2YgdHlwZSBcIityKTtpZihcImJ5dGVzXCI9PT1yKXJldHVybltcImJ5dGVzMzJcIixpLnNoYTMoZildO2lmKFwic3RyaW5nXCI9PT1yKXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBmJiYoZj1lLmZyb20oZixcInV0ZjhcIikpLFtcImJ5dGVzMzJcIixpLnNoYTMoZildO2lmKHIubGFzdEluZGV4T2YoXCJdXCIpPT09ci5sZW5ndGgtMSl7dmFyIHU9ci5zbGljZSgwLHIubGFzdEluZGV4T2YoXCJbXCIpKSxoPWYubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gYyh0LHUsZSl9KSk7cmV0dXJuW1wiYnl0ZXMzMlwiLGkuc2hhMyhvLnJhd0VuY29kZShoLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF19KSksaC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlWzFdfSkpKSldfXJldHVybltyLGZdfSxoPTAsZD1uW3RdO2g8ZC5sZW5ndGg7aCsrKXt2YXIgbD1kW2hdLHA9YyhsLm5hbWUsbC50eXBlLHJbbC5uYW1lXSksYj1wWzBdLHk9cFsxXTtmLnB1c2goYiksdS5wdXNoKHkpfWVsc2UgZm9yKHZhciBnPTAsdj1uW3RdO2c8di5sZW5ndGg7ZysrKXtpZih2b2lkIDAhPT0oeT1yWyhsPXZbZ10pLm5hbWVdKSlpZihcImJ5dGVzXCI9PT1sLnR5cGUpZi5wdXNoKFwiYnl0ZXMzMlwiKSx5PWkuc2hhMyh5KSx1LnB1c2goeSk7ZWxzZSBpZihcInN0cmluZ1wiPT09bC50eXBlKWYucHVzaChcImJ5dGVzMzJcIiksXCJzdHJpbmdcIj09dHlwZW9mIHkmJih5PWUuZnJvbSh5LFwidXRmOFwiKSkseT1pLnNoYTMoeSksdS5wdXNoKHkpO2Vsc2UgaWYodm9pZCAwIT09bltsLnR5cGVdKWYucHVzaChcImJ5dGVzMzJcIikseT1pLnNoYTModGhpcy5lbmNvZGVEYXRhKGwudHlwZSx5LG4sYSkpLHUucHVzaCh5KTtlbHNle2lmKGwudHlwZS5sYXN0SW5kZXhPZihcIl1cIik9PT1sLnR5cGUubGVuZ3RoLTEpdGhyb3cgbmV3IEVycm9yKFwiQXJyYXlzIGN1cnJlbnRseSB1bmltcGxlbWVudGVkIGluIGVuY29kZURhdGFcIik7Zi5wdXNoKGwudHlwZSksdS5wdXNoKHkpfX1yZXR1cm4gby5yYXdFbmNvZGUoZix1KX0sZW5jb2RlVHlwZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1cIlwiLG49dGhpcy5maW5kVHlwZURlcGVuZGVuY2llcyhlLHQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lfSkpLGk9MCxvPW49W2VdLmNvbmNhdChuLnNvcnQoKSk7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV07aWYoIXRbYV0pdGhyb3cgbmV3IEVycm9yKFwiTm8gdHlwZSBkZWZpbml0aW9uIHNwZWNpZmllZDogXCIrYSk7cis9YStcIihcIit0W2FdLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lO3JldHVybiBlLnR5cGUrXCIgXCIrdH0pKS5qb2luKFwiLFwiKStcIilcIn1yZXR1cm4gcn0sZmluZFR5cGVEZXBlbmRlbmNpZXM6ZnVuY3Rpb24oZSx0LHIpe2lmKHZvaWQgMD09PXImJihyPVtdKSxlPWUubWF0Y2goL15cXHcqL3UpWzBdLHIuaW5jbHVkZXMoZSl8fHZvaWQgMD09PXRbZV0pcmV0dXJuIHI7ci5wdXNoKGUpO2Zvcih2YXIgbj0wLGk9dFtlXTtuPGkubGVuZ3RoO24rKylmb3IodmFyIG89aVtuXSxhPTAscz10aGlzLmZpbmRUeXBlRGVwZW5kZW5jaWVzKG8udHlwZSx0LHIpO2E8cy5sZW5ndGg7YSsrKXt2YXIgZj1zW2FdOyFyLmluY2x1ZGVzKGYpJiZyLnB1c2goZil9cmV0dXJuIHJ9LGhhc2hTdHJ1Y3Q6ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPSEwKSxpLnNoYTModGhpcy5lbmNvZGVEYXRhKGUsdCxyLG4pKX0saGFzaFR5cGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5zaGEzKHRoaXMuZW5jb2RlVHlwZShlLHQpKX0sc2FuaXRpemVEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Zvcih2YXIgciBpbiBmLnByb3BlcnRpZXMpZVtyXSYmKHRbcl09ZVtyXSk7cmV0dXJuXCJ0eXBlc1wiaW4gdCYmKHQudHlwZXM9bih7RUlQNzEyRG9tYWluOltdfSx0LnR5cGVzKSksdH0sc2lnbjpmdW5jdGlvbih0LHIpe3ZvaWQgMD09PXImJihyPSEwKTt2YXIgbj10aGlzLnNhbml0aXplRGF0YSh0KSxvPVtlLmZyb20oXCIxOTAxXCIsXCJoZXhcIildO3JldHVybiBvLnB1c2godGhpcy5oYXNoU3RydWN0KFwiRUlQNzEyRG9tYWluXCIsbi5kb21haW4sbi50eXBlcyxyKSksXCJFSVA3MTJEb21haW5cIiE9PW4ucHJpbWFyeVR5cGUmJm8ucHVzaCh0aGlzLmhhc2hTdHJ1Y3Qobi5wcmltYXJ5VHlwZSxuLm1lc3NhZ2Usbi50eXBlcyxyKSksaS5zaGEzKGUuY29uY2F0KG8pKX19O2Z1bmN0aW9uIGMoZSx0LHIpe3ZhciBuPWkuZnJvbVNpZ25lZCh0KSxvPWkuZnJvbVNpZ25lZChyKSxhPWkuYnVmZmVyVG9JbnQoZSkscz1FKGkudG9VbnNpZ25lZChuKS50b1N0cmluZyhcImhleFwiKSw2NCksZj1FKGkudG9VbnNpZ25lZChvKS50b1N0cmluZyhcImhleFwiKSw2NCksdT1pLnN0cmlwSGV4UHJlZml4KGkuaW50VG9IZXgoYSkpO3JldHVybiBpLmFkZEhleFByZWZpeChzLmNvbmNhdChmLHUpKS50b1N0cmluZyhcImhleFwiKX1mdW5jdGlvbiBoKGUsdCl7dmFyIHI9bSh0LmRhdGEpLG49aS5lY3NpZ24ocixlKTtyZXR1cm4gaS5idWZmZXJUb0hleChjKG4udixuLnIsbi5zKSl9ZnVuY3Rpb24gZChlKXt2YXIgdD13KG0oZS5kYXRhKSxlLnNpZykscj1pLnB1YmxpY1RvQWRkcmVzcyh0KTtyZXR1cm4gaS5idWZmZXJUb0hleChyKX1mdW5jdGlvbiBsKGUsdCxyKXtzd2l0Y2gocil7Y2FzZVwieDI1NTE5LXhzYWxzYTIwLXBvbHkxMzA1XCI6aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQuZGF0YSl0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZXRlY3Qgc2VjcmV0IG1lc3NhZ2UsIG1lc3NhZ2UgcGFyYW1zIHNob3VsZCBiZSBvZiB0aGUgZm9ybSB7ZGF0YTogXCJzZWNyZXQgbWVzc2FnZVwifSAnKTt2YXIgbj1hLmJveC5rZXlQYWlyKCksaT12b2lkIDA7dHJ5e2k9cy5kZWNvZGVCYXNlNjQoZSl9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKFwiQmFkIHB1YmxpYyBrZXlcIil9dmFyIG89cy5kZWNvZGVVVEY4KHQuZGF0YSksZj1hLnJhbmRvbUJ5dGVzKGEuYm94Lm5vbmNlTGVuZ3RoKSx1PWEuYm94KG8sZixpLG4uc2VjcmV0S2V5KTtyZXR1cm57dmVyc2lvbjpcIngyNTUxOS14c2Fsc2EyMC1wb2x5MTMwNVwiLG5vbmNlOnMuZW5jb2RlQmFzZTY0KGYpLGVwaGVtUHVibGljS2V5OnMuZW5jb2RlQmFzZTY0KG4ucHVibGljS2V5KSxjaXBoZXJ0ZXh0OnMuZW5jb2RlQmFzZTY0KHUpfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkVuY3J5cHRpb24gdHlwZS92ZXJzaW9uIG5vdCBzdXBwb3J0ZWRcIil9fWZ1bmN0aW9uIHAoZSx0KXtzd2l0Y2goZS52ZXJzaW9uKXtjYXNlXCJ4MjU1MTkteHNhbHNhMjAtcG9seTEzMDVcIjp2YXIgcj1TKHQpLG49YS5ib3gua2V5UGFpci5mcm9tU2VjcmV0S2V5KHIpLnNlY3JldEtleSxpPXMuZGVjb2RlQmFzZTY0KGUubm9uY2UpLG89cy5kZWNvZGVCYXNlNjQoZS5jaXBoZXJ0ZXh0KSxmPXMuZGVjb2RlQmFzZTY0KGUuZXBoZW1QdWJsaWNLZXkpLHU9YS5ib3gub3BlbihvLGksZixuKSxjPXZvaWQgMDt0cnl7Yz1zLmVuY29kZVVURjgodSl9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKFwiRGVjcnlwdGlvbiBmYWlsZWQuXCIpfWlmKGMpcmV0dXJuIGM7dGhyb3cgbmV3IEVycm9yKFwiRGVjcnlwdGlvbiBmYWlsZWQuXCIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiRW5jcnlwdGlvbiB0eXBlL3ZlcnNpb24gbm90IHN1cHBvcnRlZC5cIil9fWZ1bmN0aW9uIGIoZSx0KXt2YXIgcj11LnNpZ24odC5kYXRhLCExKSxuPWkuZWNzaWduKHIsZSk7cmV0dXJuIGkuYnVmZmVyVG9IZXgoYyhuLnYsbi5yLG4ucykpfWZ1bmN0aW9uIHkoZSx0KXt2YXIgcj11LnNpZ24odC5kYXRhKSxuPWkuZWNzaWduKHIsZSk7cmV0dXJuIGkuYnVmZmVyVG9IZXgoYyhuLnYsbi5yLG4ucykpfWZ1bmN0aW9uIGcoZSl7dmFyIHQ9dyh1LnNpZ24oZS5kYXRhLCExKSxlLnNpZykscj1pLnB1YmxpY1RvQWRkcmVzcyh0KTtyZXR1cm4gaS5idWZmZXJUb0hleChyKX1mdW5jdGlvbiB2KGUpe3ZhciB0PXcodS5zaWduKGUuZGF0YSksZS5zaWcpLHI9aS5wdWJsaWNUb0FkZHJlc3ModCk7cmV0dXJuIGkuYnVmZmVyVG9IZXgocil9ZnVuY3Rpb24gbShlKXt2YXIgdD1uZXcgRXJyb3IoXCJFeHBlY3QgYXJndW1lbnQgdG8gYmUgbm9uLWVtcHR5IGFycmF5XCIpO2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlfHwhKFwibGVuZ3RoXCJpbiBlKXx8IWUubGVuZ3RoKXRocm93IHQ7dmFyIHI9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblwiYnl0ZXNcIj09PWUudHlwZT9pLnRvQnVmZmVyKGUudmFsdWUpOmUudmFsdWV9KSksbj1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZX0pKSxhPWUubWFwKChmdW5jdGlvbihlKXtpZighZS5uYW1lKXRocm93IHQ7cmV0dXJuIGUudHlwZStcIiBcIitlLm5hbWV9KSk7cmV0dXJuIG8uc29saWRpdHlTSEEzKFtcImJ5dGVzMzJcIixcImJ5dGVzMzJcIl0sW28uc29saWRpdHlTSEEzKG5ldyBBcnJheShlLmxlbmd0aCkuZmlsbChcInN0cmluZ1wiKSxhKSxvLnNvbGlkaXR5U0hBMyhuLHIpXSl9ZnVuY3Rpb24gdyhlLHQpe3ZhciByPWkudG9CdWZmZXIodCksbj1pLmZyb21ScGNTaWcocik7cmV0dXJuIGkuZWNyZWNvdmVyKGUsbi52LG4ucixuLnMpfWZ1bmN0aW9uIF8oZSl7dmFyIHQ9aS50b0J1ZmZlcihlLmRhdGEpO3JldHVybiB3KGkuaGFzaFBlcnNvbmFsTWVzc2FnZSh0KSxlLnNpZyl9ZnVuY3Rpb24gRShlLHQpe2Zvcih2YXIgcj1cIlwiK2U7ci5sZW5ndGg8dDspcj1cIjBcIityO3JldHVybiByfWZ1bmN0aW9uIFModCl7dmFyIHI9ZS5mcm9tKHQsXCJoZXhcIikudG9TdHJpbmcoXCJiYXNlNjRcIik7cmV0dXJuIHMuZGVjb2RlQmFzZTY0KHIpfXQuVHlwZWREYXRhVXRpbHM9dSx0LmNvbmNhdFNpZz1jLHQubm9ybWFsaXplPWZ1bmN0aW9uKGUpe2lmKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXt2YXIgdD1pLnRvQnVmZmVyKGUpO2U9aS5idWZmZXJUb0hleCh0KX1pZihcInN0cmluZ1wiIT10eXBlb2YgZSl7dmFyIHI9XCJldGgtc2lnLXV0aWwubm9ybWFsaXplKCkgcmVxdWlyZXMgaGV4IHN0cmluZyBvciBpbnRlZ2VyIGlucHV0LlwiO3Rocm93IG5ldyBFcnJvcihyKz1cIiByZWNlaXZlZCBcIit0eXBlb2YgZStcIjogXCIrZSl9cmV0dXJuIGkuYWRkSGV4UHJlZml4KGUudG9Mb3dlckNhc2UoKSl9fSx0LnBlcnNvbmFsU2lnbj1mdW5jdGlvbihlLHQpe3ZhciByPWkudG9CdWZmZXIodC5kYXRhKSxuPWkuaGFzaFBlcnNvbmFsTWVzc2FnZShyKSxvPWkuZWNzaWduKG4sZSk7cmV0dXJuIGkuYnVmZmVyVG9IZXgoYyhvLnYsby5yLG8ucykpfSx0LnJlY292ZXJQZXJzb25hbFNpZ25hdHVyZT1mdW5jdGlvbihlKXt2YXIgdD1fKGUpLHI9aS5wdWJsaWNUb0FkZHJlc3ModCk7cmV0dXJuIGkuYnVmZmVyVG9IZXgocil9LHQuZXh0cmFjdFB1YmxpY0tleT1mdW5jdGlvbihlKXtyZXR1cm5cIjB4XCIrXyhlKS50b1N0cmluZyhcImhleFwiKX0sdC50eXBlZFNpZ25hdHVyZUhhc2g9ZnVuY3Rpb24oZSl7dmFyIHQ9bShlKTtyZXR1cm4gaS5idWZmZXJUb0hleCh0KX0sdC5zaWduVHlwZWREYXRhTGVnYWN5PWgsdC5yZWNvdmVyVHlwZWRTaWduYXR1cmVMZWdhY3k9ZCx0LmVuY3J5cHQ9bCx0LmVuY3J5cHRTYWZlbHk9ZnVuY3Rpb24odCxyLG4pe3ZhciBpPU1hdGgucG93KDIsMTEpLG89ci5kYXRhO2lmKCFvKXRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBlbmNyeXB0IGVtcHR5IG1zZy5kYXRhXCIpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBvJiZcInRvSlNPTlwiaW4gbyl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZW5jcnlwdCB3aXRoIHRvSlNPTiBwcm9wZXJ0eS4gIFBsZWFzZSByZW1vdmUgdG9KU09OIHByb3BlcnR5XCIpO3ZhciBhPXtkYXRhOm8scGFkZGluZzpcIlwifSxzPWUuYnl0ZUxlbmd0aChKU09OLnN0cmluZ2lmeShhKSxcInV0Zi04XCIpJWksZj0wO3JldHVybiBzPjAmJihmPWktcy0xNiksYS5wYWRkaW5nPVwiMFwiLnJlcGVhdChmKSxsKHQse2RhdGE6SlNPTi5zdHJpbmdpZnkoYSl9LG4pfSx0LmRlY3J5cHQ9cCx0LmRlY3J5cHRTYWZlbHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSlNPTi5wYXJzZShwKGUsdCkpLmRhdGF9LHQuZ2V0RW5jcnlwdGlvblB1YmxpY0tleT1mdW5jdGlvbihlKXt2YXIgdD1TKGUpLHI9YS5ib3gua2V5UGFpci5mcm9tU2VjcmV0S2V5KHQpLnB1YmxpY0tleTtyZXR1cm4gcy5lbmNvZGVCYXNlNjQocil9LHQuc2lnblR5cGVkTWVzc2FnZT1mdW5jdGlvbihlLHQscil7c3dpdGNoKHZvaWQgMD09PXImJihyPVwiVjRcIikscil7Y2FzZVwiVjFcIjpyZXR1cm4gaChlLHQpO2Nhc2VcIlYzXCI6cmV0dXJuIGIoZSx0KTtjYXNlXCJWNFwiOmRlZmF1bHQ6cmV0dXJuIHkoZSx0KX19LHQucmVjb3ZlclR5cGVkTWVzc2FnZT1mdW5jdGlvbihlLHQpe3N3aXRjaCh2b2lkIDA9PT10JiYodD1cIlY0XCIpLHQpe2Nhc2VcIlYxXCI6cmV0dXJuIGQoZSk7Y2FzZVwiVjNcIjpyZXR1cm4gZyhlKTtjYXNlXCJWNFwiOmRlZmF1bHQ6cmV0dXJuIHYoZSl9fSx0LnNpZ25UeXBlZERhdGE9Yix0LnNpZ25UeXBlZERhdGFfdjQ9eSx0LnJlY292ZXJUeXBlZFNpZ25hdHVyZT1nLHQucmVjb3ZlclR5cGVkU2lnbmF0dXJlX3Y0PXZ9KS5jYWxsKHRoaXMscigxKS5CdWZmZXIpfSxmdW5jdGlvbihlLHQscil7ZS5leHBvcnRzPXIoMjI5KX0sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbih0KXtjb25zdCBuPXIoMjMwKSxpPXIoNCk7dmFyIG89ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aChcImludFtcIik/XCJpbnQyNTZcIitlLnNsaWNlKDMpOlwiaW50XCI9PT1lP1wiaW50MjU2XCI6ZS5zdGFydHNXaXRoKFwidWludFtcIik/XCJ1aW50MjU2XCIrZS5zbGljZSg0KTpcInVpbnRcIj09PWU/XCJ1aW50MjU2XCI6ZS5zdGFydHNXaXRoKFwiZml4ZWRbXCIpP1wiZml4ZWQxMjh4MTI4XCIrZS5zbGljZSg1KTpcImZpeGVkXCI9PT1lP1wiZml4ZWQxMjh4MTI4XCI6ZS5zdGFydHNXaXRoKFwidWZpeGVkW1wiKT9cInVmaXhlZDEyOHgxMjhcIitlLnNsaWNlKDYpOlwidWZpeGVkXCI9PT1lP1widWZpeGVkMTI4eDEyOFwiOmV9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gcGFyc2VJbnQoL15cXEQrKFxcZCspJC8uZXhlYyhlKVsxXSwxMCl9ZnVuY3Rpb24gZihlKXt2YXIgdD0vXlxcRCsoXFxkKyl4KFxcZCspJC8uZXhlYyhlKTtyZXR1cm5bcGFyc2VJbnQodFsxXSwxMCkscGFyc2VJbnQodFsyXSwxMCldfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9ZS5tYXRjaCgvKC4qKVxcWyguKj8pXFxdJC8pO3JldHVybiB0P1wiXCI9PT10WzJdP1wiZHluYW1pY1wiOnBhcnNlSW50KHRbMl0sMTApOm51bGx9ZnVuY3Rpb24gYyhlKXt2YXIgdD10eXBlb2YgZTtpZihcInN0cmluZ1wiPT09dClyZXR1cm4gbi5pc0hleFByZWZpeGVkKGUpP25ldyBpKG4uc3RyaXBIZXhQcmVmaXgoZSksMTYpOm5ldyBpKGUsMTApO2lmKFwibnVtYmVyXCI9PT10KXJldHVybiBuZXcgaShlKTtpZihlLnRvQXJyYXkpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgbnVtYmVyXCIpfWZ1bmN0aW9uIGgoZSl7dmFyIHQ9L14oXFx3KylcXCgoLispXFwpJC8uZXhlYyhlKTtpZigzIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBtZXRob2Qgc2lnbmF0dXJlXCIpO3ZhciByPS9eKC4rKVxcKTpcXCgoLispJC8uZXhlYyh0WzJdKTtyZXR1cm4gbnVsbCE9PXImJjM9PT1yLmxlbmd0aD97bWV0aG9kOnRbMV0sYXJnczpyWzFdLnNwbGl0KFwiLFwiKSxyZXRhcmdzOnJbMl0uc3BsaXQoXCIsXCIpfTp7bWV0aG9kOnRbMV0sYXJnczp0WzJdLnNwbGl0KFwiLFwiKX19ZnVuY3Rpb24gZChlLHIpe3ZhciBvLGEsaCxsO2lmKFwiYWRkcmVzc1wiPT09ZSlyZXR1cm4gZChcInVpbnQxNjBcIixjKHIpKTtpZihcImJvb2xcIj09PWUpcmV0dXJuIGQoXCJ1aW50OFwiLHI/MTowKTtpZihcInN0cmluZ1wiPT09ZSlyZXR1cm4gZChcImJ5dGVzXCIsbmV3IHQocixcInV0ZjhcIikpO2lmKHkoZSkpe2lmKHZvaWQgMD09PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIk5vdCBhbiBhcnJheT9cIik7aWYoXCJkeW5hbWljXCIhPT0obz11KGUpKSYmMCE9PW8mJnIubGVuZ3RoPm8pdGhyb3cgbmV3IEVycm9yKFwiRWxlbWVudHMgZXhjZWVkIGFycmF5IHNpemU6IFwiK28pO2ZvcihsIGluIGg9W10sZT1lLnNsaWNlKDAsZS5sYXN0SW5kZXhPZihcIltcIikpLFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1KU09OLnBhcnNlKHIpKSxyKWgucHVzaChkKGUscltsXSkpO2lmKFwiZHluYW1pY1wiPT09byl7dmFyIHA9ZChcInVpbnQyNTZcIixyLmxlbmd0aCk7aC51bnNoaWZ0KHApfXJldHVybiB0LmNvbmNhdChoKX1pZihcImJ5dGVzXCI9PT1lKXJldHVybiByPW5ldyB0KHIpLGg9dC5jb25jYXQoW2QoXCJ1aW50MjU2XCIsci5sZW5ndGgpLHJdKSxyLmxlbmd0aCUzMiE9MCYmKGg9dC5jb25jYXQoW2gsbi56ZXJvcygzMi1yLmxlbmd0aCUzMildKSksaDtpZihlLnN0YXJ0c1dpdGgoXCJieXRlc1wiKSl7aWYoKG89cyhlKSk8MXx8bz4zMil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJ5dGVzPE4+IHdpZHRoOiBcIitvKTtyZXR1cm4gbi5zZXRMZW5ndGhSaWdodChyLDMyKX1pZihlLnN0YXJ0c1dpdGgoXCJ1aW50XCIpKXtpZigobz1zKGUpKSU4fHxvPDh8fG8+MjU2KXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdWludDxOPiB3aWR0aDogXCIrbyk7aWYoKGE9YyhyKSkuYml0TGVuZ3RoKCk+byl0aHJvdyBuZXcgRXJyb3IoXCJTdXBwbGllZCB1aW50IGV4Y2VlZHMgd2lkdGg6IFwiK28rXCIgdnMgXCIrYS5iaXRMZW5ndGgoKSk7aWYoYTwwKXRocm93IG5ldyBFcnJvcihcIlN1cHBsaWVkIHVpbnQgaXMgbmVnYXRpdmVcIik7cmV0dXJuIGEudG9BcnJheUxpa2UodCxcImJlXCIsMzIpfWlmKGUuc3RhcnRzV2l0aChcImludFwiKSl7aWYoKG89cyhlKSklOHx8bzw4fHxvPjI1Nil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGludDxOPiB3aWR0aDogXCIrbyk7aWYoKGE9YyhyKSkuYml0TGVuZ3RoKCk+byl0aHJvdyBuZXcgRXJyb3IoXCJTdXBwbGllZCBpbnQgZXhjZWVkcyB3aWR0aDogXCIrbytcIiB2cyBcIithLmJpdExlbmd0aCgpKTtyZXR1cm4gYS50b1R3b3MoMjU2KS50b0FycmF5TGlrZSh0LFwiYmVcIiwzMil9aWYoZS5zdGFydHNXaXRoKFwidWZpeGVkXCIpKXtpZihvPWYoZSksKGE9YyhyKSk8MCl0aHJvdyBuZXcgRXJyb3IoXCJTdXBwbGllZCB1Zml4ZWQgaXMgbmVnYXRpdmVcIik7cmV0dXJuIGQoXCJ1aW50MjU2XCIsYS5tdWwobmV3IGkoMikucG93KG5ldyBpKG9bMV0pKSkpfWlmKGUuc3RhcnRzV2l0aChcImZpeGVkXCIpKXJldHVybiBvPWYoZSksZChcImludDI1NlwiLGMocikubXVsKG5ldyBpKDIpLnBvdyhuZXcgaShvWzFdKSkpKTt0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBvciBpbnZhbGlkIHR5cGU6IFwiK2UpfWZ1bmN0aW9uIGwoZSxyLG4pe3ZhciBvLGEscyxmO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1wKGUpKSxcImFkZHJlc3NcIj09PWUubmFtZSlyZXR1cm4gbChlLnJhd1R5cGUscixuKS50b0FycmF5TGlrZSh0LFwiYmVcIiwyMCkudG9TdHJpbmcoXCJoZXhcIik7aWYoXCJib29sXCI9PT1lLm5hbWUpcmV0dXJuIGwoZS5yYXdUeXBlLHIsbikudG9TdHJpbmcoKT09PW5ldyBpKDEpLnRvU3RyaW5nKCk7aWYoXCJzdHJpbmdcIj09PWUubmFtZSl7dmFyIHU9bChlLnJhd1R5cGUscixuKTtyZXR1cm4gbmV3IHQodSxcInV0ZjhcIikudG9TdHJpbmcoKX1pZihlLmlzQXJyYXkpe2ZvcihzPVtdLG89ZS5zaXplLFwiZHluYW1pY1wiPT09ZS5zaXplJiYobj1sKFwidWludDI1NlwiLHIsbikudG9OdW1iZXIoKSxvPWwoXCJ1aW50MjU2XCIscixuKS50b051bWJlcigpLG4rPTMyKSxmPTA7ZjxvO2YrKyl7dmFyIGM9bChlLnN1YkFycmF5LHIsbik7cy5wdXNoKGMpLG4rPWUuc3ViQXJyYXkubWVtb3J5VXNhZ2V9cmV0dXJuIHN9aWYoXCJieXRlc1wiPT09ZS5uYW1lKXJldHVybiBuPWwoXCJ1aW50MjU2XCIscixuKS50b051bWJlcigpLG89bChcInVpbnQyNTZcIixyLG4pLnRvTnVtYmVyKCksci5zbGljZShuKzMyLG4rMzIrbyk7aWYoZS5uYW1lLnN0YXJ0c1dpdGgoXCJieXRlc1wiKSlyZXR1cm4gci5zbGljZShuLG4rZS5zaXplKTtpZihlLm5hbWUuc3RhcnRzV2l0aChcInVpbnRcIikpe2lmKChhPW5ldyBpKHIuc2xpY2UobixuKzMyKSwxNixcImJlXCIpKS5iaXRMZW5ndGgoKT5lLnNpemUpdGhyb3cgbmV3IEVycm9yKFwiRGVjb2RlZCBpbnQgZXhjZWVkcyB3aWR0aDogXCIrZS5zaXplK1wiIHZzIFwiK2EuYml0TGVuZ3RoKCkpO3JldHVybiBhfWlmKGUubmFtZS5zdGFydHNXaXRoKFwiaW50XCIpKXtpZigoYT1uZXcgaShyLnNsaWNlKG4sbiszMiksMTYsXCJiZVwiKS5mcm9tVHdvcygyNTYpKS5iaXRMZW5ndGgoKT5lLnNpemUpdGhyb3cgbmV3IEVycm9yKFwiRGVjb2RlZCB1aW50IGV4Y2VlZHMgd2lkdGg6IFwiK2Uuc2l6ZStcIiB2cyBcIithLmJpdExlbmd0aCgpKTtyZXR1cm4gYX1pZihlLm5hbWUuc3RhcnRzV2l0aChcInVmaXhlZFwiKSl7aWYobz1uZXcgaSgyKS5wb3cobmV3IGkoZS5zaXplWzFdKSksIShhPWwoXCJ1aW50MjU2XCIscixuKSkubW9kKG8pLmlzWmVybygpKXRocm93IG5ldyBFcnJvcihcIkRlY2ltYWxzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO3JldHVybiBhLmRpdihvKX1pZihlLm5hbWUuc3RhcnRzV2l0aChcImZpeGVkXCIpKXtpZihvPW5ldyBpKDIpLnBvdyhuZXcgaShlLnNpemVbMV0pKSwhKGE9bChcImludDI1NlwiLHIsbikpLm1vZChvKS5pc1plcm8oKSl0aHJvdyBuZXcgRXJyb3IoXCJEZWNpbWFscyBub3Qgc3VwcG9ydGVkIHlldFwiKTtyZXR1cm4gYS5kaXYobyl9dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgb3IgaW52YWxpZCB0eXBlOiBcIitlLm5hbWUpfWZ1bmN0aW9uIHAoZSl7dmFyIHQscixuO2lmKHkoZSkpe3Q9dShlKTt2YXIgaT1lLnNsaWNlKDAsZS5sYXN0SW5kZXhPZihcIltcIikpO3JldHVybiBpPXAoaSkscj17aXNBcnJheTohMCxuYW1lOmUsc2l6ZTp0LG1lbW9yeVVzYWdlOlwiZHluYW1pY1wiPT09dD8zMjppLm1lbW9yeVVzYWdlKnQsc3ViQXJyYXk6aX19c3dpdGNoKGUpe2Nhc2VcImFkZHJlc3NcIjpuPVwidWludDE2MFwiO2JyZWFrO2Nhc2VcImJvb2xcIjpuPVwidWludDhcIjticmVhaztjYXNlXCJzdHJpbmdcIjpuPVwiYnl0ZXNcIn1pZihyPXtyYXdUeXBlOm4sbmFtZTplLG1lbW9yeVVzYWdlOjMyfSxlLnN0YXJ0c1dpdGgoXCJieXRlc1wiKSYmXCJieXRlc1wiIT09ZXx8ZS5zdGFydHNXaXRoKFwidWludFwiKXx8ZS5zdGFydHNXaXRoKFwiaW50XCIpP3Iuc2l6ZT1zKGUpOihlLnN0YXJ0c1dpdGgoXCJ1Zml4ZWRcIil8fGUuc3RhcnRzV2l0aChcImZpeGVkXCIpKSYmKHIuc2l6ZT1mKGUpKSxlLnN0YXJ0c1dpdGgoXCJieXRlc1wiKSYmXCJieXRlc1wiIT09ZSYmKHIuc2l6ZTwxfHxyLnNpemU+MzIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYnl0ZXM8Tj4gd2lkdGg6IFwiK3Iuc2l6ZSk7aWYoKGUuc3RhcnRzV2l0aChcInVpbnRcIil8fGUuc3RhcnRzV2l0aChcImludFwiKSkmJihyLnNpemUlOHx8ci5zaXplPDh8fHIuc2l6ZT4yNTYpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW50L3VpbnQ8Tj4gd2lkdGg6IFwiK3Iuc2l6ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYihlKXtyZXR1cm5cInN0cmluZ1wiPT09ZXx8XCJieXRlc1wiPT09ZXx8XCJkeW5hbWljXCI9PT11KGUpfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIGUubGFzdEluZGV4T2YoXCJdXCIpPT09ZS5sZW5ndGgtMX1mdW5jdGlvbiBnKGUsdCl7cmV0dXJuIGUuc3RhcnRzV2l0aChcImFkZHJlc3NcIil8fGUuc3RhcnRzV2l0aChcImJ5dGVzXCIpP1wiMHhcIit0LnRvU3RyaW5nKFwiaGV4XCIpOnQudG9TdHJpbmcoKX1vLmV2ZW50SUQ9ZnVuY3Rpb24oZSxyKXt2YXIgaT1lK1wiKFwiK3IubWFwKGEpLmpvaW4oXCIsXCIpK1wiKVwiO3JldHVybiBuLnNoYTMobmV3IHQoaSkpfSxvLm1ldGhvZElEPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8uZXZlbnRJRChlLHQpLnNsaWNlKDAsNCl9LG8ucmF3RW5jb2RlPWZ1bmN0aW9uKGUscil7dmFyIG49W10saT1bXSxvPTMyKmUubGVuZ3RoO2Zvcih2YXIgcyBpbiBlKXt2YXIgZj1hKGVbc10pLHU9ZChmLHJbc10pO2IoZik/KG4ucHVzaChkKFwidWludDI1NlwiLG8pKSxpLnB1c2godSksbys9dS5sZW5ndGgpOm4ucHVzaCh1KX1yZXR1cm4gdC5jb25jYXQobi5jb25jYXQoaSkpfSxvLnJhd0RlY29kZT1mdW5jdGlvbihlLHIpe3ZhciBuPVtdO3I9bmV3IHQocik7dmFyIGk9MDtmb3IodmFyIG8gaW4gZSl7dmFyIHM9cChhKGVbb10pKSxmPWwocyxyLGkpO2krPXMubWVtb3J5VXNhZ2Usbi5wdXNoKGYpfXJldHVybiBufSxvLnNpbXBsZUVuY29kZT1mdW5jdGlvbihlKXt2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLnNsaWNlKDEpLG49aChlKTtpZihyLmxlbmd0aCE9PW4uYXJncy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQXJndW1lbnQgY291bnQgbWlzbWF0Y2hcIik7cmV0dXJuIHQuY29uY2F0KFtvLm1ldGhvZElEKG4ubWV0aG9kLG4uYXJncyksby5yYXdFbmNvZGUobi5hcmdzLHIpXSl9LG8uc2ltcGxlRGVjb2RlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9aChlKTtpZighci5yZXRhcmdzKXRocm93IG5ldyBFcnJvcihcIk5vIHJldHVybiB2YWx1ZXMgaW4gbWV0aG9kXCIpO3JldHVybiBvLnJhd0RlY29kZShyLnJldGFyZ3MsdCl9LG8uc3RyaW5naWZ5PWZ1bmN0aW9uKGUsdCl7dmFyIHI9W107Zm9yKHZhciBuIGluIGUpe3ZhciBpPWVbbl0sbz10W25dO289L15bXlxcW10rXFxbLipcXF0kLy50ZXN0KGkpP28ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZyhpLGUpfSkpLmpvaW4oXCIsIFwiKTpnKGksbyksci5wdXNoKG8pfXJldHVybiByfSxvLnNvbGlkaXR5UGFjaz1mdW5jdGlvbihlLHIpe2lmKGUubGVuZ3RoIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiTnVtYmVyIG9mIHR5cGVzIGFyZSBub3QgbWF0Y2hpbmcgdGhlIHZhbHVlc1wiKTtmb3IodmFyIGksbyxmPVtdLHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGg9YShlW3VdKSxkPXJbdV07aWYoXCJieXRlc1wiPT09aClmLnB1c2goZCk7ZWxzZSBpZihcInN0cmluZ1wiPT09aClmLnB1c2gobmV3IHQoZCxcInV0ZjhcIikpO2Vsc2UgaWYoXCJib29sXCI9PT1oKWYucHVzaChuZXcgdChkP1wiMDFcIjpcIjAwXCIsXCJoZXhcIikpO2Vsc2UgaWYoXCJhZGRyZXNzXCI9PT1oKWYucHVzaChuLnNldExlbmd0aExlZnQoZCwyMCkpO2Vsc2UgaWYoaC5zdGFydHNXaXRoKFwiYnl0ZXNcIikpe2lmKChpPXMoaCkpPDF8fGk+MzIpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBieXRlczxOPiB3aWR0aDogXCIraSk7Zi5wdXNoKG4uc2V0TGVuZ3RoUmlnaHQoZCxpKSl9ZWxzZSBpZihoLnN0YXJ0c1dpdGgoXCJ1aW50XCIpKXtpZigoaT1zKGgpKSU4fHxpPDh8fGk+MjU2KXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdWludDxOPiB3aWR0aDogXCIraSk7aWYoKG89YyhkKSkuYml0TGVuZ3RoKCk+aSl0aHJvdyBuZXcgRXJyb3IoXCJTdXBwbGllZCB1aW50IGV4Y2VlZHMgd2lkdGg6IFwiK2krXCIgdnMgXCIrby5iaXRMZW5ndGgoKSk7Zi5wdXNoKG8udG9BcnJheUxpa2UodCxcImJlXCIsaS84KSl9ZWxzZXtpZighaC5zdGFydHNXaXRoKFwiaW50XCIpKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIG9yIGludmFsaWQgdHlwZTogXCIraCk7aWYoKGk9cyhoKSklOHx8aTw4fHxpPjI1Nil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGludDxOPiB3aWR0aDogXCIraSk7aWYoKG89YyhkKSkuYml0TGVuZ3RoKCk+aSl0aHJvdyBuZXcgRXJyb3IoXCJTdXBwbGllZCBpbnQgZXhjZWVkcyB3aWR0aDogXCIraStcIiB2cyBcIitvLmJpdExlbmd0aCgpKTtmLnB1c2goby50b1R3b3MoaSkudG9BcnJheUxpa2UodCxcImJlXCIsaS84KSl9fXJldHVybiB0LmNvbmNhdChmKX0sby5zb2xpZGl0eVNIQTM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5zaGEzKG8uc29saWRpdHlQYWNrKGUsdCkpfSxvLnNvbGlkaXR5U0hBMjU2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4uc2hhMjU2KG8uc29saWRpdHlQYWNrKGUsdCkpfSxvLnNvbGlkaXR5UklQRU1EMTYwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4ucmlwZW1kMTYwKG8uc29saWRpdHlQYWNrKGUsdCksITApfSxvLmZyb21TZXJwZW50PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpZihcInNcIj09PWkpci5wdXNoKFwiYnl0ZXNcIik7ZWxzZSBpZihcImJcIj09PWkpe2Zvcih2YXIgbz1cImJ5dGVzXCIsYT1uKzE7YTxlLmxlbmd0aCYmKCh0PWVbYV0pPj1cIjBcIiYmdDw9XCI5XCIpOylvKz1lW2FdLVwiMFwiLGErKztuPWEtMSxyLnB1c2gobyl9ZWxzZSBpZihcImlcIj09PWkpci5wdXNoKFwiaW50MjU2XCIpO2Vsc2V7aWYoXCJhXCIhPT1pKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIG9yIGludmFsaWQgdHlwZTogXCIraSk7ci5wdXNoKFwiaW50MjU2W11cIil9fXJldHVybiByfSxvLnRvU2VycGVudD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO2lmKFwiYnl0ZXNcIj09PW4pdC5wdXNoKFwic1wiKTtlbHNlIGlmKG4uc3RhcnRzV2l0aChcImJ5dGVzXCIpKXQucHVzaChcImJcIitzKG4pKTtlbHNlIGlmKFwiaW50MjU2XCI9PT1uKXQucHVzaChcImlcIik7ZWxzZXtpZihcImludDI1NltdXCIhPT1uKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIG9yIGludmFsaWQgdHlwZTogXCIrbik7dC5wdXNoKFwiYVwiKX19cmV0dXJuIHQuam9pbihcIlwiKX0sZS5leHBvcnRzPW99KS5jYWxsKHRoaXMscigxKS5CdWZmZXIpfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe3ZhciBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LGk9cigyMzEpLG89aS5rZWNjYWsyMjQsYT1pLmtlY2NhazM4NCxzPWkua2VjY2FrMjU2LGY9aS5rZWNjYWs1MTIsdT1yKDIzOSksYz1yKDc4KSxoPXIoNzkpLGQ9cig0KSxsPXIoMzQpO3QuTUFYX0lOVEVHRVI9bmV3IGQoXCJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmXCIsMTYpLHQuVFdPX1BPVzI1Nj1uZXcgZChcIjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsMTYpLHQuU0hBM19OVUxMX1M9XCJjNWQyNDYwMTg2ZjcyMzNjOTI3ZTdkYjJkY2M3MDNjMGU1MDBiNjUzY2E4MjI3M2I3YmZhZDgwNDVkODVhNDcwXCIsdC5TSEEzX05VTEw9bmV3IGUodC5TSEEzX05VTExfUyxcImhleFwiKSx0LlNIQTNfUkxQX0FSUkFZX1M9XCIxZGNjNGRlOGRlYzc1ZDdhYWI4NWI1NjdiNmNjZDQxYWQzMTI0NTFiOTQ4YTc0MTNmMGExNDJmZDQwZDQ5MzQ3XCIsdC5TSEEzX1JMUF9BUlJBWT1uZXcgZSh0LlNIQTNfUkxQX0FSUkFZX1MsXCJoZXhcIiksdC5TSEEzX1JMUF9TPVwiNTZlODFmMTcxYmNjNTVhNmZmODM0NWU2OTJjMGY4NmU1YjQ4ZTAxYjk5NmNhZGMwMDE2MjJmYjVlMzYzYjQyMVwiLHQuU0hBM19STFA9bmV3IGUodC5TSEEzX1JMUF9TLFwiaGV4XCIpLHQuQk49ZCx0LnJscD1oLHQuc2VjcDI1NmsxPXUsdC56ZXJvcz1mdW5jdGlvbih0KXt2YXIgcj1uZXcgZSh0KTtyZXR1cm4gci5maWxsKDApLHJ9LHQuc2V0TGVuZ3RoTGVmdD10LnNldExlbmd0aD1mdW5jdGlvbihlLHIsbil7dmFyIGk9dC56ZXJvcyhyKTtyZXR1cm4gZT10LnRvQnVmZmVyKGUpLG4/ZS5sZW5ndGg8cj8oZS5jb3B5KGkpLGkpOmUuc2xpY2UoMCxyKTplLmxlbmd0aDxyPyhlLmNvcHkoaSxyLWUubGVuZ3RoKSxpKTplLnNsaWNlKC1yKX0sdC5zZXRMZW5ndGhSaWdodD1mdW5jdGlvbihlLHIpe3JldHVybiB0LnNldExlbmd0aChlLHIsITApfSx0LnVucGFkPXQuc3RyaXBaZXJvcz1mdW5jdGlvbihlKXtmb3IodmFyIHI9KGU9dC5zdHJpcEhleFByZWZpeChlKSlbMF07ZS5sZW5ndGg+MCYmXCIwXCI9PT1yLnRvU3RyaW5nKCk7KXI9KGU9ZS5zbGljZSgxKSlbMF07cmV0dXJuIGV9LHQudG9CdWZmZXI9ZnVuY3Rpb24ocil7aWYoIWUuaXNCdWZmZXIocikpaWYoQXJyYXkuaXNBcnJheShyKSlyPW5ldyBlKHIpO2Vsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIHIpcj10LmlzSGV4UHJlZml4ZWQocik/bmV3IGUodC5wYWRUb0V2ZW4odC5zdHJpcEhleFByZWZpeChyKSksXCJoZXhcIik6bmV3IGUocik7ZWxzZSBpZihcIm51bWJlclwiPT10eXBlb2YgcilyPXQuaW50VG9CdWZmZXIocik7ZWxzZSBpZihudWxsPT1yKXI9bmV3IGUoW10pO2Vsc2V7aWYoIXIudG9BcnJheSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHR5cGVcIik7cj1uZXcgZShyLnRvQXJyYXkoKSl9cmV0dXJuIHJ9LHQuaW50VG9IZXg9ZnVuY3Rpb24oZSl7YyhlJTE9PTAsXCJudW1iZXIgaXMgbm90IGEgaW50ZWdlclwiKSxjKGU+PTAsXCJudW1iZXIgbXVzdCBiZSBwb3NpdGl2ZVwiKTt2YXIgdD1lLnRvU3RyaW5nKDE2KTtyZXR1cm4gdC5sZW5ndGglMiYmKHQ9XCIwXCIrdCksXCIweFwiK3R9LHQuaW50VG9CdWZmZXI9ZnVuY3Rpb24ocil7dmFyIG49dC5pbnRUb0hleChyKTtyZXR1cm4gbmV3IGUobi5zbGljZSgyKSxcImhleFwiKX0sdC5idWZmZXJUb0ludD1mdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VJbnQodC5idWZmZXJUb0hleChlKSwxNil9LHQuYnVmZmVyVG9IZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT0oZT10LnRvQnVmZmVyKGUpKS5sZW5ndGg/MDpcIjB4XCIrZS50b1N0cmluZyhcImhleFwiKX0sdC5mcm9tU2lnbmVkPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZChlKS5mcm9tVHdvcygyNTYpfSx0LnRvVW5zaWduZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlKHQudG9Ud29zKDI1NikudG9BcnJheSgpKX0sdC5zaGEzPWZ1bmN0aW9uKGUscil7c3dpdGNoKGU9dC50b0J1ZmZlcihlKSxyfHwocj0yNTYpLHIpe2Nhc2UgMjI0OnJldHVybiBvKGUpO2Nhc2UgMjU2OnJldHVybiBzKGUpO2Nhc2UgMzg0OnJldHVybiBhKGUpO2Nhc2UgNTEyOnJldHVybiBmKGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhbGdvcml0aG06IGtlY2Nha1wiK3IpfX0sdC5zaGEyNTY9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dC50b0J1ZmZlcihlKSxsKFwic2hhMjU2XCIpLnVwZGF0ZShlKS5kaWdlc3QoKX0sdC5yaXBlbWQxNjA9ZnVuY3Rpb24oZSxyKXtlPXQudG9CdWZmZXIoZSk7dmFyIG49bChcInJtZDE2MFwiKS51cGRhdGUoZSkuZGlnZXN0KCk7cmV0dXJuITA9PT1yP3Quc2V0TGVuZ3RoKG4sMzIpOm59LHQucmxwaGFzaD1mdW5jdGlvbihlKXtyZXR1cm4gdC5zaGEzKGguZW5jb2RlKGUpKX0sdC5pc1ZhbGlkUHJpdmF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdS5wcml2YXRlS2V5VmVyaWZ5KGUpfSx0LmlzVmFsaWRQdWJsaWM9ZnVuY3Rpb24odCxyKXtyZXR1cm4gNjQ9PT10Lmxlbmd0aD91LnB1YmxpY0tleVZlcmlmeShlLmNvbmNhdChbbmV3IGUoWzRdKSx0XSkpOiEhciYmdS5wdWJsaWNLZXlWZXJpZnkodCl9LHQucHViVG9BZGRyZXNzPXQucHVibGljVG9BZGRyZXNzPWZ1bmN0aW9uKGUscil7cmV0dXJuIGU9dC50b0J1ZmZlcihlKSxyJiY2NCE9PWUubGVuZ3RoJiYoZT11LnB1YmxpY0tleUNvbnZlcnQoZSwhMSkuc2xpY2UoMSkpLGMoNjQ9PT1lLmxlbmd0aCksdC5zaGEzKGUpLnNsaWNlKC0yMCl9O3ZhciBwPXQucHJpdmF0ZVRvUHVibGljPWZ1bmN0aW9uKGUpe3JldHVybiBlPXQudG9CdWZmZXIoZSksdS5wdWJsaWNLZXlDcmVhdGUoZSwhMSkuc2xpY2UoMSl9O3QuaW1wb3J0UHVibGljPWZ1bmN0aW9uKGUpe3JldHVybiA2NCE9PShlPXQudG9CdWZmZXIoZSkpLmxlbmd0aCYmKGU9dS5wdWJsaWNLZXlDb252ZXJ0KGUsITEpLnNsaWNlKDEpKSxlfSx0LmVjc2lnbj1mdW5jdGlvbihlLHQpe3ZhciByPXUuc2lnbihlLHQpLG49e307cmV0dXJuIG4ucj1yLnNpZ25hdHVyZS5zbGljZSgwLDMyKSxuLnM9ci5zaWduYXR1cmUuc2xpY2UoMzIsNjQpLG4udj1yLnJlY292ZXJ5KzI3LG59LHQuZWNyZWNvdmVyPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPWUuY29uY2F0KFt0LnNldExlbmd0aChpLDMyKSx0LnNldExlbmd0aChvLDMyKV0sNjQpLHM9dC5idWZmZXJUb0ludChuKS0yNztpZigwIT09cyYmMSE9PXMpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzaWduYXR1cmUgdiB2YWx1ZVwiKTt2YXIgZj11LnJlY292ZXIocixhLHMpO3JldHVybiB1LnB1YmxpY0tleUNvbnZlcnQoZiwhMSkuc2xpY2UoMSl9LHQudG9ScGNTaWc9ZnVuY3Rpb24ocixuLGkpe3JldHVybiB0LmJ1ZmZlclRvSGV4KGUuY29uY2F0KFtuLGksdC50b0J1ZmZlcihyLTI3KV0pKX0sdC5mcm9tUnBjU2lnPWZ1bmN0aW9uKGUpe3ZhciByPShlPXQudG9CdWZmZXIoZSkpWzY0XTtyZXR1cm4gcjwyNyYmKHIrPTI3KSx7djpyLHI6ZS5zbGljZSgwLDMyKSxzOmUuc2xpY2UoMzIsNjQpfX0sdC5wcml2YXRlVG9BZGRyZXNzPWZ1bmN0aW9uKGUpe3JldHVybiB0LnB1YmxpY1RvQWRkcmVzcyhwKGUpKX0sdC5pc1ZhbGlkQWRkcmVzcz1mdW5jdGlvbihlKXtyZXR1cm4vXjB4WzAtOWEtZkEtRl17NDB9JC9pLnRlc3QoZSl9LHQudG9DaGVja3N1bUFkZHJlc3M9ZnVuY3Rpb24oZSl7ZT10LnN0cmlwSGV4UHJlZml4KGUpLnRvTG93ZXJDYXNlKCk7Zm9yKHZhciByPXQuc2hhMyhlKS50b1N0cmluZyhcImhleFwiKSxuPVwiMHhcIixpPTA7aTxlLmxlbmd0aDtpKyspcGFyc2VJbnQocltpXSwxNik+PTg/bis9ZVtpXS50b1VwcGVyQ2FzZSgpOm4rPWVbaV07cmV0dXJuIG59LHQuaXNWYWxpZENoZWNrc3VtQWRkcmVzcz1mdW5jdGlvbihlKXtyZXR1cm4gdC5pc1ZhbGlkQWRkcmVzcyhlKSYmdC50b0NoZWNrc3VtQWRkcmVzcyhlKT09PWV9LHQuZ2VuZXJhdGVBZGRyZXNzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9dC50b0J1ZmZlcihyKSxuPShuPW5ldyBkKG4pKS5pc1plcm8oKT9udWxsOm5ldyBlKG4udG9BcnJheSgpKSx0LnJscGhhc2goW3Isbl0pLnNsaWNlKC0yMCl9LHQuaXNQcmVjb21waWxlZD1mdW5jdGlvbihlKXt2YXIgcj10LnVucGFkKGUpO3JldHVybiAxPT09ci5sZW5ndGgmJnJbMF0+MCYmclswXTw1fSx0LmlzSGV4UHJlZml4ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCIweFwiPT09ZS5zbGljZSgwLDIpfSx0LnN0cmlwSGV4UHJlZml4PWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBlP2U6dC5pc0hleFByZWZpeGVkKGUpP2Uuc2xpY2UoMik6ZX0sdC5hZGRIZXhQcmVmaXg9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGV8fHQuaXNIZXhQcmVmaXhlZChlKT9lOlwiMHhcIitlfSx0LnBhZFRvRXZlbj1mdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGglMiYmKGU9XCIwXCIrZSksZX0sdC5iYVRvSlNPTj1mdW5jdGlvbihyKXtpZihlLmlzQnVmZmVyKHIpKXJldHVyblwiMHhcIityLnRvU3RyaW5nKFwiaGV4XCIpO2lmKHIgaW5zdGFuY2VvZiBBcnJheSl7Zm9yKHZhciBuPVtdLGk9MDtpPHIubGVuZ3RoO2krKyluLnB1c2godC5iYVRvSlNPTihyW2ldKSk7cmV0dXJuIG59fSx0LmRlZmluZVByb3BlcnRpZXM9ZnVuY3Rpb24ocixpLG8pe2lmKHIucmF3PVtdLHIuX2ZpZWxkcz1bXSxyLnRvSlNPTj1mdW5jdGlvbihlKXtpZihlKXt2YXIgbj17fTtyZXR1cm4gci5fZmllbGRzLmZvckVhY2goKGZ1bmN0aW9uKGUpe25bZV09XCIweFwiK3JbZV0udG9TdHJpbmcoXCJoZXhcIil9KSksbn1yZXR1cm4gdC5iYVRvSlNPTih0aGlzLnJhdyl9LHIuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIGguZW5jb2RlKHIucmF3KX0saS5mb3JFYWNoKChmdW5jdGlvbihuLGkpe2Z1bmN0aW9uIG8oKXtyZXR1cm4gci5yYXdbaV19ZnVuY3Rpb24gYShvKXtcIjAwXCIhPT0obz10LnRvQnVmZmVyKG8pKS50b1N0cmluZyhcImhleFwiKXx8bi5hbGxvd1plcm98fChvPW5ldyBlKFtdKSksbi5hbGxvd0xlc3MmJm4ubGVuZ3RoPyhvPXQuc3RyaXBaZXJvcyhvKSxjKG4ubGVuZ3RoPj1vLmxlbmd0aCxcIlRoZSBmaWVsZCBcIituLm5hbWUrXCIgbXVzdCBub3QgaGF2ZSBtb3JlIFwiK24ubGVuZ3RoK1wiIGJ5dGVzXCIpKTpuLmFsbG93WmVybyYmMD09PW8ubGVuZ3RofHwhbi5sZW5ndGh8fGMobi5sZW5ndGg9PT1vLmxlbmd0aCxcIlRoZSBmaWVsZCBcIituLm5hbWUrXCIgbXVzdCBoYXZlIGJ5dGUgbGVuZ3RoIG9mIFwiK24ubGVuZ3RoKSxyLnJhd1tpXT1vfXIuX2ZpZWxkcy5wdXNoKG4ubmFtZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbi5uYW1lLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6byxzZXQ6YX0pLG4uZGVmYXVsdCYmKHJbbi5uYW1lXT1uLmRlZmF1bHQpLG4uYWxpYXMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG4uYWxpYXMse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHNldDphLGdldDpvfSl9KSksbylpZihcInN0cmluZ1wiPT10eXBlb2YgbyYmKG89bmV3IGUodC5zdHJpcEhleFByZWZpeChvKSxcImhleFwiKSksZS5pc0J1ZmZlcihvKSYmKG89aC5kZWNvZGUobykpLEFycmF5LmlzQXJyYXkobykpe2lmKG8ubGVuZ3RoPnIuX2ZpZWxkcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwid3JvbmcgbnVtYmVyIG9mIGZpZWxkcyBpbiBkYXRhXCIpO28uZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXtyW3IuX2ZpZWxkc1tuXV09dC50b0J1ZmZlcihlKX0pKX1lbHNle2lmKFwib2JqZWN0XCIhPT0odm9pZCAwPT09bz9cInVuZGVmaW5lZFwiOm4obykpKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0YVwiKTtmb3IodmFyIGEgaW4gbyktMSE9PXIuX2ZpZWxkcy5pbmRleE9mKGEpJiYoclthXT1vW2FdKX19fSkuY2FsbCh0aGlzLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPXIoMjMyKSxpPXIoMjMzKTt0LmtlY2NhazIyND1uLmNyZWF0ZUhhc2hGdW5jdGlvbigoZnVuY3Rpb24oKXtyZXR1cm4gaShcImtlY2NhazIyNFwiKX0pKSx0LmtlY2NhazI1Nj1uLmNyZWF0ZUhhc2hGdW5jdGlvbigoZnVuY3Rpb24oKXtyZXR1cm4gaShcImtlY2NhazI1NlwiKX0pKSx0LmtlY2NhazM4ND1uLmNyZWF0ZUhhc2hGdW5jdGlvbigoZnVuY3Rpb24oKXtyZXR1cm4gaShcImtlY2NhazM4NFwiKX0pKSx0LmtlY2NhazUxMj1uLmNyZWF0ZUhhc2hGdW5jdGlvbigoZnVuY3Rpb24oKXtyZXR1cm4gaShcImtlY2NhazUxMlwiKX0pKX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LmNyZWF0ZUhhc2hGdW5jdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dCgpO3JldHVybiBuLnVwZGF0ZShyKSxlLmZyb20obi5kaWdlc3QoKSl9fX0pLmNhbGwodGhpcyxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9cigyMzQpKHIoMjM3KSl9LGZ1bmN0aW9uKGUsdCxyKXtjb25zdCBuPXIoMjM1KSxpPXIoMjM2KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7Y29uc3QgdD1uKGUpLHI9aShlKTtyZXR1cm4gZnVuY3Rpb24oZSxuKXtzd2l0Y2goXCJzdHJpbmdcIj09dHlwZW9mIGU/ZS50b0xvd2VyQ2FzZSgpOmUpe2Nhc2VcImtlY2NhazIyNFwiOnJldHVybiBuZXcgdCgxMTUyLDQ0OCxudWxsLDIyNCxuKTtjYXNlXCJrZWNjYWsyNTZcIjpyZXR1cm4gbmV3IHQoMTA4OCw1MTIsbnVsbCwyNTYsbik7Y2FzZVwia2VjY2FrMzg0XCI6cmV0dXJuIG5ldyB0KDgzMiw3NjgsbnVsbCwzODQsbik7Y2FzZVwia2VjY2FrNTEyXCI6cmV0dXJuIG5ldyB0KDU3NiwxMDI0LG51bGwsNTEyLG4pO2Nhc2VcInNoYTMtMjI0XCI6cmV0dXJuIG5ldyB0KDExNTIsNDQ4LDYsMjI0LG4pO2Nhc2VcInNoYTMtMjU2XCI6cmV0dXJuIG5ldyB0KDEwODgsNTEyLDYsMjU2LG4pO2Nhc2VcInNoYTMtMzg0XCI6cmV0dXJuIG5ldyB0KDgzMiw3NjgsNiwzODQsbik7Y2FzZVwic2hhMy01MTJcIjpyZXR1cm4gbmV3IHQoNTc2LDEwMjQsNiw1MTIsbik7Y2FzZVwic2hha2UxMjhcIjpyZXR1cm4gbmV3IHIoMTM0NCwyNTYsMzEsbik7Y2FzZVwic2hha2UyNTZcIjpyZXR1cm4gbmV3IHIoMTA4OCw1MTIsMzEsbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGQgYWxnb3JpdGhtOiBcIitlKX19fX0sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbih0KXtjb25zdHtUcmFuc2Zvcm06bn09cigxOCk7ZS5leHBvcnRzPWU9PmNsYXNzIHIgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKHQscixuLGksbyl7c3VwZXIobyksdGhpcy5fcmF0ZT10LHRoaXMuX2NhcGFjaXR5PXIsdGhpcy5fZGVsaW1pdGVkU3VmZml4PW4sdGhpcy5faGFzaEJpdExlbmd0aD1pLHRoaXMuX29wdGlvbnM9byx0aGlzLl9zdGF0ZT1uZXcgZSx0aGlzLl9zdGF0ZS5pbml0aWFsaXplKHQsciksdGhpcy5fZmluYWxpemVkPSExfV90cmFuc2Zvcm0oZSx0LHIpe2xldCBuPW51bGw7dHJ5e3RoaXMudXBkYXRlKGUsdCl9Y2F0Y2goZSl7bj1lfXIobil9X2ZsdXNoKGUpe2xldCB0PW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChlKXt0PWV9ZSh0KX11cGRhdGUoZSxyKXtpZighdC5pc0J1ZmZlcihlKSYmXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRhdGEgbXVzdCBiZSBhIHN0cmluZyBvciBhIGJ1ZmZlclwiKTtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKFwiRGlnZXN0IGFscmVhZHkgY2FsbGVkXCIpO3JldHVybiB0LmlzQnVmZmVyKGUpfHwoZT10LmZyb20oZSxyKSksdGhpcy5fc3RhdGUuYWJzb3JiKGUpLHRoaXN9ZGlnZXN0KGUpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoXCJEaWdlc3QgYWxyZWFkeSBjYWxsZWRcIik7dGhpcy5fZmluYWxpemVkPSEwLHRoaXMuX2RlbGltaXRlZFN1ZmZpeCYmdGhpcy5fc3RhdGUuYWJzb3JiTGFzdEZld0JpdHModGhpcy5fZGVsaW1pdGVkU3VmZml4KTtsZXQgdD10aGlzLl9zdGF0ZS5zcXVlZXplKHRoaXMuX2hhc2hCaXRMZW5ndGgvOCk7cmV0dXJuIHZvaWQgMCE9PWUmJih0PXQudG9TdHJpbmcoZSkpLHRoaXMuX3Jlc2V0U3RhdGUoKSx0fV9yZXNldFN0YXRlKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmluaXRpYWxpemUodGhpcy5fcmF0ZSx0aGlzLl9jYXBhY2l0eSksdGhpc31fY2xvbmUoKXtjb25zdCBlPW5ldyByKHRoaXMuX3JhdGUsdGhpcy5fY2FwYWNpdHksdGhpcy5fZGVsaW1pdGVkU3VmZml4LHRoaXMuX2hhc2hCaXRMZW5ndGgsdGhpcy5fb3B0aW9ucyk7cmV0dXJuIHRoaXMuX3N0YXRlLmNvcHkoZS5fc3RhdGUpLGUuX2ZpbmFsaXplZD10aGlzLl9maW5hbGl6ZWQsZX19fSkuY2FsbCh0aGlzLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbih0KXtjb25zdHtUcmFuc2Zvcm06bn09cigxOCk7ZS5leHBvcnRzPWU9PmNsYXNzIHIgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKHQscixuLGkpe3N1cGVyKGkpLHRoaXMuX3JhdGU9dCx0aGlzLl9jYXBhY2l0eT1yLHRoaXMuX2RlbGltaXRlZFN1ZmZpeD1uLHRoaXMuX29wdGlvbnM9aSx0aGlzLl9zdGF0ZT1uZXcgZSx0aGlzLl9zdGF0ZS5pbml0aWFsaXplKHQsciksdGhpcy5fZmluYWxpemVkPSExfV90cmFuc2Zvcm0oZSx0LHIpe2xldCBuPW51bGw7dHJ5e3RoaXMudXBkYXRlKGUsdCl9Y2F0Y2goZSl7bj1lfXIobil9X2ZsdXNoKCl7fV9yZWFkKGUpe3RoaXMucHVzaCh0aGlzLnNxdWVlemUoZSkpfXVwZGF0ZShlLHIpe2lmKCF0LmlzQnVmZmVyKGUpJiZcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGF0YSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgYnVmZmVyXCIpO2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoXCJTcXVlZXplIGFscmVhZHkgY2FsbGVkXCIpO3JldHVybiB0LmlzQnVmZmVyKGUpfHwoZT10LmZyb20oZSxyKSksdGhpcy5fc3RhdGUuYWJzb3JiKGUpLHRoaXN9c3F1ZWV6ZShlLHQpe3RoaXMuX2ZpbmFsaXplZHx8KHRoaXMuX2ZpbmFsaXplZD0hMCx0aGlzLl9zdGF0ZS5hYnNvcmJMYXN0RmV3Qml0cyh0aGlzLl9kZWxpbWl0ZWRTdWZmaXgpKTtsZXQgcj10aGlzLl9zdGF0ZS5zcXVlZXplKGUpO3JldHVybiB2b2lkIDAhPT10JiYocj1yLnRvU3RyaW5nKHQpKSxyfV9yZXNldFN0YXRlKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmluaXRpYWxpemUodGhpcy5fcmF0ZSx0aGlzLl9jYXBhY2l0eSksdGhpc31fY2xvbmUoKXtjb25zdCBlPW5ldyByKHRoaXMuX3JhdGUsdGhpcy5fY2FwYWNpdHksdGhpcy5fZGVsaW1pdGVkU3VmZml4LHRoaXMuX29wdGlvbnMpO3JldHVybiB0aGlzLl9zdGF0ZS5jb3B5KGUuX3N0YXRlKSxlLl9maW5hbGl6ZWQ9dGhpcy5fZmluYWxpemVkLGV9fX0pLmNhbGwodGhpcyxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24odCl7Y29uc3Qgbj1yKDIzOCk7ZnVuY3Rpb24gaSgpe3RoaXMuc3RhdGU9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLHRoaXMuYmxvY2tTaXplPW51bGwsdGhpcy5jb3VudD0wLHRoaXMuc3F1ZWV6aW5nPSExfWkucHJvdG90eXBlLmluaXRpYWxpemU9ZnVuY3Rpb24oZSx0KXtmb3IobGV0IGU9MDtlPDUwOysrZSl0aGlzLnN0YXRlW2VdPTA7dGhpcy5ibG9ja1NpemU9ZS84LHRoaXMuY291bnQ9MCx0aGlzLnNxdWVlemluZz0hMX0saS5wcm90b3R5cGUuYWJzb3JiPWZ1bmN0aW9uKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7Kyt0KXRoaXMuc3RhdGVbfn4odGhpcy5jb3VudC80KV1ePWVbdF08PHRoaXMuY291bnQlNCo4LHRoaXMuY291bnQrPTEsdGhpcy5jb3VudD09PXRoaXMuYmxvY2tTaXplJiYobi5wMTYwMCh0aGlzLnN0YXRlKSx0aGlzLmNvdW50PTApfSxpLnByb3RvdHlwZS5hYnNvcmJMYXN0RmV3Qml0cz1mdW5jdGlvbihlKXt0aGlzLnN0YXRlW35+KHRoaXMuY291bnQvNCldXj1lPDx0aGlzLmNvdW50JTQqOCwwIT0oMTI4JmUpJiZ0aGlzLmNvdW50PT09dGhpcy5ibG9ja1NpemUtMSYmbi5wMTYwMCh0aGlzLnN0YXRlKSx0aGlzLnN0YXRlW35+KCh0aGlzLmJsb2NrU2l6ZS0xKS80KV1ePTEyODw8KHRoaXMuYmxvY2tTaXplLTEpJTQqOCxuLnAxNjAwKHRoaXMuc3RhdGUpLHRoaXMuY291bnQ9MCx0aGlzLnNxdWVlemluZz0hMH0saS5wcm90b3R5cGUuc3F1ZWV6ZT1mdW5jdGlvbihlKXt0aGlzLnNxdWVlemluZ3x8dGhpcy5hYnNvcmJMYXN0RmV3Qml0cygxKTtjb25zdCByPXQuYWxsb2MoZSk7Zm9yKGxldCB0PTA7dDxlOysrdClyW3RdPXRoaXMuc3RhdGVbfn4odGhpcy5jb3VudC80KV0+Pj50aGlzLmNvdW50JTQqOCYyNTUsdGhpcy5jb3VudCs9MSx0aGlzLmNvdW50PT09dGhpcy5ibG9ja1NpemUmJihuLnAxNjAwKHRoaXMuc3RhdGUpLHRoaXMuY291bnQ9MCk7cmV0dXJuIHJ9LGkucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSl7Zm9yKGxldCB0PTA7dDw1MDsrK3QpZS5zdGF0ZVt0XT10aGlzLnN0YXRlW3RdO2UuYmxvY2tTaXplPXRoaXMuYmxvY2tTaXplLGUuY291bnQ9dGhpcy5jb3VudCxlLnNxdWVlemluZz10aGlzLnNxdWVlemluZ30sZS5leHBvcnRzPWl9KS5jYWxsKHRoaXMscigxKS5CdWZmZXIpfSxmdW5jdGlvbihlLHQpe2NvbnN0IHI9WzEsMCwzMjg5OCwwLDMyOTA2LDIxNDc0ODM2NDgsMjE0NzUxNjQxNiwyMTQ3NDgzNjQ4LDMyOTA3LDAsMjE0NzQ4MzY0OSwwLDIxNDc1MTY1NDUsMjE0NzQ4MzY0OCwzMjc3NywyMTQ3NDgzNjQ4LDEzOCwwLDEzNiwwLDIxNDc1MTY0MjUsMCwyMTQ3NDgzNjU4LDAsMjE0NzUxNjU1NSwwLDEzOSwyMTQ3NDgzNjQ4LDMyOTA1LDIxNDc0ODM2NDgsMzI3NzEsMjE0NzQ4MzY0OCwzMjc3MCwyMTQ3NDgzNjQ4LDEyOCwyMTQ3NDgzNjQ4LDMyNzc4LDAsMjE0NzQ4MzY1OCwyMTQ3NDgzNjQ4LDIxNDc1MTY1NDUsMjE0NzQ4MzY0OCwzMjg5NiwyMTQ3NDgzNjQ4LDIxNDc0ODM2NDksMCwyMTQ3NTE2NDI0LDIxNDc0ODM2NDhdO3QucDE2MDA9ZnVuY3Rpb24oZSl7Zm9yKGxldCB0PTA7dDwyNDsrK3Qpe2NvbnN0IG49ZVswXV5lWzEwXV5lWzIwXV5lWzMwXV5lWzQwXSxpPWVbMV1eZVsxMV1eZVsyMV1eZVszMV1eZVs0MV0sbz1lWzJdXmVbMTJdXmVbMjJdXmVbMzJdXmVbNDJdLGE9ZVszXV5lWzEzXV5lWzIzXV5lWzMzXV5lWzQzXSxzPWVbNF1eZVsxNF1eZVsyNF1eZVszNF1eZVs0NF0sZj1lWzVdXmVbMTVdXmVbMjVdXmVbMzVdXmVbNDVdLHU9ZVs2XV5lWzE2XV5lWzI2XV5lWzM2XV5lWzQ2XSxjPWVbN11eZVsxN11eZVsyN11eZVszN11eZVs0N10saD1lWzhdXmVbMThdXmVbMjhdXmVbMzhdXmVbNDhdLGQ9ZVs5XV5lWzE5XV5lWzI5XV5lWzM5XV5lWzQ5XTtsZXQgbD1oXihvPDwxfGE+Pj4zMSkscD1kXihhPDwxfG8+Pj4zMSk7Y29uc3QgYj1lWzBdXmwseT1lWzFdXnAsZz1lWzEwXV5sLHY9ZVsxMV1ecCxtPWVbMjBdXmwsdz1lWzIxXV5wLF89ZVszMF1ebCxFPWVbMzFdXnAsUz1lWzQwXV5sLEE9ZVs0MV1ecDtsPW5eKHM8PDF8Zj4+PjMxKSxwPWleKGY8PDF8cz4+PjMxKTtjb25zdCB4PWVbMl1ebCxrPWVbM11ecCxNPWVbMTJdXmwsVD1lWzEzXV5wLEk9ZVsyMl1ebCxSPWVbMjNdXnAsUD1lWzMyXV5sLEw9ZVszM11ecCxCPWVbNDJdXmwsQz1lWzQzXV5wO2w9b14odTw8MXxjPj4+MzEpLHA9YV4oYzw8MXx1Pj4+MzEpO2NvbnN0IE89ZVs0XV5sLE49ZVs1XV5wLGo9ZVsxNF1ebCxEPWVbMTVdXnAsVT1lWzI0XV5sLHo9ZVsyNV1ecCxxPWVbMzRdXmwsRj1lWzM1XV5wLEs9ZVs0NF1ebCxIPWVbNDVdXnA7bD1zXihoPDwxfGQ+Pj4zMSkscD1mXihkPDwxfGg+Pj4zMSk7Y29uc3QgVj1lWzZdXmwsWT1lWzddXnAsVz1lWzE2XV5sLEc9ZVsxN11ecCxaPWVbMjZdXmwsSj1lWzI3XV5wLCQ9ZVszNl1ebCxYPWVbMzddXnAsUT1lWzQ2XV5sLGVlPWVbNDddXnA7bD11XihuPDwxfGk+Pj4zMSkscD1jXihpPDwxfG4+Pj4zMSk7Y29uc3QgdGU9ZVs4XV5sLHJlPWVbOV1ecCxuZT1lWzE4XV5sLGllPWVbMTldXnAsb2U9ZVsyOF1ebCxhZT1lWzI5XV5wLHNlPWVbMzhdXmwsZmU9ZVszOV1ecCx1ZT1lWzQ4XV5sLGNlPWVbNDldXnAsaGU9YixkZT15LGxlPXY8PDR8Zz4+PjI4LHBlPWc8PDR8dj4+PjI4LGJlPW08PDN8dz4+PjI5LHllPXc8PDN8bT4+PjI5LGdlPUU8PDl8Xz4+PjIzLHZlPV88PDl8RT4+PjIzLG1lPVM8PDE4fEE+Pj4xNCx3ZT1BPDwxOHxTPj4+MTQsX2U9eDw8MXxrPj4+MzEsRWU9azw8MXx4Pj4+MzEsU2U9VDw8MTJ8TT4+PjIwLEFlPU08PDEyfFQ+Pj4yMCx4ZT1JPDwxMHxSPj4+MjIsa2U9Ujw8MTB8ST4+PjIyLE1lPUw8PDEzfFA+Pj4xOSxUZT1QPDwxM3xMPj4+MTksSWU9Qjw8MnxDPj4+MzAsUmU9Qzw8MnxCPj4+MzAsUGU9Tjw8MzB8Tz4+PjIsTGU9Tzw8MzB8Tj4+PjIsQmU9ajw8NnxEPj4+MjYsQ2U9RDw8NnxqPj4+MjYsT2U9ejw8MTF8VT4+PjIxLE5lPVU8PDExfHo+Pj4yMSxqZT1xPDwxNXxGPj4+MTcsRGU9Rjw8MTV8cT4+PjE3LFVlPUg8PDI5fEs+Pj4zLHplPUs8PDI5fEg+Pj4zLHFlPVY8PDI4fFk+Pj40LEZlPVk8PDI4fFY+Pj40LEtlPUc8PDIzfFc+Pj45LEhlPVc8PDIzfEc+Pj45LFZlPVo8PDI1fEo+Pj43LFllPUo8PDI1fFo+Pj43LFdlPSQ8PDIxfFg+Pj4xMSxHZT1YPDwyMXwkPj4+MTEsWmU9ZWU8PDI0fFE+Pj44LEplPVE8PDI0fGVlPj4+OCwkZT10ZTw8Mjd8cmU+Pj41LFhlPXJlPDwyN3x0ZT4+PjUsUWU9bmU8PDIwfGllPj4+MTIsZXQ9aWU8PDIwfG5lPj4+MTIsdHQ9YWU8PDd8b2U+Pj4yNSxydD1vZTw8N3xhZT4+PjI1LG50PXNlPDw4fGZlPj4+MjQsaXQ9ZmU8PDh8c2U+Pj4yNCxvdD11ZTw8MTR8Y2U+Pj4xOCxhdD1jZTw8MTR8dWU+Pj4xODtlWzBdPWhlXn5TZSZPZSxlWzFdPWRlXn5BZSZOZSxlWzEwXT1xZV5+UWUmYmUsZVsxMV09RmVefmV0JnllLGVbMjBdPV9lXn5CZSZWZSxlWzIxXT1FZV5+Q2UmWWUsZVszMF09JGVefmxlJnhlLGVbMzFdPVhlXn5wZSZrZSxlWzQwXT1QZV5+S2UmdHQsZVs0MV09TGVefkhlJnJ0LGVbMl09U2Vefk9lJldlLGVbM109QWVefk5lJkdlLGVbMTJdPVFlXn5iZSZNZSxlWzEzXT1ldF5+eWUmVGUsZVsyMl09QmVeflZlJm50LGVbMjNdPUNlXn5ZZSZpdCxlWzMyXT1sZV5+eGUmamUsZVszM109cGVefmtlJkRlLGVbNDJdPUtlXn50dCZnZSxlWzQzXT1IZV5+cnQmdmUsZVs0XT1PZV5+V2Umb3QsZVs1XT1OZV5+R2UmYXQsZVsxNF09YmVefk1lJlVlLGVbMTVdPXllXn5UZSZ6ZSxlWzI0XT1WZV5+bnQmbWUsZVsyNV09WWVefml0JndlLGVbMzRdPXhlXn5qZSZaZSxlWzM1XT1rZV5+RGUmSmUsZVs0NF09dHRefmdlJkllLGVbNDVdPXJ0Xn52ZSZSZSxlWzZdPVdlXn5vdCZoZSxlWzddPUdlXn5hdCZkZSxlWzE2XT1NZV5+VWUmcWUsZVsxN109VGVefnplJkZlLGVbMjZdPW50Xn5tZSZfZSxlWzI3XT1pdF5+d2UmRWUsZVszNl09amVeflplJiRlLGVbMzddPURlXn5KZSZYZSxlWzQ2XT1nZV5+SWUmUGUsZVs0N109dmVeflJlJkxlLGVbOF09b3RefmhlJlNlLGVbOV09YXRefmRlJkFlLGVbMThdPVVlXn5xZSZRZSxlWzE5XT16ZV5+RmUmZXQsZVsyOF09bWVefl9lJkJlLGVbMjldPXdlXn5FZSZDZSxlWzM4XT1aZV5+JGUmbGUsZVszOV09SmVeflhlJnBlLGVbNDhdPUllXn5QZSZLZSxlWzQ5XT1SZV5+TGUmSGUsZVswXV49clsyKnRdLGVbMV1ePXJbMip0KzFdfX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24odCl7dmFyIG49cigyNDApLGk9cigyNDUpLG89cigyNDYpLGE9ZnVuY3Rpb24oZSl7cmV0dXJuIDMyPT09ZS5sZW5ndGgmJm4ucHJpdmF0ZUtleVZlcmlmeShVaW50OEFycmF5LmZyb20oZSkpfTtlLmV4cG9ydHM9e3ByaXZhdGVLZXlWZXJpZnk6YSxwcml2YXRlS2V5RXhwb3J0OmZ1bmN0aW9uKGUsdCl7aWYoMzIhPT1lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInByaXZhdGUga2V5IGxlbmd0aCBpcyBpbnZhbGlkXCIpO3ZhciByPWkucHJpdmF0ZUtleUV4cG9ydChlLHQpO3JldHVybiBvLnByaXZhdGVLZXlFeHBvcnQoZSxyLHQpfSxwcml2YXRlS2V5SW1wb3J0OmZ1bmN0aW9uKGUpe2lmKG51bGwhPT0oZT1vLnByaXZhdGVLZXlJbXBvcnQoZSkpJiYzMj09PWUubGVuZ3RoJiZhKGUpKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihcImNvdWxkbid0IGltcG9ydCBmcm9tIERFUiBmb3JtYXRcIil9LHByaXZhdGVLZXlOZWdhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZnJvbShuLnByaXZhdGVLZXlOZWdhdGUoVWludDhBcnJheS5mcm9tKGUpKSl9LHByaXZhdGVLZXlNb2RJbnZlcnNlOmZ1bmN0aW9uKGUpe2lmKDMyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwicHJpdmF0ZSBrZXkgbGVuZ3RoIGlzIGludmFsaWRcIik7cmV0dXJuIHQuZnJvbShpLnByaXZhdGVLZXlNb2RJbnZlcnNlKFVpbnQ4QXJyYXkuZnJvbShlKSkpfSxwcml2YXRlS2V5VHdlYWtBZGQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5mcm9tKG4ucHJpdmF0ZUtleVR3ZWFrQWRkKFVpbnQ4QXJyYXkuZnJvbShlKSxyKSl9LHByaXZhdGVLZXlUd2Vha011bDpmdW5jdGlvbihlLHIpe3JldHVybiB0LmZyb20obi5wcml2YXRlS2V5VHdlYWtNdWwoVWludDhBcnJheS5mcm9tKGUpLFVpbnQ4QXJyYXkuZnJvbShyKSkpfSxwdWJsaWNLZXlDcmVhdGU6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5mcm9tKG4ucHVibGljS2V5Q3JlYXRlKFVpbnQ4QXJyYXkuZnJvbShlKSxyKSl9LHB1YmxpY0tleUNvbnZlcnQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5mcm9tKG4ucHVibGljS2V5Q29udmVydChVaW50OEFycmF5LmZyb20oZSkscikpfSxwdWJsaWNLZXlWZXJpZnk6ZnVuY3Rpb24oZSl7cmV0dXJuKDMzPT09ZS5sZW5ndGh8fDY1PT09ZS5sZW5ndGgpJiZuLnB1YmxpY0tleVZlcmlmeShVaW50OEFycmF5LmZyb20oZSkpfSxwdWJsaWNLZXlUd2Vha0FkZDpmdW5jdGlvbihlLHIsaSl7cmV0dXJuIHQuZnJvbShuLnB1YmxpY0tleVR3ZWFrQWRkKFVpbnQ4QXJyYXkuZnJvbShlKSxVaW50OEFycmF5LmZyb20ociksaSkpfSxwdWJsaWNLZXlUd2Vha011bDpmdW5jdGlvbihlLHIsaSl7cmV0dXJuIHQuZnJvbShuLnB1YmxpY0tleVR3ZWFrTXVsKFVpbnQ4QXJyYXkuZnJvbShlKSxVaW50OEFycmF5LmZyb20ociksaSkpfSxwdWJsaWNLZXlDb21iaW5lOmZ1bmN0aW9uKGUscil7dmFyIGk9W107cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5wdXNoKFVpbnQ4QXJyYXkuZnJvbShlKSl9KSksdC5mcm9tKG4ucHVibGljS2V5Q29tYmluZShpLHIpKX0sc2lnbmF0dXJlTm9ybWFsaXplOmZ1bmN0aW9uKGUpe3JldHVybiB0LmZyb20obi5zaWduYXR1cmVOb3JtYWxpemUoVWludDhBcnJheS5mcm9tKGUpKSl9LHNpZ25hdHVyZUV4cG9ydDpmdW5jdGlvbihlKXtyZXR1cm4gdC5mcm9tKG4uc2lnbmF0dXJlRXhwb3J0KFVpbnQ4QXJyYXkuZnJvbShlKSkpfSxzaWduYXR1cmVJbXBvcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZnJvbShuLnNpZ25hdHVyZUltcG9ydChVaW50OEFycmF5LmZyb20oZSkpKX0sc2lnbmF0dXJlSW1wb3J0TGF4OmZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNpZ25hdHVyZSBsZW5ndGggaXMgaW52YWxpZFwiKTt2YXIgdD1vLnNpZ25hdHVyZUltcG9ydExheChlKTtpZihudWxsPT09dCl0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZG4ndCBwYXJzZSBERVIgc2lnbmF0dXJlXCIpO3JldHVybiBpLnNpZ25hdHVyZUltcG9ydCh0KX0sc2lnbjpmdW5jdGlvbihlLHIsaSl7aWYobnVsbD09PWkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMgc2hvdWxkIGJlIGFuIE9iamVjdFwiKTt2YXIgbz12b2lkIDA7aWYoaSl7aWYobz17fSxudWxsPT09aS5kYXRhKXRocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb25zLmRhdGEgc2hvdWxkIGJlIGEgQnVmZmVyXCIpO2lmKGkuZGF0YSl7aWYoMzIhPT1pLmRhdGEubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwib3B0aW9ucy5kYXRhIGxlbmd0aCBpcyBpbnZhbGlkXCIpO28uZGF0YT1uZXcgVWludDhBcnJheShpLmRhdGEpfWlmKG51bGw9PT1pLm5vbmNlZm4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMubm9uY2VmbiBzaG91bGQgYmUgYSBGdW5jdGlvblwiKTtpLm5vbmNlZm4mJihvLm5vbmNlZm49ZnVuY3Rpb24oZSxyLG4sbyxhKXt2YXIgcz1udWxsIT1uP3QuZnJvbShuKTpudWxsLGY9bnVsbCE9bz90LmZyb20obyk6bnVsbCx1PXQuZnJvbShcIlwiKTtyZXR1cm4gaS5ub25jZWZuJiYodT1pLm5vbmNlZm4odC5mcm9tKGUpLHQuZnJvbShyKSxzLGYsYSkpLFVpbnQ4QXJyYXkuZnJvbSh1KX0pfXZhciBhPW4uZWNkc2FTaWduKFVpbnQ4QXJyYXkuZnJvbShlKSxVaW50OEFycmF5LmZyb20ociksbyk7cmV0dXJue3NpZ25hdHVyZTp0LmZyb20oYS5zaWduYXR1cmUpLHJlY292ZXJ5OmEucmVjaWR9fSx2ZXJpZnk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBuLmVjZHNhVmVyaWZ5KFVpbnQ4QXJyYXkuZnJvbSh0KSxVaW50OEFycmF5LmZyb20oZSkscil9LHJlY292ZXI6ZnVuY3Rpb24oZSxyLGksbyl7cmV0dXJuIHQuZnJvbShuLmVjZHNhUmVjb3ZlcihVaW50OEFycmF5LmZyb20ociksaSxVaW50OEFycmF5LmZyb20oZSksbykpfSxlY2RoOmZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZnJvbShuLmVjZGgoVWludDhBcnJheS5mcm9tKGUpLFVpbnQ4QXJyYXkuZnJvbShyKSx7fSkpfSxlY2RoVW5zYWZlOmZ1bmN0aW9uKGUscixuKXtpZigzMyE9PWUubGVuZ3RoJiY2NSE9PWUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwicHVibGljIGtleSBsZW5ndGggaXMgaW52YWxpZFwiKTtpZigzMiE9PXIubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwicHJpdmF0ZSBrZXkgbGVuZ3RoIGlzIGludmFsaWRcIik7cmV0dXJuIHQuZnJvbShpLmVjZGhVbnNhZmUoVWludDhBcnJheS5mcm9tKGUpLFVpbnQ4QXJyYXkuZnJvbShyKSxuKSl9fX0pLmNhbGwodGhpcyxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIG5ldyhyfHwocj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7ZihuLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIHMoZSl7dHJ5e2Yobi50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gZihlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiByP3Q6bmV3IHIoKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4oYSxzKX1mKChuPW4uYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9LGk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmlbMF0pdGhyb3cgaVsxXTtyZXR1cm4gaVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBvPXtuZXh0OnMoMCksdGhyb3c6cygxKSxyZXR1cm46cygyKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYob1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvO2Z1bmN0aW9uIHMobyl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbihvKXtpZihyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7YTspdHJ5e2lmKHI9MSxuJiYoaT0yJm9bMF0/bi5yZXR1cm46b1swXT9uLnRocm93fHwoKGk9bi5yZXR1cm4pJiZpLmNhbGwobiksMCk6bi5uZXh0KSYmIShpPWkuY2FsbChuLG9bMV0pKS5kb25lKXJldHVybiBpO3N3aXRjaChuPTAsaSYmKG89WzImb1swXSxpLnZhbHVlXSksb1swXSl7Y2FzZSAwOmNhc2UgMTppPW87YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOm9bMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxuPW9bMV0sbz1bMF07Y29udGludWU7Y2FzZSA3Om89YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShpPWEudHJ5cywoaT1pLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdKXx8NiE9PW9bMF0mJjIhPT1vWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1vWzBdJiYoIWl8fG9bMV0+aVswXSYmb1sxXTxpWzNdKSl7YS5sYWJlbD1vWzFdO2JyZWFrfWlmKDY9PT1vWzBdJiZhLmxhYmVsPGlbMV0pe2EubGFiZWw9aVsxXSxpPW87YnJlYWt9aWYoaSYmYS5sYWJlbDxpWzJdKXthLmxhYmVsPWlbMl0sYS5vcHMucHVzaChvKTticmVha31pWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9bz10LmNhbGwoZSxhKX1jYXRjaChlKXtvPVs2LGVdLG49MH1maW5hbGx5e3I9aT0wfWlmKDUmb1swXSl0aHJvdyBvWzFdO3JldHVybnt2YWx1ZTpvWzBdP29bMV06dm9pZCAwLGRvbmU6ITB9fShbbyxzXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG89cig5NiksYT1yKDI0Myk7dC5jcmVhdGVQcml2YXRlS2V5PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciBlO3JldHVybiBpKHRoaXMsKGZ1bmN0aW9uKHQpe3N3aXRjaCh0LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsYS5nZXRSYW5kb21CeXRlcygzMildO2Nhc2UgMTpyZXR1cm4gZT10LnNlbnQoKSxvLnByaXZhdGVLZXlWZXJpZnkoZSk/WzIsZV06WzMsMF07Y2FzZSAyOnJldHVyblsyXX19KSl9KSl9LHQuY3JlYXRlUHJpdmF0ZUtleVN5bmM9ZnVuY3Rpb24oKXtmb3IoOzspe3ZhciBlPWEuZ2V0UmFuZG9tQnl0ZXNTeW5jKDMyKTtpZihvLnByaXZhdGVLZXlWZXJpZnkoZSkpcmV0dXJuIGV9fSxmdW5jdGlvbihlKXtmb3IodmFyIHIgaW4gZSl0Lmhhc093blByb3BlcnR5KHIpfHwodFtyXT1lW3JdKX0ocig5NikpfSxmdW5jdGlvbihlLHQpe2NvbnN0IHI9XCJJbXBvc3NpYmxlIGNhc2UuIFBsZWFzZSBjcmVhdGUgaXNzdWUuXCIsbj1cIlRoZSB0d2VhayB3YXMgb3V0IG9mIHJhbmdlIG9yIHRoZSByZXN1bHRlZCBwcml2YXRlIGtleSBpcyBpbnZhbGlkXCIsaT1cIlRoZSB0d2VhayB3YXMgb3V0IG9mIHJhbmdlIG9yIGVxdWFsIHRvIHplcm9cIixvPVwiVW5rbm93IGVycm9yIG9uIGNvbnRleHQgcmFuZG9taXphdGlvblwiLGE9XCJQcml2YXRlIEtleSBpcyBpbnZhbGlkXCIscz1cIlB1YmxpYyBLZXkgY291bGQgbm90IGJlIHBhcnNlZFwiLGY9XCJQdWJsaWMgS2V5IHNlcmlhbGl6YXRpb24gZXJyb3JcIix1PVwiVGhlIHN1bSBvZiB0aGUgcHVibGljIGtleXMgaXMgbm90IHZhbGlkXCIsYz1cIlNpZ25hdHVyZSBjb3VsZCBub3QgYmUgcGFyc2VkXCIsaD1cIlRoZSBub25jZSBnZW5lcmF0aW9uIGZ1bmN0aW9uIGZhaWxlZCwgb3IgdGhlIHByaXZhdGUga2V5IHdhcyBpbnZhbGlkXCIsZD1cIlB1YmxpYyBrZXkgY291bGQgbm90IGJlIHJlY292ZXJcIixsPVwiU2NhbGFyIHdhcyBpbnZhbGlkICh6ZXJvIG9yIG92ZXJmbG93KVwiO2Z1bmN0aW9uIHAoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IodCl9ZnVuY3Rpb24gYihlLHQscil7aWYocCh0IGluc3RhbmNlb2YgVWludDhBcnJheSxgRXhwZWN0ZWQgJHtlfSB0byBiZSBhbiBVaW50OEFycmF5YCksdm9pZCAwIT09cilpZihBcnJheS5pc0FycmF5KHIpKXtjb25zdCBuPWBFeHBlY3RlZCAke2V9IHRvIGJlIGFuIFVpbnQ4QXJyYXkgd2l0aCBsZW5ndGggWyR7ci5qb2luKFwiLCBcIil9XWA7cChyLmluY2x1ZGVzKHQubGVuZ3RoKSxuKX1lbHNle2NvbnN0IG49YEV4cGVjdGVkICR7ZX0gdG8gYmUgYW4gVWludDhBcnJheSB3aXRoIGxlbmd0aCAke3J9YDtwKHQubGVuZ3RoPT09cixuKX19ZnVuY3Rpb24geShlKXtwKFwiQm9vbGVhblwiPT09dihlKSxcIkV4cGVjdGVkIGNvbXByZXNzZWQgdG8gYmUgYSBCb29sZWFuXCIpfWZ1bmN0aW9uIGcoZT0oZT0+bmV3IFVpbnQ4QXJyYXkoZSkpLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWUodCkpLGIoXCJvdXRwdXRcIixlLHQpLGV9ZnVuY3Rpb24gdihlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpfWUuZXhwb3J0cz1lPT4oe2NvbnRleHRSYW5kb21pemUodCl7c3dpdGNoKHAobnVsbD09PXR8fHQgaW5zdGFuY2VvZiBVaW50OEFycmF5LFwiRXhwZWN0ZWQgc2VlZCB0byBiZSBhbiBVaW50OEFycmF5IG9yIG51bGxcIiksbnVsbCE9PXQmJmIoXCJzZWVkXCIsdCwzMiksZS5jb250ZXh0UmFuZG9taXplKHQpKXtjYXNlIDE6dGhyb3cgbmV3IEVycm9yKG8pfX0scHJpdmF0ZUtleVZlcmlmeTp0PT4oYihcInByaXZhdGUga2V5XCIsdCwzMiksMD09PWUucHJpdmF0ZUtleVZlcmlmeSh0KSkscHJpdmF0ZUtleU5lZ2F0ZSh0KXtzd2l0Y2goYihcInByaXZhdGUga2V5XCIsdCwzMiksZS5wcml2YXRlS2V5TmVnYXRlKHQpKXtjYXNlIDA6cmV0dXJuIHQ7Y2FzZSAxOnRocm93IG5ldyBFcnJvcihyKX19LHByaXZhdGVLZXlUd2Vha0FkZCh0LHIpe3N3aXRjaChiKFwicHJpdmF0ZSBrZXlcIix0LDMyKSxiKFwidHdlYWtcIixyLDMyKSxlLnByaXZhdGVLZXlUd2Vha0FkZCh0LHIpKXtjYXNlIDA6cmV0dXJuIHQ7Y2FzZSAxOnRocm93IG5ldyBFcnJvcihuKX19LHByaXZhdGVLZXlUd2Vha011bCh0LHIpe3N3aXRjaChiKFwicHJpdmF0ZSBrZXlcIix0LDMyKSxiKFwidHdlYWtcIixyLDMyKSxlLnByaXZhdGVLZXlUd2Vha011bCh0LHIpKXtjYXNlIDA6cmV0dXJuIHQ7Y2FzZSAxOnRocm93IG5ldyBFcnJvcihpKX19LHB1YmxpY0tleVZlcmlmeTp0PT4oYihcInB1YmxpYyBrZXlcIix0LFszMyw2NV0pLDA9PT1lLnB1YmxpY0tleVZlcmlmeSh0KSkscHVibGljS2V5Q3JlYXRlKHQscj0hMCxuKXtzd2l0Y2goYihcInByaXZhdGUga2V5XCIsdCwzMikseShyKSxuPWcobixyPzMzOjY1KSxlLnB1YmxpY0tleUNyZWF0ZShuLHQpKXtjYXNlIDA6cmV0dXJuIG47Y2FzZSAxOnRocm93IG5ldyBFcnJvcihhKTtjYXNlIDI6dGhyb3cgbmV3IEVycm9yKGYpfX0scHVibGljS2V5Q29udmVydCh0LHI9ITAsbil7c3dpdGNoKGIoXCJwdWJsaWMga2V5XCIsdCxbMzMsNjVdKSx5KHIpLG49ZyhuLHI/MzM6NjUpLGUucHVibGljS2V5Q29udmVydChuLHQpKXtjYXNlIDA6cmV0dXJuIG47Y2FzZSAxOnRocm93IG5ldyBFcnJvcihzKTtjYXNlIDI6dGhyb3cgbmV3IEVycm9yKGYpfX0scHVibGljS2V5TmVnYXRlKHQsbj0hMCxpKXtzd2l0Y2goYihcInB1YmxpYyBrZXlcIix0LFszMyw2NV0pLHkobiksaT1nKGksbj8zMzo2NSksZS5wdWJsaWNLZXlOZWdhdGUoaSx0KSl7Y2FzZSAwOnJldHVybiBpO2Nhc2UgMTp0aHJvdyBuZXcgRXJyb3Iocyk7Y2FzZSAyOnRocm93IG5ldyBFcnJvcihyKTtjYXNlIDM6dGhyb3cgbmV3IEVycm9yKGYpfX0scHVibGljS2V5Q29tYmluZSh0LHI9ITAsbil7cChBcnJheS5pc0FycmF5KHQpLFwiRXhwZWN0ZWQgcHVibGljIGtleXMgdG8gYmUgYW4gQXJyYXlcIikscCh0Lmxlbmd0aD4wLFwiRXhwZWN0ZWQgcHVibGljIGtleXMgYXJyYXkgd2lsbCBoYXZlIG1vcmUgdGhhbiB6ZXJvIGl0ZW1zXCIpO2Zvcihjb25zdCBlIG9mIHQpYihcInB1YmxpYyBrZXlcIixlLFszMyw2NV0pO3N3aXRjaCh5KHIpLG49ZyhuLHI/MzM6NjUpLGUucHVibGljS2V5Q29tYmluZShuLHQpKXtjYXNlIDA6cmV0dXJuIG47Y2FzZSAxOnRocm93IG5ldyBFcnJvcihzKTtjYXNlIDI6dGhyb3cgbmV3IEVycm9yKHUpO2Nhc2UgMzp0aHJvdyBuZXcgRXJyb3IoZil9fSxwdWJsaWNLZXlUd2Vha0FkZCh0LHIsaT0hMCxvKXtzd2l0Y2goYihcInB1YmxpYyBrZXlcIix0LFszMyw2NV0pLGIoXCJ0d2Vha1wiLHIsMzIpLHkoaSksbz1nKG8saT8zMzo2NSksZS5wdWJsaWNLZXlUd2Vha0FkZChvLHQscikpe2Nhc2UgMDpyZXR1cm4gbztjYXNlIDE6dGhyb3cgbmV3IEVycm9yKHMpO2Nhc2UgMjp0aHJvdyBuZXcgRXJyb3Iobil9fSxwdWJsaWNLZXlUd2Vha011bCh0LHIsbj0hMCxvKXtzd2l0Y2goYihcInB1YmxpYyBrZXlcIix0LFszMyw2NV0pLGIoXCJ0d2Vha1wiLHIsMzIpLHkobiksbz1nKG8sbj8zMzo2NSksZS5wdWJsaWNLZXlUd2Vha011bChvLHQscikpe2Nhc2UgMDpyZXR1cm4gbztjYXNlIDE6dGhyb3cgbmV3IEVycm9yKHMpO2Nhc2UgMjp0aHJvdyBuZXcgRXJyb3IoaSl9fSxzaWduYXR1cmVOb3JtYWxpemUodCl7c3dpdGNoKGIoXCJzaWduYXR1cmVcIix0LDY0KSxlLnNpZ25hdHVyZU5vcm1hbGl6ZSh0KSl7Y2FzZSAwOnJldHVybiB0O2Nhc2UgMTp0aHJvdyBuZXcgRXJyb3IoYyl9fSxzaWduYXR1cmVFeHBvcnQodCxuKXtiKFwic2lnbmF0dXJlXCIsdCw2NCk7Y29uc3QgaT17b3V0cHV0Om49ZyhuLDcyKSxvdXRwdXRsZW46NzJ9O3N3aXRjaChlLnNpZ25hdHVyZUV4cG9ydChpLHQpKXtjYXNlIDA6cmV0dXJuIG4uc2xpY2UoMCxpLm91dHB1dGxlbik7Y2FzZSAxOnRocm93IG5ldyBFcnJvcihjKTtjYXNlIDI6dGhyb3cgbmV3IEVycm9yKHIpfX0sc2lnbmF0dXJlSW1wb3J0KHQsbil7c3dpdGNoKGIoXCJzaWduYXR1cmVcIix0KSxuPWcobiw2NCksZS5zaWduYXR1cmVJbXBvcnQobix0KSl7Y2FzZSAwOnJldHVybiBuO2Nhc2UgMTp0aHJvdyBuZXcgRXJyb3IoYyk7Y2FzZSAyOnRocm93IG5ldyBFcnJvcihyKX19LGVjZHNhU2lnbih0LG4saT17fSxvKXtiKFwibWVzc2FnZVwiLHQsMzIpLGIoXCJwcml2YXRlIGtleVwiLG4sMzIpLHAoXCJPYmplY3RcIj09PXYoaSksXCJFeHBlY3RlZCBvcHRpb25zIHRvIGJlIGFuIE9iamVjdFwiKSx2b2lkIDAhPT1pLmRhdGEmJmIoXCJvcHRpb25zLmRhdGFcIixpLmRhdGEpLHZvaWQgMCE9PWkubm9uY2VmbiYmcChcIkZ1bmN0aW9uXCI9PT12KGkubm9uY2VmbiksXCJFeHBlY3RlZCBvcHRpb25zLm5vbmNlZm4gdG8gYmUgYSBGdW5jdGlvblwiKTtjb25zdCBhPXtzaWduYXR1cmU6bz1nKG8sNjQpLHJlY2lkOm51bGx9O3N3aXRjaChlLmVjZHNhU2lnbihhLHQsbixpLmRhdGEsaS5ub25jZWZuKSl7Y2FzZSAwOnJldHVybiBhO2Nhc2UgMTp0aHJvdyBuZXcgRXJyb3IoaCk7Y2FzZSAyOnRocm93IG5ldyBFcnJvcihyKX19LGVjZHNhVmVyaWZ5KHQscixuKXtzd2l0Y2goYihcInNpZ25hdHVyZVwiLHQsNjQpLGIoXCJtZXNzYWdlXCIsciwzMiksYihcInB1YmxpYyBrZXlcIixuLFszMyw2NV0pLGUuZWNkc2FWZXJpZnkodCxyLG4pKXtjYXNlIDA6cmV0dXJuITA7Y2FzZSAzOnJldHVybiExO2Nhc2UgMTp0aHJvdyBuZXcgRXJyb3IoYyk7Y2FzZSAyOnRocm93IG5ldyBFcnJvcihzKX19LGVjZHNhUmVjb3Zlcih0LG4saSxvPSEwLGEpe3N3aXRjaChiKFwic2lnbmF0dXJlXCIsdCw2NCkscChcIk51bWJlclwiPT09dihuKSYmbj49MCYmbjw9MyxcIkV4cGVjdGVkIHJlY292ZXJ5IGlkIHRvIGJlIGEgTnVtYmVyIHdpdGhpbiBpbnRlcnZhbCBbMCwgM11cIiksYihcIm1lc3NhZ2VcIixpLDMyKSx5KG8pLGE9ZyhhLG8/MzM6NjUpLGUuZWNkc2FSZWNvdmVyKGEsdCxuLGkpKXtjYXNlIDA6cmV0dXJuIGE7Y2FzZSAxOnRocm93IG5ldyBFcnJvcihjKTtjYXNlIDI6dGhyb3cgbmV3IEVycm9yKGQpO2Nhc2UgMzp0aHJvdyBuZXcgRXJyb3Iocil9fSxlY2RoKHQscixuPXt9LGkpe3N3aXRjaChiKFwicHVibGljIGtleVwiLHQsWzMzLDY1XSksYihcInByaXZhdGUga2V5XCIsciwzMikscChcIk9iamVjdFwiPT09dihuKSxcIkV4cGVjdGVkIG9wdGlvbnMgdG8gYmUgYW4gT2JqZWN0XCIpLHZvaWQgMCE9PW4uZGF0YSYmYihcIm9wdGlvbnMuZGF0YVwiLG4uZGF0YSksdm9pZCAwIT09bi5oYXNoZm4/KHAoXCJGdW5jdGlvblwiPT09dihuLmhhc2hmbiksXCJFeHBlY3RlZCBvcHRpb25zLmhhc2hmbiB0byBiZSBhIEZ1bmN0aW9uXCIpLHZvaWQgMCE9PW4ueGJ1ZiYmYihcIm9wdGlvbnMueGJ1ZlwiLG4ueGJ1ZiwzMiksdm9pZCAwIT09bi55YnVmJiZiKFwib3B0aW9ucy55YnVmXCIsbi55YnVmLDMyKSxiKFwib3V0cHV0XCIsaSkpOmk9ZyhpLDMyKSxlLmVjZGgoaSx0LHIsbi5kYXRhLG4uaGFzaGZuLG4ueGJ1ZixuLnlidWYpKXtjYXNlIDA6cmV0dXJuIGk7Y2FzZSAxOnRocm93IG5ldyBFcnJvcihzKTtjYXNlIDI6dGhyb3cgbmV3IEVycm9yKGwpfX19KX0sZnVuY3Rpb24oZSx0LHIpe2NvbnN0IG49bmV3KDAscigzNikuZWMpKFwic2VjcDI1NmsxXCIpLGk9bi5jdXJ2ZSxvPWkubi5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBhKGUpe2NvbnN0IHQ9ZVswXTtzd2l0Y2godCl7Y2FzZSAyOmNhc2UgMzpyZXR1cm4gMzMhPT1lLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGUsdCl7bGV0IHI9bmV3IG8odCk7aWYoci5jbXAoaS5wKT49MClyZXR1cm4gbnVsbDtyPXIudG9SZWQoaS5yZWQpO2xldCBhPXIucmVkU3FyKCkucmVkSU11bChyKS5yZWRJQWRkKGkuYikucmVkU3FydCgpO3JldHVybiAzPT09ZSE9PWEuaXNPZGQoKSYmKGE9YS5yZWROZWcoKSksbi5rZXlQYWlyKHtwdWI6e3g6cix5OmF9fSl9KHQsZS5zdWJhcnJheSgxLDMzKSk7Y2FzZSA0OmNhc2UgNjpjYXNlIDc6cmV0dXJuIDY1IT09ZS5sZW5ndGg/bnVsbDpmdW5jdGlvbihlLHQscil7bGV0IGE9bmV3IG8odCkscz1uZXcgbyhyKTtpZihhLmNtcChpLnApPj0wfHxzLmNtcChpLnApPj0wKXJldHVybiBudWxsO2lmKGE9YS50b1JlZChpLnJlZCkscz1zLnRvUmVkKGkucmVkKSwoNj09PWV8fDc9PT1lKSYmcy5pc09kZCgpIT09KDc9PT1lKSlyZXR1cm4gbnVsbDtjb25zdCBmPWEucmVkU3FyKCkucmVkSU11bChhKTtyZXR1cm4gcy5yZWRTcXIoKS5yZWRJU3ViKGYucmVkSUFkZChpLmIpKS5pc1plcm8oKT9uLmtleVBhaXIoe3B1Yjp7eDphLHk6c319KTpudWxsfSh0LGUuc3ViYXJyYXkoMSwzMyksZS5zdWJhcnJheSgzMyw2NSkpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHMoZSx0KXtjb25zdCByPXQuZW5jb2RlKG51bGwsMzM9PT1lLmxlbmd0aCk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDsrK3QpZVt0XT1yW3RdfWUuZXhwb3J0cz17Y29udGV4dFJhbmRvbWl6ZTooKT0+MCxwcml2YXRlS2V5VmVyaWZ5KGUpe2NvbnN0IHQ9bmV3IG8oZSk7cmV0dXJuIHQuY21wKGkubik8MCYmIXQuaXNaZXJvKCk/MDoxfSxwcml2YXRlS2V5TmVnYXRlKGUpe2NvbnN0IHQ9bmV3IG8oZSkscj1pLm4uc3ViKHQpLnVtb2QoaS5uKS50b0FycmF5TGlrZShVaW50OEFycmF5LFwiYmVcIiwzMik7cmV0dXJuIGUuc2V0KHIpLDB9LHByaXZhdGVLZXlUd2Vha0FkZChlLHQpe2NvbnN0IHI9bmV3IG8odCk7aWYoci5jbXAoaS5uKT49MClyZXR1cm4gMTtpZihyLmlhZGQobmV3IG8oZSkpLHIuY21wKGkubik+PTAmJnIuaXN1YihpLm4pLHIuaXNaZXJvKCkpcmV0dXJuIDE7Y29uc3Qgbj1yLnRvQXJyYXlMaWtlKFVpbnQ4QXJyYXksXCJiZVwiLDMyKTtyZXR1cm4gZS5zZXQobiksMH0scHJpdmF0ZUtleVR3ZWFrTXVsKGUsdCl7bGV0IHI9bmV3IG8odCk7aWYoci5jbXAoaS5uKT49MHx8ci5pc1plcm8oKSlyZXR1cm4gMTtyLmltdWwobmV3IG8oZSkpLHIuY21wKGkubik+PTAmJihyPXIudW1vZChpLm4pKTtjb25zdCBuPXIudG9BcnJheUxpa2UoVWludDhBcnJheSxcImJlXCIsMzIpO3JldHVybiBlLnNldChuKSwwfSxwdWJsaWNLZXlWZXJpZnk6ZT0+bnVsbD09PWEoZSk/MTowLHB1YmxpY0tleUNyZWF0ZShlLHQpe2NvbnN0IHI9bmV3IG8odCk7aWYoci5jbXAoaS5uKT49MHx8ci5pc1plcm8oKSlyZXR1cm4gMTtyZXR1cm4gcyhlLG4ua2V5RnJvbVByaXZhdGUodCkuZ2V0UHVibGljKCkpLDB9LHB1YmxpY0tleUNvbnZlcnQoZSx0KXtjb25zdCByPWEodCk7aWYobnVsbD09PXIpcmV0dXJuIDE7cmV0dXJuIHMoZSxyLmdldFB1YmxpYygpKSwwfSxwdWJsaWNLZXlOZWdhdGUoZSx0KXtjb25zdCByPWEodCk7aWYobnVsbD09PXIpcmV0dXJuIDE7Y29uc3Qgbj1yLmdldFB1YmxpYygpO3JldHVybiBuLnk9bi55LnJlZE5lZygpLHMoZSxuKSwwfSxwdWJsaWNLZXlDb21iaW5lKGUsdCl7Y29uc3Qgcj1uZXcgQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7KytlKWlmKHJbZV09YSh0W2VdKSxudWxsPT09cltlXSlyZXR1cm4gMTtsZXQgbj1yWzBdLmdldFB1YmxpYygpO2ZvcihsZXQgZT0xO2U8ci5sZW5ndGg7KytlKW49bi5hZGQocltlXS5wdWIpO3JldHVybiBuLmlzSW5maW5pdHkoKT8yOihzKGUsbiksMCl9LHB1YmxpY0tleVR3ZWFrQWRkKGUsdCxyKXtjb25zdCBuPWEodCk7aWYobnVsbD09PW4pcmV0dXJuIDE7aWYoKHI9bmV3IG8ocikpLmNtcChpLm4pPj0wKXJldHVybiAyO2NvbnN0IGY9bi5nZXRQdWJsaWMoKS5hZGQoaS5nLm11bChyKSk7cmV0dXJuIGYuaXNJbmZpbml0eSgpPzI6KHMoZSxmKSwwKX0scHVibGljS2V5VHdlYWtNdWwoZSx0LHIpe2NvbnN0IG49YSh0KTtpZihudWxsPT09bilyZXR1cm4gMTtpZigocj1uZXcgbyhyKSkuY21wKGkubik+PTB8fHIuaXNaZXJvKCkpcmV0dXJuIDI7cmV0dXJuIHMoZSxuLmdldFB1YmxpYygpLm11bChyKSksMH0sc2lnbmF0dXJlTm9ybWFsaXplKGUpe2NvbnN0IHQ9bmV3IG8oZS5zdWJhcnJheSgwLDMyKSkscj1uZXcgbyhlLnN1YmFycmF5KDMyLDY0KSk7cmV0dXJuIHQuY21wKGkubik+PTB8fHIuY21wKGkubik+PTA/MTooMT09PXIuY21wKG4ubmgpJiZlLnNldChpLm4uc3ViKHIpLnRvQXJyYXlMaWtlKFVpbnQ4QXJyYXksXCJiZVwiLDMyKSwzMiksMCl9LHNpZ25hdHVyZUV4cG9ydChlLHQpe2NvbnN0IHI9dC5zdWJhcnJheSgwLDMyKSxuPXQuc3ViYXJyYXkoMzIsNjQpO2lmKG5ldyBvKHIpLmNtcChpLm4pPj0wKXJldHVybiAxO2lmKG5ldyBvKG4pLmNtcChpLm4pPj0wKXJldHVybiAxO2NvbnN0e291dHB1dDphfT1lO2xldCBzPWEuc3ViYXJyYXkoNCwzNyk7c1swXT0wLHMuc2V0KHIsMSk7bGV0IGY9MzMsdT0wO2Zvcig7Zj4xJiYwPT09c1t1XSYmISgxMjgmc1t1KzFdKTstLWYsKyt1KTtpZihzPXMuc3ViYXJyYXkodSksMTI4JnNbMF0pcmV0dXJuIDE7aWYoZj4xJiYwPT09c1swXSYmISgxMjgmc1sxXSkpcmV0dXJuIDE7bGV0IGM9YS5zdWJhcnJheSgzOSw3Mik7Y1swXT0wLGMuc2V0KG4sMSk7bGV0IGg9MzMsZD0wO2Zvcig7aD4xJiYwPT09Y1tkXSYmISgxMjgmY1tkKzFdKTstLWgsKytkKTtyZXR1cm4gYz1jLnN1YmFycmF5KGQpLDEyOCZjWzBdfHxoPjEmJjA9PT1jWzBdJiYhKDEyOCZjWzFdKT8xOihlLm91dHB1dGxlbj02K2YraCxhWzBdPTQ4LGFbMV09ZS5vdXRwdXRsZW4tMixhWzJdPTIsYVszXT1zLmxlbmd0aCxhLnNldChzLDQpLGFbNCtmXT0yLGFbNStmXT1jLmxlbmd0aCxhLnNldChjLDYrZiksMCl9LHNpZ25hdHVyZUltcG9ydChlLHQpe2lmKHQubGVuZ3RoPDgpcmV0dXJuIDE7aWYodC5sZW5ndGg+NzIpcmV0dXJuIDE7aWYoNDghPT10WzBdKXJldHVybiAxO2lmKHRbMV0hPT10Lmxlbmd0aC0yKXJldHVybiAxO2lmKDIhPT10WzJdKXJldHVybiAxO2NvbnN0IHI9dFszXTtpZigwPT09cilyZXR1cm4gMTtpZig1K3I+PXQubGVuZ3RoKXJldHVybiAxO2lmKDIhPT10WzQrcl0pcmV0dXJuIDE7Y29uc3Qgbj10WzUrcl07aWYoMD09PW4pcmV0dXJuIDE7aWYoNityK24hPT10Lmxlbmd0aClyZXR1cm4gMTtpZigxMjgmdFs0XSlyZXR1cm4gMTtpZihyPjEmJjA9PT10WzRdJiYhKDEyOCZ0WzVdKSlyZXR1cm4gMTtpZigxMjgmdFtyKzZdKXJldHVybiAxO2lmKG4+MSYmMD09PXRbcis2XSYmISgxMjgmdFtyKzddKSlyZXR1cm4gMTtsZXQgYT10LnN1YmFycmF5KDQsNCtyKTtpZigzMz09PWEubGVuZ3RoJiYwPT09YVswXSYmKGE9YS5zdWJhcnJheSgxKSksYS5sZW5ndGg+MzIpcmV0dXJuIDE7bGV0IHM9dC5zdWJhcnJheSg2K3IpO2lmKDMzPT09cy5sZW5ndGgmJjA9PT1zWzBdJiYocz1zLnNsaWNlKDEpKSxzLmxlbmd0aD4zMil0aHJvdyBuZXcgRXJyb3IoXCJTIGxlbmd0aCBpcyB0b28gbG9uZ1wiKTtsZXQgZj1uZXcgbyhhKTtmLmNtcChpLm4pPj0wJiYoZj1uZXcgbygwKSk7bGV0IHU9bmV3IG8odC5zdWJhcnJheSg2K3IpKTtyZXR1cm4gdS5jbXAoaS5uKT49MCYmKHU9bmV3IG8oMCkpLGUuc2V0KGYudG9BcnJheUxpa2UoVWludDhBcnJheSxcImJlXCIsMzIpLDApLGUuc2V0KHUudG9BcnJheUxpa2UoVWludDhBcnJheSxcImJlXCIsMzIpLDMyKSwwfSxlY2RzYVNpZ24oZSx0LHIsYSxzKXtpZihzKXtjb25zdCBlPXM7cz1uPT57Y29uc3QgaT1lKHQscixudWxsLGEsbik7aWYoIShpIGluc3RhbmNlb2YgVWludDhBcnJheSYmMzI9PT1pLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBpcyB0aGUgd2F5XCIpO3JldHVybiBuZXcgbyhpKX19Y29uc3QgZj1uZXcgbyhyKTtpZihmLmNtcChpLm4pPj0wfHxmLmlzWmVybygpKXJldHVybiAxO2xldCB1O3RyeXt1PW4uc2lnbih0LHIse2Nhbm9uaWNhbDohMCxrOnMscGVyczphfSl9Y2F0Y2goZSl7cmV0dXJuIDF9cmV0dXJuIGUuc2lnbmF0dXJlLnNldCh1LnIudG9BcnJheUxpa2UoVWludDhBcnJheSxcImJlXCIsMzIpLDApLGUuc2lnbmF0dXJlLnNldCh1LnMudG9BcnJheUxpa2UoVWludDhBcnJheSxcImJlXCIsMzIpLDMyKSxlLnJlY2lkPXUucmVjb3ZlcnlQYXJhbSwwfSxlY2RzYVZlcmlmeShlLHQscil7Y29uc3Qgcz17cjplLnN1YmFycmF5KDAsMzIpLHM6ZS5zdWJhcnJheSgzMiw2NCl9LGY9bmV3IG8ocy5yKSx1PW5ldyBvKHMucyk7aWYoZi5jbXAoaS5uKT49MHx8dS5jbXAoaS5uKT49MClyZXR1cm4gMTtpZigxPT09dS5jbXAobi5uaCl8fGYuaXNaZXJvKCl8fHUuaXNaZXJvKCkpcmV0dXJuIDM7Y29uc3QgYz1hKHIpO2lmKG51bGw9PT1jKXJldHVybiAyO2NvbnN0IGg9Yy5nZXRQdWJsaWMoKTtyZXR1cm4gbi52ZXJpZnkodCxzLGgpPzA6M30sZWNkc2FSZWNvdmVyKGUsdCxyLGEpe2NvbnN0IGY9e3I6dC5zbGljZSgwLDMyKSxzOnQuc2xpY2UoMzIsNjQpfSx1PW5ldyBvKGYuciksYz1uZXcgbyhmLnMpO2lmKHUuY21wKGkubik+PTB8fGMuY21wKGkubik+PTApcmV0dXJuIDE7aWYodS5pc1plcm8oKXx8Yy5pc1plcm8oKSlyZXR1cm4gMjtsZXQgaDt0cnl7aD1uLnJlY292ZXJQdWJLZXkoYSxmLHIpfWNhdGNoKGUpe3JldHVybiAyfXJldHVybiBzKGUsaCksMH0sZWNkaChlLHQscixzLGYsdSxjKXtjb25zdCBoPWEodCk7aWYobnVsbD09PWgpcmV0dXJuIDE7Y29uc3QgZD1uZXcgbyhyKTtpZihkLmNtcChpLm4pPj0wfHxkLmlzWmVybygpKXJldHVybiAyO2NvbnN0IGw9aC5nZXRQdWJsaWMoKS5tdWwoZCk7aWYodm9pZCAwPT09Zil7Y29uc3QgdD1sLmVuY29kZShudWxsLCEwKSxyPW4uaGFzaCgpLnVwZGF0ZSh0KS5kaWdlc3QoKTtmb3IobGV0IHQ9MDt0PDMyOysrdCllW3RdPXJbdF19ZWxzZXt1fHwodT1uZXcgVWludDhBcnJheSgzMikpO2NvbnN0IHQ9bC5nZXRYKCkudG9BcnJheShcImJlXCIsMzIpO2ZvcihsZXQgZT0wO2U8MzI7KytlKXVbZV09dFtlXTtjfHwoYz1uZXcgVWludDhBcnJheSgzMikpO2NvbnN0IHI9bC5nZXRZKCkudG9BcnJheShcImJlXCIsMzIpO2ZvcihsZXQgZT0wO2U8MzI7KytlKWNbZV09cltlXTtjb25zdCBuPWYodSxjLHMpO2lmKCEobiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJm4ubGVuZ3RoPT09ZS5sZW5ndGgpKXJldHVybiAyO2Uuc2V0KG4pfXJldHVybiAwfX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbj1yKDI0NCk7dC5nZXRSYW5kb21CeXRlcz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7bihlLChmdW5jdGlvbihlLG4pe2U/cihlKTp0KG4pfSkpfSkpfSx0LmdldFJhbmRvbUJ5dGVzU3luYz1mdW5jdGlvbihlKXtyZXR1cm4gbihlKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24odCxuKXt2YXIgaT1yKDIpLkJ1ZmZlcixvPXQuY3J5cHRvfHx0Lm1zQ3J5cHRvO28mJm8uZ2V0UmFuZG9tVmFsdWVzP2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGU+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXNcIik7dmFyIHI9aS5hbGxvY1Vuc2FmZShlKTtpZihlPjApaWYoZT42NTUzNilmb3IodmFyIGE9MDthPGU7YSs9NjU1MzYpby5nZXRSYW5kb21WYWx1ZXMoci5zbGljZShhLGErNjU1MzYpKTtlbHNlIG8uZ2V0UmFuZG9tVmFsdWVzKHIpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpcmV0dXJuIG4ubmV4dFRpY2soKGZ1bmN0aW9uKCl7dChudWxsLHIpfSkpO3JldHVybiByfTplLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxcblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTFcIil9fSkuY2FsbCh0aGlzLHIoNSkscigzKSl9LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7dmFyIG49cig0KSxpPW5ldygwLHIoMzYpLmVjKShcInNlY3AyNTZrMVwiKSxvPWkuY3VydmU7dC5wcml2YXRlS2V5RXhwb3J0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IG4oZSk7aWYoci51Y21wKG8ubik+PTApdGhyb3cgbmV3IEVycm9yKFwiY291bGRuJ3QgZXhwb3J0IHRvIERFUiBmb3JtYXRcIik7dmFyIHM9aS5nLm11bChyKTtyZXR1cm4gYShzLmdldFgoKSxzLmdldFkoKSx0KX0sdC5wcml2YXRlS2V5TW9kSW52ZXJzZT1mdW5jdGlvbih0KXt2YXIgcj1uZXcgbih0KTtpZihyLnVjbXAoby5uKT49MHx8ci5pc1plcm8oKSl0aHJvdyBuZXcgRXJyb3IoXCJwcml2YXRlIGtleSByYW5nZSBpcyBpbnZhbGlkXCIpO3JldHVybiByLmludm0oby5uKS50b0FycmF5TGlrZShlLFwiYmVcIiwzMil9LHQuc2lnbmF0dXJlSW1wb3J0PWZ1bmN0aW9uKHQpe3ZhciByPW5ldyBuKHQucik7ci51Y21wKG8ubik+PTAmJihyPW5ldyBuKDApKTt2YXIgaT1uZXcgbih0LnMpO3JldHVybiBpLnVjbXAoby5uKT49MCYmKGk9bmV3IG4oMCkpLGUuY29uY2F0KFtyLnRvQXJyYXlMaWtlKGUsXCJiZVwiLDMyKSxpLnRvQXJyYXlMaWtlKGUsXCJiZVwiLDMyKV0pfSx0LmVjZGhVbnNhZmU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBzPWkua2V5RnJvbVB1YmxpYyhlKSxmPW5ldyBuKHQpO2lmKGYudWNtcChvLm4pPj0wfHxmLmlzWmVybygpKXRocm93IG5ldyBFcnJvcihcInNjYWxhciB3YXMgaW52YWxpZCAoemVybyBvciBvdmVyZmxvdylcIik7dmFyIHU9cy5wdWIubXVsKGYpO3JldHVybiBhKHUuZ2V0WCgpLHUuZ2V0WSgpLHIpfTt2YXIgYT1mdW5jdGlvbih0LHIsbil7dmFyIGk9dm9pZCAwO3JldHVybiBuPygoaT1lLmFsbG9jKDMzKSlbMF09ci5pc09kZCgpPzM6Mix0LnRvQXJyYXlMaWtlKGUsXCJiZVwiLDMyKS5jb3B5KGksMSkpOigoaT1lLmFsbG9jKDY1KSlbMF09NCx0LnRvQXJyYXlMaWtlKGUsXCJiZVwiLDMyKS5jb3B5KGksMSksci50b0FycmF5TGlrZShlLFwiYmVcIiwzMikuY29weShpLDMzKSksaX19KS5jYWxsKHRoaXMscigxKS5CdWZmZXIpfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe3ZhciByPWUuZnJvbShbNDgsMTI5LDIxMSwyLDEsMSw0LDMyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNjAsMTI5LDEzMyw0OCwxMjksMTMwLDIsMSwxLDQ4LDQ0LDYsNyw0MiwxMzQsNzIsMjA2LDYxLDEsMSwyLDMzLDAsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU0LDI1NSwyNTUsMjUyLDQ3LDQ4LDYsNCwxLDAsNCwxLDcsNCwzMywyLDEyMSwxOTAsMTAyLDEyNiwyNDksMjIwLDE4NywxNzIsODUsMTYwLDk4LDE0OSwyMDYsMTM1LDExLDcsMiwxNTUsMjUyLDIxOSw0NSwyMDYsNDAsMjE3LDg5LDI0MiwxMjksOTEsMjIsMjQ4LDIzLDE1MiwyLDMzLDAsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU0LDE4NiwxNzQsMjIwLDIzMCwxNzUsNzIsMTYwLDU5LDE5MSwyMTAsOTQsMTQwLDIwOCw1NCw2NSw2NSwyLDEsMSwxNjEsMzYsMywzNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSksbj1lLmZyb20oWzQ4LDEzMCwxLDE5LDIsMSwxLDQsMzIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE2MCwxMjksMTY1LDQ4LDEyOSwxNjIsMiwxLDEsNDgsNDQsNiw3LDQyLDEzNCw3MiwyMDYsNjEsMSwxLDIsMzMsMCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTQsMjU1LDI1NSwyNTIsNDcsNDgsNiw0LDEsMCw0LDEsNyw0LDY1LDQsMTIxLDE5MCwxMDIsMTI2LDI0OSwyMjAsMTg3LDE3Miw4NSwxNjAsOTgsMTQ5LDIwNiwxMzUsMTEsNywyLDE1NSwyNTIsMjE5LDQ1LDIwNiw0MCwyMTcsODksMjQyLDEyOSw5MSwyMiwyNDgsMjMsMTUyLDcyLDU4LDIxOCwxMTksMzgsMTYzLDE5NiwxMDEsOTMsMTY0LDI1MSwyNTIsMTQsMTcsOCwxNjgsMjUzLDIzLDE4MCw3MiwxNjYsMTMzLDg0LDI1LDE1Niw3MSwyMDgsMTQzLDI1MSwxNiwyMTIsMTg0LDIsMzMsMCwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTQsMTg2LDE3NCwyMjAsMjMwLDE3NSw3MiwxNjAsNTksMTkxLDIxMCw5NCwxNDAsMjA4LDU0LDY1LDY1LDIsMSwxLDE2MSw2OCwzLDY2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSk7dC5wcml2YXRlS2V5RXhwb3J0PWZ1bmN0aW9uKHQsaSxvKXt2YXIgYT1lLmZyb20obz9yOm4pO3JldHVybiB0LmNvcHkoYSxvPzg6OSksaS5jb3B5KGEsbz8xODE6MjE0KSxhfSx0LnByaXZhdGVLZXlJbXBvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgscj0wO2lmKHQ8cisxfHw0OCE9PWVbcl0pcmV0dXJuIG51bGw7aWYodDwocis9MSkrMXx8ISgxMjgmZVtyXSkpcmV0dXJuIG51bGw7dmFyIG49MTI3JmVbcl07aWYobjwxfHxuPjIpcmV0dXJuIG51bGw7aWYodDwocis9MSkrbilyZXR1cm4gbnVsbDt2YXIgaT1lW3Irbi0xXXwobj4xP2VbcituLTJdPDw4OjApO3JldHVybiB0PChyKz1uKStpfHx0PHIrM3x8MiE9PWVbcl18fDEhPT1lW3IrMV18fDEhPT1lW3IrMl18fHQ8KHIrPTMpKzJ8fDQhPT1lW3JdfHxlW3IrMV0+MzJ8fHQ8cisyK2VbcisxXT9udWxsOmUuc2xpY2UocisyLHIrMitlW3IrMV0pfSx0LnNpZ25hdHVyZUltcG9ydExheD1mdW5jdGlvbih0KXt2YXIgcj1lLmFsbG9jKDMyLDApLG49ZS5hbGxvYygzMiwwKSxpPXQubGVuZ3RoLG89MDtpZig0OCE9PXRbbysrXSlyZXR1cm4gbnVsbDt2YXIgYT10W28rK107aWYoMTI4JmEmJihvKz1hLTEyOCk+aSlyZXR1cm4gbnVsbDtpZigyIT09dFtvKytdKXJldHVybiBudWxsO3ZhciBzPXRbbysrXTtpZigxMjgmcyl7aWYobysoYT1zLTEyOCk+aSlyZXR1cm4gbnVsbDtmb3IoO2E+MCYmMD09PXRbb107bys9MSxhLT0xKTtmb3Iocz0wO2E+MDtvKz0xLGEtPTEpcz0oczw8OCkrdFtvXX1pZihzPmktbylyZXR1cm4gbnVsbDt2YXIgZj1vO2lmKG8rPXMsMiE9PXRbbysrXSlyZXR1cm4gbnVsbDt2YXIgdT10W28rK107aWYoMTI4JnUpe2lmKG8rKGE9dS0xMjgpPmkpcmV0dXJuIG51bGw7Zm9yKDthPjAmJjA9PT10W29dO28rPTEsYS09MSk7Zm9yKHU9MDthPjA7bys9MSxhLT0xKXU9KHU8PDgpK3Rbb119aWYodT5pLW8pcmV0dXJuIG51bGw7dmFyIGM9bztmb3Iobys9dTtzPjAmJjA9PT10W2ZdO3MtPTEsZis9MSk7aWYocz4zMilyZXR1cm4gbnVsbDt2YXIgaD10LnNsaWNlKGYsZitzKTtmb3IoaC5jb3B5KHIsMzItaC5sZW5ndGgpO3U+MCYmMD09PXRbY107dS09MSxjKz0xKTtpZih1PjMyKXJldHVybiBudWxsO3ZhciBkPXQuc2xpY2UoYyxjK3UpO3JldHVybiBkLmNvcHkobiwzMi1kLmxlbmd0aCkse3I6cixzOm59fX0pLmNhbGwodGhpcyxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKGUsdCxyKXshZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQscj1uZXcgRmxvYXQ2NEFycmF5KDE2KTtpZihlKWZvcih0PTA7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfSxuPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwibm8gUFJOR1wiKX0saT1uZXcgVWludDhBcnJheSgxNiksbz1uZXcgVWludDhBcnJheSgzMik7b1swXT05O3ZhciBhPXQoKSxzPXQoWzFdKSxmPXQoWzU2MTI5LDFdKSx1PXQoWzMwODgzLDQ5NTMsMTk5MTQsMzAxODcsNTU0NjcsMTY3MDUsMjYzNywxMTIsNTk1NDQsMzA1ODUsMTY1MDUsMzYwMzksNjUxMzksMTExMTksMjc4ODYsMjA5OTVdKSxjPXQoWzYxNzg1LDk5MDYsMzk4MjgsNjAzNzQsNDUzOTgsMzM0MTEsNTI3NCwyMjQsNTM1NTIsNjExNzEsMzMwMTAsNjU0Miw2NDc0MywyMjIzOSw1NTc3Miw5MjIyXSksaD10KFs1NDU1NCwzNjY0NSwxMTYxNiw1MTU0Miw0MjkzMCwzODE4MSw1MTA0MCwyNjkyNCw1NjQxMiw2NDk4Miw1NzkwNSw0OTMxNiwyMTUwMiw1MjU5MCwxNDAzNSw4NTUzXSksZD10KFsyNjIwMCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNF0pLGw9dChbNDExMzYsMTg5NTgsNjk1MSw1MDQxNCw1ODQ4OCw0NDMzNSw2MTUwLDEyMDk5LDU1MjA3LDE1ODY3LDE1MywxMTA4NSw1NzA5OSwyMDQxNyw5MzQ0LDExMTM5XSk7ZnVuY3Rpb24gcChlLHQscixuKXtlW3RdPXI+PjI0JjI1NSxlW3QrMV09cj4+MTYmMjU1LGVbdCsyXT1yPj44JjI1NSxlW3QrM109MjU1JnIsZVt0KzRdPW4+PjI0JjI1NSxlW3QrNV09bj4+MTYmMjU1LGVbdCs2XT1uPj44JjI1NSxlW3QrN109MjU1Jm59ZnVuY3Rpb24gYihlLHQscixuLGkpe3ZhciBvLGE9MDtmb3Iobz0wO288aTtvKyspYXw9ZVt0K29dXnJbbitvXTtyZXR1cm4oMSZhLTE+Pj44KS0xfWZ1bmN0aW9uIHkoZSx0LHIsbil7cmV0dXJuIGIoZSx0LHIsbiwxNil9ZnVuY3Rpb24gZyhlLHQscixuKXtyZXR1cm4gYihlLHQscixuLDMyKX1mdW5jdGlvbiB2KGUsdCxyLG4peyFmdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGksbz0yNTUmblswXXwoMjU1Jm5bMV0pPDw4fCgyNTUmblsyXSk8PDE2fCgyNTUmblszXSk8PDI0LGE9MjU1JnJbMF18KDI1NSZyWzFdKTw8OHwoMjU1JnJbMl0pPDwxNnwoMjU1JnJbM10pPDwyNCxzPTI1NSZyWzRdfCgyNTUmcls1XSk8PDh8KDI1NSZyWzZdKTw8MTZ8KDI1NSZyWzddKTw8MjQsZj0yNTUmcls4XXwoMjU1JnJbOV0pPDw4fCgyNTUmclsxMF0pPDwxNnwoMjU1JnJbMTFdKTw8MjQsdT0yNTUmclsxMl18KDI1NSZyWzEzXSk8PDh8KDI1NSZyWzE0XSk8PDE2fCgyNTUmclsxNV0pPDwyNCxjPTI1NSZuWzRdfCgyNTUmbls1XSk8PDh8KDI1NSZuWzZdKTw8MTZ8KDI1NSZuWzddKTw8MjQsaD0yNTUmdFswXXwoMjU1JnRbMV0pPDw4fCgyNTUmdFsyXSk8PDE2fCgyNTUmdFszXSk8PDI0LGQ9MjU1JnRbNF18KDI1NSZ0WzVdKTw8OHwoMjU1JnRbNl0pPDwxNnwoMjU1JnRbN10pPDwyNCxsPTI1NSZ0WzhdfCgyNTUmdFs5XSk8PDh8KDI1NSZ0WzEwXSk8PDE2fCgyNTUmdFsxMV0pPDwyNCxwPTI1NSZ0WzEyXXwoMjU1JnRbMTNdKTw8OHwoMjU1JnRbMTRdKTw8MTZ8KDI1NSZ0WzE1XSk8PDI0LGI9MjU1Jm5bOF18KDI1NSZuWzldKTw8OHwoMjU1Jm5bMTBdKTw8MTZ8KDI1NSZuWzExXSk8PDI0LHk9MjU1JnJbMTZdfCgyNTUmclsxN10pPDw4fCgyNTUmclsxOF0pPDwxNnwoMjU1JnJbMTldKTw8MjQsZz0yNTUmclsyMF18KDI1NSZyWzIxXSk8PDh8KDI1NSZyWzIyXSk8PDE2fCgyNTUmclsyM10pPDwyNCx2PTI1NSZyWzI0XXwoMjU1JnJbMjVdKTw8OHwoMjU1JnJbMjZdKTw8MTZ8KDI1NSZyWzI3XSk8PDI0LG09MjU1JnJbMjhdfCgyNTUmclsyOV0pPDw4fCgyNTUmclszMF0pPDwxNnwoMjU1JnJbMzFdKTw8MjQsdz0yNTUmblsxMl18KDI1NSZuWzEzXSk8PDh8KDI1NSZuWzE0XSk8PDE2fCgyNTUmblsxNV0pPDwyNCxfPW8sRT1hLFM9cyxBPWYseD11LGs9YyxNPWgsVD1kLEk9bCxSPXAsUD1iLEw9eSxCPWcsQz12LE89bSxOPXcsaj0wO2o8MjA7ais9MilfXj0oaT0oQl49KGk9KElePShpPSh4Xj0oaT1fK0J8MCk8PDd8aT4+PjI1KStffDApPDw5fGk+Pj4yMykreHwwKTw8MTN8aT4+PjE5KStJfDApPDwxOHxpPj4+MTQsa149KGk9KEVePShpPShDXj0oaT0oUl49KGk9aytFfDApPDw3fGk+Pj4yNSkra3wwKTw8OXxpPj4+MjMpK1J8MCk8PDEzfGk+Pj4xOSkrQ3wwKTw8MTh8aT4+PjE0LFBePShpPShNXj0oaT0oU149KGk9KE9ePShpPVArTXwwKTw8N3xpPj4+MjUpK1B8MCk8PDl8aT4+PjIzKStPfDApPDwxM3xpPj4+MTkpK1N8MCk8PDE4fGk+Pj4xNCxOXj0oaT0oTF49KGk9KFRePShpPShBXj0oaT1OK0x8MCk8PDd8aT4+PjI1KStOfDApPDw5fGk+Pj4yMykrQXwwKTw8MTN8aT4+PjE5KStUfDApPDwxOHxpPj4+MTQsX149KGk9KEFePShpPShTXj0oaT0oRV49KGk9XytBfDApPDw3fGk+Pj4yNSkrX3wwKTw8OXxpPj4+MjMpK0V8MCk8PDEzfGk+Pj4xOSkrU3wwKTw8MTh8aT4+PjE0LGtePShpPSh4Xj0oaT0oVF49KGk9KE1ePShpPWsreHwwKTw8N3xpPj4+MjUpK2t8MCk8PDl8aT4+PjIzKStNfDApPDwxM3xpPj4+MTkpK1R8MCk8PDE4fGk+Pj4xNCxQXj0oaT0oUl49KGk9KElePShpPShMXj0oaT1QK1J8MCk8PDd8aT4+PjI1KStQfDApPDw5fGk+Pj4yMykrTHwwKTw8MTN8aT4+PjE5KStJfDApPDwxOHxpPj4+MTQsTl49KGk9KE9ePShpPShDXj0oaT0oQl49KGk9TitPfDApPDw3fGk+Pj4yNSkrTnwwKTw8OXxpPj4+MjMpK0J8MCk8PDEzfGk+Pj4xOSkrQ3wwKTw8MTh8aT4+PjE0O189XytvfDAsRT1FK2F8MCxTPVMrc3wwLEE9QStmfDAseD14K3V8MCxrPWsrY3wwLE09TStofDAsVD1UK2R8MCxJPUkrbHwwLFI9UitwfDAsUD1QK2J8MCxMPUwreXwwLEI9QitnfDAsQz1DK3Z8MCxPPU8rbXwwLE49Tit3fDAsZVswXT1fPj4+MCYyNTUsZVsxXT1fPj4+OCYyNTUsZVsyXT1fPj4+MTYmMjU1LGVbM109Xz4+PjI0JjI1NSxlWzRdPUU+Pj4wJjI1NSxlWzVdPUU+Pj44JjI1NSxlWzZdPUU+Pj4xNiYyNTUsZVs3XT1FPj4+MjQmMjU1LGVbOF09Uz4+PjAmMjU1LGVbOV09Uz4+PjgmMjU1LGVbMTBdPVM+Pj4xNiYyNTUsZVsxMV09Uz4+PjI0JjI1NSxlWzEyXT1BPj4+MCYyNTUsZVsxM109QT4+PjgmMjU1LGVbMTRdPUE+Pj4xNiYyNTUsZVsxNV09QT4+PjI0JjI1NSxlWzE2XT14Pj4+MCYyNTUsZVsxN109eD4+PjgmMjU1LGVbMThdPXg+Pj4xNiYyNTUsZVsxOV09eD4+PjI0JjI1NSxlWzIwXT1rPj4+MCYyNTUsZVsyMV09az4+PjgmMjU1LGVbMjJdPWs+Pj4xNiYyNTUsZVsyM109az4+PjI0JjI1NSxlWzI0XT1NPj4+MCYyNTUsZVsyNV09TT4+PjgmMjU1LGVbMjZdPU0+Pj4xNiYyNTUsZVsyN109TT4+PjI0JjI1NSxlWzI4XT1UPj4+MCYyNTUsZVsyOV09VD4+PjgmMjU1LGVbMzBdPVQ+Pj4xNiYyNTUsZVszMV09VD4+PjI0JjI1NSxlWzMyXT1JPj4+MCYyNTUsZVszM109ST4+PjgmMjU1LGVbMzRdPUk+Pj4xNiYyNTUsZVszNV09ST4+PjI0JjI1NSxlWzM2XT1SPj4+MCYyNTUsZVszN109Uj4+PjgmMjU1LGVbMzhdPVI+Pj4xNiYyNTUsZVszOV09Uj4+PjI0JjI1NSxlWzQwXT1QPj4+MCYyNTUsZVs0MV09UD4+PjgmMjU1LGVbNDJdPVA+Pj4xNiYyNTUsZVs0M109UD4+PjI0JjI1NSxlWzQ0XT1MPj4+MCYyNTUsZVs0NV09TD4+PjgmMjU1LGVbNDZdPUw+Pj4xNiYyNTUsZVs0N109TD4+PjI0JjI1NSxlWzQ4XT1CPj4+MCYyNTUsZVs0OV09Qj4+PjgmMjU1LGVbNTBdPUI+Pj4xNiYyNTUsZVs1MV09Qj4+PjI0JjI1NSxlWzUyXT1DPj4+MCYyNTUsZVs1M109Qz4+PjgmMjU1LGVbNTRdPUM+Pj4xNiYyNTUsZVs1NV09Qz4+PjI0JjI1NSxlWzU2XT1PPj4+MCYyNTUsZVs1N109Tz4+PjgmMjU1LGVbNThdPU8+Pj4xNiYyNTUsZVs1OV09Tz4+PjI0JjI1NSxlWzYwXT1OPj4+MCYyNTUsZVs2MV09Tj4+PjgmMjU1LGVbNjJdPU4+Pj4xNiYyNTUsZVs2M109Tj4+PjI0JjI1NX0oZSx0LHIsbil9ZnVuY3Rpb24gbShlLHQscixuKXshZnVuY3Rpb24oZSx0LHIsbil7Zm9yKHZhciBpLG89MjU1Jm5bMF18KDI1NSZuWzFdKTw8OHwoMjU1Jm5bMl0pPDwxNnwoMjU1Jm5bM10pPDwyNCxhPTI1NSZyWzBdfCgyNTUmclsxXSk8PDh8KDI1NSZyWzJdKTw8MTZ8KDI1NSZyWzNdKTw8MjQscz0yNTUmcls0XXwoMjU1JnJbNV0pPDw4fCgyNTUmcls2XSk8PDE2fCgyNTUmcls3XSk8PDI0LGY9MjU1JnJbOF18KDI1NSZyWzldKTw8OHwoMjU1JnJbMTBdKTw8MTZ8KDI1NSZyWzExXSk8PDI0LHU9MjU1JnJbMTJdfCgyNTUmclsxM10pPDw4fCgyNTUmclsxNF0pPDwxNnwoMjU1JnJbMTVdKTw8MjQsYz0yNTUmbls0XXwoMjU1Jm5bNV0pPDw4fCgyNTUmbls2XSk8PDE2fCgyNTUmbls3XSk8PDI0LGg9MjU1JnRbMF18KDI1NSZ0WzFdKTw8OHwoMjU1JnRbMl0pPDwxNnwoMjU1JnRbM10pPDwyNCxkPTI1NSZ0WzRdfCgyNTUmdFs1XSk8PDh8KDI1NSZ0WzZdKTw8MTZ8KDI1NSZ0WzddKTw8MjQsbD0yNTUmdFs4XXwoMjU1JnRbOV0pPDw4fCgyNTUmdFsxMF0pPDwxNnwoMjU1JnRbMTFdKTw8MjQscD0yNTUmdFsxMl18KDI1NSZ0WzEzXSk8PDh8KDI1NSZ0WzE0XSk8PDE2fCgyNTUmdFsxNV0pPDwyNCxiPTI1NSZuWzhdfCgyNTUmbls5XSk8PDh8KDI1NSZuWzEwXSk8PDE2fCgyNTUmblsxMV0pPDwyNCx5PTI1NSZyWzE2XXwoMjU1JnJbMTddKTw8OHwoMjU1JnJbMThdKTw8MTZ8KDI1NSZyWzE5XSk8PDI0LGc9MjU1JnJbMjBdfCgyNTUmclsyMV0pPDw4fCgyNTUmclsyMl0pPDwxNnwoMjU1JnJbMjNdKTw8MjQsdj0yNTUmclsyNF18KDI1NSZyWzI1XSk8PDh8KDI1NSZyWzI2XSk8PDE2fCgyNTUmclsyN10pPDwyNCxtPTI1NSZyWzI4XXwoMjU1JnJbMjldKTw8OHwoMjU1JnJbMzBdKTw8MTZ8KDI1NSZyWzMxXSk8PDI0LHc9MjU1Jm5bMTJdfCgyNTUmblsxM10pPDw4fCgyNTUmblsxNF0pPDwxNnwoMjU1Jm5bMTVdKTw8MjQsXz0wO188MjA7Xys9MilvXj0oaT0oZ149KGk9KGxePShpPSh1Xj0oaT1vK2d8MCk8PDd8aT4+PjI1KStvfDApPDw5fGk+Pj4yMykrdXwwKTw8MTN8aT4+PjE5KStsfDApPDwxOHxpPj4+MTQsY149KGk9KGFePShpPSh2Xj0oaT0ocF49KGk9YythfDApPDw3fGk+Pj4yNSkrY3wwKTw8OXxpPj4+MjMpK3B8MCk8PDEzfGk+Pj4xOSkrdnwwKTw8MTh8aT4+PjE0LGJePShpPShoXj0oaT0oc149KGk9KG1ePShpPWIraHwwKTw8N3xpPj4+MjUpK2J8MCk8PDl8aT4+PjIzKSttfDApPDwxM3xpPj4+MTkpK3N8MCk8PDE4fGk+Pj4xNCx3Xj0oaT0oeV49KGk9KGRePShpPShmXj0oaT13K3l8MCk8PDd8aT4+PjI1KSt3fDApPDw5fGk+Pj4yMykrZnwwKTw8MTN8aT4+PjE5KStkfDApPDwxOHxpPj4+MTQsb149KGk9KGZePShpPShzXj0oaT0oYV49KGk9bytmfDApPDw3fGk+Pj4yNSkrb3wwKTw8OXxpPj4+MjMpK2F8MCk8PDEzfGk+Pj4xOSkrc3wwKTw8MTh8aT4+PjE0LGNePShpPSh1Xj0oaT0oZF49KGk9KGhePShpPWMrdXwwKTw8N3xpPj4+MjUpK2N8MCk8PDl8aT4+PjIzKStofDApPDwxM3xpPj4+MTkpK2R8MCk8PDE4fGk+Pj4xNCxiXj0oaT0ocF49KGk9KGxePShpPSh5Xj0oaT1iK3B8MCk8PDd8aT4+PjI1KStifDApPDw5fGk+Pj4yMykreXwwKTw8MTN8aT4+PjE5KStsfDApPDwxOHxpPj4+MTQsd149KGk9KG1ePShpPSh2Xj0oaT0oZ149KGk9dyttfDApPDw3fGk+Pj4yNSkrd3wwKTw8OXxpPj4+MjMpK2d8MCk8PDEzfGk+Pj4xOSkrdnwwKTw8MTh8aT4+PjE0O2VbMF09bz4+PjAmMjU1LGVbMV09bz4+PjgmMjU1LGVbMl09bz4+PjE2JjI1NSxlWzNdPW8+Pj4yNCYyNTUsZVs0XT1jPj4+MCYyNTUsZVs1XT1jPj4+OCYyNTUsZVs2XT1jPj4+MTYmMjU1LGVbN109Yz4+PjI0JjI1NSxlWzhdPWI+Pj4wJjI1NSxlWzldPWI+Pj44JjI1NSxlWzEwXT1iPj4+MTYmMjU1LGVbMTFdPWI+Pj4yNCYyNTUsZVsxMl09dz4+PjAmMjU1LGVbMTNdPXc+Pj44JjI1NSxlWzE0XT13Pj4+MTYmMjU1LGVbMTVdPXc+Pj4yNCYyNTUsZVsxNl09aD4+PjAmMjU1LGVbMTddPWg+Pj44JjI1NSxlWzE4XT1oPj4+MTYmMjU1LGVbMTldPWg+Pj4yNCYyNTUsZVsyMF09ZD4+PjAmMjU1LGVbMjFdPWQ+Pj44JjI1NSxlWzIyXT1kPj4+MTYmMjU1LGVbMjNdPWQ+Pj4yNCYyNTUsZVsyNF09bD4+PjAmMjU1LGVbMjVdPWw+Pj44JjI1NSxlWzI2XT1sPj4+MTYmMjU1LGVbMjddPWw+Pj4yNCYyNTUsZVsyOF09cD4+PjAmMjU1LGVbMjldPXA+Pj44JjI1NSxlWzMwXT1wPj4+MTYmMjU1LGVbMzFdPXA+Pj4yNCYyNTV9KGUsdCxyLG4pfXZhciB3PW5ldyBVaW50OEFycmF5KFsxMDEsMTIwLDExMiw5NywxMTAsMTAwLDMyLDUxLDUwLDQ1LDk4LDEyMSwxMTYsMTAxLDMyLDEwN10pO2Z1bmN0aW9uIF8oZSx0LHIsbixpLG8sYSl7dmFyIHMsZix1PW5ldyBVaW50OEFycmF5KDE2KSxjPW5ldyBVaW50OEFycmF5KDY0KTtmb3IoZj0wO2Y8MTY7ZisrKXVbZl09MDtmb3IoZj0wO2Y8ODtmKyspdVtmXT1vW2ZdO2Zvcig7aT49NjQ7KXtmb3IodihjLHUsYSx3KSxmPTA7Zjw2NDtmKyspZVt0K2ZdPXJbbitmXV5jW2ZdO2ZvcihzPTEsZj04O2Y8MTY7ZisrKXM9cysoMjU1JnVbZl0pfDAsdVtmXT0yNTUmcyxzPj4+PTg7aS09NjQsdCs9NjQsbis9NjR9aWYoaT4wKWZvcih2KGMsdSxhLHcpLGY9MDtmPGk7ZisrKWVbdCtmXT1yW24rZl1eY1tmXTtyZXR1cm4gMH1mdW5jdGlvbiBFKGUsdCxyLG4saSl7dmFyIG8sYSxzPW5ldyBVaW50OEFycmF5KDE2KSxmPW5ldyBVaW50OEFycmF5KDY0KTtmb3IoYT0wO2E8MTY7YSsrKXNbYV09MDtmb3IoYT0wO2E8ODthKyspc1thXT1uW2FdO2Zvcig7cj49NjQ7KXtmb3IodihmLHMsaSx3KSxhPTA7YTw2NDthKyspZVt0K2FdPWZbYV07Zm9yKG89MSxhPTg7YTwxNjthKyspbz1vKygyNTUmc1thXSl8MCxzW2FdPTI1NSZvLG8+Pj49ODtyLT02NCx0Kz02NH1pZihyPjApZm9yKHYoZixzLGksdyksYT0wO2E8cjthKyspZVt0K2FdPWZbYV07cmV0dXJuIDB9ZnVuY3Rpb24gUyhlLHQscixuLGkpe3ZhciBvPW5ldyBVaW50OEFycmF5KDMyKTttKG8sbixpLHcpO2Zvcih2YXIgYT1uZXcgVWludDhBcnJheSg4KSxzPTA7czw4O3MrKylhW3NdPW5bcysxNl07cmV0dXJuIEUoZSx0LHIsYSxvKX1mdW5jdGlvbiBBKGUsdCxyLG4saSxvLGEpe3ZhciBzPW5ldyBVaW50OEFycmF5KDMyKTttKHMsbyxhLHcpO2Zvcih2YXIgZj1uZXcgVWludDhBcnJheSg4KSx1PTA7dTw4O3UrKylmW3VdPW9bdSsxNl07cmV0dXJuIF8oZSx0LHIsbixpLGYscyl9dmFyIHg9ZnVuY3Rpb24oZSl7dmFyIHQscixuLGksbyxhLHMsZjt0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNiksdGhpcy5yPW5ldyBVaW50MTZBcnJheSgxMCksdGhpcy5oPW5ldyBVaW50MTZBcnJheSgxMCksdGhpcy5wYWQ9bmV3IFVpbnQxNkFycmF5KDgpLHRoaXMubGVmdG92ZXI9MCx0aGlzLmZpbj0wLHQ9MjU1JmVbMF18KDI1NSZlWzFdKTw8OCx0aGlzLnJbMF09ODE5MSZ0LHI9MjU1JmVbMl18KDI1NSZlWzNdKTw8OCx0aGlzLnJbMV09ODE5MSYodD4+PjEzfHI8PDMpLG49MjU1JmVbNF18KDI1NSZlWzVdKTw8OCx0aGlzLnJbMl09NzkzOSYocj4+PjEwfG48PDYpLGk9MjU1JmVbNl18KDI1NSZlWzddKTw8OCx0aGlzLnJbM109ODE5MSYobj4+Pjd8aTw8OSksbz0yNTUmZVs4XXwoMjU1JmVbOV0pPDw4LHRoaXMucls0XT0yNTUmKGk+Pj40fG88PDEyKSx0aGlzLnJbNV09bz4+PjEmODE5MCxhPTI1NSZlWzEwXXwoMjU1JmVbMTFdKTw8OCx0aGlzLnJbNl09ODE5MSYobz4+PjE0fGE8PDIpLHM9MjU1JmVbMTJdfCgyNTUmZVsxM10pPDw4LHRoaXMucls3XT04MDY1JihhPj4+MTF8czw8NSksZj0yNTUmZVsxNF18KDI1NSZlWzE1XSk8PDgsdGhpcy5yWzhdPTgxOTEmKHM+Pj44fGY8PDgpLHRoaXMucls5XT1mPj4+NSYxMjcsdGhpcy5wYWRbMF09MjU1JmVbMTZdfCgyNTUmZVsxN10pPDw4LHRoaXMucGFkWzFdPTI1NSZlWzE4XXwoMjU1JmVbMTldKTw8OCx0aGlzLnBhZFsyXT0yNTUmZVsyMF18KDI1NSZlWzIxXSk8PDgsdGhpcy5wYWRbM109MjU1JmVbMjJdfCgyNTUmZVsyM10pPDw4LHRoaXMucGFkWzRdPTI1NSZlWzI0XXwoMjU1JmVbMjVdKTw8OCx0aGlzLnBhZFs1XT0yNTUmZVsyNl18KDI1NSZlWzI3XSk8PDgsdGhpcy5wYWRbNl09MjU1JmVbMjhdfCgyNTUmZVsyOV0pPDw4LHRoaXMucGFkWzddPTI1NSZlWzMwXXwoMjU1JmVbMzFdKTw8OH07ZnVuY3Rpb24gayhlLHQscixuLGksbyl7dmFyIGE9bmV3IHgobyk7cmV0dXJuIGEudXBkYXRlKHIsbixpKSxhLmZpbmlzaChlLHQpLDB9ZnVuY3Rpb24gTShlLHQscixuLGksbyl7dmFyIGE9bmV3IFVpbnQ4QXJyYXkoMTYpO3JldHVybiBrKGEsMCxyLG4saSxvKSx5KGUsdCxhLDApfWZ1bmN0aW9uIFQoZSx0LHIsbixpKXt2YXIgbztpZihyPDMyKXJldHVybi0xO2ZvcihBKGUsMCx0LDAscixuLGkpLGsoZSwxNixlLDMyLHItMzIsZSksbz0wO288MTY7bysrKWVbb109MDtyZXR1cm4gMH1mdW5jdGlvbiBJKGUsdCxyLG4saSl7dmFyIG8sYT1uZXcgVWludDhBcnJheSgzMik7aWYocjwzMilyZXR1cm4tMTtpZihTKGEsMCwzMixuLGkpLDAhPT1NKHQsMTYsdCwzMixyLTMyLGEpKXJldHVybi0xO2ZvcihBKGUsMCx0LDAscixuLGkpLG89MDtvPDMyO28rKyllW29dPTA7cmV0dXJuIDB9ZnVuY3Rpb24gUihlLHQpe3ZhciByO2ZvcihyPTA7cjwxNjtyKyspZVtyXT0wfHRbcl19ZnVuY3Rpb24gUChlKXt2YXIgdCxyLG49MTtmb3IodD0wO3Q8MTY7dCsrKXI9ZVt0XStuKzY1NTM1LG49TWF0aC5mbG9vcihyLzY1NTM2KSxlW3RdPXItNjU1MzYqbjtlWzBdKz1uLTErMzcqKG4tMSl9ZnVuY3Rpb24gTChlLHQscil7Zm9yKHZhciBuLGk9fihyLTEpLG89MDtvPDE2O28rKyluPWkmKGVbb11edFtvXSksZVtvXV49bix0W29dXj1ufWZ1bmN0aW9uIEIoZSxyKXt2YXIgbixpLG8sYT10KCkscz10KCk7Zm9yKG49MDtuPDE2O24rKylzW25dPXJbbl07Zm9yKFAocyksUChzKSxQKHMpLGk9MDtpPDI7aSsrKXtmb3IoYVswXT1zWzBdLTY1NTE3LG49MTtuPDE1O24rKylhW25dPXNbbl0tNjU1MzUtKGFbbi0xXT4+MTYmMSksYVtuLTFdJj02NTUzNTthWzE1XT1zWzE1XS0zMjc2Ny0oYVsxNF0+PjE2JjEpLG89YVsxNV0+PjE2JjEsYVsxNF0mPTY1NTM1LEwocyxhLDEtbyl9Zm9yKG49MDtuPDE2O24rKyllWzIqbl09MjU1JnNbbl0sZVsyKm4rMV09c1tuXT4+OH1mdW5jdGlvbiBDKGUsdCl7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoMzIpLG49bmV3IFVpbnQ4QXJyYXkoMzIpO3JldHVybiBCKHIsZSksQihuLHQpLGcociwwLG4sMCl9ZnVuY3Rpb24gTyhlKXt2YXIgdD1uZXcgVWludDhBcnJheSgzMik7cmV0dXJuIEIodCxlKSwxJnRbMF19ZnVuY3Rpb24gTihlLHQpe3ZhciByO2ZvcihyPTA7cjwxNjtyKyspZVtyXT10WzIqcl0rKHRbMipyKzFdPDw4KTtlWzE1XSY9MzI3Njd9ZnVuY3Rpb24gaihlLHQscil7Zm9yKHZhciBuPTA7bjwxNjtuKyspZVtuXT10W25dK3Jbbl19ZnVuY3Rpb24gRChlLHQscil7Zm9yKHZhciBuPTA7bjwxNjtuKyspZVtuXT10W25dLXJbbl19ZnVuY3Rpb24gVShlLHQscil7dmFyIG4saSxvPTAsYT0wLHM9MCxmPTAsdT0wLGM9MCxoPTAsZD0wLGw9MCxwPTAsYj0wLHk9MCxnPTAsdj0wLG09MCx3PTAsXz0wLEU9MCxTPTAsQT0wLHg9MCxrPTAsTT0wLFQ9MCxJPTAsUj0wLFA9MCxMPTAsQj0wLEM9MCxPPTAsTj1yWzBdLGo9clsxXSxEPXJbMl0sVT1yWzNdLHo9cls0XSxxPXJbNV0sRj1yWzZdLEs9cls3XSxIPXJbOF0sVj1yWzldLFk9clsxMF0sVz1yWzExXSxHPXJbMTJdLFo9clsxM10sSj1yWzE0XSwkPXJbMTVdO28rPShuPXRbMF0pKk4sYSs9bipqLHMrPW4qRCxmKz1uKlUsdSs9bip6LGMrPW4qcSxoKz1uKkYsZCs9bipLLGwrPW4qSCxwKz1uKlYsYis9bipZLHkrPW4qVyxnKz1uKkcsdis9bipaLG0rPW4qSix3Kz1uKiQsYSs9KG49dFsxXSkqTixzKz1uKmosZis9bipELHUrPW4qVSxjKz1uKnosaCs9bipxLGQrPW4qRixsKz1uKksscCs9bipILGIrPW4qVix5Kz1uKlksZys9bipXLHYrPW4qRyxtKz1uKlosdys9bipKLF8rPW4qJCxzKz0obj10WzJdKSpOLGYrPW4qaix1Kz1uKkQsYys9bipVLGgrPW4qeixkKz1uKnEsbCs9bipGLHArPW4qSyxiKz1uKkgseSs9bipWLGcrPW4qWSx2Kz1uKlcsbSs9bipHLHcrPW4qWixfKz1uKkosRSs9biokLGYrPShuPXRbM10pKk4sdSs9bipqLGMrPW4qRCxoKz1uKlUsZCs9bip6LGwrPW4qcSxwKz1uKkYsYis9bipLLHkrPW4qSCxnKz1uKlYsdis9bipZLG0rPW4qVyx3Kz1uKkcsXys9bipaLEUrPW4qSixTKz1uKiQsdSs9KG49dFs0XSkqTixjKz1uKmosaCs9bipELGQrPW4qVSxsKz1uKnoscCs9bipxLGIrPW4qRix5Kz1uKkssZys9bipILHYrPW4qVixtKz1uKlksdys9bipXLF8rPW4qRyxFKz1uKlosUys9bipKLEErPW4qJCxjKz0obj10WzVdKSpOLGgrPW4qaixkKz1uKkQsbCs9bipVLHArPW4qeixiKz1uKnEseSs9bipGLGcrPW4qSyx2Kz1uKkgsbSs9bipWLHcrPW4qWSxfKz1uKlcsRSs9bipHLFMrPW4qWixBKz1uKkoseCs9biokLGgrPShuPXRbNl0pKk4sZCs9bipqLGwrPW4qRCxwKz1uKlUsYis9bip6LHkrPW4qcSxnKz1uKkYsdis9bipLLG0rPW4qSCx3Kz1uKlYsXys9bipZLEUrPW4qVyxTKz1uKkcsQSs9bipaLHgrPW4qSixrKz1uKiQsZCs9KG49dFs3XSkqTixsKz1uKmoscCs9bipELGIrPW4qVSx5Kz1uKnosZys9bipxLHYrPW4qRixtKz1uKkssdys9bipILF8rPW4qVixFKz1uKlksUys9bipXLEErPW4qRyx4Kz1uKlosays9bipKLE0rPW4qJCxsKz0obj10WzhdKSpOLHArPW4qaixiKz1uKkQseSs9bipVLGcrPW4qeix2Kz1uKnEsbSs9bipGLHcrPW4qSyxfKz1uKkgsRSs9bipWLFMrPW4qWSxBKz1uKlcseCs9bipHLGsrPW4qWixNKz1uKkosVCs9biokLHArPShuPXRbOV0pKk4sYis9bipqLHkrPW4qRCxnKz1uKlUsdis9bip6LG0rPW4qcSx3Kz1uKkYsXys9bipLLEUrPW4qSCxTKz1uKlYsQSs9bipZLHgrPW4qVyxrKz1uKkcsTSs9bipaLFQrPW4qSixJKz1uKiQsYis9KG49dFsxMF0pKk4seSs9bipqLGcrPW4qRCx2Kz1uKlUsbSs9bip6LHcrPW4qcSxfKz1uKkYsRSs9bipLLFMrPW4qSCxBKz1uKlYseCs9bipZLGsrPW4qVyxNKz1uKkcsVCs9bipaLEkrPW4qSixSKz1uKiQseSs9KG49dFsxMV0pKk4sZys9bipqLHYrPW4qRCxtKz1uKlUsdys9bip6LF8rPW4qcSxFKz1uKkYsUys9bipLLEErPW4qSCx4Kz1uKlYsays9bipZLE0rPW4qVyxUKz1uKkcsSSs9bipaLFIrPW4qSixQKz1uKiQsZys9KG49dFsxMl0pKk4sdis9bipqLG0rPW4qRCx3Kz1uKlUsXys9bip6LEUrPW4qcSxTKz1uKkYsQSs9bipLLHgrPW4qSCxrKz1uKlYsTSs9bipZLFQrPW4qVyxJKz1uKkcsUis9bipaLFArPW4qSixMKz1uKiQsdis9KG49dFsxM10pKk4sbSs9bipqLHcrPW4qRCxfKz1uKlUsRSs9bip6LFMrPW4qcSxBKz1uKkYseCs9bipLLGsrPW4qSCxNKz1uKlYsVCs9bipZLEkrPW4qVyxSKz1uKkcsUCs9bipaLEwrPW4qSixCKz1uKiQsbSs9KG49dFsxNF0pKk4sdys9bipqLF8rPW4qRCxFKz1uKlUsUys9bip6LEErPW4qcSx4Kz1uKkYsays9bipLLE0rPW4qSCxUKz1uKlYsSSs9bipZLFIrPW4qVyxQKz1uKkcsTCs9bipaLEIrPW4qSixDKz1uKiQsdys9KG49dFsxNV0pKk4sYSs9MzgqKEUrPW4qRCkscys9MzgqKFMrPW4qVSksZis9MzgqKEErPW4qeiksdSs9MzgqKHgrPW4qcSksYys9MzgqKGsrPW4qRiksaCs9MzgqKE0rPW4qSyksZCs9MzgqKFQrPW4qSCksbCs9MzgqKEkrPW4qVikscCs9MzgqKFIrPW4qWSksYis9MzgqKFArPW4qVykseSs9MzgqKEwrPW4qRyksZys9MzgqKEIrPW4qWiksdis9MzgqKEMrPW4qSiksbSs9MzgqKE8rPW4qJCksbz0obj0obys9MzgqKF8rPW4qaikpKyhpPTEpKzY1NTM1KS02NTUzNiooaT1NYXRoLmZsb29yKG4vNjU1MzYpKSxhPShuPWEraSs2NTUzNSktNjU1MzYqKGk9TWF0aC5mbG9vcihuLzY1NTM2KSkscz0obj1zK2krNjU1MzUpLTY1NTM2KihpPU1hdGguZmxvb3Iobi82NTUzNikpLGY9KG49ZitpKzY1NTM1KS02NTUzNiooaT1NYXRoLmZsb29yKG4vNjU1MzYpKSx1PShuPXUraSs2NTUzNSktNjU1MzYqKGk9TWF0aC5mbG9vcihuLzY1NTM2KSksYz0obj1jK2krNjU1MzUpLTY1NTM2KihpPU1hdGguZmxvb3Iobi82NTUzNikpLGg9KG49aCtpKzY1NTM1KS02NTUzNiooaT1NYXRoLmZsb29yKG4vNjU1MzYpKSxkPShuPWQraSs2NTUzNSktNjU1MzYqKGk9TWF0aC5mbG9vcihuLzY1NTM2KSksbD0obj1sK2krNjU1MzUpLTY1NTM2KihpPU1hdGguZmxvb3Iobi82NTUzNikpLHA9KG49cCtpKzY1NTM1KS02NTUzNiooaT1NYXRoLmZsb29yKG4vNjU1MzYpKSxiPShuPWIraSs2NTUzNSktNjU1MzYqKGk9TWF0aC5mbG9vcihuLzY1NTM2KSkseT0obj15K2krNjU1MzUpLTY1NTM2KihpPU1hdGguZmxvb3Iobi82NTUzNikpLGc9KG49ZytpKzY1NTM1KS02NTUzNiooaT1NYXRoLmZsb29yKG4vNjU1MzYpKSx2PShuPXYraSs2NTUzNSktNjU1MzYqKGk9TWF0aC5mbG9vcihuLzY1NTM2KSksbT0obj1tK2krNjU1MzUpLTY1NTM2KihpPU1hdGguZmxvb3Iobi82NTUzNikpLHc9KG49dytpKzY1NTM1KS02NTUzNiooaT1NYXRoLmZsb29yKG4vNjU1MzYpKSxvPShuPShvKz1pLTErMzcqKGktMSkpKyhpPTEpKzY1NTM1KS02NTUzNiooaT1NYXRoLmZsb29yKG4vNjU1MzYpKSxhPShuPWEraSs2NTUzNSktNjU1MzYqKGk9TWF0aC5mbG9vcihuLzY1NTM2KSkscz0obj1zK2krNjU1MzUpLTY1NTM2KihpPU1hdGguZmxvb3Iobi82NTUzNikpLGY9KG49ZitpKzY1NTM1KS02NTUzNiooaT1NYXRoLmZsb29yKG4vNjU1MzYpKSx1PShuPXUraSs2NTUzNSktNjU1MzYqKGk9TWF0aC5mbG9vcihuLzY1NTM2KSksYz0obj1jK2krNjU1MzUpLTY1NTM2KihpPU1hdGguZmxvb3Iobi82NTUzNikpLGg9KG49aCtpKzY1NTM1KS02NTUzNiooaT1NYXRoLmZsb29yKG4vNjU1MzYpKSxkPShuPWQraSs2NTUzNSktNjU1MzYqKGk9TWF0aC5mbG9vcihuLzY1NTM2KSksbD0obj1sK2krNjU1MzUpLTY1NTM2KihpPU1hdGguZmxvb3Iobi82NTUzNikpLHA9KG49cCtpKzY1NTM1KS02NTUzNiooaT1NYXRoLmZsb29yKG4vNjU1MzYpKSxiPShuPWIraSs2NTUzNSktNjU1MzYqKGk9TWF0aC5mbG9vcihuLzY1NTM2KSkseT0obj15K2krNjU1MzUpLTY1NTM2KihpPU1hdGguZmxvb3Iobi82NTUzNikpLGc9KG49ZytpKzY1NTM1KS02NTUzNiooaT1NYXRoLmZsb29yKG4vNjU1MzYpKSx2PShuPXYraSs2NTUzNSktNjU1MzYqKGk9TWF0aC5mbG9vcihuLzY1NTM2KSksbT0obj1tK2krNjU1MzUpLTY1NTM2KihpPU1hdGguZmxvb3Iobi82NTUzNikpLHc9KG49dytpKzY1NTM1KS02NTUzNiooaT1NYXRoLmZsb29yKG4vNjU1MzYpKSxvKz1pLTErMzcqKGktMSksZVswXT1vLGVbMV09YSxlWzJdPXMsZVszXT1mLGVbNF09dSxlWzVdPWMsZVs2XT1oLGVbN109ZCxlWzhdPWwsZVs5XT1wLGVbMTBdPWIsZVsxMV09eSxlWzEyXT1nLGVbMTNdPXYsZVsxNF09bSxlWzE1XT13fWZ1bmN0aW9uIHooZSx0KXtVKGUsdCx0KX1mdW5jdGlvbiBxKGUscil7dmFyIG4saT10KCk7Zm9yKG49MDtuPDE2O24rKylpW25dPXJbbl07Zm9yKG49MjUzO24+PTA7bi0tKXooaSxpKSwyIT09biYmNCE9PW4mJlUoaSxpLHIpO2ZvcihuPTA7bjwxNjtuKyspZVtuXT1pW25dfWZ1bmN0aW9uIEYoZSxyKXt2YXIgbixpPXQoKTtmb3Iobj0wO248MTY7bisrKWlbbl09cltuXTtmb3Iobj0yNTA7bj49MDtuLS0peihpLGkpLDEhPT1uJiZVKGksaSxyKTtmb3Iobj0wO248MTY7bisrKWVbbl09aVtuXX1mdW5jdGlvbiBLKGUscixuKXt2YXIgaSxvLGE9bmV3IFVpbnQ4QXJyYXkoMzIpLHM9bmV3IEZsb2F0NjRBcnJheSg4MCksdT10KCksYz10KCksaD10KCksZD10KCksbD10KCkscD10KCk7Zm9yKG89MDtvPDMxO28rKylhW29dPXJbb107Zm9yKGFbMzFdPTEyNyZyWzMxXXw2NCxhWzBdJj0yNDgsTihzLG4pLG89MDtvPDE2O28rKyljW29dPXNbb10sZFtvXT11W29dPWhbb109MDtmb3IodVswXT1kWzBdPTEsbz0yNTQ7bz49MDstLW8pTCh1LGMsaT1hW28+Pj4zXT4+Pig3Jm8pJjEpLEwoaCxkLGkpLGoobCx1LGgpLEQodSx1LGgpLGooaCxjLGQpLEQoYyxjLGQpLHooZCxsKSx6KHAsdSksVSh1LGgsdSksVShoLGMsbCksaihsLHUsaCksRCh1LHUsaCkseihjLHUpLEQoaCxkLHApLFUodSxoLGYpLGoodSx1LGQpLFUoaCxoLHUpLFUodSxkLHApLFUoZCxjLHMpLHooYyxsKSxMKHUsYyxpKSxMKGgsZCxpKTtmb3Iobz0wO288MTY7bysrKXNbbysxNl09dVtvXSxzW28rMzJdPWhbb10sc1tvKzQ4XT1jW29dLHNbbys2NF09ZFtvXTt2YXIgYj1zLnN1YmFycmF5KDMyKSx5PXMuc3ViYXJyYXkoMTYpO3JldHVybiBxKGIsYiksVSh5LHksYiksQihlLHkpLDB9ZnVuY3Rpb24gSChlLHQpe3JldHVybiBLKGUsdCxvKX1mdW5jdGlvbiBWKGUsdCl7cmV0dXJuIG4odCwzMiksSChlLHQpfWZ1bmN0aW9uIFkoZSx0LHIpe3ZhciBuPW5ldyBVaW50OEFycmF5KDMyKTtyZXR1cm4gSyhuLHIsdCksbShlLGksbix3KX14LnByb3RvdHlwZS5ibG9ja3M9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbixpLG8sYSxzLGYsdSxjLGgsZCxsLHAsYix5LGcsdixtLHcsXyxFPXRoaXMuZmluPzA6MjA0OCxTPXRoaXMuaFswXSxBPXRoaXMuaFsxXSx4PXRoaXMuaFsyXSxrPXRoaXMuaFszXSxNPXRoaXMuaFs0XSxUPXRoaXMuaFs1XSxJPXRoaXMuaFs2XSxSPXRoaXMuaFs3XSxQPXRoaXMuaFs4XSxMPXRoaXMuaFs5XSxCPXRoaXMuclswXSxDPXRoaXMuclsxXSxPPXRoaXMuclsyXSxOPXRoaXMuclszXSxqPXRoaXMucls0XSxEPXRoaXMucls1XSxVPXRoaXMucls2XSx6PXRoaXMucls3XSxxPXRoaXMucls4XSxGPXRoaXMucls5XTtyPj0xNjspZD1oPTAsZCs9KFMrPTgxOTEmKG49MjU1JmVbdCswXXwoMjU1JmVbdCsxXSk8PDgpKSpCLGQrPShBKz04MTkxJihuPj4+MTN8KGk9MjU1JmVbdCsyXXwoMjU1JmVbdCszXSk8PDgpPDwzKSkqKDUqRiksZCs9KHgrPTgxOTEmKGk+Pj4xMHwobz0yNTUmZVt0KzRdfCgyNTUmZVt0KzVdKTw8OCk8PDYpKSooNSpxKSxkKz0oays9ODE5MSYobz4+Pjd8KGE9MjU1JmVbdCs2XXwoMjU1JmVbdCs3XSk8PDgpPDw5KSkqKDUqeiksaD0oZCs9KE0rPTgxOTEmKGE+Pj40fChzPTI1NSZlW3QrOF18KDI1NSZlW3QrOV0pPDw4KTw8MTIpKSooNSpVKSk+Pj4xMyxkJj04MTkxLGQrPShUKz1zPj4+MSY4MTkxKSooNSpEKSxkKz0oSSs9ODE5MSYocz4+PjE0fChmPTI1NSZlW3QrMTBdfCgyNTUmZVt0KzExXSk8PDgpPDwyKSkqKDUqaiksZCs9KFIrPTgxOTEmKGY+Pj4xMXwodT0yNTUmZVt0KzEyXXwoMjU1JmVbdCsxM10pPDw4KTw8NSkpKig1Kk4pLGQrPShQKz04MTkxJih1Pj4+OHwoYz0yNTUmZVt0KzE0XXwoMjU1JmVbdCsxNV0pPDw4KTw8OCkpKig1Kk8pLGw9aCs9KGQrPShMKz1jPj4+NXxFKSooNSpDKSk+Pj4xMyxsKz1TKkMsbCs9QSpCLGwrPXgqKDUqRiksbCs9ayooNSpxKSxoPShsKz1NKig1KnopKT4+PjEzLGwmPTgxOTEsbCs9VCooNSpVKSxsKz1JKig1KkQpLGwrPVIqKDUqaiksbCs9UCooNSpOKSxoKz0obCs9TCooNSpPKSk+Pj4xMyxsJj04MTkxLHA9aCxwKz1TKk8scCs9QSpDLHArPXgqQixwKz1rKig1KkYpLGg9KHArPU0qKDUqcSkpPj4+MTMscCY9ODE5MSxwKz1UKig1KnopLHArPUkqKDUqVSkscCs9UiooNSpEKSxwKz1QKig1KmopLGI9aCs9KHArPUwqKDUqTikpPj4+MTMsYis9UypOLGIrPUEqTyxiKz14KkMsYis9aypCLGg9KGIrPU0qKDUqRikpPj4+MTMsYiY9ODE5MSxiKz1UKig1KnEpLGIrPUkqKDUqeiksYis9UiooNSpVKSxiKz1QKig1KkQpLHk9aCs9KGIrPUwqKDUqaikpPj4+MTMseSs9UypqLHkrPUEqTix5Kz14Kk8seSs9aypDLGg9KHkrPU0qQik+Pj4xMyx5Jj04MTkxLHkrPVQqKDUqRikseSs9SSooNSpxKSx5Kz1SKig1KnopLHkrPVAqKDUqVSksZz1oKz0oeSs9TCooNSpEKSk+Pj4xMyxnKz1TKkQsZys9QSpqLGcrPXgqTixnKz1rKk8saD0oZys9TSpDKT4+PjEzLGcmPTgxOTEsZys9VCpCLGcrPUkqKDUqRiksZys9UiooNSpxKSxnKz1QKig1KnopLHY9aCs9KGcrPUwqKDUqVSkpPj4+MTMsdis9UypVLHYrPUEqRCx2Kz14Kmosdis9aypOLGg9KHYrPU0qTyk+Pj4xMyx2Jj04MTkxLHYrPVQqQyx2Kz1JKkIsdis9UiooNSpGKSx2Kz1QKig1KnEpLG09aCs9KHYrPUwqKDUqeikpPj4+MTMsbSs9Uyp6LG0rPUEqVSxtKz14KkQsbSs9aypqLGg9KG0rPU0qTik+Pj4xMyxtJj04MTkxLG0rPVQqTyxtKz1JKkMsbSs9UipCLG0rPVAqKDUqRiksdz1oKz0obSs9TCooNSpxKSk+Pj4xMyx3Kz1TKnEsdys9QSp6LHcrPXgqVSx3Kz1rKkQsaD0odys9TSpqKT4+PjEzLHcmPTgxOTEsdys9VCpOLHcrPUkqTyx3Kz1SKkMsdys9UCpCLF89aCs9KHcrPUwqKDUqRikpPj4+MTMsXys9UypGLF8rPUEqcSxfKz14KnosXys9aypVLGg9KF8rPU0qRCk+Pj4xMyxfJj04MTkxLF8rPVQqaixfKz1JKk4sXys9UipPLF8rPVAqQyxTPWQ9ODE5MSYoaD0oaD0oKGgrPShfKz1MKkIpPj4+MTMpPDwyKStofDApKyhkJj04MTkxKXwwKSxBPWwrPWg+Pj49MTMseD1wJj04MTkxLGs9YiY9ODE5MSxNPXkmPTgxOTEsVD1nJj04MTkxLEk9diY9ODE5MSxSPW0mPTgxOTEsUD13Jj04MTkxLEw9XyY9ODE5MSx0Kz0xNixyLT0xNjt0aGlzLmhbMF09Uyx0aGlzLmhbMV09QSx0aGlzLmhbMl09eCx0aGlzLmhbM109ayx0aGlzLmhbNF09TSx0aGlzLmhbNV09VCx0aGlzLmhbNl09SSx0aGlzLmhbN109Uix0aGlzLmhbOF09UCx0aGlzLmhbOV09TH0seC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLG8sYT1uZXcgVWludDE2QXJyYXkoMTApO2lmKHRoaXMubGVmdG92ZXIpe2ZvcihvPXRoaXMubGVmdG92ZXIsdGhpcy5idWZmZXJbbysrXT0xO288MTY7bysrKXRoaXMuYnVmZmVyW29dPTA7dGhpcy5maW49MSx0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwwLDE2KX1mb3Iocj10aGlzLmhbMV0+Pj4xMyx0aGlzLmhbMV0mPTgxOTEsbz0yO288MTA7bysrKXRoaXMuaFtvXSs9cixyPXRoaXMuaFtvXT4+PjEzLHRoaXMuaFtvXSY9ODE5MTtmb3IodGhpcy5oWzBdKz01KnIscj10aGlzLmhbMF0+Pj4xMyx0aGlzLmhbMF0mPTgxOTEsdGhpcy5oWzFdKz1yLHI9dGhpcy5oWzFdPj4+MTMsdGhpcy5oWzFdJj04MTkxLHRoaXMuaFsyXSs9cixhWzBdPXRoaXMuaFswXSs1LHI9YVswXT4+PjEzLGFbMF0mPTgxOTEsbz0xO288MTA7bysrKWFbb109dGhpcy5oW29dK3Iscj1hW29dPj4+MTMsYVtvXSY9ODE5MTtmb3IoYVs5XS09ODE5MixuPSgxXnIpLTEsbz0wO288MTA7bysrKWFbb10mPW47Zm9yKG49fm4sbz0wO288MTA7bysrKXRoaXMuaFtvXT10aGlzLmhbb10mbnxhW29dO2Zvcih0aGlzLmhbMF09NjU1MzUmKHRoaXMuaFswXXx0aGlzLmhbMV08PDEzKSx0aGlzLmhbMV09NjU1MzUmKHRoaXMuaFsxXT4+PjN8dGhpcy5oWzJdPDwxMCksdGhpcy5oWzJdPTY1NTM1Jih0aGlzLmhbMl0+Pj42fHRoaXMuaFszXTw8NyksdGhpcy5oWzNdPTY1NTM1Jih0aGlzLmhbM10+Pj45fHRoaXMuaFs0XTw8NCksdGhpcy5oWzRdPTY1NTM1Jih0aGlzLmhbNF0+Pj4xMnx0aGlzLmhbNV08PDF8dGhpcy5oWzZdPDwxNCksdGhpcy5oWzVdPTY1NTM1Jih0aGlzLmhbNl0+Pj4yfHRoaXMuaFs3XTw8MTEpLHRoaXMuaFs2XT02NTUzNSYodGhpcy5oWzddPj4+NXx0aGlzLmhbOF08PDgpLHRoaXMuaFs3XT02NTUzNSYodGhpcy5oWzhdPj4+OHx0aGlzLmhbOV08PDUpLGk9dGhpcy5oWzBdK3RoaXMucGFkWzBdLHRoaXMuaFswXT02NTUzNSZpLG89MTtvPDg7bysrKWk9KHRoaXMuaFtvXSt0aGlzLnBhZFtvXXwwKSsoaT4+PjE2KXwwLHRoaXMuaFtvXT02NTUzNSZpO2VbdCswXT10aGlzLmhbMF0+Pj4wJjI1NSxlW3QrMV09dGhpcy5oWzBdPj4+OCYyNTUsZVt0KzJdPXRoaXMuaFsxXT4+PjAmMjU1LGVbdCszXT10aGlzLmhbMV0+Pj44JjI1NSxlW3QrNF09dGhpcy5oWzJdPj4+MCYyNTUsZVt0KzVdPXRoaXMuaFsyXT4+PjgmMjU1LGVbdCs2XT10aGlzLmhbM10+Pj4wJjI1NSxlW3QrN109dGhpcy5oWzNdPj4+OCYyNTUsZVt0KzhdPXRoaXMuaFs0XT4+PjAmMjU1LGVbdCs5XT10aGlzLmhbNF0+Pj44JjI1NSxlW3QrMTBdPXRoaXMuaFs1XT4+PjAmMjU1LGVbdCsxMV09dGhpcy5oWzVdPj4+OCYyNTUsZVt0KzEyXT10aGlzLmhbNl0+Pj4wJjI1NSxlW3QrMTNdPXRoaXMuaFs2XT4+PjgmMjU1LGVbdCsxNF09dGhpcy5oWzddPj4+MCYyNTUsZVt0KzE1XT10aGlzLmhbN10+Pj44JjI1NX0seC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpO2lmKHRoaXMubGVmdG92ZXIpe2ZvcigoaT0xNi10aGlzLmxlZnRvdmVyKT5yJiYoaT1yKSxuPTA7bjxpO24rKyl0aGlzLmJ1ZmZlclt0aGlzLmxlZnRvdmVyK25dPWVbdCtuXTtpZihyLT1pLHQrPWksdGhpcy5sZWZ0b3Zlcis9aSx0aGlzLmxlZnRvdmVyPDE2KXJldHVybjt0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwwLDE2KSx0aGlzLmxlZnRvdmVyPTB9aWYocj49MTYmJihpPXItciUxNix0aGlzLmJsb2NrcyhlLHQsaSksdCs9aSxyLT1pKSxyKXtmb3Iobj0wO248cjtuKyspdGhpcy5idWZmZXJbdGhpcy5sZWZ0b3ZlcituXT1lW3Qrbl07dGhpcy5sZWZ0b3Zlcis9cn19O3ZhciBXPVQsRz1JO3ZhciBaPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV07ZnVuY3Rpb24gSihlLHQscixuKXtmb3IodmFyIGksbyxhLHMsZix1LGMsaCxkLGwscCxiLHksZyx2LG0sdyxfLEUsUyxBLHgsayxNLFQsSSxSPW5ldyBJbnQzMkFycmF5KDE2KSxQPW5ldyBJbnQzMkFycmF5KDE2KSxMPWVbMF0sQj1lWzFdLEM9ZVsyXSxPPWVbM10sTj1lWzRdLGo9ZVs1XSxEPWVbNl0sVT1lWzddLHo9dFswXSxxPXRbMV0sRj10WzJdLEs9dFszXSxIPXRbNF0sVj10WzVdLFk9dFs2XSxXPXRbN10sRz0wO24+PTEyODspe2ZvcihFPTA7RTwxNjtFKyspUz04KkUrRyxSW0VdPXJbUyswXTw8MjR8cltTKzFdPDwxNnxyW1MrMl08PDh8cltTKzNdLFBbRV09cltTKzRdPDwyNHxyW1MrNV08PDE2fHJbUys2XTw8OHxyW1MrN107Zm9yKEU9MDtFPDgwO0UrKylpZihpPUwsbz1CLGE9QyxzPU8sZj1OLHU9aixjPUQsVSxkPXosbD1xLHA9RixiPUsseT1ILGc9Vix2PVksVyxrPTY1NTM1Jih4PVcpLE09eD4+PjE2LFQ9NjU1MzUmKEE9VSksST1BPj4+MTYsays9NjU1MzUmKHg9KEg+Pj4xNHxOPDwxOCleKEg+Pj4xOHxOPDwxNCleKE4+Pj45fEg8PDIzKSksTSs9eD4+PjE2LFQrPTY1NTM1JihBPShOPj4+MTR8SDw8MTgpXihOPj4+MTh8SDw8MTQpXihIPj4+OXxOPDwyMykpLEkrPUE+Pj4xNixrKz02NTUzNSYoeD1IJlZefkgmWSksTSs9eD4+PjE2LFQrPTY1NTM1JihBPU4mal5+TiZEKSxJKz1BPj4+MTYsays9NjU1MzUmKHg9WlsyKkUrMV0pLE0rPXg+Pj4xNixUKz02NTUzNSYoQT1aWzIqRV0pLEkrPUE+Pj4xNixBPVJbRSUxNl0sTSs9KHg9UFtFJTE2XSk+Pj4xNixUKz02NTUzNSZBLEkrPUE+Pj4xNixUKz0oTSs9KGsrPTY1NTM1JngpPj4+MTYpPj4+MTYsaz02NTUzNSYoeD1fPTY1NTM1Jmt8TTw8MTYpLE09eD4+PjE2LFQ9NjU1MzUmKEE9dz02NTUzNSZUfChJKz1UPj4+MTYpPDwxNiksST1BPj4+MTYsays9NjU1MzUmKHg9KHo+Pj4yOHxMPDw0KV4oTD4+PjJ8ejw8MzApXihMPj4+N3x6PDwyNSkpLE0rPXg+Pj4xNixUKz02NTUzNSYoQT0oTD4+PjI4fHo8PDQpXih6Pj4+MnxMPDwzMCleKHo+Pj43fEw8PDI1KSksSSs9QT4+PjE2LE0rPSh4PXomcV56JkZecSZGKT4+PjE2LFQrPTY1NTM1JihBPUwmQl5MJkNeQiZDKSxJKz1BPj4+MTYsaD02NTUzNSYoVCs9KE0rPShrKz02NTUzNSZ4KT4+PjE2KT4+PjE2KXwoSSs9VD4+PjE2KTw8MTYsbT02NTUzNSZrfE08PDE2LGs9NjU1MzUmKHg9YiksTT14Pj4+MTYsVD02NTUzNSYoQT1zKSxJPUE+Pj4xNixNKz0oeD1fKT4+PjE2LFQrPTY1NTM1JihBPXcpLEkrPUE+Pj4xNixCPWksQz1vLE89YSxOPXM9NjU1MzUmKFQrPShNKz0oays9NjU1MzUmeCk+Pj4xNik+Pj4xNil8KEkrPVQ+Pj4xNik8PDE2LGo9ZixEPXUsVT1jLEw9aCxxPWQsRj1sLEs9cCxIPWI9NjU1MzUma3xNPDwxNixWPXksWT1nLFc9dix6PW0sRSUxNj09MTUpZm9yKFM9MDtTPDE2O1MrKylBPVJbU10saz02NTUzNSYoeD1QW1NdKSxNPXg+Pj4xNixUPTY1NTM1JkEsST1BPj4+MTYsQT1SWyhTKzkpJTE2XSxrKz02NTUzNSYoeD1QWyhTKzkpJTE2XSksTSs9eD4+PjE2LFQrPTY1NTM1JkEsSSs9QT4+PjE2LHc9UlsoUysxKSUxNl0says9NjU1MzUmKHg9KChfPVBbKFMrMSklMTZdKT4+PjF8dzw8MzEpXihfPj4+OHx3PDwyNCleKF8+Pj43fHc8PDI1KSksTSs9eD4+PjE2LFQrPTY1NTM1JihBPSh3Pj4+MXxfPDwzMSleKHc+Pj44fF88PDI0KV53Pj4+NyksSSs9QT4+PjE2LHc9UlsoUysxNCklMTZdLE0rPSh4PSgoXz1QWyhTKzE0KSUxNl0pPj4+MTl8dzw8MTMpXih3Pj4+Mjl8Xzw8MyleKF8+Pj42fHc8PDI2KSk+Pj4xNixUKz02NTUzNSYoQT0odz4+PjE5fF88PDEzKV4oXz4+PjI5fHc8PDMpXnc+Pj42KSxJKz1BPj4+MTYsSSs9KFQrPShNKz0oays9NjU1MzUmeCk+Pj4xNik+Pj4xNik+Pj4xNixSW1NdPTY1NTM1JlR8STw8MTYsUFtTXT02NTUzNSZrfE08PDE2O2s9NjU1MzUmKHg9eiksTT14Pj4+MTYsVD02NTUzNSYoQT1MKSxJPUE+Pj4xNixBPWVbMF0sTSs9KHg9dFswXSk+Pj4xNixUKz02NTUzNSZBLEkrPUE+Pj4xNixJKz0oVCs9KE0rPShrKz02NTUzNSZ4KT4+PjE2KT4+PjE2KT4+PjE2LGVbMF09TD02NTUzNSZUfEk8PDE2LHRbMF09ej02NTUzNSZrfE08PDE2LGs9NjU1MzUmKHg9cSksTT14Pj4+MTYsVD02NTUzNSYoQT1CKSxJPUE+Pj4xNixBPWVbMV0sTSs9KHg9dFsxXSk+Pj4xNixUKz02NTUzNSZBLEkrPUE+Pj4xNixJKz0oVCs9KE0rPShrKz02NTUzNSZ4KT4+PjE2KT4+PjE2KT4+PjE2LGVbMV09Qj02NTUzNSZUfEk8PDE2LHRbMV09cT02NTUzNSZrfE08PDE2LGs9NjU1MzUmKHg9RiksTT14Pj4+MTYsVD02NTUzNSYoQT1DKSxJPUE+Pj4xNixBPWVbMl0sTSs9KHg9dFsyXSk+Pj4xNixUKz02NTUzNSZBLEkrPUE+Pj4xNixJKz0oVCs9KE0rPShrKz02NTUzNSZ4KT4+PjE2KT4+PjE2KT4+PjE2LGVbMl09Qz02NTUzNSZUfEk8PDE2LHRbMl09Rj02NTUzNSZrfE08PDE2LGs9NjU1MzUmKHg9SyksTT14Pj4+MTYsVD02NTUzNSYoQT1PKSxJPUE+Pj4xNixBPWVbM10sTSs9KHg9dFszXSk+Pj4xNixUKz02NTUzNSZBLEkrPUE+Pj4xNixJKz0oVCs9KE0rPShrKz02NTUzNSZ4KT4+PjE2KT4+PjE2KT4+PjE2LGVbM109Tz02NTUzNSZUfEk8PDE2LHRbM109Sz02NTUzNSZrfE08PDE2LGs9NjU1MzUmKHg9SCksTT14Pj4+MTYsVD02NTUzNSYoQT1OKSxJPUE+Pj4xNixBPWVbNF0sTSs9KHg9dFs0XSk+Pj4xNixUKz02NTUzNSZBLEkrPUE+Pj4xNixJKz0oVCs9KE0rPShrKz02NTUzNSZ4KT4+PjE2KT4+PjE2KT4+PjE2LGVbNF09Tj02NTUzNSZUfEk8PDE2LHRbNF09SD02NTUzNSZrfE08PDE2LGs9NjU1MzUmKHg9ViksTT14Pj4+MTYsVD02NTUzNSYoQT1qKSxJPUE+Pj4xNixBPWVbNV0sTSs9KHg9dFs1XSk+Pj4xNixUKz02NTUzNSZBLEkrPUE+Pj4xNixJKz0oVCs9KE0rPShrKz02NTUzNSZ4KT4+PjE2KT4+PjE2KT4+PjE2LGVbNV09aj02NTUzNSZUfEk8PDE2LHRbNV09Vj02NTUzNSZrfE08PDE2LGs9NjU1MzUmKHg9WSksTT14Pj4+MTYsVD02NTUzNSYoQT1EKSxJPUE+Pj4xNixBPWVbNl0sTSs9KHg9dFs2XSk+Pj4xNixUKz02NTUzNSZBLEkrPUE+Pj4xNixJKz0oVCs9KE0rPShrKz02NTUzNSZ4KT4+PjE2KT4+PjE2KT4+PjE2LGVbNl09RD02NTUzNSZUfEk8PDE2LHRbNl09WT02NTUzNSZrfE08PDE2LGs9NjU1MzUmKHg9VyksTT14Pj4+MTYsVD02NTUzNSYoQT1VKSxJPUE+Pj4xNixBPWVbN10sTSs9KHg9dFs3XSk+Pj4xNixUKz02NTUzNSZBLEkrPUE+Pj4xNixJKz0oVCs9KE0rPShrKz02NTUzNSZ4KT4+PjE2KT4+PjE2KT4+PjE2LGVbN109VT02NTUzNSZUfEk8PDE2LHRbN109Vz02NTUzNSZrfE08PDE2LEcrPTEyOCxuLT0xMjh9cmV0dXJuIG59ZnVuY3Rpb24gJChlLHQscil7dmFyIG4saT1uZXcgSW50MzJBcnJheSg4KSxvPW5ldyBJbnQzMkFycmF5KDgpLGE9bmV3IFVpbnQ4QXJyYXkoMjU2KSxzPXI7Zm9yKGlbMF09MTc3OTAzMzcwMyxpWzFdPTMxNDQxMzQyNzcsaVsyXT0xMDEzOTA0MjQyLGlbM109Mjc3MzQ4MDc2MixpWzRdPTEzNTk4OTMxMTksaVs1XT0yNjAwODIyOTI0LGlbNl09NTI4NzM0NjM1LGlbN109MTU0MTQ1OTIyNSxvWzBdPTQwODkyMzU3MjAsb1sxXT0yMjI3ODczNTk1LG9bMl09NDI3MTE3NTcyMyxvWzNdPTE1OTU3NTAxMjksb1s0XT0yOTE3NTY1MTM3LG9bNV09NzI1NTExMTk5LG9bNl09NDIxNTM4OTU0NyxvWzddPTMyNzAzMzIwOSxKKGksbyx0LHIpLHIlPTEyOCxuPTA7bjxyO24rKylhW25dPXRbcy1yK25dO2ZvcihhW3JdPTEyOCxhWyhyPTI1Ni0xMjgqKHI8MTEyPzE6MCkpLTldPTAscChhLHItOCxzLzUzNjg3MDkxMnwwLHM8PDMpLEooaSxvLGEsciksbj0wO248ODtuKyspcChlLDgqbixpW25dLG9bbl0pO3JldHVybiAwfWZ1bmN0aW9uIFgoZSxyKXt2YXIgbj10KCksaT10KCksbz10KCksYT10KCkscz10KCksZj10KCksdT10KCksaD10KCksZD10KCk7RChuLGVbMV0sZVswXSksRChkLHJbMV0sclswXSksVShuLG4sZCksaihpLGVbMF0sZVsxXSksaihkLHJbMF0sclsxXSksVShpLGksZCksVShvLGVbM10sclszXSksVShvLG8sYyksVShhLGVbMl0sclsyXSksaihhLGEsYSksRChzLGksbiksRChmLGEsbyksaih1LGEsbyksaihoLGksbiksVShlWzBdLHMsZiksVShlWzFdLGgsdSksVShlWzJdLHUsZiksVShlWzNdLHMsaCl9ZnVuY3Rpb24gUShlLHQscil7dmFyIG47Zm9yKG49MDtuPDQ7bisrKUwoZVtuXSx0W25dLHIpfWZ1bmN0aW9uIGVlKGUscil7dmFyIG49dCgpLGk9dCgpLG89dCgpO3EobyxyWzJdKSxVKG4sclswXSxvKSxVKGksclsxXSxvKSxCKGUsaSksZVszMV1ePU8obik8PDd9ZnVuY3Rpb24gdGUoZSx0LHIpe3ZhciBuLGk7Zm9yKFIoZVswXSxhKSxSKGVbMV0scyksUihlWzJdLHMpLFIoZVszXSxhKSxpPTI1NTtpPj0wOy0taSlRKGUsdCxuPXJbaS84fDBdPj4oNyZpKSYxKSxYKHQsZSksWChlLGUpLFEoZSx0LG4pfWZ1bmN0aW9uIHJlKGUscil7dmFyIG49W3QoKSx0KCksdCgpLHQoKV07UihuWzBdLGgpLFIoblsxXSxkKSxSKG5bMl0scyksVShuWzNdLGgsZCksdGUoZSxuLHIpfWZ1bmN0aW9uIG5lKGUscixpKXt2YXIgbyxhPW5ldyBVaW50OEFycmF5KDY0KSxzPVt0KCksdCgpLHQoKSx0KCldO2ZvcihpfHxuKHIsMzIpLCQoYSxyLDMyKSxhWzBdJj0yNDgsYVszMV0mPTEyNyxhWzMxXXw9NjQscmUocyxhKSxlZShlLHMpLG89MDtvPDMyO28rKylyW28rMzJdPWVbb107cmV0dXJuIDB9dmFyIGllPW5ldyBGbG9hdDY0QXJyYXkoWzIzNywyMTEsMjQ1LDkyLDI2LDk5LDE4LDg4LDIxNCwxNTYsMjQ3LDE2MiwyMjIsMjQ5LDIyMiwyMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNl0pO2Z1bmN0aW9uIG9lKGUsdCl7dmFyIHIsbixpLG87Zm9yKG49NjM7bj49MzI7LS1uKXtmb3Iocj0wLGk9bi0zMixvPW4tMTI7aTxvOysraSl0W2ldKz1yLTE2KnRbbl0qaWVbaS0obi0zMildLHI9TWF0aC5mbG9vcigodFtpXSsxMjgpLzI1NiksdFtpXS09MjU2KnI7dFtpXSs9cix0W25dPTB9Zm9yKHI9MCxpPTA7aTwzMjtpKyspdFtpXSs9ci0odFszMV0+PjQpKmllW2ldLHI9dFtpXT4+OCx0W2ldJj0yNTU7Zm9yKGk9MDtpPDMyO2krKyl0W2ldLT1yKmllW2ldO2ZvcihuPTA7bjwzMjtuKyspdFtuKzFdKz10W25dPj44LGVbbl09MjU1JnRbbl19ZnVuY3Rpb24gYWUoZSl7dmFyIHQscj1uZXcgRmxvYXQ2NEFycmF5KDY0KTtmb3IodD0wO3Q8NjQ7dCsrKXJbdF09ZVt0XTtmb3IodD0wO3Q8NjQ7dCsrKWVbdF09MDtvZShlLHIpfWZ1bmN0aW9uIHNlKGUscixuLGkpe3ZhciBvLGEscz1uZXcgVWludDhBcnJheSg2NCksZj1uZXcgVWludDhBcnJheSg2NCksdT1uZXcgVWludDhBcnJheSg2NCksYz1uZXcgRmxvYXQ2NEFycmF5KDY0KSxoPVt0KCksdCgpLHQoKSx0KCldOyQocyxpLDMyKSxzWzBdJj0yNDgsc1szMV0mPTEyNyxzWzMxXXw9NjQ7dmFyIGQ9bis2NDtmb3Iobz0wO288bjtvKyspZVs2NCtvXT1yW29dO2ZvcihvPTA7bzwzMjtvKyspZVszMitvXT1zWzMyK29dO2ZvcigkKHUsZS5zdWJhcnJheSgzMiksbiszMiksYWUodSkscmUoaCx1KSxlZShlLGgpLG89MzI7bzw2NDtvKyspZVtvXT1pW29dO2ZvcigkKGYsZSxuKzY0KSxhZShmKSxvPTA7bzw2NDtvKyspY1tvXT0wO2ZvcihvPTA7bzwzMjtvKyspY1tvXT11W29dO2ZvcihvPTA7bzwzMjtvKyspZm9yKGE9MDthPDMyO2ErKyljW28rYV0rPWZbb10qc1thXTtyZXR1cm4gb2UoZS5zdWJhcnJheSgzMiksYyksZH1mdW5jdGlvbiBmZShlLHIsbixpKXt2YXIgbyxmPW5ldyBVaW50OEFycmF5KDMyKSxjPW5ldyBVaW50OEFycmF5KDY0KSxoPVt0KCksdCgpLHQoKSx0KCldLGQ9W3QoKSx0KCksdCgpLHQoKV07aWYobjw2NClyZXR1cm4tMTtpZihmdW5jdGlvbihlLHIpe3ZhciBuPXQoKSxpPXQoKSxvPXQoKSxmPXQoKSxjPXQoKSxoPXQoKSxkPXQoKTtyZXR1cm4gUihlWzJdLHMpLE4oZVsxXSxyKSx6KG8sZVsxXSksVShmLG8sdSksRChvLG8sZVsyXSksaihmLGVbMl0sZikseihjLGYpLHooaCxjKSxVKGQsaCxjKSxVKG4sZCxvKSxVKG4sbixmKSxGKG4sbiksVShuLG4sbyksVShuLG4sZiksVShuLG4sZiksVShlWzBdLG4sZikseihpLGVbMF0pLFUoaSxpLGYpLEMoaSxvKSYmVShlWzBdLGVbMF0sbCkseihpLGVbMF0pLFUoaSxpLGYpLEMoaSxvKT8tMTooTyhlWzBdKT09PXJbMzFdPj43JiZEKGVbMF0sYSxlWzBdKSxVKGVbM10sZVswXSxlWzFdKSwwKX0oZCxpKSlyZXR1cm4tMTtmb3Iobz0wO288bjtvKyspZVtvXT1yW29dO2ZvcihvPTA7bzwzMjtvKyspZVtvKzMyXT1pW29dO2lmKCQoYyxlLG4pLGFlKGMpLHRlKGgsZCxjKSxyZShkLHIuc3ViYXJyYXkoMzIpKSxYKGgsZCksZWUoZixoKSxuLT02NCxnKHIsMCxmLDApKXtmb3Iobz0wO288bjtvKyspZVtvXT0wO3JldHVybi0xfWZvcihvPTA7bzxuO28rKyllW29dPXJbbys2NF07cmV0dXJuIG59ZnVuY3Rpb24gdWUoZSx0KXtpZigzMiE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImJhZCBrZXkgc2l6ZVwiKTtpZigyNCE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImJhZCBub25jZSBzaXplXCIpfWZ1bmN0aW9uIGNlKCl7Zm9yKHZhciBlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKylpZighKGFyZ3VtZW50c1tlXWluc3RhbmNlb2YgVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcInVuZXhwZWN0ZWQgdHlwZSwgdXNlIFVpbnQ4QXJyYXlcIil9ZnVuY3Rpb24gaGUoZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XT0wfWUubG93bGV2ZWw9e2NyeXB0b19jb3JlX2hzYWxzYTIwOm0sY3J5cHRvX3N0cmVhbV94b3I6QSxjcnlwdG9fc3RyZWFtOlMsY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcjpfLGNyeXB0b19zdHJlYW1fc2Fsc2EyMDpFLGNyeXB0b19vbmV0aW1lYXV0aDprLGNyeXB0b19vbmV0aW1lYXV0aF92ZXJpZnk6TSxjcnlwdG9fdmVyaWZ5XzE2OnksY3J5cHRvX3ZlcmlmeV8zMjpnLGNyeXB0b19zZWNyZXRib3g6VCxjcnlwdG9fc2VjcmV0Ym94X29wZW46SSxjcnlwdG9fc2NhbGFybXVsdDpLLGNyeXB0b19zY2FsYXJtdWx0X2Jhc2U6SCxjcnlwdG9fYm94X2JlZm9yZW5tOlksY3J5cHRvX2JveF9hZnRlcm5tOlcsY3J5cHRvX2JveDpmdW5jdGlvbihlLHQscixuLGksbyl7dmFyIGE9bmV3IFVpbnQ4QXJyYXkoMzIpO3JldHVybiBZKGEsaSxvKSxXKGUsdCxyLG4sYSl9LGNyeXB0b19ib3hfb3BlbjpmdW5jdGlvbihlLHQscixuLGksbyl7dmFyIGE9bmV3IFVpbnQ4QXJyYXkoMzIpO3JldHVybiBZKGEsaSxvKSxHKGUsdCxyLG4sYSl9LGNyeXB0b19ib3hfa2V5cGFpcjpWLGNyeXB0b19oYXNoOiQsY3J5cHRvX3NpZ246c2UsY3J5cHRvX3NpZ25fa2V5cGFpcjpuZSxjcnlwdG9fc2lnbl9vcGVuOmZlLGNyeXB0b19zZWNyZXRib3hfS0VZQllURVM6MzIsY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTOjI0LGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTOjMyLGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTOjE2LGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTOjMyLGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTOjMyLGNyeXB0b19ib3hfUFVCTElDS0VZQllURVM6MzIsY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUzozMixjcnlwdG9fYm94X0JFRk9SRU5NQllURVM6MzIsY3J5cHRvX2JveF9OT05DRUJZVEVTOjI0LGNyeXB0b19ib3hfWkVST0JZVEVTOjMyLGNyeXB0b19ib3hfQk9YWkVST0JZVEVTOjE2LGNyeXB0b19zaWduX0JZVEVTOjY0LGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTOjMyLGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTOjY0LGNyeXB0b19zaWduX1NFRURCWVRFUzozMixjcnlwdG9faGFzaF9CWVRFUzo2NCxnZjp0LEQ6dSxMOmllLHBhY2syNTUxOTpCLHVucGFjazI1NTE5Ok4sTTpVLEE6aixTOnosWjpELHBvdzI1MjM6RixhZGQ6WCxzZXQyNTUxOTpSLG1vZEw6b2Usc2NhbGFybXVsdDp0ZSxzY2FsYXJiYXNlOnJlfSxlLnJhbmRvbUJ5dGVzPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBVaW50OEFycmF5KGUpO3JldHVybiBuKHQsZSksdH0sZS5zZWNyZXRib3g9ZnVuY3Rpb24oZSx0LHIpe2NlKGUsdCxyKSx1ZShyLHQpO2Zvcih2YXIgbj1uZXcgVWludDhBcnJheSgzMitlLmxlbmd0aCksaT1uZXcgVWludDhBcnJheShuLmxlbmd0aCksbz0wO288ZS5sZW5ndGg7bysrKW5bbyszMl09ZVtvXTtyZXR1cm4gVChpLG4sbi5sZW5ndGgsdCxyKSxpLnN1YmFycmF5KDE2KX0sZS5zZWNyZXRib3gub3Blbj1mdW5jdGlvbihlLHQscil7Y2UoZSx0LHIpLHVlKHIsdCk7Zm9yKHZhciBuPW5ldyBVaW50OEFycmF5KDE2K2UubGVuZ3RoKSxpPW5ldyBVaW50OEFycmF5KG4ubGVuZ3RoKSxvPTA7bzxlLmxlbmd0aDtvKyspbltvKzE2XT1lW29dO3JldHVybiBuLmxlbmd0aDwzMnx8MCE9PUkoaSxuLG4ubGVuZ3RoLHQscik/bnVsbDppLnN1YmFycmF5KDMyKX0sZS5zZWNyZXRib3gua2V5TGVuZ3RoPTMyLGUuc2VjcmV0Ym94Lm5vbmNlTGVuZ3RoPTI0LGUuc2VjcmV0Ym94Lm92ZXJoZWFkTGVuZ3RoPTE2LGUuc2NhbGFyTXVsdD1mdW5jdGlvbihlLHQpe2lmKGNlKGUsdCksMzIhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgbiBzaXplXCIpO2lmKDMyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHAgc2l6ZVwiKTt2YXIgcj1uZXcgVWludDhBcnJheSgzMik7cmV0dXJuIEsocixlLHQpLHJ9LGUuc2NhbGFyTXVsdC5iYXNlPWZ1bmN0aW9uKGUpe2lmKGNlKGUpLDMyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiYmFkIG4gc2l6ZVwiKTt2YXIgdD1uZXcgVWludDhBcnJheSgzMik7cmV0dXJuIEgodCxlKSx0fSxlLnNjYWxhck11bHQuc2NhbGFyTGVuZ3RoPTMyLGUuc2NhbGFyTXVsdC5ncm91cEVsZW1lbnRMZW5ndGg9MzIsZS5ib3g9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89ZS5ib3guYmVmb3JlKG4saSk7cmV0dXJuIGUuc2VjcmV0Ym94KHQscixvKX0sZS5ib3guYmVmb3JlPWZ1bmN0aW9uKGUsdCl7Y2UoZSx0KSxmdW5jdGlvbihlLHQpe2lmKDMyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHB1YmxpYyBrZXkgc2l6ZVwiKTtpZigzMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcImJhZCBzZWNyZXQga2V5IHNpemVcIil9KGUsdCk7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoMzIpO3JldHVybiBZKHIsZSx0KSxyfSxlLmJveC5hZnRlcj1lLnNlY3JldGJveCxlLmJveC5vcGVuPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBvPWUuYm94LmJlZm9yZShuLGkpO3JldHVybiBlLnNlY3JldGJveC5vcGVuKHQscixvKX0sZS5ib3gub3Blbi5hZnRlcj1lLnNlY3JldGJveC5vcGVuLGUuYm94LmtleVBhaXI9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSgzMiksdD1uZXcgVWludDhBcnJheSgzMik7cmV0dXJuIFYoZSx0KSx7cHVibGljS2V5OmUsc2VjcmV0S2V5OnR9fSxlLmJveC5rZXlQYWlyLmZyb21TZWNyZXRLZXk9ZnVuY3Rpb24oZSl7aWYoY2UoZSksMzIhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgc2VjcmV0IGtleSBzaXplXCIpO3ZhciB0PW5ldyBVaW50OEFycmF5KDMyKTtyZXR1cm4gSCh0LGUpLHtwdWJsaWNLZXk6dCxzZWNyZXRLZXk6bmV3IFVpbnQ4QXJyYXkoZSl9fSxlLmJveC5wdWJsaWNLZXlMZW5ndGg9MzIsZS5ib3guc2VjcmV0S2V5TGVuZ3RoPTMyLGUuYm94LnNoYXJlZEtleUxlbmd0aD0zMixlLmJveC5ub25jZUxlbmd0aD0yNCxlLmJveC5vdmVyaGVhZExlbmd0aD1lLnNlY3JldGJveC5vdmVyaGVhZExlbmd0aCxlLnNpZ249ZnVuY3Rpb24oZSx0KXtpZihjZShlLHQpLDY0IT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHNlY3JldCBrZXkgc2l6ZVwiKTt2YXIgcj1uZXcgVWludDhBcnJheSg2NCtlLmxlbmd0aCk7cmV0dXJuIHNlKHIsZSxlLmxlbmd0aCx0KSxyfSxlLnNpZ24ub3Blbj1mdW5jdGlvbihlLHQpe2lmKGNlKGUsdCksMzIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgcHVibGljIGtleSBzaXplXCIpO3ZhciByPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSxuPWZlKHIsZSxlLmxlbmd0aCx0KTtpZihuPDApcmV0dXJuIG51bGw7Zm9yKHZhciBpPW5ldyBVaW50OEFycmF5KG4pLG89MDtvPGkubGVuZ3RoO28rKylpW29dPXJbb107cmV0dXJuIGl9LGUuc2lnbi5kZXRhY2hlZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1lLnNpZ24odCxyKSxpPW5ldyBVaW50OEFycmF5KDY0KSxvPTA7bzxpLmxlbmd0aDtvKyspaVtvXT1uW29dO3JldHVybiBpfSxlLnNpZ24uZGV0YWNoZWQudmVyaWZ5PWZ1bmN0aW9uKGUsdCxyKXtpZihjZShlLHQsciksNjQhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgc2lnbmF0dXJlIHNpemVcIik7aWYoMzIhPT1yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgcHVibGljIGtleSBzaXplXCIpO3ZhciBuLGk9bmV3IFVpbnQ4QXJyYXkoNjQrZS5sZW5ndGgpLG89bmV3IFVpbnQ4QXJyYXkoNjQrZS5sZW5ndGgpO2ZvcihuPTA7bjw2NDtuKyspaVtuXT10W25dO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaVtuKzY0XT1lW25dO3JldHVybiBmZShvLGksaS5sZW5ndGgscik+PTB9LGUuc2lnbi5rZXlQYWlyPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoMzIpLHQ9bmV3IFVpbnQ4QXJyYXkoNjQpO3JldHVybiBuZShlLHQpLHtwdWJsaWNLZXk6ZSxzZWNyZXRLZXk6dH19LGUuc2lnbi5rZXlQYWlyLmZyb21TZWNyZXRLZXk9ZnVuY3Rpb24oZSl7aWYoY2UoZSksNjQhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgc2VjcmV0IGtleSBzaXplXCIpO2Zvcih2YXIgdD1uZXcgVWludDhBcnJheSgzMikscj0wO3I8dC5sZW5ndGg7cisrKXRbcl09ZVszMityXTtyZXR1cm57cHVibGljS2V5OnQsc2VjcmV0S2V5Om5ldyBVaW50OEFycmF5KGUpfX0sZS5zaWduLmtleVBhaXIuZnJvbVNlZWQ9ZnVuY3Rpb24oZSl7aWYoY2UoZSksMzIhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgc2VlZCBzaXplXCIpO2Zvcih2YXIgdD1uZXcgVWludDhBcnJheSgzMikscj1uZXcgVWludDhBcnJheSg2NCksbj0wO248MzI7bisrKXJbbl09ZVtuXTtyZXR1cm4gbmUodCxyLCEwKSx7cHVibGljS2V5OnQsc2VjcmV0S2V5OnJ9fSxlLnNpZ24ucHVibGljS2V5TGVuZ3RoPTMyLGUuc2lnbi5zZWNyZXRLZXlMZW5ndGg9NjQsZS5zaWduLnNlZWRMZW5ndGg9MzIsZS5zaWduLnNpZ25hdHVyZUxlbmd0aD02NCxlLmhhc2g9ZnVuY3Rpb24oZSl7Y2UoZSk7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoNjQpO3JldHVybiAkKHQsZSxlLmxlbmd0aCksdH0sZS5oYXNoLmhhc2hMZW5ndGg9NjQsZS52ZXJpZnk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2UoZSx0KSwwIT09ZS5sZW5ndGgmJjAhPT10Lmxlbmd0aCYmKGUubGVuZ3RoPT09dC5sZW5ndGgmJjA9PT1iKGUsMCx0LDAsZS5sZW5ndGgpKX0sZS5zZXRQUk5HPWZ1bmN0aW9uKGUpe249ZX0sZnVuY3Rpb24oKXt2YXIgdD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmLmNyeXB0b3x8c2VsZi5tc0NyeXB0bzpudWxsO2lmKHQmJnQuZ2V0UmFuZG9tVmFsdWVzKXtlLnNldFBSTkcoKGZ1bmN0aW9uKGUscil7dmFyIG4saT1uZXcgVWludDhBcnJheShyKTtmb3Iobj0wO248cjtuKz02NTUzNil0LmdldFJhbmRvbVZhbHVlcyhpLnN1YmFycmF5KG4sbitNYXRoLm1pbihyLW4sNjU1MzYpKSk7Zm9yKG49MDtuPHI7bisrKWVbbl09aVtuXTtoZShpKX0pKX1lbHNlKHQ9cigyNDgpKSYmdC5yYW5kb21CeXRlcyYmZS5zZXRQUk5HKChmdW5jdGlvbihlLHIpe3ZhciBuLGk9dC5yYW5kb21CeXRlcyhyKTtmb3Iobj0wO248cjtuKyspZVtuXT1pW25dO2hlKGkpfSkpfSgpfShlLmV4cG9ydHM/ZS5leHBvcnRzOnNlbGYubmFjbD1zZWxmLm5hY2x8fHt9KX0sZnVuY3Rpb24oZSx0KXt9LGZ1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzP2UuZXhwb3J0cz1yKCk6KHQubmFjbHx8KHQubmFjbD17fSksdC5uYWNsLnV0aWw9cigpKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgZT17fTtmdW5jdGlvbiByKGUpe2lmKCEvXig/OltBLVphLXowLTkrXFwvXXsyfVtBLVphLXowLTkrXFwvXXsyfSkqKD86W0EtWmEtejAtOStcXC9dezJ9PT18W0EtWmEtejAtOStcXC9dezN9PSk/JC8udGVzdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBlbmNvZGluZ1wiKX1yZXR1cm4gZS5kZWNvZGVVVEY4PWZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJleHBlY3RlZCBzdHJpbmdcIik7dmFyIHQscj11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpLG49bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgpO2Zvcih0PTA7dDxyLmxlbmd0aDt0Kyspblt0XT1yLmNoYXJDb2RlQXQodCk7cmV0dXJuIG59LGUuZW5jb2RlVVRGOD1mdW5jdGlvbihlKXt2YXIgdCxyPVtdO2Zvcih0PTA7dDxlLmxlbmd0aDt0Kyspci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZVt0XSkpO3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHIuam9pbihcIlwiKSkpfSxcInVuZGVmaW5lZFwiPT10eXBlb2YgYXRvYj92b2lkIDAhPT10LmZyb20/KGUuZW5jb2RlQmFzZTY0PWZ1bmN0aW9uKGUpe3JldHVybiB0LmZyb20oZSkudG9TdHJpbmcoXCJiYXNlNjRcIil9LGUuZGVjb2RlQmFzZTY0PWZ1bmN0aW9uKGUpe3JldHVybiByKGUpLG5ldyBVaW50OEFycmF5KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuZnJvbShlLFwiYmFzZTY0XCIpLDApKX0pOihlLmVuY29kZUJhc2U2ND1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSkudG9TdHJpbmcoXCJiYXNlNjRcIil9LGUuZGVjb2RlQmFzZTY0PWZ1bmN0aW9uKGUpe3JldHVybiByKGUpLG5ldyBVaW50OEFycmF5KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG5ldyB0KGUsXCJiYXNlNjRcIiksMCkpfSk6KGUuZW5jb2RlQmFzZTY0PWZ1bmN0aW9uKGUpe3ZhciB0LHI9W10sbj1lLmxlbmd0aDtmb3IodD0wO3Q8bjt0Kyspci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZVt0XSkpO3JldHVybiBidG9hKHIuam9pbihcIlwiKSl9LGUuZGVjb2RlQmFzZTY0PWZ1bmN0aW9uKGUpe3IoZSk7dmFyIHQsbj1hdG9iKGUpLGk9bmV3IFVpbnQ4QXJyYXkobi5sZW5ndGgpO2Zvcih0PTA7dDxuLmxlbmd0aDt0KyspaVt0XT1uLmNoYXJDb2RlQXQodCk7cmV0dXJuIGl9KSxlfSkpfSkuY2FsbCh0aGlzLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24ocil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDApfTt2b2lkIDAhPT10JiZ0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0Lm5leHRUaWNrJiYobj10Lm5leHRUaWNrKSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9e2NhcGFjaXR5OmV8fDEsY3VycmVudDowLHF1ZXVlOltdLGZpcnN0SGVyZTohMSx0YWtlOmZ1bmN0aW9uKCl7aWYoITE9PT10LmZpcnN0SGVyZSl7dC5jdXJyZW50KyssdC5maXJzdEhlcmU9ITA7dmFyIGU9MX1lbHNlIGU9MDt2YXIgcj17bjoxfTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBhcmd1bWVudHNbMF0/ci50YXNrPWFyZ3VtZW50c1swXTpyLm49YXJndW1lbnRzWzBdLGFyZ3VtZW50cy5sZW5ndGg+PTImJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhcmd1bWVudHNbMV0/ci50YXNrPWFyZ3VtZW50c1sxXTpyLm49YXJndW1lbnRzWzFdKTt2YXIgbj1yLnRhc2s7aWYoci50YXNrPWZ1bmN0aW9uKCl7bih0LmxlYXZlKX0sdC5jdXJyZW50K3Iubi1lPnQuY2FwYWNpdHkpcmV0dXJuIDE9PT1lJiYodC5jdXJyZW50LS0sdC5maXJzdEhlcmU9ITEpLHQucXVldWUucHVzaChyKTt0LmN1cnJlbnQrPXIubi1lLHIudGFzayh0LmxlYXZlKSwxPT09ZSYmKHQuZmlyc3RIZXJlPSExKX0sbGVhdmU6ZnVuY3Rpb24oZSl7aWYoZT1lfHwxLHQuY3VycmVudC09ZSx0LnF1ZXVlLmxlbmd0aCl7dmFyIHI9dC5xdWV1ZVswXTtyLm4rdC5jdXJyZW50PnQuY2FwYWNpdHl8fCh0LnF1ZXVlLnNoaWZ0KCksdC5jdXJyZW50Kz1yLm4sbihyLnRhc2spKX1lbHNlIGlmKHQuY3VycmVudDwwKXRocm93IG5ldyBFcnJvcihcImxlYXZlIGNhbGxlZCB0b28gbWFueSB0aW1lcy5cIil9LGF2YWlsYWJsZTpmdW5jdGlvbihlKXtyZXR1cm4gZT1lfHwxLHQuY3VycmVudCtlPD10LmNhcGFjaXR5fX07cmV0dXJuIHR9fSgpfSkuY2FsbCh0aGlzLHIoMykpfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0Nik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtlLnNlbmRBc3luYyhuKHttZXRob2Q6XCJldGhfZXN0aW1hdGVHYXNcIixwYXJhbXM6W3RdfSksKGZ1bmN0aW9uKGUsdCl7aWYoZSlyZXR1cm5cIm5vIGNvbnRyYWN0IGNvZGUgYXQgZ2l2ZW4gYWRkcmVzc1wiPT09ZS5tZXNzYWdlP3IobnVsbCxcIjB4Y2YwOFwiKTpyKGUpO3IobnVsbCx0LnJlc3VsdCl9KSl9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQpe3ZhciBuPXIoMTQpLGk9cigyNTMpLG89bi5CTixhPW5ldyBvKFwiN2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY1ZDU3NmU3MzU3YTQ1MDFkZGZlOTJmNDY2ODFiMjBhMFwiLDE2KSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShyKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGUpLHI9cnx8e307dmFyIGk9W3tuYW1lOlwibm9uY2VcIixsZW5ndGg6MzIsYWxsb3dMZXNzOiEwLGRlZmF1bHQ6bmV3IHQoW10pfSx7bmFtZTpcImdhc1ByaWNlXCIsbGVuZ3RoOjMyLGFsbG93TGVzczohMCxkZWZhdWx0Om5ldyB0KFtdKX0se25hbWU6XCJnYXNMaW1pdFwiLGFsaWFzOlwiZ2FzXCIsbGVuZ3RoOjMyLGFsbG93TGVzczohMCxkZWZhdWx0Om5ldyB0KFtdKX0se25hbWU6XCJ0b1wiLGFsbG93WmVybzohMCxsZW5ndGg6MjAsZGVmYXVsdDpuZXcgdChbXSl9LHtuYW1lOlwidmFsdWVcIixsZW5ndGg6MzIsYWxsb3dMZXNzOiEwLGRlZmF1bHQ6bmV3IHQoW10pfSx7bmFtZTpcImRhdGFcIixhbGlhczpcImlucHV0XCIsYWxsb3daZXJvOiEwLGRlZmF1bHQ6bmV3IHQoW10pfSx7bmFtZTpcInZcIixhbGxvd1plcm86ITAsZGVmYXVsdDpuZXcgdChbMjhdKX0se25hbWU6XCJyXCIsbGVuZ3RoOjMyLGFsbG93WmVybzohMCxhbGxvd0xlc3M6ITAsZGVmYXVsdDpuZXcgdChbXSl9LHtuYW1lOlwic1wiLGxlbmd0aDozMixhbGxvd1plcm86ITAsYWxsb3dMZXNzOiEwLGRlZmF1bHQ6bmV3IHQoW10pfV07bi5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsaSxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImZyb21cIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OnRoaXMuZ2V0U2VuZGVyQWRkcmVzcy5iaW5kKHRoaXMpfSk7dmFyIG89bi5idWZmZXJUb0ludCh0aGlzLnYpLGE9TWF0aC5mbG9vcigoby0zNSkvMik7YTwwJiYoYT0wKSx0aGlzLl9jaGFpbklkPWF8fHIuY2hhaW5JZHx8MCx0aGlzLl9ob21lc3RlYWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLnRvQ3JlYXRpb25BZGRyZXNzPWZ1bmN0aW9uKCl7cmV0dXJuXCJcIj09PXRoaXMudG8udG9TdHJpbmcoXCJoZXhcIil9LGUucHJvdG90eXBlLmhhc2g9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9ITApO3ZhciB0PXZvaWQgMDtpZihlKXQ9dGhpcy5yYXc7ZWxzZSBpZih0aGlzLl9jaGFpbklkPjApe3ZhciByPXRoaXMucmF3LnNsaWNlKCk7dGhpcy52PXRoaXMuX2NoYWluSWQsdGhpcy5yPTAsdGhpcy5zPTAsdD10aGlzLnJhdyx0aGlzLnJhdz1yfWVsc2UgdD10aGlzLnJhdy5zbGljZSgwLDYpO3JldHVybiBuLnJscGhhc2godCl9LGUucHJvdG90eXBlLmdldENoYWluSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hhaW5JZH0sZS5wcm90b3R5cGUuZ2V0U2VuZGVyQWRkcmVzcz1mdW5jdGlvbigpe2lmKHRoaXMuX2Zyb20pcmV0dXJuIHRoaXMuX2Zyb207dmFyIGU9dGhpcy5nZXRTZW5kZXJQdWJsaWNLZXkoKTtyZXR1cm4gdGhpcy5fZnJvbT1uLnB1YmxpY1RvQWRkcmVzcyhlKSx0aGlzLl9mcm9tfSxlLnByb3RvdHlwZS5nZXRTZW5kZXJQdWJsaWNLZXk9ZnVuY3Rpb24oKXtpZighKHRoaXMuX3NlbmRlclB1YktleSYmdGhpcy5fc2VuZGVyUHViS2V5Lmxlbmd0aHx8dGhpcy52ZXJpZnlTaWduYXR1cmUoKSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBTaWduYXR1cmVcIik7cmV0dXJuIHRoaXMuX3NlbmRlclB1YktleX0sZS5wcm90b3R5cGUudmVyaWZ5U2lnbmF0dXJlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oYXNoKCExKTtpZih0aGlzLl9ob21lc3RlYWQmJjE9PT1uZXcgbyh0aGlzLnMpLmNtcChhKSlyZXR1cm4hMTt0cnl7dmFyIHQ9bi5idWZmZXJUb0ludCh0aGlzLnYpO3RoaXMuX2NoYWluSWQ+MCYmKHQtPTIqdGhpcy5fY2hhaW5JZCs4KSx0aGlzLl9zZW5kZXJQdWJLZXk9bi5lY3JlY292ZXIoZSx0LHRoaXMucix0aGlzLnMpfWNhdGNoKGUpe3JldHVybiExfXJldHVybiEhdGhpcy5fc2VuZGVyUHViS2V5fSxlLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGFzaCghMSkscj1uLmVjc2lnbih0LGUpO3RoaXMuX2NoYWluSWQ+MCYmKHIudis9Mip0aGlzLl9jaGFpbklkKzgpLE9iamVjdC5hc3NpZ24odGhpcyxyKX0sZS5wcm90b3R5cGUuZ2V0RGF0YUZlZT1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnJhd1s1XSx0PW5ldyBvKDApLHI9MDtyPGUubGVuZ3RoO3IrKykwPT09ZVtyXT90LmlhZGRuKGkudHhEYXRhWmVyb0dhcy52KTp0LmlhZGRuKGkudHhEYXRhTm9uWmVyb0dhcy52KTtyZXR1cm4gdH0sZS5wcm90b3R5cGUuZ2V0QmFzZUZlZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0RGF0YUZlZSgpLmlhZGRuKGkudHhHYXMudik7cmV0dXJuIHRoaXMuX2hvbWVzdGVhZCYmdGhpcy50b0NyZWF0aW9uQWRkcmVzcygpJiZlLmlhZGRuKGkudHhDcmVhdGlvbi52KSxlfSxlLnByb3RvdHlwZS5nZXRVcGZyb250Q29zdD1mdW5jdGlvbigpe3JldHVybiBuZXcgbyh0aGlzLmdhc0xpbWl0KS5pbXVsKG5ldyBvKHRoaXMuZ2FzUHJpY2UpKS5pYWRkKG5ldyBvKHRoaXMudmFsdWUpKX0sZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmVyaWZ5U2lnbmF0dXJlKCl8fHQucHVzaChcIkludmFsaWQgU2lnbmF0dXJlXCIpLHRoaXMuZ2V0QmFzZUZlZSgpLmNtcChuZXcgbyh0aGlzLmdhc0xpbWl0KSk+MCYmdC5wdXNoKFtcImdhcyBsaW1pdCBpcyB0b28gbG93LiBOZWVkIGF0IGxlYXN0IFwiK3RoaXMuZ2V0QmFzZUZlZSgpXSksdm9pZCAwPT09ZXx8ITE9PT1lPzA9PT10Lmxlbmd0aDp0LmpvaW4oXCIgXCIpfSxlfSgpO2UuZXhwb3J0cz1zfSkuY2FsbCh0aGlzLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24oZSl7ZS5leHBvcnRzPXtnZW5lc2lzR2FzTGltaXQ6e3Y6NWUzLGQ6XCJHYXMgbGltaXQgb2YgdGhlIEdlbmVzaXMgYmxvY2suXCJ9LGdlbmVzaXNEaWZmaWN1bHR5Ont2OjE3MTc5ODY5MTg0LGQ6XCJEaWZmaWN1bHR5IG9mIHRoZSBHZW5lc2lzIGJsb2NrLlwifSxnZW5lc2lzTm9uY2U6e3Y6XCIweDAwMDAwMDAwMDAwMDAwNDJcIixkOlwidGhlIGdlbmVpcyBub25jZVwifSxnZW5lc2lzRXh0cmFEYXRhOnt2OlwiMHgxMWJiZThkYjRlMzQ3YjRlOGM5MzdjMWM4MzcwZTRiNWVkMzNhZGIzZGI2OWNiZGI3YTM4ZTFlNTBiMWI4MmZhXCIsZDpcImV4dHJhIGRhdGEgXCJ9LGdlbmVzaXNIYXNoOnt2OlwiMHhkNGU1Njc0MGY4NzZhZWY4YzAxMGI4NmE0MGQ1ZjU2NzQ1YTExOGQwOTA2YTM0ZTY5YWVjOGMwZGIxY2I4ZmEzXCIsZDpcImdlbmVzaXMgaGFzaFwifSxnZW5lc2lzU3RhdGVSb290Ont2OlwiMHhkN2Y4OTc0ZmI1YWM3OGQ5YWMwOTliOWFkNTAxOGJlZGMyY2UwYTcyZGFkMTgyN2ExNzA5ZGEzMDU4MGYwNTQ0XCIsZDpcInRoZSBnZW5lc2lzIHN0YXRlIHJvb3RcIn0sbWluR2FzTGltaXQ6e3Y6NWUzLGQ6XCJNaW5pbXVtIHRoZSBnYXMgbGltaXQgbWF5IGV2ZXIgYmUuXCJ9LGdhc0xpbWl0Qm91bmREaXZpc29yOnt2OjEwMjQsZDpcIlRoZSBib3VuZCBkaXZpc29yIG9mIHRoZSBnYXMgbGltaXQsIHVzZWQgaW4gdXBkYXRlIGNhbGN1bGF0aW9ucy5cIn0sbWluaW11bURpZmZpY3VsdHk6e3Y6MTMxMDcyLGQ6XCJUaGUgbWluaW11bSB0aGF0IHRoZSBkaWZmaWN1bHR5IG1heSBldmVyIGJlLlwifSxkaWZmaWN1bHR5Qm91bmREaXZpc29yOnt2OjIwNDgsZDpcIlRoZSBib3VuZCBkaXZpc29yIG9mIHRoZSBkaWZmaWN1bHR5LCB1c2VkIGluIHRoZSB1cGRhdGUgY2FsY3VsYXRpb25zLlwifSxkdXJhdGlvbkxpbWl0Ont2OjEzLGQ6XCJUaGUgZGVjaXNpb24gYm91bmRhcnkgb24gdGhlIGJsb2NrdGltZSBkdXJhdGlvbiB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGRpZmZpY3VsdHkgc2hvdWxkIGdvIHVwIG9yIG5vdC5cIn0sbWF4aW11bUV4dHJhRGF0YVNpemU6e3Y6MzIsZDpcIk1heGltdW0gc2l6ZSBleHRyYSBkYXRhIG1heSBiZSBhZnRlciBHZW5lc2lzLlwifSxlcG9jaER1cmF0aW9uOnt2OjNlNCxkOlwiRHVyYXRpb24gYmV0d2VlbiBwcm9vZi1vZi13b3JrIGVwb2Nocy5cIn0sc3RhY2tMaW1pdDp7djoxMDI0LGQ6XCJNYXhpbXVtIHNpemUgb2YgVk0gc3RhY2sgYWxsb3dlZC5cIn0sY2FsbENyZWF0ZURlcHRoOnt2OjEwMjQsZDpcIk1heGltdW0gZGVwdGggb2YgY2FsbC9jcmVhdGUgc3RhY2suXCJ9LHRpZXJTdGVwR2FzOnt2OlswLDIsMyw1LDgsMTAsMjBdLGQ6XCJPbmNlIHBlciBvcGVyYXRpb24sIGZvciBhIHNlbGVjdGlvbiBvZiB0aGVtLlwifSxleHBHYXM6e3Y6MTAsZDpcIk9uY2UgcGVyIEVYUCBpbnN0dWN0aW9uLlwifSxleHBCeXRlR2FzOnt2OjEwLGQ6XCJUaW1lcyBjZWlsKGxvZzI1NihleHBvbmVudCkpIGZvciB0aGUgRVhQIGluc3RydWN0aW9uLlwifSxzaGEzR2FzOnt2OjMwLGQ6XCJPbmNlIHBlciBTSEEzIG9wZXJhdGlvbi5cIn0sc2hhM1dvcmRHYXM6e3Y6NixkOlwiT25jZSBwZXIgd29yZCBvZiB0aGUgU0hBMyBvcGVyYXRpb24ncyBkYXRhLlwifSxzbG9hZEdhczp7djo1MCxkOlwiT25jZSBwZXIgU0xPQUQgb3BlcmF0aW9uLlwifSxzc3RvcmVTZXRHYXM6e3Y6MmU0LGQ6XCJPbmNlIHBlciBTU1RPUkUgb3BlcmF0aW9uIGlmIHRoZSB6ZXJvbmVzcyBjaGFuZ2VzIGZyb20gemVyby5cIn0sc3N0b3JlUmVzZXRHYXM6e3Y6NWUzLGQ6XCJPbmNlIHBlciBTU1RPUkUgb3BlcmF0aW9uIGlmIHRoZSB6ZXJvbmVzcyBkb2VzIG5vdCBjaGFuZ2UgZnJvbSB6ZXJvLlwifSxzc3RvcmVSZWZ1bmRHYXM6e3Y6MTVlMyxkOlwiT25jZSBwZXIgU1NUT1JFIG9wZXJhdGlvbiBpZiB0aGUgemVyb25lc3MgY2hhbmdlcyB0byB6ZXJvLlwifSxqdW1wZGVzdEdhczp7djoxLGQ6XCJSZWZ1bmRlZCBnYXMsIG9uY2UgcGVyIFNTVE9SRSBvcGVyYXRpb24gaWYgdGhlIHplcm9uZXNzIGNoYW5nZXMgdG8gemVyby5cIn0sbG9nR2FzOnt2OjM3NSxkOlwiUGVyIExPRyogb3BlcmF0aW9uLlwifSxsb2dEYXRhR2FzOnt2OjgsZDpcIlBlciBieXRlIGluIGEgTE9HKiBvcGVyYXRpb24ncyBkYXRhLlwifSxsb2dUb3BpY0dhczp7djozNzUsZDpcIk11bHRpcGxpZWQgYnkgdGhlICogb2YgdGhlIExPRyosIHBlciBMT0cgdHJhbnNhY3Rpb24uIGUuZy4gTE9HMCBpbmN1cnMgMCAqIGNfdHhMb2dUb3BpY0dhcywgTE9HNCBpbmN1cnMgNCAqIGNfdHhMb2dUb3BpY0dhcy5cIn0sY3JlYXRlR2FzOnt2OjMyZTMsZDpcIk9uY2UgcGVyIENSRUFURSBvcGVyYXRpb24gJiBjb250cmFjdC1jcmVhdGlvbiB0cmFuc2FjdGlvbi5cIn0sY2FsbEdhczp7djo0MCxkOlwiT25jZSBwZXIgQ0FMTCBvcGVyYXRpb24gJiBtZXNzYWdlIGNhbGwgdHJhbnNhY3Rpb24uXCJ9LGNhbGxTdGlwZW5kOnt2OjIzMDAsZDpcIkZyZWUgZ2FzIGdpdmVuIGF0IGJlZ2lubmluZyBvZiBjYWxsLlwifSxjYWxsVmFsdWVUcmFuc2Zlckdhczp7djo5ZTMsZDpcIlBhaWQgZm9yIENBTEwgd2hlbiB0aGUgdmFsdWUgdHJhbnNmb3IgaXMgbm9uLXplcm8uXCJ9LGNhbGxOZXdBY2NvdW50R2FzOnt2OjI1ZTMsZDpcIlBhaWQgZm9yIENBTEwgd2hlbiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBkaWRuJ3QgZXhpc3QgcHJpb3IuXCJ9LHN1aWNpZGVSZWZ1bmRHYXM6e3Y6MjRlMyxkOlwiUmVmdW5kZWQgZm9sbG93aW5nIGEgc3VpY2lkZSBvcGVyYXRpb24uXCJ9LG1lbW9yeUdhczp7djozLGQ6XCJUaW1lcyB0aGUgYWRkcmVzcyBvZiB0aGUgKGhpZ2hlc3QgcmVmZXJlbmNlZCBieXRlIGluIG1lbW9yeSArIDEpLiBOT1RFOiByZWZlcmVuY2luZyBoYXBwZW5zIG9uIHJlYWQsIHdyaXRlIGFuZCBpbiBpbnN0cnVjdGlvbnMgc3VjaCBhcyBSRVRVUk4gYW5kIENBTEwuXCJ9LHF1YWRDb2VmZkRpdjp7djo1MTIsZDpcIkRpdmlzb3IgZm9yIHRoZSBxdWFkcmF0aWMgcGFydGljbGUgb2YgdGhlIG1lbW9yeSBjb3N0IGVxdWF0aW9uLlwifSxjcmVhdGVEYXRhR2FzOnt2OjIwMCxkOlwiXCJ9LHR4R2FzOnt2OjIxZTMsZDpcIlBlciB0cmFuc2FjdGlvbi4gTk9URTogTm90IHBheWFibGUgb24gZGF0YSBvZiBjYWxscyBiZXR3ZWVuIHRyYW5zYWN0aW9ucy5cIn0sdHhDcmVhdGlvbjp7djozMmUzLGQ6XCJ0aGUgY29zdCBvZiBjcmVhdGluZyBhIGNvbnRyYWN0IHZpYSB0eFwifSx0eERhdGFaZXJvR2FzOnt2OjQsZDpcIlBlciBieXRlIG9mIGRhdGEgYXR0YWNoZWQgdG8gYSB0cmFuc2FjdGlvbiB0aGF0IGVxdWFscyB6ZXJvLiBOT1RFOiBOb3QgcGF5YWJsZSBvbiBkYXRhIG9mIGNhbGxzIGJldHdlZW4gdHJhbnNhY3Rpb25zLlwifSx0eERhdGFOb25aZXJvR2FzOnt2OjY4LGQ6XCJQZXIgYnl0ZSBvZiBkYXRhIGF0dGFjaGVkIHRvIGEgdHJhbnNhY3Rpb24gdGhhdCBpcyBub3QgZXF1YWwgdG8gemVyby4gTk9URTogTm90IHBheWFibGUgb24gZGF0YSBvZiBjYWxscyBiZXR3ZWVuIHRyYW5zYWN0aW9ucy5cIn0sY29weUdhczp7djozLGQ6XCJNdWx0aXBsaWVkIGJ5IHRoZSBudW1iZXIgb2YgMzItYnl0ZSB3b3JkcyB0aGF0IGFyZSBjb3BpZWQgKHJvdW5kIHVwKSBmb3IgYW55ICpDT1BZIG9wZXJhdGlvbiBhbmQgYWRkZWQuXCJ9LGVjcmVjb3Zlckdhczp7djozZTMsZDpcIlwifSxzaGEyNTZHYXM6e3Y6NjAsZDpcIlwifSxzaGEyNTZXb3JkR2FzOnt2OjEyLGQ6XCJcIn0scmlwZW1kMTYwR2FzOnt2OjYwMCxkOlwiXCJ9LHJpcGVtZDE2MFdvcmRHYXM6e3Y6MTIwLGQ6XCJcIn0saWRlbnRpdHlHYXM6e3Y6MTUsZDpcIlwifSxpZGVudGl0eVdvcmRHYXM6e3Y6MyxkOlwiXCJ9LG1pbmVyUmV3YXJkOnt2OlwiNTAwMDAwMDAwMDAwMDAwMDAwMFwiLGQ6XCJ0aGUgYW1vdW50IGEgbWluZXIgZ2V0IHJld2FyZGVkIGZvciBtaW5pbmcgYSBibG9ja1wifSxvbW1lclJld2FyZDp7djpcIjYyNTAwMDAwMDAwMDAwMDAwMFwiLGQ6XCJUaGUgYW1vdW50IG9mIHdlaSBhIG1pbmVyIG9mIGFuIHVuY2xlIGJsb2NrIGdldHMgZm9yIGJlaW5nIGluY3VsZGVkIGluIHRoZSBibG9ja2NoYWluXCJ9LG5pYmxpbmdSZXdhcmQ6e3Y6XCIxNTYyNTAwMDAwMDAwMDAwMDBcIixkOlwidGhlIGFtb3VudCBhIG1pbmVyIGdldHMgZm9yIGluY3VsZGluZyBhIHVuY2xlXCJ9LGhvbWVTdGVhZEZvcmtOdW1iZXI6e3Y6MTE1ZTQsZDpcInRoZSBibG9jayB0aGF0IHRoZSBIb21lc3RlYWQgZm9yayBzdGFydGVkIGF0XCJ9LGhvbWVzdGVhZFJlcHJpY2VGb3JrTnVtYmVyOnt2OjI0NjNlMyxkOlwidGhlIGJsb2NrIHRoYXQgdGhlIEhvbWVzdGVhZCBSZXByaWNlIChFSVAxNTApIGZvcmsgc3RhcnRlZCBhdFwifSx0aW1lYm9tYlBlcmlvZDp7djoxZTUsZDpcIkV4cG9uZW50aWFsIGRpZmZpY3VsdHkgdGltZWJvbWIgcGVyaW9kXCJ9LGZyZWVCbG9ja1BlcmlvZDp7djoyfX19LGZ1bmN0aW9uKGUsdCxyKXtjb25zdCBuPXIoNDEpLGk9cig5NSksbz1yKDQ4KSxhPXIoOTQpLHt1bnNhZmVSYW5kb21CeXRlczpzLGluY3JlbWVudEhleEludDpmfT1yKDIzKSx1PXIoNTApO2Z1bmN0aW9uIGMoZSl7cmV0dXJue2hhc2g6ZS5oYXNoLHBhcmVudEhhc2g6ZS5wYXJlbnRIYXNoLHNoYTNVbmNsZXM6ZS5zaGEzVW5jbGVzLG1pbmVyOmUubWluZXIsc3RhdGVSb290OmUuc3RhdGVSb290LHRyYW5zYWN0aW9uc1Jvb3Q6ZS50cmFuc2FjdGlvbnNSb290LHJlY2VpcHRzUm9vdDplLnJlY2VpcHRzUm9vdCxsb2dzQmxvb206ZS5sb2dzQmxvb20sZGlmZmljdWx0eTplLmRpZmZpY3VsdHksbnVtYmVyOmUubnVtYmVyLGdhc0xpbWl0OmUuZ2FzTGltaXQsZ2FzVXNlZDplLmdhc1VzZWQsbm9uY2U6ZS5ub25jZSxtaXhIYXNoOmUubWl4SGFzaCx0aW1lc3RhbXA6ZS50aW1lc3RhbXAsZXh0cmFEYXRhOmUuZXh0cmFEYXRhfX1lLmV4cG9ydHM9ZnVuY3Rpb24oe2Jsb2NrVHJhY2tlcjplLHByb3ZpZGVyOnR9KXtjb25zdCByPXt9LGg9YSh7YmxvY2tUcmFja2VyOmUscHJvdmlkZXI6dH0pO2xldCBkPSExO2NvbnN0IGw9bmV3IG4scD1pKHtldGhfc3Vic2NyaWJlOm8oKGFzeW5jIGZ1bmN0aW9uKG4saSl7aWYoZCl0aHJvdyBuZXcgRXJyb3IoXCJTdWJzY3JpcHRpb25NYW5hZ2VyIC0gYXR0ZW1wdGluZyB0byB1c2UgYWZ0ZXIgZGVzdHJveWluZ1wiKTtjb25zdCBvPW4ucGFyYW1zWzBdLGE9cygxNik7bGV0IGw7c3dpdGNoKG8pe2Nhc2VcIm5ld0hlYWRzXCI6bD1mdW5jdGlvbih7c3ViSWQ6cn0pe2NvbnN0IG49e3R5cGU6byxkZXN0cm95OmFzeW5jKCk9PntlLnJlbW92ZUxpc3RlbmVyKFwic3luY1wiLG4udXBkYXRlKX0sdXBkYXRlOmFzeW5jKHtvbGRCbG9jazplLG5ld0Jsb2NrOm59KT0+e2NvbnN0IGk9bixvPWYoZSk7KGF3YWl0IHUoe3Byb3ZpZGVyOnQsZnJvbUJsb2NrOm8sdG9CbG9jazppfSkpLm1hcChjKS5mb3JFYWNoKGU9PntiKHIsZSl9KX19O3JldHVybiBlLm9uKFwic3luY1wiLG4udXBkYXRlKSxufSh7c3ViSWQ6YX0pO2JyZWFrO2Nhc2VcImxvZ3NcIjpjb25zdCByPW4ucGFyYW1zWzFdLGk9YXdhaXQgaC5uZXdMb2dGaWx0ZXIocik7bD1mdW5jdGlvbih7c3ViSWQ6ZSxmaWx0ZXI6dH0pe3Qub24oXCJ1cGRhdGVcIix0PT5iKGUsdCkpO3JldHVybnt0eXBlOm8sZGVzdHJveTphc3luYygpPT5hd2FpdCBoLnVuaW5zdGFsbEZpbHRlcih0LmlkSGV4KX19KHtzdWJJZDphLGZpbHRlcjppfSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFN1YnNjcmlwdGlvbk1hbmFnZXIgLSB1bnN1cHBvcnRlZCBzdWJzY3JpcHRpb24gdHlwZSBcIiR7b31cImApfXJldHVybiByW2FdPWwsdm9pZChpLnJlc3VsdD1hKX0pKSxldGhfdW5zdWJzY3JpYmU6bygoYXN5bmMgZnVuY3Rpb24oZSx0KXtpZihkKXRocm93IG5ldyBFcnJvcihcIlN1YnNjcmlwdGlvbk1hbmFnZXIgLSBhdHRlbXB0aW5nIHRvIHVzZSBhZnRlciBkZXN0cm95aW5nXCIpO2NvbnN0IG49ZS5wYXJhbXNbMF0saT1yW25dO2lmKCFpKXJldHVybiB2b2lkKHQucmVzdWx0PSExKTtkZWxldGUgcltuXSxhd2FpdCBpLmRlc3Ryb3koKSx0LnJlc3VsdD0hMH0pKX0pO3JldHVybiBwLmRlc3Ryb3k9ZnVuY3Rpb24oKXtsLnJlbW92ZUFsbExpc3RlbmVycygpO2Zvcihjb25zdCBlIGluIHIpcltlXS5kZXN0cm95KCksZGVsZXRlIHJbZV07ZD0hMH0se2V2ZW50czpsLG1pZGRsZXdhcmU6cH07ZnVuY3Rpb24gYihlLHQpe2wuZW1pdChcIm5vdGlmaWNhdGlvblwiLHtqc29ucnBjOlwiMi4wXCIsbWV0aG9kOlwiZXRoX3N1YnNjcmlwdGlvblwiLHBhcmFtczp7c3Vic2NyaXB0aW9uOmUscmVzdWx0OnR9fSl9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e0Jsb2NrY2hhaW46Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLm5hbWU9ZSx0aGlzLm5ldElEPXR9dG9KU09OKCl7cmV0dXJuIEpTT04ucGFyc2UoJ3sgXCJuYW1lXCI6XCInK3RoaXMubmFtZSsnXCIsIFwibmV0SURcIjpcIicrdGhpcy5uZXRJRCsnXCJ9Jyl9fX19LGZ1bmN0aW9uKGUsdCxyKXtjb25zdCBuPXIoNTEpLGk9cigxMDMpLk5vZGUsbz1yKDUzKTtlLmV4cG9ydHM9e0Rpc3BhdGNoOmNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uZmlndXJhdGlvbj1lLHRoaXMuYXhpb3NJbnN0YW5jZT1uLmNyZWF0ZSh7YmFzZVVSTDpvLmRpc3BhdGNoTm9kZVVSTCxwYXRoOm8uZGlzcGF0Y2hQYXRoLHRpbWVvdXQ6dGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lT3V0LGhlYWRlcnM6e1wiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fSl9YmxvY2tjaGFpbnNKU09OKCl7dmFyIGU9W107cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5ibG9ja2NoYWlucy5mb3JFYWNoKHQ9PntlLnB1c2godCl9KSxlfWFzeW5jIHJldHJpZXZlU2VydmljZU5vZGVzKGUpe3RyeXt2YXIgdDtpZihudWxsIT0odD1hd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UucG9zdChvLmRpc3BhdGNoUGF0aCx7RGV2SUQ6dGhpcy5jb25maWd1cmF0aW9uLmRldklELEJsb2NrY2hhaW5zOnRoaXMuYmxvY2tjaGFpbnNKU09OKCl9KSkmJjIwMD09dC5zdGF0dXMmJm51bGwhPXQuZGF0YSl7dmFyIHI9dGhpcy5wYXJzZURpc3BhdGNoUmVzcG9uc2UodC5kYXRhKTtyZXR1cm4gZT92b2lkIGUocixudWxsKTpyfXJldHVybiBlP3ZvaWQgZShudWxsLG5ldyBFcnJvcihcIkZhaWxlZCB0byByZXRyaWV2ZSBzZXJ2aWNlIG5vZGVzIHdpdGggZXJyb3I6IFwiK3QuZGF0YSkpOm5ldyBFcnJvcihcIkZhaWxlZCB0byByZXRyaWV2ZSBzZXJ2aWNlIG5vZGVzIHdpdGggZXJyb3I6IFwiK3QuZGF0YSl9Y2F0Y2godCl7cmV0dXJuIGU/dm9pZCBlKG51bGwsbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJldHJpZXZlIHNlcnZpY2Ugbm9kZXMgd2l0aCBlcnJvcjogXCIrdCkpOm5ldyBFcnJvcihcIkZhaWxlZCB0byByZXRyaWV2ZSBzZXJ2aWNlIG5vZGVzIHdpdGggZXJyb3I6IFwiK3QpfX1wYXJzZURpc3BhdGNoUmVzcG9uc2UoZSl7dHJ5e3ZhciB0PVtdO2lmKEFycmF5LmlzQXJyYXkoZSkpZS5mb3JFYWNoKGU9Pnt2YXIgcj1lLm5hbWUsbj1lLm5ldGlkO2UuaXBzJiZlLmlwcy5mb3JFYWNoKGU9Pnt2YXIgbz1uZXcgaShyLG4sZSk7dC5wdXNoKG8pfSl9KTtlbHNle3ZhciByPWUubmFtZSxuPWUubmV0aWQ7ZS5pcHMmJmUuaXBzLmZvckVhY2goZT0+e3ZhciBvPW5ldyBpKHIsbixlKTt0LnB1c2gobyl9KX1yZXR1cm4gdH1jYXRjaChlKXtyZXR1cm4gbmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlZCBzZXJ2aWNlIG5vZGVzIHdpdGggZXJyb3I6IFwiK2UpfX19fX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNyksaT1yKDk4KSxvPXIoMjU5KSxhPXIoNTIpO2Z1bmN0aW9uIHMoZSl7dmFyIHQ9bmV3IG8oZSkscj1pKG8ucHJvdG90eXBlLnJlcXVlc3QsdCk7cmV0dXJuIG4uZXh0ZW5kKHIsby5wcm90b3R5cGUsdCksbi5leHRlbmQocix0KSxyfXZhciBmPXMoYSk7Zi5BeGlvcz1vLGYuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBzKG4ubWVyZ2UoYSxlKSl9LGYuQ2FuY2VsPXIoMTAyKSxmLkNhbmNlbFRva2VuPXIoMjcyKSxmLmlzQ2FuY2VsPXIoMTAxKSxmLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LGYuc3ByZWFkPXIoMjczKSxlLmV4cG9ydHM9ZixlLmV4cG9ydHMuZGVmYXVsdD1mfSxmdW5jdGlvbihlLHQpe1xuLyohXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZudWxsIT1lLmNvbnN0cnVjdG9yJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNTIpLGk9cig3KSxvPXIoMjY3KSxhPXIoMjY4KTtmdW5jdGlvbiBzKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgbyxyZXNwb25zZTpuZXcgb319cy5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9aS5tZXJnZSh7dXJsOmFyZ3VtZW50c1swXX0sYXJndW1lbnRzWzFdKSksKGU9aS5tZXJnZShuLHttZXRob2Q6XCJnZXRcIn0sdGhpcy5kZWZhdWx0cyxlKSkubWV0aG9kPWUubWV0aG9kLnRvTG93ZXJDYXNlKCk7dmFyIHQ9W2Esdm9pZCAwXSxyPVByb21pc2UucmVzb2x2ZShlKTtmb3IodGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnVuc2hpZnQoZS5mdWxmaWxsZWQsZS5yZWplY3RlZCl9KSksdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpO3QubGVuZ3RoOylyPXIudGhlbih0LnNoaWZ0KCksdC5zaGlmdCgpKTtyZXR1cm4gcn0saS5mb3JFYWNoKFtcImRlbGV0ZVwiLFwiZ2V0XCIsXCJoZWFkXCIsXCJvcHRpb25zXCJdLChmdW5jdGlvbihlKXtzLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoaS5tZXJnZShyfHx7fSx7bWV0aG9kOmUsdXJsOnR9KSl9fSkpLGkuZm9yRWFjaChbXCJwb3N0XCIsXCJwdXRcIixcInBhdGNoXCJdLChmdW5jdGlvbihlKXtzLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHRoaXMucmVxdWVzdChpLm1lcmdlKG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOnJ9KSl9fSkpLGUuZXhwb3J0cz1zfSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtuLmZvckVhY2goZSwoZnVuY3Rpb24ocixuKXtuIT09dCYmbi50b1VwcGVyQ2FzZSgpPT09dC50b1VwcGVyQ2FzZSgpJiYoZVt0XT1yLGRlbGV0ZSBlW25dKX0pKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDEwMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmaSYmIWkoci5zdGF0dXMpP3QobihcIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgXCIrci5zdGF0dXMsci5jb25maWcsbnVsbCxyLnJlcXVlc3QscikpOmUocil9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGUuY29uZmlnPXQsciYmKGUuY29kZT1yKSxlLnJlcXVlc3Q9bixlLnJlc3BvbnNlPWksZX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDcpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lNDAvZ2ksXCJAXCIpLnJlcGxhY2UoLyUzQS9naSxcIjpcIikucmVwbGFjZSgvJTI0L2csXCIkXCIpLnJlcGxhY2UoLyUyQy9naSxcIixcIikucmVwbGFjZSgvJTIwL2csXCIrXCIpLnJlcGxhY2UoLyU1Qi9naSxcIltcIikucmVwbGFjZSgvJTVEL2dpLFwiXVwiKX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2lmKCF0KXJldHVybiBlO3ZhciBvO2lmKHIpbz1yKHQpO2Vsc2UgaWYobi5pc1VSTFNlYXJjaFBhcmFtcyh0KSlvPXQudG9TdHJpbmcoKTtlbHNle3ZhciBhPVtdO24uZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihuLmlzQXJyYXkoZSk/dCs9XCJbXVwiOmU9W2VdLG4uZm9yRWFjaChlLChmdW5jdGlvbihlKXtuLmlzRGF0ZShlKT9lPWUudG9JU09TdHJpbmcoKTpuLmlzT2JqZWN0KGUpJiYoZT1KU09OLnN0cmluZ2lmeShlKSksYS5wdXNoKGkodCkrXCI9XCIraShlKSl9KSkpfSkpLG89YS5qb2luKFwiJlwiKX1yZXR1cm4gbyYmKGUrPSgtMT09PWUuaW5kZXhPZihcIj9cIik/XCI/XCI6XCImXCIpK28pLGV9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig3KSxpPVtcImFnZVwiLFwiYXV0aG9yaXphdGlvblwiLFwiY29udGVudC1sZW5ndGhcIixcImNvbnRlbnQtdHlwZVwiLFwiZXRhZ1wiLFwiZXhwaXJlc1wiLFwiZnJvbVwiLFwiaG9zdFwiLFwiaWYtbW9kaWZpZWQtc2luY2VcIixcImlmLXVubW9kaWZpZWQtc2luY2VcIixcImxhc3QtbW9kaWZpZWRcIixcImxvY2F0aW9uXCIsXCJtYXgtZm9yd2FyZHNcIixcInByb3h5LWF1dGhvcml6YXRpb25cIixcInJlZmVyZXJcIixcInJldHJ5LWFmdGVyXCIsXCJ1c2VyLWFnZW50XCJdO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxyLG8sYT17fTtyZXR1cm4gZT8obi5mb3JFYWNoKGUuc3BsaXQoXCJcXG5cIiksKGZ1bmN0aW9uKGUpe2lmKG89ZS5pbmRleE9mKFwiOlwiKSx0PW4udHJpbShlLnN1YnN0cigwLG8pKS50b0xvd2VyQ2FzZSgpLHI9bi50cmltKGUuc3Vic3RyKG8rMSkpLHQpe2lmKGFbdF0mJmkuaW5kZXhPZih0KT49MClyZXR1cm47YVt0XT1cInNldC1jb29raWVcIj09PXQ/KGFbdF0/YVt0XTpbXSkuY29uY2F0KFtyXSk6YVt0XT9hW3RdK1wiLCBcIityOnJ9fSkpLGEpOmF9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig3KTtlLmV4cG9ydHM9bi5pc1N0YW5kYXJkQnJvd3NlckVudigpP2Z1bmN0aW9uKCl7dmFyIGUsdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7ZnVuY3Rpb24gaShlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsbiksbj1yLmhyZWYpLHIuc2V0QXR0cmlidXRlKFwiaHJlZlwiLG4pLHtocmVmOnIuaHJlZixwcm90b2NvbDpyLnByb3RvY29sP3IucHJvdG9jb2wucmVwbGFjZSgvOiQvLFwiXCIpOlwiXCIsaG9zdDpyLmhvc3Qsc2VhcmNoOnIuc2VhcmNoP3Iuc2VhcmNoLnJlcGxhY2UoL15cXD8vLFwiXCIpOlwiXCIsaGFzaDpyLmhhc2g/ci5oYXNoLnJlcGxhY2UoL14jLyxcIlwiKTpcIlwiLGhvc3RuYW1lOnIuaG9zdG5hbWUscG9ydDpyLnBvcnQscGF0aG5hbWU6XCIvXCI9PT1yLnBhdGhuYW1lLmNoYXJBdCgwKT9yLnBhdGhuYW1lOlwiL1wiK3IucGF0aG5hbWV9fXJldHVybiBlPWkod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPW4uaXNTdHJpbmcodCk/aSh0KTp0O3JldHVybiByLnByb3RvY29sPT09ZS5wcm90b2NvbCYmci5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEwfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNyk7ZS5leHBvcnRzPW4uaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LHIsaSxvLGEpe3ZhciBzPVtdO3MucHVzaChlK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudCh0KSksbi5pc051bWJlcihyKSYmcy5wdXNoKFwiZXhwaXJlcz1cIituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxuLmlzU3RyaW5nKGkpJiZzLnB1c2goXCJwYXRoPVwiK2kpLG4uaXNTdHJpbmcobykmJnMucHVzaChcImRvbWFpbj1cIitvKSwhMD09PWEmJnMucHVzaChcInNlY3VyZVwiKSxkb2N1bWVudC5jb29raWU9cy5qb2luKFwiOyBcIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoXCIoXnw7XFxcXHMqKShcIitlK1wiKT0oW147XSopXCIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSxcIlwiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig3KTtmdW5jdGlvbiBpKCl7dGhpcy5oYW5kbGVycz1bXX1pLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0fSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0saS5wcm90b3R5cGUuZWplY3Q9ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9LGkucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7bi5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsKGZ1bmN0aW9uKHQpe251bGwhPT10JiZlKHQpfSkpfSxlLmV4cG9ydHM9aX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNyksaT1yKDI2OSksbz1yKDEwMSksYT1yKDUyKSxzPXIoMjcwKSxmPXIoMjcxKTtmdW5jdGlvbiB1KGUpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpfWUuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gdShlKSxlLmJhc2VVUkwmJiFzKGUudXJsKSYmKGUudXJsPWYoZS5iYXNlVVJMLGUudXJsKSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPWkoZS5kYXRhLGUuaGVhZGVycyxlLnRyYW5zZm9ybVJlcXVlc3QpLGUuaGVhZGVycz1uLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVyc3x8e30pLG4uZm9yRWFjaChbXCJkZWxldGVcIixcImdldFwiLFwiaGVhZFwiLFwicG9zdFwiLFwicHV0XCIsXCJwYXRjaFwiLFwiY29tbW9uXCJdLChmdW5jdGlvbih0KXtkZWxldGUgZS5oZWFkZXJzW3RdfSkpLChlLmFkYXB0ZXJ8fGEuYWRhcHRlcikoZSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHUoZSksdC5kYXRhPWkodC5kYXRhLHQuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSx0fSksKGZ1bmN0aW9uKHQpe3JldHVybiBvKHQpfHwodShlKSx0JiZ0LnJlc3BvbnNlJiYodC5yZXNwb25zZS5kYXRhPWkodC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbi5mb3JFYWNoKHIsKGZ1bmN0aW9uKHIpe2U9cihlLHQpfSkpLGV9fSxmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybi9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdChlKX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1xcLyskLyxcIlwiKStcIi9cIit0LnJlcGxhY2UoL15cXC8rLyxcIlwiKTplfX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTAyKTtmdW5jdGlvbiBpKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi5cIik7dmFyIHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0PWV9KSk7dmFyIHI9dGhpcztlKChmdW5jdGlvbihlKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBuKGUpLHQoci5yZWFzb24pKX0pKX1pLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LGkuc291cmNlPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJue3Rva2VuOm5ldyBpKChmdW5jdGlvbih0KXtlPXR9KSksY2FuY2VsOmV9fSxlLmV4cG9ydHM9aX0sZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17UmVsYXk6Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIsbil7dGhpcy5ibG9ja2NoYWluPWUsdGhpcy5uZXRJRD10LHRoaXMuZGF0YT1yLHRoaXMuY29uZmlndXJhdGlvbj1ufXRvSlNPTigpe3JldHVybntCbG9ja2NoYWluOnRoaXMuYmxvY2tjaGFpbixOZXRJRDp0aGlzLm5ldElELERhdGE6dGhpcy5kYXRhLERldklEOnRoaXMuY29uZmlndXJhdGlvbi5kZXZJRH19aXNWYWxpZCgpe2Zvcih2YXIgZSBpbiB0aGlzKWlmKCF0aGlzLmhhc093blByb3BlcnR5KGUpfHxcIlwiPT10aGlzW2VdKXJldHVybiExO3JldHVybiEwfX19fSxmdW5jdGlvbihlLHQscil7Y29uc3Qgbj1yKDUxKSxpPXIoNTMpO2UuZXhwb3J0cz17UmVwb3J0OmNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLmlwPWUsdGhpcy5tZXNzYWdlPXQsdGhpcy5jb25maWd1cmF0aW9uPXJ9dG9KU09OKCl7cmV0dXJue0lQOnRoaXMuaXAsTWVzc2FnZTp0aGlzLm1lc3NhZ2V9fWlzVmFsaWQoKXtmb3IodmFyIGUgaW4gdGhpcylpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShlKXx8XCJcIj09dGhpc1tlXSlyZXR1cm4hMTtyZXR1cm4hMH1hc3luYyBzZW5kKGUpe2NvbnN0IHQ9bi5jcmVhdGUoe2Jhc2VVUkw6aS5kaXNwYXRjaE5vZGVVUkwsdGltZW91dDp0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVPdXQsaGVhZGVyczp7XCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL2pzb25cIn19KTt2YXIgcj1hd2FpdCB0LnBvc3QoaS5yZXBvcnRQYXRoLHRoaXMudG9KU09OKCkpO3JldHVybiAyMDA9PXIuc3RhdHVzJiZudWxsIT1yLmRhdGE/ZT92b2lkIGUobnVsbCxyLmRhdGEpOnIuZGF0YTplP3ZvaWQgZShuZXcgRXJyb3IoXCJGYWlsZWQgdG8gc2VuZCByZXBvcnQgd2l0aCBlcnJvcjogXCIrci5kYXRhKSk6bmV3IEVycm9yKFwiRmFpbGVkIHRvIHNlbmQgcmVwb3J0IHdpdGggZXJyb3I6IFwiK3IuZGF0YSl9fX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtXYWxsZXQ6Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIsbixpKXt0aGlzLmFkZHJlc3M9ZSx0aGlzLnByaXZhdGVLZXk9dCx0aGlzLm5ldHdvcms9cix0aGlzLm5ldHdvcmtJRD1uLHRoaXMuZGF0YT1pfX19fSxmdW5jdGlvbihlLHQscil7Y29uc3Qgbj1yKDk3KSxpPW4uQmxvY2tjaGFpbixvPW4uRGlzcGF0Y2gsYT1uLlJlbGF5LHM9bi5SZXBvcnQ7Y2xhc3MgZntjb25zdHJ1Y3RvcihlLHQscixuKXt0aGlzLmRldklEPWUsdGhpcy5ibG9ja2NoYWlucz10LHRoaXMubWF4Tm9kZXM9cnx8NSx0aGlzLm5vZGVzPVtdLHRoaXMucmVxdWVzdFRpbWVPdXQ9bnx8MWU0LHRoaXMuZGlzcGF0Y2g9bnVsbH1ub2Rlc0lzRW1wdHkoKXtyZXR1cm4gbnVsbD09dGhpcy5ub2Rlc3x8MD09dGhpcy5ub2Rlcy5sZW5ndGh9fWUuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt2YXIgdD1bXTtpZihudWxsPT1lLmRldklEfHxudWxsPT1lLm5ldHdvcmtOYW1lfHxudWxsPT1lLm5ldElEcylyZXR1cm4gbmV3IEVycm9yKFwiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzXCIpO2lmKEFycmF5LmlzQXJyYXkoZS5uZXRJRHMpKWUubmV0SURzLmZvckVhY2gocj0+e3ZhciBuPW5ldyBpKGUubmV0d29ya05hbWUscik7dC5wdXNoKG4udG9KU09OKCkpfSk7ZWxzZXt2YXIgcj1uZXcgaShlLm5ldHdvcmtOYW1lLGUubmV0SURzKTt0LnB1c2goci50b0pTT04oKSl9dGhpcy5jb25maWd1cmF0aW9uPW5ldyBmKGUuZGV2SUQsdCxlLm1heE5vZGVzfHw1LGUucmVxdWVzdFRpbWVPdXR8fDFlNCl9Y3JlYXRlUmVsYXkoZSx0LHIpe3JldHVybiBuZXcgYShlLHQsXCJzdHJpbmdcIj09dHlwZW9mIHI/cjpKU09OLnN0cmluZ2lmeShyKSx0aGlzLmNvbmZpZ3VyYXRpb24pfWNyZWF0ZVJlcG9ydChlLHQpe3JldHVybiBuZXcgcyhlLHQsdGhpcy5jb25maWd1cmF0aW9uKX1nZXREaXNwYXRjaCgpe3JldHVybiBudWxsPT10aGlzLmRpc3BhdGNoJiYodGhpcy5kaXNwYXRjaD1uZXcgbyh0aGlzLmNvbmZpZ3VyYXRpb24pKSx0aGlzLmRpc3BhdGNofWFzeW5jIGdldE5vZGUoZSx0KXt0cnl7dmFyIHI9W107aWYodGhpcy5jb25maWd1cmF0aW9uLm5vZGVzSXNFbXB0eSgpKXt2YXIgbj1hd2FpdCB0aGlzLnJldHJpZXZlTm9kZXMoKTtpZihuIGluc3RhbmNlb2YgRXJyb3I9PTEpdGhyb3cgbjt0aGlzLmNvbmZpZ3VyYXRpb24ubm9kZXM9bn1yZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLm5vZGVzLmZvckVhY2gobj0+e24uaXNFcXVhbChlLHQpJiZyLnB1c2gobil9KSxyLmxlbmd0aDw9MD9udWxsOnJbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnIubGVuZ3RoKV19Y2F0Y2goZSl7cmV0dXJuIG51bGx9fWFzeW5jIHNlbmRSZXBvcnQoZSx0KXt0cnl7aWYobnVsbD09ZSl0aHJvdyBuZXcgRXJyb3IoXCJSZXBvcnQgaXMgbnVsbFwiKTtpZighZS5pc1ZhbGlkKCkpdGhyb3cgbmV3IEVycm9yKFwiT25lIG9yIG1vcmUgUmVwb3J0IHByb3BlcnRpZXMgYXJlIGVtcHR5LlwiKTt2YXIgcj1hd2FpdCBlLnNlbmQoKTtyZXR1cm4gciBpbnN0YW5jZW9mIEVycm9yPT0wP3Q/dm9pZCB0KG51bGwscik6cjp0P3ZvaWQgdChyKTpyfWNhdGNoKGUpe3JldHVybiB0P3ZvaWQgdChlKTplfX1hc3luYyBzZW5kUmVsYXkoZSx0KXt0cnl7aWYobnVsbD09ZXx8bnVsbD09ZS5kYXRhKXJldHVybiB0P3ZvaWQgdChuZXcgRXJyb3IoXCJSZWxheSBpcyBudWxsIG9yIGRhdGEgZmllbGQgaXMgbWlzc2luZ1wiKSk6bmV3IEVycm9yKFwiUmVsYXkgaXMgbnVsbCBvciBkYXRhIGZpZWxkIGlzIG1pc3NpbmdcIik7aWYoIWUuaXNWYWxpZCgpKXJldHVybiB0P3ZvaWQgdChuZXcgRXJyb3IoXCJSZWxheSBpcyBtaXNzaW5nIGEgcHJvcGVydHksIHBsZWFzZSB2ZXJpZnkgYWxsIHByb3BlcnRpZXMuXCIpKTpuZXcgRXJyb3IoXCJSZWxheSBpcyBtaXNzaW5nIGEgcHJvcGVydHksIHBsZWFzZSB2ZXJpZnkgYWxsIHByb3BlcnRpZXMuXCIpO3ZhciByPWF3YWl0IHRoaXMuZ2V0Tm9kZShlLm5ldElELGUuYmxvY2tjaGFpbik7aWYobnVsbD09cilyZXR1cm4gdD92b2lkIHQobmV3IEVycm9yKFwiTm9kZSBpcyBlbXB0eS5cIikpOm5ldyBFcnJvcihcIk5vZGUgaXMgZW1wdHkuXCIpO3ZhciBuPWF3YWl0IHIuc2VuZFJlbGF5KGUpO3JldHVybiBuIGluc3RhbmNlb2YgRXJyb3I9PTA/dD92b2lkIHQobnVsbCxuKTpuOnQ/dm9pZCB0KG4pOm59Y2F0Y2goZSl7cmV0dXJuIHQ/dm9pZCB0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBzZW5kIHJlbGF5IHdpdGggZXJyb3I6IFwiK2UpKTpuZXcgRXJyb3IoXCJGYWlsZWQgdG8gc2VuZCByZWxheSB3aXRoIGVycm9yOiBcIitlKX19YXN5bmMgcmV0cmlldmVOb2RlcyhlKXt0cnl7dmFyIHQ9dGhpcy5nZXREaXNwYXRjaCgpLHI9YXdhaXQgdC5yZXRyaWV2ZVNlcnZpY2VOb2RlcygpO3JldHVybiByIGluc3RhbmNlb2YgRXJyb3I9PTAmJjAhPXIubGVuZ3RoPyh0aGlzLmNvbmZpZ3VyYXRpb24ubm9kZXM9cixlP3ZvaWQgZShudWxsLHIpOnIpOmU/dm9pZCBlKG5ldyBFcnJvcihcIkZhaWxlZCB0byByZXRyaWV2ZSBhIGxpc3Qgb2Ygbm9kZXMuXCIpLG51bGwpOm5ldyBFcnJvcihcIkZhaWxlZCB0byByZXRyaWV2ZSBhIGxpc3Qgb2Ygbm9kZXMuXCIpfWNhdGNoKHQpe3JldHVybiBlP3ZvaWQgZShuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmV0cmlldmUgYSBsaXN0IG9mIG5vZGVzIHdpdGggZXJyb3I6IFwiK3QpLG51bGwpOm5ldyBFcnJvcihcIkZhaWxlZCB0byByZXRyaWV2ZSBhIGxpc3Qgb2Ygbm9kZXMgd2l0aCBlcnJvcjogXCIrdCl9fX19LGZ1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtyLnIodCk7dmFyIG49cigxMDQpLGk9ci5uKG4pLG89cig1NCksYT1yLm4obykscz1yKDEwNSksZj1yLm4ocyksdT1yKDEwNiksYz1yLm4odSksaD1yKDEwNyksZD1yLm4oaCksbD1yKDU1KSxwPXIubihsKSxiPXIoMTA4KSx5PXIubihiKSxnPXIoMTA5KSx2PXIubihnKTtmdW5jdGlvbiBtKGUsdCl7dmFyIHI9XCJzdHJpbmdcIj09dHlwZW9mIGU/T2JqZWN0LmFzc2lnbih7fSx3W2VdKTplO2lmKFwib2JqZWN0XCIhPXR5cGVvZiByKXRocm93IG5ldyBFcnJvcihcIltQb3J0aXNdIGlsbGVnYWwgJ25ldHdvcmsnIHBhcmFtZXRlci4gUmVhZCBtb3JlIGFib3V0IGl0IGhlcmU6IGh0dHBzOi8vZG9jcy5wb3J0aXMuaW8vIy9jb25maWd1cmF0aW9uP2lkPW5ldHdvcmtcIik7aWYoIXIubm9kZVVybCl0aHJvdyBuZXcgRXJyb3IoXCJbUG9ydGlzXSAnbm9kZVVybCcgaXMgcmVxdWlyZWQuIFJlYWQgbW9yZSBhYm91dCBpdCBoZXJlOiBodHRwczovL2RvY3MucG9ydGlzLmlvLyMvY29uZmlndXJhdGlvbj9pZD1uZXR3b3JrXCIpO2lmKHQmJiFyLmdhc1JlbGF5SHViQWRkcmVzcyl0aHJvdyBuZXcgRXJyb3IoXCJbUG9ydGlzXSBjYW4ndCBmaW5kIGRlZmF1bHQgZ2FzIHJlbGF5IGh1YiBmb3IgXCIrZSk7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGV8fHR8fGRlbGV0ZSByLmdhc1JlbGF5SHViQWRkcmVzcyxyfXZhciB3PXttYWlubmV0Ontub2RlVXJsOlwiaHR0cHM6Ly9tYWlubmV0LmluZnVyYS5pby92My9mYWE0NjM5YjA5MGY0NjQ5OWYyOWQ4OTRkYTA1NTFhMFwiLGNoYWluSWQ6XCIxXCIsZ2FzUmVsYXlIdWJBZGRyZXNzOlwiMHhEMjE2MTUzYzA2RTg1N2NEN2Y3MjY2NUUwYUYxZDdEODIxNzJGNDk0XCJ9LHJvcHN0ZW46e25vZGVVcmw6XCJodHRwczovL3JvcHN0ZW4uaW5mdXJhLmlvL3YzL2ZhYTQ2MzliMDkwZjQ2NDk5ZjI5ZDg5NGRhMDU1MWEwXCIsY2hhaW5JZDpcIjNcIixnYXNSZWxheUh1YkFkZHJlc3M6XCIweEQyMTYxNTNjMDZFODU3Y0Q3ZjcyNjY1RTBhRjFkN0Q4MjE3MkY0OTRcIn0scmlua2VieTp7bm9kZVVybDpcImh0dHBzOi8vcmlua2VieS5pbmZ1cmEuaW8vdjMvZmFhNDYzOWIwOTBmNDY0OTlmMjlkODk0ZGEwNTUxYTBcIixjaGFpbklkOlwiNFwiLGdhc1JlbGF5SHViQWRkcmVzczpcIjB4RDIxNjE1M2MwNkU4NTdjRDdmNzI2NjVFMGFGMWQ3RDgyMTcyRjQ5NFwifSxnb2VybGk6e25vZGVVcmw6XCJodHRwczovL2dvZXJsaS5wcnlsYWJzLm5ldFwiLGNoYWluSWQ6XCI1XCJ9LHViaXE6e25vZGVVcmw6XCJodHRwczovL3JwYzEudWJpcXNjYW4uaW9cIixjaGFpbklkOlwiOFwifSx0aHVuZGVyY29yZVRlc3RuZXQ6e25vZGVVcmw6XCJodHRwczovL3Rlc3RuZXQtcnBjLnRodW5kZXJjb3JlLmNvbTo4NTQ0XCIsY2hhaW5JZDpcIjE4XCJ9LG9yY2hpZDp7bm9kZVVybDpcImh0dHBzOi8vcHVibGljLW5vZGUucnNrLmNvXCIsY2hhaW5JZDpcIjMwXCJ9LG9yY2hpZFRlc3RuZXQ6e25vZGVVcmw6XCJodHRwczovL3B1YmxpYy1ub2RlLnRlc3RuZXQucnNrLmNvXCIsY2hhaW5JZDpcIjMxXCJ9LGtvdmFuOntub2RlVXJsOlwiaHR0cHM6Ly9rb3Zhbi5pbmZ1cmEuaW8vdjMvZmFhNDYzOWIwOTBmNDY0OTlmMjlkODk0ZGEwNTUxYTBcIixjaGFpbklkOlwiNDJcIixnYXNSZWxheUh1YkFkZHJlc3M6XCIweEQyMTYxNTNjMDZFODU3Y0Q3ZjcyNjY1RTBhRjFkN0Q4MjE3MkY0OTRcIn0sY2xhc3NpYzp7bm9kZVVybDpcImh0dHBzOi8vZXRoZXJldW1jbGFzc2ljLm5ldHdvcmtcIixjaGFpbklkOlwiNjFcIn0sc29rb2w6e25vZGVVcmw6XCJodHRwczovL3Nva29sLnBvYS5uZXR3b3JrXCIsY2hhaW5JZDpcIjc3XCJ9LGNvcmU6e25vZGVVcmw6XCJodHRwczovL2NvcmUucG9hLm5ldHdvcmtcIixjaGFpbklkOlwiOTlcIn0seGRhaTp7bm9kZVVybDpcImh0dHBzOi8vZGFpLnBvYS5uZXR3b3JrXCIsY2hhaW5JZDpcIjEwMFwiLGdhc1JlbGF5SHViQWRkcmVzczpcIjB4RDIxNjE1M2MwNkU4NTdjRDdmNzI2NjVFMGFGMWQ3RDgyMTcyRjQ5NFwifSx0aHVuZGVyY29yZTp7bm9kZVVybDpcImh0dHBzOi8vbWFpbm5ldC1ycGMudGh1bmRlcmNvcmUuY29tXCIsY2hhaW5JZDpcIjEwOFwifSxmdXNlOntub2RlVXJsOlwiaHR0cHM6Ly9ycGMuZnVzZW5ldC5pb1wiLGNoYWluSWQ6XCIxMjJcIn0sbGlnaHRzdHJlYW1zOntub2RlVXJsOlwiaHR0cHM6Ly9ub2RlLm1haW5uZXQubGlnaHRzdHJlYW1zLmlvXCIsY2hhaW5JZDpcIjE2M1wifSxtYXRpYzp7bm9kZVVybDpcImh0dHBzOi8vcnBjLW1haW5uZXQubWF0aWMubmV0d29ya1wiLGNoYWluSWQ6XCIxMzdcIn0sbWF0aWNNdW1iYWk6e25vZGVVcmw6XCJodHRwczovL3JwYy1tdW1iYWkubWF0aWMudG9kYXlcIixjaGFpbklkOlwiODAwMDFcIn0sbWF0aWNBbHBoYTp7bm9kZVVybDpcImh0dHBzOi8vYWxwaGEuZXRoZXJldW0ubWF0aWMubmV0d29ya1wiLGNoYWluSWQ6XCI0NjI2XCJ9LG1hdGljVGVzdG5ldDp7bm9kZVVybDpcImh0dHBzOi8vdGVzdG5ldDIubWF0aWMubmV0d29ya1wiLGNoYWluSWQ6XCI4OTk1XCJ9fSxfPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKChmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIGEoZSl7dHJ5e2Yobi5uZXh0KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBzKGUpe3RyeXtmKG4udGhyb3coZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGYoZSl7ZS5kb25lP2koZS52YWx1ZSk6bmV3IHIoKGZ1bmN0aW9uKHQpe3QoZS52YWx1ZSl9KSkudGhlbihhLHMpfWYoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0sRT1mdW5jdGlvbihlLHQpe3ZhciByLG4saSxvLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmaVswXSl0aHJvdyBpWzFdO3JldHVybiBpWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIG89e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihvW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLG87ZnVuY3Rpb24gcyhvKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKG8pe2lmKHIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDthOyl0cnl7aWYocj0xLG4mJihpPTImb1swXT9uLnJldHVybjpvWzBdP24udGhyb3d8fCgoaT1uLnJldHVybikmJmkuY2FsbChuKSwwKTpuLm5leHQpJiYhKGk9aS5jYWxsKG4sb1sxXSkpLmRvbmUpcmV0dXJuIGk7c3dpdGNoKG49MCxpJiYobz1bMiZvWzBdLGkudmFsdWVdKSxvWzBdKXtjYXNlIDA6Y2FzZSAxOmk9bzticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6b1sxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLG49b1sxXSxvPVswXTtjb250aW51ZTtjYXNlIDc6bz1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKGk9YS50cnlzLChpPWkubGVuZ3RoPjAmJmlbaS5sZW5ndGgtMV0pfHw2IT09b1swXSYmMiE9PW9bMF0pKXthPTA7Y29udGludWV9aWYoMz09PW9bMF0mJighaXx8b1sxXT5pWzBdJiZvWzFdPGlbM10pKXthLmxhYmVsPW9bMV07YnJlYWt9aWYoNj09PW9bMF0mJmEubGFiZWw8aVsxXSl7YS5sYWJlbD1pWzFdLGk9bzticmVha31pZihpJiZhLmxhYmVsPGlbMl0pe2EubGFiZWw9aVsyXSxhLm9wcy5wdXNoKG8pO2JyZWFrfWlbMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1vPXQuY2FsbChlLGEpfWNhdGNoKGUpe289WzYsZV0sbj0wfWZpbmFsbHl7cj1pPTB9aWYoNSZvWzBdKXRocm93IG9bMV07cmV0dXJue3ZhbHVlOm9bMF0/b1sxXTp2b2lkIDAsZG9uZTohMH19KFtvLHNdKX19fSxTPXIoMTQpLEE9Uy5hZGRIZXhQcmVmaXgseD1TLnN0cmlwSGV4UHJlZml4LGs9Uy5CTjtmdW5jdGlvbiBNKGUsdCl7cmV0dXJuIF8odGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciByLG4saSxvLGE7cmV0dXJuIEUodGhpcywoZnVuY3Rpb24ocyl7c3dpdGNoKHMubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxlLmdldEJsb2NrQnlOdW1iZXIoXCJsYXRlc3RcIiwhMSldO2Nhc2UgMTpyZXR1cm4gcj1zLnNlbnQoKSxbNCxUKGUsdCxyLmdhc0xpbWl0KV07Y2FzZSAyOmlmKG49cy5zZW50KCksaT1uLnNhZmVHYXMsbz1uLnNpbXBsZVNlbmQsYT1uLmdhc0xpbWl0U3BlY2lmaWVkLG98fGEpcmV0dXJuWzIsaV07cy5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4gcy50cnlzLnB1c2goWzMsNSwsNl0pLFs0LEkoZSx0LHIuZ2FzTGltaXQsaSldO2Nhc2UgNDpyZXR1cm5bMixzLnNlbnQoKV07Y2FzZSA1OnJldHVybiBzLnNlbnQoKSxbMixpXTtjYXNlIDY6cmV0dXJuWzJdfX0pKX0pKX1mdW5jdGlvbiBUKGUsdCxyKXtyZXR1cm4gXyh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIG4saSxvO3JldHVybiBFKHRoaXMsKGZ1bmN0aW9uKGEpe3N3aXRjaChhLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEJvb2xlYW4odC5nYXMpP1syLHtzYWZlR2FzOnQuZ2FzLHNpbXBsZVNlbmQ6ITEsZ2FzTGltaXRTcGVjaWZpZWQ6ITB9XToobj10LnRvLEJvb2xlYW4obik/WzQsZS5nZXRDb2RlKG4pXTpbMywyXSk7Y2FzZSAxOmlmKGk9YS5zZW50KCksIWl8fFwiMHhcIj09PWl8fFwiMHgwXCI9PT1pKXtpZih0LmRhdGEpdGhyb3cgbmV3IEVycm9yKFwiVHJ5aW5nIHRvIGNhbGwgYSBmdW5jdGlvbiBvbiBhIG5vbi1jb250cmFjdCBhZGRyZXNzXCIpO3JldHVyblsyLHtzYWZlR2FzOlwiMHg1MjA4XCIsc2ltcGxlU2VuZDohMCxnYXNMaW1pdFNwZWNpZmllZDohMX1dfWEubGFiZWw9MjtjYXNlIDI6cmV0dXJuIG89UChyKSxzPW8sZj0yMCx1PW5ldyBrKDE5KSxjPW5ldyBrKGYpLFsyLHtzYWZlR2FzOkwocy5tdWwodSkuZGl2KGMpKSxzaW1wbGVTZW5kOiExLGdhc0xpbWl0U3BlY2lmaWVkOiExfV19dmFyIHMsZix1LGN9KSl9KSl9ZnVuY3Rpb24gSShlLHQscixuKXtyZXR1cm4gXyh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIGk7cmV0dXJuIEUodGhpcywoZnVuY3Rpb24obyl7c3dpdGNoKG8ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdC5nYXM9bixpPUEsWzQsZS5lc3RpbWF0ZUdhcyh0KV07Y2FzZSAxOnJldHVyblsyLFIoaS5hcHBseSh2b2lkIDAsW28uc2VudCgpXSkscildfX0pKX0pKX1mdW5jdGlvbiBSKGUsdCl7dmFyIHI9UChlKSxuPVAodCkubXVsbiguOSksaT1yLm11bG4oMS41KTtyZXR1cm4gci5ndChuKT9MKHIpOmkubHQobik/TChpKTpMKG4pfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIG5ldyBrKHgoZSksMTYpfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIEEoZS50b1N0cmluZygxNikpfXZhciBCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnByb3ZpZGVyPWV9cmV0dXJuIGUucHJvdG90eXBlLmdldEJsb2NrQnlOdW1iZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zZW5kQXN5bmMoXCJldGhfZ2V0QmxvY2tCeU51bWJlclwiLGUsdCl9LGUucHJvdG90eXBlLmdldENvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJsYXRlc3RcIiksdGhpcy5zZW5kQXN5bmMoXCJldGhfZ2V0Q29kZVwiLGUsdCl9LGUucHJvdG90eXBlLmVzdGltYXRlR2FzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNlbmRBc3luYyhcImV0aF9lc3RpbWF0ZUdhc1wiLGUpfSxlLnByb3RvdHlwZS5zZW5kQXN5bmM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMscj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixpKXt0LnByb3ZpZGVyLnNlbmRBc3luYyh7aWQ6NDIsanNvbnJwYzpcIjIuMFwiLG1ldGhvZDplLHBhcmFtczpyfSwoZnVuY3Rpb24oZSx0KXtlP2koZSk6bih0LnJlc3VsdCl9KSl9KSl9LGV9KCksQz0hMTtmdW5jdGlvbiBPKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXtDP2UoKTpbXCJsb2FkZWRcIixcImludGVyYWN0aXZlXCIsXCJjb21wbGV0ZVwiXS5pbmRleE9mKGRvY3VtZW50LnJlYWR5U3RhdGUpPi0xPyhDPSEwLGUoKSk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsKGZ1bmN0aW9uKCl7Qz0hMCxlKCl9KSwhMSl9KSl9dmFyIE49cig1Niksaj1yLm4oTiksRD1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBhKGUpe3RyeXtmKG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gcyhlKXt0cnl7ZihuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiBmKGUpe2UuZG9uZT9pKGUudmFsdWUpOm5ldyByKChmdW5jdGlvbih0KXt0KGUudmFsdWUpfSkpLnRoZW4oYSxzKX1mKChuPW4uYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9LFU9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmlbMF0pdGhyb3cgaVsxXTtyZXR1cm4gaVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBvPXtuZXh0OnMoMCksdGhyb3c6cygxKSxyZXR1cm46cygyKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYob1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvO2Z1bmN0aW9uIHMobyl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbihvKXtpZihyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7YTspdHJ5e2lmKHI9MSxuJiYoaT0yJm9bMF0/bi5yZXR1cm46b1swXT9uLnRocm93fHwoKGk9bi5yZXR1cm4pJiZpLmNhbGwobiksMCk6bi5uZXh0KSYmIShpPWkuY2FsbChuLG9bMV0pKS5kb25lKXJldHVybiBpO3N3aXRjaChuPTAsaSYmKG89WzImb1swXSxpLnZhbHVlXSksb1swXSl7Y2FzZSAwOmNhc2UgMTppPW87YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOm9bMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxuPW9bMV0sbz1bMF07Y29udGludWU7Y2FzZSA3Om89YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShpPWEudHJ5cywoaT1pLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdKXx8NiE9PW9bMF0mJjIhPT1vWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1vWzBdJiYoIWl8fG9bMV0+aVswXSYmb1sxXTxpWzNdKSl7YS5sYWJlbD1vWzFdO2JyZWFrfWlmKDY9PT1vWzBdJiZhLmxhYmVsPGlbMV0pe2EubGFiZWw9aVsxXSxpPW87YnJlYWt9aWYoaSYmYS5sYWJlbDxpWzJdKXthLmxhYmVsPWlbMl0sYS5vcHMucHVzaChvKTticmVha31pWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9bz10LmNhbGwoZSxhKX1jYXRjaChlKXtvPVs2LGVdLG49MH1maW5hbGx5e3I9aT0wfWlmKDUmb1swXSl0aHJvdyBvWzFdO3JldHVybnt2YWx1ZTpvWzBdP29bMV06dm9pZCAwLGRvbmU6ITB9fShbbyxzXSl9fX0sej1bXCJlbWFpbFwiLFwicmVwdXRhdGlvblwiXSxxPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7cS5jbGFzc05hbWU9XCJwb3JfcG9ydGlzLWlmcmFtZVwiLHEuc3R5bGUud2lkdGg9XCIwXCIscS5zdHlsZS5oZWlnaHQ9XCIwXCIscS5zdHlsZS5ib3JkZXI9XCJub25lXCIscS5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIscS5zdHlsZS50b3A9XCItOTk5cHhcIixxLnN0eWxlLmxlZnQ9XCItOTk5cHhcIixxLnNyYz1cImh0dHBzOi8vd2lkZ2V0LnBvcnRpcy5pb1wiLE8oKS50aGVuKChmdW5jdGlvbigpe2RvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJwb3JfcG9ydGlzLWlmcmFtZVwiKS5sZW5ndGgmJmNvbnNvbGUud2FybihcIlBvcnRpcyBzY3JpcHQgd2FzIGFscmVhZHkgbG9hZGVkLiBUaGlzIG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIElmIGxvYWRpbmcgd2l0aCBhIDxzY3JpcHQ+IHRhZywgcGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHlvdSBvbmx5IGxvYWQgaXQgb25jZS5cIiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChxKX0pKTt2YXIgRj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3ZvaWQgMD09PXImJihyPXt9KSx0aGlzLl93aWRnZXRVcmw9XCJodHRwczovL3dpZGdldC5wb3J0aXMuaW9cIixmdW5jdGlvbigpe3ZhciBlPVwibG9jYWxob3N0XCI9PT1sb2NhdGlvbi5ob3N0bmFtZXx8XCIxMjcuMC4wLjFcIj09PWxvY2F0aW9uLmhvc3RuYW1lLHQ9XCJodHRwczpcIj09PWxvY2F0aW9uLnByb3RvY29sO2lmKCEoZXx8dCkpdGhyb3dcIltQb3J0aXNdIEFjY2VzcyB0byB0aGUgV2ViQ3J5cHRvIEFQSSBpcyByZXN0cmljdGVkIHRvIHNlY3VyZSBvcmlnaW5zLlxcbklmIHRoaXMgaXMgYSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBwbGVhc2UgdXNlIGh0dHA6Ly9sb2NhbGhvc3Q6XCIrbG9jYXRpb24ucG9ydCtcIiBpbnN0ZWFkLlxcbk90aGVyd2lzZSwgcGxlYXNlIHVzZSBhbiBTU0wgY2VydGlmaWNhdGUuXCJ9KCksdGhpcy5fY2hlY2tJZldpZGdldEFscmVhZHlJbml0aWFsaXplZCgpLHRoaXMuX3ZhbGlkYXRlUGFyYW1zKGUsdCxyKSx0aGlzLmNvbmZpZz17ZGFwcElkOmUsbmV0d29yazptKHQsci5nYXNSZWxheSksdmVyc2lvbjpcIjIuMC4wLWJldGEuNTlcIixzY29wZTpyLnNjb3BlLHJlZ2lzdGVyUGFnZUJ5RGVmYXVsdDpyLnJlZ2lzdGVyUGFnZUJ5RGVmYXVsdH0sdGhpcy53aWRnZXQ9dGhpcy5faW5pdFdpZGdldCgpLHRoaXMucHJvdmlkZXI9dGhpcy5faW5pdFByb3ZpZGVyKHIpfXJldHVybiBlLnByb3RvdHlwZS5jaGFuZ2VOZXR3b3JrPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bShlLHQpO3RoaXMuY2xlYXJTdWJwcm92aWRlcihwLmEpLHRoaXMuY2xlYXJTdWJwcm92aWRlcihhLmEpLHRoaXMuY29uZmlnLm5ldHdvcms9cn0sZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVtYWlsPWZ1bmN0aW9uKGUpe3RoaXMuY29uZmlnLmRlZmF1bHRFbWFpbD1lfSxlLnByb3RvdHlwZS5zaG93UG9ydGlzPWZ1bmN0aW9uKCl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBVKHRoaXMsKGZ1bmN0aW9uKGUpe3N3aXRjaChlLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy53aWRnZXRdO2Nhc2UgMTpyZXR1cm5bMixlLnNlbnQoKS5jb21tdW5pY2F0aW9uLnNob3dQb3J0aXModGhpcy5jb25maWcpXX19KSl9KSl9LGUucHJvdG90eXBlLmxvZ291dD1mdW5jdGlvbigpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXtyZXR1cm4gVSh0aGlzLChmdW5jdGlvbihlKXtzd2l0Y2goZS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMud2lkZ2V0XTtjYXNlIDE6cmV0dXJuWzIsZS5zZW50KCkuY29tbXVuaWNhdGlvbi5sb2dvdXQoKV19fSkpfSkpfSxlLnByb3RvdHlwZS5vbkxvZ2luPWZ1bmN0aW9uKGUpe3RoaXMuX29uTG9naW5DYWxsYmFjaz1lfSxlLnByb3RvdHlwZS5vbkxvZ291dD1mdW5jdGlvbihlKXt0aGlzLl9vbkxvZ291dENhbGxiYWNrPWV9LGUucHJvdG90eXBlLm9uQWN0aXZlV2FsbGV0Q2hhbmdlZD1mdW5jdGlvbihlKXt0aGlzLl9vbkFjdGl2ZVdhbGxldENoYW5nZWRDYWxsYmFjaz1lfSxlLnByb3RvdHlwZS5vbkVycm9yPWZ1bmN0aW9uKGUpe3RoaXMuX29uRXJyb3JDYWxsYmFjaz1lfSxlLnByb3RvdHlwZS5nZXRFeHRlbmRlZFB1YmxpY0tleT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1cIm0vNDQnLzYwJy8wJy8wLzBcIiksdm9pZCAwPT09dCYmKHQ9XCJFdGhlcmV1bVwiKSxEKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXtyZXR1cm4gVSh0aGlzLChmdW5jdGlvbihyKXtzd2l0Y2goci5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMud2lkZ2V0XTtjYXNlIDE6cmV0dXJuWzIsci5zZW50KCkuY29tbXVuaWNhdGlvbi5nZXRFeHRlbmRlZFB1YmxpY0tleShlLHQsdGhpcy5jb25maWcpXX19KSl9KSl9LGUucHJvdG90eXBlLmltcG9ydFdhbGxldD1mdW5jdGlvbihlKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7cmV0dXJuIFUodGhpcywoZnVuY3Rpb24odCl7c3dpdGNoKHQubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLndpZGdldF07Y2FzZSAxOnJldHVyblsyLHQuc2VudCgpLmNvbW11bmljYXRpb24uaW1wb3J0V2FsbGV0KGUsdGhpcy5jb25maWcpXX19KSl9KSl9LGUucHJvdG90eXBlLmlzTG9nZ2VkSW49ZnVuY3Rpb24oKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7cmV0dXJuIFUodGhpcywoZnVuY3Rpb24oZSl7c3dpdGNoKGUubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLndpZGdldF07Y2FzZSAxOnJldHVyblsyLGUuc2VudCgpLmNvbW11bmljYXRpb24uaXNMb2dnZWRJbigpXX19KSl9KSl9LGUucHJvdG90eXBlLnNpZ25CaXRjb2luVHJhbnNhY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBVKHRoaXMsKGZ1bmN0aW9uKHQpe3N3aXRjaCh0LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy53aWRnZXRdO2Nhc2UgMTpyZXR1cm5bMix0LnNlbnQoKS5jb21tdW5pY2F0aW9uLnNpZ25CaXRjb2luVHJhbnNhY3Rpb24oZSx0aGlzLmNvbmZpZyldfX0pKX0pKX0sZS5wcm90b3R5cGUuc2hvd0JpdGNvaW5XYWxsZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPVwibS80OScvMCcvMCcvMC8wXCIpLEQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBVKHRoaXMsKGZ1bmN0aW9uKHQpe3N3aXRjaCh0LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy53aWRnZXRdO2Nhc2UgMTpyZXR1cm5bMix0LnNlbnQoKS5jb21tdW5pY2F0aW9uLnNob3dCaXRjb2luV2FsbGV0KGUsdGhpcy5jb25maWcpXX19KSl9KSl9LGUucHJvdG90eXBlLl9jaGVja0lmV2lkZ2V0QWxyZWFkeUluaXRpYWxpemVkPWZ1bmN0aW9uKCl7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInBvcl9wb3J0aXMtY29udGFpbmVyXCIpLmxlbmd0aCYmY29uc29sZS53YXJuKFwiQW4gaW5zdGFuY2Ugb2YgUG9ydGlzIHdhcyBhbHJlYWR5IGluaXRpYWxpemVkLiBUaGlzIGlzIHByb2JhYmx5IGEgbWlzdGFrZS4gTWFrZSBzdXJlIHRoYXQgeW91IHVzZSB0aGUgc2FtZSBQb3J0aXMgaW5zdGFuY2UgdGhyb3VnaG91dCB5b3VyIGFwcC5cIil9LGUucHJvdG90eXBlLl92YWxpZGF0ZVBhcmFtcz1mdW5jdGlvbihlLHQscil7aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiW1BvcnRpc10gJ2RhcHBJZCcgaXMgcmVxdWlyZWQuIEdldCB5b3VyIGRhcHBJZCBoZXJlOiBodHRwczovL2Rhc2hib2FyZC5wb3J0aXMuaW9cIik7aWYoIXQpdGhyb3cgbmV3IEVycm9yKFwiW1BvcnRpc10gJ25ldHdvcmsnIGlzIHJlcXVpcmVkLiBSZWFkIG1vcmUgYWJvdXQgaXQgaGVyZTogaHR0cHM6Ly9kb2NzLnBvcnRpcy5pby8jL2NvbmZpZ3VyYXRpb24/aWQ9bmV0d29ya1wiKTtpZihyLnNjb3BlKXtpZighQXJyYXkuaXNBcnJheShyLnNjb3BlKSl0aHJvdyBuZXcgRXJyb3IoXCJbUG9ydGlzXSAnc2NvcGUnIG11c3QgYmUgYW4gYXJyYXkuIFJlYWQgbW9yZSBhYm91dCBpdCBoZXJlOiBodHRwczovL2RvY3MucG9ydGlzLmlvLyMvY29uZmlndXJhdGlvbj9pZD1zY29wZVwiKTtpZihyLnNjb3BlLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIHouaW5kZXhPZihlKTwwfSkpLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihcIltQb3J0aXNdIGludmFsaWQgJ3Njb3BlJyBwYXJhbWV0ZXIuIFJlYWQgbW9yZSBhYm91dCBpdCBoZXJlOiBodHRwczovL2RvY3MucG9ydGlzLmlvLyMvY29uZmlndXJhdGlvbj9pZD1zY29wZVwiKX1pZih2b2lkIDAhPT1yLnJlZ2lzdGVyUGFnZUJ5RGVmYXVsdCYmXCJib29sZWFuXCIhPXR5cGVvZiByLnJlZ2lzdGVyUGFnZUJ5RGVmYXVsdCl0aHJvdyBuZXcgRXJyb3IoXCJbUG9ydGlzXSBpbnZhbGlkICdyZWdpc3RlclBhZ2VCeURlZmF1bHQnIHBhcmFtZXRlciwgbXVzdCBiZSBhIGJvb2xlYW4uIFJlYWQgbW9yZSBhYm91dCBpdCBoZXJlOiBodHRwczovL2RvY3MucG9ydGlzLmlvLyMvY29uZmlndXJhdGlvbj9pZD1yZWdpc3RlclBhZ2VCeURlZmF1bHRcIik7ci5zdGFnaW5nJiYoY29uc29sZS53YXJuKFwiUGxlYXNlIG5vdGU6IHlvdSBhcmUgdXNpbmcgdGhlIFBvcnRpcyBTVEFHSU5HIGVudmlyb25tZW50LlwiKSx0aGlzLl93aWRnZXRVcmw9XCJodHRwczovL3dpZGdldC1zdGFnaW5nLnBvcnRpcy5pb1wiKX0sZS5wcm90b3R5cGUuX2luaXRXaWRnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIGUsdCxyLG4saTtyZXR1cm4gVSh0aGlzLChmdW5jdGlvbihvKXtzd2l0Y2goby5sYWJlbCl7Y2FzZSAwOnJldHVybls0LE8oKV07Y2FzZSAxOnJldHVybiBvLnNlbnQoKSxkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHEpJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHEpLChlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSkuaW5uZXJIVE1MPVwiXFxuLnBvcl9wb3J0aXMtY29udGFpbmVyIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHdpZHRoOiAwcHg7XFxuICBoZWlnaHQ6IDBweDtcXG4gIHRvcDogMHB4O1xcbiAgcmlnaHQ6IDBweDtcXG4gIHotaW5kZXg6IDIxNDc0ODM2NDc7XFxufVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA1NzZweCkge1xcbiAgLnBvcl9wb3J0aXMtY29udGFpbmVyIHtcXG4gICAgYm90dG9tOiAwO1xcbiAgICB0b3A6IGF1dG87XFxuICB9XFxufVxcblxcbi5wb3JfcG9ydGlzLXdpZGdldC1mcmFtZSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB3aWR0aDogMzc1cHg7XFxuICBoZWlnaHQ6IDA7XFxuICB0b3A6IDIwcHg7XFxuICByaWdodDogMjBweDtcXG4gIGJveC1zaGFkb3c6IDAgNXB4IDQwcHggcmdiYSgwLDAsMCwuMTYpO1xcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHotaW5kZXg6IDIxNDc0ODMwMDA7XFxufVxcblxcbkBtZWRpYSAobWF4LXdpZHRoOiA1NzZweCkge1xcbiAgLnBvcl9wb3J0aXMtd2lkZ2V0LWZyYW1lIHtcXG4gICAgYm90dG9tOiAwO1xcbiAgICB0b3A6IGF1dG87XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICByaWdodDogMDtcXG4gICAgbGVmdDogMDtcXG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxuICB9XFxufVxcblwiLCh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmNsYXNzTmFtZT1cInBvcl9wb3J0aXMtY29udGFpbmVyXCIsKHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuaWQ9XCJwb3J0aXMtY29udGFpbmVyLVwiK0RhdGUubm93KCksci5jbGFzc05hbWU9XCJwb3JfcG9ydGlzLXdpZGdldC1mcmFtZVwiLHQuYXBwZW5kQ2hpbGQociksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpLChuPXYuYS5jb25uZWN0VG9DaGlsZCh7dXJsOnRoaXMuX3dpZGdldFVybCxhcHBlbmRUbzpkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLmlkKSxtZXRob2RzOntzZXRIZWlnaHQ6dGhpcy5fc2V0SGVpZ2h0LmJpbmQodGhpcyksZ2V0V2luZG93U2l6ZTp0aGlzLl9nZXRXaW5kb3dTaXplLmJpbmQodGhpcyksb25Mb2dpbjp0aGlzLl9vbkxvZ2luLmJpbmQodGhpcyksb25Mb2dvdXQ6dGhpcy5fb25Mb2dvdXQuYmluZCh0aGlzKSxvbkFjdGl2ZVdhbGxldENoYW5nZWQ6dGhpcy5fb25BY3RpdmVXYWxsZXRDaGFuZ2VkLmJpbmQodGhpcyksb25FcnJvcjp0aGlzLl9vbkVycm9yLmJpbmQodGhpcyl9fSkpLmlmcmFtZS5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsbi5pZnJhbWUuc3R5bGUuaGVpZ2h0PVwiMTAwJVwiLG4uaWZyYW1lLnN0eWxlLndpZHRoPVwiMTAwJVwiLG4uaWZyYW1lLnN0eWxlLmJvcmRlcj1cIjAgdHJhbnNwYXJlbnRcIixbNCxuLnByb21pc2VdO2Nhc2UgMjpyZXR1cm4oaT1vLnNlbnQoKSkucmV0cmlldmVTZXNzaW9uKHRoaXMuY29uZmlnKSxbMix7Y29tbXVuaWNhdGlvbjppLGlmcmFtZTpuLmlmcmFtZSx3aWRnZXRGcmFtZTpyfV19fSkpfSkpfSxlLnByb3RvdHlwZS5faW5pdFByb3ZpZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1uZXcgaS5hLG49bmV3IEIocik7aWYoci5zZW5kPWZ1bmN0aW9uKGUsbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LGkpe3Iuc2VuZEFzeW5jKHtqc29ucnBjOlwiMi4wXCIsaWQ6NDIsbWV0aG9kOmUscGFyYW1zOm58fFtdfSwoZnVuY3Rpb24oZSxyKXtlP2koZSk6dChyLnJlc3VsdCl9KSl9KSk7aWYoIW4pe3ZhciBpPW51bGw7c3dpdGNoKGUubWV0aG9kKXtjYXNlXCJldGhfYWNjb3VudHNcIjpjYXNlXCJldGhfY29pbmJhc2VcIjppPXQuX3NlbGVjdGVkQWRkcmVzcz9bdC5fc2VsZWN0ZWRBZGRyZXNzXTpbXTticmVhaztjYXNlXCJuZXRfdmVyc2lvblwiOmk9dC5fbmV0d29yazticmVhaztjYXNlXCJldGhfdW5pbnN0YWxsRmlsdGVyXCI6ci5zZW5kQXN5bmMoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSksaT0hMDticmVhaztkZWZhdWx0OnZhciBvPVwiVGhlIFBvcnRpcyBXZWIzIG9iamVjdCBkb2VzIG5vdCBzdXBwb3J0IHN5bmNocm9ub3VzIG1ldGhvZHMgbGlrZSBcIitlLm1ldGhvZCtcIiB3aXRob3V0IGEgY2FsbGJhY2sgcGFyYW1ldGVyLlwiO3Rocm93IG5ldyBFcnJvcihvKX1yZXR1cm57aWQ6ZS5pZCxqc29ucnBjOmUuanNvbnJwYyxyZXN1bHQ6aX19ci5zZW5kQXN5bmMoZSxuKX0sci5hZGRQcm92aWRlcihuZXcgZi5hKHt3ZWIzX2NsaWVudFZlcnNpb246XCJQb3J0aXMvdlwiK3RoaXMuY29uZmlnLnZlcnNpb24rXCIvamF2YXNjcmlwdFwiLG5ldF9saXN0ZW5pbmc6ITAsZXRoX2hhc2hyYXRlOlwiMHgwMFwiLGV0aF9taW5pbmc6ITEsZXRoX3N5bmNpbmc6ITB9KSksci5hZGRQcm92aWRlcihuZXcgYS5hKSxyLmFkZFByb3ZpZGVyKG5ldyB5LmEpLHIuYWRkUHJvdmlkZXIobmV3IGMuYSksci5hZGRQcm92aWRlcihuZXcgcC5hKSxyLmFkZFByb3ZpZGVyKHtzZXRFbmdpbmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGhhbmRsZVJlcXVlc3Q6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBEKHQsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXtyZXR1cm4gVSh0aGlzLChmdW5jdGlvbih0KXtyZXR1cm4gZS5pZHx8KGUuaWQ9NDIpLHIoKSxbMl19KSl9KSl9fSksci5hZGRQcm92aWRlcihuZXcgZC5hKHtnZXRBY2NvdW50czpmdW5jdGlvbihlKXtyZXR1cm4gRCh0LHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHQscixuO3JldHVybiBVKHRoaXMsKGZ1bmN0aW9uKGkpe3N3aXRjaChpLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy53aWRnZXRdO2Nhc2UgMTpyZXR1cm5bNCxpLnNlbnQoKS5jb21tdW5pY2F0aW9uLmdldEFjY291bnRzKHRoaXMuY29uZmlnKV07Y2FzZSAyOnJldHVybiB0PWkuc2VudCgpLHI9dC5lcnJvcixuPXQucmVzdWx0LCFyJiZuJiYodGhpcy5fc2VsZWN0ZWRBZGRyZXNzPW5bMF0pLGUocixuKSxbMl19fSkpfSkpfSxzaWduVHJhbnNhY3Rpb246ZnVuY3Rpb24oZSxyKXtyZXR1cm4gRCh0LHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHQsbixpO3JldHVybiBVKHRoaXMsKGZ1bmN0aW9uKG8pe3N3aXRjaChvLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy53aWRnZXRdO2Nhc2UgMTpyZXR1cm5bNCxvLnNlbnQoKS5jb21tdW5pY2F0aW9uLnNpZ25UcmFuc2FjdGlvbihlLHRoaXMuY29uZmlnKV07Y2FzZSAyOnJldHVybiB0PW8uc2VudCgpLG49dC5lcnJvcixpPXQucmVzdWx0LHIobixpKSxbMl19fSkpfSkpfSxzaWduTWVzc2FnZTpmdW5jdGlvbihlLHIpe3JldHVybiBEKHQsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgdCxuLGksbyxhO3JldHVybiBVKHRoaXMsKGZ1bmN0aW9uKHMpe3N3aXRjaChzLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy53aWRnZXRdO2Nhc2UgMTpyZXR1cm4gdD1zLnNlbnQoKS5jb21tdW5pY2F0aW9uLG49T2JqZWN0LmFzc2lnbih7fSxlLHttZXNzYWdlU3RhbmRhcmQ6XCJzaWduTWVzc2FnZVwifSksWzQsdC5zaWduTWVzc2FnZShuLHRoaXMuY29uZmlnKV07Y2FzZSAyOnJldHVybiBpPXMuc2VudCgpLG89aS5lcnJvcixhPWkucmVzdWx0LHIobyxhKSxbMl19fSkpfSkpfSxzaWduUGVyc29uYWxNZXNzYWdlOmZ1bmN0aW9uKGUscil7cmV0dXJuIEQodCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciB0LG4saSxvLGE7cmV0dXJuIFUodGhpcywoZnVuY3Rpb24ocyl7c3dpdGNoKHMubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLndpZGdldF07Y2FzZSAxOnJldHVybiB0PXMuc2VudCgpLmNvbW11bmljYXRpb24sbj1PYmplY3QuYXNzaWduKHt9LGUse21lc3NhZ2VTdGFuZGFyZDpcInNpZ25QZXJzb25hbE1lc3NhZ2VcIn0pLFs0LHQuc2lnbk1lc3NhZ2Uobix0aGlzLmNvbmZpZyldO2Nhc2UgMjpyZXR1cm4gaT1zLnNlbnQoKSxvPWkuZXJyb3IsYT1pLnJlc3VsdCxyKG8sYSksWzJdfX0pKX0pKX0sc2lnblR5cGVkTWVzc2FnZTpmdW5jdGlvbihlLHIpe3JldHVybiBEKHQsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgdCxuLGksbyxhO3JldHVybiBVKHRoaXMsKGZ1bmN0aW9uKHMpe3N3aXRjaChzLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy53aWRnZXRdO2Nhc2UgMTpyZXR1cm4gdD1zLnNlbnQoKS5jb21tdW5pY2F0aW9uLG49T2JqZWN0LmFzc2lnbih7fSxlLHttZXNzYWdlU3RhbmRhcmQ6XCJzaWduVHlwZWRNZXNzYWdlXCJ9KSxbNCx0LnNpZ25NZXNzYWdlKG4sdGhpcy5jb25maWcpXTtjYXNlIDI6cmV0dXJuIGk9cy5zZW50KCksbz1pLmVycm9yLGE9aS5yZXN1bHQscihvLGEpLFsyXX19KSl9KSl9LHNpZ25UeXBlZE1lc3NhZ2VWMzpmdW5jdGlvbihlLHIpe3JldHVybiBEKHQsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgdCxuLGksbyxhO3JldHVybiBVKHRoaXMsKGZ1bmN0aW9uKHMpe3N3aXRjaChzLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy53aWRnZXRdO2Nhc2UgMTpyZXR1cm4gdD1zLnNlbnQoKS5jb21tdW5pY2F0aW9uLG49T2JqZWN0LmFzc2lnbih7fSxlLHttZXNzYWdlU3RhbmRhcmQ6XCJzaWduVHlwZWRNZXNzYWdlVjNcIn0pLFs0LHQuc2lnbk1lc3NhZ2Uobix0aGlzLmNvbmZpZyldO2Nhc2UgMjpyZXR1cm4gaT1zLnNlbnQoKSxvPWkuZXJyb3IsYT1pLnJlc3VsdCxyKG8sYSksWzJdfX0pKX0pKX0sZXN0aW1hdGVHYXM6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gRCh0LHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIFUodGhpcywoZnVuY3Rpb24oaSl7c3dpdGNoKGkubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxNKG4sZSldO2Nhc2UgMTpyZXR1cm4gdD1pLnNlbnQoKSxyKG51bGwsdCksWzJdfX0pKX0pKX0sZ2V0R2FzUHJpY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIEQodCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBVKHRoaXMsKGZ1bmN0aW9uKHQpe3JldHVybiBlKG51bGwsXCJcIiksWzJdfSkpfSkpfX0pKSxlLnBvY2tldERldklkKXt2YXIgbz1uZXcgai5hLlBvY2tldCh7ZGV2SUQ6ZS5wb2NrZXREZXZJZCxuZXR3b3JrTmFtZTpcIkVUSFwiLG5ldElEczpbdGhpcy5jb25maWcubmV0d29yay5jaGFpbklkXX0pO3IuYWRkUHJvdmlkZXIoe3NldEVuZ2luZTpmdW5jdGlvbihlKXtyZXR1cm4gZX0saGFuZGxlUmVxdWVzdDpmdW5jdGlvbihlLG4saSl7cmV0dXJuIEQodCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciB0LG4sYTtyZXR1cm4gVSh0aGlzLChmdW5jdGlvbihzKXtzd2l0Y2gocy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LG8uc2VuZFJlbGF5KG5ldyBqLmEuUmVsYXkoXCJFVEhcIix0aGlzLmNvbmZpZy5uZXR3b3JrLmNoYWluSWQsSlNPTi5zdHJpbmdpZnkoZSksby5jb25maWd1cmF0aW9uKSldO2Nhc2UgMTppZigodD1zLnNlbnQoKSlpbnN0YW5jZW9mIEVycm9yfHwhdClhPXR8fG5ldyBFcnJvcihcIlVua25vd24gZXJyb3JcIiksbj1udWxsO2Vsc2UgdHJ5e249SlNPTi5wYXJzZSh0KS5yZXN1bHQsYT1udWxsfWNhdGNoKGUpe249bnVsbCxhPWV9cmV0dXJuXCJuZXRfdmVyc2lvblwiPT09ZS5tZXRob2QmJih0aGlzLl9uZXR3b3JrPW4sci5uZXR3b3JrVmVyc2lvbj10aGlzLl9uZXR3b3JrKSxpKGEsbiksWzJdfX0pKX0pKX19KX1lbHNlIHIuYWRkUHJvdmlkZXIoe3NldEVuZ2luZTpmdW5jdGlvbihlKXtyZXR1cm4gZX0saGFuZGxlUmVxdWVzdDpmdW5jdGlvbihlLG4saSl7cmV0dXJuIEQodCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3ZhciB0LG4sbztyZXR1cm4gVSh0aGlzLChmdW5jdGlvbihhKXtzd2l0Y2goYS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMud2lkZ2V0XTtjYXNlIDE6cmV0dXJuWzQsYS5zZW50KCkuY29tbXVuaWNhdGlvbi5yZWxheShlLHRoaXMuY29uZmlnKV07Y2FzZSAyOnJldHVybiB0PWEuc2VudCgpLG49dC5lcnJvcixvPXQucmVzdWx0LFwibmV0X3ZlcnNpb25cIj09PWUubWV0aG9kJiYodGhpcy5fbmV0d29yaz1vLHIubmV0d29ya1ZlcnNpb249dGhpcy5fbmV0d29yayksaShuLG8pLFsyXX19KSl9KSl9fSk7cmV0dXJuIHIuZW5hYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe3Iuc2VuZEFzeW5jKHttZXRob2Q6XCJldGhfYWNjb3VudHNcIn0sKGZ1bmN0aW9uKHIsbil7cj90KHIpOmUobi5yZXN1bHQpfSkpfSkpfSxyLmlzQ29ubmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHIuaXNQb3J0aXM9ITAsci5vbihcImVycm9yXCIsKGZ1bmN0aW9uKGUpe2UmJmUubWVzc2FnZSYmZS5tZXNzYWdlLmluY2x1ZGVzKFwiUG9sbGluZ0Jsb2NrVHJhY2tlclwiKT9jb25zb2xlLndhcm4oXCJJZiB5b3Ugc2VlIHRoaXMgd2FybmluZyBjb25zdGFudGx5LCB0aGVyZSBtaWdodCBiZSBhbiBlcnJvciB3aXRoIHlvdXIgUlBDIG5vZGUuXCIpOmNvbnNvbGUuZXJyb3IoZSl9KSksci5zdGFydCgpLHJ9LGUucHJvdG90eXBlLl9zZXRIZWlnaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbigpe3JldHVybiBVKHRoaXMsKGZ1bmN0aW9uKHQpe3N3aXRjaCh0LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy53aWRnZXRdO2Nhc2UgMTpyZXR1cm4gdC5zZW50KCkud2lkZ2V0RnJhbWUuc3R5bGUuaGVpZ2h0PWUrXCJweFwiLFsyXX19KSl9KSl9LGUucHJvdG90eXBlLl9nZXRXaW5kb3dTaXplPWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJib2R5XCIpWzBdO3JldHVybnt3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRofHxlLmNsaWVudFdpZHRoLGhlaWdodDp3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR8fGUuY2xpZW50SGVpZ2h0fX0sZS5wcm90b3R5cGUuX29uTG9naW49ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX29uTG9naW5DYWxsYmFjayYmdGhpcy5fb25Mb2dpbkNhbGxiYWNrKGUsdCxyKX0sZS5wcm90b3R5cGUuX29uTG9nb3V0PWZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0ZWRBZGRyZXNzPVwiXCIsdGhpcy5fb25Mb2dvdXRDYWxsYmFjayYmdGhpcy5fb25Mb2dvdXRDYWxsYmFjaygpfSxlLnByb3RvdHlwZS5fb25BY3RpdmVXYWxsZXRDaGFuZ2VkPWZ1bmN0aW9uKGUpe3RoaXMuX29uQWN0aXZlV2FsbGV0Q2hhbmdlZENhbGxiYWNrJiZ0aGlzLl9vbkFjdGl2ZVdhbGxldENoYW5nZWRDYWxsYmFjayhlKX0sZS5wcm90b3R5cGUuX29uRXJyb3I9ZnVuY3Rpb24oZSl7dGhpcy5fb25FcnJvckNhbGxiYWNrJiZ0aGlzLl9vbkVycm9yQ2FsbGJhY2soZSl9LGUucHJvdG90eXBlLmNsZWFyU3VicHJvdmlkZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm92aWRlci5fcHJvdmlkZXJzLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZX0pKTt0aGlzLnByb3ZpZGVyLnJlbW92ZVByb3ZpZGVyKHQpLHRoaXMucHJvdmlkZXIuYWRkUHJvdmlkZXIobmV3IGUpfSxlfSgpO3QuZGVmYXVsdD1GfV0pLmRlZmF1bHR9KSk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@portis/web3/umd/index.js\n");

/***/ })

}]);