0?a-4:a;for(n=0;n>16&255,l[c++]=t>>8&255,l[c++]=255&t;2===s&&(t=i[e.charCodeAt(n)]<<2|i[e.charCodeAt(n+1)]>>4,l[c++]=255&t);1===s&&(t=i[e.charCodeAt(n)]<<10|i[e.charCodeAt(n+1)]<<4|i[e.charCodeAt(n+2)]>>2,l[c++]=t>>8&255,l[c++]=255&t);return l},n.fromByteArray=function(e){for(var t,n=e.length,i=n%3,o=[],a=0,s=n-i;as?s:a+16383));1===i?o.push(r[(t=e[n-1])>>2]+r[t<<4&63]+"=="):2===i&&o.push(r[(t=(e[n-2]<<8)+e[n-1])>>10]+r[t>>4&63]+r[t<<2&63]+"=");return o.join("")};for(var r=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,l=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function c(e,t,n){for(var i,o=[],a=t;a>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},{}],50:[function(e,t,n){(function(t){(function(){"use strict";var t=e("base64-js"),r=e("ieee754");n.Buffer=a,n.SlowBuffer=function(e){+e!=e&&(e=0);return a.alloc(+e)},n.INSPECT_MAX_BYTES=50;var i=2147483647;function o(e){if(e>i)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return t.__proto__=a.prototype,t}function a(e,t,n){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return u(e)}return s(e,t,n)}function s(e,t,n){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!a.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var n=0|h(e,t),r=o(n),i=r.write(e,t);i!==n&&(r=r.slice(0,i));return r}(e,t);if(ArrayBuffer.isView(e))return c(e);if(null==e)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(F(e,ArrayBuffer)||e&&F(e.buffer,ArrayBuffer))return function(e,t,n){if(t<0||e.byteLength=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|e}function h(e,t){if(a.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||F(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var n=e.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;for(var i=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return R(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return B(e).length;default:if(i)return r?-1:R(e).length;t=(""+t).toLowerCase(),i=!0}}function f(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function d(e,t,n,r,i){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),z(n=+n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof t&&(t=a.from(t,r)),a.isBuffer(t))return 0===t.length?-1:m(e,t,n,r,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):m(e,[t],n,r,i);throw new TypeError("val must be string, number or Buffer")}function m(e,t,n,r,i){var o,a=1,s=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,l/=2,n/=2}function u(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(i){var c=-1;for(o=n;os&&(n=s-l),o=n;o>=0;o--){for(var p=!0,h=0;hi&&(r=i):r=i;var o=t.length;r>o/2&&(r=o/2);for(var a=0;a>8,i.push(n%256),i.push(r);return i}(t,e.length-n),e,n,r)}function x(e,n,r){return t.fromByteArray(0===n&&r===e.length?e:e.slice(n,r))}function k(e,t,n){n=Math.min(e.length,n);for(var r=[],i=t;i239?4:u>223?3:u>191?2:1;if(i+p<=n)switch(p){case 1:u<128&&(c=u);break;case 2:128==(192&(o=e[i+1]))&&(l=(31&u)<<6|63&o)>127&&(c=l);break;case 3:a=e[i+2],128==(192&(o=e[i+1]))&&128==(192&a)&&(l=(15&u)<<12|(63&o)<<6|63&a)>2047&&(l<55296||l>57343)&&(c=l);break;case 4:a=e[i+2],s=e[i+3],128==(192&(o=e[i+1]))&&128==(192&a)&&128==(192&s)&&(l=(15&u)<<18|(63&o)<<12|(63&a)<<6|63&s)>65535&&l<1114112&&(c=l)}null===c?(c=65533,p=1):c>65535&&(r.push((c-=65536)>>>10&1023|55296),c=56320|1023&c),r.push(c),i+=p}return function(e){var t=e.length;if(t<=C)return String.fromCharCode.apply(String,e);var n="",r=0;for(;rthis.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return P(this,t,n);case"utf8":case"utf-8":return k(this,t,n);case"ascii":return E(this,t,n);case"latin1":case"binary":return A(this,t,n);case"base64":return x(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}.apply(this,arguments)},a.prototype.equals=function(e){if(!a.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===a.compare(this,e)},a.prototype.inspect=function(){var e="",t=n.INSPECT_MAX_BYTES;return e=this.toString("hex",0,t).replace(/(.{2})/g,"$1 ").trim(),this.length>t&&(e+=" ... "),""},a.prototype.compare=function(e,t,n,r,i){if(F(e,Uint8Array)&&(e=a.from(e,e.offset,e.byteLength)),!a.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(r>>>=0),s=(n>>>=0)-(t>>>=0),l=Math.min(o,s),u=this.slice(r,i),c=e.slice(t,n),p=0;p>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var i=this.length-t;if((void 0===n||n>i)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return v(this,e,t,n);case"utf8":case"utf-8":return b(this,e,t,n);case"ascii":return g(this,e,t,n);case"latin1":case"binary":return y(this,e,t,n);case"base64":return w(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var C=4096;function E(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;ir)&&(n=r);for(var i="",o=t;on)throw new RangeError("Trying to access beyond buffer length")}function T(e,t,n,r,i,o){if(!a.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function V(e,t,n,r,i,o){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function j(e,t,n,i,o){return t=+t,n>>>=0,o||V(e,0,n,4),r.write(e,t,n,i,23,4),n+4}function O(e,t,n,i,o){return t=+t,n>>>=0,o||V(e,0,n,8),r.write(e,t,n,i,52,8),n+8}a.prototype.slice=function(e,t){var n=this.length;(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>>=0,t>>>=0,n||S(e,t,this.length);for(var r=this[e],i=1,o=0;++o>>=0,t>>>=0,n||S(e,t,this.length);for(var r=this[e+--t],i=1;t>0&&(i*=256);)r+=this[e+--t]*i;return r},a.prototype.readUInt8=function(e,t){return e>>>=0,t||S(e,1,this.length),this[e]},a.prototype.readUInt16LE=function(e,t){return e>>>=0,t||S(e,2,this.length),this[e]|this[e+1]<<8},a.prototype.readUInt16BE=function(e,t){return e>>>=0,t||S(e,2,this.length),this[e]<<8|this[e+1]},a.prototype.readUInt32LE=function(e,t){return e>>>=0,t||S(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},a.prototype.readUInt32BE=function(e,t){return e>>>=0,t||S(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},a.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||S(e,t,this.length);for(var r=this[e],i=1,o=0;++o=(i*=128)&&(r-=Math.pow(2,8*t)),r},a.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||S(e,t,this.length);for(var r=t,i=1,o=this[e+--r];r>0&&(i*=256);)o+=this[e+--r]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},a.prototype.readInt8=function(e,t){return e>>>=0,t||S(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},a.prototype.readInt16LE=function(e,t){e>>>=0,t||S(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt16BE=function(e,t){e>>>=0,t||S(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt32LE=function(e,t){return e>>>=0,t||S(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},a.prototype.readInt32BE=function(e,t){return e>>>=0,t||S(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},a.prototype.readFloatLE=function(e,t){return e>>>=0,t||S(e,4,this.length),r.read(this,e,!0,23,4)},a.prototype.readFloatBE=function(e,t){return e>>>=0,t||S(e,4,this.length),r.read(this,e,!1,23,4)},a.prototype.readDoubleLE=function(e,t){return e>>>=0,t||S(e,8,this.length),r.read(this,e,!0,52,8)},a.prototype.readDoubleBE=function(e,t){return e>>>=0,t||S(e,8,this.length),r.read(this,e,!1,52,8)},a.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t>>>=0,n>>>=0,r)||T(this,e,t,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[t]=255&e;++o>>=0,n>>>=0,r)||T(this,e,t,n,Math.pow(2,8*n)-1,0);var i=n-1,o=1;for(this[t+i]=255&e;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+n},a.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,1,255,0),this[t]=255&e,t+1},a.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},a.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},a.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},a.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},a.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var i=Math.pow(2,8*n-1);T(this,e,t,n,i-1,-i)}var o=0,a=1,s=0;for(this[t]=255&e;++o>0)-s&255;return t+n},a.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var i=Math.pow(2,8*n-1);T(this,e,t,n,i-1,-i)}var o=n-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+n},a.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},a.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},a.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},a.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},a.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},a.prototype.writeFloatLE=function(e,t,n){return j(this,e,t,!0,n)},a.prototype.writeFloatBE=function(e,t,n){return j(this,e,t,!1,n)},a.prototype.writeDoubleLE=function(e,t,n){return O(this,e,t,!0,n)},a.prototype.writeDoubleBE=function(e,t,n){return O(this,e,t,!1,n)},a.prototype.copy=function(e,t,n,r){if(!a.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--o)e[o+t]=this[o+n];else Uint8Array.prototype.set.call(e,this.subarray(n,r),t);return i},a.prototype.fill=function(e,t,n,r){if("string"==typeof e){if("string"==typeof t?(r=t,t=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!a.isEncoding(r))throw new TypeError("Unknown encoding: "+r);if(1===e.length){var i=e.charCodeAt(0);("utf8"===r&&i<128||"latin1"===r)&&(e=i)}}else"number"==typeof e&&(e&=255);if(t<0||this.length>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function B(e){return t.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(D,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function I(e,t,n,r){for(var i=0;i=t.length||i>=e.length);++i)t[i+n]=e[i];return i}function F(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function z(e){return e!=e}}).call(this)}).call(this,e("buffer").Buffer)},{"base64-js":49,buffer:50,ieee754:51}],51:[function(e,t,n){n.read=function(e,t,n,r,i){var o,a,s=8*i-r-1,l=(1<>1,c=-7,p=n?i-1:0,h=n?-1:1,f=e[t+p];for(p+=h,o=f&(1<<-c)-1,f>>=-c,c+=s;c>0;o=256*o+e[t+p],p+=h,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=r;c>0;a=256*a+e[t+p],p+=h,c-=8);if(0===o)o=1-u;else{if(o===l)return a?NaN:Infinity*(f?-1:1);a+=Math.pow(2,r),o-=u}return(f?-1:1)*a*Math.pow(2,o-r)},n.write=function(e,t,n,r,i,o){var a,s,l,u=8*o-i-1,c=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:o-1,d=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||Infinity===t?(s=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),(t+=a+p>=1?h/l:h*Math.pow(2,1-p))*l>=2&&(a++,l/=2),a+p>=c?(s=0,a=c):a+p>=1?(s=(t*l-1)*Math.pow(2,i),a+=p):(s=t*Math.pow(2,p-1)*Math.pow(2,i),a=0));i>=8;e[n+f]=255&s,f+=d,s/=256,i-=8);for(a=a<0;e[n+f]=255&a,f+=d,a/=256,u-=8);e[n+f-d]|=128*m}},{}],52:[function(e,t,n){(function(e){(function(){e.CANVAS_SKETCH_DEFAULT_STORAGE_KEY=window.location.href}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[48,52]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtY2xpL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYWJzLXN2Zy1wYXRoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FkYXB0aXZlLWJlemllci1jdXJ2ZS9mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9hZGFwdGl2ZS1iZXppZXItY3VydmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWxtb3N0LWVxdWFsL2FsbW9zdF9lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9hbi1hcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hcnJheS1hbG1vc3QtZXF1YWwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYXJyYXktYWxtb3N0LWVxdWFsL25vZGVfbW9kdWxlcy9hbG1vc3QtZXF1YWwvYWxtb3N0X2VxdWFsLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9jb2xvci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvZ2VvbWV0cnkuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvY2xpcC9jbGlwLWxpbmUtdG8tY2lyY2xlLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvY2xpcC9jbGlwLXNlZ21lbnQtdG8tY2lyY2xlLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvY3NzLWNvbG9yLW5hbWVzLmpzb24iLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9jc3MtY29sb3IuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9oZXgtdG8tcmdiYS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL2hzbC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL29wdGltaXplLXBlbnBsb3QtcGF0aHMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9yZWxhdGl2ZS1sdW1pbmFuY2UuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9yZ2JhLXRvLWhleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL3ZlYzIuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi93cmFwLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9tYXRoLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9wZW5wbG90LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9yYW5kb20uanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL3NoYWRlci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9yaWdodC1ub3cvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2lzLXByb21pc2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9pcy1kb20vaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi91dGlsLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvcmVwZWF0LXN0cmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2tleXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2xpYi9pc19hcmd1bWVudHMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGF0ZWZvcm1hdC9saWIvZGF0ZWZvcm1hdC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL3BhZC1sZWZ0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvc2F2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2FjY2Vzc2liaWxpdHkuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9wYXBlci1zaXplcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZmluZWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9jb252ZXJ0LWxlbmd0aC9jb252ZXJ0LWxlbmd0aC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2Rpc3RhbmNlcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUvcmVzaXplQ2FudmFzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZ2V0LWNhbnZhcy1jb250ZXh0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY29yZS9jcmVhdGVDYW52YXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL1NrZXRjaE1hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL2tleWJvYXJkU2hvcnRjdXRzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY2FudmFzLXNrZXRjaC5qcyIsIm5vZGVfbW9kdWxlcy9jbG9uZS9jbG9uZS5qcyIsIm5vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0L2NvbnZlcnNpb25zLmpzIiwibm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29udmVydC1sZW5ndGgvY29udmVydC1sZW5ndGguanMiLCJub2RlX21vZHVsZXMvZDMtcGF0aC9kaXN0L2QzLXBhdGguanMiLCJub2RlX21vZHVsZXMvZGVmaW5lZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mbG9hdC1oc2wycmdiL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zsb2F0LXJnYjJoc2wvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbGluZWNsaXAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbm9ybWFsaXplLXN2Zy1wYXRoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlLWNvbG9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlLXN2Zy1wYXRoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3ByaW1pdGl2ZS1xdWFkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlZ2wvZGlzdC9yZWdsLmpzIiwibm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZXgtbm9pc2Uvc2ltcGxleC1ub2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9zdmctYXJjLXRvLWN1YmljLWJlemllci9janMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3ZnLXBhdGgtY29udG91cnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3ZnLXBhdGgtY29udG91cnMvbm9kZV9tb2R1bGVzL25vcm1hbGl6ZS1zdmctcGF0aC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90d2Vha3BhbmUvZGlzdC90d2Vha3BhbmUuanMiLCJub2RlX21vZHVsZXMvdmVjMi1jb3B5L2luZGV4LmpzIiwic2tldGNoLTA4LnRzIiwiLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2xpYi9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC1jbGkvbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtY2xpL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvbGliL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLWNsaS9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsImNhbnZhcy1za2V0Y2gtY2xpL2luamVjdGVkL3N0b3JhZ2Uta2V5LmpzIl0sIm5hbWVzIjpbInIiLCJlIiwibiIsInQiLCJvIiwiaSIsImYiLCJjIiwicmVxdWlyZSIsInUiLCJhIiwiRXJyb3IiLCJjb2RlIiwicCIsImV4cG9ydHMiLCJjYWxsIiwibGVuZ3RoIiwiMSIsIm1vZHVsZSIsInBhdGgiLCJzdGFydFgiLCJzdGFydFkiLCJ4IiwieSIsIm1hcCIsInNlZyIsInR5cGUiLCJzbGljZSIsImNvbW1hbmQiLCJ0b1VwcGVyQ2FzZSIsImNsb25lIiwicG9pbnQiLCJ2ZWMyIiwib3B0IiwiUkVDVVJTSU9OX0xJTUlUIiwicmVjdXJzaW9uIiwiRkxUX0VQU0lMT04iLCJlcHNpbG9uIiwiUEFUSF9ESVNUQU5DRV9FUFNJTE9OIiwicGF0aEVwc2lsb24iLCJjdXJ2ZV9hbmdsZV90b2xlcmFuY2VfZXBzaWxvbiIsImFuZ2xlRXBzaWxvbiIsIm1fYW5nbGVfdG9sZXJhbmNlIiwiYW5nbGVUb2xlcmFuY2UiLCJtX2N1c3BfbGltaXQiLCJjdXNwTGltaXQiLCJzdGFydCIsImMxIiwiYzIiLCJlbmQiLCJzY2FsZSIsInBvaW50cyIsImRpc3RhbmNlVG9sZXJhbmNlIiwicHVzaCIsInJlY3Vyc2l2ZSIsIngxIiwieTEiLCJ4MiIsInkyIiwieDMiLCJ5MyIsIng0IiwieTQiLCJsZXZlbCIsInBpIiwiTWF0aCIsIlBJIiwieDEyIiwieTEyIiwieDIzIiwieTIzIiwieDM0IiwieTM0IiwieDEyMyIsInkxMjMiLCJ4MjM0IiwieTIzNCIsIngxMjM0IiwieTEyMzQiLCJkYTEiLCJkYTIiLCJkeCIsImR5IiwiZDIiLCJhYnMiLCJkMyIsImEyMyIsImF0YW4yIiwiYmVnaW4iLCJtaW4iLCJhbG1vc3RFcXVhbCIsImIiLCJhYnNvbHV0ZUVycm9yIiwicmVsYXRpdmVFcnJvciIsImQiLCJEQkxfRVBTSUxPTiIsInN0ciIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiYXJyIiwiQllURVNfUEVSX0VMRU1FTlQiLCJidWZmZXIiLCJBcnJheSIsImlzQXJyYXkiLCJhbG1vc3QiLCJhYnNvbHV0ZVRvbGVyYW5jZSIsInJlbGF0aXZlVG9sZXJhbmNlIiwiZXZlcnkiLCJhMCIsImIwIiwiY3NzQ29sb3IiLCJuYW1lcyIsInJnYkx1bWluYW5jZSIsIkhTTFV0aWwiLCJoZXhUb1JHQkEiLCJSR0JBVG9IZXgiLCJwYXJzZSIsInN0eWxlIiwicmVsYXRpdmVMdW1pbmFuY2UiLCJjb2xvciIsInJlc3VsdCIsInJnYiIsImNvbnRyYXN0UmF0aW8iLCJjb2xvckEiLCJjb2xvckIiLCJtYXgiLCJvZmZzZXRIU0wiLCJoIiwicyIsImwiLCJoc2xhIiwiYmxlbmQiLCJiYWNrZ3JvdW5kIiwiZm9yZWdyb3VuZCIsIm9wYWNpdHkiLCJiZyIsImZnIiwiYzAiLCJyZ2JhIiwiYWxwaGEiLCJpc0Zpbml0ZSIsIlJHQkFUb0hTTEEiLCJIU0xBVG9SR0JBIiwibGluZWNsaXAiLCJhcnJheUFsbW9zdEVxdWFsIiwic3F1YXJlZERpc3RhbmNlIiwiYXJlUG9pbnRzQ29sbGluZWFyIiwicG9pbnQwIiwicG9pbnQxIiwicG9pbnQyIiwieDAiLCJ5MCIsInJlbW92ZUR1cGxpY2F0ZVBvaW50cyIsImxhc3RQb2ludCIsIm5ld1BhdGgiLCJjdXJQb2ludCIsInJlbW92ZUNvbGxpbmVhclBvaW50cyIsInJlbWFpbmluZ1BvaW50cyIsInAwIiwicDEiLCJwMiIsImNvbGxpbmVhciIsInNwbGljZSIsInNoaWZ0IiwiY2xpcFNlZ21lbnRUb0NpcmNsZSIsImNsaXBMaW5lVG9DaXJjbGUiLCJjbGlwUG9seWxpbmVzVG9Cb3giLCJwb2x5bGluZXMiLCJiYm94IiwiYm9yZGVyIiwiY2xvc2VMaW5lcyIsIkJvb2xlYW4iLCJsaW5lIiwicG9seWdvbiIsImZpbHRlciIsImxpbmVzIiwicG9seWxpbmUiLCJyZWR1Y2UiLCJjb25jYXQiLCJjcmVhdGVIYXRjaExpbmVzIiwiYm91bmRzIiwiYW5nbGUiLCJzcGFjaW5nIiwib3V0IiwieG1pbiIsInltaW4iLCJ4bWF4IiwieW1heCIsInciLCJzcXJ0Iiwicm90QW5nbGUiLCJjYSIsImNvcyIsInNhIiwic2luIiwiY3giLCJjeSIsImdldEJvdW5kcyIsImxvIiwiaGkiLCJqIiwicmFuZG9tIiwibWF0aCIsInBlbnBsb3QiLCJnZW9tZXRyeSIsInNoYWRlciIsInNxciIsImNpcmNsZSIsImNpcmNsZVJhZGl1cyIsImhpdHMiLCJkZWx0YSIsImRldCIsInNxcnREZXQiLCJwb2ludEluQ2lyY2xlIiwicHgiLCJweSIsInJhZGl1cyIsImRpc3RhbmNlIiwicHJvamVjdFBvaW50Iiwic3JjeCIsInNyY3kiLCJkZXN0eCIsImRlc3R5IiwiZGlzdCIsImNsb3Nlc3RQb2ludCIsInAxSW5DaXJjbGUiLCJwMkluQ2lyY2xlIiwidngiLCJ2eSIsInJhdGlvIiwiY2xvc2VzdFBvaW50T25MaW5lRnJvbVBvaW50IiwiaGl0QSIsImhpdEIiLCJjbG9zZXN0UG9pbnRPblNlZ21lbnRGcm9tUG9pbnQiLCJpbnRlcnNlY3QiLCJhbGljZWJsdWUiLCJhbnRpcXVld2hpdGUiLCJhcXVhIiwiYXF1YW1hcmluZSIsImF6dXJlIiwiYmVpZ2UiLCJiaXNxdWUiLCJibGFjayIsImJsYW5jaGVkYWxtb25kIiwiYmx1ZSIsImJsdWV2aW9sZXQiLCJicm93biIsImJ1cmx5d29vZCIsImNhZGV0Ymx1ZSIsImNoYXJ0cmV1c2UiLCJjaG9jb2xhdGUiLCJjb3JhbCIsImNvcm5mbG93ZXJibHVlIiwiY29ybnNpbGsiLCJjcmltc29uIiwiY3lhbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJrZ3JleSIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrc2xhdGVncmV5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRpbWdyZXkiLCJkb2RnZXJibHVlIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbiIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBpbmsiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJlYmVjY2FwdXJwbGUiLCJyZWQiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZSIsIndoaXRlc21va2UiLCJ5ZWxsb3ciLCJ5ZWxsb3dncmVlbiIsIndyYXAiLCJwYXJzZVN0eWxlIiwiVHlwZUVycm9yIiwiaGV4IiwidG9Mb3dlckNhc2UiLCJ0ZXN0IiwibWF0Y2giLCJleGVjIiwicmVwbGFjZSIsInBhcnRzIiwic3BsaXQiLCJyb3VuZCIsInBhcnNlRmxvYXQiLCJoc2wiLCJyZ2JTdHlsZSIsImciLCJqb2luIiwiaHNsU3R5bGUiLCJyZ2JTdHIiLCJwYXJzZUludCIsInJlcGVhdCIsIm51bSIsImZsb2F0SFNMMlJHQiIsImZsb2F0UkdCMkhTTCIsImZsb2F0SFNMIiwiaHVlIiwiZmxvYXRSR0IiLCJtZXJnZVBhdGhzIiwicGF0aHMiLCJwYXRoMUlkeCIsInBhdGgySWR4IiwibWluSWR4IiwibWF4SWR4IiwibWVyZ2VkUGF0aCIsInNvcnQiLCJuZXdQYXRocyIsImxhc3RQYXRoIiwiY3VyUHQiLCJjbG9zZXN0IiwibGFzdFB0IiwiZGlzdGFuY2VUb0ZpcnN0IiwiZGlzdGFuY2VUb0xhc3QiLCJpZHgiLCJyZXZlcnNlIiwiY2xvc2VzdFBhdGgiLCJtZXJnZSIsIm1lcmdlVGhyZWhzb2xkIiwibWVyZ2VUaHJlaHNvbGRTcSIsInJjIiwiZ2MiLCJiYyIsImxvd2MiLCJhZGp1c3RHYW1tYSIsInBvdyIsInJzcmdiIiwiZ3NyZ2IiLCJic3JnYiIsImFscGhhUGFyYW0iLCJwdDEiLCJwdDIiLCJ2YWx1ZSIsImZyb20iLCJ0byIsImN5Y2xlIiwiZmxvb3IiLCJkZWZpbmVkIiwiRVBTSUxPTiIsIk51bWJlciIsImNsYW1wIiwibGVycCIsImludmVyc2VMZXJwIiwidG9GaW5pdGUiLCJkZWZhdWx0VmFsdWUiLCJleHBhbmRWZWN0b3IiLCJkaW1zIiwic2NhbGFyIiwibGVycEFycmF5IiwibmV3QXJyYXkiLCJpbml0aWFsVmFsdWUiLCJtb2QiLCJkYW1wIiwibGFtYmRhIiwiZHQiLCJleHAiLCJmcmFjdCIsInNpZ24iLCJkZWdUb1JhZCIsInJhZFRvRGVnIiwicGluZ1BvbmciLCJsaW5zcGFjZSIsIm9wdHMiLCJlbmRwb2ludCIsIm9mZnNldCIsIl8iLCJsZXJwRnJhbWVzIiwidmFsdWVzIiwibGVuIiwid2hvbGUiLCJmcmFtZSIsIm5leHRGcmFtZSIsImNsYW1wMDEiLCJ2Iiwic21vb3Roc3RlcCIsImRhbXBBcnJheSIsIm1hcFJhbmdlIiwiaW5wdXRNaW4iLCJpbnB1dE1heCIsIm91dHB1dE1pbiIsIm91dHB1dE1heCIsIm91dFZhbCIsImV4cGFuZDJEIiwiZXhwYW5kM0QiLCJleHBhbmQ0RCIsImNvbnZlcnQiLCJzdmdQYXRoQ29udG91cnMiLCJzdmdQYXRoUGFyc2UiLCJzdmdQYXRoQWJzIiwic3ZnUGF0aEFyY3MiLCJvcHRpbWl6ZXIiLCJERUZBVUxUX1BFTl9USElDS05FU1MiLCJERUZBVUxUX1BFTl9USElDS05FU1NfVU5JVCIsIkRFRkFVTFRfUElYRUxTX1BFUl9JTkNIIiwicGF0aHNUb1NWR1BhdGhzIiwiaW5wdXRzIiwic3ZnUGF0aCIsImNvbnZlcnRUb1NWR1BhdGgiLCJwYXRoc1RvUG9seWxpbmVzIiwiY3VydmVSZXNvbHV0aW9uIiwidW5pdHMiLCJjb250b3VycyIsImVhY2hQYXRoIiwiZmVhdHVyZSIsImNvbW1hbmRzIiwiZm9yRWFjaCIsInN1YkNvbnRvdXIiLCJwYXRoc1RvU1ZHIiwid2lkdGgiLCJoZWlnaHQiLCJjb252ZXJ0T3B0aW9ucyIsInZpZXdVbml0cyIsInJvdW5kUGl4ZWwiLCJwcmVjaXNpb24iLCJwaXhlbHNQZXJJbmNoIiwiYXNzaWduIiwidW5kZWZpbmVkIiwib3B0aW1pemUiLCJvcHRpbWl6ZU9wdHMiLCJyZW1vdmVEdXBsaWNhdGVzIiwicmVtb3ZlQ29sbGluZWFyIiwic2hvdWxkU29ydCIsInNob3VsZE1lcmdlIiwic2hvdWxkUmVtb3ZlQ29sbGluZWFyIiwibWVyZ2VUaHJlc2hvbGQiLCJzdmdQYXRocyIsInZpZXdXaWR0aCIsInZpZXdIZWlnaHQiLCJmaWxsU3R5bGUiLCJzdHJva2VTdHlsZSIsImxpbmVXaWR0aCIsImxpbmVKb2luIiwibGluZUNhcCIsInBhdGhFbGVtZW50cyIsInRvQXR0ckxpc3QiLCJhcmdzIiwiYXR0ciIsInJlbmRlclBhdGhzIiwiY29udGV4dCIsImNsZWFyUmVjdCIsImZpbGxSZWN0IiwiYmVnaW5QYXRoIiwiZHJhd1NWR1BhdGgiLCJsaW5lVG8iLCJzdHJva2UiLCJjYW52YXMiLCJkYXRhIiwiZXh0ZW5zaW9uIiwiaW5wdXQiLCJpc0VtcHR5IiwiaXNQYXRoIiwiaXNQb2x5bGluZSIsInBvbHlsaW5lVG9TVkdQYXRoIiwiY2IiLCJtb3ZlVG8iLCJiZXppZXJDdXJ2ZVRvIiwiY3JlYXRlUGF0aCIsImZuIiwicXVhZHJhdGljQ3VydmVUbyIsImFyZ3VtZW50cyIsIl94MSIsIl95MSIsImFwcGx5IiwicG9seWxpbmVzVG9TVkciLCJjb25zb2xlIiwid2FybiIsInJlbmRlclBvbHlsaW5lcyIsInNlZWRSYW5kb20iLCJTaW1wbGV4Tm9pc2UiLCJjcmVhdGVSYW5kb20iLCJkZWZhdWx0U2VlZCIsImN1cnJlbnRTZWVkIiwiY3VycmVudFJhbmRvbSIsIm5vaXNlR2VuZXJhdG9yIiwiZGVmYXVsdFJhbmRvbSIsIl9uZXh0R2F1c3NpYW4iLCJfaGFzTmV4dEdhdXNzaWFuIiwic2V0U2VlZCIsImdldFNlZWQiLCJnZXRSYW5kb21TZWVkIiwiU3RyaW5nIiwidmFsdWVOb25aZXJvIiwicGVybXV0ZU5vaXNlIiwiY3JlYXRlTm9pc2UiLCJub2lzZTFEIiwiZnJlcXVlbmN5IiwiYW1wbGl0dWRlIiwibm9pc2UyRCIsIm5vaXNlM0QiLCJ6Iiwibm9pc2U0RCIsImJvb2xlYW4iLCJjaGFuY2UiLCJyYW5nZSIsInJhbmdlRmxvb3IiLCJwaWNrIiwiYXJyYXkiLCJzaHVmZmxlIiwicmFuZCIsInRtcCIsInJldCIsIm9uQ2lyY2xlIiwiaW5zaWRlQ2lyY2xlIiwib25TcGhlcmUiLCJwaGkiLCJ0aGV0YSIsImFjb3MiLCJpbnNpZGVTcGhlcmUiLCJrIiwiY2JydCIsInF1YXRlcm5pb24iLCJ1MSIsInUyIiwidTMiLCJzcTEiLCJzcTIiLCJ0aGV0YTEiLCJ0aGV0YTIiLCJ3ZWlnaHRlZCIsIndlaWdodGVkU2V0Iiwic2V0Iiwid2VpZ2h0ZWRTZXRJbmRleCIsImdhdXNzaWFuIiwibWVhbiIsInN0YW5kYXJkRGVyaXZhdGlvbiIsInYxIiwidjIiLCJtdWx0aXBsaWVyIiwibG9nIiwic2VlZCIsIndlaWdodCIsIndlaWdodHMiLCJ0b3RhbFdlaWdodCIsImNyZWF0ZVJlZ2wiLCJjcmVhdGVRdWFkIiwicGFyc2VDb2xvciIsImlzVGV4dHVyZUxpa2UiLCJnbCIsInJlZ2xPcHRzIiwiZXh0ZW5zaW9ucyIsIm9wdGlvbmFsRXh0ZW5zaW9ucyIsInByb2ZpbGUiLCJvbkRvbmUiLCJkcmF3UXVhZENvbW1hbmQiLCJyZWdsIiwicXVhZCIsInRleHR1cmVNYXAiLCJNYXAiLCJ1bmlmb3Jtc01hcCIsInVuaWZvcm1zIiwia2V5cyIsImtleSIsInN0YXRlIiwicHJvcHMiLCJiYXRjaElEIiwiaGFzIiwicHJldlRleCIsImdldCIsInRleHR1cmUiLCJzY2lzc29yIiwiZW5hYmxlIiwiYm94IiwicHJvcCIsImZyYWciLCJ2ZXJ0IiwiZnVuYyIsInNyY1JHQiIsInNyY0FscGhhIiwiZHN0UkdCIiwiZHN0QWxwaGEiLCJhdHRyaWJ1dGVzIiwicG9zaXRpb24iLCJwb3NpdGlvbnMiLCJlbGVtZW50cyIsImNlbGxzIiwiZXJyIiwiaGFuZGxlRXJyb3IiLCJjbGVhckNvbG9yIiwicGFyc2VkIiwiY2xlYXJBbHBoYSIsImNsZWFyIiwicmVuZGVyIiwicG9sbCIsImRlcHRoIiwic3RlbmNpbCIsImRyYXdRdWFkIiwiZmx1c2giLCJ1bmxvYWQiLCJkZXN0cm95IiwibWVzc2FnZSIsImdldE93blByb3BlcnR5U3ltYm9scyIsImhhc093blByb3BlcnR5IiwicHJvcElzRW51bWVyYWJsZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwib2JqZWN0QXNzaWduIiwidGVzdDEiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwidGVzdDIiLCJmcm9tQ2hhckNvZGUiLCJ0ZXN0MyIsImxldHRlciIsInNob3VsZFVzZU5hdGl2ZSIsInRhcmdldCIsInNvdXJjZSIsInN5bWJvbHMiLCJ2YWwiLCJ0b09iamVjdCIsImJyb3dzZXIiLCJjb21tb25qc0dsb2JhbCIsInBlcmZvcm1hbmNlIiwibm93IiwiRGF0ZSIsImlzUHJvbWlzZV8xIiwib2JqIiwidGhlbiIsImlzRG9tIiwid2luZG93IiwiTm9kZSIsIm5vZGVUeXBlIiwibm9kZU5hbWUiLCJnZXRDbGllbnRBUEkiLCJhcmd1bWVudHMkMSIsImlzQnJvd3NlciIsImRvY3VtZW50IiwiY2FjaGUiLCJzaGltIiwic3VwcG9ydHNBcmd1bWVudHNDbGFzcyIsInN1cHBvcnRlZCIsIm9iamVjdCIsInVuc3VwcG9ydGVkIiwicFNsaWNlIiwiZGVlcEVxdWFsIiwiYWN0dWFsIiwiZXhwZWN0ZWQiLCJnZXRUaW1lIiwic3RyaWN0IiwiaXNVbmRlZmluZWRPck51bGwiLCJpc19hcmd1bWVudHMiLCJpc0J1ZmZlciIsImthIiwia2IiLCJvYmpFcXVpdiIsImNvcHkiLCJnbG9iYWwiLCJ0b2tlbiIsInRpbWV6b25lIiwidGltZXpvbmVDbGlwIiwiZGF0ZUZvcm1hdCIsImRhdGUiLCJtYXNrIiwidXRjIiwiZ210IiwiaXNOYU4iLCJtYXNrU2xpY2UiLCJtYXNrcyIsIkQiLCJtIiwiSCIsIk0iLCJMIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJXIiwidGFyZ2V0VGh1cnNkYXkiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInNldERhdGUiLCJnZXREYXkiLCJmaXJzdFRodXJzZGF5IiwiZHMiLCJzZXRIb3VycyIsImdldEhvdXJzIiwiZ2V0V2VlayIsIk4iLCJkb3ciLCJnZXREYXlPZldlZWsiLCJmbGFncyIsImRkIiwicGFkIiwiZGRkIiwiaTE4biIsImRheU5hbWVzIiwiZGRkZCIsIm1tIiwibW1tIiwibW9udGhOYW1lcyIsIm1tbW0iLCJ5eSIsInl5eXkiLCJoaCIsIkhIIiwiTU0iLCJzcyIsInRpbWVOYW1lcyIsInR0IiwiVCIsIlRUIiwiWiIsInBvcCIsIlMiLCJkZWZhdWx0Iiwic2hvcnREYXRlIiwibWVkaXVtRGF0ZSIsImxvbmdEYXRlIiwiZnVsbERhdGUiLCJzaG9ydFRpbWUiLCJtZWRpdW1UaW1lIiwibG9uZ1RpbWUiLCJpc29EYXRlIiwiaXNvVGltZSIsImlzb0RhdGVUaW1lIiwiaXNvVXRjRGF0ZVRpbWUiLCJleHBpcmVzSGVhZGVyRm9ybWF0IiwicmVzIiwicmVwZWF0U3RyaW5nIiwic3Vic3RyIiwibGluayIsInBhZExlZnQiLCJjaCIsIm5vb3AiLCJkZWZhdWx0RXh0cyIsInByZWZpeCIsInN1ZmZpeCIsInN1cHBvcnRlZEVuY29kaW5ncyIsInN0cmVhbSIsImlzU3RhcnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZpbGVuYW1lIiwicmVzb2x2ZUZpbGVuYW1lIiwiY2xpZW50Iiwib3V0cHV0IiwiZXYiLCJzYXZlRGF0YVVSTCIsImRhdGFVUkwiLCJzcGxpdEluZGV4IiwiaW5kZXhPZiIsImJhc2U2NCIsImJ5dGVTdHJpbmciLCJhdG9iIiwibWltZU1hdGNoIiwibWltZSIsImFiIiwiQXJyYXlCdWZmZXIiLCJpYSIsIlVpbnQ4QXJyYXkiLCJjaGFyQ29kZUF0IiwiQmxvYiIsImNyZWF0ZUJsb2JGcm9tRGF0YVVSTCIsImJsb2IiLCJzYXZlQmxvYiIsImNyZWF0ZUVsZW1lbnQiLCJ2aXNpYmlsaXR5IiwiZG93bmxvYWQiLCJocmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYm9keSIsImFwcGVuZENoaWxkIiwib25jbGljayIsInNldFRpbWVvdXQiLCJyZXZva2VPYmplY3RVUkwiLCJwYXJlbnRFbGVtZW50IiwicmVtb3ZlQ2hpbGQiLCJyZW1vdmVBdHRyaWJ1dGUiLCJjbGljayIsImZpbGUiLCJ0b3RhbEZyYW1lcyIsImxheWVyU3RyIiwidG90YWxMYXllcnMiLCJsYXllciIsIm5hbWUiLCJ0aW1lU3RhbXAiLCJoYXNoIiwiY29tbW9uVHlwb3MiLCJkaW1lbnNpb24iLCJhbmltYXRlZCIsImFuaW1hdGluZyIsInVuaXQiLCJQNSIsInBpeGVsbGF0ZWQiLCJsb29waW5nIiwicGl4ZWxQZXJJbmNoIiwiYWxsS2V5cyIsImNoZWNrU2V0dGluZ3MiLCJzZXR0aW5ncyIsImluY2x1ZGVzIiwicGFwZXJTaXplcyIsImRpY3QiLCJwcmVzZXQiLCJpdGVtIiwiZGltZW5zaW9ucyIsImRlZmluZWQkMSIsImNvbnZlcnNpb25zIiwic3lzdGVtIiwiZmFjdG9yIiwiY20iLCJwdCIsInBjIiwiaW4iLCJmdCIsImFuY2hvcnMiLCJtZXRyaWMiLCJpbXBlcmlhbCIsImNvbnZlcnRMZW5ndGgiLCJmcm9tVW5pdCIsInRvVW5pdCIsInRvRmFjdG9yIiwiZnJvbUZhY3RvciIsImlzVG9QaXhlbCIsImZyb21Vbml0RGF0YSIsInRvVW5pdERhdGEiLCJhbmNob3IiLCJkZWNpbWFscyIsImNvbnZlcnREaXN0YW5jZSQxIiwidW5pdHNGcm9tIiwidW5pdHNUbyIsInJlc2l6ZUNhbnZhcyIsInN0eWxlV2lkdGgiLCJzdHlsZUhlaWdodCIsImNhbnZhc1dpZHRoIiwiY2FudmFzSGVpZ2h0IiwiaGFzRGltZW5zaW9ucyIsImNoZWNrSWZIYXNEaW1lbnNpb25zIiwiZXhwb3J0aW5nIiwic2NhbGVUb0ZpdCIsInNjYWxlVG9WaWV3IiwicGl4ZWxSYXRpbyIsImV4cG9ydFBpeGVsUmF0aW8iLCJibGVlZCIsImRldmljZVBpeGVsUmF0aW8iLCJiYXNlUGl4ZWxSYXRpbyIsIm1heFBpeGVsUmF0aW8iLCJ0cmltV2lkdGgiLCJ0cmltSGVpZ2h0IiwicmVmIiwiZWxlbWVudCIsInBhcmVudCIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImdldFBhcmVudFNpemUiLCJwYXJlbnRXaWR0aCIsInBhcmVudEhlaWdodCIsImdldERpbWVuc2lvbnNGcm9tUHJlc2V0IiwiaGlnaGVzdCIsImxvd2VzdCIsIm9yaWVudGF0aW9uIiwibGFuZHNjYXBlIiwicmVhbFdpZHRoIiwicmVhbEhlaWdodCIsImFzcGVjdCIsIndpbmRvd0FzcGVjdCIsInNjYWxlVG9GaXRQYWRkaW5nIiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJnZXRDYW52YXNDb250ZXh0XzEiLCJhdHRyaWJzIiwiZ2V0Q29udGV4dCIsImNyZWF0ZUNhbnZhcyIsIm93bnNDYW52YXMiLCJuZXdDYW52YXMiLCJjcmVhdGVDYW52YXNFbGVtZW50IiwicGl4ZWxhdGVkIiwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwibW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwib0ltYWdlU21vb3RoaW5nRW5hYmxlZCIsIndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCIsIm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwiU2tldGNoTWFuYWdlciIsIl9zZXR0aW5ncyIsIl9wcm9wcyIsIl9za2V0Y2giLCJfcmFmIiwiX3JlY29yZFRpbWVvdXQiLCJfbGFzdFJlZHJhd1Jlc3VsdCIsIl9pc1A1UmVzaXppbmciLCJfa2V5Ym9hcmRTaG9ydGN1dHMiLCJoYW5kbGVyIiwiZW5hYmxlZCIsImtleUNvZGUiLCJhbHRLZXkiLCJtZXRhS2V5IiwiY3RybEtleSIsInRvZ2dsZVBsYXkiLCJwcmV2ZW50RGVmYXVsdCIsImNvbW1pdCIsInNhdmUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImtleWJvYXJkU2hvcnRjdXRzIiwidGhpcyQxIiwiaG90a2V5cyIsInNoaWZ0S2V5IiwicmVjb3JkaW5nIiwiZW5kUmVjb3JkIiwicnVuIiwicmVjb3JkIiwiZXhwb3J0RnJhbWUiLCJwbGF5aW5nIiwicGF1c2UiLCJwbGF5IiwiX2FuaW1hdGVIYW5kbGVyIiwiYW5pbWF0ZSIsIl9yZXNpemVIYW5kbGVyIiwicmVzaXplIiwic2tldGNoIiwidGhpcyIsIl9jb21wdXRlUGxheWhlYWQiLCJjdXJyZW50VGltZSIsImR1cmF0aW9uIiwiX2NvbXB1dGVGcmFtZSIsInBsYXloZWFkIiwidGltZSIsImZwcyIsIl9jb21wdXRlQ3VycmVudEZyYW1lIiwiX2dldFNpemVQcm9wcyIsInZpZXdwb3J0V2lkdGgiLCJ2aWV3cG9ydEhlaWdodCIsImRpc3Bvc2UiLCJzdGFydGVkIiwiX3NpZ25hbEJlZ2luIiwidGljayIsIl9jYW5jZWxUaW1lb3V0cyIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiX2xhc3RUaW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZXJyb3IiLCJzdG9wIiwiZGVsdGFUaW1lIiwiZXhwb3J0T3B0cyIsIl9jcmVhdGVFeHBvcnRPcHRpb25zIiwiZnJhbWVJbnRlcnZhbCIsIl9zaWduYWxFbmQiLCJiZWdpblJlY29yZCIsIl93cmFwQ29udGV4dFNjYWxlIiwiY2F0Y2giLCJyZXNwb25zZSIsIndhc1JlY29yZGluZyIsInNlcXVlbmNlIiwiZW5jb2RpbmciLCJlbmNvZGluZ1F1YWxpdHkiLCJkYXRlZm9ybWF0IiwiYWxsIiwicHJlRXhwb3J0IiwiY29tbWl0T3B0cyIsIl9kb0V4cG9ydEZyYW1lIiwiZHJhd1Jlc3VsdCIsImhhc0RhdGFPYmplY3QiLCJ0b0RhdGFVUkwiLCJleHBvcnRDYW52YXMiLCJsYXllckxpc3QiLCJjdXJPcHQiLCJzYXZlUGFyYW0iLCJzYXZlUHJvbWlzZSIsInNhdmVGaWxlIiwic2F2ZVJlc3VsdCIsInNhdmVkRXZlbnRzIiwiZXZlbnRXaXRoT3V0cHV0IiwiZmluZCIsIm91dHB1dE5hbWUiLCJpc0NsaWVudCIsInNvbWUiLCJpc1N0cmVhbWluZyIsIm9mU2VxIiwicG9zdEV4cG9ydCIsIl9wcmVSZW5kZXIiLCJfcG9zdFJlbmRlciIsInA1Iiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVDb250ZXh0IiwicmVzdG9yZSIsInJlZHJhdyIsInN1Ym1pdERyYXdDYWxsIiwidXBkYXRlIiwibm90WWV0U3VwcG9ydGVkIiwib2xkQ2FudmFzIiwib2xkQ29udGV4dCIsInRpbWVPcHRzIiwidGltZVByb3BzIiwiZ2V0VGltZVByb3BzIiwiX3NldHVwR0xLZXkiLCJfYXBwZW5kQ2FudmFzSWZOZWVkZWQiLCJkcmF3Iiwib2xkU2l6ZXMiLCJuZXdQcm9wcyIsInBpeGVsRGVuc2l0eSIsInN0eWxlQ2FudmFzIiwibmV3U2l6ZXMiLCJjaGFuZ2VkIiwiZGVlcEVxdWFsXzEiLCJfc2l6ZUNoYW5nZWQiLCJmcmFtZUludGVydmFsTVMiLCJkZWx0YVRpbWVNUyIsImhhc0R1cmF0aW9uIiwiaXNOZXdGcmFtZSIsInBsYXliYWNrUmF0ZSIsIm5ld1RpbWUiLCJ0aW1lU2NhbGUiLCJpc0ZpbmlzaGVkIiwiaXNMb29wU3RhcnQiLCJsb29wIiwibGFzdEZyYW1lIiwiZGlzcGF0Y2giLCJtb3VudCIsInVubW91bnQiLCJkZXRhY2giLCJjdHgiLCJidWZmZXJEYXRhIiwiaGFzVG90YWxGcmFtZXMiLCJ0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiIsImR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzIiwiSW5maW5pdHkiLCJzdGFydFRpbWUiLCJzdGFydEZyYW1lIiwiaGFzU3RhcnRUaW1lIiwiaGFzU3RhcnRGcmFtZSIsInNldHVwIiwibG9hZEFuZFJ1biIsImNhbnZhc1NrZXRjaCIsIm5ld1NldHRpbmdzIiwibG9hZCIsImNyZWF0ZVNrZXRjaCIsInByZWxvYWQiLCJQNUNvbnN0cnVjdG9yIiwicDVTa2V0Y2giLCJpc0dMIiwicmVuZGVyZXIiLCJXRUJHTCIsIlAyRCIsIm5vTG9vcCIsInNldEF0dHJpYnV0ZXMiLCJfcmVuZGVyZXIiLCJkcmF3aW5nQ29udGV4dCIsImxvYWRlciIsImF0dGFjaCIsIkNBQ0hFIiwicnVudGltZUNvbGxpc2lvbnMiLCJob3RJRCIsImlzSG90IiwiaG90IiwiaWQiLCJpc0luamVjdGluZyIsInByZXZpb3VzRGF0YSIsImNhY2hlR2V0IiwibmV4dCIsIm9sZE1hbmFnZXIiLCJtYW5hZ2VyIiwiUGFwZXJTaXplcyIsIl9pbnN0YW5jZW9mIiwibmF0aXZlTWFwIiwibmF0aXZlU2V0IiwibmF0aXZlUHJvbWlzZSIsIlNldCIsImNpcmN1bGFyIiwiaW5jbHVkZU5vbkVudW1lcmFibGUiLCJhbGxQYXJlbnRzIiwiYWxsQ2hpbGRyZW4iLCJ1c2VCdWZmZXIiLCJCdWZmZXIiLCJfY2xvbmUiLCJjaGlsZCIsInByb3RvIiwiX19pc0FycmF5IiwiX19pc1JlZ0V4cCIsIlJlZ0V4cCIsIl9fZ2V0UmVnRXhwRmxhZ3MiLCJsYXN0SW5kZXgiLCJfX2lzRGF0ZSIsImFsbG9jVW5zYWZlIiwiY3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJpbmRleCIsImtleUNoaWxkIiwidmFsdWVDaGlsZCIsImVudHJ5Q2hpbGQiLCJhZGQiLCJhdHRycyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInN5bWJvbCIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiZGVmaW5lUHJvcGVydHkiLCJhbGxQcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiX19vYmpUb1N0ciIsInJlIiwiaWdub3JlQ2FzZSIsIm11bHRpbGluZSIsImNsb25lUHJvdG90eXBlIiwicmdiMmhzbCIsInJnYjJoc3YiLCJyZ2IyaHdiIiwicmdiMmNteWsiLCJyZ2Iya2V5d29yZCIsInJldmVyc2VLZXl3b3JkcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZ2IyeHl6IiwicmdiMmxhYiIsInh5eiIsImhzbDJyZ2IiLCJ0MSIsInQyIiwidDMiLCJoc3YycmdiIiwiaHN2IiwicSIsImh3YjJyZ2IiLCJod2IiLCJ3aCIsImJsIiwiY215azJyZ2IiLCJjbXlrIiwieHl6MnJnYiIsInh5ejJsYWIiLCJsYWIyeHl6IiwibGFiIiwibGFiMmxjaCIsImxhYjJyZ2IiLCJsY2gybGFiIiwibGNoIiwiaHIiLCJrZXl3b3JkMnJnYiIsImtleXdvcmQiLCJjc3NLZXl3b3JkcyIsInJnYjJsY2giLCJoc2wyaHN2IiwiaHNsMmh3YiIsImhzbDJjbXlrIiwiaHNsMmtleXdvcmQiLCJoc3YyaHNsIiwic2wiLCJoc3YyaHdiIiwiaHN2MmNteWsiLCJoc3Yya2V5d29yZCIsImh3YjJoc2wiLCJod2IyaHN2IiwiaHdiMmNteWsiLCJod2Iya2V5d29yZCIsImNteWsyaHNsIiwiY215azJoc3YiLCJjbXlrMmh3YiIsImNteWsya2V5d29yZCIsImtleXdvcmQyaHNsIiwia2V5d29yZDJoc3YiLCJrZXl3b3JkMmh3YiIsImtleXdvcmQyY215ayIsImtleXdvcmQybGFiIiwia2V5d29yZDJ4eXoiLCJ4eXoybGNoIiwibGNoMnh5eiIsImxjaDJyZ2IiLCJDb252ZXJ0ZXIiLCJhcmciLCJwYWlyIiwiY29udnMiLCJyb3V0ZVNwYWNlIiwic3BhY2UiLCJnZXRWYWx1ZXMiLCJzZXRWYWx1ZXMiLCJ2YWxzIiwiZnNwYWNlIiwiZmFjdG9yeSIsInRhdSIsInRhdUVwc2lsb24iLCJQYXRoIiwiX3gwIiwiX3kwIiwiY29uc3RydWN0b3IiLCJjbG9zZVBhdGgiLCJhcmNUbyIsIngyMSIsInkyMSIsIngwMSIsInkwMSIsImwwMV8yIiwieDIwIiwieTIwIiwibDIxXzIiLCJsMjBfMiIsImwyMSIsImwwMSIsInQwMSIsInQyMSIsImFyYyIsImExIiwiY2N3IiwiY3ciLCJkYSIsInJlY3QiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiY29kZUIiLCJsYXN0Q29kZSIsImNvZGVBIiwiYml0Q29kZSIsInBhcnQiLCJlZGdlIiwicHJldiIsInByZXZJbnNpZGUiLCJpbnNpZGUiLCJiZXppZXJYIiwiYmV6aWVyWSIsInF1YWRYIiwicXVhZFkiLCJjdXJ2ZXMiLCJhcmNUb0N1cnZlIiwicngiLCJyeSIsInhBeGlzUm90YXRpb24iLCJsYXJnZUFyY0ZsYWciLCJzd2VlcEZsYWciLCJxdWFkcmF0aWMiLCJjc3RyIiwiY29udiIsInNpemUiLCJiYXNlIiwiaHN2YSIsImNteWthIiwic2VnbWVudCIsIm51bWJlcnMiLCJudW1iZXIiLCJwYXJzZVZhbHVlcyIsInVuc2hpZnQiLCJub3JtYWxzIiwidXZzIiwiaXNUeXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkludDhBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJleHRlbmQiLCJlbmRsIiwicmFpc2UiLCJjaGVjayIsInByZWQiLCJlbmNvbG9uIiwic3RhbmRhcmRUeXBlRWgiLCJjaGVja09uZU9mIiwibGlzdCIsImNvbnN0cnVjdG9yS2V5cyIsImxlZnRQYWQiLCJTaGFkZXJGaWxlIiwiaGFzRXJyb3JzIiwiU2hhZGVyTGluZSIsImVycm9ycyIsIlNoYWRlckVycm9yIiwiZmlsZU51bWJlciIsImxpbmVOdW1iZXIiLCJndWVzc0NvbW1hbmQiLCJzdGFjayIsInBhdCIsInBhdDIiLCJndWVzc0NhbGxTaXRlIiwicGFyc2VTb3VyY2UiLCJmaWxlcyIsInVua25vd24iLCIwIiwibGluZU51bWJlckluZm8iLCJuYW1lSW5mbyIsInNhdmVDb21tYW5kUmVmIiwiX2NvbW1hbmRSZWYiLCJjb21tYW5kUmFpc2UiLCJjYWxsU2l0ZSIsImNoZWNrQ29tbWFuZFR5cGUiLCJHTF9DTEFNUF9UT19FREdFIiwiR0xfTkVBUkVTVCIsIkdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QiLCJHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QiLCJHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIiLCJHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiIsIkdMX0ZMT0FUIiwiR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCIsIkdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEiLCJHTF9VTlNJR05FRF9TSE9SVF81XzZfNSIsIkdMX1VOU0lHTkVEX0lOVF8yNF84X1dFQkdMIiwiVFlQRV9TSVpFIiwicGl4ZWxTaXplIiwiY2hhbm5lbHMiLCJpc1BvdzIiLCJjaGVjayQxIiwib3B0aW9uYWwiLCJibG9jayIsInBhcmFtZXRlciIsInBhcmFtIiwicG9zc2liaWxpdGllcyIsImNvbW1hbmRQYXJhbWV0ZXIiLCJjb21tYW5kVHlwZSIsIm5uaSIsIm9uZU9mIiwic2hhZGVyRXJyb3IiLCJnZXRTaGFkZXJQYXJhbWV0ZXIiLCJDT01QSUxFX1NUQVRVUyIsImVyckxvZyIsImdldFNoYWRlckluZm9Mb2ciLCJ0eXBlTmFtZSIsIkZSQUdNRU5UX1NIQURFUiIsImVyck1zZyIsInRyaW0iLCJwYXJzZUVycm9yTG9nIiwiYW5ub3RhdGVGaWxlcyIsInN0cmluZ3MiLCJzdHlsZXMiLCJ0b2tlblBhdCIsImNocm9tZSIsImxpbmtFcnJvciIsInByb2dyYW0iLCJmcmFnU2hhZGVyIiwidmVydFNoYWRlciIsImdldFByb2dyYW1QYXJhbWV0ZXIiLCJMSU5LX1NUQVRVUyIsImdldFByb2dyYW1JbmZvTG9nIiwiZnJhZ1BhcnNlIiwiaGVhZGVyIiwic2F2ZURyYXdJbmZvIiwic3RyaW5nU3RvcmUiLCJhZGRQcm9wcyIsIl9mcmFnSWQiLCJzdGF0aWMiLCJfdmVydElkIiwidW5pZm9ybVNldCIsIl91bmlmb3JtU2V0IiwiZHluYW1pYyIsImF0dHJpYnV0ZVNldCIsIl9hdHRyaWJ1dGVTZXQiLCJfaGFzQ291bnQiLCJmcmFtZWJ1ZmZlckZvcm1hdCIsImF0dGFjaG1lbnQiLCJ0ZXhGb3JtYXRzIiwicmJGb3JtYXRzIiwiX3RleHR1cmUiLCJpbnRlcm5hbGZvcm1hdCIsInJlbmRlcmJ1ZmZlciIsIl9yZW5kZXJidWZmZXIiLCJmb3JtYXQiLCJ0ZXh0dXJlMkQiLCJpbmZvIiwibWlwRGF0YSIsImxpbWl0cyIsIm1heFRleHR1cmVTaXplIiwid3JhcFMiLCJ3cmFwVCIsIm1pcG1hc2siLCJtaW5GaWx0ZXIiLCJtYWdGaWx0ZXIiLCJnZW5NaXBtYXBzIiwibWlwaW1hZ2VzIiwiaW1hZ2VzIiwibXciLCJtaCIsImltZyIsImNvbXByZXNzZWQiLCJyb3dTaXplIiwiY2VpbCIsInVucGFja0FsaWdubWVudCIsImJ5dGVMZW5ndGgiLCJ0ZXh0dXJlQ3ViZSIsImZhY2VzIiwiZmFjZSIsIm1pcG1hcHMiLCJWQVJJQUJMRV9DT1VOVEVSIiwiRFlOX0ZVTkMiLCJEWU5fQ09OU1RBTlQiLCJEWU5fQVJSQVkiLCJEeW5hbWljVmFyaWFibGUiLCJlc2NhcGVTdHIiLCJ0b0FjY2Vzc29yU3RyaW5nIiwic3BsaXRQYXJ0cyIsImZpcnN0Q2hhciIsImNoYXJBdCIsImxhc3RDaGFyIiwic3VicGFydHMiLCJpc0R5bmFtaWMiLCJfcmVnbFR5cGUiLCJ1bmJveCIsImFjY2Vzc29yIiwicmFmIiwiY2FuY2VsIiwiY2xlYXJUaW1lb3V0IiwiY2xvY2siLCJwYXJzZUV4dGVuc2lvbnMiLCJnZXRFbGVtZW50IiwiZGVzYyIsInF1ZXJ5U2VsZWN0b3IiLCJwYXJzZUFyZ3MiLCJhcmdzXyIsImNvbnRhaW5lciIsImNvbnRleHRBdHRyaWJ1dGVzIiwib25EZXN0cm95IiwiZHJhd0FycmF5cyIsImRyYXdFbGVtZW50cyIsImlzV2ViR0xDb250ZXh0IiwicmVzaXplT2JzZXJ2ZXIiLCJyaWdodCIsImxlZnQiLCJib3R0b20iLCJ0b3AiLCJtYXJnaW4iLCJwYWRkaW5nIiwiUmVzaXplT2JzZXJ2ZXIiLCJvYnNlcnZlIiwiZGlzY29ubmVjdCIsInByZW11bHRpcGxpZWRBbHBoYSIsImNyZWF0ZUNvbnRleHQiLCJHTF9CWVRFJDEiLCJHTF9VTlNJR05FRF9CWVRFJDIiLCJHTF9TSE9SVCQxIiwiR0xfVU5TSUdORURfU0hPUlQkMSIsIkdMX0lOVCQxIiwiR0xfVU5TSUdORURfSU5UJDEiLCJHTF9GTE9BVCQyIiwibG9nMiIsImNyZWF0ZVBvb2wiLCJidWZmZXJQb29sIiwiYWxsb2MiLCJzeiIsIm5leHRQb3cxNiIsImJpbiIsImZyZWUiLCJidWYiLCJhbGxvY1R5cGUiLCJzdWJhcnJheSIsImZyZWVUeXBlIiwicG9vbCIsInplcm8iLCJ3cmFwTGltaXRzIiwibWF4QW5pc290cm9waWMiLCJleHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiLCJnZXRQYXJhbWV0ZXIiLCJtYXhEcmF3YnVmZmVycyIsIm1heENvbG9yQXR0YWNobWVudHMiLCJ3ZWJnbF9kcmF3X2J1ZmZlcnMiLCJyZWFkRmxvYXQiLCJvZXNfdGV4dHVyZV9mbG9hdCIsInJlYWRGbG9hdFRleHR1cmUiLCJjcmVhdGVUZXh0dXJlIiwiYmluZFRleHR1cmUiLCJ0ZXhJbWFnZTJEIiwiZmJvIiwiY3JlYXRlRnJhbWVidWZmZXIiLCJiaW5kRnJhbWVidWZmZXIiLCJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCJ2aWV3cG9ydCIsInBpeGVscyIsInJlYWRQaXhlbHMiLCJnZXRFcnJvciIsImRlbGV0ZUZyYW1lYnVmZmVyIiwiZGVsZXRlVGV4dHVyZSIsIm5wb3RUZXh0dXJlQ3ViZSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImFwcFZlcnNpb24iLCJjdWJlVGV4dHVyZSIsImFjdGl2ZVRleHR1cmUiLCJjb2xvckJpdHMiLCJkZXB0aEJpdHMiLCJzdGVuY2lsQml0cyIsInN1YnBpeGVsQml0cyIsImV4dCIsInBvaW50U2l6ZURpbXMiLCJsaW5lV2lkdGhEaW1zIiwibWF4Vmlld3BvcnREaW1zIiwibWF4Q29tYmluZWRUZXh0dXJlVW5pdHMiLCJtYXhDdWJlTWFwU2l6ZSIsIm1heFJlbmRlcmJ1ZmZlclNpemUiLCJtYXhUZXh0dXJlVW5pdHMiLCJtYXhBdHRyaWJ1dGVzIiwibWF4VmVydGV4VW5pZm9ybXMiLCJtYXhWZXJ0ZXhUZXh0dXJlVW5pdHMiLCJtYXhWYXJ5aW5nVmVjdG9ycyIsIm1heEZyYWdtZW50VW5pZm9ybXMiLCJnbHNsIiwidmVuZG9yIiwidmVyc2lvbiIsImlzTkRBcnJheUxpa2UiLCJzaGFwZSIsInN0cmlkZSIsImZsYXR0ZW5VdGlscyIsImFycmF5XyIsImZsYXR0ZW4iLCJvdXRfIiwibngiLCJmbGF0dGVuMUQiLCJueSIsInB0ciIsInJvdyIsImZsYXR0ZW4yRCIsImZsYXR0ZW4zRCIsImZsYXR0ZW5SZWMiLCJueiIsInB0cl8iLCJjb2wiLCJhcnJheVR5cGVzIiwiW29iamVjdCBJbnQ4QXJyYXldIiwiW29iamVjdCBJbnQxNkFycmF5XSIsIltvYmplY3QgSW50MzJBcnJheV0iLCJbb2JqZWN0IFVpbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLCJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIltvYmplY3QgVWludDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDY0QXJyYXldIiwiW29iamVjdCBBcnJheUJ1ZmZlcl0iLCJnbFR5cGVzIiwiaW50OCIsImludDE2IiwiaW50MzIiLCJ1aW50OCIsInVpbnQxNiIsInVpbnQzMiIsImZsb2F0IiwiZmxvYXQzMiIsInVzYWdlVHlwZXMiLCJhcnJheUZsYXR0ZW4iLCJhcnJheVNoYXBlIiwiR0xfU1RBVElDX0RSQVciLCJHTF9TVFJFQU1fRFJBVyIsIkdMX1VOU0lHTkVEX0JZVEUkMyIsIkdMX0ZMT0FUJDMiLCJEVFlQRVNfU0laRVMiLCJ0eXBlZEFycmF5Q29kZSIsImNvcHlBcnJheSIsImlucCIsInRyYW5zcG9zZSIsInNoYXBlWCIsInNoYXBlWSIsInN0cmlkZVgiLCJzdHJpZGVZIiwicHJpbVR5cGVzIiwidHJpYW5nbGVzIiwidHJpYW5nbGUiLCJsaW5lIGxvb3AiLCJsaW5lIHN0cmlwIiwidHJpYW5nbGUgc3RyaXAiLCJ0cmlhbmdsZSBmYW4iLCJHTF9QT0lOVFMiLCJHTF9MSU5FUyIsIkdMX1RSSUFOR0xFUyIsIkdMX0JZVEUkMiIsIkdMX1VOU0lHTkVEX0JZVEUkNCIsIkdMX1NIT1JUJDIiLCJHTF9VTlNJR05FRF9TSE9SVCQyIiwiR0xfSU5UJDIiLCJHTF9VTlNJR05FRF9JTlQkMiIsIkdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSIiwiR0xfU1RSRUFNX0RSQVckMSIsIkdMX1NUQVRJQ19EUkFXJDEiLCJGTE9BVCIsIklOVCIsIkdMX1VOU0lHTkVEX1NIT1JUJDQiLCJjb252ZXJ0VG9IYWxmRmxvYXQiLCJ1c2hvcnRzIiwic2duIiwiZnJhYyIsImlzQXJyYXlMaWtlIiwiaXNQb3cyJDEiLCJHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIsIkdMX1RFWFRVUkVfMkQkMSIsIkdMX1RFWFRVUkVfQ1VCRV9NQVAkMSIsIkdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQxIiwiR0xfUkdCQSQxIiwiR0xfQUxQSEEiLCJHTF9SR0IiLCJHTF9MVU1JTkFOQ0UiLCJHTF9MVU1JTkFOQ0VfQUxQSEEiLCJHTF9SR0JBNCIsIkdMX1JHQjVfQTEiLCJHTF9SR0I1NjUiLCJHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80JDEiLCJHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xJDEiLCJHTF9VTlNJR05FRF9TSE9SVF81XzZfNSQxIiwiR0xfVU5TSUdORURfSU5UXzI0XzhfV0VCR0wkMSIsIkdMX0RFUFRIX0NPTVBPTkVOVCIsIkdMX0RFUFRIX1NURU5DSUwiLCJHTF9TUkdCX0VYVCIsIkdMX1NSR0JfQUxQSEFfRVhUIiwiR0xfSEFMRl9GTE9BVF9PRVMkMSIsIkdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQiLCJHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCIsIkdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUIiwiR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQiLCJHTF9DT01QUkVTU0VEX1JHQl9BVENfV0VCR0wiLCJHTF9DT01QUkVTU0VEX1JHQkFfQVRDX0VYUExJQ0lUX0FMUEhBX1dFQkdMIiwiR0xfQ09NUFJFU1NFRF9SR0JBX0FUQ19JTlRFUlBPTEFURURfQUxQSEFfV0VCR0wiLCJHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HIiwiR0xfQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyIsIkdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HIiwiR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUciLCJHTF9DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMIiwiR0xfVU5TSUdORURfQllURSQ1IiwiR0xfVU5TSUdORURfU0hPUlQkMyIsIkdMX1VOU0lHTkVEX0lOVCQzIiwiR0xfRkxPQVQkNCIsIkdMX1RFWFRVUkVfV1JBUF9TIiwiR0xfVEVYVFVSRV9XUkFQX1QiLCJHTF9SRVBFQVQiLCJHTF9DTEFNUF9UT19FREdFJDEiLCJHTF9NSVJST1JFRF9SRVBFQVQiLCJHTF9URVhUVVJFX01BR19GSUxURVIiLCJHTF9URVhUVVJFX01JTl9GSUxURVIiLCJHTF9ORUFSRVNUJDEiLCJHTF9MSU5FQVIiLCJHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUJDEiLCJHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QkMSIsIkdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiQxIiwiR0xfTElORUFSX01JUE1BUF9MSU5FQVIkMSIsIkdMX0dFTkVSQVRFX01JUE1BUF9ISU5UIiwiR0xfRE9OVF9DQVJFIiwiR0xfRkFTVEVTVCIsIkdMX05JQ0VTVCIsIkdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUIiwiR0xfVU5QQUNLX0FMSUdOTUVOVCIsIkdMX1VOUEFDS19GTElQX1lfV0VCR0wiLCJHTF9VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wiLCJHTF9VTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIiwiR0xfQlJPV1NFUl9ERUZBVUxUX1dFQkdMIiwiR0xfVEVYVFVSRTAkMSIsIk1JUE1BUF9GSUxURVJTIiwiQ0hBTk5FTFNfRk9STUFUIiwiRk9STUFUX0NIQU5ORUxTIiwib2JqZWN0TmFtZSIsIkNBTlZBU19DTEFTUyIsIk9GRlNDUkVFTkNBTlZBU19DTEFTUyIsIkNPTlRFWFQyRF9DTEFTUyIsIkJJVE1BUF9DTEFTUyIsIklNQUdFX0NMQVNTIiwiVklERU9fQ0xBU1MiLCJQSVhFTF9DTEFTU0VTIiwiVFlQRV9TSVpFUyIsIkZPUk1BVF9TSVpFU19TUEVDSUFMIiwiaXNOdW1lcmljQXJyYXkiLCJpc1JlY3RBcnJheSIsImNsYXNzU3RyaW5nIiwiaXNDYW52YXNFbGVtZW50IiwiaXNPZmZzY3JlZW5DYW52YXMiLCJpc1BpeGVsRGF0YSIsImNsYXNzTmFtZSIsInR5cGVkQXJyYXlDb2RlJDEiLCJwcmVDb252ZXJ0IiwiaW1hZ2UiLCJwb3N0Q29udmVydCIsImdldFRleHR1cmVTaXplIiwiaXNNaXBtYXAiLCJpc0N1YmUiLCJ0b3RhbCIsImNyZWF0ZVRleHR1cmVTZXQiLCJyZWdsUG9sbCIsImNvbnRleHRTdGF0ZSIsInN0YXRzIiwiY29uZmlnIiwibWlwbWFwSGludCIsImRvbid0IGNhcmUiLCJkb250IGNhcmUiLCJuaWNlIiwiZmFzdCIsIndyYXBNb2RlcyIsIm1pcnJvciIsIm1hZ0ZpbHRlcnMiLCJuZWFyZXN0IiwibGluZWFyIiwibWluRmlsdGVycyIsIm1pcG1hcCIsIm5lYXJlc3QgbWlwbWFwIG5lYXJlc3QiLCJsaW5lYXIgbWlwbWFwIG5lYXJlc3QiLCJuZWFyZXN0IG1pcG1hcCBsaW5lYXIiLCJsaW5lYXIgbWlwbWFwIGxpbmVhciIsImNvbG9yU3BhY2UiLCJub25lIiwidGV4dHVyZVR5cGVzIiwicmdiYTQiLCJyZ2I1NjUiLCJyZ2I1IGExIiwidGV4dHVyZUZvcm1hdHMiLCJsdW1pbmFuY2UiLCJsdW1pbmFuY2UgYWxwaGEiLCJjb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMiLCJleHRfc3JnYiIsInNyZ2IiLCJzcmdiYSIsIm9lc190ZXh0dXJlX2hhbGZfZmxvYXQiLCJ3ZWJnbF9kZXB0aF90ZXh0dXJlIiwiZGVwdGggc3RlbmNpbCIsIndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIiwicmdiIHMzdGMgZHh0MSIsInJnYmEgczN0YyBkeHQxIiwicmdiYSBzM3RjIGR4dDMiLCJyZ2JhIHMzdGMgZHh0NSIsIndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMiLCJyZ2IgYXRjIiwicmdiYSBhdGMgZXhwbGljaXQgYWxwaGEiLCJyZ2JhIGF0YyBpbnRlcnBvbGF0ZWQgYWxwaGEiLCJ3ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiLCJyZ2IgcHZydGMgNGJwcHYxIiwicmdiIHB2cnRjIDJicHB2MSIsInJnYmEgcHZydGMgNGJwcHYxIiwicmdiYSBwdnJ0YyAyYnBwdjEiLCJ3ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIsInN1cHBvcnRlZENvbXByZXNzZWRGb3JtYXRzIiwic3VwcG9ydGVkRm9ybWF0cyIsInRleHR1cmVGb3JtYXRzSW52ZXJ0IiwidGV4dHVyZVR5cGVzSW52ZXJ0IiwibWFnRmlsdGVyc0ludmVydCIsIm1pbkZpbHRlcnNJbnZlcnQiLCJ3cmFwTW9kZXNJbnZlcnQiLCJjb2xvckZvcm1hdHMiLCJnbGVudW0iLCJUZXhGbGFncyIsInByZW11bHRpcGx5QWxwaGEiLCJmbGlwWSIsImNvcHlGbGFncyIsIm90aGVyIiwicGFyc2VGbGFncyIsIm9wdGlvbnMiLCJhbGlnbm1lbnQiLCJoYXNDaGFubmVscyIsImhhc0Zvcm1hdCIsImZvcm1hdFN0ciIsInNldEZsYWdzIiwicGl4ZWxTdG9yZWkiLCJUZXhJbWFnZSIsInhPZmZzZXQiLCJ5T2Zmc2V0IiwibmVlZHNGcmVlIiwibmVlZHNDb3B5IiwicGFyc2VJbWFnZSIsInZpZXdXIiwidmlld0giLCJjb252ZXJ0ZWQiLCJjb252ZXJ0RGF0YSIsInNoYXBlQyIsInN0cmlkZUMiLCJ0cmFuc3Bvc2VEYXRhIiwiaXNCaXRtYXAiLCJpc0ltYWdlRWxlbWVudCIsIm5hdHVyYWxXaWR0aCIsIm5hdHVyYWxIZWlnaHQiLCJpc1ZpZGVvRWxlbWVudCIsInZpZGVvV2lkdGgiLCJ2aWRlb0hlaWdodCIsImFsbG9jRGF0YSIsInNldEltYWdlIiwibWlwbGV2ZWwiLCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsImNvcHlUZXhJbWFnZTJEIiwic2V0U3ViSW1hZ2UiLCJ0ZXhTdWJJbWFnZTJEIiwiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCJjb3B5VGV4U3ViSW1hZ2UyRCIsImltYWdlUG9vbCIsImFsbG9jSW1hZ2UiLCJmcmVlSW1hZ2UiLCJNaXBNYXAiLCJwYXJzZU1pcE1hcEZyb21TaGFwZSIsInBhcnNlTWlwTWFwRnJvbU9iamVjdCIsImltZ0RhdGEiLCJzZXRNaXBNYXAiLCJtaXBQb29sIiwiYWxsb2NNaXBNYXAiLCJmcmVlTWlwTWFwIiwiVGV4SW5mbyIsImFuaXNvdHJvcGljIiwicGFyc2VUZXhJbmZvIiwibWFnIiwib3B0V3JhcFMiLCJvcHRXcmFwVCIsImhhc01pcE1hcCIsInNldFRleEluZm8iLCJ0ZXhQYXJhbWV0ZXJpIiwiaGludCIsImdlbmVyYXRlTWlwbWFwIiwidGV4dHVyZUNvdW50IiwidGV4dHVyZVNldCIsIm51bVRleFVuaXRzIiwidGV4dHVyZVVuaXRzIiwiUkVHTFRleHR1cmUiLCJyZWZDb3VudCIsImJpbmRDb3VudCIsInRleEluZm8iLCJ0ZW1wQmluZCIsInRlbXBSZXN0b3JlIiwiaGFuZGxlIiwicGFyYW1zIiwiYmluZCIsInVuYmluZCIsImRlY1JlZiIsImdldFRvdGFsVGV4dHVyZVNpemUiLCJjcmVhdGUyRCIsInJlZ2xUZXh0dXJlMkQiLCJzdWJpbWFnZSIsInhfIiwieV8iLCJsZXZlbF8iLCJpbWFnZURhdGEiLCJ3XyIsImhfIiwiX3ciLCJfaCIsImNyZWF0ZUN1YmUiLCJhMiIsImEzIiwiYTQiLCJhNSIsImN1YmVDb3VudCIsInJlZ2xUZXh0dXJlQ3ViZSIsImZhY2VJbnB1dCIsInJhZGl1c18iLCJnZXRUZXh0dXJlIiwid3JhcHBlciIsInRleCIsInJlZnJlc2giLCJHTF9SRU5ERVJCVUZGRVIiLCJHTF9SR0JBNCQxIiwiRk9STUFUX1NJWkVTIiwiZ2V0UmVuZGVyYnVmZmVyU2l6ZSIsIndyYXBSZW5kZXJidWZmZXJzIiwiZm9ybWF0VHlwZXMiLCJleHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiLCJ3ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQiLCJmb3JtYXRUeXBlc0ludmVydCIsInJlbmRlcmJ1ZmZlckNvdW50IiwicmVuZGVyYnVmZmVyU2V0IiwiUkVHTFJlbmRlcmJ1ZmZlciIsInJiIiwiYmluZFJlbmRlcmJ1ZmZlciIsImRlbGV0ZVJlbmRlcmJ1ZmZlciIsImdldFRvdGFsUmVuZGVyYnVmZmVyU2l6ZSIsImNyZWF0ZVJlbmRlcmJ1ZmZlciIsInJlZ2xSZW5kZXJidWZmZXIiLCJyZW5kZXJidWZmZXJTdG9yYWdlIiwiR0xfRlJBTUVCVUZGRVIkMSIsIkdMX1JFTkRFUkJVRkZFUiQxIiwiR0xfVEVYVFVSRV8yRCQyIiwiR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDIiLCJHTF9DT0xPUl9BVFRBQ0hNRU5UMCQxIiwiR0xfREVQVEhfQVRUQUNITUVOVCIsIkdMX1NURU5DSUxfQVRUQUNITUVOVCIsIkdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVCIsIkdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFJDEiLCJHTF9ERVBUSF9DT01QT05FTlQkMSIsImNvbG9yVGV4dHVyZUZvcm1hdEVudW1zIiwidGV4dHVyZUZvcm1hdENoYW5uZWxzIiwidGV4dHVyZVR5cGVTaXplcyIsIkdMX0RFUFRIX0NPTVBPTkVOVDE2JDEiLCJHTF9TVEVOQ0lMX0lOREVYOCQxIiwiR0xfREVQVEhfU1RFTkNJTCQyIiwiY29sb3JSZW5kZXJidWZmZXJGb3JtYXRFbnVtcyIsInN0YXR1c0NvZGUiLCJHTF9GTE9BVCQ2IiwiR0xfQVJSQVlfQlVGRkVSJDEiLCJBdHRyaWJ1dGVSZWNvcmQiLCJub3JtYWxpemVkIiwiZGl2aXNvciIsIkdMX0ZSQUdNRU5UX1NIQURFUiIsIkdMX1ZFUlRFWF9TSEFERVIiLCJHTF9BQ1RJVkVfVU5JRk9STVMiLCJHTF9BQ1RJVkVfQVRUUklCVVRFUyIsIkdMX1JHQkEkMyIsIkdMX1VOU0lHTkVEX0JZVEUkNyIsIkdMX1BBQ0tfQUxJR05NRU5UIiwiR0xfRkxPQVQkNyIsIndyYXBSZWFkUGl4ZWxzIiwiZnJhbWVidWZmZXJTdGF0ZSIsImdsQXR0cmlidXRlcyIsInJlYWRQaXhlbHNJbXBsIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwiY29sb3JBdHRhY2htZW50cyIsImZyYW1lYnVmZmVyV2lkdGgiLCJmcmFtZWJ1ZmZlckhlaWdodCIsInNldEZCTyIsImZyYW1lYnVmZmVyIiwicmVhZFBpeGVsc0ZCTyIsIkNVVEVfQ09NUE9ORU5UUyIsIkdMX1VOU0lHTkVEX0JZVEUkOCIsIkFUVFJJQl9TVEFURV9QT0lOVEVSIiwiQVRUUklCX1NUQVRFX0NPTlNUQU5UIiwiRFlOX0ZVTkMkMSIsIkRZTl9QUk9QJDEiLCJEWU5fQ09OVEVYVCQxIiwiRFlOX1NUQVRFJDEiLCJEWU5fVEhVTksiLCJEWU5fQ09OU1RBTlQkMSIsIkRZTl9BUlJBWSQxIiwiU19ESVRIRVIiLCJTX0JMRU5EX0VOQUJMRSIsIlNfQkxFTkRfQ09MT1IiLCJTX0JMRU5EX0VRVUFUSU9OIiwiU19CTEVORF9GVU5DIiwiU19ERVBUSF9FTkFCTEUiLCJTX0RFUFRIX0ZVTkMiLCJTX0RFUFRIX1JBTkdFIiwiU19ERVBUSF9NQVNLIiwiU19DT0xPUl9NQVNLIiwiU19DVUxMX0VOQUJMRSIsIlNfQ1VMTF9GQUNFIiwiU19GUk9OVF9GQUNFIiwiU19MSU5FX1dJRFRIIiwiU19QT0xZR09OX09GRlNFVF9FTkFCTEUiLCJTX1BPTFlHT05fT0ZGU0VUX09GRlNFVCIsIlNfU0FNUExFX0FMUEhBIiwiU19TQU1QTEVfRU5BQkxFIiwiU19TQU1QTEVfQ09WRVJBR0UiLCJTX1NURU5DSUxfRU5BQkxFIiwiU19TVEVOQ0lMX01BU0siLCJTX1NURU5DSUxfRlVOQyIsIlNfU1RFTkNJTF9PUEZST05UIiwiU19TVEVOQ0lMX09QQkFDSyIsIlNfU0NJU1NPUl9FTkFCTEUiLCJTX1NDSVNTT1JfQk9YIiwiU19WSUVXUE9SVCIsIlNfUFJPRklMRSIsIlNfRlJBTUVCVUZGRVIiLCJTX1ZFUlQiLCJTX0ZSQUciLCJTX0VMRU1FTlRTIiwiU19QUklNSVRJVkUiLCJTX0NPVU5UIiwiU19PRkZTRVQiLCJTX0lOU1RBTkNFUyIsIlNfVkFPIiwiU19GUkFNRUJVRkZFUl9XSURUSCIsIlNfRlJBTUVCVUZGRVJfSEVJR0hUIiwiU19WSUVXUE9SVF9XSURUSCIsIlNfVklFV1BPUlRfSEVJR0hUIiwiU19EUkFXSU5HQlVGRkVSX1dJRFRIIiwiU19EUkFXSU5HQlVGRkVSIiwiU19EUkFXSU5HQlVGRkVSX0hFSUdIVCIsIk5FU1RFRF9PUFRJT05TIiwiR0xfQVJSQVlfQlVGRkVSJDIiLCJHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiQxIiwiR0xfVEVYVFVSRV8yRCQzIiwiR0xfVEVYVFVSRV9DVUJFX01BUCQyIiwiR0xfQ1VMTF9GQUNFIiwiR0xfQkxFTkQiLCJHTF9ESVRIRVIiLCJHTF9TVEVOQ0lMX1RFU1QiLCJHTF9ERVBUSF9URVNUIiwiR0xfU0NJU1NPUl9URVNUIiwiR0xfUE9MWUdPTl9PRkZTRVRfRklMTCIsIkdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSIsIkdMX1NBTVBMRV9DT1ZFUkFHRSIsIkdMX0ZMT0FUJDgiLCJHTF9GTE9BVF9WRUMyIiwiR0xfRkxPQVRfVkVDMyIsIkdMX0ZMT0FUX1ZFQzQiLCJHTF9JTlQkMyIsIkdMX0lOVF9WRUMyIiwiR0xfSU5UX1ZFQzMiLCJHTF9JTlRfVkVDNCIsIkdMX0JPT0wiLCJHTF9CT09MX1ZFQzIiLCJHTF9CT09MX1ZFQzMiLCJHTF9CT09MX1ZFQzQiLCJHTF9GTE9BVF9NQVQyIiwiR0xfRkxPQVRfTUFUMyIsIkdMX0ZMT0FUX01BVDQiLCJHTF9TQU1QTEVSXzJEIiwiR0xfU0FNUExFUl9DVUJFIiwiR0xfVFJJQU5HTEVTJDEiLCJHTF9GUk9OVCIsIkdMX0JBQ0siLCJHTF9DVyIsIkdMX0NDVyIsIkdMX01JTl9FWFQiLCJHTF9NQVhfRVhUIiwiR0xfQUxXQVlTIiwiR0xfS0VFUCIsIkdMX1pFUk8iLCJHTF9PTkUiLCJHTF9GVU5DX0FERCIsIkdMX0xFU1MiLCJHTF9GUkFNRUJVRkZFUiQyIiwiR0xfQ09MT1JfQVRUQUNITUVOVDAkMiIsImJsZW5kRnVuY3MiLCJvbmUiLCJzcmMgY29sb3IiLCJvbmUgbWludXMgc3JjIGNvbG9yIiwic3JjIGFscGhhIiwib25lIG1pbnVzIHNyYyBhbHBoYSIsImRzdCBjb2xvciIsIm9uZSBtaW51cyBkc3QgY29sb3IiLCJkc3QgYWxwaGEiLCJvbmUgbWludXMgZHN0IGFscGhhIiwiY29uc3RhbnQgY29sb3IiLCJvbmUgbWludXMgY29uc3RhbnQgY29sb3IiLCJjb25zdGFudCBhbHBoYSIsIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYSIsInNyYyBhbHBoYSBzYXR1cmF0ZSIsImludmFsaWRCbGVuZENvbWJpbmF0aW9ucyIsImNvbXBhcmVGdW5jcyIsIm5ldmVyIiwibGVzcyIsIjwiLCJlcXVhbCIsIj0iLCI9PSIsIj09PSIsImxlcXVhbCIsIjw9IiwiZ3JlYXRlciIsIj4iLCJub3RlcXVhbCIsIiE9IiwiIT09IiwiZ2VxdWFsIiwiPj0iLCJhbHdheXMiLCJzdGVuY2lsT3BzIiwia2VlcCIsImluY3JlbWVudCIsImRlY3JlbWVudCIsImluY3JlbWVudCB3cmFwIiwiZGVjcmVtZW50IHdyYXAiLCJpbnZlcnQiLCJzaGFkZXJUeXBlIiwib3JpZW50YXRpb25UeXBlIiwiaXNCdWZmZXJBcmdzIiwic29ydFN0YXRlIiwiRGVjbGFyYXRpb24iLCJ0aGlzRGVwIiwiY29udGV4dERlcCIsInByb3BEZXAiLCJhcHBlbmQiLCJpc1N0YXRpYyIsImRlY2wiLCJjcmVhdGVTdGF0aWNEZWNsIiwiY3JlYXRlRHluYW1pY0RlY2wiLCJkeW4iLCJudW1BcmdzIiwic3ViRHluIiwic3ViQXJncyIsIlNDT1BFX0RFQ0wiLCJyZWdsQ29yZSIsImJ1ZmZlclN0YXRlIiwiZWxlbWVudFN0YXRlIiwidGV4dHVyZVN0YXRlIiwidW5pZm9ybVN0YXRlIiwiYXR0cmlidXRlU3RhdGUiLCJzaGFkZXJTdGF0ZSIsImRyYXdTdGF0ZSIsInRpbWVyIiwiUmVjb3JkIiwiYmxlbmRFcXVhdGlvbnMiLCJzdWJ0cmFjdCIsInJldmVyc2Ugc3VidHJhY3QiLCJleHRfYmxlbmRfbWlubWF4IiwiZXh0SW5zdGFuY2luZyIsImFuZ2xlX2luc3RhbmNlZF9hcnJheXMiLCJleHREcmF3QnVmZmVycyIsImN1cnJlbnRTdGF0ZSIsImRpcnR5IiwibmV4dFN0YXRlIiwiR0xfU1RBVEVfTkFNRVMiLCJHTF9GTEFHUyIsIkdMX1ZBUklBQkxFUyIsInByb3BOYW1lIiwic3RhdGVGbGFnIiwic25hbWUiLCJjYXAiLCJpbml0Iiwic3RhdGVWYXJpYWJsZSIsImRyYXdpbmdCdWZmZXJXaWR0aCIsImRyYXdpbmdCdWZmZXJIZWlnaHQiLCJzaGFyZWRTdGF0ZSIsImN1cnJlbnQiLCJ2YW8iLCJzaGFyZWRDb25zdGFudHMiLCJiYWNrQnVmZmVyIiwiZHJhd0J1ZmZlciIsImRyYXdDYWxsQ291bnRlciIsImNyZWF0ZVJFR0xFbnZpcm9ubWVudCIsImVudiIsInZhckNvdW50ZXIiLCJsaW5rZWROYW1lcyIsImxpbmtlZFZhbHVlcyIsInZhcnMiLCJkZWYiLCJzY29wZSIsImVudHJ5IiwiZXhpdCIsImVudHJ5VG9TdHJpbmciLCJleGl0VG9TdHJpbmciLCJnbG9iYWxCbG9jayIsInByb2NlZHVyZXMiLCJwcm9jIiwiY291bnQiLCJib2R5VG9TdHJpbmciLCJjb25kIiwidGhlbkJsb2NrIiwiZWxzZUJsb2NrIiwidGhlblRvU3RyaW5nIiwiZWxzZVRvU3RyaW5nIiwiZWxzZSIsImVsc2VDbGF1c2UiLCJjb21waWxlIiwic3JjIiwiRnVuY3Rpb24iLCJjcmVhdGVFbnZpcm9ubWVudCIsImJhdGNoSWQiLCJTSEFSRUQiLCJzaGFyZWQiLCJDSEVDSyIsImNvbW1hbmRTdHIiLCJhc3NlcnQiLCJuZXh0VmFycyIsImN1cnJlbnRWYXJzIiwidmFyaWFibGUiLCJjb25zdGFudHMiLCJpbnZva2UiLCJhcmdMaXN0IiwiYXR0cmliQ2FjaGUiLCJzY29wZUF0dHJpYnMiLCJzY29wZUF0dHJpYiIsImJpbmRpbmciLCJwYXJzZUFyZ3VtZW50cyIsInN0YXRpY09wdGlvbnMiLCJkeW5hbWljT3B0aW9ucyIsIktFWV9OQU1FUyIsImNoZWNrS2V5cyIsImF0dHJpYkxvY2F0aW9ucyIsInN0YXRpY0F0dHJpYnV0ZXMiLCJzQXR0cmlidXRlcyIsImJpbmRpbmdzIiwicGFyc2VBdHRyaWJMb2NhdGlvbnMiLCJnZXRGcmFtZWJ1ZmZlciIsIkZSQU1FQlVGRkVSIiwiQ09OVEVYVCIsIkZSQU1FQlVGRkVSX0ZVTkMiLCJGUkFNRUJVRkZFUl9TVEFURSIsInBhcnNlRnJhbWVidWZmZXIiLCJ2aWV3cG9ydEFuZFNjaXNzb3IiLCJwYXJzZUJveCIsIkJPWF9XIiwiQk9YX0giLCJkeW5Cb3giLCJCT1giLCJCT1hfWCIsIkJPWF9ZIiwicHJldlZpZXdwb3J0IiwiVklFV1BPUlQiLCJzY2lzc29yX2JveCIsInBhcnNlVmlld3BvcnRTY2lzc29yIiwiZ2V0RWxlbWVudHMiLCJFTEVNRU5UUyIsIklTX0JVRkZFUl9BUkdTIiwiRUxFTUVOVF9TVEFURSIsImVsZW1lbnREZWZuIiwiZWxlbWVudFN0cmVhbSIsImlmdGUiLCJwYXJzZUVsZW1lbnRzIiwicGFyc2VQYXJhbSIsImlzT2Zmc2V0IiwiT0ZGU0VUIiwiZHluVmFsdWUiLCJwcmltaXRpdmUiLCJkeW5QcmltaXRpdmUiLCJQUklNX1RZUEVTIiwicHJpbSIsInBhcnNlUHJpbWl0aXZlIiwiZHluQ291bnQiLCJNSVNTSU5HIiwiRFlOQU1JQyIsInBhcnNlVmVydENvdW50IiwiaW5zdGFuY2VzIiwicGFyc2VEcmF3IiwiU1RBVEUiLCJwYXJzZVN0YXRpYyIsInBhcnNlRHluYW1pYyIsIkNPTVBBUkVfRlVOQ1MiLCJkc3QiLCJCTEVORF9GVU5DUyIsInJlYWQiLCJTUkNfUkdCIiwiU1JDX0FMUEhBIiwiQkxFTkRfRVFVQVRJT05TIiwiUkdCIiwiQUxQSEEiLCJjaGVja1Byb3AiLCJjbXAiLCJmYWlsIiwiemZhaWwiLCJ6cGFzcyIsIlNURU5DSUxfT1BTIiwic2FtcGxlVmFsdWUiLCJzYW1wbGVJbnZlcnQiLCJwYXJzZUdMU3RhdGUiLCJwYXJzZVNoYWRlciIsInByb2dWYXIiLCJmcmFnSWQiLCJTSEFERVJfU1RBVEUiLCJwcm9nRGVmIiwicGFyc2VQcm9ncmFtIiwiY29weUJveCIsImRlZm4iLCJzY29wZVZBTyIsImRyYXdWQU8iLCJ1c2VWQU8iLCJwcm9maWxlRW5hYmxlIiwicGFyc2VQcm9maWxlIiwic3RhdGljVW5pZm9ybXMiLCJkeW5hbWljVW5pZm9ybXMiLCJVTklGT1JNUyIsInJlZ2xUeXBlIiwicGFyc2VVbmlmb3JtcyIsImdldFZBTyIsImNyZWF0ZVZBTyIsInZhb1JlZiIsInBhcnNlVkFPIiwic3RhdGljQmluZGluZ3MiLCJkeW5hbWljQXR0cmlidXRlcyIsImF0dHJpYnV0ZURlZnMiLCJhdHRyaWJ1dGUiLCJnZXRCdWZmZXIiLCJjb25zdGFudCIsIlZBTElEX0tFWVMiLCJkdHlwZSIsImlzU3RyZWFtIiwiVkFMVUUiLCJCVUZGRVJfU1RBVEUiLCJkZWZhdWx0UmVjb3JkIiwiQlVGRkVSIiwiVFlQRSIsImVtaXRSZWFkUmVjb3JkIiwicGFyc2VBdHRyaWJ1dGVzIiwic3RhdGljQ29udGV4dCIsImR5bmFtaWNDb250ZXh0IiwicGFyc2VDb250ZXh0IiwiZW1pdENvbnRleHQiLCJjb250ZXh0RW50ZXIiLCJlbWl0UG9sbEZyYW1lYnVmZmVyIiwic2tpcENoZWNrIiwiRVhUX0RSQVdfQlVGRkVSUyIsIkdMIiwiTkVYVCIsIkRSQVdfQlVGRkVSUyIsIkJBQ0tfQlVGRkVSIiwiZW1pdFBvbGxTdGF0ZSIsIkNVUlJFTlRfVkFSUyIsIk5FWFRfVkFSUyIsIkNVUlJFTlRfU1RBVEUiLCJORVhUX1NUQVRFIiwiQ1VSUkVOVCIsImVtaXRTZXRPcHRpb25zIiwiZmxhZyIsImluamVjdEV4dGVuc2lvbnMiLCJpbnN0YW5jaW5nIiwiZW1pdFByb2ZpbGUiLCJ1c2VTY29wZSIsImluY3JlbWVudENvdW50ZXIiLCJDUFVfU1RBUlQiLCJRVUVSWV9DT1VOVEVSIiwiVVNFX1BST0ZJTEUiLCJTVEFUUyIsIlRJTUVSIiwicHJvZmlsZUFyZyIsInBlcmZDb3VudGVyIiwiZW1pdFByb2ZpbGVTdGFydCIsImVtaXRQcm9maWxlRW5kIiwic2NvcGVQcm9maWxlIiwiZW1pdEF0dHJpYnV0ZXMiLCJBVFRSSUJVVEUiLCJMT0NBVElPTiIsIkJJTkRJTkciLCJDT05TVF9DT01QT05FTlRTIiwiQ09NTU9OX0tFWVMiLCJlbWl0QnVmZmVyIiwiU0laRSIsIkRJVklTT1IiLCJlbWl0Q29uc3RhbnQiLCJlbWl0QmluZEF0dHJpYnV0ZSIsInR5cGVMZW5ndGgiLCJlbWl0VW5pZm9ybXMiLCJpbmZpeCIsInVuaWZvcm0iLCJURVhfVkFMVUUiLCJNQVRfVkFMVUUiLCJkaW0iLCJlbWl0Q2hlY2siLCJjaGVja1R5cGUiLCJjaGVja1ZlY3RvciIsImNoZWNrVGV4dHVyZSIsInVucm9sbCIsIlRFWCIsIm1hdFNpemUiLCJTVE9SQUdFIiwiZW1pdERyYXciLCJvdXRlciIsImlubmVyIiwiRFJBV19TVEFURSIsImRyYXdPcHRpb25zIiwiY29udGV4dER5bmFtaWMiLCJlbWl0RWxlbWVudHMiLCJlbWl0VmFsdWUiLCJJTlNUQU5DRVMiLCJFWFRfSU5TVEFOQ0lORyIsIlBSSU1JVElWRSIsIkNPVU5UIiwiZW1pdENvdW50IiwiRUxFTUVOVF9UWVBFIiwiZWxlbWVudHNTdGF0aWMiLCJlbWl0SW5zdGFuY2luZyIsImVtaXRSZWd1bGFyIiwiY3JlYXRlQm9keSIsImVtaXRCb2R5IiwicGFyZW50RW52IiwiZW1pdERyYXdCb2R5IiwiZW1pdEJhdGNoRHluYW1pY1NoYWRlckJvZHkiLCJlbWl0QmF0Y2hCb2R5IiwiQkFUQ0hfSUQiLCJQUk9QUyIsImlzSW5uZXJEZWZuIiwiaXNPdXRlckRlZm4iLCJuZWVkc0NvbnRleHQiLCJuZWVkc0ZyYW1lYnVmZmVyIiwicHJvZ0NhY2hlIiwiUFJPR1JBTSIsIlBST0dfSUQiLCJDQUNIRURfUFJPQyIsInNwbGF0T2JqZWN0IiwiaXNEeW5hbWljT2JqZWN0IiwiZ2xvYmFscyIsIm9iamVjdFJlZiIsImRlcHMiLCJwcm9jcyIsImNvbW1vbiIsIklOU1RBTkNJTkciLCJvZXNfdmVydGV4X2FycmF5X29iamVjdCIsImRyYXdDYWNoZSIsImVtaXREcmF3UHJvYyIsInNhdmVTaGFkZXIiLCJlbWl0U2NvcGVQcm9jIiwiYmF0Y2giLCJwcm9nRGVmbiIsImJhdGNoQ2FjaGUiLCJlbWl0QmF0Y2hQcm9jIiwiR0xfUVVFUllfUkVTVUxUX0VYVCIsIkdMX1FVRVJZX1JFU1VMVF9BVkFJTEFCTEVfRVhUIiwiR0xfVElNRV9FTEFQU0VEX0VYVCIsImNyZWF0ZVRpbWVyIiwiZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5IiwicXVlcnlQb29sIiwiZnJlZVF1ZXJ5IiwicXVlcnkiLCJwZW5kaW5nUXVlcmllcyIsIlBlbmRpbmdTdGF0cyIsInN0YXJ0UXVlcnlJbmRleCIsImVuZFF1ZXJ5SW5kZXgiLCJzdW0iLCJwZW5kaW5nU3RhdHNQb29sIiwiZnJlZVBlbmRpbmdTdGF0cyIsInBlbmRpbmdTdGF0cyIsInB1c2hTY29wZVN0YXRzIiwicHMiLCJ0aW1lU3VtIiwicXVlcnlQdHIiLCJiZWdpblF1ZXJ5IiwiY3JlYXRlUXVlcnlFWFQiLCJiZWdpblF1ZXJ5RVhUIiwiZW5kUXVlcnkiLCJlbmRRdWVyeUVYVCIsInF1ZXJ5VGltZSIsImdldFF1ZXJ5T2JqZWN0RVhUIiwic3RhcnRQdHIiLCJlbmRQdHIiLCJncHVUaW1lIiwiZ2V0TnVtUGVuZGluZ1F1ZXJpZXMiLCJkZWxldGVRdWVyeUVYVCIsIkdMX0NPTE9SX0JVRkZFUl9CSVQiLCJHTF9ERVBUSF9CVUZGRVJfQklUIiwiR0xfU1RFTkNJTF9CVUZGRVJfQklUIiwiR0xfQVJSQVlfQlVGRkVSIiwiQ09OVEVYVF9MT1NUX0VWRU5UIiwiQ09OVEVYVF9SRVNUT1JFRF9FVkVOVCIsIkRZTl9QUk9QIiwiRFlOX0NPTlRFWFQiLCJEWU5fU1RBVEUiLCJoYXlzdGFjayIsIm5lZWRsZSIsImdldENvbnRleHRBdHRyaWJ1dGVzIiwiY29udGV4dExvc3QiLCJpc0NvbnRleHRMb3N0IiwiZXh0ZW5zaW9uU3RhdGUiLCJ0cnlMb2FkRXh0ZW5zaW9uIiwibmFtZV8iLCJnZXRFeHRlbnNpb24iLCJjcmVhdGVFeHRlbnNpb25DYWNoZSIsInN0cmluZ0lkcyIsInN0cmluZ1ZhbHVlcyIsIiIsInN0YXRzJCQxIiwidmFvQ291bnQiLCJidWZmZXJDb3VudCIsImVsZW1lbnRzQ291bnQiLCJmcmFtZWJ1ZmZlckNvdW50Iiwic2hhZGVyQ291bnQiLCJTVEFSVF9USU1FIiwiV0lEVEgiLCJIRUlHSFQiLCJkZXN0cm95QnVmZmVyIiwiYnVmZmVyU2V0IiwiUkVHTEJ1ZmZlciIsImNyZWF0ZUJ1ZmZlciIsInVzYWdlIiwicGVyc2lzdGVudERhdGEiLCJiaW5kQnVmZmVyIiwic3RyZWFtUG9vbCIsImluaXRCdWZmZXJGcm9tVHlwZWRBcnJheSIsImluaXRCdWZmZXJGcm9tRGF0YSIsInBlcnNpc3QiLCJmbGF0RGF0YSIsInR5cGVkRGF0YSIsImRlbGV0ZUJ1ZmZlciIsImdldFRvdGFsQnVmZmVyU2l6ZSIsImRlZmVySW5pdCIsInBlcnNpc3RlbnQiLCJyZWdsQnVmZmVyIiwic2V0U3ViRGF0YSIsImJ1ZmZlclN1YkRhdGEiLCJfYnVmZmVyIiwic3ViZGF0YSIsIm9mZnNldF8iLCJjcmVhdGVTdHJlYW0iLCJkZXN0cm95U3RyZWFtIiwic3RyZWFtJCQxIiwiX2luaXRCdWZmZXIiLCJ3cmFwQnVmZmVyU3RhdGUiLCJOVU1fQVRUUklCVVRFUyIsImF0dHJpYnV0ZUJpbmRpbmdzIiwidmFvU2V0IiwiY3VycmVudFZBTyIsInRhcmdldFZBTyIsImV4dFZBTyIsIl9hdHRyIiwiUkVHTFZBTyIsInVwZGF0ZVZBTyIsImJ1ZlVwZGF0ZWQiLCJuYXR0cmlidXRlcyIsInNwZWMiLCJyZWMiLCJidWZmZXJzIiwiX3ZhbyIsImRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSIsInNldFZBTyIsImJpbmRWZXJ0ZXhBcnJheU9FUyIsImJpbmRBdHRycyIsImV4dGkiLCJleHRJbnN0YW5jZWQiLCJlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSIsInZlcnRleEF0dHJpYlBvaW50ZXIiLCJvZmZmc2V0IiwidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIiwidmVydGV4QXR0cmliNGYiLCJjcmVhdGVWZXJ0ZXhBcnJheU9FUyIsImRlbGV0ZVZlcnRleEFycmF5T0VTIiwid3JhcEF0dHJpYnV0ZVN0YXRlIiwiZWxlbWVudFNldCIsImVsZW1lbnRDb3VudCIsImVsZW1lbnRUeXBlcyIsIlJFR0xFbGVtZW50QnVmZmVyIiwicHJpbVR5cGUiLCJ2ZXJ0Q291bnQiLCJvZXNfZWxlbWVudF9pbmRleF91aW50IiwiaW5pdEVsZW1lbnRzIiwicHJlZGljdGVkVHlwZSIsImRlc3Ryb3lFbGVtZW50cyIsInJlZ2xFbGVtZW50cyIsIl9lbGVtZW50cyIsIndyYXBFbGVtZW50c1N0YXRlIiwiZnJhZ1NoYWRlcnMiLCJ2ZXJ0U2hhZGVycyIsIkFjdGl2ZUluZm8iLCJsb2NhdGlvbiIsImluc2VydEFjdGl2ZUluZm8iLCJnZXRTaGFkZXIiLCJjcmVhdGVTaGFkZXIiLCJzaGFkZXJTb3VyY2UiLCJjb21waWxlU2hhZGVyIiwicHJvZ3JhbUNhY2hlIiwicHJvZ3JhbUxpc3QiLCJQUk9HUkFNX0NPVU5URVIiLCJSRUdMUHJvZ3JhbSIsInZlcnRJZCIsInVuaWZvcm1zQ291bnQiLCJhdHRyaWJ1dGVzQ291bnQiLCJsaW5rUHJvZ3JhbSIsImF0dHJpYnV0ZUxvY2F0aW9ucyIsImNyZWF0ZVByb2dyYW0iLCJhdHRhY2hTaGFkZXIiLCJiaW5kQXR0cmliTG9jYXRpb24iLCJudW1Vbmlmb3JtcyIsImdldEFjdGl2ZVVuaWZvcm0iLCJnZXRVbmlmb3JtTG9jYXRpb24iLCJudW1BdHRyaWJ1dGVzIiwiZ2V0QWN0aXZlQXR0cmliIiwiZ2V0QXR0cmliTG9jYXRpb24iLCJnZXRNYXhVbmlmb3Jtc0NvdW50IiwiZ2V0TWF4QXR0cmlidXRlc0NvdW50IiwiZGVsZXRlU2hhZGVyIiwiZGVsZXRlUHJvZ3JhbSIsInByZXZQcm9ncmFtIiwid3JhcFNoYWRlclN0YXRlIiwiY29yZSIsInJlbmRlcmJ1ZmZlclN0YXRlIiwiY3VyIiwiY29sb3JUZXh0dXJlRm9ybWF0cyIsImNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0cyIsImNvbG9yVHlwZXMiLCJGcmFtZWJ1ZmZlckF0dGFjaG1lbnQiLCJpbmNSZWZBbmRDaGVja1NoYXBlIiwidHciLCJ0aCIsImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwicGFyc2VBdHRhY2htZW50IiwiYWxsb2NBdHRhY2htZW50IiwiaXNUZXh0dXJlIiwidW53cmFwQXR0YWNobWVudCIsInJlc2l6ZUF0dGFjaG1lbnQiLCJmcmFtZWJ1ZmZlclNldCIsIlJFR0xGcmFtZWJ1ZmZlciIsImRlcHRoQXR0YWNobWVudCIsInN0ZW5jaWxBdHRhY2htZW50IiwiZGVwdGhTdGVuY2lsQXR0YWNobWVudCIsImRlY0ZCT1JlZnMiLCJ1cGRhdGVGcmFtZWJ1ZmZlciIsInN0YXR1cyIsImNyZWF0ZUZCTyIsInJlZ2xGcmFtZWJ1ZmZlciIsIm5lZWRzRGVwdGgiLCJuZWVkc1N0ZW5jaWwiLCJjb2xvckJ1ZmZlciIsImNvbG9yVGV4dHVyZSIsImNvbG9yRm9ybWF0IiwiY29sb3JUeXBlIiwiY29sb3JDb3VudCIsImRlcHRoQnVmZmVyIiwic3RlbmNpbEJ1ZmZlciIsImRlcHRoU3RlbmNpbEJ1ZmZlciIsImRlcHRoU3RlbmNpbFRleHR1cmUiLCJjb2xvcnMiLCJkZXB0aFRleHR1cmUiLCJkZXB0aFN0ZW5jaWwiLCJjb21tb25Db2xvckF0dGFjaG1lbnRTaXplIiwiY29sb3JBdHRhY2htZW50U2l6ZSIsIl9mcmFtZWJ1ZmZlciIsInVzZSIsInJlZ2xGcmFtZWJ1ZmZlckN1YmUiLCJjb2xvckN1YmVzIiwiY3ViZU1hcFBhcmFtcyIsImN1YmUiLCJmYiIsIndyYXBGQk9TdGF0ZSIsInJhZkNhbGxiYWNrcyIsImxvc3NDYWxsYmFja3MiLCJyZXN0b3JlQ2FsbGJhY2tzIiwiZGVzdHJveUNhbGxiYWNrcyIsImFjdGl2ZVJBRiIsImhhbmRsZVJBRiIsInN0YXJ0UkFGIiwic3RvcFJBRiIsImhhbmRsZUNvbnRleHRMb3NzIiwiZXZlbnQiLCJoYW5kbGVDb250ZXh0UmVzdG9yZWQiLCJjb21waWxlUHJvY2VkdXJlIiwic2VwYXJhdGVEeW5hbWljIiwidXNlQXJyYXlzIiwic3RhdGljSXRlbXMiLCJkeW5hbWljSXRlbXMiLCJvcHRpb24iLCJvcCIsIm9wQmFjayIsIm9wRnJvbnQiLCJmbGF0dGVuTmVzdGVkT3B0aW9ucyIsImNwdVRpbWUiLCJjb21waWxlZCIsIkVNUFRZX0FSUkFZIiwicmVzZXJ2ZSIsImNsZWFySW1wbCIsImNsZWFyRmxhZ3MiLCJjbGVhckRlcHRoIiwiY2xlYXJTdGVuY2lsIiwicGVuZGluZ0NhbmNlbCIsInBvbGxWaWV3cG9ydCIsInNjaXNzb3JCb3giLCJmcmFtZWJ1ZmZlcl9yZWdsVHlwZSIsImZyYW1lYnVmZmVyQ3ViZSIsIm9uIiwiY2FsbGJhY2siLCJjYWxsYmFja3MiLCJoYXNFeHRlbnNpb24iLCJfZ2wiLCJfcmVmcmVzaCIsImNyZWF0ZVJFR0wiLCJHTE9CQUwiLCJzdGFydGRlbm9tIiwic2lnbmlmaWNhbmNlIiwib3ZlcmZsb3ciLCJvbGRSYW5kb20iLCJBUkM0Iiwia2V5bGVuIiwibWUiLCJtaXhrZXkiLCJzbWVhciIsInN0cmluZ3NlZWQiLCJ0b3N0cmluZyIsImFyYzQiLCJ0eXAiLCJlbnRyb3B5IiwiY3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwicGx1Z2lucyIsInNjcmVlbiIsImF1dG9zZWVkIiwicmVzZXRHbG9iYWwiLCJGMiIsIkcyIiwiRzMiLCJGNCIsIkc0IiwicmFuZG9tT3JTZWVkIiwiczAiLCJzMSIsInMyIiwibWFzaCIsImFsZWEiLCJidWlsZFBlcm11dGF0aW9uVGFibGUiLCJwZXJtIiwicGVybU1vZDEyIiwiYXV4IiwiZ3JhZDMiLCJncmFkNCIsInhpbiIsInlpbiIsImkxIiwiajEiLCJuMCIsIm4xIiwibjIiLCJpaSIsImpqIiwidDAiLCJnaTAiLCJnaTEiLCJnaTIiLCJ6aW4iLCJuMyIsImsxIiwiaTIiLCJqMiIsImsyIiwiejAiLCJ6MSIsInoyIiwiejMiLCJrayIsImdpMyIsIm40IiwibDEiLCJsMiIsImkzIiwiajMiLCJrMyIsImwzIiwidzAiLCJyYW5reCIsInJhbmt5IiwicmFua3oiLCJyYW5rdyIsIncxIiwidzIiLCJ3MyIsIno0IiwidzQiLCJsbCIsInQ0IiwiZ2k0IiwiX2J1aWxkUGVybXV0YXRpb25UYWJsZSIsIl9zbGljZWRUb0FycmF5IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJfYXJyIiwiX24iLCJfZCIsIl9lIiwiX3MiLCJfaSIsImRvbmUiLCJzbGljZUl0ZXJhdG9yIiwiVEFVIiwibWFwVG9FbGxpcHNlIiwiX3JlZiIsImNvc3BoaSIsInNpbnBoaSIsImNlbnRlcngiLCJjZW50ZXJ5IiwiYXBwcm94VW5pdEFyYyIsImFuZzEiLCJhbmcyIiwidmVjdG9yQW5nbGUiLCJ1eCIsInV5IiwiZG90IiwiX3JlZjIiLCJfcmVmMiR4QXhpc1JvdGF0aW9uIiwiX3JlZjIkbGFyZ2VBcmNGbGFnIiwiX3JlZjIkc3dlZXBGbGFnIiwicHhwIiwicHlwIiwiX2dldEFyY0NlbnRlciIsInJ4c3EiLCJyeXNxIiwicHhwc3EiLCJweXBzcSIsInJhZGljYW50IiwiY2VudGVyeHAiLCJjZW50ZXJ5cCIsInZ4MSIsInZ5MSIsInZ4MiIsInZ5MiIsImdldEFyY0NlbnRlciIsIl9nZXRBcmNDZW50ZXIyIiwic2VnbWVudHMiLCJjdXJ2ZSIsIl9tYXBUb0VsbGlwc2UiLCJfbWFwVG9FbGxpcHNlMiIsIl9tYXBUb0VsbGlwc2UzIiwiYmV6aWVyIiwibm9ybSIsInRtcDEiLCJ0bXAyIiwidG1wMyIsInN2ZyIsInBlbiIsImJlemllclRvIiwiz4AiLCJfMTIwIiwicmFkaWFucyIsImxhcmdlX2FyY19mbGFnIiwic3dlZXBfZmxhZyIsImYxIiwiZjIiLCJ4eSIsInJvdGF0ZSIsInJ4MiIsInJ5MiIsImFzaW4iLCJ0b0ZpeGVkIiwiZjJvbGQiLCJ4Mm9sZCIsInkyb2xkIiwiaHgiLCJoeSIsInJvdCIsInJhZCIsImRlZ3Jlc3MiLCJCbGFkZUFwaSIsIltvYmplY3QgT2JqZWN0XSIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVyXyIsImRpc2FibGVkIiwidmlld1Byb3BzIiwiaGlkZGVuIiwiVHBFdmVudCIsIlRwQ2hhbmdlRXZlbnQiLCJwcmVzZXRLZXkiLCJsYXN0Iiwic3VwZXIiLCJUcFVwZGF0ZUV2ZW50IiwiVHBGb2xkRXZlbnQiLCJleHBhbmRlZCIsImZvcmNlQ2FzdCIsImRlZXBFcXVhbHNBcnJheSIsIkNSRUFURV9NRVNTQUdFX01BUCIsImFscmVhZHlkaXNwb3NlZCIsImludmFsaWRwYXJhbXMiLCJub21hdGNoaW5nY29udHJvbGxlciIsIm5vbWF0Y2hpbmd2aWV3Iiwibm90YmluZGFibGUiLCJwcm9wZXJ0eW5vdGZvdW5kIiwic2hvdWxkbmV2ZXJoYXBwZW4iLCJUcEVycm9yIiwiX2EiLCJCaW5kaW5nVGFyZ2V0Iiwib3B0X2lkIiwib2JqXyIsImtleV8iLCJwcmVzZXRLZXlfIiwidmFsdWVPYmoiLCJpc0JpbmRhYmxlIiwibm90QmluZGFibGUiLCJwcm9wZXJ0eU5vdEZvdW5kIiwiQnV0dG9uQXBpIiwibGFiZWwiLCJ0aXRsZSIsInZhbHVlQ29udHJvbGxlciIsImV2ZW50TmFtZSIsImJoIiwiZW1pdHRlciIsIkVtaXR0ZXIiLCJvYnNlcnZlcnNfIiwib2JzZXJ2ZXJzIiwib2JzZXJ2ZXIiLCJQUkVGSVgiLCJDbGFzc05hbWUiLCJ2aWV3TmFtZSIsIm9wdF9lbGVtZW50TmFtZSIsIm9wdF9tb2RpZmllciIsImV4dHJhY3RWYWx1ZSIsInJhd1ZhbHVlIiwiYmluZFZhbHVlIiwiYXBwbHlWYWx1ZSIsImgxIiwiaDIiLCJiaW5kVmFsdWVNYXAiLCJ2YWx1ZU1hcCIsInZhbHVlVG9DbGFzc05hbWUiLCJlbGVtIiwiYWN0aXZlIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiYXBwbHlDbGFzcyIsImJpbmRWYWx1ZVRvVGV4dENvbnRlbnQiLCJ0ZXh0IiwidGV4dENvbnRlbnQiLCJjbGFzc05hbWUkcSIsIkJ1dHRvblZpZXciLCJkb2MiLCJiaW5kQ2xhc3NNb2RpZmllcnMiLCJidXR0b25FbGVtIiwiYmluZERpc2FibGVkIiwiYnV0dG9uRWxlbWVudCIsInRpdGxlRWxlbSIsIkJ1dHRvbkNvbnRyb2xsZXIiLCJvbkNsaWNrXyIsInZpZXciLCJlbWl0Iiwic2VuZGVyIiwiQm91bmRWYWx1ZSIsImNvbnN0cmFpbnRfIiwiY29uc3RyYWludCIsImVxdWFsc18iLCJlcXVhbHMiLCJyYXdWYWx1ZV8iLCJzZXRSYXdWYWx1ZSIsImZvcmNlRW1pdCIsImNvbnN0cmFpbmVkVmFsdWUiLCJjb25zdHJhaW4iLCJQcmltaXRpdmVWYWx1ZSIsInZhbHVlXyIsImNyZWF0ZVZhbHVlIiwiVmFsdWVNYXAiLCJ2YWxNYXBfIiwiY3JlYXRlQ29yZSIsImNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIiLCJzdWNjZWVkZWQiLCJjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVycyIsImN1c3RvbSIsInN0cmluZyIsImZ1bmN0aW9uIiwicmF3Iiwia2V5VG9QYXJzZXJNYXAiLCJpc09iamVjdCIsInBhcnNlciIsInBhcnNlT2JqZWN0IiwiaXRlbVBhcnNlciIsInBhcnNlSXRlbSIsInBhcnNlQXJyYXkiLCJQYXJhbXNQYXJzZXJzIiwicmVxdWlyZWQiLCJwYXJzZVBhcmFtcyIsImNsYXNzTmFtZSRwIiwiUE9TX1RPX0NMQVNTX05BTUVfTUFQIiwidmVyeWZpcnN0IiwiZmlyc3QiLCJ2ZXJ5bGFzdCIsIkJsYWRlQ29udHJvbGxlciIsInBhcmVudF8iLCJibGFkZSIsInBvcyIsImhhbmRsZURpc3Bvc2UiLCJkaXNwb3NlRWxlbWVudCIsIlNWR19OUyIsInN1cHBvcnRzVG91Y2giLCJvbnRvdWNoc3RhcnQiLCJnZXRXaW5kb3dEb2N1bWVudCIsIklDT05fSURfVE9fSU5ORVJfSFRNTF9NQVAiLCJkcm9wZG93biIsInAyZHBhZCIsImNyZWF0ZVN2Z0ljb25FbGVtZW50IiwiaWNvbklkIiwiY3JlYXRlRWxlbWVudE5TIiwiaW5uZXJIVE1MIiwiaW5zZXJ0RWxlbWVudEF0IiwiaW5zZXJ0QmVmb3JlIiwiY2hpbGRyZW4iLCJyZW1vdmVFbGVtZW50IiwicmVtb3ZlQ2hpbGRFbGVtZW50cyIsImZpbmROZXh0VGFyZ2V0IiwicmVsYXRlZFRhcmdldCIsImV4cGxpY2l0T3JpZ2luYWxUYXJnZXQiLCJjbGFzc05hbWUkbyIsIkxhYmVsVmlldyIsImxhYmVsRWxlbSIsImNoaWxkTm9kZXMiLCJyZW1vdmVDaGlsZE5vZGVzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImNyZWF0ZVRleHROb2RlIiwibGluZU5vZGUiLCJjcmVhdGVMYWJlbE5vZGUiLCJsYWJlbEVsZW1lbnQiLCJ2YWx1ZUVsZW0iLCJ2YWx1ZUVsZW1lbnQiLCJMYWJlbENvbnRyb2xsZXIiLCJCdXR0b25CbGFkZVBsdWdpbiIsImZyb21PYmplY3QiLCJhcGkiLCJWYWx1ZUJsYWRlQ29udHJvbGxlciIsImNyZWF0ZUJsYWRlIiwiRm9sZGFibGUiLCJjb21wbGV0ZWQiLCJleHBhbmRlZEhlaWdodCIsInNob3VsZEZpeEhlaWdodCIsInRlbXBvcmFyeUV4cGFuZGVkIiwic3R5bGVFeHBhbmRlZCIsImV4SGVpZ2h0IiwiZXhwYW5kZWRDbGFzc05hbWUiLCJvbkV4cGFuZCIsImFwcGx5SGVpZ2h0IiwiZm9sZGFibGUiLCJiaW5kRm9sZGFibGUiLCJmb2xkZXIiLCJjb250YWluZXJFbGVtZW50IiwidHJhbnNpdGlvbiIsImRpc2FibGVUcmFuc2l0aW9uVGVtcG9yYXJpbHkiLCJjbGllbnRIZWlnaHQiLCJjb21wdXRlRXhwYW5kZWRGb2xkZXJIZWlnaHQiLCJjbGVhblVwVHJhbnNpdGlvbiIsIlJhY2tMaWtlQXBpIiwicmFja0FwaSIsInJhY2tBcGlfIiwiTmVzdGVkT3JkZXJlZFNldCIsImV4dHJhY3QiLCJpdGVtc18iLCJjYWNoZV8iLCJvblN1Ykxpc3RBZGRfIiwib25TdWJMaXN0UmVtb3ZlXyIsImV4dHJhY3RfIiwiaXRlbXMiLCJhbGxJdGVtcyIsIm9wdF9pbmRleCIsInNob3VsZE5ldmVySGFwcGVuIiwic3ViTGlzdCIsInJvb3QiLCJkZWxldGUiLCJvZmYiLCJJbnB1dEJpbmRpbmdBcGkiLCJvbkJpbmRpbmdDaGFuZ2VfIiwiZW1pdHRlcl8iLCJJbnB1dEJpbmRpbmdDb250cm9sbGVyIiwiTW9uaXRvckJpbmRpbmdBcGkiLCJvbkJpbmRpbmdVcGRhdGVfIiwiTW9uaXRvckJpbmRpbmdDb250cm9sbGVyIiwidGlja2VyIiwiZmluZFN1YkJsYWRlQXBpU2V0IiwiUmFja0FwaSIsImdldEFwaUJ5Q29udHJvbGxlciIsImFwaVNldCIsImNyZWF0ZUJpbmRpbmdUYXJnZXQiLCJvblJhY2tBZGRfIiwib25SYWNrUmVtb3ZlXyIsIm9uUmFja0lucHV0Q2hhbmdlXyIsIm9uUmFja01vbml0b3JVcGRhdGVfIiwiYXBpU2V0XyIsInBvb2xfIiwicmFjayIsInNldFVwQXBpXyIsIm9wdF9wYXJhbXMiLCJjcmVhdGVJbnB1dCIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVNb25pdG9yIiwiYWRkQmxhZGUiLCJhZGRGb2xkZXJBc0JsYWRlIiwiYWRkQnV0dG9uQXNCbGFkZSIsImFkZFNlcGFyYXRvckFzQmxhZGUiLCJhZGRUYWJBc0JsYWRlIiwiZ2FwaSIsImNyZWF0ZUJsYWRlQXBpIiwiYmxhZGVDb250cm9sbGVyIiwiaXNSb290IiwiRm9sZGVyQXBpIiwicmFja0NvbnRyb2xsZXIiLCJhZGRJbnB1dCIsImFkZE1vbml0b3IiLCJhZGRGb2xkZXIiLCJhZGRCdXR0b24iLCJhZGRTZXBhcmF0b3IiLCJhZGRUYWIiLCJSYWNrTGlrZUNvbnRyb2xsZXIiLCJQbGFpblZpZXciLCJmaW5kU3ViUmFjayIsIlJhY2tDb250cm9sbGVyIiwiZmluZFN1YkJsYWRlQ29udHJvbGxlclNldCIsIkJsYWRlUmFjayIsIm9uQmxhZGVQb3NpdGlvbnNDaGFuZ2VfIiwib25TZXRBZGRfIiwib25TZXRSZW1vdmVfIiwib25DaGlsZERpc3Bvc2VfIiwib25DaGlsZFBvc2l0aW9uc0NoYW5nZV8iLCJvbkNoaWxkSW5wdXRDaGFuZ2VfIiwib25DaGlsZE1vbml0b3JVcGRhdGVfIiwib25DaGlsZFZhbHVlQ2hhbmdlXyIsIm9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfIiwib25EZXNjZW5kYW50TGF5b3V0XyIsIm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyIsIm9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfIiwiYmxhZGVfIiwiYmNTZXRfIiwiY29udHJvbGxlckNsYXNzIiwidXBkYXRlUG9zaXRpb25zXyIsInZpc2libGVJdGVtcyIsImZpcnN0VmlzaWJsZUl0ZW0iLCJsYXN0VmlzaWJsZUl0ZW0iLCJfZXYiLCJiY3MiLCJmaW5kSW5wdXRCaW5kaW5nQ29udHJvbGxlciIsImZpbmRNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIiLCJmaW5kVmFsdWVCbGFkZUNvbnRyb2xsZXIiLCJibGFkZUNvbnRhaW5lckNsYXNzTmFtZSIsIkZvbGRlclZpZXciLCJjbGFzc05hbWVfIiwiZm9sZGFibGVfIiwiYmluZEV4cGFuZGVkQ2xhc3MiLCJ0aXRsZUVsZW1lbnQiLCJtYXJrRWxlbSIsImNvbnRhaW5lckVsZW0iLCJGb2xkZXJDb250cm9sbGVyIiwib25UaXRsZUNsaWNrXyIsIkZvbGRlckJsYWRlUGx1Z2luIiwiTGFiZWxlZFZhbHVlQ29udHJvbGxlciIsIlNlcGFyYXRvckFwaSIsImNsYXNzTmFtZSRuIiwiU2VwYXJhdG9yVmlldyIsImhyRWxlbSIsIlNlcGFyYXRvckNvbnRyb2xsZXIiLCJTZXBhcmF0b3JCbGFkZVBsdWdpbiIsImNsYXNzTmFtZSRtIiwidmFsdWVUb01vZGlmaWVyIiwibW9kaWZpZXIiLCJWaWV3UHJvcHMiLCJvcHRfaW5pdGlhbFZhbHVlIiwiX2IiLCJjb3JlT2JqIiwiZGlzcG9zZWQiLCJ0YWJJbmRleCIsImNsYXNzTmFtZSRsIiwiVGFiSXRlbVZpZXciLCJzZWxlY3RlZCIsIlRhYkl0ZW1Db250cm9sbGVyIiwiVGFiUGFnZUNvbnRyb2xsZXIiLCJvbkl0ZW1DbGlja18iLCJpY18iLCJpdGVtUHJvcHMiLCJjY18iLCJpdGVtQ29udHJvbGxlciIsImNvbnRlbnRDb250cm9sbGVyIiwiVGFiUGFnZUFwaSIsImNvbnRlbnRSYWNrQXBpIiwiVGFiQXBpIiwib25QYWdlQWRkXyIsIm9uUGFnZVJlbW92ZV8iLCJwYWdlQXBpTWFwXyIsInBhZ2VTZXQiLCJzZXRVcFBhZ2VBcGlfIiwicGFnZXMiLCJjbGFzc05hbWUkayIsIlRhYlZpZXciLCJlbXB0eSIsIml0ZW1zRWxlbSIsIml0ZW1zRWxlbWVudCIsImNvbnRlbnRzRWxlbSIsImNvbnRlbnRzRWxlbWVudCIsIlRhYkNvbnRyb2xsZXIiLCJjciIsIm9uUGFnZVNlbGVjdGVkQ2hhbmdlXyIsInBhZ2VTZXRfIiwiZW1wdHlfIiwiYXBwbHlQYWdlc18iLCJrZWVwU2VsZWN0aW9uXyIsImZpcnN0U2VsSW5kZXgiLCJmaW5kSW5kZXgiLCJUYWJCbGFkZVBsdWdpbiIsIk1hbnVhbFRpY2tlciIsIkludGVydmFsVGlja2VyIiwiaW50ZXJ2YWwiLCJkaXNhYmxlZF8iLCJ0aW1lcklkXyIsIm9uVGlja18iLCJkb2NfIiwiaW50ZXJ2YWxfIiwic2V0VGltZXJfIiwiaW5hY3RpdmUiLCJjbGVhclRpbWVyXyIsIndpbiIsImRlZmF1bHRWaWV3IiwiY2xlYXJJbnRlcnZhbCIsInNldEludGVydmFsIiwiQ29tcG9zaXRlQ29uc3RyYWludCIsImNvbnN0cmFpbnRzIiwiZmluZENvbnN0cmFpbnQiLCJjb25zdHJhaW50Q2xhc3MiLCJ0bXBSZXN1bHQiLCJzYyIsIkxpc3RDb25zdHJhaW50IiwiUmFuZ2VDb25zdHJhaW50IiwibWF4VmFsdWUiLCJtaW5WYWx1ZSIsIlN0ZXBDb25zdHJhaW50Iiwic3RlcCIsImNsYXNzTmFtZSRqIiwiTGlzdFZpZXciLCJvblZhbHVlQ2hhbmdlXyIsInByb3BzXyIsInNlbGVjdEVsZW0iLCJvcHRpb25FbGVtIiwiZGF0YXNldCIsInNlbGVjdEVsZW1lbnQiLCJ1cGRhdGVfIiwiTGlzdENvbnRyb2xsZXIiLCJvblNlbGVjdENoYW5nZV8iLCJvcHRFbGVtIiwiY3VycmVudFRhcmdldCIsInNlbGVjdGVkT3B0aW9ucyIsIml0ZW1JbmRleCIsImNsYXNzTmFtZSRpIiwiUG9wdXBWaWV3Iiwic2hvd3MiLCJQb3B1cENvbnRyb2xsZXIiLCJjbGFzc05hbWUkaCIsIlRleHRWaWV3Iiwib25DaGFuZ2VfIiwiaW5wdXRFbGVtIiwiaW5wdXRFbGVtZW50IiwiZm9ybWF0dGVyIiwiVGV4dENvbnRyb2xsZXIiLCJvbklucHV0Q2hhbmdlXyIsInBhcnNlcl8iLCJwYXJzZWRWYWx1ZSIsImJvb2xGcm9tVW5rbm93biIsIkJvb2xlYW5Gb3JtYXR0ZXIiLCJib29sVG9TdHJpbmciLCJOdW1iZXJMaXRlcmFsTm9kZSIsIkJJTkFSWV9PUEVSQVRJT05fTUFQIiwiKioiLCIqIiwiLyIsIiUiLCIrIiwiLSIsIjw8IiwiPj4iLCI+Pj4iLCImIiwiXiIsInwiLCJCaW5hcnlPcGVyYXRpb25Ob2RlIiwib3BlcmF0b3IiLCJldmFsdWF0ZSIsIlVOQVJZX09QRVJBVElPTl9NQVAiLCJ+IiwiVW5hcnlPcGVyYXRpb25Ob2RlIiwiZXhwciIsImV4cHJlc3Npb24iLCJjb21iaW5lUmVhZGVyIiwicGFyc2VycyIsImN1cnNvciIsInJlYWRXaGl0ZXNwYWNlIiwicmVhZERlY2ltYWxEaWdpdHMiLCJyZWFkRXhwb25lbnRQYXJ0Iiwic2kiLCJzZHMiLCJyZWFkU2lnbmVkSW50ZWdlciIsInJlYWREZWNpbWFsSW50ZWdlckxpdGVyYWwiLCJuemQiLCJyZWFkTm9uWmVyb0RpZ2l0IiwicmVhZERlY2ltYWxMaXRlcmFsIiwiZGlsIiwiZGRzIiwicmVhZE5vbkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbCIsImJkcyIsInBhcnNlQmluYXJ5RGlnaXRzIiwib2RzIiwicmVhZE9jdGFsRGlnaXRzIiwiaGRzIiwicmVhZEhleERpZ2l0cyIsInJlYWROdW1lcmljTGl0ZXJhbCIsInBhcnNlUHJpbWFyeUV4cHJlc3Npb24iLCJldmFsdWFibGUiLCJwYXJzZUxpdGVyYWwiLCJwYXJzZUV4cHJlc3Npb24iLCJjbCIsInBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb24iLCJyZWFkQmluYXJ5T3BlcmF0b3IiLCJvcHMiLCJzdGFydHNXaXRoIiwicGFyc2VCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uIiwiZXhwclBhcnNlciIsImZpcnN0RXhwciIsIm5leHRFeHByIiwiY3JlYXRlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvblBhcnNlciIsInBhcnNlVW5hcnlFeHByZXNzaW9uIiwicGFyc2VOdW1iZXIiLCJwYXJzZUVjbWFOdW1iZXJFeHByZXNzaW9uIiwibnVtYmVyRnJvbVVua25vd24iLCJwdiIsIm51bWJlclRvU3RyaW5nIiwiY3JlYXRlTnVtYmVyRm9ybWF0dGVyIiwiZGlnaXRzIiwiaW5uZXJGb3JtYXR0ZXIiLCJmb3JtYXRQZXJjZW50YWdlIiwic3RyaW5nRnJvbVVua25vd24iLCJmb3JtYXRTdHJpbmciLCJmaWxsQnVmZmVyIiwiYnVmZmVyU2l6ZSIsImluaXRpYWxpemVCdWZmZXIiLCJjcmVhdGVUcmltbWVkQnVmZmVyIiwiY29ubmVjdFZhbHVlcyIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJmb3J3YXJkIiwiYmFja3dhcmQiLCJjaGFuZ2luZyIsInByZXZlbnRGZWVkYmFjayIsImdldFN0ZXBGb3JLZXkiLCJiYXNlU3RlcCIsInVwS2V5IiwiZG93bktleSIsImdldFZlcnRpY2FsU3RlcEtleXMiLCJnZXRIb3Jpem9udGFsU3RlcEtleXMiLCJpc0Fycm93S2V5IiwiaXNWZXJ0aWNhbEFycm93S2V5IiwiY29tcHV0ZU9mZnNldCQxIiwicGFnZVgiLCJzY3JvbGxYIiwicGFnZVkiLCJzY3JvbGxZIiwiUG9pbnRlckhhbmRsZXIiLCJsYXN0VG91Y2hfIiwib25Eb2N1bWVudE1vdXNlTW92ZV8iLCJvbkRvY3VtZW50TW91c2VVcF8iLCJvbk1vdXNlRG93bl8iLCJvblRvdWNoRW5kXyIsIm9uVG91Y2hNb3ZlXyIsIm9uVG91Y2hTdGFydF8iLCJlbGVtXyIsInBhc3NpdmUiLCJmb2N1cyIsImNvbXB1dGVQb3NpdGlvbl8iLCJ0b3VjaCIsInRhcmdldFRvdWNoZXMiLCJjbGllbnRYIiwiY2xpZW50WSIsInN0YXJ0MSIsImVuZDEiLCJzdGFydDIiLCJlbmQyIiwiZ2V0RGVjaW1hbERpZ2l0cyIsImNvbnN0cmFpblJhbmdlIiwibG9vcFJhbmdlIiwiY2xhc3NOYW1lJGciLCJOdW1iZXJUZXh0VmlldyIsImFycmF5UG9zaXRpb24iLCJvbkRyYWdnaW5nQ2hhbmdlXyIsImRyYWdnaW5nXyIsImRyYWdnaW5nIiwia25vYkVsZW0iLCJrbm9iRWxlbWVudCIsImd1aWRlRWxlbSIsImJvZHlFbGVtIiwiZ3VpZGVCb2R5RWxlbV8iLCJoZWFkRWxlbSIsImd1aWRlSGVhZEVsZW1fIiwidG9vbHRpcEVsZW0iLCJ0b29sdGlwRWxlbV8iLCJhb3giLCJhZHgiLCJzZXRBdHRyaWJ1dGVOUyIsIk51bWJlclRleHRDb250cm9sbGVyIiwib3JpZ2luUmF3VmFsdWVfIiwib25JbnB1dEtleURvd25fIiwib25JbnB1dEtleVVwXyIsIm9uUG9pbnRlckRvd25fIiwib25Qb2ludGVyTW92ZV8iLCJvblBvaW50ZXJVcF8iLCJiYXNlU3RlcF8iLCJwaCIsImNvbXB1dGVEcmFnZ2luZ1ZhbHVlXyIsImNsYXNzTmFtZSRmIiwiU2xpZGVyVmlldyIsInRyYWNrRWxlbSIsImJpbmRUYWJJbmRleCIsInRyYWNrRWxlbWVudCIsIlNsaWRlckNvbnRyb2xsZXIiLCJvbktleURvd25fIiwib25LZXlVcF8iLCJvblBvaW50ZXJEb3duT3JNb3ZlXyIsInB0SGFuZGxlcl8iLCJoYW5kbGVQb2ludGVyRXZlbnRfIiwiY2xhc3NOYW1lJGUiLCJTbGlkZXJUZXh0VmlldyIsInNsaWRlckVsZW0iLCJzbGlkZXJWaWV3XyIsInNsaWRlclZpZXciLCJ0ZXh0RWxlbSIsInRleHRWaWV3XyIsInRleHRWaWV3IiwiU2xpZGVyVGV4dENvbnRyb2xsZXIiLCJzbGlkZXJDXyIsInNsaWRlclByb3BzIiwidGV4dENfIiwidGV4dFByb3BzIiwic2xpZGVyQ29udHJvbGxlciIsInRleHRDb250cm9sbGVyIiwid3JpdGVQcmltaXRpdmUiLCJ3cml0ZSIsInBhcnNlTGlzdE9wdGlvbnMiLCJwYXJzZVBpY2tlckxheW91dCIsInBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMiLCJub3JtYWxpemVMaXN0T3B0aW9ucyIsImNyZWF0ZUxpc3RDb25zdHJhaW50IiwiZmluZExpc3RJdGVtcyIsImdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyIsImdldEJhc2VTdGVwIiwiZmluZFN0ZXAiLCJnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUiLCJsb2cxMCIsImNsYXNzTmFtZSRkIiwiQ2hlY2tib3hWaWV3Iiwid3JhcHBlckVsZW0iLCJjaGVja2VkIiwiQ2hlY2tib3hDb250cm9sbGVyIiwiQm9vbGVhbklucHV0UGx1Z2luIiwiYWNjZXB0IiwicmVhZGVyIiwiX2FyZ3MiLCJsYyIsImNyZWF0ZUNvbnN0cmFpbnQkNSIsIndyaXRlciIsImNsYXNzTmFtZSRjIiwiQ29sb3JWaWV3Iiwic3dhdGNoRWxlbSIsInN3YXRjaEVsZW1lbnQiLCJ0ZXh0RWxlbWVudCIsInBpY2tlckxheW91dCIsInBpY2tlckVsZW0iLCJwaWNrZXJFbGVtZW50IiwiaHN2VG9SZ2IiLCJocCIsInNwIiwidnAiLCJycCIsImdwIiwiYnAiLCJyZW1vdmVBbHBoYUNvbXBvbmVudCIsImNvbXBzIiwiYXBwZW5kQWxwaGFDb21wb25lbnQiLCJNT0RFX0NPTlZFUlRFUl9NQVAiLCJzZCIsImxwIiwiY21heCIsImNtaW4iLCJDT05TVFJBSU5UX01BUCIsImlzUmdiQ29sb3JDb21wb25lbnQiLCJDb2xvciIsIm1vZGUiLCJtb2RlXyIsImNvbXBzXyIsInRvUmdiYU9iamVjdCIsImlzUmdiQ29sb3JPYmplY3QiLCJjb21wczEiLCJjb21wczIiLCJvcHRfbW9kZSIsImNvbXBvbmVudHMiLCJyZ2JDb21wcyIsImdldENvbXBvbmVudHMiLCJjbGFzc05hbWUkYiIsIkNvbG9yUGlja2VyVmlldyIsImFscGhhVmlld3NfIiwiaHN2RWxlbSIsInN2RWxlbSIsInN2UGFsZXR0ZVZpZXdfIiwic3ZQYWxldHRlVmlldyIsImhFbGVtIiwiaFBhbGV0dGVWaWV3XyIsImhQYWxldHRlVmlldyIsInJnYkVsZW0iLCJhbHBoYVZpZXdzIiwicGFsZXR0ZSIsImFFbGVtIiwiYXBFbGVtIiwiYXRFbGVtIiwiYWxsRm9jdXNhYmxlRWxlbWVudHMiLCJlbGVtcyIsIm1vZGVTZWxlY3RFbGVtZW50IiwidGV4dFZpZXdzIiwicGFyc2VDb2xvcklucHV0UGFyYW1zIiwicGlja2VyIiwiZ2V0QmFzZVN0ZXBGb3JDb2xvciIsImZvckFscGhhIiwicGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UiLCJBTkdMRV9UT19ERUdfTUFQIiwiZGVnIiwiZ3JhZCIsInR1cm4iLCJwYXJzZUNzc051bWJlck9yQW5nbGUiLCJOT1RBVElPTl9UT19QQVJTRVJfTUFQIiwiZnVuYy5yZ2IiLCJmdW5jLnJnYmEiLCJmdW5jLmhzbCIsImZ1bmMuaHNsYSIsImhleC5yZ2IiLCJtUmdiIiwibVJyZ2diYiIsImhleC5yZ2JhIiwiZ2V0Q29sb3JOb3RhdGlvbiIsIm5vdGF0aW9uIiwic3VicGFyc2VyIiwiQ29tcG9zaXRlQ29sb3JQYXJzZXIiLCJoYXNBbHBoYUNvbXBvbmVudCIsInplcm9maWxsIiwiY29tcCIsImNvbG9yVG9IZXhSZ2JTdHJpbmciLCJjb2xvclRvSGV4UmdiYVN0cmluZyIsInJnYmFDb21wcyIsImNvbG9yVG9GdW5jdGlvbmFsUmdiU3RyaW5nIiwiY29sb3JUb0Z1bmN0aW9uYWxSZ2JhU3RyaW5nIiwiYUZvcm1hdHRlciIsInJnYkZvcm1hdHRlciIsIk5PVEFUSU9OX1RPX1NUUklOR0lGSUVSX01BUCIsImZvcm1hdHRlcnMiLCJnZXRDb2xvclN0cmluZ2lmaWVyIiwiY2xhc3NOYW1lJGEiLCJBUGFsZXR0ZVZpZXciLCJiYXJFbGVtIiwiY29sb3JFbGVtIiwiY29sb3JFbGVtXyIsIm1hcmtlckVsZW0iLCJtYXJrZXJFbGVtXyIsInByZXZpZXdFbGVtIiwicHJldmlld0VsZW1fIiwibGVmdENvbG9yIiwicmlnaHRDb2xvciIsImdyYWRpZW50Q29tcHMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJBUGFsZXR0ZUNvbnRyb2xsZXIiLCJjbGFzc05hbWUkOSIsIkNvbG9yVGV4dFZpZXciLCJtb2RlRWxlbSIsIm1vZGVFbGVtXyIsImNyZWF0ZU1vZGVTZWxlY3RFbGVtZW50IiwibW9kZU1hcmtlckVsZW0iLCJ0ZXh0c0VsZW0iLCJ0ZXh0c0VsZW1fIiwidGV4dFZpZXdzXyIsImFwcGx5VGV4dFZpZXdzXyIsImNvbG9yTW9kZSIsImNvbXBFbGVtIiwiRk9STUFUVEVSIiwiTU9ERV9UT19DT05TVFJBSU5UX01BUCIsImNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXIiLCJkcmFnZ2luZ1NjYWxlIiwiQ29sb3JUZXh0Q29udHJvbGxlciIsIm9uTW9kZVNlbGVjdENoYW5nZV8iLCJjY3NfIiwiY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfIiwiY2MiLCJjY3MiLCJjcyIsInBpY2tlZE1vZGUiLCJjbGFzc05hbWUkOCIsIkhQYWxldHRlVmlldyIsIkhQYWxldHRlQ29udHJvbGxlciIsImNsYXNzTmFtZSQ3IiwiQ0FOVkFTX1JFU09MIiwiU3ZQYWxldHRlVmlldyIsImNhbnZhc0VsZW0iLCJjYW52YXNFbGVtZW50IiwiZ2V0Q2FudmFzQ29udGV4dCIsImhzdkNvbXBzIiwiZ2V0SW1hZ2VEYXRhIiwiaXkiLCJpeCIsInB1dEltYWdlRGF0YSIsIlN2UGFsZXR0ZUNvbnRyb2xsZXIiLCJzYXR1cmF0aW9uIiwiZHYiLCJDb2xvclBpY2tlckNvbnRyb2xsZXIiLCJoUGFsZXR0ZUNfIiwic3ZQYWxldHRlQ18iLCJhbHBoYUljc18iLCJzdXBwb3J0c0FscGhhIiwiY2xhc3NOYW1lJDYiLCJDb2xvclN3YXRjaFZpZXciLCJzd2F0Y2hFbGVtXyIsIkNvbG9yU3dhdGNoQ29udHJvbGxlciIsIkNvbG9yQ29udHJvbGxlciIsIm9uQnV0dG9uQmx1cl8iLCJvbkJ1dHRvbkNsaWNrXyIsIm9uUG9wdXBDaGlsZEJsdXJfIiwib25Qb3B1cENoaWxkS2V5ZG93bl8iLCJzd2F0Y2hDXyIsInBvcENfIiwicGlja2VyQyIsInBpY2tlckNfIiwibmV4dFRhcmdldCIsImNvbnRhaW5zIiwiY29sb3JUb1JnYk51bWJlciIsImNvbG9yVG9SZ2JhTnVtYmVyIiwiY29sb3JGcm9tUmdiTnVtYmVyIiwiY29sb3JGcm9tUmdiYU51bWJlciIsIndyaXRlUmdiYUNvbG9yT2JqZWN0Iiwid3JpdGVQcm9wZXJ0eSIsIndyaXRlUmdiQ29sb3JPYmplY3QiLCJzaG91bGRTdXBwb3J0QWxwaGEkMSIsImlucHV0UGFyYW1zIiwiY3JlYXRlRm9ybWF0dGVyJDEiLCJOdW1iZXJDb2xvcklucHV0UGx1Z2luIiwiY29sb3JUb051bWJlciIsImNyZWF0ZUNvbG9yTnVtYmVyV3JpdGVyIiwiT2JqZWN0Q29sb3JJbnB1dFBsdWdpbiIsImlzQ29sb3JPYmplY3QiLCJjcmVhdGVDb2xvck9iamVjdFdyaXRlciIsImlzUmdiYUNvbG9yT2JqZWN0Iiwic2hvdWxkU3VwcG9ydEFscGhhIiwiU3RyaW5nQ29sb3JJbnB1dFBsdWdpbiIsImN2IiwiY3JlYXRlQ29sb3JTdHJpbmdXcml0ZXIiLCJzdHJpbmdpZmllciIsIlBvaW50TmRDb25zdHJhaW50IiwiYXNtXyIsImFzc2VtYmx5IiwidG9Db21wb25lbnRzIiwiZnJvbUNvbXBvbmVudHMiLCJjbGFzc05hbWUkNSIsIlBvaW50TmRUZXh0VmlldyIsImF4aXNFbGVtIiwiUG9pbnROZFRleHRDb250cm9sbGVyIiwiYWNzXyIsImF4ZXMiLCJjcmVhdGVBeGlzQ29udHJvbGxlciIsImFjIiwiY3JlYXRlQ29uc3RyYWludCQ0IiwiY3JlYXRlU3RlcENvbnN0cmFpbnQiLCJjcmVhdGVSYW5nZUNvbnN0cmFpbnQiLCJlc3RpbWF0ZVN1aXRhYmxlUmFuZ2UiLCJmaW5kUmFuZ2UiLCJOdW1iZXJJbnB1dFBsdWdpbiIsIlBvaW50MmQiLCJQb2ludDJkQXNzZW1ibHkiLCJjbGFzc05hbWUkNCIsIlBvaW50MmRWaWV3IiwiY2xhc3NOYW1lJDMiLCJQb2ludDJkUGlja2VyVmlldyIsIm9uRm9sZGFibGVDaGFuZ2VfIiwiaW52ZXJ0c1lfIiwiaW52ZXJ0c1kiLCJtYXhWYWx1ZV8iLCJsYXlvdXQiLCJwYWRFbGVtIiwicGFkRWxlbWVudCIsInN2Z0VsZW0iLCJzdmdFbGVtXyIsInhBeGlzRWxlbSIsInlBeGlzRWxlbSIsImxpbmVFbGVtIiwibGluZUVsZW1fIiwiaXB5IiwiY29tcHV0ZU9mZnNldCIsImJhc2VTdGVwcyIsIlBvaW50MmRQaWNrZXJDb250cm9sbGVyIiwib25QYWRLZXlEb3duXyIsIm9uUGFkS2V5VXBfIiwiYmFzZVN0ZXBzXyIsIlBvaW50MmRDb250cm9sbGVyIiwib25QYWRCdXR0b25CbHVyXyIsIm9uUGFkQnV0dG9uQ2xpY2tfIiwicGFkQyIsImNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMiIsImdldFN1aXRhYmxlTWF4RGltZW5zaW9uVmFsdWUiLCJnZXRTdWl0YWJsZU1heFZhbHVlIiwieWMiLCJ4ciIsInlyIiwiY3JlYXRlQXhpcyQyIiwic2hvdWxkSW52ZXJ0WSIsInlQYXJhbXMiLCJpbnZlcnRlZCIsIlBvaW50MmRJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQkMyIsIlBvaW50M2QiLCJQb2ludDNkQXNzZW1ibHkiLCJjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50JDEiLCJjcmVhdGVBeGlzJDEiLCJQb2ludDNkSW5wdXRQbHVnaW4iLCJjcmVhdGVDb25zdHJhaW50JDIiLCJQb2ludDRkIiwiUG9pbnQ0ZEFzc2VtYmx5IiwiY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCIsIlBvaW50NGRJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQkMSIsImNyZWF0ZUF4aXMiLCJTdHJpbmdJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQiLCJDb25zdGFudHMiLCJtb25pdG9yIiwiZGVmYXVsdEludGVydmFsIiwiZGVmYXVsdExpbmVDb3VudCIsImNsYXNzTmFtZSQyIiwiTXVsdGlMb2dWaWV3Iiwib25WYWx1ZVVwZGF0ZV8iLCJmb3JtYXR0ZXJfIiwidGV4dGFyZWFFbGVtIiwibGluZUNvdW50IiwicmVhZE9ubHkiLCJ0ZXh0YXJlYUVsZW1fIiwic2hvdWxkU2Nyb2xsIiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiTXVsdGlMb2dDb250cm9sbGVyIiwiY2xhc3NOYW1lJDEiLCJTaW5nbGVMb2dWaWV3IiwibGFzdFZhbHVlIiwiU2luZ2xlTG9nQ29udHJvbGxlciIsIkJvb2xlYW5Nb25pdG9yUGx1Z2luIiwiR3JhcGhDdXJzb3IiLCJpbmRleF8iLCJHcmFwaExvZ1ZpZXciLCJvbkN1cnNvckNoYW5nZV8iLCJtaW5WYWx1ZV8iLCJjdXJzb3JfIiwiZ3JhcGhFbGVtZW50IiwibWF4SW5kZXgiLCJ0eCIsInR5IiwiR3JhcGhMb2dDb250cm9sbGVyIiwib25HcmFwaE1vdXNlTW92ZV8iLCJvbkdyYXBoTW91c2VMZWF2ZV8iLCJvbkdyYXBoUG9pbnRlckRvd25fIiwib25HcmFwaFBvaW50ZXJNb3ZlXyIsIm9uR3JhcGhQb2ludGVyVXBfIiwib2Zmc2V0WCIsImNyZWF0ZUZvcm1hdHRlciIsInNob3VsZFNob3dHcmFwaCIsIk51bWJlck1vbml0b3JQbHVnaW4iLCJkZWZhdWx0QnVmZmVyU2l6ZSIsIl9jIiwiY3JlYXRlR3JhcGhNb25pdG9yIiwiY3JlYXRlVGV4dE1vbml0b3IiLCJTdHJpbmdNb25pdG9yUGx1Z2luIiwiSW5wdXRCaW5kaW5nIiwidGFyZ2V0VmFsdWUiLCJ3cml0ZV8iLCJNb25pdG9yQmluZGluZyIsInJlYWRlcl8iLCJuZXdWYWx1ZSIsIm5ld0J1ZmZlciIsImNyZWF0ZVB1c2hlZEJ1ZmZlciIsImNyZWF0ZVRpY2tlciIsIlBsdWdpblBvb2wiLCJwbHVnaW5zTWFwXyIsImJsYWRlcyIsIm1vbml0b3JzIiwicGx1Z2luIiwidmFsdWVBcmdzIiwiY3JlYXRlSW5wdXRCaW5kaW5nQ29udHJvbGxlciIsIlAiLCJjcmVhdGVNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIiLCJjcmVhdGVCbGFkZUNvbnRyb2xsZXIiLCJMaXN0QXBpIiwiU2xpZGVyQXBpIiwiVGV4dEFwaSIsIkxpc3RCbGFkZVBsdWdpbiIsImljIiwiUm9vdEFwaSIsInRhcmdldHMiLCJpbXBvcnRQcmVzZXRKc29uIiwiaWJjIiwiZXhwb3J0UHJlc2V0SnNvbiIsIm1iYyIsIlJvb3RDb250cm9sbGVyIiwiU2xpZGVyQmxhZGVQbHVnaW4iLCJ2YyIsIlRleHRCbGFkZVBsdWdpbiIsImVtYmVkU3R5bGUiLCJjc3MiLCJzdHlsZUVsZW0iLCJ0cFN0eWxlIiwiaGVhZCIsIlZFUlNJT04iLCJwcmVyZWxlYXNlIiwiY29yZUNvbXBzIiwibWFqb3IiLCJtaW5vciIsInBhdGNoIiwiUGFuZSIsIm9wdF9jb25maWciLCJyZWdpc3RlciIsImNyZWF0ZURlZmF1bHRQbHVnaW5Qb29sIiwiY29udGFpbmVyRWxlbV8iLCJjcmVhdGVEZWZhdWx0V3JhcHBlckVsZW1lbnQiLCJ1c2VzRGVmYXVsdFdyYXBwZXJfIiwic2V0VXBEZWZhdWx0UGx1Z2luc18iLCJhbHJlYWR5RGlzcG9zZWQiLCJwYXJlbnRFbGVtIiwiYnVuZGxlIiwiZW1iZWRQbHVnaW5TdHlsZV8iLCJnZXRBbGwiLCJyZWdpc3RlclBsdWdpbiIsImdsb2JhbFRoaXMiLCJUd2Vha3BhbmUiLCJkcHIiLCJkaXN0YW5jZVRvQ2VudGVyIiwidmFyaWFuY2UiLCJjb21wb3NpdGVPcGVyYXRpb25zIiwiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIiwiZmlsbCIsImI2NCIsImxlbnMiLCJnZXRMZW5zIiwicGxhY2VIb2xkZXJzTGVuIiwidG9CeXRlQXJyYXkiLCJ2YWxpZExlbiIsIkFyciIsIl9ieXRlTGVuZ3RoIiwiY3VyQnl0ZSIsInJldkxvb2t1cCIsImZyb21CeXRlQXJyYXkiLCJleHRyYUJ5dGVzIiwibGVuMiIsImVuY29kZUNodW5rIiwibG9va3VwIiwiaWVlZTc1NCIsIlNsb3dCdWZmZXIiLCJJTlNQRUNUX01BWF9CWVRFUyIsIktfTUFYX0xFTkdUSCIsIlJhbmdlRXJyb3IiLCJfX3Byb3RvX18iLCJlbmNvZGluZ09yT2Zmc2V0IiwiaXNFbmNvZGluZyIsImZyb21TdHJpbmciLCJpc1ZpZXciLCJmcm9tQXJyYXlMaWtlIiwiaXNJbnN0YW5jZSIsImJ5dGVPZmZzZXQiLCJmcm9tQXJyYXlCdWZmZXIiLCJ2YWx1ZU9mIiwibnVtYmVySXNOYU4iLCJ0b1ByaW1pdGl2ZSIsImFzc2VydFNpemUiLCJtdXN0TWF0Y2giLCJsb3dlcmVkQ2FzZSIsInV0ZjhUb0J5dGVzIiwiYmFzZTY0VG9CeXRlcyIsInN3YXAiLCJiaWRpcmVjdGlvbmFsSW5kZXhPZiIsImRpciIsImFycmF5SW5kZXhPZiIsImxhc3RJbmRleE9mIiwiaW5kZXhTaXplIiwiYXJyTGVuZ3RoIiwidmFsTGVuZ3RoIiwicmVhZFVJbnQxNkJFIiwiZm91bmRJbmRleCIsImZvdW5kIiwiaGV4V3JpdGUiLCJyZW1haW5pbmciLCJzdHJMZW4iLCJ1dGY4V3JpdGUiLCJibGl0QnVmZmVyIiwiYXNjaWlXcml0ZSIsImJ5dGVBcnJheSIsImFzY2lpVG9CeXRlcyIsImxhdGluMVdyaXRlIiwiYmFzZTY0V3JpdGUiLCJ1Y3MyV3JpdGUiLCJ1dGYxNmxlVG9CeXRlcyIsImJhc2U2NFNsaWNlIiwidXRmOFNsaWNlIiwic2Vjb25kQnl0ZSIsInRoaXJkQnl0ZSIsImZvdXJ0aEJ5dGUiLCJ0ZW1wQ29kZVBvaW50IiwiZmlyc3RCeXRlIiwiY29kZVBvaW50IiwiYnl0ZXNQZXJTZXF1ZW5jZSIsImNvZGVQb2ludHMiLCJNQVhfQVJHVU1FTlRTX0xFTkdUSCIsImRlY29kZUNvZGVQb2ludHNBcnJheSIsImtNYXhMZW5ndGgiLCJUWVBFRF9BUlJBWV9TVVBQT1JUIiwiZm9vIiwidHlwZWRBcnJheVN1cHBvcnQiLCJzcGVjaWVzIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJwb29sU2l6ZSIsImFsbG9jVW5zYWZlU2xvdyIsIl9pc0J1ZmZlciIsImNvbXBhcmUiLCJzd2FwMTYiLCJzd2FwMzIiLCJzd2FwNjQiLCJ0b0xvY2FsZVN0cmluZyIsImhleFNsaWNlIiwiYXNjaWlTbGljZSIsImxhdGluMVNsaWNlIiwidXRmMTZsZVNsaWNlIiwiaW5zcGVjdCIsInRoaXNTdGFydCIsInRoaXNFbmQiLCJ0aGlzQ29weSIsInRhcmdldENvcHkiLCJ0b0pTT04iLCJ0b0hleCIsImJ5dGVzIiwiY2hlY2tPZmZzZXQiLCJjaGVja0ludCIsImNoZWNrSUVFRTc1NCIsIndyaXRlRmxvYXQiLCJsaXR0bGVFbmRpYW4iLCJub0Fzc2VydCIsIndyaXRlRG91YmxlIiwibmV3QnVmIiwicmVhZFVJbnRMRSIsIm11bCIsInJlYWRVSW50QkUiLCJyZWFkVUludDgiLCJyZWFkVUludDE2TEUiLCJyZWFkVUludDMyTEUiLCJyZWFkVUludDMyQkUiLCJyZWFkSW50TEUiLCJyZWFkSW50QkUiLCJyZWFkSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZEZsb2F0TEUiLCJyZWFkRmxvYXRCRSIsInJlYWREb3VibGVMRSIsInJlYWREb3VibGVCRSIsIndyaXRlVUludExFIiwid3JpdGVVSW50QkUiLCJ3cml0ZVVJbnQ4Iiwid3JpdGVVSW50MTZMRSIsIndyaXRlVUludDE2QkUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVSW50MzJCRSIsIndyaXRlSW50TEUiLCJsaW1pdCIsInN1YiIsIndyaXRlSW50QkUiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZUZsb2F0QkUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVEb3VibGVCRSIsInRhcmdldFN0YXJ0IiwiY29weVdpdGhpbiIsIklOVkFMSURfQkFTRTY0X1JFIiwibGVhZFN1cnJvZ2F0ZSIsImJhc2U2NGNsZWFuIiwiaXNMRSIsIm1MZW4iLCJuQnl0ZXMiLCJlTGVuIiwiZU1heCIsImVCaWFzIiwibkJpdHMiLCJOYU4iLCJydCIsIkxOMiIsIkNBTlZBU19TS0VUQ0hfREVGQVVMVF9TVE9SQUdFX0tFWSJdLCJtYXBwaW5ncyI6IkNBQUEsV0FBQSxPQUFBLFNBQUFBLEVBQUFDLEVBQUFDLEVBQUFDLEdBQUEsU0FBQUMsRUFBQUMsRUFBQUMsR0FBQSxJQUFBSixFQUFBRyxHQUFBLENBQUEsSUFBQUosRUFBQUksR0FBQSxDQUFBLElBQUFFLEVBQUEsbUJBQUFDLFNBQUFBLFFBQUEsSUFBQUYsR0FBQUMsRUFBQSxPQUFBQSxFQUFBRixHQUFBLEdBQUEsR0FBQUksRUFBQSxPQUFBQSxFQUFBSixHQUFBLEdBQUEsSUFBQUssRUFBQSxJQUFBQyxNQUFBLHVCQUFBTixFQUFBLEtBQUEsTUFBQUssRUFBQUUsS0FBQSxtQkFBQUYsRUFBQSxJQUFBRyxFQUFBWCxFQUFBRyxHQUFBLENBQUFTLFFBQUEsSUFBQWIsRUFBQUksR0FBQSxHQUFBVSxLQUFBRixFQUFBQyxRQUFBLFNBQUFkLEdBQUEsT0FBQUksRUFBQUgsRUFBQUksR0FBQSxHQUFBTCxJQUFBQSxJQUFBYSxFQUFBQSxFQUFBQyxRQUFBZCxFQUFBQyxFQUFBQyxFQUFBQyxHQUFBLE9BQUFELEVBQUFHLEdBQUFTLFFBQUEsSUFBQSxJQUFBTCxFQUFBLG1CQUFBRCxTQUFBQSxRQUFBSCxFQUFBLEVBQUFBLEVBQUFGLEVBQUFhLE9BQUFYLElBQUFELEVBQUFELEVBQUFFLElBQUEsT0FBQUQsR0FBQSxFQUFBLENBQUEsQ0FBQWEsRUFBQSxDQUFBLFNBQUFULEVBQUFVLEVBQUFKLEdDQ0FJLEVBQUFKLFFBU0EsU0FBQUssR0FDQSxJQUFBQyxFQUFBLEVBQ0FDLEVBQUEsRUFDQUMsRUFBQSxFQUNBQyxFQUFBLEVBRUEsT0FBQUosRUFBQUssSUFBQSxTQUFBQyxHQUVBLElBQUFDLEdBREFELEVBQUFBLEVBQUFFLFNBQ0EsR0FDQUMsRUFBQUYsRUFBQUcsY0FHQSxHQUFBSCxHQUFBRSxFQUVBLE9BREFILEVBQUEsR0FBQUcsRUFDQUYsR0FDQSxJQUFBLElBQ0FELEVBQUEsSUFBQUgsRUFDQUcsRUFBQSxJQUFBRixFQUNBLE1BQ0EsSUFBQSxJQUNBRSxFQUFBLElBQUFGLEVBQ0EsTUFDQSxJQUFBLElBQ0FFLEVBQUEsSUFBQUgsRUFDQSxNQUNBLFFBQ0EsSUFBQSxJQUFBakIsRUFBQSxFQUFBQSxFQUFBb0IsRUFBQVQsUUFDQVMsRUFBQXBCLE1BQUFpQixFQUNBRyxFQUFBcEIsTUFBQWtCLEVBTUEsT0FBQUssR0FDQSxJQUFBLElBQ0FOLEVBQUFGLEVBQ0FHLEVBQUFGLEVBQ0EsTUFDQSxJQUFBLElBQ0FDLEVBQUFHLEVBQUEsR0FDQSxNQUNBLElBQUEsSUFDQUYsRUFBQUUsRUFBQSxHQUNBLE1BQ0EsSUFBQSxJQUNBSCxFQUFBRixFQUFBSyxFQUFBLEdBQ0FGLEVBQUFGLEVBQUFJLEVBQUEsR0FDQSxNQUNBLFFBQ0FILEVBQUFHLEVBQUFBLEVBQUFULE9BQUEsR0FDQU8sRUFBQUUsRUFBQUEsRUFBQVQsT0FBQSxHQUdBLE9BQUFTLDZCQ2hFQSxTQUFBSyxFQUFBQyxHQUNBLE1BQUEsQ0FBQUEsRUFBQSxHQUFBQSxFQUFBLElBR0EsU0FBQUMsRUFBQVYsRUFBQUMsR0FDQSxNQUFBLENBQUFELEVBQUFDLEdBR0FMLEVBQUFKLFFBQUEsU0FBQW1CLEdBR0EsSUFBQUMsRUFBQSxpQkFGQUQsRUFBQUEsR0FBQSxJQUVBRSxVQUFBRixFQUFBRSxVQUFBLEVBQ0FDLEVBQUEsaUJBQUFILEVBQUFJLFFBQUFKLEVBQUFJLFFBQUEsYUFDQUMsRUFBQSxpQkFBQUwsRUFBQU0sWUFBQU4sRUFBQU0sWUFBQSxFQUVBQyxFQUFBLGlCQUFBUCxFQUFBUSxhQUFBUixFQUFBUSxhQUFBLElBQ0FDLEVBQUFULEVBQUFVLGdCQUFBLEVBQ0FDLEVBQUFYLEVBQUFZLFdBQUEsRUFFQSxPQUFBLFNBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEdBQ0FBLElBQ0FBLEVBQUEsSUFHQSxJQUFBQyxFQUFBZCxHQURBWSxFQUFBLGlCQUFBQSxFQUFBQSxFQUFBLEdBSUEsT0FPQSxTQUFBSixFQUFBQyxFQUFBQyxFQUFBQyxFQUFBRSxFQUFBQyxHQUNBRCxFQUFBRSxLQUFBdkIsRUFBQWdCLElBYUEsU0FBQVEsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQVgsRUFBQUMsRUFBQVcsR0FDQSxHQUFBQSxFQUFBN0IsRUFDQSxPQUVBLElBQUE4QixFQUFBQyxLQUFBQyxHQUlBLElBQUFDLEdBQUFaLEVBQUFFLEdBQUEsRUFDQSxJQUFBVyxHQUFBWixFQUFBRSxHQUFBLEVBQ0EsSUFBQVcsR0FBQVosRUFBQUUsR0FBQSxFQUNBLElBQUFXLEdBQUFaLEVBQUFFLEdBQUEsRUFDQSxJQUFBVyxHQUFBWixFQUFBRSxHQUFBLEVBQ0EsSUFBQVcsR0FBQVosRUFBQUUsR0FBQSxFQUNBLElBQUFXLEdBQUFOLEVBQUFFLEdBQUEsRUFDQSxJQUFBSyxHQUFBTixFQUFBRSxHQUFBLEVBQ0EsSUFBQUssR0FBQU4sRUFBQUUsR0FBQSxFQUNBLElBQUFLLEdBQUFOLEVBQUFFLEdBQUEsRUFDQSxJQUFBSyxHQUFBSixFQUFBRSxHQUFBLEVBQ0EsSUFBQUcsR0FBQUosRUFBQUUsR0FBQSxFQUVBLEdBQUFiLEVBQUEsRUFBQSxDQUdBLElBTUFnQixFQUFBQyxFQU5BQyxFQUFBcEIsRUFBQU4sRUFDQTJCLEVBQUFwQixFQUFBTixFQUVBMkIsRUFBQWxCLEtBQUFtQixLQUFBM0IsRUFBQUksR0FBQXFCLEdBQUF4QixFQUFBSSxHQUFBbUIsR0FDQUksRUFBQXBCLEtBQUFtQixLQUFBekIsRUFBQUUsR0FBQXFCLEdBQUF0QixFQUFBRSxHQUFBbUIsR0FJQSxHQUFBRSxFQUFBL0MsR0FBQWlELEVBQUFqRCxHQUdBLElBQUErQyxFQUFBRSxJQUFBRixFQUFBRSxJQUFBakMsR0FBQTZCLEVBQUFBLEVBQUFDLEVBQUFBLEdBQUEsQ0FJQSxHQUFBeEMsRUFBQUYsRUFFQSxZQURBVyxFQUFBRSxLQUFBckIsRUFBQTZDLEVBQUFDLElBTUEsSUFBQVEsRUFBQXJCLEtBQUFzQixNQUFBM0IsRUFBQUYsRUFBQUMsRUFBQUYsR0FNQSxHQUxBc0IsRUFBQWQsS0FBQW1CLElBQUFFLEVBQUFyQixLQUFBc0IsTUFBQTdCLEVBQUFGLEVBQUFDLEVBQUFGLElBQ0F5QixFQUFBZixLQUFBbUIsSUFBQW5CLEtBQUFzQixNQUFBekIsRUFBQUYsRUFBQUMsRUFBQUYsR0FBQTJCLEdBQ0FQLEdBQUFmLElBQUFlLEVBQUEsRUFBQWYsRUFBQWUsR0FDQUMsR0FBQWhCLElBQUFnQixFQUFBLEVBQUFoQixFQUFBZ0IsR0FFQUQsRUFBQUMsRUFBQXRDLEVBSUEsWUFEQVMsRUFBQUUsS0FBQXJCLEVBQUE2QyxFQUFBQyxJQUlBLEdBQUEsSUFBQWxDLEVBQUEsQ0FDQSxHQUFBbUMsRUFBQW5DLEVBRUEsWUFEQU8sRUFBQUUsS0FBQXJCLEVBQUF5QixFQUFBQyxJQUlBLEdBQUFzQixFQUFBcEMsRUFFQSxZQURBTyxFQUFBRSxLQUFBckIsRUFBQTJCLEVBQUFDLFdBT0EsR0FBQXVCLEVBQUEvQyxHQUdBLEdBQUErQyxFQUFBQSxHQUFBL0IsR0FBQTZCLEVBQUFBLEVBQUFDLEVBQUFBLEdBQUEsQ0FDQSxHQUFBeEMsRUFBQUYsRUFFQSxZQURBVyxFQUFBRSxLQUFBckIsRUFBQTZDLEVBQUFDLElBU0EsSUFIQUMsRUFBQWQsS0FBQW1CLElBQUFuQixLQUFBc0IsTUFBQTNCLEVBQUFGLEVBQUFDLEVBQUFGLEdBQUFRLEtBQUFzQixNQUFBN0IsRUFBQUYsRUFBQUMsRUFBQUYsTUFDQVMsSUFBQWUsRUFBQSxFQUFBZixFQUFBZSxHQUVBQSxFQUFBckMsRUFHQSxPQUZBUyxFQUFBRSxLQUFBckIsRUFBQXlCLEVBQUFDLFNBQ0FQLEVBQUFFLEtBQUFyQixFQUFBMkIsRUFBQUMsSUFJQSxHQUFBLElBQUFoQixHQUNBbUMsRUFBQW5DLEVBRUEsWUFEQU8sRUFBQUUsS0FBQXJCLEVBQUF5QixFQUFBQyxVQU1BLEdBQUEyQixFQUFBakQsR0FHQSxHQUFBaUQsRUFBQUEsR0FBQWpDLEdBQUE2QixFQUFBQSxFQUFBQyxFQUFBQSxHQUFBLENBQ0EsR0FBQXhDLEVBQUFGLEVBRUEsWUFEQVcsRUFBQUUsS0FBQXJCLEVBQUE2QyxFQUFBQyxJQVNBLElBSEFDLEVBQUFkLEtBQUFtQixJQUFBbkIsS0FBQXNCLE1BQUF6QixFQUFBRixFQUFBQyxFQUFBRixHQUFBTSxLQUFBc0IsTUFBQTNCLEVBQUFGLEVBQUFDLEVBQUFGLE1BQ0FPLElBQUFlLEVBQUEsRUFBQWYsRUFBQWUsR0FFQUEsRUFBQXJDLEVBR0EsT0FGQVMsRUFBQUUsS0FBQXJCLEVBQUF5QixFQUFBQyxTQUNBUCxFQUFBRSxLQUFBckIsRUFBQTJCLEVBQUFDLElBSUEsR0FBQSxJQUFBaEIsR0FDQW1DLEVBQUFuQyxFQUdBLFlBREFPLEVBQUFFLEtBQUFyQixFQUFBMkIsRUFBQUMsVUFXQSxJQUZBcUIsRUFBQUosR0FBQXRCLEVBQUFNLEdBQUEsR0FFQW9CLEdBREFDLEVBQUFKLEdBQUF0QixFQUFBTSxHQUFBLEdBQ0FvQixHQUFBOUIsRUFFQSxZQURBRCxFQUFBRSxLQUFBckIsRUFBQTZDLEVBQUFDLElBU0F4QixFQUFBQyxFQUFBQyxFQUFBVyxFQUFBQyxFQUFBSyxFQUFBQyxFQUFBRyxFQUFBQyxFQUFBM0IsRUFBQUMsRUFBQVcsRUFBQSxHQUNBVCxFQUFBdUIsRUFBQUMsRUFBQUgsRUFBQUMsRUFBQUwsRUFBQUMsRUFBQVgsRUFBQUMsRUFBQVgsRUFBQUMsRUFBQVcsRUFBQSxHQXRKQVQsQ0FSQVIsRUFBQSxHQUNBQSxFQUFBLEdBQ0FDLEVBQUEsR0FDQUEsRUFBQSxHQUNBQyxFQUFBLEdBQ0FBLEVBQUEsR0FDQUMsRUFBQSxHQUNBQSxFQUFBLEdBQ0FFLEVBQUFDLEVBQUEsR0FDQUQsRUFBQUUsS0FBQXZCLEVBQUFtQixJQW5CQXVDLENBQUExQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBRSxFQURBQyxHQUFBQSxHQUVBRCw0QkMzQkFqQyxFQUFBSixRQUFBTixFQUFBLGFBQUFBLHlDQ0FBLGFBRUEsSUFBQTRFLEVBQUFuQixLQUFBbUIsSUFDQUssRUFBQXhCLEtBQUF3QixJQUVBLFNBQUFDLEVBQUFoRixFQUFBaUYsRUFBQUMsRUFBQUMsR0FDQSxJQUFBQyxFQUFBVixFQUFBMUUsRUFBQWlGLEdBS0EsT0FIQSxNQUFBQyxJQUFBQSxFQUFBRixFQUFBSyxhQUNBLE1BQUFGLElBQUFBLEVBQUFELEdBRUFFLEdBQUFGLElBR0FFLEdBQUFELEVBQUFKLEVBQUFMLEVBQUExRSxHQUFBMEUsRUFBQU8sS0FHQWpGLElBQUFpRixHQUdBRCxFQUFBdEQsWUFBQSxhQUNBc0QsRUFBQUssWUFBQSxzQkFFQTdFLEVBQUFKLFFBQUE0RSwwQkN2QkEsSUFBQU0sRUFBQUMsT0FBQUMsVUFBQUMsU0FFQWpGLEVBQUFKLFFBRUEsU0FBQXNGLEdBQ0EsT0FDQUEsRUFBQUMsbUJBQ0EseUJBQUFMLEVBQUFqRixLQUFBcUYsRUFBQUUsU0FDQUMsTUFBQUMsUUFBQUosNEJDUkEsSUFBQUksRUFBQWhHLEVBQUEsWUFDQWlHLEVBQUFqRyxFQUFBLGdCQUdBVSxFQUFBSixRQUFBLFNBQUFKLEVBQUFpRixFQUFBZSxFQUFBQyxHQUVBLFNBQUFqRyxHQUFBaUYsR0FBQWEsRUFBQTlGLElBQUE4RixFQUFBYixNQUVBakYsRUFBQU0sU0FBQTJFLEVBQUEzRSxTQUVBLGlCQUFBMEYsSUFDQUEsRUFBQUQsRUFBQXJFLGFBQ0EsaUJBQUF1RSxJQUNBQSxFQUFBRCxHQUVBSCxNQUFBTCxVQUFBdkUsTUFBQVosS0FBQUwsR0FBQWtHLE1BQUEsU0FBQUMsRUFBQXhHLEdBQ0EsSUFBQXlHLEVBQUFuQixFQUFBdEYsR0FDQSxPQUFBd0csSUFBQUMsR0FBQUwsRUFBQUksRUFBQUMsRUFBQUosRUFBQUMsNkRDakJBLGFBRUEsSUFBQXZCLEVBQUFuQixLQUFBbUIsSUFDQUssRUFBQXhCLEtBQUF3QixJQUVBLFNBQUFDLEVBQUFoRixFQUFBaUYsRUFBQUMsRUFBQUMsR0FDQSxJQUFBQyxFQUFBVixFQUFBMUUsRUFBQWlGLEdBQ0EsT0FBQUcsR0FBQUYsSUFHQUUsR0FBQUQsRUFBQUosRUFBQUwsRUFBQTFFLEdBQUEwRSxFQUFBTyxLQUdBakYsSUFBQWlGLEdBR0FELEVBQUF0RCxZQUFBLGFBQ0FzRCxFQUFBSyxZQUFBLHNCQUVBN0UsRUFBQUosUUFBQTRFLDBCQ25CQSxJQUFBcUIsRUFBQXZHLEVBQUEsbUJBQ0F3RyxFQUFBeEcsRUFBQSw4QkFDQXlHLEVBQUF6RyxFQUFBLDRCQUNBMEcsRUFBQTFHLEVBQUEsYUFDQTJHLEVBQUEzRyxFQUFBLHFCQUNBNEcsRUFBQTVHLEVBQUEscUJBRUFVLEVBQUFKLFFBQUF1RyxNQUFBTixFQUFBTSxNQUNBbkcsRUFBQUosUUFBQXdHLE1BQUFQLEVBQUFPLE1BQ0FwRyxFQUFBSixRQUFBa0csTUFBQUEsRUFFQTlGLEVBQUFKLFFBQUF5RyxrQkFBQSxTQUFBQyxHQUNBLElBQUFDLEVBQUF2RyxFQUFBSixRQUFBdUcsTUFBQUcsR0FDQSxPQUFBQyxFQUNBUixFQUFBUSxFQUFBQyxLQURBLE1BTUF4RyxFQUFBSixRQUFBNkcsY0FBQSxTQUFBQyxFQUFBQyxHQUNBLElBQUFuSCxFQUFBUSxFQUFBSixRQUFBeUcsa0JBQUFLLEdBQ0FqQyxFQUFBekUsRUFBQUosUUFBQXlHLGtCQUFBTSxHQUNBLE9BQUEsTUFBQW5ILEdBQUEsTUFBQWlGLEVBQUEsTUFDQTFCLEtBQUE2RCxJQUFBcEgsRUFBQWlGLEdBRUEsTUFEQTFCLEtBQUF3QixJQUFBL0UsRUFBQWlGLEdBQ0EsTUFHQXpFLEVBQUFKLFFBQUFpSCxVQUFBLFNBQUFQLEVBQUFRLEVBQUFDLEVBQUFDLEdBQ0EsSUFBQVQsRUFBQXZHLEVBQUFKLFFBQUF1RyxNQUFBRyxHQUNBLE9BQUFDLEdBQ0FBLEVBQUFVLEtBQUEsSUFBQUgsR0FBQSxFQUNBUCxFQUFBVSxLQUFBLEdBQUFsRSxLQUFBNkQsSUFBQSxFQUFBN0QsS0FBQXdCLElBQUEsSUFBQWdDLEVBQUFVLEtBQUEsSUFBQUYsR0FBQSxLQUNBUixFQUFBVSxLQUFBLEdBQUFsRSxLQUFBNkQsSUFBQSxFQUFBN0QsS0FBQXdCLElBQUEsSUFBQWdDLEVBQUFVLEtBQUEsSUFBQUQsR0FBQSxLQUNBaEgsRUFBQUosUUFBQXVHLE1BQUEsQ0FBQWMsS0FBQVYsRUFBQVUsUUFKQSxNQU9BakgsRUFBQUosUUFBQXNILE1BQUEsU0FBQUMsRUFBQUMsRUFBQUMsR0FDQSxJQUFBQyxFQUFBdEgsRUFBQUosUUFBQXVHLE1BQUFnQixHQUNBSSxFQUFBdkgsRUFBQUosUUFBQXVHLE1BQUFpQixHQUNBLEdBQUEsTUFBQUUsR0FBQSxNQUFBQyxFQUFBLE9BQUEsS0FFQSxJQUFBQyxFQUFBRixFQUFBRyxLQUNBNUYsRUFBQTBGLEVBQUFFLEtBRUFDLEdBREFMLEVBQUEsaUJBQUFBLEdBQUFNLFNBQUFOLEdBQUFBLEVBQUEsR0FDQXhGLEVBQUEsR0FDQSxHQUFBNkYsR0FBQSxFQUVBLE9BQUFILEVBRUEsSUFBQSxJQUFBcEksRUFBQSxFQUFBQSxFQUFBLEVBQUFBLElBQ0EwQyxFQUFBMUMsR0FBQTBDLEVBQUExQyxHQUFBdUksRUFBQUYsRUFBQXJJLElBQUFxSSxFQUFBLElBQUEsRUFBQUUsSUFHQSxPQURBN0YsRUFBQSxHQUFBa0IsS0FBQTZELElBQUEsRUFBQTdELEtBQUF3QixJQUFBLEVBQUFtRCxFQUFBRixFQUFBLElBQUEsRUFBQUUsS0FDQTFILEVBQUFKLFFBQUF1RyxNQUFBdEUsSUFJQTdCLEVBQUFKLFFBQUFxRyxVQUFBQSxFQUNBakcsRUFBQUosUUFBQXNHLFVBQUFBLEVBQ0FsRyxFQUFBSixRQUFBZ0ksV0FBQTVCLEVBQUE0QixXQUNBNUgsRUFBQUosUUFBQWlJLFdBQUE3QixFQUFBNkIsa0xDN0RBLElBQUFDLEVBQUF4SSxFQUFBLFlBQ0FrRixFQUFBbEYsRUFBQSxnQkFDQXlJLEVBQUF6SSxFQUFBLHNCQUNBc0IsRUFBQXRCLEVBQUEsU0FDQTBJLEVBQUExSSxFQUFBLGNBQUEwSSxnQkFFQWhJLEVBQUFKLFFBQUFxSSxtQkFBQSxTQUFBQyxFQUFBQyxFQUFBQyxHQUNBLElBQUFDLEVBQUFILEVBQUEsR0FDQUksRUFBQUosRUFBQSxHQUtBLE9BQUExRCxHQUFBOEQsRUFIQUgsRUFBQSxLQUdBRSxFQUZBRCxFQUFBLEtBRUFFLEVBREFGLEVBQUEsS0FDQUMsRUFKQUYsRUFBQSxNQU9BbkksRUFBQUosUUFBQTJJLHNCQUFBLFNBQUF0SSxHQUdBLElBRkEsSUFDQXVJLEVBREFDLEVBQUEsR0FFQXRKLEVBQUEsRUFBQUEsRUFBQWMsRUFBQUgsT0FBQVgsSUFBQSxDQUNBLElBQUF1SixFQUFBekksRUFBQWQsR0FDQXFKLEdBQUFULEVBQUFTLEVBQUFFLEtBQ0FELEVBQUF0RyxLQUFBdUcsR0FDQUYsRUFBQUUsR0FHQSxPQUFBOUgsRUFBQTZILElBR0F6SSxFQUFBSixRQUFBK0ksc0JBQUEsU0FBQTFJLEdBR0EsSUFGQSxJQUFBd0ksRUFBQSxHQUNBRyxFQUFBaEksRUFBQVgsR0FDQTJJLEVBQUE5SSxRQUFBLEdBQUEsQ0FDQSxJQUFBK0ksRUFBQUQsRUFBQSxHQUNBRSxFQUFBRixFQUFBLEdBQ0FHLEVBQUFILEVBQUEsR0FDQUksRUFBQWhKLEVBQUFKLFFBQUFxSSxtQkFBQVksRUFBQUMsRUFBQUMsR0FJQSxHQUFBQyxFQUNBaEIsRUFBQWEsRUFBQUMsR0FDQWQsRUFBQWEsRUFBQUUsS0FDQUMsR0FBQSxHQUVBLEdBQUFBLEVBR0FKLEVBQUFLLE9BQUEsRUFBQSxRQUlBLElBQUEsSUFBQTlKLEVBQUEsRUFBQUEsRUFBQSxFQUFBQSxJQUNBc0osRUFBQXRHLEtBQUF5RyxFQUFBTSxTQUtBLEtBQUFOLEVBQUE5SSxRQUNBMkksRUFBQXRHLEtBQUF5RyxFQUFBTSxTQUVBLE9BQUFULEdBR0F6SSxFQUFBSixRQUFBdUosb0JBQUE3SixFQUFBLHFDQUNBVSxFQUFBSixRQUFBd0osaUJBQUE5SixFQUFBLGtDQUVBVSxFQUFBSixRQUFBeUosbUJBQUEsU0FBQUMsRUFBQUMsRUFBQUMsRUFBQUMsR0FDQSxJQUFBcEUsTUFBQUMsUUFBQWlFLElBQUEsSUFBQUEsRUFBQXpKLFFBQUEsSUFBQXlKLEVBQUF6SixPQUNBLE1BQUEsSUFBQUwsTUFBQSx5RkFHQSxHQUFBLElBQUE4SixFQUFBekosT0FBQSxDQUNBLElBQUF5RSxFQUFBZ0YsRUFBQSxHQUNBM0MsRUFBQTJDLEVBQUEsR0FDQUEsRUFBQSxDQUFBaEYsRUFBQSxHQUFBQSxFQUFBLEdBQUFxQyxFQUFBLEdBQUFBLEVBQUEsSUFLQSxPQUhBNkMsR0FBQSxJQUFBQSxHQUNBRCxFQUFBRSxRQUFBRixJQUdBRixFQUFBaEosSUFBQSxTQUFBcUosR0FDQSxJQUFBcEQsRUFBQXVCLEVBQUE4QixRQUFBRCxFQUFBSixHQUlBLE9BSEFFLEdBQUFsRCxFQUFBekcsT0FBQSxHQUNBeUcsRUFBQXBFLEtBQUFvRSxFQUFBLElBRUFBLElBQ0FzRCxPQUFBLFNBQUFDLEdBQ0EsT0FBQUEsRUFBQWhLLE9BQUEsSUFHQXdKLEVBQUFoSixJQUFBLFNBQUFxSixHQUNBLE9BQUE3QixFQUFBaUMsU0FBQUosRUFBQUosS0FDQVMsT0FBQSxTQUFBeEssRUFBQWlGLEdBQ0EsT0FBQWpGLEVBQUF5SyxPQUFBeEYsSUFDQSxLQUlBekUsRUFBQUosUUFBQXNLLGlCQUNBLFNBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEdBQ0EsSUFBQWpGLE1BQUFDLFFBQUE2RSxJQUFBLElBQUFBLEVBQUFySyxRQUFBLElBQUFxSyxFQUFBckssT0FDQSxNQUFBLElBQUFMLE1BQUEseUZBR0EsR0FBQSxJQUFBMEssRUFBQXJLLE9BQUEsQ0FDQSxJQUFBeUUsRUFBQTRGLEVBQUEsR0FDQXZELEVBQUF1RCxFQUFBLEdBQ0FBLEVBQUEsQ0FBQTVGLEVBQUEsR0FBQUEsRUFBQSxHQUFBcUMsRUFBQSxHQUFBQSxFQUFBLElBR0EsTUFBQXdELElBQUFBLEdBQUFySCxLQUFBQyxHQUFBLEdBQ0EsTUFBQXFILElBQUFBLEVBQUEsSUFDQSxNQUFBQyxJQUFBQSxFQUFBLElBS0EsR0FBQSxLQURBRCxFQUFBdEgsS0FBQW1CLElBQUFtRyxJQUNBLE1BQUEsSUFBQTVLLE1BQUEsaUVBRUEsSUFBQThLLEVBQUFKLEVBQUEsR0FDQUssRUFBQUwsRUFBQSxHQUNBTSxFQUFBTixFQUFBLEdBQ0FPLEVBQUFQLEVBQUEsR0FFQVEsRUFBQUYsRUFBQUYsRUFDQXpELEVBQUE0RCxFQUFBRixFQUNBLEdBQUEsSUFBQUcsR0FBQSxJQUFBN0QsRUFBQSxPQUFBd0QsRUFDQSxJQUFBeEwsRUFBQWlFLEtBQUE2SCxLQUFBRCxFQUFBQSxFQUFBN0QsRUFBQUEsR0FBQSxFQUNBK0QsRUFBQTlILEtBQUFDLEdBQUEsRUFBQW9ILEVBQ0FVLEVBQUEvSCxLQUFBZ0ksSUFBQUYsR0FDQUcsRUFBQWpJLEtBQUFrSSxJQUFBSixHQUNBSyxFQUFBWCxFQUFBSSxFQUFBLEVBQ0FRLEVBQUFYLEVBQUExRCxFQUFBLEVBQ0EzSCxHQUFBTCxFQUNBLEtBQUFLLEdBQUFMLEdBQUEsQ0FFQSxJQUFBdUQsRUFBQTZJLEVBQUEvTCxFQUFBMkwsRUFBQWhNLEVBQUFrTSxFQUNBMUksRUFBQTZJLEVBQUFoTSxFQUFBNkwsRUFBQWxNLEVBQUFnTSxFQUNBdkksRUFBQTJJLEVBQUEvTCxFQUFBMkwsRUFBQWhNLEVBQUFrTSxFQUNBeEksRUFBQTJJLEVBQUFoTSxFQUFBNkwsRUFBQWxNLEVBQUFnTSxFQUNBM0wsR0FBQWtMLEVBR0FoSSxFQUFBa0ksR0FBQWhJLEVBQUFnSSxHQUFBbEksRUFBQW9JLEdBQUFsSSxFQUFBa0ksSUFHQW5JLEVBQUFrSSxHQUFBaEksRUFBQWdJLEdBQUFsSSxFQUFBb0ksR0FBQWxJLEVBQUFrSSxHQUdBSixFQUFBbkksS0FBQSxDQUFBLENBQUFFLEVBQUFDLEdBQUEsQ0FBQUMsRUFBQUMsTUFFQSxPQUFBOEgsR0FHQXRLLEVBQUFKLFFBQUF3TCxVQUFBLFNBQUFuSixHQUNBLElBQUFqRCxFQUFBaUQsRUFBQW5DLE9BQ0EsR0FBQSxJQUFBZCxFQUNBLE1BQUEsSUFBQVMsTUFBQSwyQ0FLQSxJQUhBLElBQUFtRixFQUFBM0MsRUFBQSxHQUFBbkMsT0FDQXVMLEVBQUFwSixFQUFBLEdBQUF4QixRQUNBNkssRUFBQXJKLEVBQUEsR0FBQXhCLFFBQ0F0QixFQUFBLEVBQUFBLEVBQUFILElBQUFHLEVBRUEsSUFEQSxJQUFBUSxFQUFBc0MsRUFBQTlDLEdBQ0FvTSxFQUFBLEVBQUFBLEVBQUEzRyxJQUFBMkcsRUFBQSxDQUNBLElBQUFuTCxFQUFBVCxFQUFBNEwsR0FDQUYsRUFBQUUsR0FBQXhJLEtBQUF3QixJQUFBOEcsRUFBQUUsR0FBQW5MLEdBQ0FrTCxFQUFBQyxHQUFBeEksS0FBQTZELElBQUEwRSxFQUFBQyxHQUFBbkwsR0FHQSxNQUFBLENBQUFpTCxFQUFBQyxvTEMzS0F0TCxFQUFBSixRQUFBLENBQ0E0TCxPQUFBbE0sRUFBQSxZQUNBbU0sS0FBQW5NLEVBQUEsVUFDQW9NLFFBQUFwTSxFQUFBLGdCQUNBcU0sU0FBQXJNLEVBQUEsaUJBQ0FzTSxPQUFBdE0sRUFBQSxlQUNBZ0gsTUFBQWhILEVBQUEscUlDTkEsSUFBQWtGLEVBQUFsRixFQUFBLGdCQTZDQSxTQUFBdU0sRUFBQXJNLEdBQ0EsT0FBQUEsRUFBQUEsRUE1Q0FRLEVBQUFKLFFBQ0EsU0FBQWlKLEVBQUFDLEVBQUFnRCxFQUFBQyxFQUFBQyxHQUNBLE1BQUFBLElBQUFBLEVBQUEsSUFDQSxJQVdBQyxFQVhBek0sRUFBQXFNLEVBQUEvQyxFQUFBLEdBQUFELEVBQUEsSUFBQWdELEVBQUEvQyxFQUFBLEdBQUFELEVBQUEsSUFDQXBFLEVBQUEsSUFDQXFFLEVBQUEsR0FBQUQsRUFBQSxLQUFBQSxFQUFBLEdBQUFpRCxFQUFBLEtBQ0FoRCxFQUFBLEdBQUFELEVBQUEsS0FBQUEsRUFBQSxHQUFBaUQsRUFBQSxLQUdBek0sRUFBQXdNLEVBQUFDLEVBQUEsSUFBQUQsRUFBQUMsRUFBQSxJQUFBRCxFQUFBaEQsRUFBQSxJQUNBZ0QsRUFBQWhELEVBQUEsSUFBQSxHQUFBaUQsRUFBQSxHQUFBakQsRUFBQSxHQUFBaUQsRUFBQSxHQUFBakQsRUFBQSxJQUNBZ0QsRUFBQUUsR0FFQUcsRUFBQXpILEVBQUFBLEVBQUEsRUFBQWpGLEVBQUFILEVBRUEsR0FBQTZNLEVBQUEsRUFDQSxPQUFBLEVBQ0EsR0FBQTFILEVBQUEwSCxFQUFBLEdBTUEsT0FKQUYsRUFBQTdKLEtBQUEsQ0FDQTBHLEVBQUEsSUFGQW9ELEdBQUF4SCxHQUFBLEVBQUFqRixLQUVBc0osRUFBQSxHQUFBRCxFQUFBLElBQ0FBLEVBQUEsR0FBQW9ELEdBQUFuRCxFQUFBLEdBQUFELEVBQUEsT0FFQSxFQUNBLEdBQUFxRCxFQUFBLEVBQUEsQ0FDQSxJQUFBQyxFQUFBcEosS0FBQTZILEtBQUFzQixHQWFBLE9BVkFGLEVBQUE3SixLQUFBLENBQ0EwRyxFQUFBLElBSEFvRCxJQUFBeEgsRUFBQTBILElBQUEsRUFBQTNNLEtBR0FzSixFQUFBLEdBQUFELEVBQUEsSUFDQUEsRUFBQSxHQUFBb0QsR0FBQW5ELEVBQUEsR0FBQUQsRUFBQSxNQUlBbUQsRUFBQTdKLEtBQUEsQ0FDQTBHLEVBQUEsSUFGQW9ELElBQUF4SCxFQUFBMEgsSUFBQSxFQUFBM00sS0FFQXNKLEVBQUEsR0FBQUQsRUFBQSxJQUNBQSxFQUFBLEdBQUFvRCxHQUFBbkQsRUFBQSxHQUFBRCxFQUFBLE9BRUEsRUFFQSxPQUFBLCtDQzFDQSxJQUFBckUsRUFBQWxGLEVBQUEsZ0JBc0VBLFNBQUE4TSxFQUFBQyxFQUFBQyxFQUFBcEIsRUFBQUMsRUFBQW9CLEdBQ0EsT0FOQXhJLEVBTUFtSCxFQUFBbUIsR0FKQXRJLEdBREFDLEVBS0FtSCxFQUFBbUIsR0FKQXRJLEdBSUF1SSxFQUFBQSxFQVBBLElBQ0F4SSxFQUNBQyxFQVFBLFNBQUF3SSxFQUFBbkssRUFBQUMsRUFBQUMsRUFBQUMsR0FDQSxJQUFBdUIsRUFBQTFCLEVBQUFFLEVBQ0F5QixFQUFBMUIsRUFBQUUsRUFDQSxPQUFBTyxLQUFBNkgsS0FBQTdHLEVBQUFBLEVBQUFDLEVBQUFBLEdBR0EsU0FBQXlJLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEdBQ0EsSUFBQTdOLEVBQUE2TixFQUFBTixFQUFBRSxFQUFBQyxFQUFBQyxFQUFBQyxHQUNBLE1BQUEsQ0FDQUgsRUFBQXpOLEdBQUEyTixFQUFBRixHQUNBQyxFQUFBMU4sR0FBQTROLEVBQUFGLElBbEZBM00sRUFBQUosUUFDQSxTQUFBaUosRUFBQUMsRUFBQWdELEVBQUFDLEVBQUFDLEdBQ0EsT0FHQSxTQUFBM0osRUFBQUMsRUFBQUMsRUFBQUMsRUFBQTBJLEVBQUFDLEVBQUFvQixFQUFBUCxHQUNBLE1BQUFBLElBQUFBLEVBQUEsSUFDQSxJQVNBbEYsRUFBQXRILEVBQUF1TixFQUFBVixFQUFBQyxFQVRBVSxFQUFBWixFQUFBL0osRUFBQUMsRUFBQTRJLEVBQUFDLEVBQUFvQixHQUNBVSxFQUFBYixFQUFBN0osRUFBQUMsRUFBQTBJLEVBQUFDLEVBQUFvQixHQUVBLEdBQUFTLEdBQUFDLEVBR0EsT0FGQWpCLEVBQUE3SixLQUFBLENBQUFFLEVBQUFDLElBQ0EwSixFQUFBN0osS0FBQSxDQUFBSSxFQUFBQyxLQUNBLEVBSUEsR0FBQXdLLEdBQUFDLEVBQUEsQ0FDQUYsRUFvRUEsU0FBQTFLLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUE2SixFQUFBQyxHQUNBLElBQUFZLEVBQUEzSyxFQUFBRixFQUNBOEssRUFBQTNLLEVBQUFGLEVBS0E4SyxHQUZBRixHQUZBYixFQUFBaEssR0FFQThLLEdBREFiLEVBQUFoSyxLQUVBNEssRUFBQUEsRUFBQUMsRUFBQUEsR0FFQSxNQUFBLENBQ0E5SyxFQUFBK0ssRUFBQUYsRUFDQTVLLEVBQUE4SyxFQUFBRCxHQTlFQUUsQ0FBQWhMLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUEwSSxFQUFBQyxHQUdBckUsRUFBQTBGLEVBRkFILEVBQUFVLEVBQUEsR0FDQVQsRUFBQVMsRUFBQSxHQUNBN0IsRUFBQUMsR0FDQTNMLEVBQUF1RCxLQUFBNkgsS0FBQTJCLEVBQUFBLEVBQUF6RixFQUFBQSxHQUNBLElBQUF3RyxFQUFBTixFQUFBLENBQUEzSyxFQUFBQyxHQUFBLENBQUFDLEVBQUFDLEdBQ0ErSyxFQUFBUCxFQUFBUCxFQUFBSixFQUFBQyxFQUFBL0osRUFBQUMsRUFBQWhELEdBQUFpTixFQUFBSixFQUFBQyxFQUFBakssRUFBQUMsRUFBQTlDLEdBQ0EsT0FBQWdGLEVBQUE4SSxFQUFBLEdBQUFDLEVBQUEsS0FBQS9JLEVBQUE4SSxFQUFBLEdBQUFDLEVBQUEsS0FFQXZCLEVBQUE3SixLQUFBbUwsSUFDQSxJQUVBdEIsRUFBQTdKLEtBQUFtTCxHQUNBdEIsRUFBQTdKLEtBQUFvTCxJQUNBLEdBT0EsT0FKQVIsRUFpRUEsU0FBQTFLLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUE2SixFQUFBQyxHQUNBLElBQUFZLEVBQUEzSyxFQUFBRixFQUNBOEssRUFBQTNLLEVBQUFGLEVBSUFULEVBQUFxTCxHQUhBYixFQUFBaEssR0FHQThLLEdBRkFiLEVBQUFoSyxHQUlBLEdBQUFULEdBQUEsRUFDQSxNQUFBLENBQUFRLEVBQUFDLEdBR0EsSUFBQVIsRUFBQW9MLEVBQUFBLEVBQUFDLEVBQUFBLEVBQ0EsR0FBQXJMLEdBQUFELEVBQ0EsTUFBQSxDQUFBVSxFQUFBQyxHQUdBLElBQUE0SyxFQUFBdkwsRUFBQUMsRUFDQSxNQUFBLENBQ0FPLEVBQUErSyxFQUFBRixFQUNBNUssRUFBQThLLEVBQUFELEdBckZBSyxDQUFBbkwsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQTBJLEVBQUFDLEdBRUFtQixFQUFBUyxFQUFBLEtBRUF2SSxFQUFBbkMsRUFIQWdLLEVBQUFVLEVBQUEsS0FHQXZJLEVBQUFsQyxFQUFBZ0ssSUFDQTlILEVBQUFqQyxFQUFBOEosSUFBQTdILEVBQUFoQyxFQUFBOEosU0FHQXhGLEVBQUEwRixFQUFBSCxFQUFBQyxFQUFBcEIsRUFBQUMsSUFDQW9CLEtBRUEvSCxFQUFBc0MsRUFBQXlGLElBQ0FQLEVBQUE3SixLQUFBLENBQUFrSyxFQUFBQyxLQUNBLEdBQ0E5SCxFQUFBc0MsRUFBQSxJQUNBa0YsRUFBQTdKLEtBQUFzSyxFQUFBdkIsRUFBQUMsRUFBQTlJLEVBQUFDLEVBQUFpSyxJQUNBUCxFQUFBN0osS0FBQXNLLEVBQUF2QixFQUFBQyxFQUFBNUksRUFBQUMsRUFBQStKLEtBQ0EsSUFFQS9NLEVBQUF1RCxLQUFBNkgsS0FBQTJCLEVBQUFBLEVBQUF6RixFQUFBQSxHQUNBa0YsRUFBQTdKLEtBQUFzSyxFQUFBSixFQUFBQyxFQUFBakssRUFBQUMsRUFBQTlDLElBQ0F3TSxFQUFBN0osS0FBQXNLLEVBQUFKLEVBQUFDLEVBQUEvSixFQUFBQyxFQUFBaEQsS0FDQSxLQXZEQWlPLENBQUE1RSxFQUFBLEdBQUFBLEVBQUEsR0FBQUMsRUFBQSxHQUFBQSxFQUFBLEdBQUFnRCxFQUFBLEdBQUFBLEVBQUEsR0FBQUMsRUFBQUMsNkNDSkFoTSxFQUFBSixRQUFBLENBQ0E4TixVQUFBLFVBQ0FDLGFBQUEsVUFDQUMsS0FBQSxVQUNBQyxXQUFBLFVBQ0FDLE1BQUEsVUFDQUMsTUFBQSxVQUNBQyxPQUFBLFVBQ0FDLE1BQUEsVUFDQUMsZUFBQSxVQUNBQyxLQUFBLFVBQ0FDLFdBQUEsVUFDQUMsTUFBQSxVQUNBQyxVQUFBLFVBQ0FDLFVBQUEsVUFDQUMsV0FBQSxVQUNBQyxVQUFBLFVBQ0FDLE1BQUEsVUFDQUMsZUFBQSxVQUNBQyxTQUFBLFVBQ0FDLFFBQUEsVUFDQUMsS0FBQSxVQUNBQyxTQUFBLFVBQ0FDLFNBQUEsVUFDQUMsY0FBQSxVQUNBQyxTQUFBLFVBQ0FDLFVBQUEsVUFDQUMsU0FBQSxVQUNBQyxVQUFBLFVBQ0FDLFlBQUEsVUFDQUMsZUFBQSxVQUNBQyxXQUFBLFVBQ0FDLFdBQUEsVUFDQUMsUUFBQSxVQUNBQyxXQUFBLFVBQ0FDLGFBQUEsVUFDQUMsY0FBQSxVQUNBQyxjQUFBLFVBQ0FDLGNBQUEsVUFDQUMsY0FBQSxVQUNBQyxXQUFBLFVBQ0FDLFNBQUEsVUFDQUMsWUFBQSxVQUNBQyxRQUFBLFVBQ0FDLFFBQUEsVUFDQUMsV0FBQSxVQUNBQyxVQUFBLFVBQ0FDLFlBQUEsVUFDQUMsWUFBQSxVQUNBQyxRQUFBLFVBQ0FDLFVBQUEsVUFDQUMsV0FBQSxVQUNBQyxLQUFBLFVBQ0FDLFVBQUEsVUFDQUMsS0FBQSxVQUNBQyxNQUFBLFVBQ0FDLFlBQUEsVUFDQUMsS0FBQSxVQUNBQyxTQUFBLFVBQ0FDLFFBQUEsVUFDQUMsVUFBQSxVQUNBQyxPQUFBLFVBQ0FDLE1BQUEsVUFDQUMsTUFBQSxVQUNBQyxTQUFBLFVBQ0FDLGNBQUEsVUFDQUMsVUFBQSxVQUNBQyxhQUFBLFVBQ0FDLFVBQUEsVUFDQUMsV0FBQSxVQUNBQyxVQUFBLFVBQ0FDLHFCQUFBLFVBQ0FDLFVBQUEsVUFDQUMsV0FBQSxVQUNBQyxVQUFBLFVBQ0FDLFVBQUEsVUFDQUMsWUFBQSxVQUNBQyxjQUFBLFVBQ0FDLGFBQUEsVUFDQUMsZUFBQSxVQUNBQyxlQUFBLFVBQ0FDLGVBQUEsVUFDQUMsWUFBQSxVQUNBQyxLQUFBLFVBQ0FDLFVBQUEsVUFDQUMsTUFBQSxVQUNBQyxRQUFBLFVBQ0FDLE9BQUEsVUFDQUMsaUJBQUEsVUFDQUMsV0FBQSxVQUNBQyxhQUFBLFVBQ0FDLGFBQUEsVUFDQUMsZUFBQSxVQUNBQyxnQkFBQSxVQUNBQyxrQkFBQSxVQUNBQyxnQkFBQSxVQUNBQyxnQkFBQSxVQUNBQyxhQUFBLFVBQ0FDLFVBQUEsVUFDQUMsVUFBQSxVQUNBQyxTQUFBLFVBQ0FDLFlBQUEsVUFDQUMsS0FBQSxVQUNBQyxRQUFBLFVBQ0FDLE1BQUEsVUFDQUMsVUFBQSxVQUNBQyxPQUFBLFVBQ0FDLFVBQUEsVUFDQUMsT0FBQSxVQUNBQyxjQUFBLFVBQ0FDLFVBQUEsVUFDQUMsY0FBQSxVQUNBQyxjQUFBLFVBQ0FDLFdBQUEsVUFDQUMsVUFBQSxVQUNBQyxLQUFBLFVBQ0FDLEtBQUEsVUFDQUMsS0FBQSxVQUNBQyxXQUFBLFVBQ0FDLE9BQUEsVUFDQUMsY0FBQSxVQUNBQyxJQUFBLFVBQ0FDLFVBQUEsVUFDQUMsVUFBQSxVQUNBQyxZQUFBLFVBQ0FDLE9BQUEsVUFDQUMsV0FBQSxVQUNBQyxTQUFBLFVBQ0FDLFNBQUEsVUFDQUMsT0FBQSxVQUNBQyxPQUFBLFVBQ0FDLFFBQUEsVUFDQUMsVUFBQSxVQUNBQyxVQUFBLFVBQ0FDLFVBQUEsVUFDQUMsS0FBQSxVQUNBQyxZQUFBLFVBQ0FDLFVBQUEsVUFDQUMsSUFBQSxVQUNBQyxLQUFBLFVBQ0FDLFFBQUEsVUFDQUMsT0FBQSxVQUNBQyxVQUFBLFVBQ0FDLE9BQUEsVUFDQUMsTUFBQSxVQUNBQyxNQUFBLFVBQ0FDLFdBQUEsVUFDQUMsT0FBQSxVQUNBQyxZQUFB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QUN2QixDQUFFLGdCQUFpQixLQUFNLE1BR3pCLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxLQUFNLEdBQUksS0FDWixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsTUFBTyxJQUFLLEtBQ2QsQ0FBRSxNQUFPLElBQUssS0FDZCxDQUFFLE1BQU8sSUFBSyxLQUdkLENBQUUsS0FBTSxJQUFLLE1BQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLEdBQUksS0FDWixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxNQUFPLEdBQUksSUFDYixDQUFFLE1BQU8sS0FBTSxNQUNmLENBQUUsTUFBTyxLQUFNLE1BQ2YsQ0FBRSxLQUFNLElBQU0sTUFDZCxDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsTUFBTyxJQUFLLE1BQ2QsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLE1BQU8sSUFBSyxLQUNkLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLEdBQUksS0FDWixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxNQUFPLEdBQUksSUFDYixDQUFFLE1BQU8sR0FBSSxJQUNiLENBQUUsTUFBTyxHQUFJLElBQ2IsQ0FBRSxLQUFNLElBQUssTUFDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElB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QSxJQUFBLElBQUEsS0FDQUMsTUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxNQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLE9BQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsTUFBQSxDQUFBLEVBQUEsRUFBQSxHQUNBQyxlQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLEtBQUEsQ0FBQSxFQUFBLEVBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsR0FBQSxLQUNBQyxNQUFBLENBQUEsSUFBQSxHQUFBLElBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLEdBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEdBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsSUFDQUMsTUFBQSxDQUFBLElBQUEsSUFBQSxJQUNBQyxlQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsUUFBQSxDQUFBLElBQUEsR0FBQSxJQUNBQyxLQUFBLENBQUEsRUFBQSxJQUFBLEtBQ0FDLFNBQUEsQ0FBQSxFQUFBLEVBQUEsS0FDQUMsU0FBQSxDQUFBLEVBQUEsSUFBQSxLQUNBQyxjQUFBLENBQUEsSUFBQSxJQUFBLElBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLEVBQUEsSUFBQSxHQUNBQyxTQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsWUFBQSxDQUFBLElBQUEsRUFBQSxLQUNBQyxlQUFBLENBQUEsR0FBQSxJQUFBLElBQ0FDLFdBQUEsQ0FBQSxJQUFBLElBQUEsR0FDQUMsV0FBQSxDQUFBLElBQUEsR0FBQSxLQUNBQyxRQUFBLENBQUEsSUFBQSxFQUFBLEdBQ0FDLFdBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsYUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxjQUFBLENBQUEsR0FBQSxHQUFBLEtBQ0FDLGNBQUEsQ0FBQSxHQUFBLEdBQUEsSUFDQUMsY0FBQSxDQUFBLEdBQUEsR0FBQSxJQUNBQyxjQUFBLENBQUEsRUFBQSxJQUFBLEtBQ0FDLFdBQUEsQ0FBQSxJQUFBLEVBQUEsS0FDQUMsU0FBQSxDQUFBLElBQUEsR0FBQSxLQUNBQyxZQUFBLENBQUEsRUFBQSxJQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsUUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsR0FBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLEdBQUEsSUFDQUMsWUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxZQUFBLENBQUEsR0FBQSxJQUFBLElBQ0FDLFFBQUEsQ0FBQSxJQUFBLEVBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLEtBQUEsQ0FBQSxJQUFBLElBQUEsR0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxJQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLE1BQUEsQ0FBQSxFQUFBLElBQUEsR0FDQUMsWUFBQSxDQUFBLElBQUEsSUFBQSxJQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsUUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxHQUFBLElBQ0FDLE9BQUEsQ0FBQSxHQUFBLEVBQUEsS0FDQUMsTUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxNQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsY0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEdBQ0FDLGFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMscUJBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxZQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGNBQUEsQ0FBQSxHQUFBLElBQUEsS0FDQUMsYUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxlQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsZUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxZQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLEtBQUEsQ0FBQSxFQUFBLElBQUEsR0FDQUMsVUFBQSxDQUFBLEdBQUEsSUFBQSxJQUNBQyxNQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLEVBQUEsS0FDQUMsT0FBQSxDQUFBLElBQUEsRUFBQSxHQUNBQyxpQkFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsRUFBQSxFQUFBLEtBQ0FDLGFBQUEsQ0FBQSxJQUFBLEdBQUEsS0FDQUMsYUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxlQUFBLENBQUEsR0FBQSxJQUFBLEtBQ0FDLGdCQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGtCQUFBLENBQUEsRUFBQSxJQUFBLEtBQ0FDLGdCQUFBLENBQUEsR0FBQSxJQUFBLEtBQ0FDLGdCQUFBLENBQUEsSUFBQSxHQUFBLEtBQ0FDLGFBQUEsQ0FBQSxHQUFBLEdBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsWUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsRUFBQSxFQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsTUFBQSxDQUFBLElBQUEsSUFBQSxHQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLElBQ0FDLE9BQUEsQ0FBQSxJQUFBLElBQUEsR0FDQUMsVUFBQSxDQUFBLElBQUEsR0FBQSxHQUNBQyxPQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxjQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLEtBQUEsQ0FBQSxJQUFBLElBQUEsSUFDQUMsS0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFdBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsT0FBQSxDQUFBLElBQUEsRUFBQSxLQUNBQyxjQUFBLENBQUEsSUFBQSxHQUFBLEtBQ0FDLElBQUEsQ0FBQSxJQUFBLEVBQUEsR0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsR0FBQSxJQUFBLEtBQ0FDLFlBQUEsQ0FBQSxJQUFBLEdBQUEsSUFDQUMsT0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLElBQ0FDLFNBQUEsQ0FBQSxHQUFBLElBQUEsSUFDQUMsU0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxPQUFBLENBQUEsSUFBQSxHQUFBLElBQ0FDLE9BQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsUUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxHQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFlBQUEsQ0FBQSxFQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLEdBQUEsSUFBQSxLQUNBQyxJQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLEtBQUEsQ0FBQSxFQUFBLElBQUEsS0FDQUMsUUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxPQUFBLENBQUEsSUFBQSxHQUFBLElBQ0FDLFVBQUEsQ0FBQSxHQUFB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LEdBQ0FocUcsR0FBQXBVLEVBQUFyYixFQUFBLEdBQUEwRCxLQUFBb1gsSUFBQSxFQUFBdStHLEdBQ0EzNUgsR0FBQSs1SCxJQUVBaHFHLEVBQUFwVSxFQUFBM1gsS0FBQW9YLElBQUEsRUFBQTIrRyxFQUFBLEdBQUEvMUgsS0FBQW9YLElBQUEsRUFBQXUrRyxHQUNBMzVILEVBQUEsSUFJQTI1SCxHQUFBLEVBQUF0ekgsRUFBQXNYLEVBQUF2ZCxHQUFBLElBQUEydkIsRUFBQTN2QixHQUFBeUYsRUFBQWtxQixHQUFBLElBQUE0cEcsR0FBQSxHQUlBLElBRkEzNUgsRUFBQUEsR0FBQTI1SCxFQUFBNXBHLEVBQ0E4cEcsR0FBQUYsRUFDQUUsRUFBQSxFQUFBeHpILEVBQUFzWCxFQUFBdmQsR0FBQSxJQUFBSixFQUFBSSxHQUFBeUYsRUFBQTdGLEdBQUEsSUFBQTY1SCxHQUFBLEdBRUF4ekgsRUFBQXNYLEVBQUF2ZCxFQUFBeUYsSUFBQSxJQUFBbUMscURDbEZBa25CLEVBQUFrckcsa0NBQUE3c0csT0FBQXUwRCxTQUFBNXJEIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIlxubW9kdWxlLmV4cG9ydHMgPSBhYnNvbHV0aXplXG5cbi8qKlxuICogcmVkZWZpbmUgYHBhdGhgIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuXG5mdW5jdGlvbiBhYnNvbHV0aXplKHBhdGgpe1xuXHR2YXIgc3RhcnRYID0gMFxuXHR2YXIgc3RhcnRZID0gMFxuXHR2YXIgeCA9IDBcblx0dmFyIHkgPSAwXG5cblx0cmV0dXJuIHBhdGgubWFwKGZ1bmN0aW9uKHNlZyl7XG5cdFx0c2VnID0gc2VnLnNsaWNlKClcblx0XHR2YXIgdHlwZSA9IHNlZ1swXVxuXHRcdHZhciBjb21tYW5kID0gdHlwZS50b1VwcGVyQ2FzZSgpXG5cblx0XHQvLyBpcyByZWxhdGl2ZVxuXHRcdGlmICh0eXBlICE9IGNvbW1hbmQpIHtcblx0XHRcdHNlZ1swXSA9IGNvbW1hbmRcblx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRjYXNlICdhJzpcblx0XHRcdFx0XHRzZWdbNl0gKz0geFxuXHRcdFx0XHRcdHNlZ1s3XSArPSB5XG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0Y2FzZSAndic6XG5cdFx0XHRcdFx0c2VnWzFdICs9IHlcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRjYXNlICdoJzpcblx0XHRcdFx0XHRzZWdbMV0gKz0geFxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDE7IGkgPCBzZWcubGVuZ3RoOykge1xuXHRcdFx0XHRcdFx0c2VnW2krK10gKz0geFxuXHRcdFx0XHRcdFx0c2VnW2krK10gKz0geVxuXHRcdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyB1cGRhdGUgY3Vyc29yIHN0YXRlXG5cdFx0c3dpdGNoIChjb21tYW5kKSB7XG5cdFx0XHRjYXNlICdaJzpcblx0XHRcdFx0eCA9IHN0YXJ0WFxuXHRcdFx0XHR5ID0gc3RhcnRZXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdIJzpcblx0XHRcdFx0eCA9IHNlZ1sxXVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnVic6XG5cdFx0XHRcdHkgPSBzZWdbMV1cblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ00nOlxuXHRcdFx0XHR4ID0gc3RhcnRYID0gc2VnWzFdXG5cdFx0XHRcdHkgPSBzdGFydFkgPSBzZWdbMl1cblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHggPSBzZWdbc2VnLmxlbmd0aCAtIDJdXG5cdFx0XHRcdHkgPSBzZWdbc2VnLmxlbmd0aCAtIDFdXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNlZ1xuXHR9KVxufVxuIiwiZnVuY3Rpb24gY2xvbmUocG9pbnQpIHsgLy9UT0RPOiB1c2UgZ2wtdmVjMiBmb3IgdGhpc1xuICAgIHJldHVybiBbcG9pbnRbMF0sIHBvaW50WzFdXVxufVxuXG5mdW5jdGlvbiB2ZWMyKHgsIHkpIHtcbiAgICByZXR1cm4gW3gsIHldXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlQmV6aWVyQnVpbGRlcihvcHQpIHtcbiAgICBvcHQgPSBvcHR8fHt9XG5cbiAgICB2YXIgUkVDVVJTSU9OX0xJTUlUID0gdHlwZW9mIG9wdC5yZWN1cnNpb24gPT09ICdudW1iZXInID8gb3B0LnJlY3Vyc2lvbiA6IDhcbiAgICB2YXIgRkxUX0VQU0lMT04gPSB0eXBlb2Ygb3B0LmVwc2lsb24gPT09ICdudW1iZXInID8gb3B0LmVwc2lsb24gOiAxLjE5MjA5MjkwZS03XG4gICAgdmFyIFBBVEhfRElTVEFOQ0VfRVBTSUxPTiA9IHR5cGVvZiBvcHQucGF0aEVwc2lsb24gPT09ICdudW1iZXInID8gb3B0LnBhdGhFcHNpbG9uIDogMS4wXG5cbiAgICB2YXIgY3VydmVfYW5nbGVfdG9sZXJhbmNlX2Vwc2lsb24gPSB0eXBlb2Ygb3B0LmFuZ2xlRXBzaWxvbiA9PT0gJ251bWJlcicgPyBvcHQuYW5nbGVFcHNpbG9uIDogMC4wMVxuICAgIHZhciBtX2FuZ2xlX3RvbGVyYW5jZSA9IG9wdC5hbmdsZVRvbGVyYW5jZSB8fCAwXG4gICAgdmFyIG1fY3VzcF9saW1pdCA9IG9wdC5jdXNwTGltaXQgfHwgMFxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGJlemllckN1cnZlKHN0YXJ0LCBjMSwgYzIsIGVuZCwgc2NhbGUsIHBvaW50cykge1xuICAgICAgICBpZiAoIXBvaW50cylcbiAgICAgICAgICAgIHBvaW50cyA9IFtdXG5cbiAgICAgICAgc2NhbGUgPSB0eXBlb2Ygc2NhbGUgPT09ICdudW1iZXInID8gc2NhbGUgOiAxLjBcbiAgICAgICAgdmFyIGRpc3RhbmNlVG9sZXJhbmNlID0gUEFUSF9ESVNUQU5DRV9FUFNJTE9OIC8gc2NhbGVcbiAgICAgICAgZGlzdGFuY2VUb2xlcmFuY2UgKj0gZGlzdGFuY2VUb2xlcmFuY2VcbiAgICAgICAgYmVnaW4oc3RhcnQsIGMxLCBjMiwgZW5kLCBwb2ludHMsIGRpc3RhbmNlVG9sZXJhbmNlKVxuICAgICAgICByZXR1cm4gcG9pbnRzXG4gICAgfVxuXG5cbiAgICAvLy8vLy8gQmFzZWQgb246XG4gICAgLy8vLy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wZWxzb24vYW50aWdyYWluL2Jsb2IvbWFzdGVyL2FnZy0yLjQvc3JjL2FnZ19jdXJ2ZXMuY3BwXG5cbiAgICBmdW5jdGlvbiBiZWdpbihzdGFydCwgYzEsIGMyLCBlbmQsIHBvaW50cywgZGlzdGFuY2VUb2xlcmFuY2UpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goY2xvbmUoc3RhcnQpKVxuICAgICAgICB2YXIgeDEgPSBzdGFydFswXSxcbiAgICAgICAgICAgIHkxID0gc3RhcnRbMV0sXG4gICAgICAgICAgICB4MiA9IGMxWzBdLFxuICAgICAgICAgICAgeTIgPSBjMVsxXSxcbiAgICAgICAgICAgIHgzID0gYzJbMF0sXG4gICAgICAgICAgICB5MyA9IGMyWzFdLFxuICAgICAgICAgICAgeDQgPSBlbmRbMF0sXG4gICAgICAgICAgICB5NCA9IGVuZFsxXVxuICAgICAgICByZWN1cnNpdmUoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0LCBwb2ludHMsIGRpc3RhbmNlVG9sZXJhbmNlLCAwKVxuICAgICAgICBwb2ludHMucHVzaChjbG9uZShlbmQpKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZSh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQsIHBvaW50cywgZGlzdGFuY2VUb2xlcmFuY2UsIGxldmVsKSB7XG4gICAgICAgIGlmKGxldmVsID4gUkVDVVJTSU9OX0xJTUlUKSBcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIHZhciBwaSA9IE1hdGguUElcblxuICAgICAgICAvLyBDYWxjdWxhdGUgYWxsIHRoZSBtaWQtcG9pbnRzIG9mIHRoZSBsaW5lIHNlZ21lbnRzXG4gICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICB2YXIgeDEyICAgPSAoeDEgKyB4MikgLyAyXG4gICAgICAgIHZhciB5MTIgICA9ICh5MSArIHkyKSAvIDJcbiAgICAgICAgdmFyIHgyMyAgID0gKHgyICsgeDMpIC8gMlxuICAgICAgICB2YXIgeTIzICAgPSAoeTIgKyB5MykgLyAyXG4gICAgICAgIHZhciB4MzQgICA9ICh4MyArIHg0KSAvIDJcbiAgICAgICAgdmFyIHkzNCAgID0gKHkzICsgeTQpIC8gMlxuICAgICAgICB2YXIgeDEyMyAgPSAoeDEyICsgeDIzKSAvIDJcbiAgICAgICAgdmFyIHkxMjMgID0gKHkxMiArIHkyMykgLyAyXG4gICAgICAgIHZhciB4MjM0ICA9ICh4MjMgKyB4MzQpIC8gMlxuICAgICAgICB2YXIgeTIzNCAgPSAoeTIzICsgeTM0KSAvIDJcbiAgICAgICAgdmFyIHgxMjM0ID0gKHgxMjMgKyB4MjM0KSAvIDJcbiAgICAgICAgdmFyIHkxMjM0ID0gKHkxMjMgKyB5MjM0KSAvIDJcblxuICAgICAgICBpZihsZXZlbCA+IDApIHsgLy8gRW5mb3JjZSBzdWJkaXZpc2lvbiBmaXJzdCB0aW1lXG4gICAgICAgICAgICAvLyBUcnkgdG8gYXBwcm94aW1hdGUgdGhlIGZ1bGwgY3ViaWMgY3VydmUgYnkgYSBzaW5nbGUgc3RyYWlnaHQgbGluZVxuICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgIHZhciBkeCA9IHg0LXgxXG4gICAgICAgICAgICB2YXIgZHkgPSB5NC15MVxuXG4gICAgICAgICAgICB2YXIgZDIgPSBNYXRoLmFicygoeDIgLSB4NCkgKiBkeSAtICh5MiAtIHk0KSAqIGR4KVxuICAgICAgICAgICAgdmFyIGQzID0gTWF0aC5hYnMoKHgzIC0geDQpICogZHkgLSAoeTMgLSB5NCkgKiBkeClcblxuICAgICAgICAgICAgdmFyIGRhMSwgZGEyXG5cbiAgICAgICAgICAgIGlmKGQyID4gRkxUX0VQU0lMT04gJiYgZDMgPiBGTFRfRVBTSUxPTikge1xuICAgICAgICAgICAgICAgIC8vIFJlZ3VsYXIgY2FyZVxuICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICBpZigoZDIgKyBkMykqKGQyICsgZDMpIDw9IGRpc3RhbmNlVG9sZXJhbmNlICogKGR4KmR4ICsgZHkqZHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJ2YXR1cmUgZG9lc24ndCBleGNlZWQgdGhlIGRpc3RhbmNlVG9sZXJhbmNlIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIHRlbmQgdG8gZmluaXNoIHN1YmRpdmlzaW9ucy5cbiAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgICAgIGlmKG1fYW5nbGVfdG9sZXJhbmNlIDwgY3VydmVfYW5nbGVfdG9sZXJhbmNlX2Vwc2lsb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDEyMzQsIHkxMjM0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQW5nbGUgJiBDdXNwIENvbmRpdGlvblxuICAgICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGEyMyA9IE1hdGguYXRhbjIoeTMgLSB5MiwgeDMgLSB4MilcbiAgICAgICAgICAgICAgICAgICAgZGExID0gTWF0aC5hYnMoYTIzIC0gTWF0aC5hdGFuMih5MiAtIHkxLCB4MiAtIHgxKSlcbiAgICAgICAgICAgICAgICAgICAgZGEyID0gTWF0aC5hYnMoTWF0aC5hdGFuMih5NCAtIHkzLCB4NCAtIHgzKSAtIGEyMylcbiAgICAgICAgICAgICAgICAgICAgaWYoZGExID49IHBpKSBkYTEgPSAyKnBpIC0gZGExXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhMiA+PSBwaSkgZGEyID0gMipwaSAtIGRhMlxuXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhMSArIGRhMiA8IG1fYW5nbGVfdG9sZXJhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGaW5hbGx5IHdlIGNhbiBzdG9wIHRoZSByZWN1cnNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MTIzNCwgeTEyMzQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZihtX2N1c3BfbGltaXQgIT09IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGExID4gbV9jdXNwX2xpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MiwgeTIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkYTIgPiBtX2N1c3BfbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgzLCB5MykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZihkMiA+IEZMVF9FUFNJTE9OKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHAxLHAzLHA0IGFyZSBjb2xsaW5lYXIsIHAyIGlzIGNvbnNpZGVyYWJsZVxuICAgICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgaWYoZDIgKiBkMiA8PSBkaXN0YW5jZVRvbGVyYW5jZSAqIChkeCpkeCArIGR5KmR5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYobV9hbmdsZV90b2xlcmFuY2UgPCBjdXJ2ZV9hbmdsZV90b2xlcmFuY2VfZXBzaWxvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDEyMzQsIHkxMjM0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5nbGUgQ29uZGl0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhMSA9IE1hdGguYWJzKE1hdGguYXRhbjIoeTMgLSB5MiwgeDMgLSB4MikgLSBNYXRoLmF0YW4yKHkyIC0geTEsIHgyIC0geDEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGExID49IHBpKSBkYTEgPSAyKnBpIC0gZGExXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhMSA8IG1fYW5nbGVfdG9sZXJhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MiwgeTIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDMsIHkzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobV9jdXNwX2xpbWl0ICE9PSAwLjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkYTEgPiBtX2N1c3BfbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MiwgeTIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZihkMyA+IEZMVF9FUFNJTE9OKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHAxLHAyLHA0IGFyZSBjb2xsaW5lYXIsIHAzIGlzIGNvbnNpZGVyYWJsZVxuICAgICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgaWYoZDMgKiBkMyA8PSBkaXN0YW5jZVRvbGVyYW5jZSAqIChkeCpkeCArIGR5KmR5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYobV9hbmdsZV90b2xlcmFuY2UgPCBjdXJ2ZV9hbmdsZV90b2xlcmFuY2VfZXBzaWxvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDEyMzQsIHkxMjM0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5nbGUgQ29uZGl0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhMSA9IE1hdGguYWJzKE1hdGguYXRhbjIoeTQgLSB5MywgeDQgLSB4MykgLSBNYXRoLmF0YW4yKHkzIC0geTIsIHgzIC0geDIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGExID49IHBpKSBkYTEgPSAyKnBpIC0gZGExXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhMSA8IG1fYW5nbGVfdG9sZXJhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2godmVjMih4MiwgeTIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHZlYzIoeDMsIHkzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobV9jdXNwX2xpbWl0ICE9PSAwLjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkYTEgPiBtX2N1c3BfbGltaXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgzLCB5MykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29sbGluZWFyIGNhc2VcbiAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgICAgICBkeCA9IHgxMjM0IC0gKHgxICsgeDQpIC8gMlxuICAgICAgICAgICAgICAgICAgICBkeSA9IHkxMjM0IC0gKHkxICsgeTQpIC8gMlxuICAgICAgICAgICAgICAgICAgICBpZihkeCpkeCArIGR5KmR5IDw9IGRpc3RhbmNlVG9sZXJhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh2ZWMyKHgxMjM0LCB5MTIzNCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnRpbnVlIHN1YmRpdmlzaW9uXG4gICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICByZWN1cnNpdmUoeDEsIHkxLCB4MTIsIHkxMiwgeDEyMywgeTEyMywgeDEyMzQsIHkxMjM0LCBwb2ludHMsIGRpc3RhbmNlVG9sZXJhbmNlLCBsZXZlbCArIDEpIFxuICAgICAgICByZWN1cnNpdmUoeDEyMzQsIHkxMjM0LCB4MjM0LCB5MjM0LCB4MzQsIHkzNCwgeDQsIHk0LCBwb2ludHMsIGRpc3RhbmNlVG9sZXJhbmNlLCBsZXZlbCArIDEpIFxuICAgIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mdW5jdGlvbicpKCkiLCJcInVzZSBzdHJpY3RcIlxyXG5cclxudmFyIGFicyA9IE1hdGguYWJzXHJcbiAgLCBtaW4gPSBNYXRoLm1pblxyXG5cclxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgYWJzb2x1dGVFcnJvciwgcmVsYXRpdmVFcnJvcikge1xyXG4gIHZhciBkID0gYWJzKGEgLSBiKVxyXG4gIFxyXG4gIGlmIChhYnNvbHV0ZUVycm9yID09IG51bGwpIGFic29sdXRlRXJyb3IgPSBhbG1vc3RFcXVhbC5EQkxfRVBTSUxPTjtcclxuICBpZiAocmVsYXRpdmVFcnJvciA9PSBudWxsKSByZWxhdGl2ZUVycm9yID0gYWJzb2x1dGVFcnJvcjtcclxuICBcclxuICBpZihkIDw9IGFic29sdXRlRXJyb3IpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmKGQgPD0gcmVsYXRpdmVFcnJvciAqIG1pbihhYnMoYSksIGFicyhiKSkpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIHJldHVybiBhID09PSBiXHJcbn1cclxuXHJcbmFsbW9zdEVxdWFsLkZMVF9FUFNJTE9OID0gMS4xOTIwOTI5MGUtN1xyXG5hbG1vc3RFcXVhbC5EQkxfRVBTSUxPTiA9IDIuMjIwNDQ2MDQ5MjUwMzEzMWUtMTZcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gYWxtb3N0RXF1YWxcclxuIiwidmFyIHN0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcblxubW9kdWxlLmV4cG9ydHMgPSBhbkFycmF5XG5cbmZ1bmN0aW9uIGFuQXJyYXkoYXJyKSB7XG4gIHJldHVybiAoXG4gICAgICAgYXJyLkJZVEVTX1BFUl9FTEVNRU5UXG4gICAgJiYgc3RyLmNhbGwoYXJyLmJ1ZmZlcikgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXSdcbiAgICB8fCBBcnJheS5pc0FycmF5KGFycilcbiAgKVxufVxuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCdhbi1hcnJheScpXG52YXIgYWxtb3N0ID0gcmVxdWlyZSgnYWxtb3N0LWVxdWFsJylcblxuLy9kZXRlcm1pbmVzIHdoZXRoZXIgdHdvIGFycmF5cyBhcmUgYWxtb3N0IGVxdWFsXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGEsIGIsIGFic29sdXRlVG9sZXJhbmNlLCByZWxhdGl2ZVRvbGVyYW5jZSkge1xuICAgIC8vd2lsbCBhY2NlcHQgdHlwZWQgYXJyYXlzXG4gICAgaWYgKCFhIHx8ICFiIHx8ICFpc0FycmF5KGEpIHx8ICFpc0FycmF5KGIpKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICBpZiAodHlwZW9mIGFic29sdXRlVG9sZXJhbmNlICE9PSAnbnVtYmVyJylcbiAgICAgICAgYWJzb2x1dGVUb2xlcmFuY2UgPSBhbG1vc3QuRkxUX0VQU0lMT05cbiAgICBpZiAodHlwZW9mIHJlbGF0aXZlVG9sZXJhbmNlICE9PSAnbnVtYmVyJylcbiAgICAgICAgcmVsYXRpdmVUb2xlcmFuY2UgPSBhYnNvbHV0ZVRvbGVyYW5jZVxuXG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEpLmV2ZXJ5KGZ1bmN0aW9uKGEwLCBpKSB7XG4gICAgICAgIHZhciBiMCA9IGJbaV1cbiAgICAgICAgcmV0dXJuIGEwID09PSBiMCB8fCBhbG1vc3QoYTAsIGIwLCBhYnNvbHV0ZVRvbGVyYW5jZSwgcmVsYXRpdmVUb2xlcmFuY2UpXG4gICAgfSlcbn0iLCJcInVzZSBzdHJpY3RcIlxuXG52YXIgYWJzID0gTWF0aC5hYnNcbiAgLCBtaW4gPSBNYXRoLm1pblxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCBhYnNvbHV0ZUVycm9yLCByZWxhdGl2ZUVycm9yKSB7XG4gIHZhciBkID0gYWJzKGEgLSBiKVxuICBpZihkIDw9IGFic29sdXRlRXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmKGQgPD0gcmVsYXRpdmVFcnJvciAqIG1pbihhYnMoYSksIGFicyhiKSkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBhID09PSBiXG59XG5cbmFsbW9zdEVxdWFsLkZMVF9FUFNJTE9OID0gMS4xOTIwOTI5MGUtN1xuYWxtb3N0RXF1YWwuREJMX0VQU0lMT04gPSAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2XG5cbm1vZHVsZS5leHBvcnRzID0gYWxtb3N0RXF1YWxcbiIsInZhciBjc3NDb2xvciA9IHJlcXVpcmUoJy4vbGliL2Nzcy1jb2xvcicpO1xudmFyIG5hbWVzID0gcmVxdWlyZSgnLi9saWIvY3NzLWNvbG9yLW5hbWVzLmpzb24nKTtcbnZhciByZ2JMdW1pbmFuY2UgPSByZXF1aXJlKCcuL2xpYi9yZWxhdGl2ZS1sdW1pbmFuY2UnKTtcbnZhciBIU0xVdGlsID0gcmVxdWlyZSgnLi9saWIvaHNsJyk7XG52YXIgaGV4VG9SR0JBID0gcmVxdWlyZSgnLi9saWIvaGV4LXRvLXJnYmEnKTtcbnZhciBSR0JBVG9IZXggPSByZXF1aXJlKCcuL2xpYi9yZ2JhLXRvLWhleCcpO1xuXG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IGNzc0NvbG9yLnBhcnNlO1xubW9kdWxlLmV4cG9ydHMuc3R5bGUgPSBjc3NDb2xvci5zdHlsZTtcbm1vZHVsZS5leHBvcnRzLm5hbWVzID0gbmFtZXM7XG5cbm1vZHVsZS5leHBvcnRzLnJlbGF0aXZlTHVtaW5hbmNlID0gZnVuY3Rpb24gcmVsYXRpdmVMdW1pbmFuY2UgKGNvbG9yKSB7XG4gIHZhciByZXN1bHQgPSBtb2R1bGUuZXhwb3J0cy5wYXJzZShjb2xvcik7XG4gIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHJnYkx1bWluYW5jZShyZXN1bHQucmdiKTtcbn07XG5cbi8vIEV4dHJhY3RlZCBmcm9tIEB0bWN3IC8gd2NhZy1jb250cmFzdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RtY3cvd2NhZy1jb250cmFzdFxubW9kdWxlLmV4cG9ydHMuY29udHJhc3RSYXRpbyA9IGZ1bmN0aW9uIGNvbnRyYXN0UmF0aW8gKGNvbG9yQSwgY29sb3JCKSB7XG4gIHZhciBhID0gbW9kdWxlLmV4cG9ydHMucmVsYXRpdmVMdW1pbmFuY2UoY29sb3JBKTtcbiAgdmFyIGIgPSBtb2R1bGUuZXhwb3J0cy5yZWxhdGl2ZUx1bWluYW5jZShjb2xvckIpO1xuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIHZhciBsMSA9IE1hdGgubWF4KGEsIGIpO1xuICB2YXIgbDIgPSBNYXRoLm1pbihhLCBiKTtcbiAgcmV0dXJuIChsMSArIDAuMDUpIC8gKGwyICsgMC4wNSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5vZmZzZXRIU0wgPSBmdW5jdGlvbiAoY29sb3IsIGgsIHMsIGwpIHtcbiAgdmFyIHJlc3VsdCA9IG1vZHVsZS5leHBvcnRzLnBhcnNlKGNvbG9yKTtcbiAgaWYgKCFyZXN1bHQpIHJldHVybiBudWxsO1xuICByZXN1bHQuaHNsYVswXSArPSBoIHx8IDA7XG4gIHJlc3VsdC5oc2xhWzFdID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCByZXN1bHQuaHNsYVsxXSArIChzIHx8IDApKSk7XG4gIHJlc3VsdC5oc2xhWzJdID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCByZXN1bHQuaHNsYVsyXSArIChsIHx8IDApKSk7XG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cy5wYXJzZSh7IGhzbGE6IHJlc3VsdC5oc2xhIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMuYmxlbmQgPSBmdW5jdGlvbiAoYmFja2dyb3VuZCwgZm9yZWdyb3VuZCwgb3BhY2l0eSkge1xuICB2YXIgYmcgPSBtb2R1bGUuZXhwb3J0cy5wYXJzZShiYWNrZ3JvdW5kKTtcbiAgdmFyIGZnID0gbW9kdWxlLmV4cG9ydHMucGFyc2UoZm9yZWdyb3VuZCk7XG4gIGlmIChiZyA9PSBudWxsIHx8IGZnID09IG51bGwpIHJldHVybiBudWxsO1xuXG4gIHZhciBjMCA9IGJnLnJnYmE7XG4gIHZhciBjMSA9IGZnLnJnYmE7XG4gIG9wYWNpdHkgPSB0eXBlb2Ygb3BhY2l0eSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUob3BhY2l0eSkgPyBvcGFjaXR5IDogMS4wO1xuICB2YXIgYWxwaGEgPSBvcGFjaXR5ICogYzFbM107XG4gIGlmIChhbHBoYSA+PSAxKSB7XG4gICAgLy8gZm9yZWdyb3VuZCBpcyBvcGFxdWUgc28gbm8gYmxlbmQgcmVxdWlyZWRcbiAgICByZXR1cm4gZmc7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICBjMVtpXSA9IGMxW2ldICogYWxwaGEgKyBjMFtpXSAqIChjMFszXSAqICgxIC0gYWxwaGEpKTtcbiAgfVxuICBjMVszXSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGFscGhhICsgYzBbM10gKiAoMSAtIGFscGhhKSkpO1xuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMucGFyc2UoYzEpOyAvLyByZS1wYXJzZSB0byBnZXQgbmV3IG1ldGFkYXRhXG59O1xuXG4vLyBFeHBvc2VkIGJ1dCBub3QgeWV0IGRvY3VtZW50ZWRcbm1vZHVsZS5leHBvcnRzLmhleFRvUkdCQSA9IGhleFRvUkdCQTtcbm1vZHVsZS5leHBvcnRzLlJHQkFUb0hleCA9IFJHQkFUb0hleDtcbm1vZHVsZS5leHBvcnRzLlJHQkFUb0hTTEEgPSBIU0xVdGlsLlJHQkFUb0hTTEE7XG5tb2R1bGUuZXhwb3J0cy5IU0xBVG9SR0JBID0gSFNMVXRpbC5IU0xBVG9SR0JBO1xuIiwidmFyIGxpbmVjbGlwID0gcmVxdWlyZSgnbGluZWNsaXAnKTtcbnZhciBhbG1vc3RFcXVhbCA9IHJlcXVpcmUoJ2FsbW9zdC1lcXVhbCcpO1xudmFyIGFycmF5QWxtb3N0RXF1YWwgPSByZXF1aXJlKCdhcnJheS1hbG1vc3QtZXF1YWwnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJ2Nsb25lJyk7XG52YXIgc3F1YXJlZERpc3RhbmNlID0gcmVxdWlyZSgnLi9saWIvdmVjMicpLnNxdWFyZWREaXN0YW5jZTtcblxubW9kdWxlLmV4cG9ydHMuYXJlUG9pbnRzQ29sbGluZWFyID0gZnVuY3Rpb24gKHBvaW50MCwgcG9pbnQxLCBwb2ludDIpIHtcbiAgdmFyIHgwID0gcG9pbnQwWzBdO1xuICB2YXIgeTAgPSBwb2ludDBbMV07XG4gIHZhciB4MSA9IHBvaW50MVswXTtcbiAgdmFyIHkxID0gcG9pbnQxWzFdO1xuICB2YXIgeDIgPSBwb2ludDJbMF07XG4gIHZhciB5MiA9IHBvaW50MlsxXTtcbiAgcmV0dXJuIGFsbW9zdEVxdWFsKCh5MCAtIHkxKSAqICh4MCAtIHgyKSwgKHkwIC0geTIpICogKHgwIC0geDEpKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLnJlbW92ZUR1cGxpY2F0ZVBvaW50cyA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gIHZhciBuZXdQYXRoID0gW107XG4gIHZhciBsYXN0UG9pbnQ7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjdXJQb2ludCA9IHBhdGhbaV07XG4gICAgaWYgKCFsYXN0UG9pbnQgfHwgIWFycmF5QWxtb3N0RXF1YWwobGFzdFBvaW50LCBjdXJQb2ludCkpIHtcbiAgICAgIG5ld1BhdGgucHVzaChjdXJQb2ludCk7XG4gICAgICBsYXN0UG9pbnQgPSBjdXJQb2ludDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNsb25lKG5ld1BhdGgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMucmVtb3ZlQ29sbGluZWFyUG9pbnRzID0gZnVuY3Rpb24gKHBhdGgpIHtcbiAgdmFyIG5ld1BhdGggPSBbXTtcbiAgdmFyIHJlbWFpbmluZ1BvaW50cyA9IGNsb25lKHBhdGgpO1xuICB3aGlsZSAocmVtYWluaW5nUG9pbnRzLmxlbmd0aCA+PSAzKSB7XG4gICAgdmFyIHAwID0gcmVtYWluaW5nUG9pbnRzWzBdO1xuICAgIHZhciBwMSA9IHJlbWFpbmluZ1BvaW50c1sxXTtcbiAgICB2YXIgcDIgPSByZW1haW5pbmdQb2ludHNbMl07XG4gICAgdmFyIGNvbGxpbmVhciA9IG1vZHVsZS5leHBvcnRzLmFyZVBvaW50c0NvbGxpbmVhcihwMCwgcDEsIHAyKTtcbiAgICAvLyBvbmUgbW9yZSBjaGVjayBpcyB0byBlbnN1cmUgdGhhdCBwb2ludHMgYXJlIGluIGEgbGluZTpcbiAgICAvLyBBLT5CLT5DXG4gICAgLy8gbm90IEEtPkMtPkIgb3Igc29tZSB2YXJpYW50XG4gICAgaWYgKGNvbGxpbmVhcikge1xuICAgICAgdmFyIGRpc3RBQiA9IHNxdWFyZWREaXN0YW5jZShwMCwgcDEpO1xuICAgICAgdmFyIGRpc3RBQyA9IHNxdWFyZWREaXN0YW5jZShwMCwgcDIpO1xuICAgICAgaWYgKGRpc3RBQiA+IGRpc3RBQykgY29sbGluZWFyID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChjb2xsaW5lYXIpIHtcbiAgICAgIC8vIHRoZSBmaXJzdCAzIHBvaW50cyBhcmUgY29sbGluZWFyXG4gICAgICAvLyByZW1vdmUgdGhlIHNlY29uZCBwb2ludCBhcyBpdCBpc24ndCBuZWVkZWRcbiAgICAgIHJlbWFpbmluZ1BvaW50cy5zcGxpY2UoMSwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoZSAzIHBvaW50cyBhcmUgbm90IGNvbGxpbmVhclxuICAgICAgLy8gYWRkIHRoZSBmaXJzdCBvbmUgYXMgdGhlIG90aGVycyBtYXkgc3RpbGwgYmUgY29sbGluZWFyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE7IGkrKykge1xuICAgICAgICBuZXdQYXRoLnB1c2gocmVtYWluaW5nUG9pbnRzLnNoaWZ0KCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBhZGQgYW55IHJlbWFpbmluZyBwb2ludHNcbiAgd2hpbGUgKHJlbWFpbmluZ1BvaW50cy5sZW5ndGgpIHtcbiAgICBuZXdQYXRoLnB1c2gocmVtYWluaW5nUG9pbnRzLnNoaWZ0KCkpO1xuICB9XG4gIHJldHVybiBuZXdQYXRoO1xufTtcblxubW9kdWxlLmV4cG9ydHMuY2xpcFNlZ21lbnRUb0NpcmNsZSA9IHJlcXVpcmUoJy4vbGliL2NsaXAvY2xpcC1zZWdtZW50LXRvLWNpcmNsZScpO1xubW9kdWxlLmV4cG9ydHMuY2xpcExpbmVUb0NpcmNsZSA9IHJlcXVpcmUoJy4vbGliL2NsaXAvY2xpcC1saW5lLXRvLWNpcmNsZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5jbGlwUG9seWxpbmVzVG9Cb3ggPSBmdW5jdGlvbiAocG9seWxpbmVzLCBiYm94LCBib3JkZXIsIGNsb3NlTGluZXMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGJib3gpIHx8IChiYm94Lmxlbmd0aCAhPT0gMiAmJiBiYm94Lmxlbmd0aCAhPT0gNCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGJveCB0byBlaXRoZXIgYmUgZm9ybWF0IFsgbWluUG9pbnQsIG1heFBvaW50IF0gb3IgWyBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZIF0nKTtcbiAgfVxuICAvLyBFeHBhbmQgbmVzdGVkIGZvcm1hdCB0byBmbGF0IGJvdW5kc1xuICBpZiAoYmJveC5sZW5ndGggPT09IDIpIHtcbiAgICB2YXIgbWluID0gYmJveFswXTtcbiAgICB2YXIgbWF4ID0gYmJveFsxXTtcbiAgICBiYm94ID0gWyBtaW5bMF0sIG1pblsxXSwgbWF4WzBdLCBtYXhbMV0gXTtcbiAgfVxuICBjbG9zZUxpbmVzID0gY2xvc2VMaW5lcyAhPT0gZmFsc2U7XG4gIGJvcmRlciA9IEJvb2xlYW4oYm9yZGVyKTtcblxuICBpZiAoYm9yZGVyKSB7XG4gICAgcmV0dXJuIHBvbHlsaW5lcy5tYXAoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBsaW5lY2xpcC5wb2x5Z29uKGxpbmUsIGJib3gpO1xuICAgICAgaWYgKGNsb3NlTGluZXMgJiYgcmVzdWx0Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocmVzdWx0WzBdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChsaW5lcykge1xuICAgICAgcmV0dXJuIGxpbmVzLmxlbmd0aCA+IDA7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBvbHlsaW5lcy5tYXAoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHJldHVybiBsaW5lY2xpcC5wb2x5bGluZShsaW5lLCBiYm94KTtcbiAgICB9KS5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICB9LCBbXSk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUhhdGNoTGluZXMgPSBjcmVhdGVIYXRjaExpbmVzO1xuZnVuY3Rpb24gY3JlYXRlSGF0Y2hMaW5lcyAoYm91bmRzLCBhbmdsZSwgc3BhY2luZywgb3V0KSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShib3VuZHMpIHx8IChib3VuZHMubGVuZ3RoICE9PSAyICYmIGJvdW5kcy5sZW5ndGggIT09IDQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBib3ggdG8gZWl0aGVyIGJlIGZvcm1hdCBbIG1pblBvaW50LCBtYXhQb2ludCBdIG9yIFsgbWluWCwgbWluWSwgbWF4WCwgbWF4WSBdJyk7XG4gIH1cbiAgLy8gRXhwYW5kIG5lc3RlZCBmb3JtYXQgdG8gZmxhdCBib3VuZHNcbiAgaWYgKGJvdW5kcy5sZW5ndGggPT09IDIpIHtcbiAgICB2YXIgbWluID0gYm91bmRzWzBdO1xuICAgIHZhciBtYXggPSBib3VuZHNbMV07XG4gICAgYm91bmRzID0gWyBtaW5bMF0sIG1pblsxXSwgbWF4WzBdLCBtYXhbMV0gXTtcbiAgfVxuXG4gIGlmIChhbmdsZSA9PSBudWxsKSBhbmdsZSA9IC1NYXRoLlBJIC8gNDtcbiAgaWYgKHNwYWNpbmcgPT0gbnVsbCkgc3BhY2luZyA9IDAuNTtcbiAgaWYgKG91dCA9PSBudWxsKSBvdXQgPSBbXTtcblxuICAvLyBSZWZlcmVuY2U6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmlsLW1hZC9FZ2dCb3QvYmxvYi9tYXN0ZXIvaW5rc2NhcGVfZHJpdmVyL2VnZ2JvdF9oYXRjaC5weVxuICBzcGFjaW5nID0gTWF0aC5hYnMoc3BhY2luZyk7XG4gIGlmIChzcGFjaW5nID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCB1c2UgYSBzcGFjaW5nIG9mIHplcm8gYXMgaXQgd2lsbCBydW4gYW4gaW5maW5pdGUgbG9vcCEnKTtcblxuICB2YXIgeG1pbiA9IGJvdW5kc1swXTtcbiAgdmFyIHltaW4gPSBib3VuZHNbMV07XG4gIHZhciB4bWF4ID0gYm91bmRzWzJdO1xuICB2YXIgeW1heCA9IGJvdW5kc1szXTtcblxuICB2YXIgdyA9IHhtYXggLSB4bWluO1xuICB2YXIgaCA9IHltYXggLSB5bWluO1xuICBpZiAodyA9PT0gMCB8fCBoID09PSAwKSByZXR1cm4gb3V0O1xuICB2YXIgciA9IE1hdGguc3FydCh3ICogdyArIGggKiBoKSAvIDI7XG4gIHZhciByb3RBbmdsZSA9IE1hdGguUEkgLyAyIC0gYW5nbGU7XG4gIHZhciBjYSA9IE1hdGguY29zKHJvdEFuZ2xlKTtcbiAgdmFyIHNhID0gTWF0aC5zaW4ocm90QW5nbGUpO1xuICB2YXIgY3ggPSB4bWluICsgKHcgLyAyKTtcbiAgdmFyIGN5ID0geW1pbiArIChoIC8gMik7XG4gIHZhciBpID0gLXI7XG4gIHdoaWxlIChpIDw9IHIpIHtcbiAgICAvLyBMaW5lIHN0YXJ0cyBhdCAoaSwgLXIpIGFuZCBnb2VzIHRvIChpLCArcilcbiAgICB2YXIgeDEgPSBjeCArIChpICogY2EpICsgKHIgKiBzYSk7IC8vICBpICogY2EgLSAoLXIpICogc2FcbiAgICB2YXIgeTEgPSBjeSArIChpICogc2EpIC0gKHIgKiBjYSk7IC8vICBpICogc2EgKyAoLXIpICogY2FcbiAgICB2YXIgeDIgPSBjeCArIChpICogY2EpIC0gKHIgKiBzYSk7IC8vICBpICogY2EgLSAoK3IpICogc2FcbiAgICB2YXIgeTIgPSBjeSArIChpICogc2EpICsgKHIgKiBjYSk7IC8vICBpICogc2EgKyAoK3IpICogY2FcbiAgICBpICs9IHNwYWNpbmc7XG4gICAgLy8gUmVtb3ZlIGFueSBwb3RlbnRpYWwgaGF0Y2ggbGluZXMgd2hpY2ggYXJlIGVudGlyZWx5XG4gICAgLy8gb3V0c2lkZSBvZiB0aGUgYm91bmRpbmcgYm94XG4gICAgaWYgKCh4MSA8IHhtaW4gJiYgeDIgPCB4bWluKSB8fCAoeDEgPiB4bWF4ICYmIHgyID4geG1heCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoKHkxIDwgeW1pbiAmJiB5MiA8IHltaW4pIHx8ICh5MSA+IHltYXggJiYgeTIgPiB5bWF4KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG91dC5wdXNoKFsgWyB4MSwgeTEgXSwgWyB4MiwgeTIgXSBdKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cy5nZXRCb3VuZHMgPSBmdW5jdGlvbiBnZXRCb3VuZHMgKHBvaW50cykge1xuICB2YXIgbiA9IHBvaW50cy5sZW5ndGg7XG4gIGlmIChuID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBwb2ludHMgdG8gYmUgYSBub24tZW1wdHkgYXJyYXknKTtcbiAgfVxuICB2YXIgZCA9IHBvaW50c1swXS5sZW5ndGg7XG4gIHZhciBsbyA9IHBvaW50c1swXS5zbGljZSgpO1xuICB2YXIgaGkgPSBwb2ludHNbMF0uc2xpY2UoKTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBuOyArK2kpIHtcbiAgICB2YXIgcCA9IHBvaW50c1tpXTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGQ7ICsraikge1xuICAgICAgdmFyIHggPSBwW2pdO1xuICAgICAgbG9bal0gPSBNYXRoLm1pbihsb1tqXSwgeCk7XG4gICAgICBoaVtqXSA9IE1hdGgubWF4KGhpW2pdLCB4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsgbG8sIGhpIF07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJhbmRvbTogcmVxdWlyZSgnLi9yYW5kb20nKSxcbiAgbWF0aDogcmVxdWlyZSgnLi9tYXRoJyksXG4gIHBlbnBsb3Q6IHJlcXVpcmUoJy4vcGVucGxvdC5qcycpLFxuICBnZW9tZXRyeTogcmVxdWlyZSgnLi9nZW9tZXRyeS5qcycpLFxuICBzaGFkZXI6IHJlcXVpcmUoJy4vc2hhZGVyLmpzJyksXG4gIGNvbG9yOiByZXF1aXJlKCcuL2NvbG9yLmpzJylcbn07XG4iLCJ2YXIgYWxtb3N0RXF1YWwgPSByZXF1aXJlKCdhbG1vc3QtZXF1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcnNlY3RMaW5lQ2lyY2xlO1xuZnVuY3Rpb24gaW50ZXJzZWN0TGluZUNpcmNsZSAocDAsIHAxLCBjaXJjbGUsIGNpcmNsZVJhZGl1cywgaGl0cykge1xuICBpZiAoaGl0cyA9PSBudWxsKSBoaXRzID0gW107XG4gIHZhciBhID0gc3FyKHAxWzBdIC0gcDBbMF0pICsgc3FyKHAxWzFdIC0gcDBbMV0pO1xuICB2YXIgYiA9IDIuMCAqIChcbiAgICAocDFbMF0gLSBwMFswXSkgKiAocDBbMF0gLSBjaXJjbGVbMF0pICtcbiAgICAocDFbMV0gLSBwMFsxXSkgKiAocDBbMV0gLSBjaXJjbGVbMV0pXG4gICk7XG5cbiAgdmFyIGMgPSBzcXIoY2lyY2xlWzBdKSArIHNxcihjaXJjbGVbMV0pICsgc3FyKHAwWzBdKSArXG4gICAgc3FyKHAwWzFdKSAtIDIgKiAoY2lyY2xlWzBdICogcDBbMF0gKyBjaXJjbGVbMV0gKiBwMFsxXSkgLVxuICAgIHNxcihjaXJjbGVSYWRpdXMpO1xuXG4gIHZhciBkZXQgPSBiICogYiAtIDQuMCAqIGEgKiBjO1xuICB2YXIgZGVsdGE7XG4gIGlmIChkZXQgPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGFsbW9zdEVxdWFsKGRldCwgMC4wKSkge1xuICAgIGRlbHRhID0gLWIgLyAoMi4wICogYSk7XG4gICAgaGl0cy5wdXNoKFtcbiAgICAgIHAwWzBdICsgZGVsdGEgKiAocDFbMF0gLSBwMFswXSksXG4gICAgICBwMFsxXSArIGRlbHRhICogKHAxWzFdIC0gcDBbMV0pXG4gICAgXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoZGV0ID4gMC4wKSB7XG4gICAgdmFyIHNxcnREZXQgPSBNYXRoLnNxcnQoZGV0KTtcbiAgICBkZWx0YSA9ICgtYiArIHNxcnREZXQpIC8gKDIuMCAqIGEpO1xuXG4gICAgaGl0cy5wdXNoKFtcbiAgICAgIHAwWzBdICsgZGVsdGEgKiAocDFbMF0gLSBwMFswXSksXG4gICAgICBwMFsxXSArIGRlbHRhICogKHAxWzFdIC0gcDBbMV0pXG4gICAgXSk7XG5cbiAgICBkZWx0YSA9ICgtYiAtIHNxcnREZXQpIC8gKDIuMCAqIGEpO1xuICAgIGhpdHMucHVzaChbXG4gICAgICBwMFswXSArIGRlbHRhICogKHAxWzBdIC0gcDBbMF0pLFxuICAgICAgcDBbMV0gKyBkZWx0YSAqIChwMVsxXSAtIHAwWzFdKVxuICAgIF0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBzcXIgKGEpIHtcbiAgcmV0dXJuIGEgKiBhO1xufVxuIiwidmFyIGFsbW9zdEVxdWFsID0gcmVxdWlyZSgnYWxtb3N0LWVxdWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJzZWN0U2VnbWVudENpcmNsZTtcbmZ1bmN0aW9uIGludGVyc2VjdFNlZ21lbnRDaXJjbGUgKHAwLCBwMSwgY2lyY2xlLCBjaXJjbGVSYWRpdXMsIGhpdHMpIHtcbiAgcmV0dXJuIGludGVyc2VjdChwMFswXSwgcDBbMV0sIHAxWzBdLCBwMVsxXSwgY2lyY2xlWzBdLCBjaXJjbGVbMV0sIGNpcmNsZVJhZGl1cywgaGl0cyk7XG59XG5cbmZ1bmN0aW9uIGludGVyc2VjdCAoeDEsIHkxLCB4MiwgeTIsIGN4LCBjeSwgcmFkaXVzLCBoaXRzKSB7XG4gIGlmIChoaXRzID09IG51bGwpIGhpdHMgPSBbXTtcbiAgdmFyIHAxSW5DaXJjbGUgPSBwb2ludEluQ2lyY2xlKHgxLCB5MSwgY3gsIGN5LCByYWRpdXMpO1xuICB2YXIgcDJJbkNpcmNsZSA9IHBvaW50SW5DaXJjbGUoeDIsIHkyLCBjeCwgY3ksIHJhZGl1cyk7XG5cbiAgaWYgKHAxSW5DaXJjbGUgJiYgcDJJbkNpcmNsZSkge1xuICAgIGhpdHMucHVzaChbIHgxLCB5MSBdKTtcbiAgICBoaXRzLnB1c2goWyB4MiwgeTIgXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgaCwgYSwgY2xvc2VzdFBvaW50LCBweCwgcHk7XG4gIGlmIChwMUluQ2lyY2xlIHx8IHAySW5DaXJjbGUpIHtcbiAgICBjbG9zZXN0UG9pbnQgPSBjbG9zZXN0UG9pbnRPbkxpbmVGcm9tUG9pbnQoeDEsIHkxLCB4MiwgeTIsIGN4LCBjeSk7XG4gICAgcHggPSBjbG9zZXN0UG9pbnRbMF07XG4gICAgcHkgPSBjbG9zZXN0UG9pbnRbMV07XG4gICAgaCA9IGRpc3RhbmNlKHB4LCBweSwgY3gsIGN5KTtcbiAgICBhID0gTWF0aC5zcXJ0KChyYWRpdXMgKiByYWRpdXMpIC0gKGggKiBoKSk7XG4gICAgdmFyIGhpdEEgPSBwMUluQ2lyY2xlID8gWyB4MSwgeTEgXSA6IFsgeDIsIHkyIF07XG4gICAgdmFyIGhpdEIgPSBwMUluQ2lyY2xlID8gcHJvamVjdFBvaW50KHB4LCBweSwgeDIsIHkyLCBhKSA6IHByb2plY3RQb2ludChweCwgcHksIHgxLCB5MSwgYSk7XG4gICAgaWYgKGFsbW9zdEVxdWFsKGhpdEFbMF0sIGhpdEJbMF0pICYmIGFsbW9zdEVxdWFsKGhpdEFbMV0sIGhpdEJbMV0pKSB7XG4gICAgICAvLyBPbmUgcG9pbnQgaW4gdGhlIHNlZ21lbnQgbGllcyBvbiB0aGUgY2lyY2xlLCB0aGUgb3RoZXIgaXMgb3V0c2lkZVxuICAgICAgaGl0cy5wdXNoKGhpdEEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGhpdHMucHVzaChoaXRBKTtcbiAgICBoaXRzLnB1c2goaGl0Qik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjbG9zZXN0UG9pbnQgPSBjbG9zZXN0UG9pbnRPblNlZ21lbnRGcm9tUG9pbnQoeDEsIHkxLCB4MiwgeTIsIGN4LCBjeSk7XG4gIHB4ID0gY2xvc2VzdFBvaW50WzBdO1xuICBweSA9IGNsb3Nlc3RQb2ludFsxXTtcblxuICBpZiAoKGFsbW9zdEVxdWFsKHgxLCBweCkgJiYgYWxtb3N0RXF1YWwoeTEsIHB5KSkgfHxcbiAgICAgIChhbG1vc3RFcXVhbCh4MiwgcHgpICYmIGFsbW9zdEVxdWFsKHkyLCBweSkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIGggPSBkaXN0YW5jZShweCwgcHksIGN4LCBjeSk7XG4gICAgaWYgKGggPiByYWRpdXMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGFsbW9zdEVxdWFsKGgsIHJhZGl1cykpIHtcbiAgICAgIGhpdHMucHVzaChbIHB4LCBweSBdKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYWxtb3N0RXF1YWwoaCwgMC4wKSkge1xuICAgICAgaGl0cy5wdXNoKHByb2plY3RQb2ludChjeCwgY3ksIHgxLCB5MSwgcmFkaXVzKSk7XG4gICAgICBoaXRzLnB1c2gocHJvamVjdFBvaW50KGN4LCBjeSwgeDIsIHkyLCByYWRpdXMpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gTWF0aC5zcXJ0KChyYWRpdXMgKiByYWRpdXMpIC0gKGggKiBoKSk7XG4gICAgICBoaXRzLnB1c2gocHJvamVjdFBvaW50KHB4LCBweSwgeDEsIHkxLCBhKSk7XG4gICAgICBoaXRzLnB1c2gocHJvamVjdFBvaW50KHB4LCBweSwgeDIsIHkyLCBhKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF5RGlzdGFuY2UgKHgxLCB5MSwgeDIsIHkyKSB7XG4gIHZhciBkeCA9ICh4MiAtIHgxKTtcbiAgdmFyIGR5ID0gKHkyIC0geTEpO1xuICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG59XG5cbmZ1bmN0aW9uIHBvaW50SW5DaXJjbGUgKHB4LCBweSwgY3gsIGN5LCByYWRpdXMpIHtcbiAgcmV0dXJuIGxheURpc3RhbmNlKHB4LCBweSwgY3gsIGN5KSA8PSAocmFkaXVzICogcmFkaXVzKTtcbn1cblxuZnVuY3Rpb24gZGlzdGFuY2UgKHgxLCB5MSwgeDIsIHkyKSB7XG4gIHZhciBkeCA9ICh4MSAtIHgyKTtcbiAgdmFyIGR5ID0gKHkxIC0geTIpO1xuICByZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbn1cblxuZnVuY3Rpb24gcHJvamVjdFBvaW50IChzcmN4LCBzcmN5LCBkZXN0eCwgZGVzdHksIGRpc3QpIHtcbiAgdmFyIHQgPSBkaXN0IC8gZGlzdGFuY2Uoc3JjeCwgc3JjeSwgZGVzdHgsIGRlc3R5KTtcbiAgcmV0dXJuIFtcbiAgICBzcmN4ICsgdCAqIChkZXN0eCAtIHNyY3gpLFxuICAgIHNyY3kgKyB0ICogKGRlc3R5IC0gc3JjeSlcbiAgXTtcbn1cblxuZnVuY3Rpb24gY2xvc2VzdFBvaW50T25MaW5lRnJvbVBvaW50ICh4MSwgeTEsIHgyLCB5MiwgcHgsIHB5KSB7XG4gIHZhciB2eCA9IHgyIC0geDE7XG4gIHZhciB2eSA9IHkyIC0geTE7XG4gIHZhciB3eCA9IHB4IC0geDE7XG4gIHZhciB3eSA9IHB5IC0geTE7XG4gIHZhciBjMSA9IHZ4ICogd3ggKyB2eSAqIHd5O1xuICB2YXIgYzIgPSB2eCAqIHZ4ICsgdnkgKiB2eTtcbiAgdmFyIHJhdGlvID0gYzEgLyBjMjtcbiAgcmV0dXJuIFtcbiAgICB4MSArIHJhdGlvICogdngsXG4gICAgeTEgKyByYXRpbyAqIHZ5XG4gIF07XG59XG5cbmZ1bmN0aW9uIGNsb3Nlc3RQb2ludE9uU2VnbWVudEZyb21Qb2ludCAoeDEsIHkxLCB4MiwgeTIsIHB4LCBweSkge1xuICB2YXIgdnggPSB4MiAtIHgxO1xuICB2YXIgdnkgPSB5MiAtIHkxO1xuICB2YXIgd3ggPSBweCAtIHgxO1xuICB2YXIgd3kgPSBweSAtIHkxO1xuXG4gIHZhciBjMSA9IHZ4ICogd3ggKyB2eSAqIHd5O1xuXG4gIGlmIChjMSA8PSAwLjApIHtcbiAgICByZXR1cm4gWyB4MSwgeTEgXTtcbiAgfVxuXG4gIHZhciBjMiA9IHZ4ICogdnggKyB2eSAqIHZ5O1xuICBpZiAoYzIgPD0gYzEpIHtcbiAgICByZXR1cm4gWyB4MiwgeTIgXTtcbiAgfVxuXG4gIHZhciByYXRpbyA9IGMxIC8gYzI7XG4gIHJldHVybiBbXG4gICAgeDEgKyByYXRpbyAqIHZ4LFxuICAgIHkxICsgcmF0aW8gKiB2eVxuICBdO1xufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImFsaWNlYmx1ZVwiOiBcIiNmMGY4ZmZcIixcbiAgXCJhbnRpcXVld2hpdGVcIjogXCIjZmFlYmQ3XCIsXG4gIFwiYXF1YVwiOiBcIiMwMGZmZmZcIixcbiAgXCJhcXVhbWFyaW5lXCI6IFwiIzdmZmZkNFwiLFxuICBcImF6dXJlXCI6IFwiI2YwZmZmZlwiLFxuICBcImJlaWdlXCI6IFwiI2Y1ZjVkY1wiLFxuICBcImJpc3F1ZVwiOiBcIiNmZmU0YzRcIixcbiAgXCJibGFja1wiOiBcIiMwMDAwMDBcIixcbiAgXCJibGFuY2hlZGFsbW9uZFwiOiBcIiNmZmViY2RcIixcbiAgXCJibHVlXCI6IFwiIzAwMDBmZlwiLFxuICBcImJsdWV2aW9sZXRcIjogXCIjOGEyYmUyXCIsXG4gIFwiYnJvd25cIjogXCIjYTUyYTJhXCIsXG4gIFwiYnVybHl3b29kXCI6IFwiI2RlYjg4N1wiLFxuICBcImNhZGV0Ymx1ZVwiOiBcIiM1ZjllYTBcIixcbiAgXCJjaGFydHJldXNlXCI6IFwiIzdmZmYwMFwiLFxuICBcImNob2NvbGF0ZVwiOiBcIiNkMjY5MWVcIixcbiAgXCJjb3JhbFwiOiBcIiNmZjdmNTBcIixcbiAgXCJjb3JuZmxvd2VyYmx1ZVwiOiBcIiM2NDk1ZWRcIixcbiAgXCJjb3Juc2lsa1wiOiBcIiNmZmY4ZGNcIixcbiAgXCJjcmltc29uXCI6IFwiI2RjMTQzY1wiLFxuICBcImN5YW5cIjogXCIjMDBmZmZmXCIsXG4gIFwiZGFya2JsdWVcIjogXCIjMDAwMDhiXCIsXG4gIFwiZGFya2N5YW5cIjogXCIjMDA4YjhiXCIsXG4gIFwiZGFya2dvbGRlbnJvZFwiOiBcIiNiODg2MGJcIixcbiAgXCJkYXJrZ3JheVwiOiBcIiNhOWE5YTlcIixcbiAgXCJkYXJrZ3JlZW5cIjogXCIjMDA2NDAwXCIsXG4gIFwiZGFya2dyZXlcIjogXCIjYTlhOWE5XCIsXG4gIFwiZGFya2toYWtpXCI6IFwiI2JkYjc2YlwiLFxuICBcImRhcmttYWdlbnRhXCI6IFwiIzhiMDA4YlwiLFxuICBcImRhcmtvbGl2ZWdyZWVuXCI6IFwiIzU1NmIyZlwiLFxuICBcImRhcmtvcmFuZ2VcIjogXCIjZmY4YzAwXCIsXG4gIFwiZGFya29yY2hpZFwiOiBcIiM5OTMyY2NcIixcbiAgXCJkYXJrcmVkXCI6IFwiIzhiMDAwMFwiLFxuICBcImRhcmtzYWxtb25cIjogXCIjZTk5NjdhXCIsXG4gIFwiZGFya3NlYWdyZWVuXCI6IFwiIzhmYmM4ZlwiLFxuICBcImRhcmtzbGF0ZWJsdWVcIjogXCIjNDgzZDhiXCIsXG4gIFwiZGFya3NsYXRlZ3JheVwiOiBcIiMyZjRmNGZcIixcbiAgXCJkYXJrc2xhdGVncmV5XCI6IFwiIzJmNGY0ZlwiLFxuICBcImRhcmt0dXJxdW9pc2VcIjogXCIjMDBjZWQxXCIsXG4gIFwiZGFya3Zpb2xldFwiOiBcIiM5NDAwZDNcIixcbiAgXCJkZWVwcGlua1wiOiBcIiNmZjE0OTNcIixcbiAgXCJkZWVwc2t5Ymx1ZVwiOiBcIiMwMGJmZmZcIixcbiAgXCJkaW1ncmF5XCI6IFwiIzY5Njk2OVwiLFxuICBcImRpbWdyZXlcIjogXCIjNjk2OTY5XCIsXG4gIFwiZG9kZ2VyYmx1ZVwiOiBcIiMxZTkwZmZcIixcbiAgXCJmaXJlYnJpY2tcIjogXCIjYjIyMjIyXCIsXG4gIFwiZmxvcmFsd2hpdGVcIjogXCIjZmZmYWYwXCIsXG4gIFwiZm9yZXN0Z3JlZW5cIjogXCIjMjI4YjIyXCIsXG4gIFwiZnVjaHNpYVwiOiBcIiNmZjAwZmZcIixcbiAgXCJnYWluc2Jvcm9cIjogXCIjZGNkY2RjXCIsXG4gIFwiZ2hvc3R3aGl0ZVwiOiBcIiNmOGY4ZmZcIixcbiAgXCJnb2xkXCI6IFwiI2ZmZDcwMFwiLFxuICBcImdvbGRlbnJvZFwiOiBcIiNkYWE1MjBcIixcbiAgXCJncmF5XCI6IFwiIzgwODA4MFwiLFxuICBcImdyZWVuXCI6IFwiIzAwODAwMFwiLFxuICBcImdyZWVueWVsbG93XCI6IFwiI2FkZmYyZlwiLFxuICBcImdyZXlcIjogXCIjODA4MDgwXCIsXG4gIFwiaG9uZXlkZXdcIjogXCIjZjBmZmYwXCIsXG4gIFwiaG90cGlua1wiOiBcIiNmZjY5YjRcIixcbiAgXCJpbmRpYW5yZWRcIjogXCIjY2Q1YzVjXCIsXG4gIFwiaW5kaWdvXCI6IFwiIzRiMDA4MlwiLFxuICBcIml2b3J5XCI6IFwiI2ZmZmZmMFwiLFxuICBcImtoYWtpXCI6IFwiI2YwZTY4Y1wiLFxuICBcImxhdmVuZGVyXCI6IFwiI2U2ZTZmYVwiLFxuICBcImxhdmVuZGVyYmx1c2hcIjogXCIjZmZmMGY1XCIsXG4gIFwibGF3bmdyZWVuXCI6IFwiIzdjZmMwMFwiLFxuICBcImxlbW9uY2hpZmZvblwiOiBcIiNmZmZhY2RcIixcbiAgXCJsaWdodGJsdWVcIjogXCIjYWRkOGU2XCIsXG4gIFwibGlnaHRjb3JhbFwiOiBcIiNmMDgwODBcIixcbiAgXCJsaWdodGN5YW5cIjogXCIjZTBmZmZmXCIsXG4gIFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIjogXCIjZmFmYWQyXCIsXG4gIFwibGlnaHRncmF5XCI6IFwiI2QzZDNkM1wiLFxuICBcImxpZ2h0Z3JlZW5cIjogXCIjOTBlZTkwXCIsXG4gIFwibGlnaHRncmV5XCI6IFwiI2QzZDNkM1wiLFxuICBcImxpZ2h0cGlua1wiOiBcIiNmZmI2YzFcIixcbiAgXCJsaWdodHNhbG1vblwiOiBcIiNmZmEwN2FcIixcbiAgXCJsaWdodHNlYWdyZWVuXCI6IFwiIzIwYjJhYVwiLFxuICBcImxpZ2h0c2t5Ymx1ZVwiOiBcIiM4N2NlZmFcIixcbiAgXCJsaWdodHNsYXRlZ3JheVwiOiBcIiM3Nzg4OTlcIixcbiAgXCJsaWdodHNsYXRlZ3JleVwiOiBcIiM3Nzg4OTlcIixcbiAgXCJsaWdodHN0ZWVsYmx1ZVwiOiBcIiNiMGM0ZGVcIixcbiAgXCJsaWdodHllbGxvd1wiOiBcIiNmZmZmZTBcIixcbiAgXCJsaW1lXCI6IFwiIzAwZmYwMFwiLFxuICBcImxpbWVncmVlblwiOiBcIiMzMmNkMzJcIixcbiAgXCJsaW5lblwiOiBcIiNmYWYwZTZcIixcbiAgXCJtYWdlbnRhXCI6IFwiI2ZmMDBmZlwiLFxuICBcIm1hcm9vblwiOiBcIiM4MDAwMDBcIixcbiAgXCJtZWRpdW1hcXVhbWFyaW5lXCI6IFwiIzY2Y2RhYVwiLFxuICBcIm1lZGl1bWJsdWVcIjogXCIjMDAwMGNkXCIsXG4gIFwibWVkaXVtb3JjaGlkXCI6IFwiI2JhNTVkM1wiLFxuICBcIm1lZGl1bXB1cnBsZVwiOiBcIiM5MzcwZGJcIixcbiAgXCJtZWRpdW1zZWFncmVlblwiOiBcIiMzY2IzNzFcIixcbiAgXCJtZWRpdW1zbGF0ZWJsdWVcIjogXCIjN2I2OGVlXCIsXG4gIFwibWVkaXVtc3ByaW5nZ3JlZW5cIjogXCIjMDBmYTlhXCIsXG4gIFwibWVkaXVtdHVycXVvaXNlXCI6IFwiIzQ4ZDFjY1wiLFxuICBcIm1lZGl1bXZpb2xldHJlZFwiOiBcIiNjNzE1ODVcIixcbiAgXCJtaWRuaWdodGJsdWVcIjogXCIjMTkxOTcwXCIsXG4gIFwibWludGNyZWFtXCI6IFwiI2Y1ZmZmYVwiLFxuICBcIm1pc3R5cm9zZVwiOiBcIiNmZmU0ZTFcIixcbiAgXCJtb2NjYXNpblwiOiBcIiNmZmU0YjVcIixcbiAgXCJuYXZham93aGl0ZVwiOiBcIiNmZmRlYWRcIixcbiAgXCJuYXZ5XCI6IFwiIzAwMDA4MFwiLFxuICBcIm9sZGxhY2VcIjogXCIjZmRmNWU2XCIsXG4gIFwib2xpdmVcIjogXCIjODA4MDAwXCIsXG4gIFwib2xpdmVkcmFiXCI6IFwiIzZiOGUyM1wiLFxuICBcIm9yYW5nZVwiOiBcIiNmZmE1MDBcIixcbiAgXCJvcmFuZ2VyZWRcIjogXCIjZmY0NTAwXCIsXG4gIFwib3JjaGlkXCI6IFwiI2RhNzBkNlwiLFxuICBcInBhbGVnb2xkZW5yb2RcIjogXCIjZWVlOGFhXCIsXG4gIFwicGFsZWdyZWVuXCI6IFwiIzk4ZmI5OFwiLFxuICBcInBhbGV0dXJxdW9pc2VcIjogXCIjYWZlZWVlXCIsXG4gIFwicGFsZXZpb2xldHJlZFwiOiBcIiNkYjcwOTNcIixcbiAgXCJwYXBheWF3aGlwXCI6IFwiI2ZmZWZkNVwiLFxuICBcInBlYWNocHVmZlwiOiBcIiNmZmRhYjlcIixcbiAgXCJwZXJ1XCI6IFwiI2NkODUzZlwiLFxuICBcInBpbmtcIjogXCIjZmZjMGNiXCIsXG4gIFwicGx1bVwiOiBcIiNkZGEwZGRcIixcbiAgXCJwb3dkZXJibHVlXCI6IFwiI2IwZTBlNlwiLFxuICBcInB1cnBsZVwiOiBcIiM4MDAwODBcIixcbiAgXCJyZWJlY2NhcHVycGxlXCI6IFwiIzY2MzM5OVwiLFxuICBcInJlZFwiOiBcIiNmZjAwMDBcIixcbiAgXCJyb3N5YnJvd25cIjogXCIjYmM4ZjhmXCIsXG4gIFwicm95YWxibHVlXCI6IFwiIzQxNjllMVwiLFxuICBcInNhZGRsZWJyb3duXCI6IFwiIzhiNDUxM1wiLFxuICBcInNhbG1vblwiOiBcIiNmYTgwNzJcIixcbiAgXCJzYW5keWJyb3duXCI6IFwiI2Y0YTQ2MFwiLFxuICBcInNlYWdyZWVuXCI6IFwiIzJlOGI1N1wiLFxuICBcInNlYXNoZWxsXCI6IFwiI2ZmZjVlZVwiLFxuICBcInNpZW5uYVwiOiBcIiNhMDUyMmRcIixcbiAgXCJzaWx2ZXJcIjogXCIjYzBjMGMwXCIsXG4gIFwic2t5Ymx1ZVwiOiBcIiM4N2NlZWJcIixcbiAgXCJzbGF0ZWJsdWVcIjogXCIjNmE1YWNkXCIsXG4gIFwic2xhdGVncmF5XCI6IFwiIzcwODA5MFwiLFxuICBcInNsYXRlZ3JleVwiOiBcIiM3MDgwOTBcIixcbiAgXCJzbm93XCI6IFwiI2ZmZmFmYVwiLFxuICBcInNwcmluZ2dyZWVuXCI6IFwiIzAwZmY3ZlwiLFxuICBcInN0ZWVsYmx1ZVwiOiBcIiM0NjgyYjRcIixcbiAgXCJ0YW5cIjogXCIjZDJiNDhjXCIsXG4gIFwidGVhbFwiOiBcIiMwMDgwODBcIixcbiAgXCJ0aGlzdGxlXCI6IFwiI2Q4YmZkOFwiLFxuICBcInRvbWF0b1wiOiBcIiNmZjYzNDdcIixcbiAgXCJ0dXJxdW9pc2VcIjogXCIjNDBlMGQwXCIsXG4gIFwidmlvbGV0XCI6IFwiI2VlODJlZVwiLFxuICBcIndoZWF0XCI6IFwiI2Y1ZGViM1wiLFxuICBcIndoaXRlXCI6IFwiI2ZmZmZmZlwiLFxuICBcIndoaXRlc21va2VcIjogXCIjZjVmNWY1XCIsXG4gIFwieWVsbG93XCI6IFwiI2ZmZmYwMFwiLFxuICBcInllbGxvd2dyZWVuXCI6IFwiIzlhY2QzMlwiXG59IiwiXG52YXIgbmFtZXMgPSByZXF1aXJlKCcuL2Nzcy1jb2xvci1uYW1lcy5qc29uJyk7XG52YXIgSFNMVXRpbCA9IHJlcXVpcmUoJy4vaHNsJyk7XG52YXIgaGV4VG9SR0JBID0gcmVxdWlyZSgnLi9oZXgtdG8tcmdiYScpO1xudmFyIFJHQkFUb0hleCA9IHJlcXVpcmUoJy4vcmdiYS10by1oZXgnKTtcbnZhciB3cmFwID0gcmVxdWlyZSgnLi93cmFwJyk7XG5cbmZ1bmN0aW9uIHBhcnNlU3R5bGUgKHN0cikge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb2xvciBwYXJzaW5nIG11c3QgYmUgcGVyZm9ybWVkIG9uIGEgc3RyaW5nIHBhcmFtZXRlcicpO1xuICB9XG5cbiAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKHN0ciBpbiBuYW1lcykge1xuICAgIHN0ciA9IG5hbWVzW3N0cl07XG4gIH0gZWxzZSBpZiAoc3RyID09PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgc3RyID0gJyMwMDAwMDAwMCc7XG4gIH1cblxuICB2YXIgcmdiYSwgaHNsYSwgaGV4O1xuICBpZiAoL14jW2EtZjAtOV0rJC8udGVzdChzdHIpKSB7XG4gICAgcmdiYSA9IGhleFRvUkdCQShzdHIpO1xuICAgIGhleCA9IFJHQkFUb0hleChyZ2JhKTtcbiAgICBoc2xhID0gSFNMVXRpbC5SR0JBVG9IU0xBKHJnYmEpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtYXRjaCA9IC9eKCg/OnJnYnxoc2wpYT8pXFxzKlxcKChbXildKilcXCkvLmV4ZWMoc3RyKTtcbiAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdHlwZSA9IG1hdGNoWzFdLnJlcGxhY2UoL2EkLywgJycpO1xuICAgIHZhciBwYXJ0cyA9IG1hdGNoWzJdLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKS5zcGxpdCgvXFxzKixcXHMqLykubWFwKGZ1bmN0aW9uIChuLCBpKSB7XG4gICAgICAvLyBvcGFxdWUgcGFydFxuICAgICAgaWYgKGkgPD0gMikgcmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChuKSB8fCAwKTtcbiAgICAgIC8vIGFscGhhIHBhcnRcbiAgICAgIGVsc2Uge1xuICAgICAgICBuID0gcGFyc2VGbG9hdChuKTtcbiAgICAgICAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCAhaXNGaW5pdGUobikpIG4gPSAxO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBmaWxsIGluIGFscGhhIHdpdGggMS4wIGJ5IGRlZmF1bHRcbiAgICBpZiAodHlwZW9mIHBhcnRzWzNdID09PSAndW5kZWZpbmVkJyB8fCAhaXNGaW5pdGUocGFydHNbM10pKSB7XG4gICAgICBwYXJ0c1szXSA9IDE7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAncmdiJykge1xuICAgICAgaHNsYSA9IEhTTFV0aWwuUkdCQVRvSFNMQShwYXJ0cyk7XG4gICAgICByZ2JhID0gcGFydHM7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnaHNsJykge1xuICAgICAgcmdiYSA9IEhTTFV0aWwuSFNMQVRvUkdCQShwYXJ0cyk7XG4gICAgICBwYXJ0c1swXSA9IHdyYXAocGFydHNbMF0sIDAsIDM2MCk7XG4gICAgICBoc2xhID0gcGFydHM7XG4gICAgfVxuICAgIGhleCA9IFJHQkFUb0hleChyZ2JhKTtcbiAgfVxuXG4gIGlmICghcmdiYSAmJiAhaGV4ICYmICFoc2xhKSByZXR1cm4gbnVsbDtcblxuICB2YXIgcmV0ID0ge1xuICAgIGhleDogaGV4LFxuICAgIGFscGhhOiByZ2JhWzNdLFxuICAgIHJnYjogcmdiYS5zbGljZSgwLCAzKSxcbiAgICByZ2JhOiByZ2JhLFxuICAgIGhzbDogaHNsYS5zbGljZSgwLCAzKSxcbiAgICBoc2xhOiBoc2xhXG4gIH07XG5cbiAgcmV0dXJuIHJldDtcbn1cblxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBwYXJzZUNvbG9yO1xuZnVuY3Rpb24gcGFyc2VDb2xvciAoY29sb3IpIHtcbiAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGFyc2VTdHlsZShjb2xvcik7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjb2xvcikgJiYgY29sb3IubGVuZ3RoID49IDMpIHtcbiAgICB2YXIgcmdiU3RyID0gcmdiU3R5bGUoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgY29sb3JbM10pO1xuICAgIHJldHVybiBwYXJzZVN0eWxlKHJnYlN0cik7XG4gIH0gZWxzZSBpZiAoY29sb3IgJiYgdHlwZW9mIGNvbG9yID09PSAnb2JqZWN0Jykge1xuICAgIHZhciBzdHI7XG4gICAgaWYgKGNvbG9yLmhleCkgc3RyID0gY29sb3IuaGV4O1xuICAgIGVsc2UgaWYgKGNvbG9yLnJnYmEpIHN0ciA9IHJnYlN0eWxlKGNvbG9yLnJnYmFbMF0sIGNvbG9yLnJnYmFbMV0sIGNvbG9yLnJnYmFbMl0sIGNvbG9yLnJnYmFbM10pO1xuICAgIGVsc2UgaWYgKGNvbG9yLmhzbGEpIHN0ciA9IGhzbFN0eWxlKGNvbG9yLmhzbGFbMF0sIGNvbG9yLmhzbGFbMV0sIGNvbG9yLmhzbGFbMl0sIGNvbG9yLmhzbGFbM10pO1xuICAgIGVsc2UgaWYgKGNvbG9yLnJnYikgc3RyID0gcmdiU3R5bGUoY29sb3IucmdiWzBdLCBjb2xvci5yZ2JbMV0sIGNvbG9yLnJnYlsyXSk7XG4gICAgZWxzZSBpZiAoY29sb3IuaHNsKSBzdHIgPSBoc2xTdHlsZShjb2xvci5oc2xbMF0sIGNvbG9yLmhzbFsxXSwgY29sb3IuaHNsWzJdKTtcbiAgICBpZiAoc3RyKSByZXR1cm4gcGFyc2VTdHlsZShzdHIpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5zdHlsZSA9IHN0eWxlO1xuZnVuY3Rpb24gc3R5bGUgKGNvbG9yKSB7XG4gIHZhciByZXN1bHQgPSBtb2R1bGUuZXhwb3J0cy5wYXJzZShjb2xvcik7XG4gIGlmIChyZXN1bHQpIHtcbiAgICB2YXIgcmdiYSA9IHJlc3VsdC5yZ2JhO1xuICAgIHJldHVybiByZ2JTdHlsZShyZ2JhWzBdLCByZ2JhWzFdLCByZ2JhWzJdLCByZ2JhWzNdKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdiU3R5bGUgKHIsIGcsIGIsIGEpIHtcbiAgciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChyKSkpO1xuICBnID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKGcpKSk7XG4gIGIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoYikpKTtcbiAgaWYgKGEgPT09IDEgfHwgIWlzRmluaXRlKGEpIHx8IHR5cGVvZiBhID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAncmdiKCcgKyBbIHIsIGcsIGIgXS5qb2luKCcsICcpICsgJyknO1xuICB9IGVsc2Uge1xuICAgIGEgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhKSk7XG4gICAgcmV0dXJuICdyZ2JhKCcgKyBbIHIsIGcsIGIsIGEgXS5qb2luKCcsICcpICsgJyknO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhzbFN0eWxlIChoLCBzLCBsLCBhKSB7XG4gIGggPSB3cmFwKGgsIDAsIDM2MCk7XG4gIGggPSBNYXRoLm1heCgwLCBNYXRoLm1pbigzNjAsIE1hdGgucm91bmQoaCkpKTtcbiAgcyA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChzKSkpO1xuICBsID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKGwpKSk7XG4gIGlmIChhID09PSAxIHx8ICFpc0Zpbml0ZShhKSB8fCB0eXBlb2YgYSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gJ2hzbCgnICsgWyBoLCBzLCBsIF0uam9pbignLCAnKSArICcpJztcbiAgfSBlbHNlIHtcbiAgICBhID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYSkpO1xuICAgIHJldHVybiAnaHNsYSgnICsgWyBoLCBzLCBsLCBhIF0uam9pbignLCAnKSArICcpJztcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBoZXhUb1JHQkE7XG5mdW5jdGlvbiBoZXhUb1JHQkEgKHN0cikge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIZXggY29kZSBwYXJzaW5nIG11c3QgYmUgcGVyZm9ybWVkIG9uIGEgc3RyaW5nIHBhcmFtZXRlcicpO1xuICB9XG5cbiAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKCEvXiNbYS1mMC05XSskLy50ZXN0KHN0cikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBoZXggPSBzdHIucmVwbGFjZSgvXiMvLCAnJyk7XG4gIHZhciBhbHBoYSA9IDE7XG5cbiAgaWYgKGhleC5sZW5ndGggPT09IDgpIHtcbiAgICBhbHBoYSA9IHBhcnNlSW50KGhleC5zbGljZSg2LCA4KSwgMTYpIC8gMjU1O1xuICAgIGhleCA9IGhleC5zbGljZSgwLCA2KTtcbiAgfVxuXG4gIGlmIChoZXgubGVuZ3RoID09PSA0KSB7XG4gICAgYWxwaGEgPSBwYXJzZUludChoZXguc2xpY2UoMywgNCkucmVwZWF0KDIpLCAxNikgLyAyNTU7XG4gICAgaGV4ID0gaGV4LnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgaWYgKGhleC5sZW5ndGggPT09IDMpIHtcbiAgICBoZXggPSBoZXhbMF0gKyBoZXhbMF0gKyBoZXhbMV0gKyBoZXhbMV0gKyBoZXhbMl0gKyBoZXhbMl07XG4gIH1cblxuICB2YXIgbnVtID0gcGFyc2VJbnQoaGV4LCAxNik7XG4gIHZhciByZWQgPSBudW0gPj4gMTY7XG4gIHZhciBncmVlbiA9IChudW0gPj4gOCkgJiAyNTU7XG4gIHZhciBibHVlID0gbnVtICYgMjU1O1xuXG4gIHJldHVybiBbIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhIF07XG59XG4iLCJ2YXIgZmxvYXRIU0wyUkdCID0gcmVxdWlyZSgnZmxvYXQtaHNsMnJnYicpO1xudmFyIGZsb2F0UkdCMkhTTCA9IHJlcXVpcmUoJ2Zsb2F0LXJnYjJoc2wnKTtcbnZhciB3cmFwID0gcmVxdWlyZSgnLi93cmFwJyk7XG5cbm1vZHVsZS5leHBvcnRzLlJHQkFUb0hTTEEgPSBSR0JBVG9IU0xBO1xuZnVuY3Rpb24gUkdCQVRvSFNMQSAocmdiYSkge1xuICB2YXIgZmxvYXRIU0wgPSBmbG9hdFJHQjJIU0woWyByZ2JhWzBdIC8gMjU1LCByZ2JhWzFdIC8gMjU1LCByZ2JhWzJdIC8gMjU1IF0pO1xuICByZXR1cm4gW1xuICAgIE1hdGgubWF4KDAsIE1hdGgubWluKDM2MCwgTWF0aC5yb3VuZChmbG9hdEhTTFswXSAqIDM2MCkpKSxcbiAgICBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQoZmxvYXRIU0xbMV0gKiAxMDApKSksXG4gICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKGZsb2F0SFNMWzJdICogMTAwKSkpLFxuICAgIHJnYmFbM11cbiAgXTtcbn1cblxubW9kdWxlLmV4cG9ydHMuSFNMQVRvUkdCQSA9IEhTTEFUb1JHQkE7XG5mdW5jdGlvbiBIU0xBVG9SR0JBIChoc2xhKSB7XG4gIHZhciBodWUgPSB3cmFwKGhzbGFbMF0sIDAsIDM2MCk7XG4gIHZhciBmbG9hdFJHQiA9IGZsb2F0SFNMMlJHQihbIGh1ZSAvIDM2MCwgaHNsYVsxXSAvIDEwMCwgaHNsYVsyXSAvIDEwMCBdKTtcbiAgcmV0dXJuIFtcbiAgICBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoZmxvYXRSR0JbMF0gKiAyNTUpKSksXG4gICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKGZsb2F0UkdCWzFdICogMjU1KSkpLFxuICAgIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChmbG9hdFJHQlsyXSAqIDI1NSkpKSxcbiAgICBoc2xhWzNdXG4gIF07XG59XG4iLCIvLyBJIGJlbGlldmUgdGhpcyB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IFRheWxvciBCYWxkd2luIChAdGF5bG9yYmFsZHdpbiAvIEByb2x5YXRtYXgpXG4vLyBJZiB0aGF0IGlzIG1pc2NyZWRpdGVkIHBsZWFzZSBvcGVuIGFuIGlzc3VlLlxuXG52YXIgY2xvbmUgPSByZXF1aXJlKCdjbG9uZScpO1xudmFyIHNxdWFyZWREaXN0YW5jZSA9IHJlcXVpcmUoJy4vdmVjMicpLnNxdWFyZWREaXN0YW5jZTtcblxubW9kdWxlLmV4cG9ydHMuc29ydCA9IGZ1bmN0aW9uIHNvcnQgKHBhdGhzKSB7XG4gIHBhdGhzID0gY2xvbmUocGF0aHMpO1xuXG4gIGlmICghcGF0aHMubGVuZ3RoKSByZXR1cm4gcGF0aHM7XG5cbiAgdmFyIG5ld1BhdGhzID0gW107XG4gIG5ld1BhdGhzLnB1c2gocGF0aHNbMF0pO1xuXG4gIHBhdGhzID0gcGF0aHMuc2xpY2UoMSk7XG5cbiAgd2hpbGUgKHBhdGhzLmxlbmd0aCkge1xuICAgIHZhciBsYXN0UGF0aCA9IG5ld1BhdGhzW25ld1BhdGhzLmxlbmd0aCAtIDFdO1xuICAgIHZhciBjdXJQdCA9IGxhc3RQYXRoW2xhc3RQYXRoLmxlbmd0aCAtIDFdO1xuICAgIHZhciByZXN1bHQgPSBwYXRocy5yZWR1Y2UoZnVuY3Rpb24gKGNsb3Nlc3QsIHBhdGgsIGkpIHtcbiAgICAgIHZhciBmaXJzdFB0ID0gcGF0aFswXTtcbiAgICAgIHZhciBsYXN0UHQgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgICB2YXIgZGlzdGFuY2VUb0ZpcnN0ID0gc3F1YXJlZERpc3RhbmNlKGN1clB0LCBmaXJzdFB0KTtcbiAgICAgIHZhciBkaXN0YW5jZVRvTGFzdCA9IHNxdWFyZWREaXN0YW5jZShjdXJQdCwgbGFzdFB0KTtcbiAgICAgIGlmICghY2xvc2VzdCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICBkaXN0YW5jZTogTWF0aC5taW4oZGlzdGFuY2VUb0ZpcnN0LCBkaXN0YW5jZVRvTGFzdCksXG4gICAgICAgICAgcmV2ZXJzZTogZGlzdGFuY2VUb0xhc3QgPCBkaXN0YW5jZVRvRmlyc3RcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXN0YW5jZVRvRmlyc3QgPCBjbG9zZXN0LmRpc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWR4OiBpLFxuICAgICAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZVRvRmlyc3QsXG4gICAgICAgICAgcmV2ZXJzZTogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXN0YW5jZVRvTGFzdCA8IGNsb3Nlc3QuZGlzdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZHg6IGksXG4gICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlVG9MYXN0LFxuICAgICAgICAgIHJldmVyc2U6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbG9zZXN0O1xuICAgIH0sIG51bGwpO1xuICAgIHZhciBpZHggPSByZXN1bHQuaWR4O1xuICAgIHZhciByZXZlcnNlID0gcmVzdWx0LnJldmVyc2U7XG4gICAgdmFyIGNsb3Nlc3RQYXRoID0gcGF0aHMuc3BsaWNlKGlkeCwgMSlbMF0uc2xpY2UoKTtcbiAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgY2xvc2VzdFBhdGgucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBuZXdQYXRocy5wdXNoKGNsb3Nlc3RQYXRoKTtcbiAgfVxuICByZXR1cm4gbmV3UGF0aHM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5tZXJnZSA9IGZ1bmN0aW9uIG1lcmdlIChwYXRocywgbWVyZ2VUaHJlaHNvbGQpIHtcbiAgbWVyZ2VUaHJlaHNvbGQgPSBtZXJnZVRocmVoc29sZCAhPSBudWxsID8gbWVyZ2VUaHJlaHNvbGQgOiAwLjA1O1xuXG4gIHZhciBtZXJnZVRocmVoc29sZFNxID0gbWVyZ2VUaHJlaHNvbGQgKiBtZXJnZVRocmVoc29sZDtcbiAgcGF0aHMgPSBjbG9uZShwYXRocyk7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbGFzdFBhdGggPSBwYXRoc1tpIC0gMV07XG4gICAgdmFyIGN1clBhdGggPSBwYXRoc1tpXTtcbiAgICBpZiAoc3F1YXJlZERpc3RhbmNlKGN1clBhdGhbMF0sIGxhc3RQYXRoW2xhc3RQYXRoLmxlbmd0aCAtIDFdKSA8IG1lcmdlVGhyZWhzb2xkU3EpIHtcbiAgICAgIHBhdGhzID0gbWVyZ2VQYXRocyhwYXRocywgaSAtIDEsIGkpO1xuICAgICAgaSAtPSAxOyAvLyBub3cgdGhhdCB3ZSd2ZSBtZXJnZWQsIHZhcidzIGNvcnJlY3QgaSBmb3IgdGhlIG5leHQgcm91bmRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhdGhzO1xufTtcblxuZnVuY3Rpb24gbWVyZ2VQYXRocyAocGF0aHMsIHBhdGgxSWR4LCBwYXRoMklkeCkge1xuICAvLyB0aGlzIHdpbGwgaGVscCB1cyBrZWVwIHRoaW5ncyBpbiBvcmRlciB3aGVuIHdlIGRvIHRoZSBzcGxpY2luZ1xuICB2YXIgbWluSWR4ID0gTWF0aC5taW4ocGF0aDFJZHgsIHBhdGgySWR4KTtcbiAgdmFyIG1heElkeCA9IE1hdGgubWF4KHBhdGgxSWR4LCBwYXRoMklkeCk7XG4gIHBhdGhzID0gcGF0aHMuc2xpY2UoKTtcbiAgdmFyIHBhdGgxID0gcGF0aHNbbWluSWR4XTtcbiAgdmFyIHBhdGgyID0gcGF0aHNbbWF4SWR4XTtcbiAgdmFyIG1lcmdlZFBhdGggPSBwYXRoMS5jb25jYXQocGF0aDIuc2xpY2UoMSkpO1xuICBwYXRocy5zcGxpY2UobWF4SWR4LCAxKTtcbiAgcGF0aHMuc3BsaWNlKG1pbklkeCwgMSwgbWVyZ2VkUGF0aCk7XG4gIHJldHVybiBwYXRocztcbn1cblxuLy8gdGhpcyBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBwYXRocyAtIGZyb20gdGhlIGVuZCBvZiBwYXRoIDEgdG8gdGhlIHN0YXJ0IG9mIHBhdGggMlxuLy8gZnVuY3Rpb24gZ2V0VHJhdmVsaW5nRGlzdGFuY2UgKHBhdGhzKSB7XG4vLyAgIHZhciB0b3RhbCA9IDA7XG4vLyAgIHZhciBsYXN0UHQgPSBwYXRoc1swXVtwYXRoc1swXS5sZW5ndGggLSAxXTtcbi8vICAgZm9yICh2YXIgcGF0aCBvZiBwYXRocy5zbGljZSgxKSkge1xuLy8gICAgIHZhciBzcXVhcmVkRGlzdCA9IHNxdWFyZWREaXN0YW5jZShsYXN0UHQsIHBhdGhbMF0pO1xuLy8gICAgIHRvdGFsICs9IE1hdGguc3FydChzcXVhcmVkRGlzdCk7XG4vLyAgICAgbGFzdFB0ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuLy8gICB9XG4vLyAgIHJldHVybiB0b3RhbDtcbi8vIH1cbiIsIi8vIEV4dHJhY3RlZCBmcm9tIEB0bWN3IC8gd2NhZy1jb250cmFzdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RtY3cvcmVsYXRpdmUtbHVtaW5hbmNlL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG5cbi8vICMgUmVsYXRpdmUgbHVtaW5hbmNlXG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MdW1pbmFuY2VfKHJlbGF0aXZlKVxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTHVtaW5vc2l0eV9mdW5jdGlvblxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVjLl83MDkjTHVtYV9jb2VmZmljaWVudHNcblxuLy8gcmVkLCBncmVlbiwgYW5kIGJsdWUgY29lZmZpY2llbnRzXG52YXIgcmMgPSAwLjIxMjY7XG52YXIgZ2MgPSAwLjcxNTI7XG52YXIgYmMgPSAwLjA3MjI7XG4vLyBsb3ctZ2FtbWEgYWRqdXN0IGNvZWZmaWNpZW50XG52YXIgbG93YyA9IDEgLyAxMi45MjtcblxuZnVuY3Rpb24gYWRqdXN0R2FtbWEgKGEpIHtcbiAgcmV0dXJuIE1hdGgucG93KChhICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVsYXRpdmVMdW1pbmFuY2U7XG5mdW5jdGlvbiByZWxhdGl2ZUx1bWluYW5jZSAocmdiKSB7XG4gIHZhciByc3JnYiA9IHJnYlswXSAvIDI1NTtcbiAgdmFyIGdzcmdiID0gcmdiWzFdIC8gMjU1O1xuICB2YXIgYnNyZ2IgPSByZ2JbMl0gLyAyNTU7XG4gIHZhciByID0gcnNyZ2IgPD0gMC4wMzkyOCA/IHJzcmdiICogbG93YyA6IGFkanVzdEdhbW1hKHJzcmdiKTtcbiAgdmFyIGcgPSBnc3JnYiA8PSAwLjAzOTI4ID8gZ3NyZ2IgKiBsb3djIDogYWRqdXN0R2FtbWEoZ3NyZ2IpO1xuICB2YXIgYiA9IGJzcmdiIDw9IDAuMDM5MjggPyBic3JnYiAqIGxvd2MgOiBhZGp1c3RHYW1tYShic3JnYik7XG4gIHJldHVybiByICogcmMgKyBnICogZ2MgKyBiICogYmM7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJnYmFUb0hleDtcbmZ1bmN0aW9uIHJnYmFUb0hleCAocmdiYSkge1xuICBpZiAoIXJnYmEgfHwgIUFycmF5LmlzQXJyYXkocmdiYSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0IHNwZWNpZnkgYW4gYXJyYXkgdG8gY29udmVydCBpbnRvIGEgaGV4IGNvZGUnKTtcbiAgfVxuXG4gIHZhciByID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHJnYmFbMF0gfHwgMCkpKTtcbiAgdmFyIGcgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQocmdiYVsxXSB8fCAwKSkpO1xuICB2YXIgYiA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChyZ2JhWzJdIHx8IDApKSk7XG5cbiAgdmFyIGFscGhhID0gcmdiYVszXTtcbiAgaWYgKHR5cGVvZiBhbHBoYSA9PT0gJ3VuZGVmaW5lZCcgfHwgIWlzRmluaXRlKGFscGhhKSkge1xuICAgIGFscGhhID0gMTtcbiAgfVxuICB2YXIgYSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZChhbHBoYSAqIDI1NSkpKTtcbiAgdmFyIGFscGhhUGFyYW0gPSBhID09PSAyNTUgPyAnJyA6IChhIHwgMSA8PCA4KS50b1N0cmluZygxNikuc2xpY2UoMSk7XG4gIHZhciByZXN1bHQgPSAoKGIgfCBnIDw8IDggfCByIDw8IDE2KSB8IDEgPDwgMjQpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSArIGFscGhhUGFyYW07XG4gIHJldHVybiAnIycgKyByZXN1bHQ7XG59XG4iLCJtb2R1bGUuZXhwb3J0cy5zcXVhcmVkRGlzdGFuY2UgPSBzcXVhcmVkRGlzdGFuY2U7XG5mdW5jdGlvbiBzcXVhcmVkRGlzdGFuY2UgKHB0MSwgcHQyKSB7XG4gIHZhciBkeCA9IHB0MlswXSAtIHB0MVswXTtcbiAgdmFyIGR5ID0gcHQyWzFdIC0gcHQxWzFdO1xuICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdyYXA7XG5mdW5jdGlvbiB3cmFwICh2YWx1ZSwgZnJvbSwgdG8pIHtcbiAgaWYgKHR5cGVvZiBmcm9tICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgdG8gIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTXVzdCBzcGVjaWZ5IFwidG9cIiBhbmQgXCJmcm9tXCIgYXJndW1lbnRzIGFzIG51bWJlcnMnKTtcbiAgfVxuICAvLyBhbGdvcml0aG0gZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81ODUyNjI4LzU5OTg4NFxuICBpZiAoZnJvbSA+IHRvKSB7XG4gICAgdmFyIHQgPSBmcm9tO1xuICAgIGZyb20gPSB0bztcbiAgICB0byA9IHQ7XG4gIH1cbiAgdmFyIGN5Y2xlID0gdG8gLSBmcm9tO1xuICBpZiAoY3ljbGUgPT09IDApIHtcbiAgICByZXR1cm4gdG87XG4gIH1cbiAgcmV0dXJuIHZhbHVlIC0gY3ljbGUgKiBNYXRoLmZsb29yKCh2YWx1ZSAtIGZyb20pIC8gY3ljbGUpO1xufVxuIiwidmFyIGRlZmluZWQgPSByZXF1aXJlKCdkZWZpbmVkJyk7XG52YXIgd3JhcCA9IHJlcXVpcmUoJy4vbGliL3dyYXAnKTtcbnZhciBFUFNJTE9OID0gTnVtYmVyLkVQU0lMT047XG5cbmZ1bmN0aW9uIGNsYW1wICh2YWx1ZSwgbWluLCBtYXgpIHtcbiAgcmV0dXJuIG1pbiA8IG1heFxuICAgID8gKHZhbHVlIDwgbWluID8gbWluIDogdmFsdWUgPiBtYXggPyBtYXggOiB2YWx1ZSlcbiAgICA6ICh2YWx1ZSA8IG1heCA/IG1heCA6IHZhbHVlID4gbWluID8gbWluIDogdmFsdWUpO1xufVxuXG5mdW5jdGlvbiBjbGFtcDAxICh2KSB7XG4gIHJldHVybiBjbGFtcCh2LCAwLCAxKTtcbn1cblxuZnVuY3Rpb24gbGVycCAobWluLCBtYXgsIHQpIHtcbiAgcmV0dXJuIG1pbiAqICgxIC0gdCkgKyBtYXggKiB0O1xufVxuXG5mdW5jdGlvbiBpbnZlcnNlTGVycCAobWluLCBtYXgsIHQpIHtcbiAgaWYgKE1hdGguYWJzKG1pbiAtIG1heCkgPCBFUFNJTE9OKSByZXR1cm4gMDtcbiAgZWxzZSByZXR1cm4gKHQgLSBtaW4pIC8gKG1heCAtIG1pbik7XG59XG5cbmZ1bmN0aW9uIHNtb290aHN0ZXAgKG1pbiwgbWF4LCB0KSB7XG4gIHZhciB4ID0gY2xhbXAoaW52ZXJzZUxlcnAobWluLCBtYXgsIHQpLCAwLCAxKTtcbiAgcmV0dXJuIHggKiB4ICogKDMgLSAyICogeCk7XG59XG5cbmZ1bmN0aW9uIHRvRmluaXRlIChuLCBkZWZhdWx0VmFsdWUpIHtcbiAgZGVmYXVsdFZhbHVlID0gZGVmaW5lZChkZWZhdWx0VmFsdWUsIDApO1xuICByZXR1cm4gdHlwZW9mIG4gPT09ICdudW1iZXInICYmIGlzRmluaXRlKG4pID8gbiA6IGRlZmF1bHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kVmVjdG9yIChkaW1zKSB7XG4gIGlmICh0eXBlb2YgZGltcyAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGRpbXMgYXJndW1lbnQnKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChwLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBkZWZhdWx0VmFsdWUgPSBkZWZpbmVkKGRlZmF1bHRWYWx1ZSwgMCk7XG4gICAgdmFyIHNjYWxhcjtcbiAgICBpZiAocCA9PSBudWxsKSB7XG4gICAgICAvLyBObyB2ZWN0b3IsIGNyZWF0ZSBhIGRlZmF1bHQgb25lXG4gICAgICBzY2FsYXIgPSBkZWZhdWx0VmFsdWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcCA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUocCkpIHtcbiAgICAgIC8vIEV4cGFuZCBzaW5nbGUgY2hhbm5lbCB0byBtdWx0aXBsZSB2ZWN0b3JcbiAgICAgIHNjYWxhciA9IHA7XG4gICAgfVxuXG4gICAgdmFyIG91dCA9IFtdO1xuICAgIHZhciBpO1xuICAgIGlmIChzY2FsYXIgPT0gbnVsbCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGRpbXM7IGkrKykge1xuICAgICAgICBvdXRbaV0gPSB0b0Zpbml0ZShwW2ldLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZGltczsgaSsrKSB7XG4gICAgICAgIG91dFtpXSA9IHNjYWxhcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbGVycEFycmF5IChtaW4sIG1heCwgdCwgb3V0KSB7XG4gIG91dCA9IG91dCB8fCBbXTtcbiAgaWYgKG1pbi5sZW5ndGggIT09IG1heC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaW4gYW5kIG1heCBhcnJheSBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1pbi5sZW5ndGg7IGkrKykge1xuICAgIG91dFtpXSA9IGxlcnAobWluW2ldLCBtYXhbaV0sIHQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIG5ld0FycmF5IChuLCBpbml0aWFsVmFsdWUpIHtcbiAgbiA9IGRlZmluZWQobiwgMCk7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG4gYXJndW1lbnQgdG8gYmUgYSBudW1iZXInKTtcbiAgdmFyIG91dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgb3V0LnB1c2goaW5pdGlhbFZhbHVlKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gbGluc3BhY2UgKG4sIG9wdHMpIHtcbiAgbiA9IGRlZmluZWQobiwgMCk7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG4gYXJndW1lbnQgdG8gYmUgYSBudW1iZXInKTtcbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgb3B0cyA9IHsgZW5kcG9pbnQ6IHRydWUgfTtcbiAgfVxuICB2YXIgb2Zmc2V0ID0gZGVmaW5lZChvcHRzLm9mZnNldCwgMCk7XG4gIGlmIChvcHRzLmVuZHBvaW50KSB7XG4gICAgcmV0dXJuIG5ld0FycmF5KG4pLm1hcChmdW5jdGlvbiAoXywgaSkge1xuICAgICAgcmV0dXJuIG4gPD0gMSA/IDAgOiAoKGkgKyBvZmZzZXQpIC8gKG4gLSAxKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ld0FycmF5KG4pLm1hcChmdW5jdGlvbiAoXywgaSkge1xuICAgICAgcmV0dXJuIChpICsgb2Zmc2V0KSAvIG47XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVycEZyYW1lcyAodmFsdWVzLCB0LCBvdXQpIHtcbiAgdCA9IGNsYW1wKHQsIDAsIDEpO1xuXG4gIHZhciBsZW4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgdmFyIHdob2xlID0gdCAqIGxlbjtcbiAgdmFyIGZyYW1lID0gTWF0aC5mbG9vcih3aG9sZSk7XG4gIHZhciBmcmFjdCA9IHdob2xlIC0gZnJhbWU7XG5cbiAgdmFyIG5leHRGcmFtZSA9IE1hdGgubWluKGZyYW1lICsgMSwgbGVuKTtcbiAgdmFyIGEgPSB2YWx1ZXNbZnJhbWUgJSB2YWx1ZXMubGVuZ3RoXTtcbiAgdmFyIGIgPSB2YWx1ZXNbbmV4dEZyYW1lICUgdmFsdWVzLmxlbmd0aF07XG4gIGlmICh0eXBlb2YgYSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGIgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGxlcnAoYSwgYiwgZnJhY3QpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKSkge1xuICAgIHJldHVybiBsZXJwQXJyYXkoYSwgYiwgZnJhY3QsIG91dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWlzbWF0Y2ggaW4gdmFsdWUgdHlwZSBvZiB0d28gYXJyYXkgZWxlbWVudHM6ICcgKyBmcmFtZSArICcgYW5kICcgKyBuZXh0RnJhbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vZCAoYSwgYikge1xuICByZXR1cm4gKChhICUgYikgKyBiKSAlIGI7XG59XG5cbmZ1bmN0aW9uIGRlZ1RvUmFkIChuKSB7XG4gIHJldHVybiBuICogTWF0aC5QSSAvIDE4MDtcbn1cblxuZnVuY3Rpb24gcmFkVG9EZWcgKG4pIHtcbiAgcmV0dXJuIG4gKiAxODAgLyBNYXRoLlBJO1xufVxuXG5mdW5jdGlvbiBmcmFjdCAobikge1xuICByZXR1cm4gbiAtIE1hdGguZmxvb3Iobik7XG59XG5cbmZ1bmN0aW9uIHNpZ24gKG4pIHtcbiAgaWYgKG4gPiAwKSByZXR1cm4gMTtcbiAgZWxzZSBpZiAobiA8IDApIHJldHVybiAtMTtcbiAgZWxzZSByZXR1cm4gMDtcbn1cblxuLy8gU3BlY2lmaWMgZnVuY3Rpb24gZnJvbSBVbml0eSAvIG9mTWF0aCwgbm90IHN1cmUgaXRzIG5lZWRlZD9cbi8vIGZ1bmN0aW9uIGxlcnBXcmFwIChhLCBiLCB0LCBtaW4sIG1heCkge1xuLy8gICByZXR1cm4gd3JhcChhICsgd3JhcChiIC0gYSwgbWluLCBtYXgpICogdCwgbWluLCBtYXgpXG4vLyB9XG5cbmZ1bmN0aW9uIHBpbmdQb25nICh0LCBsZW5ndGgpIHtcbiAgdCA9IG1vZCh0LCBsZW5ndGggKiAyKTtcbiAgcmV0dXJuIGxlbmd0aCAtIE1hdGguYWJzKHQgLSBsZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBkYW1wIChhLCBiLCBsYW1iZGEsIGR0KSB7XG4gIHJldHVybiBsZXJwKGEsIGIsIDEgLSBNYXRoLmV4cCgtbGFtYmRhICogZHQpKTtcbn1cblxuZnVuY3Rpb24gZGFtcEFycmF5IChhLCBiLCBsYW1iZGEsIGR0LCBvdXQpIHtcbiAgb3V0ID0gb3V0IHx8IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRbaV0gPSBkYW1wKGFbaV0sIGJbaV0sIGxhbWJkYSwgZHQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIG1hcFJhbmdlICh2YWx1ZSwgaW5wdXRNaW4sIGlucHV0TWF4LCBvdXRwdXRNaW4sIG91dHB1dE1heCwgY2xhbXApIHtcbiAgLy8gUmVmZXJlbmNlOlxuICAvLyBodHRwczovL29wZW5mcmFtZXdvcmtzLmNjL2RvY3VtZW50YXRpb24vbWF0aC9vZk1hdGgvXG4gIGlmIChNYXRoLmFicyhpbnB1dE1pbiAtIGlucHV0TWF4KSA8IEVQU0lMT04pIHtcbiAgICByZXR1cm4gb3V0cHV0TWluO1xuICB9IGVsc2Uge1xuICAgIHZhciBvdXRWYWwgPSAoKHZhbHVlIC0gaW5wdXRNaW4pIC8gKGlucHV0TWF4IC0gaW5wdXRNaW4pICogKG91dHB1dE1heCAtIG91dHB1dE1pbikgKyBvdXRwdXRNaW4pO1xuICAgIGlmIChjbGFtcCkge1xuICAgICAgaWYgKG91dHB1dE1heCA8IG91dHB1dE1pbikge1xuICAgICAgICBpZiAob3V0VmFsIDwgb3V0cHV0TWF4KSBvdXRWYWwgPSBvdXRwdXRNYXg7XG4gICAgICAgIGVsc2UgaWYgKG91dFZhbCA+IG91dHB1dE1pbikgb3V0VmFsID0gb3V0cHV0TWluO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG91dFZhbCA+IG91dHB1dE1heCkgb3V0VmFsID0gb3V0cHV0TWF4O1xuICAgICAgICBlbHNlIGlmIChvdXRWYWwgPCBvdXRwdXRNaW4pIG91dFZhbCA9IG91dHB1dE1pbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dFZhbDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbW9kOiBtb2QsXG4gIGZyYWN0OiBmcmFjdCxcbiAgc2lnbjogc2lnbixcbiAgZGVnVG9SYWQ6IGRlZ1RvUmFkLFxuICByYWRUb0RlZzogcmFkVG9EZWcsXG4gIHdyYXA6IHdyYXAsXG4gIHBpbmdQb25nOiBwaW5nUG9uZyxcbiAgbGluc3BhY2U6IGxpbnNwYWNlLFxuICBsZXJwOiBsZXJwLFxuICBsZXJwQXJyYXk6IGxlcnBBcnJheSxcbiAgaW52ZXJzZUxlcnA6IGludmVyc2VMZXJwLFxuICBsZXJwRnJhbWVzOiBsZXJwRnJhbWVzLFxuICBjbGFtcDogY2xhbXAsXG4gIGNsYW1wMDE6IGNsYW1wMDEsXG4gIHNtb290aHN0ZXA6IHNtb290aHN0ZXAsXG4gIGRhbXA6IGRhbXAsXG4gIGRhbXBBcnJheTogZGFtcEFycmF5LFxuICBtYXBSYW5nZTogbWFwUmFuZ2UsXG4gIGV4cGFuZDJEOiBleHBhbmRWZWN0b3IoMiksXG4gIGV4cGFuZDNEOiBleHBhbmRWZWN0b3IoMyksXG4gIGV4cGFuZDREOiBleHBhbmRWZWN0b3IoNClcbn07XG4iLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciBjb252ZXJ0ID0gcmVxdWlyZSgnY29udmVydC1sZW5ndGgnKTtcbnZhciBkMyA9IHJlcXVpcmUoJ2QzLXBhdGgnKTtcbnZhciBzdmdQYXRoQ29udG91cnMgPSByZXF1aXJlKCdzdmctcGF0aC1jb250b3VycycpO1xudmFyIHN2Z1BhdGhQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlLXN2Zy1wYXRoJyk7XG52YXIgc3ZnUGF0aEFicyA9IHJlcXVpcmUoJ2Ficy1zdmctcGF0aCcpO1xudmFyIHN2Z1BhdGhBcmNzID0gcmVxdWlyZSgnbm9ybWFsaXplLXN2Zy1wYXRoJyk7XG52YXIgb3B0aW1pemVyID0gcmVxdWlyZSgnLi9saWIvb3B0aW1pemUtcGVucGxvdC1wYXRocycpO1xudmFyIGdlb21ldHJ5ID0gcmVxdWlyZSgnLi9nZW9tZXRyeScpO1xuXG52YXIgREVGQVVMVF9QRU5fVEhJQ0tORVNTID0gMC4wMztcbnZhciBERUZBVUxUX1BFTl9USElDS05FU1NfVU5JVCA9ICdjbSc7XG52YXIgREVGQVVMVF9QSVhFTFNfUEVSX0lOQ0ggPSA5MDtcblxuLy8gQSBQYXRoIGhlbHBlciBmb3IgYXJjcywgY3VydmVzIGFuZCBsaW5lVG8gY29tbWFuZHNcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZVBhdGggPSBjcmVhdGVQYXRoO1xuZnVuY3Rpb24gY3JlYXRlUGF0aCAoZm4pIHtcbiAgdmFyIHBhdGggPSBkMy5wYXRoKCk7XG4gIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIGZuKHBhdGgpO1xuICBwYXRoLmxpbmVUbyA9IHdyYXAocGF0aC5saW5lVG8pO1xuICBwYXRoLnF1YWRyYXRpY0N1cnZlVG8gPSB3cmFwKHBhdGgucXVhZHJhdGljQ3VydmVUbyk7XG4gIHBhdGguYmV6aWVyQ3VydmVUbyA9IHdyYXAocGF0aC5iZXppZXJDdXJ2ZVRvKTtcbiAgcmV0dXJuIHBhdGg7XG5cbiAgLy8gUGF0Y2ggYSBidWcgaW4gZDMtcGF0aCB0aGF0IGRvZXNuJ3QgaGFuZGxlXG4gIC8vIGxpbmVUbyBhbmQgc28gb24gd2l0aG91dCBhbiBpbml0aWFsIG1vdmVUb1xuICBmdW5jdGlvbiB3cmFwIChmbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICBpZiAocGF0aC5feDEgPT0gbnVsbCAmJiBwYXRoLl95MSA9PSBudWxsKSB7XG4gICAgICAgIHBhdGgubW92ZVRvKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZuLmFwcGx5KHBhdGgsIGFyZ3MpO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMucGF0aHNUb1NWR1BhdGhzID0gcGF0aHNUb1NWR1BhdGhzO1xuZnVuY3Rpb24gcGF0aHNUb1NWR1BhdGhzIChpbnB1dHMsIG9wdCkge1xuICBvcHQgPSBvcHQgfHwge307XG5cbiAgdmFyIHN2Z1BhdGggPSBjb252ZXJ0VG9TVkdQYXRoKGlucHV0cywgb3B0KTtcbiAgdmFyIHN2Z1BhdGhzID0gQXJyYXkuaXNBcnJheShzdmdQYXRoKSA/IHN2Z1BhdGggOiBbIHN2Z1BhdGggXTtcbiAgcmV0dXJuIHN2Z1BhdGhzLmZpbHRlcihCb29sZWFuKTtcbn1cblxubW9kdWxlLmV4cG9ydHMucGF0aHNUb1BvbHlsaW5lcyA9IHBhdGhzVG9Qb2x5bGluZXM7XG5mdW5jdGlvbiBwYXRoc1RvUG9seWxpbmVzIChpbnB1dHMsIG9wdCkge1xuICBvcHQgPSBvcHQgfHwge307XG5cbiAgdmFyIHNjYWxlO1xuICBpZiAob3B0LmN1cnZlUmVzb2x1dGlvbiAhPSBudWxsICYmIGlzRmluaXRlKG9wdC5jdXJ2ZVJlc29sdXRpb24pICYmIHR5cGVvZiBvcHQuY3VydmVSZXNvbHV0aW9uID09PSAnbnVtYmVyJykge1xuICAgIHNjYWxlID0gb3B0LmN1cnZlUmVzb2x1dGlvbjtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdW5pdHMgPSBvcHQudW5pdHMgfHwgJ3B4JztcbiAgICBzY2FsZSA9IE1hdGgubWF4KDEsIGNvbnZlcnQoNCwgdW5pdHMsICdweCcpKTtcbiAgfVxuXG4gIHZhciBjb250b3VycyA9IFtdO1xuICBlYWNoUGF0aChpbnB1dHMsIGZ1bmN0aW9uIChmZWF0dXJlKSB7XG4gICAgaWYgKHR5cGVvZiBmZWF0dXJlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIGNvbW1hbmRzID0gc3ZnUGF0aFBhcnNlKGZlYXR1cmUpO1xuICAgICAgdmFyIHN1YkNvbnRvdXJzID0gc3ZnUGF0aENvbnRvdXJzKGNvbW1hbmRzLCBzY2FsZSk7XG4gICAgICBzdWJDb250b3Vycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJDb250b3VyKSB7XG4gICAgICAgIGNvbnRvdXJzLnB1c2goc3ViQ29udG91cik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3V0cHV0IG9ubHkgMkQgcG9seWxpbmVzXG4gICAgICB2YXIgcG9seWxpbmUgPSBmZWF0dXJlLm1hcChmdW5jdGlvbiAocG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIFsgcG9pbnRbMF0gfHwgMCwgcG9pbnRbMV0gfHwgMCBdO1xuICAgICAgfSk7XG4gICAgICBjb250b3Vycy5wdXNoKHBvbHlsaW5lKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29udG91cnM7XG59XG5cbm1vZHVsZS5leHBvcnRzLnBhdGhzVG9TVkcgPSBwYXRoc1RvU1ZHO1xuZnVuY3Rpb24gcGF0aHNUb1NWRyAoaW5wdXRzLCBvcHQpIHtcbiAgb3B0ID0gb3B0IHx8IHt9O1xuXG4gIHZhciB3aWR0aCA9IG9wdC53aWR0aDtcbiAgdmFyIGhlaWdodCA9IG9wdC5oZWlnaHQ7XG5cbiAgdmFyIGNvbXB1dGVCb3VuZHMgPSB0eXBlb2Ygd2lkdGggPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBoZWlnaHQgPT09ICd1bmRlZmluZWQnO1xuICBpZiAoY29tcHV0ZUJvdW5kcykge1xuICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBzcGVjaWZ5IFwid2lkdGhcIiBhbmQgXCJoZWlnaHRcIiBvcHRpb25zJyk7XG4gIH1cblxuICB2YXIgdmlld1VuaXRzID0gJ3B4JztcbiAgdmFyIHVuaXRzID0gb3B0LnVuaXRzIHx8IHZpZXdVbml0cztcblxuICB2YXIgY29udmVydE9wdGlvbnMgPSB7XG4gICAgdW5pdHM6IHVuaXRzLFxuICAgIHZpZXdVbml0czogJ3B4JyxcbiAgICByb3VuZFBpeGVsOiBmYWxzZSxcbiAgICBwcmVjaXNpb246IGRlZmluZWQob3B0LnByZWNpc2lvbiwgNSksXG4gICAgcGl4ZWxzUGVySW5jaDogREVGQVVMVF9QSVhFTFNfUEVSX0lOQ0hcbiAgfTtcblxuICAvLyBDb252ZXJ0IGFsbCBTVkdQYXRocy9wYXRocy9ldGMgdG8gcG9seWxpbmVzXG4gIC8vIFRoaXMgd29uJ3QgY2hhbmdlIHRoZWlyIHVuaXRzIHNvIHRoZXkgYXJlIHN0aWxsIGluIHVzZXIgc3BhY2VcbiAgaW5wdXRzID0gcGF0aHNUb1BvbHlsaW5lcyhpbnB1dHMsIE9iamVjdC5hc3NpZ24oe30sIGNvbnZlcnRPcHRpb25zLCB7XG4gICAgY3VydmVSZXNvbHV0aW9uOiBvcHQuY3VydmVSZXNvbHV0aW9uIHx8IHVuZGVmaW5lZFxuICB9KSk7XG5cbiAgLy8gVE9ETzogYWxsb3cgZm9yICdyZXBlYXQnIG9wdGlvblxuICBpZiAob3B0Lm9wdGltaXplKSB7XG4gICAgdmFyIG9wdGltaXplT3B0cyA9IHR5cGVvZiBvcHQub3B0aW1pemUgPT09ICdvYmplY3QnID8gb3B0Lm9wdGltaXplIDoge1xuICAgICAgc29ydDogdHJ1ZSxcbiAgICAgIG1lcmdlOiB0cnVlLFxuICAgICAgcmVtb3ZlRHVwbGljYXRlczogdHJ1ZSxcbiAgICAgIHJlbW92ZUNvbGxpbmVhcjogdHJ1ZVxuICAgIH07XG4gICAgdmFyIHNob3VsZFNvcnQgPSBvcHRpbWl6ZU9wdHMuc29ydCAhPT0gZmFsc2U7XG4gICAgdmFyIHNob3VsZE1lcmdlID0gb3B0aW1pemVPcHRzLm1lcmdlICE9PSBmYWxzZTtcbiAgICB2YXIgc2hvdWxkUmVtb3ZlRHVwbGljYXRlID0gb3B0aW1pemVPcHRzLnJlbW92ZUR1cGxpY2F0ZXMgIT09IGZhbHNlO1xuICAgIHZhciBzaG91bGRSZW1vdmVDb2xsaW5lYXIgPSBvcHRpbWl6ZU9wdHMucmVtb3ZlQ29sbGluZWFyICE9PSBmYWxzZTtcbiAgICBpZiAoc2hvdWxkUmVtb3ZlRHVwbGljYXRlKSB7XG4gICAgICBpbnB1dHMgPSBpbnB1dHMubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHJldHVybiBnZW9tZXRyeS5yZW1vdmVEdXBsaWNhdGVQb2ludHMobGluZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHNob3VsZFJlbW92ZUNvbGxpbmVhcikge1xuICAgICAgaW5wdXRzID0gaW5wdXRzLm1hcChmdW5jdGlvbiAobGluZSkge1xuICAgICAgICByZXR1cm4gZ2VvbWV0cnkucmVtb3ZlQ29sbGluZWFyUG9pbnRzKGxpbmUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIG5vdyBkbyBzb3J0aW5nICYgbWVyZ2luZ1xuICAgIGlmIChzaG91bGRTb3J0KSBpbnB1dHMgPSBvcHRpbWl6ZXIuc29ydChpbnB1dHMpO1xuICAgIGlmIChzaG91bGRNZXJnZSkge1xuICAgICAgdmFyIG1lcmdlVGhyZXNob2xkID0gb3B0aW1pemVPcHRzLm1lcmdlVGhyZXNob2xkICE9IG51bGxcbiAgICAgICAgPyBvcHRpbWl6ZU9wdHMubWVyZ2VUaHJlc2hvbGRcbiAgICAgICAgOiBjb252ZXJ0KDAuMjUsICdtbScsIHVuaXRzLCB7XG4gICAgICAgICAgcGl4ZWxzUGVySW5jaDogREVGQVVMVF9QSVhFTFNfUEVSX0lOQ0hcbiAgICAgICAgfSk7XG4gICAgICBpbnB1dHMgPSBvcHRpbWl6ZXIubWVyZ2UoaW5wdXRzLCBtZXJnZVRocmVzaG9sZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbm93IHdlIGNvbnZlcnQgYWxsIHBvbHlsaW5lcyBpbiB1c2VyIHNwYWNlIHVuaXRzIGludG8gdmlldyB1bml0c1xuICB2YXIgc3ZnUGF0aHMgPSBwYXRoc1RvU1ZHUGF0aHMoaW5wdXRzLCBjb252ZXJ0T3B0aW9ucyk7XG5cbiAgdmFyIHZpZXdXaWR0aCA9IGNvbnZlcnQod2lkdGgsIHVuaXRzLCB2aWV3VW5pdHMsIGNvbnZlcnRPcHRpb25zKS50b1N0cmluZygpO1xuICB2YXIgdmlld0hlaWdodCA9IGNvbnZlcnQoaGVpZ2h0LCB1bml0cywgdmlld1VuaXRzLCBjb252ZXJ0T3B0aW9ucykudG9TdHJpbmcoKTtcbiAgdmFyIGZpbGxTdHlsZSA9IG9wdC5maWxsU3R5bGUgfHwgJ25vbmUnO1xuICB2YXIgc3Ryb2tlU3R5bGUgPSBvcHQuc3Ryb2tlU3R5bGUgfHwgJ2JsYWNrJztcbiAgdmFyIGxpbmVXaWR0aCA9IG9wdC5saW5lV2lkdGg7XG4gIHZhciBsaW5lSm9pbiA9IG9wdC5saW5lSm9pbjtcbiAgdmFyIGxpbmVDYXAgPSBvcHQubGluZUNhcDtcblxuICAvLyBDaG9vc2UgYSBkZWZhdWx0IGxpbmUgd2lkdGggYmFzZWQgb24gYSByZWxhdGl2ZWx5IGZpbmUtdGlwIHBlblxuICBpZiAodHlwZW9mIGxpbmVXaWR0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBDb252ZXJ0IHRvIHVzZXIgdW5pdHNcbiAgICBsaW5lV2lkdGggPSBjb252ZXJ0KERFRkFVTFRfUEVOX1RISUNLTkVTUywgREVGQVVMVF9QRU5fVEhJQ0tORVNTX1VOSVQsIHVuaXRzLCBjb252ZXJ0T3B0aW9ucykudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZhciBwYXRoRWxlbWVudHMgPSBzdmdQYXRocy5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICB2YXIgYXR0cnMgPSB0b0F0dHJMaXN0KFtcbiAgICAgIFsgJ2QnLCBkIF1cbiAgICBdKTtcbiAgICByZXR1cm4gJyAgICA8cGF0aCAnICsgYXR0cnMgKyAnIC8+JztcbiAgfSkuam9pbignXFxuJyk7XG5cbiAgdmFyIGdyb3VwQXR0cnMgPSB0b0F0dHJMaXN0KFtcbiAgICBbICdmaWxsJywgZmlsbFN0eWxlIF0sXG4gICAgWyAnc3Ryb2tlJywgc3Ryb2tlU3R5bGUgXSxcbiAgICBbICdzdHJva2Utd2lkdGgnLCBsaW5lV2lkdGggKyAnJyArIHVuaXRzIF0sXG4gICAgbGluZUpvaW4gPyBbICdzdHJva2UtbGluZWpvaW4nLCBsaW5lSm9pbiBdIDogZmFsc2UsXG4gICAgbGluZUNhcCA/IFsgJ3N0cm9rZS1saW5lY2FwJywgbGluZUNhcCBdIDogZmFsc2VcbiAgXSk7XG5cbiAgcmV0dXJuIFtcbiAgICAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIHN0YW5kYWxvbmU9XCJub1wiPz4nLFxuICAgICc8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgJyxcbiAgICAnICAgIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCI+JyxcbiAgICAnPHN2ZyB3aWR0aD1cIicgKyB3aWR0aCArIHVuaXRzICsgJ1wiIGhlaWdodD1cIicgKyBoZWlnaHQgKyB1bml0cyArICdcIicsXG4gICAgJyAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmVyc2lvbj1cIjEuMVwiIHZpZXdCb3g9XCIwIDAgJyArIHZpZXdXaWR0aCArICcgJyArIHZpZXdIZWlnaHQgKyAnXCI+JyxcbiAgICAnICA8ZyAnICsgZ3JvdXBBdHRycyArICc+JyxcbiAgICBwYXRoRWxlbWVudHMsXG4gICAgJyAgPC9nPicsXG4gICAgJzwvc3ZnPidcbiAgXS5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gdG9BdHRyTGlzdCAoYXJncykge1xuICByZXR1cm4gYXJncy5maWx0ZXIoQm9vbGVhbikubWFwKGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgcmV0dXJuIGF0dHJbMF0gKyAnPVwiJyArIGF0dHJbMV0gKyAnXCInO1xuICB9KS5qb2luKCcgJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlbmRlclBhdGhzID0gcmVuZGVyUGF0aHM7XG5mdW5jdGlvbiByZW5kZXJQYXRocyAoaW5wdXRzLCBvcHQpIHtcbiAgb3B0ID0gb3B0IHx8IHt9O1xuXG4gIHZhciBjb250ZXh0ID0gb3B0LmNvbnRleHQ7XG4gIGlmICghY29udGV4dCkgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgXCJjb250ZXh0XCIgb3B0aW9ucycpO1xuXG4gIHZhciB1bml0cyA9IG9wdC51bml0cyB8fCAncHgnO1xuXG4gIHZhciB3aWR0aCA9IG9wdC53aWR0aDtcbiAgdmFyIGhlaWdodCA9IG9wdC5oZWlnaHQ7XG4gIGlmICh0eXBlb2Ygd2lkdGggPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBoZWlnaHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgXCJ3aWR0aFwiIGFuZCBcImhlaWdodFwiIG9wdGlvbnMnKTtcbiAgfVxuXG4gIC8vIENob29zZSBhIGRlZmF1bHQgbGluZSB3aWR0aCBiYXNlZCBvbiBhIHJlbGF0aXZlbHkgZmluZS10aXAgcGVuXG4gIHZhciBsaW5lV2lkdGggPSBvcHQubGluZVdpZHRoO1xuICBpZiAodHlwZW9mIGxpbmVXaWR0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBDb252ZXJ0IHRvIHVzZXIgdW5pdHNcbiAgICBsaW5lV2lkdGggPSBjb252ZXJ0KERFRkFVTFRfUEVOX1RISUNLTkVTUywgREVGQVVMVF9QRU5fVEhJQ0tORVNTX1VOSVQsIHVuaXRzLCB7XG4gICAgICByb3VuZFBpeGVsOiBmYWxzZSxcbiAgICAgIHBpeGVsc1BlckluY2g6IERFRkFVTFRfUElYRUxTX1BFUl9JTkNIXG4gICAgfSk7XG4gIH1cblxuICAvLyBDbGVhciBjYW52YXNcbiAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgLy8gRmlsbCB3aXRoIHdoaXRlXG4gIGNvbnRleHQuZmlsbFN0eWxlID0gb3B0LmJhY2tncm91bmQgfHwgJ3doaXRlJztcbiAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBjb250ZXh0LnN0cm9rZVN0eWxlID0gb3B0LmZvcmVncm91bmQgfHwgb3B0LnN0cm9rZVN0eWxlIHx8ICdibGFjayc7XG4gIGNvbnRleHQubGluZVdpZHRoID0gbGluZVdpZHRoO1xuICBjb250ZXh0LmxpbmVKb2luID0gb3B0LmxpbmVKb2luIHx8ICdtaXRlcic7XG4gIGNvbnRleHQubGluZUNhcCA9IG9wdC5saW5lQ2FwIHx8ICdidXR0JztcblxuICAvLyBEcmF3IGxpbmVzXG4gIGVhY2hQYXRoKGlucHV0cywgZnVuY3Rpb24gKGZlYXR1cmUpIHtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgaWYgKHR5cGVvZiBmZWF0dXJlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gU1ZHIHN0cmluZyA9IGRyYXdTVkdQYXRoO1xuICAgICAgZHJhd1NWR1BhdGgoY29udGV4dCwgZmVhdHVyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGxpc3Qgb2YgcG9pbnRzXG4gICAgICBmZWF0dXJlLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICAgICAgY29udGV4dC5saW5lVG8ocFswXSwgcFsxXSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb250ZXh0LnN0cm9rZSgpO1xuICB9KTtcblxuICAvLyBTYXZlIGxheWVyc1xuICByZXR1cm4gW1xuICAgIC8vIEV4cG9ydCBQTkcgYXMgZmlyc3QgbGF5ZXJcbiAgICBjb250ZXh0LmNhbnZhcyxcbiAgICAvLyBFeHBvcnQgU1ZHIGZvciBwZW4gcGxvdHRlciBhcyBzZWNvbmQgbGF5ZXJcbiAgICB7XG4gICAgICBkYXRhOiBwYXRoc1RvU1ZHKGlucHV0cywgb3B0KSxcbiAgICAgIGV4dGVuc2lvbjogJy5zdmcnXG4gICAgfVxuICBdO1xufVxuXG4vLyBOb3QgZG9jdW1lbnRlZC4uLlxubW9kdWxlLmV4cG9ydHMuY29udmVydFRvU1ZHUGF0aCA9IGNvbnZlcnRUb1NWR1BhdGg7XG5mdW5jdGlvbiBjb252ZXJ0VG9TVkdQYXRoIChpbnB1dCwgb3B0KSB7XG4gIC8vIElucHV0IGNhbiBiZSBhIHNpbmdsZSAncGF0aCcgKHN0cmluZywgb2JqZWN0IG9yIHBvbHlsaW5lKSxcbiAgLy8gb3IgbmVzdGVkICdwYXRoJyBlbGVtZW50c1xuXG4gIC8vIG5vbi1wYXRoXG4gIGlmIChpc0VtcHR5KGlucHV0KSkgcmV0dXJuICcnO1xuXG4gIC8vIHN0cmluZ3MgYXJlIGp1c3QgcmV0dXJuZWQgYXMtaXNcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHJldHVybiBpbnB1dDtcblxuICAvLyBhc3N1bWUgYSBwYXRoIGluc3RhbmNlXG4gIGlmIChpc1BhdGgoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0LnRvU3RyaW5nKCk7XG4gIH1cblxuICBpZiAoaXNQb2x5bGluZShpbnB1dCkpIHtcbiAgICByZXR1cm4gcG9seWxpbmVUb1NWR1BhdGgoaW5wdXQsIG9wdCk7XG4gIH1cblxuICAvLyBhc3N1bWUgYSBsaXN0IG9mICdwYXRoJyBmZWF0dXJlcyBvciBhIGxpc3Qgb2YgcG9seWxpbmVzXG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dC5tYXAoZnVuY3Rpb24gKGZlYXR1cmUpIHtcbiAgICAgIHJldHVybiBjb252ZXJ0VG9TVkdQYXRoKGZlYXR1cmUsIG9wdCk7XG4gICAgfSkucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS5jb25jYXQoYik7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgLy8gV2Fzbid0IGNsZWFyLi4uIGxldCdzIHJldHVybiBhbiBlbXB0eSBwYXRoXG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMuZWFjaFBhdGggPSBlYWNoUGF0aDtcbmZ1bmN0aW9uIGVhY2hQYXRoIChpbnB1dCwgY2IpIHtcbiAgaWYgKGlzRW1wdHkoaW5wdXQpKSB7XG4gICAgLy8gcGFzcy10aHJvdWdoXG4gIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fCAoaXNQYXRoKGlucHV0KSkpIHtcbiAgICBjYihpbnB1dC50b1N0cmluZygpKTtcbiAgfSBlbHNlIGlmIChpc1BvbHlsaW5lKGlucHV0KSkge1xuICAgIGNiKGlucHV0KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIGlucHV0LmZvckVhY2goZnVuY3Rpb24gKGZlYXR1cmUpIHtcbiAgICAgIHJldHVybiBlYWNoUGF0aChmZWF0dXJlLCBjYik7XG4gICAgfSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuZHJhd1NWR1BhdGggPSBkcmF3U1ZHUGF0aDtcbmZ1bmN0aW9uIGRyYXdTVkdQYXRoIChjb250ZXh0LCBzdmdQYXRoKSB7XG4gIHZhciBjb21tYW5kcyA9IHN2Z1BhdGhBcmNzKHN2Z1BhdGhBYnMoc3ZnUGF0aFBhcnNlKHN2Z1BhdGgpKSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYyA9IGNvbW1hbmRzW2ldO1xuICAgIHZhciB0eXBlID0gY1swXTtcbiAgICBpZiAodHlwZSA9PT0gJ00nKSB7XG4gICAgICBjb250ZXh0Lm1vdmVUbyhjWzFdLCBjWzJdKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdDJykge1xuICAgICAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKGNbMV0sIGNbMl0sIGNbM10sIGNbNF0sIGNbNV0sIGNbNl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgdHlwZSBcIicgKyB0eXBlICsgJ1wiIGluIFNWRyBjb21tYW5kcycpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5wb2x5bGluZVRvU1ZHUGF0aCA9IHBvbHlsaW5lVG9TVkdQYXRoO1xuZnVuY3Rpb24gcG9seWxpbmVUb1NWR1BhdGggKHBvbHlsaW5lLCBvcHQpIHtcbiAgb3B0ID0gb3B0IHx8IHt9O1xuICB2YXIgdW5pdHMgPSBvcHQudW5pdHMgfHwgJ3B4JztcbiAgdmFyIHZpZXdVbml0cyA9IG9wdC52aWV3VW5pdHMgfHwgdW5pdHM7XG4gIHZhciBjb21tYW5kcyA9IFtdO1xuICB2YXIgY29udmVydE9wdGlvbnMgPSB7XG4gICAgcm91bmRQaXhlbDogZmFsc2UsXG4gICAgcHJlY2lzaW9uOiBkZWZpbmVkKG9wdC5wcmVjaXNpb24sIDUpLFxuICAgIHBpeGVsc1BlckluY2g6IERFRkFVTFRfUElYRUxTX1BFUl9JTkNIXG4gIH07XG4gIHBvbHlsaW5lLmZvckVhY2goZnVuY3Rpb24gKHBvaW50LCBqKSB7XG4gICAgdmFyIHR5cGUgPSAoaiA9PT0gMCkgPyAnTScgOiAnTCc7XG4gICAgdmFyIHggPSBjb252ZXJ0KHBvaW50WzBdLCB1bml0cywgdmlld1VuaXRzLCBjb252ZXJ0T3B0aW9ucykudG9TdHJpbmcoKTtcbiAgICB2YXIgeSA9IGNvbnZlcnQocG9pbnRbMV0sIHVuaXRzLCB2aWV3VW5pdHMsIGNvbnZlcnRPcHRpb25zKS50b1N0cmluZygpO1xuICAgIGNvbW1hbmRzLnB1c2godHlwZSArIHggKyAnICcgKyB5KTtcbiAgfSk7XG4gIHJldHVybiBjb21tYW5kcy5qb2luKCcgJyk7XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHkgKGlucHV0KSB7XG4gIHJldHVybiAhaW5wdXQgfHwgKEFycmF5LmlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA9PT0gMCk7XG59XG5cbmZ1bmN0aW9uIGlzUGF0aCAoaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQgJiYgIUFycmF5LmlzQXJyYXkoaW5wdXQpO1xufVxuXG5mdW5jdGlvbiBpc1BvbHlsaW5lIChpbnB1dCkge1xuICAvLyBlbXB0eSBhcnJheSBvciBub3QgYW4gYXJyYXlcbiAgaWYgKCFpbnB1dCB8fCAhQXJyYXkuaXNBcnJheShpbnB1dCkgfHwgaW5wdXQubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIC8vIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgaW5wdXRzIGlzIGEgcG9pbnQsIGFzc3VtZSB0aGV5IGFsbCBhcmVcbiAgcmV0dXJuIGlzUG9pbnQoaW5wdXRbMF0pO1xufVxuXG5mdW5jdGlvbiBpc1BvaW50IChwb2ludCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShwb2ludCkgJiYgcG9pbnQubGVuZ3RoID49IDIgJiYgcG9pbnQuZXZlcnkoZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gdHlwZW9mIHAgPT09ICdudW1iZXInO1xuICB9KTtcbn1cblxuLy8gQGRlcHJlY2F0ZWRcbm1vZHVsZS5leHBvcnRzLnBvbHlsaW5lc1RvU1ZHID0gZnVuY3Rpb24gcG9seWxpbmVzVG9TVkcgKHBvbHlsaW5lcywgb3B0KSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwb2x5bGluZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGFycmF5IG9mIGFycmF5cyBmb3IgcG9seWxpbmVzJyk7XG4gIGNvbnNvbGUud2FybigncG9seWxpbmVzVG9TVkcgaXMgZGVwcmVjYXRlZCwgdXNlIHBhdGhzVG9TVkcgaW5zdGVhZCB3aGljaCBoYXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eScpO1xuICAvLyBDcmVhdGUgYSBzaW5nbGUgc3RyaW5nIGZyb20gcG9seWxpbmVzXG4gIHJldHVybiBwYXRoc1RvU1ZHKHBvbHlsaW5lcywgb3B0KTtcbn07XG5cbi8vIEBkZXByZWNhdGVkXG5tb2R1bGUuZXhwb3J0cy5yZW5kZXJQb2x5bGluZXMgPSBmdW5jdGlvbiByZW5kZXJQb2x5bGluZXMgKHBvbHlsaW5lcywgb3B0KSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwb2x5bGluZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGFycmF5IG9mIGFycmF5cyBmb3IgcG9seWxpbmVzJyk7XG4gIGNvbnNvbGUud2FybigncmVuZGVyUG9seWxpbmVzIGlzIGRlcHJlY2F0ZWQsIHVzZSByZW5kZXJQYXRocyBpbnN0ZWFkIHdoaWNoIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5Jyk7XG4gIC8vIENyZWF0ZSBhIHNpbmdsZSBzdHJpbmcgZnJvbSBwb2x5bGluZXNcbiAgcmV0dXJuIHJlbmRlclBhdGhzKHBvbHlsaW5lcywgb3B0KTtcbn07XG4iLCJ2YXIgc2VlZFJhbmRvbSA9IHJlcXVpcmUoJ3NlZWQtcmFuZG9tJyk7XG52YXIgU2ltcGxleE5vaXNlID0gcmVxdWlyZSgnc2ltcGxleC1ub2lzZScpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCdkZWZpbmVkJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVJhbmRvbSAoZGVmYXVsdFNlZWQpIHtcbiAgZGVmYXVsdFNlZWQgPSBkZWZpbmVkKGRlZmF1bHRTZWVkLCBudWxsKTtcbiAgdmFyIGRlZmF1bHRSYW5kb20gPSBNYXRoLnJhbmRvbTtcbiAgdmFyIGN1cnJlbnRTZWVkO1xuICB2YXIgY3VycmVudFJhbmRvbTtcbiAgdmFyIG5vaXNlR2VuZXJhdG9yO1xuICB2YXIgX25leHRHYXVzc2lhbiA9IG51bGw7XG4gIHZhciBfaGFzTmV4dEdhdXNzaWFuID0gZmFsc2U7XG5cbiAgc2V0U2VlZChkZWZhdWx0U2VlZCk7XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgY3JlYXRlUmFuZG9tOiBmdW5jdGlvbiAoZGVmYXVsdFNlZWQpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSYW5kb20oZGVmYXVsdFNlZWQpO1xuICAgIH0sXG4gICAgc2V0U2VlZDogc2V0U2VlZCxcbiAgICBnZXRTZWVkOiBnZXRTZWVkLFxuICAgIGdldFJhbmRvbVNlZWQ6IGdldFJhbmRvbVNlZWQsXG4gICAgdmFsdWVOb25aZXJvOiB2YWx1ZU5vblplcm8sXG4gICAgcGVybXV0ZU5vaXNlOiBwZXJtdXRlTm9pc2UsXG4gICAgbm9pc2UxRDogbm9pc2UxRCxcbiAgICBub2lzZTJEOiBub2lzZTJELFxuICAgIG5vaXNlM0Q6IG5vaXNlM0QsXG4gICAgbm9pc2U0RDogbm9pc2U0RCxcbiAgICBzaWduOiBzaWduLFxuICAgIGJvb2xlYW46IGJvb2xlYW4sXG4gICAgY2hhbmNlOiBjaGFuY2UsXG4gICAgcmFuZ2U6IHJhbmdlLFxuICAgIHJhbmdlRmxvb3I6IHJhbmdlRmxvb3IsXG4gICAgcGljazogcGljayxcbiAgICBzaHVmZmxlOiBzaHVmZmxlLFxuICAgIG9uQ2lyY2xlOiBvbkNpcmNsZSxcbiAgICBpbnNpZGVDaXJjbGU6IGluc2lkZUNpcmNsZSxcbiAgICBvblNwaGVyZTogb25TcGhlcmUsXG4gICAgaW5zaWRlU3BoZXJlOiBpbnNpZGVTcGhlcmUsXG4gICAgcXVhdGVybmlvbjogcXVhdGVybmlvbixcbiAgICB3ZWlnaHRlZDogd2VpZ2h0ZWQsXG4gICAgd2VpZ2h0ZWRTZXQ6IHdlaWdodGVkU2V0LFxuICAgIHdlaWdodGVkU2V0SW5kZXg6IHdlaWdodGVkU2V0SW5kZXgsXG4gICAgZ2F1c3NpYW46IGdhdXNzaWFuXG4gIH07XG5cbiAgZnVuY3Rpb24gc2V0U2VlZCAoc2VlZCwgb3B0KSB7XG4gICAgaWYgKHR5cGVvZiBzZWVkID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygc2VlZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGN1cnJlbnRTZWVkID0gc2VlZDtcbiAgICAgIGN1cnJlbnRSYW5kb20gPSBzZWVkUmFuZG9tKGN1cnJlbnRTZWVkLCBvcHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50U2VlZCA9IHVuZGVmaW5lZDtcbiAgICAgIGN1cnJlbnRSYW5kb20gPSBkZWZhdWx0UmFuZG9tO1xuICAgIH1cbiAgICBub2lzZUdlbmVyYXRvciA9IGNyZWF0ZU5vaXNlKCk7XG4gICAgX25leHRHYXVzc2lhbiA9IG51bGw7XG4gICAgX2hhc05leHRHYXVzc2lhbiA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsdWUgKCkge1xuICAgIHJldHVybiBjdXJyZW50UmFuZG9tKCk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWx1ZU5vblplcm8gKCkge1xuICAgIHZhciB1ID0gMDtcbiAgICB3aGlsZSAodSA9PT0gMCkgdSA9IHZhbHVlKCk7XG4gICAgcmV0dXJuIHU7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTZWVkICgpIHtcbiAgICByZXR1cm4gY3VycmVudFNlZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSYW5kb21TZWVkICgpIHtcbiAgICB2YXIgc2VlZCA9IFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKSk7XG4gICAgcmV0dXJuIHNlZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2lzZSAoKSB7XG4gICAgcmV0dXJuIG5ldyBTaW1wbGV4Tm9pc2UoY3VycmVudFJhbmRvbSk7XG4gIH1cblxuICBmdW5jdGlvbiBwZXJtdXRlTm9pc2UgKCkge1xuICAgIG5vaXNlR2VuZXJhdG9yID0gY3JlYXRlTm9pc2UoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlMUQgKHgsIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTJEKHggKiBmcmVxdWVuY3ksIDApO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2UyRCAoeCwgeSwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3kgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2UyRCh4ICogZnJlcXVlbmN5LCB5ICogZnJlcXVlbmN5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlM0QgKHgsIHksIHosIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd5IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ogY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2UzRChcbiAgICAgIHggKiBmcmVxdWVuY3ksXG4gICAgICB5ICogZnJlcXVlbmN5LFxuICAgICAgeiAqIGZyZXF1ZW5jeVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTREICh4LCB5LCB6LCB3LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneSBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHopKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd6IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUodykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3cgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2U0RChcbiAgICAgIHggKiBmcmVxdWVuY3ksXG4gICAgICB5ICogZnJlcXVlbmN5LFxuICAgICAgeiAqIGZyZXF1ZW5jeSxcbiAgICAgIHcgKiBmcmVxdWVuY3lcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbiAoKSB7XG4gICAgcmV0dXJuIGJvb2xlYW4oKSA/IDEgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJvb2xlYW4gKCkge1xuICAgIHJldHVybiB2YWx1ZSgpID4gMC41O1xuICB9XG5cbiAgZnVuY3Rpb24gY2hhbmNlIChuKSB7XG4gICAgbiA9IGRlZmluZWQobiwgMC41KTtcbiAgICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBuIHRvIGJlIGEgbnVtYmVyJyk7XG4gICAgcmV0dXJuIHZhbHVlKCkgPCBuO1xuICB9XG5cbiAgZnVuY3Rpb24gcmFuZ2UgKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWluICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWF4ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIGFyZ3VtZW50cyB0byBiZSBudW1iZXJzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlKCkgKiAobWF4IC0gbWluKSArIG1pbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhbmdlRmxvb3IgKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWluICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWF4ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIGFyZ3VtZW50cyB0byBiZSBudW1iZXJzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGguZmxvb3IocmFuZ2UobWluLCBtYXgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBpY2sgKGFycmF5KSB7XG4gICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYXJyYXlbcmFuZ2VGbG9vcigwLCBhcnJheS5sZW5ndGgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNodWZmbGUgKGFycikge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBBcnJheSwgZ290ICcgKyB0eXBlb2YgYXJyKTtcbiAgICB9XG5cbiAgICB2YXIgcmFuZDtcbiAgICB2YXIgdG1wO1xuICAgIHZhciBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIHZhciByZXQgPSBhcnIuc2xpY2UoKTtcbiAgICB3aGlsZSAobGVuKSB7XG4gICAgICByYW5kID0gTWF0aC5mbG9vcih2YWx1ZSgpICogbGVuLS0pO1xuICAgICAgdG1wID0gcmV0W2xlbl07XG4gICAgICByZXRbbGVuXSA9IHJldFtyYW5kXTtcbiAgICAgIHJldFtyYW5kXSA9IHRtcDtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2lyY2xlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgdmFyIHRoZXRhID0gdmFsdWUoKSAqIDIuMCAqIE1hdGguUEk7XG4gICAgb3V0WzBdID0gcmFkaXVzICogTWF0aC5jb3ModGhldGEpO1xuICAgIG91dFsxXSA9IHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zaWRlQ2lyY2xlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgb25DaXJjbGUoMSwgb3V0KTtcbiAgICB2YXIgciA9IHJhZGl1cyAqIE1hdGguc3FydCh2YWx1ZSgpKTtcbiAgICBvdXRbMF0gKj0gcjtcbiAgICBvdXRbMV0gKj0gcjtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gb25TcGhlcmUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdSA9IHZhbHVlKCkgKiBNYXRoLlBJICogMjtcbiAgICB2YXIgdiA9IHZhbHVlKCkgKiAyIC0gMTtcbiAgICB2YXIgcGhpID0gdTtcbiAgICB2YXIgdGhldGEgPSBNYXRoLmFjb3Modik7XG4gICAgb3V0WzBdID0gcmFkaXVzICogTWF0aC5zaW4odGhldGEpICogTWF0aC5jb3MocGhpKTtcbiAgICBvdXRbMV0gPSByYWRpdXMgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLnNpbihwaGkpO1xuICAgIG91dFsyXSA9IHJhZGl1cyAqIE1hdGguY29zKHRoZXRhKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zaWRlU3BoZXJlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgdmFyIHUgPSB2YWx1ZSgpICogTWF0aC5QSSAqIDI7XG4gICAgdmFyIHYgPSB2YWx1ZSgpICogMiAtIDE7XG4gICAgdmFyIGsgPSB2YWx1ZSgpO1xuXG4gICAgdmFyIHBoaSA9IHU7XG4gICAgdmFyIHRoZXRhID0gTWF0aC5hY29zKHYpO1xuICAgIHZhciByID0gcmFkaXVzICogTWF0aC5jYnJ0KGspO1xuICAgIG91dFswXSA9IHIgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLmNvcyhwaGkpO1xuICAgIG91dFsxXSA9IHIgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLnNpbihwaGkpO1xuICAgIG91dFsyXSA9IHIgKiBNYXRoLmNvcyh0aGV0YSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHF1YXRlcm5pb24gKG91dCkge1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdTEgPSB2YWx1ZSgpO1xuICAgIHZhciB1MiA9IHZhbHVlKCk7XG4gICAgdmFyIHUzID0gdmFsdWUoKTtcblxuICAgIHZhciBzcTEgPSBNYXRoLnNxcnQoMSAtIHUxKTtcbiAgICB2YXIgc3EyID0gTWF0aC5zcXJ0KHUxKTtcblxuICAgIHZhciB0aGV0YTEgPSBNYXRoLlBJICogMiAqIHUyO1xuICAgIHZhciB0aGV0YTIgPSBNYXRoLlBJICogMiAqIHUzO1xuXG4gICAgdmFyIHggPSBNYXRoLnNpbih0aGV0YTEpICogc3ExO1xuICAgIHZhciB5ID0gTWF0aC5jb3ModGhldGExKSAqIHNxMTtcbiAgICB2YXIgeiA9IE1hdGguc2luKHRoZXRhMikgKiBzcTI7XG4gICAgdmFyIHcgPSBNYXRoLmNvcyh0aGV0YTIpICogc3EyO1xuICAgIG91dFswXSA9IHg7XG4gICAgb3V0WzFdID0geTtcbiAgICBvdXRbMl0gPSB6O1xuICAgIG91dFszXSA9IHc7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdlaWdodGVkU2V0IChzZXQpIHtcbiAgICBzZXQgPSBzZXQgfHwgW107XG4gICAgaWYgKHNldC5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIHJldHVybiBzZXRbd2VpZ2h0ZWRTZXRJbmRleChzZXQpXS52YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdlaWdodGVkU2V0SW5kZXggKHNldCkge1xuICAgIHNldCA9IHNldCB8fCBbXTtcbiAgICBpZiAoc2V0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xO1xuICAgIHJldHVybiB3ZWlnaHRlZChzZXQubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gcy53ZWlnaHQ7XG4gICAgfSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gd2VpZ2h0ZWQgKHdlaWdodHMpIHtcbiAgICB3ZWlnaHRzID0gd2VpZ2h0cyB8fCBbXTtcbiAgICBpZiAod2VpZ2h0cy5sZW5ndGggPT09IDApIHJldHVybiAtMTtcbiAgICB2YXIgdG90YWxXZWlnaHQgPSAwO1xuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRvdGFsV2VpZ2h0ICs9IHdlaWdodHNbaV07XG4gICAgfVxuXG4gICAgaWYgKHRvdGFsV2VpZ2h0IDw9IDApIHRocm93IG5ldyBFcnJvcignV2VpZ2h0cyBtdXN0IHN1bSB0byA+IDAnKTtcblxuICAgIHZhciByYW5kb20gPSB2YWx1ZSgpICogdG90YWxXZWlnaHQ7XG4gICAgZm9yIChpID0gMDsgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyYW5kb20gPCB3ZWlnaHRzW2ldKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgICAgcmFuZG9tIC09IHdlaWdodHNbaV07XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2F1c3NpYW4gKG1lYW4sIHN0YW5kYXJkRGVyaXZhdGlvbikge1xuICAgIG1lYW4gPSBkZWZpbmVkKG1lYW4sIDApO1xuICAgIHN0YW5kYXJkRGVyaXZhdGlvbiA9IGRlZmluZWQoc3RhbmRhcmREZXJpdmF0aW9uLCAxKTtcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuamRrLW1pcnJvci9qZGs3dS1qZGsvYmxvYi9mNGQ4MDk1N2U4OWExOWEyOWJiOWY5ODA3ZDJhMjgzNTFlZDdmN2RmL3NyYy9zaGFyZS9jbGFzc2VzL2phdmEvdXRpbC9SYW5kb20uamF2YSNMNDk2XG4gICAgaWYgKF9oYXNOZXh0R2F1c3NpYW4pIHtcbiAgICAgIF9oYXNOZXh0R2F1c3NpYW4gPSBmYWxzZTtcbiAgICAgIHZhciByZXN1bHQgPSBfbmV4dEdhdXNzaWFuO1xuICAgICAgX25leHRHYXVzc2lhbiA9IG51bGw7XG4gICAgICByZXR1cm4gbWVhbiArIHN0YW5kYXJkRGVyaXZhdGlvbiAqIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHYxID0gMDtcbiAgICAgIHZhciB2MiA9IDA7XG4gICAgICB2YXIgcyA9IDA7XG4gICAgICBkbyB7XG4gICAgICAgIHYxID0gdmFsdWUoKSAqIDIgLSAxOyAvLyBiZXR3ZWVuIC0xIGFuZCAxXG4gICAgICAgIHYyID0gdmFsdWUoKSAqIDIgLSAxOyAvLyBiZXR3ZWVuIC0xIGFuZCAxXG4gICAgICAgIHMgPSB2MSAqIHYxICsgdjIgKiB2MjtcbiAgICAgIH0gd2hpbGUgKHMgPj0gMSB8fCBzID09PSAwKTtcbiAgICAgIHZhciBtdWx0aXBsaWVyID0gTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocykgLyBzKTtcbiAgICAgIF9uZXh0R2F1c3NpYW4gPSAodjIgKiBtdWx0aXBsaWVyKTtcbiAgICAgIF9oYXNOZXh0R2F1c3NpYW4gPSB0cnVlO1xuICAgICAgcmV0dXJuIG1lYW4gKyBzdGFuZGFyZERlcml2YXRpb24gKiAodjEgKiBtdWx0aXBsaWVyKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSYW5kb20oKTtcbiIsInZhciBjcmVhdGVSZWdsID0gcmVxdWlyZSgncmVnbCcpO1xudmFyIGNyZWF0ZVF1YWQgPSByZXF1aXJlKCdwcmltaXRpdmUtcXVhZCcpO1xudmFyIHBhcnNlQ29sb3IgPSByZXF1aXJlKCdwYXJzZS1jb2xvcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCdkZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlU2hhZGVyO1xuXG5mdW5jdGlvbiBjcmVhdGVTaGFkZXIgKG9wdCkge1xuICBvcHQgPSBvcHQgfHwge307XG4gIGlmICghb3B0LmdsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgeyBjb250ZXh0OiBcIndlYmdsXCIgfSBpbiBza2V0Y2ggc2V0dGluZ3MsIG9yIGEgV2ViR0wtZW5hYmxlZCBjYW52YXMnKTtcbiAgfVxuXG4gIHZhciBnbCA9IG9wdC5nbDtcbiAgdmFyIHJlZ2xPcHRzID0geyBnbDogZ2wgfTtcblxuICAvLyByZWdsIGlzIHN0cmljdCBvbiB3aGF0IG9wdGlvbnMgeW91IHBhc3MgaW5cbiAgaWYgKHR5cGVvZiBvcHQuZXh0ZW5zaW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHJlZ2xPcHRzLmV4dGVuc2lvbnMgPSBvcHQuZXh0ZW5zaW9ucztcbiAgaWYgKHR5cGVvZiBvcHQub3B0aW9uYWxFeHRlbnNpb25zICE9PSAndW5kZWZpbmVkJykgcmVnbE9wdHMub3B0aW9uYWxFeHRlbnNpb25zID0gb3B0Lm9wdGlvbmFsRXh0ZW5zaW9ucztcbiAgaWYgKHR5cGVvZiBvcHQucHJvZmlsZSAhPT0gJ3VuZGVmaW5lZCcpIHJlZ2xPcHRzLnByb2ZpbGUgPSBvcHQucHJvZmlsZTtcbiAgaWYgKHR5cGVvZiBvcHQub25Eb25lICE9PSAndW5kZWZpbmVkJykgcmVnbE9wdHMub25Eb25lID0gb3B0Lm9uRG9uZTtcblxuICAvLyBDcmVhdGUgcmVnbCBmb3IgaGFuZGxpbmcgR0wgc3R1ZmZcbiAgdmFyIHJlZ2wgPSBjcmVhdGVSZWdsKHJlZ2xPcHRzKTtcblxuICAvLyBBIG1lc2ggZm9yIGEgZmxhdCBwbGFuZVxuICB2YXIgcXVhZCA9IGNyZWF0ZVF1YWQoKTtcblxuICB2YXIgdGV4dHVyZU1hcCA9IG5ldyBNYXAoKTtcblxuICAvLyBXaXJlIHVwIHVzZXIgdW5pZm9ybXMgbmljZWx5XG4gIHZhciB1bmlmb3Jtc01hcCA9IG9wdC51bmlmb3JtcyB8fCB7fTtcbiAgdmFyIHVuaWZvcm1zID0gT2JqZWN0LmFzc2lnbih7fSwgdW5pZm9ybXNNYXApO1xuICBPYmplY3Qua2V5cyh1bmlmb3Jtc01hcCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbHVlID0gdW5pZm9ybXNNYXBba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB1bmlmb3Jtc1trZXldID0gZnVuY3Rpb24gKHN0YXRlLCBwcm9wcywgYmF0Y2hJRCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdmFsdWUuY2FsbCh1bmlmb3Jtc01hcCwgcHJvcHMsIGJhdGNoSUQpO1xuICAgICAgICAvLyBJZiB1c2VyIGlzIHVzaW5nIGEgZnVuY3Rpb24gdG8gd3JhcCBhbiBpbWFnZSxcbiAgICAgICAgLy8gdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSByZS11cGxvYWQgdG8gc2FtZSBHTCB0ZXh0dXJlXG4gICAgICAgIGlmIChpc1RleHR1cmVMaWtlKHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAodGV4dHVyZU1hcC5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBUZXh0dXJlIGlzIGFscmVhZHkgY3JlYXRlZCwgcmUtdXBsb2FkXG4gICAgICAgICAgICB2YXIgcHJldlRleCA9IHRleHR1cmVNYXAuZ2V0KHZhbHVlKTtcbiAgICAgICAgICAgIHByZXZUZXgocmVzdWx0KTtcblxuICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSB0ZXh0dXJlXG4gICAgICAgICAgICByZXN1bHQgPSBwcmV2VGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDcmVhdGluZyB0aGUgdGV4dHVyZSBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gcmVnbC50ZXh0dXJlKHJlc3VsdCk7XG4gICAgICAgICAgICB0ZXh0dXJlTWFwLnNldCh2YWx1ZSwgdGV4dHVyZSk7XG5cbiAgICAgICAgICAgIC8vIFJldHVybiB0aGUgdGV4dHVyZSwgbm90IHRoZSBpbWFnZVxuICAgICAgICAgICAgcmVzdWx0ID0gdGV4dHVyZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpc1RleHR1cmVMaWtlKHZhbHVlKSkge1xuICAgICAgdW5pZm9ybXNba2V5XSA9IHJlZ2wudGV4dHVyZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuaWZvcm1zW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEdldCB0aGUgZHJhd2luZyBjb21tYW5kXG4gIHZhciBkcmF3UXVhZENvbW1hbmQ7XG4gIHRyeSB7XG4gICAgZHJhd1F1YWRDb21tYW5kID0gY3JlYXRlRHJhd1F1YWQoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaGFuZGxlRXJyb3IoZXJyKTtcbiAgfVxuXG4gIC8vIE5pY2VseSBnZXQgYSBjbGVhciBjb2xvciBmb3IgdGhlIGNhbnZhc1xuICB2YXIgY2xlYXJDb2xvciA9IGRlZmluZWQob3B0LmNsZWFyQ29sb3IsICdibGFjaycpO1xuICBpZiAodHlwZW9mIGNsZWFyQ29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlQ29sb3IoY2xlYXJDb2xvcik7XG4gICAgaWYgKCFwYXJzZWQucmdiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIHBhcnNpbmcgeyBjbGVhckNvbG9yIH0gY29sb3Igc3RyaW5nIFwiJyArIGNsZWFyQ29sb3IgKyAnXCInKTtcbiAgICB9XG4gICAgY2xlYXJDb2xvciA9IHBhcnNlZC5yZ2Iuc2xpY2UoMCwgMykubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgICByZXR1cm4gbiAvIDI1NTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChjbGVhckNvbG9yICYmICghQXJyYXkuaXNBcnJheShjbGVhckNvbG9yKSB8fCBjbGVhckNvbG9yLmxlbmd0aCA8IDMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciB3aXRoIHsgY2xlYXJDb2xvciB9IG9wdGlvbiwgbXVzdCBiZSBhIHN0cmluZyBvciBbIHIsIGcsIGIgXSBmbG9hdCBhcnJheScpO1xuICB9XG5cbiAgdmFyIGNsZWFyQWxwaGEgPSBkZWZpbmVkKG9wdC5jbGVhckFscGhhLCAxKTtcbiAgdmFyIGNsZWFyID0gY2xlYXJDb2xvciA/IGNsZWFyQ29sb3IuY29uY2F0KFsgY2xlYXJBbHBoYSB8fCAwIF0pIDogZmFsc2U7XG5cbiAgLy8gUmV0dXJuIGEgcmVuZGVyZXIgb2JqZWN0XG4gIHJldHVybiB7XG4gICAgcmVuZGVyOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgIC8vIE9uIGVhY2ggdGljaywgdXBkYXRlIHJlZ2wgdGltZXJzIGFuZCBzaXplc1xuICAgICAgcmVnbC5wb2xsKCk7XG5cbiAgICAgIC8vIENsZWFyIGJhY2tidWZmZXIgd2l0aCBjb2xvclxuICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgIHJlZ2wuY2xlYXIoe1xuICAgICAgICAgIGNvbG9yOiBjbGVhcixcbiAgICAgICAgICBkZXB0aDogMSxcbiAgICAgICAgICBzdGVuY2lsOiAwXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBTdWJtaXQgZHJhdyBjb21tYW5kXG4gICAgICBkcmF3UXVhZChwcm9wcyk7XG5cbiAgICAgIC8vIEZsdXNoIHBlbmRpbmcgR0wgY2FsbHMgZm9yIHRoaXMgZnJhbWVcbiAgICAgIGdsLmZsdXNoKCk7XG4gICAgfSxcbiAgICByZWdsOiByZWdsLFxuICAgIGRyYXdRdWFkOiBkcmF3UXVhZCxcbiAgICB1bmxvYWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFJlbW92ZSBHTCB0ZXh0dXJlIG1hcHBpbmdzXG4gICAgICB0ZXh0dXJlTWFwLmNsZWFyKCk7XG4gICAgICAvLyBVbmxvYWQgdGhlIGN1cnJlbnQgcmVnbCBpbnN0YW5jZVxuICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIHByb2JhYmx5IGFsc28gZGVzdHJveSB0ZXh0dXJlcyBjcmVhdGVkIGZyb20gdGhpcyBtb2R1bGUhXG4gICAgICByZWdsLmRlc3Ryb3koKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gQSB1c2VyLWZyaWVuZGx5IGRyYXcgY29tbWFuZCB0aGF0IHNwaXRzIG91dCBlcnJvcnNcbiAgZnVuY3Rpb24gZHJhd1F1YWQgKHByb3BzKSB7XG4gICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICAvLyBEcmF3IGdlbmVyYXRpdmUgLyBzaGFkZXIgYXJ0XG4gICAgaWYgKGRyYXdRdWFkQ29tbWFuZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZHJhd1F1YWRDb21tYW5kKHByb3BzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoaGFuZGxlRXJyb3IoZXJyKSkge1xuICAgICAgICAgIGlmIChwcm9wcyA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IHNoYWRlci5yZW5kZXIoKSBpcyBub3QgY2FsbGVkIHdpdGggYW55IFwicHJvcHNcIiBwYXJhbWV0ZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBEcmF3IGNvbW1hbmRcbiAgZnVuY3Rpb24gY3JlYXRlRHJhd1F1YWQgKCkge1xuICAgIHJldHVybiByZWdsKHtcbiAgICAgIHNjaXNzb3I6IG9wdC5zY2lzc29yID8ge1xuICAgICAgICBlbmFibGU6IHRydWUsXG4gICAgICAgIGJveDoge1xuICAgICAgICAgIHg6IHJlZ2wucHJvcCgnc2Npc3NvclgnKSxcbiAgICAgICAgICB5OiByZWdsLnByb3AoJ3NjaXNzb3JZJyksXG4gICAgICAgICAgd2lkdGg6IHJlZ2wucHJvcCgnc2Npc3NvcldpZHRoJyksXG4gICAgICAgICAgaGVpZ2h0OiByZWdsLnByb3AoJ3NjaXNzb3JIZWlnaHQnKVxuICAgICAgICB9XG4gICAgICB9IDogZmFsc2UsXG4gICAgICAvLyBQYXNzIGRvd24gcHJvcHMgZnJvbSBqYXZhc2NyaXB0XG4gICAgICB1bmlmb3JtczogdW5pZm9ybXMsXG4gICAgICAvLyBGYWxsIGJhY2sgdG8gYSBzaW1wbGUgZnJhZ21lbnQgc2hhZGVyXG4gICAgICBmcmFnOiBvcHQuZnJhZyB8fCBbXG4gICAgICAgICdwcmVjaXNpb24gaGlnaHAgZmxvYXQ7JyxcbiAgICAgICAgJycsXG4gICAgICAgICd2b2lkIG1haW4gKCkgeycsXG4gICAgICAgICcgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAvLyBGYWxsIGJhY2sgdG8gYSBzaW1wbGUgdmVydGV4IHNoYWRlclxuICAgICAgdmVydDogb3B0LnZlcnQgfHwgW1xuICAgICAgICAncHJlY2lzaW9uIGhpZ2hwIGZsb2F0OycsXG4gICAgICAgICdhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsnLFxuICAgICAgICAndmFyeWluZyB2ZWMyIHZVdjsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJ3ZvaWQgbWFpbiAoKSB7JyxcbiAgICAgICAgJyAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uLnh5eiwgMS4wKTsnLFxuICAgICAgICAnICB2VXYgPSBnbF9Qb3NpdGlvbi54eSAqIDAuNSArIDAuNTsnLFxuICAgICAgICAnfSdcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAvLyBTZXR1cCB0cmFuc3BhcmVuY3kgYmxlbmRpbmdcbiAgICAgIGJsZW5kOiBvcHQuYmxlbmQgIT09IGZhbHNlID8ge1xuICAgICAgICBlbmFibGU6IHRydWUsXG4gICAgICAgIGZ1bmM6IHtcbiAgICAgICAgICBzcmNSR0I6ICdzcmMgYWxwaGEnLFxuICAgICAgICAgIHNyY0FscGhhOiAxLFxuICAgICAgICAgIGRzdFJHQjogJ29uZSBtaW51cyBzcmMgYWxwaGEnLFxuICAgICAgICAgIGRzdEFscGhhOiAxXG4gICAgICAgIH1cbiAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAvLyBTZW5kIG1lc2ggdmVydGV4IGF0dHJpYnV0ZXMgdG8gc2hhZGVyXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHBvc2l0aW9uOiBxdWFkLnBvc2l0aW9uc1xuICAgICAgfSxcbiAgICAgIC8vIFRoZSBpbmRpY2VzIGZvciB0aGUgcXVhZCBtZXNoXG4gICAgICBlbGVtZW50czogcXVhZC5jZWxsc1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3IgKGVycikge1xuICAgIGlmICgvXlxcKHJlZ2xcXCkvLnRlc3QoZXJyLm1lc3NhZ2UpKSB7XG4gICAgICAvLyBSZWdsIGFscmVhZHkgbG9ncyBhIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUgOlxcXG4gICAgICAvLyBzbyBsZXQncyBqdXN0IGF2b2lkIHJlLXByaW50aW5nIHRoZSBzYW1lIHRoaW5nXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1RleHR1cmVMaWtlIChkYXRhKSB7XG4gIHJldHVybiBkYXRhICYmICFBcnJheS5pc0FycmF5KGRhdGEpICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jztcbn1cbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG4gIGdsb2JhbC5wZXJmb3JtYW5jZSAmJlxuICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID8gZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxuICB9IDogRGF0ZS5ub3cgfHwgZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiArbmV3IERhdGVcbiAgfVxuIiwibW9kdWxlLmV4cG9ydHMgPSBpc1Byb21pc2U7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZShvYmopIHtcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzTm9kZVxuXG5mdW5jdGlvbiBpc05vZGUgKHZhbCkge1xuICByZXR1cm4gKCF2YWwgfHwgdHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpXG4gICAgPyBmYWxzZVxuICAgIDogKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmIHR5cGVvZiB3aW5kb3cuTm9kZSA9PT0gJ29iamVjdCcpXG4gICAgICA/ICh2YWwgaW5zdGFuY2VvZiB3aW5kb3cuTm9kZSlcbiAgICAgIDogKHR5cGVvZiB2YWwubm9kZVR5cGUgPT09ICdudW1iZXInKSAmJlxuICAgICAgICAodHlwZW9mIHZhbC5ub2RlTmFtZSA9PT0gJ3N0cmluZycpXG59XG4iLCIvLyBUT0RPOiBXZSBjYW4gcmVtb3ZlIGEgaHVnZSBjaHVuayBvZiBidW5kbGUgc2l6ZSBieSB1c2luZyBhIHNtYWxsZXJcbi8vIHV0aWxpdHkgbW9kdWxlIGZvciBjb252ZXJ0aW5nIHVuaXRzLlxuaW1wb3J0IGlzRE9NIGZyb20gJ2lzLWRvbSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRBUEkgKCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93WydjYW52YXMtc2tldGNoLWNsaSddO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZCAoKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFyZ3VtZW50c1tpXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCcm93c2VyICgpIHtcbiAgcmV0dXJuIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dlYkdMQ29udGV4dCAoY3R4KSB7XG4gIHJldHVybiB0eXBlb2YgY3R4LmNsZWFyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdHguY2xlYXJDb2xvciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY3R4LmJ1ZmZlckRhdGEgPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbnZhcyAoZWxlbWVudCkge1xuICByZXR1cm4gaXNET00oZWxlbWVudCkgJiYgL2NhbnZhcy9pLnRlc3QoZWxlbWVudC5ub2RlTmFtZSkgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Q29udGV4dCA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsIi8qIVxuICogcmVwZWF0LXN0cmluZyA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvcmVwZWF0LXN0cmluZz5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFJlc3VsdHMgY2FjaGVcbiAqL1xuXG52YXIgcmVzID0gJyc7XG52YXIgY2FjaGU7XG5cbi8qKlxuICogRXhwb3NlIGByZXBlYXRgXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXBlYXQ7XG5cbi8qKlxuICogUmVwZWF0IHRoZSBnaXZlbiBgc3RyaW5nYCB0aGUgc3BlY2lmaWVkIGBudW1iZXJgXG4gKiBvZiB0aW1lcy5cbiAqXG4gKiAqKkV4YW1wbGU6KipcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcbiAqIHJlcGVhdCgnQScsIDUpO1xuICogLy89PiBBQUFBQVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGBzdHJpbmdgIFRoZSBzdHJpbmcgdG8gcmVwZWF0XG4gKiBAcGFyYW0ge051bWJlcn0gYG51bWJlcmAgVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHN0cmluZ1xuICogQHJldHVybiB7U3RyaW5nfSBSZXBlYXRlZCBzdHJpbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gcmVwZWF0KHN0ciwgbnVtKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIGEgc3RyaW5nJyk7XG4gIH1cblxuICAvLyBjb3ZlciBjb21tb24sIHF1aWNrIHVzZSBjYXNlc1xuICBpZiAobnVtID09PSAxKSByZXR1cm4gc3RyO1xuICBpZiAobnVtID09PSAyKSByZXR1cm4gc3RyICsgc3RyO1xuXG4gIHZhciBtYXggPSBzdHIubGVuZ3RoICogbnVtO1xuICBpZiAoY2FjaGUgIT09IHN0ciB8fCB0eXBlb2YgY2FjaGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgY2FjaGUgPSBzdHI7XG4gICAgcmVzID0gJyc7XG4gIH0gZWxzZSBpZiAocmVzLmxlbmd0aCA+PSBtYXgpIHtcbiAgICByZXR1cm4gcmVzLnN1YnN0cigwLCBtYXgpO1xuICB9XG5cbiAgd2hpbGUgKG1heCA+IHJlcy5sZW5ndGggJiYgbnVtID4gMSkge1xuICAgIGlmIChudW0gJiAxKSB7XG4gICAgICByZXMgKz0gc3RyO1xuICAgIH1cblxuICAgIG51bSA+Pj0gMTtcbiAgICBzdHIgKz0gc3RyO1xuICB9XG5cbiAgcmVzICs9IHN0cjtcbiAgcmVzID0gcmVzLnN1YnN0cigwLCBtYXgpO1xuICByZXR1cm4gcmVzO1xufVxuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nXG4gID8gT2JqZWN0LmtleXMgOiBzaGltO1xuXG5leHBvcnRzLnNoaW0gPSBzaGltO1xuZnVuY3Rpb24gc2hpbSAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICByZXR1cm4ga2V5cztcbn1cbiIsInZhciBzdXBwb3J0c0FyZ3VtZW50c0NsYXNzID0gKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzKVxufSkoKSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gc3VwcG9ydHNBcmd1bWVudHNDbGFzcyA/IHN1cHBvcnRlZCA6IHVuc3VwcG9ydGVkO1xuXG5leHBvcnRzLnN1cHBvcnRlZCA9IHN1cHBvcnRlZDtcbmZ1bmN0aW9uIHN1cHBvcnRlZChvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufTtcblxuZXhwb3J0cy51bnN1cHBvcnRlZCA9IHVuc3VwcG9ydGVkO1xuZnVuY3Rpb24gdW5zdXBwb3J0ZWQob2JqZWN0KXtcbiAgcmV0dXJuIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0Lmxlbmd0aCA9PSAnbnVtYmVyJyAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdjYWxsZWUnKSAmJlxuICAgICFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCAnY2FsbGVlJykgfHxcbiAgICBmYWxzZTtcbn07XG4iLCJ2YXIgcFNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuL2xpYi9rZXlzLmpzJyk7XG52YXIgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2xpYi9pc19hcmd1bWVudHMuanMnKTtcblxudmFyIGRlZXBFcXVhbCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFjdHVhbCwgZXhwZWN0ZWQsIG9wdHMpIHtcbiAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuXG4gIH0gZWxzZSBpZiAoYWN0dWFsIGluc3RhbmNlb2YgRGF0ZSAmJiBleHBlY3RlZCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gYWN0dWFsLmdldFRpbWUoKSA9PT0gZXhwZWN0ZWQuZ2V0VGltZSgpO1xuXG4gIC8vIDcuMy4gT3RoZXIgcGFpcnMgdGhhdCBkbyBub3QgYm90aCBwYXNzIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyxcbiAgLy8gZXF1aXZhbGVuY2UgaXMgZGV0ZXJtaW5lZCBieSA9PS5cbiAgfSBlbHNlIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCB8fCB0eXBlb2YgYWN0dWFsICE9ICdvYmplY3QnICYmIHR5cGVvZiBleHBlY3RlZCAhPSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBvcHRzLnN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gNy40LiBGb3IgYWxsIG90aGVyIE9iamVjdCBwYWlycywgaW5jbHVkaW5nIEFycmF5IG9iamVjdHMsIGVxdWl2YWxlbmNlIGlzXG4gIC8vIGRldGVybWluZWQgYnkgaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChhcyB2ZXJpZmllZFxuICAvLyB3aXRoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCksIHRoZSBzYW1lIHNldCBvZiBrZXlzXG4gIC8vIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLCBlcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnlcbiAgLy8gY29ycmVzcG9uZGluZyBrZXksIGFuZCBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuIE5vdGU6IHRoaXNcbiAgLy8gYWNjb3VudHMgZm9yIGJvdGggbmFtZWQgYW5kIGluZGV4ZWQgcHJvcGVydGllcyBvbiBBcnJheXMuXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9iakVxdWl2KGFjdHVhbCwgZXhwZWN0ZWQsIG9wdHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkT3JOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAoeCkge1xuICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnIHx8IHR5cGVvZiB4Lmxlbmd0aCAhPT0gJ251bWJlcicpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiB4LmNvcHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHguc2xpY2UgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHgubGVuZ3RoID4gMCAmJiB0eXBlb2YgeFswXSAhPT0gJ251bWJlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG9iakVxdWl2KGEsIGIsIG9wdHMpIHtcbiAgdmFyIGksIGtleTtcbiAgaWYgKGlzVW5kZWZpbmVkT3JOdWxsKGEpIHx8IGlzVW5kZWZpbmVkT3JOdWxsKGIpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy8gYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LlxuICBpZiAoYS5wcm90b3R5cGUgIT09IGIucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XG4gIC8vfn5+SSd2ZSBtYW5hZ2VkIHRvIGJyZWFrIE9iamVjdC5rZXlzIHRocm91Z2ggc2NyZXd5IGFyZ3VtZW50cyBwYXNzaW5nLlxuICAvLyAgIENvbnZlcnRpbmcgdG8gYXJyYXkgc29sdmVzIHRoZSBwcm9ibGVtLlxuICBpZiAoaXNBcmd1bWVudHMoYSkpIHtcbiAgICBpZiAoIWlzQXJndW1lbnRzKGIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGEgPSBwU2xpY2UuY2FsbChhKTtcbiAgICBiID0gcFNsaWNlLmNhbGwoYik7XG4gICAgcmV0dXJuIGRlZXBFcXVhbChhLCBiLCBvcHRzKTtcbiAgfVxuICBpZiAoaXNCdWZmZXIoYSkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKGIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIga2EgPSBvYmplY3RLZXlzKGEpLFxuICAgICAgICBrYiA9IG9iamVjdEtleXMoYik7XG4gIH0gY2F0Y2ggKGUpIHsvL2hhcHBlbnMgd2hlbiBvbmUgaXMgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgdGhlIG90aGVyIGlzbid0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoa2V5cyBpbmNvcnBvcmF0ZXNcbiAgLy8gaGFzT3duUHJvcGVydHkpXG4gIGlmIChrYS5sZW5ndGggIT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT0ga2JbaV0pXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy9lcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBrZXksIGFuZFxuICAvL35+fnBvc3NpYmx5IGV4cGVuc2l2ZSBkZWVwIHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBrZXkgPSBrYVtpXTtcbiAgICBpZiAoIWRlZXBFcXVhbChhW2tleV0sIGJba2V5XSwgb3B0cykpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiO1xufVxuIiwiLypcbiAqIERhdGUgRm9ybWF0IDEuMi4zXG4gKiAoYykgMjAwNy0yMDA5IFN0ZXZlbiBMZXZpdGhhbiA8c3RldmVubGV2aXRoYW4uY29tPlxuICogTUlUIGxpY2Vuc2VcbiAqXG4gKiBJbmNsdWRlcyBlbmhhbmNlbWVudHMgYnkgU2NvdHQgVHJlbmRhIDxzY290dC50cmVuZGEubmV0PlxuICogYW5kIEtyaXMgS293YWwgPGNpeGFyLmNvbS9+a3Jpcy5rb3dhbC8+XG4gKlxuICogQWNjZXB0cyBhIGRhdGUsIGEgbWFzaywgb3IgYSBkYXRlIGFuZCBhIG1hc2suXG4gKiBSZXR1cm5zIGEgZm9ybWF0dGVkIHZlcnNpb24gb2YgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgZGF0ZSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBkYXRlL3RpbWUuXG4gKiBUaGUgbWFzayBkZWZhdWx0cyB0byBkYXRlRm9ybWF0Lm1hc2tzLmRlZmF1bHQuXG4gKi9cblxuKGZ1bmN0aW9uKGdsb2JhbCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGRhdGVGb3JtYXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdG9rZW4gPSAvZHsxLDR9fG17MSw0fXx5eSg/Onl5KT98KFtIaE1zVHRdKVxcMT98W0xsb1NaV05dfFwiW15cIl0qXCJ8J1teJ10qJy9nO1xuICAgICAgdmFyIHRpbWV6b25lID0gL1xcYig/OltQTUNFQV1bU0RQXVR8KD86UGFjaWZpY3xNb3VudGFpbnxDZW50cmFsfEVhc3Rlcm58QXRsYW50aWMpICg/OlN0YW5kYXJkfERheWxpZ2h0fFByZXZhaWxpbmcpIFRpbWV8KD86R01UfFVUQykoPzpbLStdXFxkezR9KT8pXFxiL2c7XG4gICAgICB2YXIgdGltZXpvbmVDbGlwID0gL1teLStcXGRBLVpdL2c7XG4gIFxuICAgICAgLy8gUmVnZXhlcyBhbmQgc3VwcG9ydGluZyBmdW5jdGlvbnMgYXJlIGNhY2hlZCB0aHJvdWdoIGNsb3N1cmVcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZGF0ZSwgbWFzaywgdXRjLCBnbXQpIHtcbiAgXG4gICAgICAgIC8vIFlvdSBjYW4ndCBwcm92aWRlIHV0YyBpZiB5b3Ugc2tpcCBvdGhlciBhcmdzICh1c2UgdGhlICdVVEM6JyBtYXNrIHByZWZpeClcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYga2luZE9mKGRhdGUpID09PSAnc3RyaW5nJyAmJiAhL1xcZC8udGVzdChkYXRlKSkge1xuICAgICAgICAgIG1hc2sgPSBkYXRlO1xuICAgICAgICAgIGRhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGRhdGUgPSBkYXRlIHx8IG5ldyBEYXRlO1xuICBcbiAgICAgICAgaWYoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGlmIChpc05hTihkYXRlKSkge1xuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBkYXRlJyk7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIG1hc2sgPSBTdHJpbmcoZGF0ZUZvcm1hdC5tYXNrc1ttYXNrXSB8fCBtYXNrIHx8IGRhdGVGb3JtYXQubWFza3NbJ2RlZmF1bHQnXSk7XG4gIFxuICAgICAgICAvLyBBbGxvdyBzZXR0aW5nIHRoZSB1dGMvZ210IGFyZ3VtZW50IHZpYSB0aGUgbWFza1xuICAgICAgICB2YXIgbWFza1NsaWNlID0gbWFzay5zbGljZSgwLCA0KTtcbiAgICAgICAgaWYgKG1hc2tTbGljZSA9PT0gJ1VUQzonIHx8IG1hc2tTbGljZSA9PT0gJ0dNVDonKSB7XG4gICAgICAgICAgbWFzayA9IG1hc2suc2xpY2UoNCk7XG4gICAgICAgICAgdXRjID0gdHJ1ZTtcbiAgICAgICAgICBpZiAobWFza1NsaWNlID09PSAnR01UOicpIHtcbiAgICAgICAgICAgIGdtdCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gIFxuICAgICAgICB2YXIgXyA9IHV0YyA/ICdnZXRVVEMnIDogJ2dldCc7XG4gICAgICAgIHZhciBkID0gZGF0ZVtfICsgJ0RhdGUnXSgpO1xuICAgICAgICB2YXIgRCA9IGRhdGVbXyArICdEYXknXSgpO1xuICAgICAgICB2YXIgbSA9IGRhdGVbXyArICdNb250aCddKCk7XG4gICAgICAgIHZhciB5ID0gZGF0ZVtfICsgJ0Z1bGxZZWFyJ10oKTtcbiAgICAgICAgdmFyIEggPSBkYXRlW18gKyAnSG91cnMnXSgpO1xuICAgICAgICB2YXIgTSA9IGRhdGVbXyArICdNaW51dGVzJ10oKTtcbiAgICAgICAgdmFyIHMgPSBkYXRlW18gKyAnU2Vjb25kcyddKCk7XG4gICAgICAgIHZhciBMID0gZGF0ZVtfICsgJ01pbGxpc2Vjb25kcyddKCk7XG4gICAgICAgIHZhciBvID0gdXRjID8gMCA6IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgICAgdmFyIFcgPSBnZXRXZWVrKGRhdGUpO1xuICAgICAgICB2YXIgTiA9IGdldERheU9mV2VlayhkYXRlKTtcbiAgICAgICAgdmFyIGZsYWdzID0ge1xuICAgICAgICAgIGQ6ICAgIGQsXG4gICAgICAgICAgZGQ6ICAgcGFkKGQpLFxuICAgICAgICAgIGRkZDogIGRhdGVGb3JtYXQuaTE4bi5kYXlOYW1lc1tEXSxcbiAgICAgICAgICBkZGRkOiBkYXRlRm9ybWF0LmkxOG4uZGF5TmFtZXNbRCArIDddLFxuICAgICAgICAgIG06ICAgIG0gKyAxLFxuICAgICAgICAgIG1tOiAgIHBhZChtICsgMSksXG4gICAgICAgICAgbW1tOiAgZGF0ZUZvcm1hdC5pMThuLm1vbnRoTmFtZXNbbV0sXG4gICAgICAgICAgbW1tbTogZGF0ZUZvcm1hdC5pMThuLm1vbnRoTmFtZXNbbSArIDEyXSxcbiAgICAgICAgICB5eTogICBTdHJpbmcoeSkuc2xpY2UoMiksXG4gICAgICAgICAgeXl5eTogeSxcbiAgICAgICAgICBoOiAgICBIICUgMTIgfHwgMTIsXG4gICAgICAgICAgaGg6ICAgcGFkKEggJSAxMiB8fCAxMiksXG4gICAgICAgICAgSDogICAgSCxcbiAgICAgICAgICBISDogICBwYWQoSCksXG4gICAgICAgICAgTTogICAgTSxcbiAgICAgICAgICBNTTogICBwYWQoTSksXG4gICAgICAgICAgczogICAgcyxcbiAgICAgICAgICBzczogICBwYWQocyksXG4gICAgICAgICAgbDogICAgcGFkKEwsIDMpLFxuICAgICAgICAgIEw6ICAgIHBhZChNYXRoLnJvdW5kKEwgLyAxMCkpLFxuICAgICAgICAgIHQ6ICAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMF0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzFdLFxuICAgICAgICAgIHR0OiAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMl0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzNdLFxuICAgICAgICAgIFQ6ICAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNF0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzVdLFxuICAgICAgICAgIFRUOiAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNl0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzddLFxuICAgICAgICAgIFo6ICAgIGdtdCA/ICdHTVQnIDogdXRjID8gJ1VUQycgOiAoU3RyaW5nKGRhdGUpLm1hdGNoKHRpbWV6b25lKSB8fCBbJyddKS5wb3AoKS5yZXBsYWNlKHRpbWV6b25lQ2xpcCwgJycpLFxuICAgICAgICAgIG86ICAgIChvID4gMCA/ICctJyA6ICcrJykgKyBwYWQoTWF0aC5mbG9vcihNYXRoLmFicyhvKSAvIDYwKSAqIDEwMCArIE1hdGguYWJzKG8pICUgNjAsIDQpLFxuICAgICAgICAgIFM6ICAgIFsndGgnLCAnc3QnLCAnbmQnLCAncmQnXVtkICUgMTAgPiAzID8gMCA6IChkICUgMTAwIC0gZCAlIDEwICE9IDEwKSAqIGQgJSAxMF0sXG4gICAgICAgICAgVzogICAgVyxcbiAgICAgICAgICBOOiAgICBOXG4gICAgICAgIH07XG4gIFxuICAgICAgICByZXR1cm4gbWFzay5yZXBsYWNlKHRva2VuLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICBpZiAobWF0Y2ggaW4gZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbGFnc1ttYXRjaF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtYXRjaC5zbGljZSgxLCBtYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pKCk7XG5cbiAgZGF0ZUZvcm1hdC5tYXNrcyA9IHtcbiAgICAnZGVmYXVsdCc6ICAgICAgICAgICAgICAgJ2RkZCBtbW0gZGQgeXl5eSBISDpNTTpzcycsXG4gICAgJ3Nob3J0RGF0ZSc6ICAgICAgICAgICAgICdtL2QveXknLFxuICAgICdtZWRpdW1EYXRlJzogICAgICAgICAgICAnbW1tIGQsIHl5eXknLFxuICAgICdsb25nRGF0ZSc6ICAgICAgICAgICAgICAnbW1tbSBkLCB5eXl5JyxcbiAgICAnZnVsbERhdGUnOiAgICAgICAgICAgICAgJ2RkZGQsIG1tbW0gZCwgeXl5eScsXG4gICAgJ3Nob3J0VGltZSc6ICAgICAgICAgICAgICdoOk1NIFRUJyxcbiAgICAnbWVkaXVtVGltZSc6ICAgICAgICAgICAgJ2g6TU06c3MgVFQnLFxuICAgICdsb25nVGltZSc6ICAgICAgICAgICAgICAnaDpNTTpzcyBUVCBaJyxcbiAgICAnaXNvRGF0ZSc6ICAgICAgICAgICAgICAgJ3l5eXktbW0tZGQnLFxuICAgICdpc29UaW1lJzogICAgICAgICAgICAgICAnSEg6TU06c3MnLFxuICAgICdpc29EYXRlVGltZSc6ICAgICAgICAgICAneXl5eS1tbS1kZFxcJ1RcXCdISDpNTTpzc28nLFxuICAgICdpc29VdGNEYXRlVGltZSc6ICAgICAgICAnVVRDOnl5eXktbW0tZGRcXCdUXFwnSEg6TU06c3NcXCdaXFwnJyxcbiAgICAnZXhwaXJlc0hlYWRlckZvcm1hdCc6ICAgJ2RkZCwgZGQgbW1tIHl5eXkgSEg6TU06c3MgWidcbiAgfTtcblxuICAvLyBJbnRlcm5hdGlvbmFsaXphdGlvbiBzdHJpbmdzXG4gIGRhdGVGb3JtYXQuaTE4biA9IHtcbiAgICBkYXlOYW1lczogW1xuICAgICAgJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCcsXG4gICAgICAnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXG4gICAgXSxcbiAgICBtb250aE5hbWVzOiBbXG4gICAgICAnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnLFxuICAgICAgJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXG4gICAgXSxcbiAgICB0aW1lTmFtZXM6IFtcbiAgICAgICdhJywgJ3AnLCAnYW0nLCAncG0nLCAnQScsICdQJywgJ0FNJywgJ1BNJ1xuICAgIF1cbiAgfTtcblxuZnVuY3Rpb24gcGFkKHZhbCwgbGVuKSB7XG4gIHZhbCA9IFN0cmluZyh2YWwpO1xuICBsZW4gPSBsZW4gfHwgMjtcbiAgd2hpbGUgKHZhbC5sZW5ndGggPCBsZW4pIHtcbiAgICB2YWwgPSAnMCcgKyB2YWw7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIElTTyA4NjAxIHdlZWsgbnVtYmVyXG4gKiBCYXNlZCBvbiBjb21tZW50cyBmcm9tXG4gKiBodHRwOi8vdGVjaGJsb2cucHJvY3VyaW9zLm5sL2svbjYxOC9uZXdzL3ZpZXcvMzM3OTYvMTQ4NjMvQ2FsY3VsYXRlLUlTTy04NjAxLXdlZWstYW5kLXllYXItaW4tamF2YXNjcmlwdC5odG1sXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBgZGF0ZWBcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0V2VlayhkYXRlKSB7XG4gIC8vIFJlbW92ZSB0aW1lIGNvbXBvbmVudHMgb2YgZGF0ZVxuICB2YXIgdGFyZ2V0VGh1cnNkYXkgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xuXG4gIC8vIENoYW5nZSBkYXRlIHRvIFRodXJzZGF5IHNhbWUgd2Vla1xuICB0YXJnZXRUaHVyc2RheS5zZXREYXRlKHRhcmdldFRodXJzZGF5LmdldERhdGUoKSAtICgodGFyZ2V0VGh1cnNkYXkuZ2V0RGF5KCkgKyA2KSAlIDcpICsgMyk7XG5cbiAgLy8gVGFrZSBKYW51YXJ5IDR0aCBhcyBpdCBpcyBhbHdheXMgaW4gd2VlayAxIChzZWUgSVNPIDg2MDEpXG4gIHZhciBmaXJzdFRodXJzZGF5ID0gbmV3IERhdGUodGFyZ2V0VGh1cnNkYXkuZ2V0RnVsbFllYXIoKSwgMCwgNCk7XG5cbiAgLy8gQ2hhbmdlIGRhdGUgdG8gVGh1cnNkYXkgc2FtZSB3ZWVrXG4gIGZpcnN0VGh1cnNkYXkuc2V0RGF0ZShmaXJzdFRodXJzZGF5LmdldERhdGUoKSAtICgoZmlyc3RUaHVyc2RheS5nZXREYXkoKSArIDYpICUgNykgKyAzKTtcblxuICAvLyBDaGVjayBpZiBkYXlsaWdodC1zYXZpbmctdGltZS1zd2l0Y2ggb2NjdXJyZWQgYW5kIGNvcnJlY3QgZm9yIGl0XG4gIHZhciBkcyA9IHRhcmdldFRodXJzZGF5LmdldFRpbWV6b25lT2Zmc2V0KCkgLSBmaXJzdFRodXJzZGF5LmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHRhcmdldFRodXJzZGF5LnNldEhvdXJzKHRhcmdldFRodXJzZGF5LmdldEhvdXJzKCkgLSBkcyk7XG5cbiAgLy8gTnVtYmVyIG9mIHdlZWtzIGJldHdlZW4gdGFyZ2V0IFRodXJzZGF5IGFuZCBmaXJzdCBUaHVyc2RheVxuICB2YXIgd2Vla0RpZmYgPSAodGFyZ2V0VGh1cnNkYXkgLSBmaXJzdFRodXJzZGF5KSAvICg4NjQwMDAwMCo3KTtcbiAgcmV0dXJuIDEgKyBNYXRoLmZsb29yKHdlZWtEaWZmKTtcbn1cblxuLyoqXG4gKiBHZXQgSVNPLTg2MDEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IG9mIHRoZSB3ZWVrXG4gKiAxIChmb3IgTW9uZGF5KSB0aHJvdWdoIDcgKGZvciBTdW5kYXkpXG4gKiBcbiAqIEBwYXJhbSAge09iamVjdH0gYGRhdGVgXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldERheU9mV2VlayhkYXRlKSB7XG4gIHZhciBkb3cgPSBkYXRlLmdldERheSgpO1xuICBpZihkb3cgPT09IDApIHtcbiAgICBkb3cgPSA3O1xuICB9XG4gIHJldHVybiBkb3c7XG59XG5cbi8qKlxuICoga2luZC1vZiBzaG9ydGN1dFxuICogQHBhcmFtICB7Kn0gdmFsXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGtpbmRPZih2YWwpIHtcbiAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH1cblxuICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICByZXR1cm4gJ2FycmF5JztcbiAgfVxuXG4gIHJldHVybiB7fS50b1N0cmluZy5jYWxsKHZhbClcbiAgICAuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG5cblxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBkYXRlRm9ybWF0O1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZGF0ZUZvcm1hdDtcbiAgfSBlbHNlIHtcbiAgICBnbG9iYWwuZGF0ZUZvcm1hdCA9IGRhdGVGb3JtYXQ7XG4gIH1cbn0pKHRoaXMpO1xuIiwiLyohXG4gKiBwYWQtbGVmdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvcGFkLWxlZnQ+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEpvbiBTY2hsaW5rZXJ0LlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYWRMZWZ0KHN0ciwgbnVtLCBjaCkge1xuICBzdHIgPSBzdHIudG9TdHJpbmcoKTtcblxuICBpZiAodHlwZW9mIG51bSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgaWYgKGNoID09PSAwKSB7XG4gICAgY2ggPSAnMCc7XG4gIH0gZWxzZSBpZiAoY2gpIHtcbiAgICBjaCA9IGNoLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgY2ggPSAnICc7XG4gIH1cblxuICByZXR1cm4gcmVwZWF0KGNoLCBudW0gLSBzdHIubGVuZ3RoKSArIHN0cjtcbn07XG4iLCJpbXBvcnQgZGF0ZWZvcm1hdCBmcm9tICdkYXRlZm9ybWF0JztcbmltcG9ydCBhc3NpZ24gZnJvbSAnb2JqZWN0LWFzc2lnbic7XG5pbXBvcnQgcGFkTGVmdCBmcm9tICdwYWQtbGVmdCc7XG5pbXBvcnQgeyBnZXRDbGllbnRBUEkgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5sZXQgbGluaztcbmxldCBkZWZhdWx0RXh0cyA9IHsgZXh0ZW5zaW9uOiAnJywgcHJlZml4OiAnJywgc3VmZml4OiAnJyB9O1xuXG4vLyBBbHRlcm5hdGl2ZSBzb2x1dGlvbiBmb3Igc2F2aW5nIGZpbGVzLFxuLy8gYSBiaXQgc2xvd2VyIGFuZCBkb2VzIG5vdCB3b3JrIGluIFNhZmFyaVxuLy8gZnVuY3Rpb24gZmV0Y2hCbG9iRnJvbURhdGFVUkwgKGRhdGFVUkwpIHtcbi8vICAgcmV0dXJuIHdpbmRvdy5mZXRjaChkYXRhVVJMKS50aGVuKHJlcyA9PiByZXMuYmxvYigpKTtcbi8vIH1cblxuY29uc3Qgc3VwcG9ydGVkRW5jb2RpbmdzID0gW1xuICAnaW1hZ2UvcG5nJyxcbiAgJ2ltYWdlL2pwZWcnLFxuICAnaW1hZ2Uvd2VicCdcbl07XG5cbmZ1bmN0aW9uIHN0cmVhbSAoaXNTdGFydCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgb3B0cyA9IGFzc2lnbih7fSwgZGVmYXVsdEV4dHMsIG9wdHMpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gcmVzb2x2ZUZpbGVuYW1lKE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtcbiAgICAgIGV4dGVuc2lvbjogJycsXG4gICAgICBmcmFtZTogdW5kZWZpbmVkXG4gICAgfSkpO1xuICAgIGNvbnN0IGZ1bmMgPSBpc1N0YXJ0ID8gJ3N0cmVhbVN0YXJ0JyA6ICdzdHJlYW1FbmQnO1xuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGlmIChjbGllbnQgJiYgY2xpZW50Lm91dHB1dCAmJiB0eXBlb2YgY2xpZW50W2Z1bmNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gY2xpZW50W2Z1bmNdKGFzc2lnbih7fSwgb3B0cywgeyBmaWxlbmFtZSB9KSlcbiAgICAgICAgLnRoZW4oZXYgPT4gcmVzb2x2ZShldikpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZSh7IGZpbGVuYW1lLCBjbGllbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1TdGFydCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBzdHJlYW0odHJ1ZSwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1FbmQgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gc3RyZWFtKGZhbHNlLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydENhbnZhcyAoY2FudmFzLCBvcHQgPSB7fSkge1xuICBjb25zdCBlbmNvZGluZyA9IG9wdC5lbmNvZGluZyB8fCAnaW1hZ2UvcG5nJztcbiAgaWYgKCFzdXBwb3J0ZWRFbmNvZGluZ3MuaW5jbHVkZXMoZW5jb2RpbmcpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2FudmFzIGVuY29kaW5nICR7ZW5jb2Rpbmd9YCk7XG4gIGxldCBleHRlbnNpb24gPSAoZW5jb2Rpbmcuc3BsaXQoJy8nKVsxXSB8fCAnJykucmVwbGFjZSgvanBlZy9pLCAnanBnJyk7XG4gIGlmIChleHRlbnNpb24pIGV4dGVuc2lvbiA9IGAuJHtleHRlbnNpb259YC50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4ge1xuICAgIGV4dGVuc2lvbixcbiAgICB0eXBlOiBlbmNvZGluZyxcbiAgICBkYXRhVVJMOiBjYW52YXMudG9EYXRhVVJMKGVuY29kaW5nLCBvcHQuZW5jb2RpbmdRdWFsaXR5KVxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCbG9iRnJvbURhdGFVUkwgKGRhdGFVUkwpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgc3BsaXRJbmRleCA9IGRhdGFVUkwuaW5kZXhPZignLCcpO1xuICAgIGlmIChzcGxpdEluZGV4ID09PSAtMSkge1xuICAgICAgcmVzb2x2ZShuZXcgd2luZG93LkJsb2IoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhc2U2NCA9IGRhdGFVUkwuc2xpY2Uoc3BsaXRJbmRleCArIDEpO1xuICAgIGNvbnN0IGJ5dGVTdHJpbmcgPSB3aW5kb3cuYXRvYihiYXNlNjQpO1xuICAgIGNvbnN0IHR5cGUgPSBkYXRhVVJMLnNsaWNlKDAsIHNwbGl0SW5kZXgpO1xuICAgIGNvbnN0IG1pbWVNYXRjaCA9IC9kYXRhOihbXjtdKykvLmV4ZWModHlwZSk7XG4gICAgY29uc3QgbWltZSA9IChtaW1lTWF0Y2ggPyBtaW1lTWF0Y2hbMV0gOiAnJykgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFiID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcbiAgICBjb25zdCBpYSA9IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXNvbHZlKG5ldyB3aW5kb3cuQmxvYihbIGFiIF0sIHsgdHlwZTogbWltZSB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZURhdGFVUkwgKGRhdGFVUkwsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlQmxvYkZyb21EYXRhVVJMKGRhdGFVUkwpXG4gICAgLnRoZW4oYmxvYiA9PiBzYXZlQmxvYihibG9iLCBvcHRzKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlQmxvYiAoYmxvYiwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBvcHRzID0gYXNzaWduKHt9LCBkZWZhdWx0RXh0cywgb3B0cyk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBvcHRzLmZpbGVuYW1lO1xuXG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgaWYgKGNsaWVudCAmJiB0eXBlb2YgY2xpZW50LnNhdmVCbG9iID09PSAnZnVuY3Rpb24nICYmIGNsaWVudC5vdXRwdXQpIHtcbiAgICAgIC8vIG5hdGl2ZSBzYXZpbmcgdXNpbmcgYSBDTEkgdG9vbFxuICAgICAgcmV0dXJuIGNsaWVudC5zYXZlQmxvYihibG9iLCBhc3NpZ24oe30sIG9wdHMsIHsgZmlsZW5hbWUgfSkpXG4gICAgICAgIC50aGVuKGV2ID0+IHJlc29sdmUoZXYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9yY2UgZG93bmxvYWRcbiAgICAgIGlmICghbGluaykge1xuICAgICAgICBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgbGluay50YXJnZXQgPSAnX2JsYW5rJztcbiAgICAgIH1cbiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgIGxpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIGxpbmsub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgbGluay5vbmNsaWNrID0gbm9vcDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgaWYgKGxpbmsucGFyZW50RWxlbWVudCkgbGluay5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxpbmspO1xuICAgICAgICAgIGxpbmsucmVtb3ZlQXR0cmlidXRlKCdocmVmJyk7XG4gICAgICAgICAgcmVzb2x2ZSh7IGZpbGVuYW1lLCBjbGllbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVGaWxlIChkYXRhLCBvcHRzID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFsgZGF0YSBdO1xuICBjb25zdCBibG9iID0gbmV3IHdpbmRvdy5CbG9iKHBhcnRzLCB7IHR5cGU6IG9wdHMudHlwZSB8fCAnJyB9KTtcbiAgcmV0dXJuIHNhdmVCbG9iKGJsb2IsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZVN0YW1wICgpIHtcbiAgY29uc3QgZGF0ZUZvcm1hdFN0ciA9IGB5eXl5Lm1tLmRkLUhILk1NLnNzYDtcbiAgcmV0dXJuIGRhdGVmb3JtYXQobmV3IERhdGUoKSwgZGF0ZUZvcm1hdFN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0RmlsZSAocHJlZml4ID0gJycsIHN1ZmZpeCA9ICcnLCBleHQpIHtcbiAgLy8gY29uc3QgZGF0ZUZvcm1hdFN0ciA9IGB5eXl5Lm1tLmRkLUhILk1NLnNzYDtcbiAgY29uc3QgZGF0ZUZvcm1hdFN0ciA9IGB5eXl5LW1tLWRkICdhdCcgaC5NTS5zcyBUVGA7XG4gIHJldHVybiBgJHtwcmVmaXh9JHtkYXRlZm9ybWF0KG5ldyBEYXRlKCksIGRhdGVGb3JtYXRTdHIpfSR7c3VmZml4fSR7ZXh0fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRmlsZW5hbWUgKG9wdCA9IHt9KSB7XG4gIG9wdCA9IGFzc2lnbih7fSwgb3B0KTtcblxuICAvLyBDdXN0b20gZmlsZW5hbWUgZnVuY3Rpb25cbiAgaWYgKHR5cGVvZiBvcHQuZmlsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBvcHQuZmlsZShvcHQpO1xuICB9IGVsc2UgaWYgKG9wdC5maWxlKSB7XG4gICAgcmV0dXJuIG9wdC5maWxlO1xuICB9XG5cbiAgbGV0IGZyYW1lID0gbnVsbDtcbiAgbGV0IGV4dGVuc2lvbiA9ICcnO1xuICBpZiAodHlwZW9mIG9wdC5leHRlbnNpb24gPT09ICdzdHJpbmcnKSBleHRlbnNpb24gPSBvcHQuZXh0ZW5zaW9uO1xuXG4gIGlmICh0eXBlb2Ygb3B0LmZyYW1lID09PSAnbnVtYmVyJykge1xuICAgIGxldCB0b3RhbEZyYW1lcztcbiAgICBpZiAodHlwZW9mIG9wdC50b3RhbEZyYW1lcyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRvdGFsRnJhbWVzID0gb3B0LnRvdGFsRnJhbWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3RhbEZyYW1lcyA9IE1hdGgubWF4KDEwMDAwLCBvcHQuZnJhbWUpO1xuICAgIH1cbiAgICBmcmFtZSA9IHBhZExlZnQoU3RyaW5nKG9wdC5mcmFtZSksIFN0cmluZyh0b3RhbEZyYW1lcykubGVuZ3RoLCAnMCcpO1xuICB9XG5cbiAgY29uc3QgbGF5ZXJTdHIgPSBpc0Zpbml0ZShvcHQudG90YWxMYXllcnMpICYmIGlzRmluaXRlKG9wdC5sYXllcikgJiYgb3B0LnRvdGFsTGF5ZXJzID4gMSA/IGAke29wdC5sYXllcn1gIDogJyc7XG4gIGlmIChmcmFtZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIFsgbGF5ZXJTdHIsIGZyYW1lIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy0nKSArIGV4dGVuc2lvbjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkZWZhdWx0RmlsZU5hbWUgPSBvcHQudGltZVN0YW1wO1xuICAgIHJldHVybiBbIG9wdC5wcmVmaXgsIG9wdC5uYW1lIHx8IGRlZmF1bHRGaWxlTmFtZSwgbGF5ZXJTdHIsIG9wdC5oYXNoLCBvcHQuc3VmZml4IF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy0nKSArIGV4dGVuc2lvbjtcbiAgfVxufVxuIiwiLy8gSGFuZGxlIHNvbWUgY29tbW9uIHR5cG9zXG5jb25zdCBjb21tb25UeXBvcyA9IHtcbiAgZGltZW5zaW9uOiAnZGltZW5zaW9ucycsXG4gIGFuaW1hdGVkOiAnYW5pbWF0ZScsXG4gIGFuaW1hdGluZzogJ2FuaW1hdGUnLFxuICB1bml0OiAndW5pdHMnLFxuICBQNTogJ3A1JyxcbiAgcGl4ZWxsYXRlZDogJ3BpeGVsYXRlZCcsXG4gIGxvb3Bpbmc6ICdsb29wJyxcbiAgcGl4ZWxQZXJJbmNoOiAncGl4ZWxzJ1xufTtcblxuLy8gSGFuZGxlIGFsbCBvdGhlciB0eXBvc1xuY29uc3QgYWxsS2V5cyA9IFtcbiAgJ2RpbWVuc2lvbnMnLCAndW5pdHMnLCAncGl4ZWxzUGVySW5jaCcsICdvcmllbnRhdGlvbicsXG4gICdzY2FsZVRvRml0JywgJ3NjYWxlVG9WaWV3JywgJ2JsZWVkJywgJ3BpeGVsUmF0aW8nLFxuICAnZXhwb3J0UGl4ZWxSYXRpbycsICdtYXhQaXhlbFJhdGlvJywgJ3NjYWxlQ29udGV4dCcsXG4gICdyZXNpemVDYW52YXMnLCAnc3R5bGVDYW52YXMnLCAnY2FudmFzJywgJ2NvbnRleHQnLCAnYXR0cmlidXRlcycsXG4gICdwYXJlbnQnLCAnZmlsZScsICduYW1lJywgJ3ByZWZpeCcsICdzdWZmaXgnLCAnYW5pbWF0ZScsICdwbGF5aW5nJyxcbiAgJ2xvb3AnLCAnZHVyYXRpb24nLCAndG90YWxGcmFtZXMnLCAnZnBzJywgJ3BsYXliYWNrUmF0ZScsICd0aW1lU2NhbGUnLFxuICAnZnJhbWUnLCAndGltZScsICdmbHVzaCcsICdwaXhlbGF0ZWQnLCAnaG90a2V5cycsICdwNScsICdpZCcsXG4gICdzY2FsZVRvRml0UGFkZGluZycsICdkYXRhJywgJ3BhcmFtcycsICdlbmNvZGluZycsICdlbmNvZGluZ1F1YWxpdHknXG5dO1xuXG4vLyBUaGlzIGlzIGZhaXJseSBvcGluaW9uYXRlZCBhbmQgZm9yY2VzIHVzZXJzIHRvIHVzZSB0aGUgJ2RhdGEnIHBhcmFtZXRlclxuLy8gaWYgdGhleSB3YW50IHRvIHBhc3MgYWxvbmcgbm9uLXNldHRpbmcgb2JqZWN0cy4uLlxuZXhwb3J0IGNvbnN0IGNoZWNrU2V0dGluZ3MgPSAoc2V0dGluZ3MpID0+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNldHRpbmdzKTtcbiAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKGtleSBpbiBjb21tb25UeXBvcykge1xuICAgICAgY29uc3QgYWN0dWFsID0gY29tbW9uVHlwb3Nba2V5XTtcbiAgICAgIGNvbnNvbGUud2FybihgW2NhbnZhcy1za2V0Y2hdIENvdWxkIG5vdCByZWNvZ25pemUgdGhlIHNldHRpbmcgXCIke2tleX1cIiwgZGlkIHlvdSBtZWFuIFwiJHthY3R1YWx9XCI/YCk7XG4gICAgfSBlbHNlIGlmICghYWxsS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFtjYW52YXMtc2tldGNoXSBDb3VsZCBub3QgcmVjb2duaXplIHRoZSBzZXR0aW5nIFwiJHtrZXl9XCJgKTtcbiAgICB9XG4gIH0pO1xufTtcbiIsImNvbnN0IGRlZmF1bHRVbml0cyA9ICdtbSc7XG5cbmNvbnN0IGRhdGEgPSBbXG4gIC8vIENvbW1vbiBQYXBlciBTaXplc1xuICAvLyAoTW9zdGx5IE5vcnRoLUFtZXJpY2FuIGJhc2VkKVxuICBbICdwb3N0Y2FyZCcsIDEwMS42LCAxNTIuNCBdLFxuICBbICdwb3N0ZXItc21hbGwnLCAyODAsIDQzMCBdLFxuICBbICdwb3N0ZXInLCA0NjAsIDYxMCBdLFxuICBbICdwb3N0ZXItbGFyZ2UnLCA2MTAsIDkxMCBdLFxuICBbICdidXNpbmVzcy1jYXJkJywgNTAuOCwgODguOSBdLFxuXG4gIC8vIFBob3RvZ3JhcGhpYyBQcmludCBQYXBlciBTaXplc1xuICBbICcycicsIDY0LCA4OSBdLFxuICBbICczcicsIDg5LCAxMjcgXSxcbiAgWyAnNHInLCAxMDIsIDE1MiBdLFxuICBbICc1cicsIDEyNywgMTc4IF0sIC8vIDXigLN4N+KAs1xuICBbICc2cicsIDE1MiwgMjAzIF0sIC8vIDbigLN4OOKAs1xuICBbICc4cicsIDIwMywgMjU0IF0sIC8vIDjigLN4MTDigLNcbiAgWyAnMTByJywgMjU0LCAzMDUgXSwgLy8gMTDigLN4MTLigLNcbiAgWyAnMTFyJywgMjc5LCAzNTYgXSwgLy8gMTHigLN4MTTigLNcbiAgWyAnMTJyJywgMzA1LCAzODEgXSxcblxuICAvLyBTdGFuZGFyZCBQYXBlciBTaXplc1xuICBbICdhMCcsIDg0MSwgMTE4OSBdLFxuICBbICdhMScsIDU5NCwgODQxIF0sXG4gIFsgJ2EyJywgNDIwLCA1OTQgXSxcbiAgWyAnYTMnLCAyOTcsIDQyMCBdLFxuICBbICdhNCcsIDIxMCwgMjk3IF0sXG4gIFsgJ2E1JywgMTQ4LCAyMTAgXSxcbiAgWyAnYTYnLCAxMDUsIDE0OCBdLFxuICBbICdhNycsIDc0LCAxMDUgXSxcbiAgWyAnYTgnLCA1MiwgNzQgXSxcbiAgWyAnYTknLCAzNywgNTIgXSxcbiAgWyAnYTEwJywgMjYsIDM3IF0sXG4gIFsgJzJhMCcsIDExODksIDE2ODIgXSxcbiAgWyAnNGEwJywgMTY4MiwgMjM3OCBdLFxuICBbICdiMCcsIDEwMDAsIDE0MTQgXSxcbiAgWyAnYjEnLCA3MDcsIDEwMDAgXSxcbiAgWyAnYjErJywgNzIwLCAxMDIwIF0sXG4gIFsgJ2IyJywgNTAwLCA3MDcgXSxcbiAgWyAnYjIrJywgNTIwLCA3MjAgXSxcbiAgWyAnYjMnLCAzNTMsIDUwMCBdLFxuICBbICdiNCcsIDI1MCwgMzUzIF0sXG4gIFsgJ2I1JywgMTc2LCAyNTAgXSxcbiAgWyAnYjYnLCAxMjUsIDE3NiBdLFxuICBbICdiNycsIDg4LCAxMjUgXSxcbiAgWyAnYjgnLCA2MiwgODggXSxcbiAgWyAnYjknLCA0NCwgNjIgXSxcbiAgWyAnYjEwJywgMzEsIDQ0IF0sXG4gIFsgJ2IxMScsIDIyLCAzMiBdLFxuICBbICdiMTInLCAxNiwgMjIgXSxcbiAgWyAnYzAnLCA5MTcsIDEyOTcgXSxcbiAgWyAnYzEnLCA2NDgsIDkxNyBdLFxuICBbICdjMicsIDQ1OCwgNjQ4IF0sXG4gIFsgJ2MzJywgMzI0LCA0NTggXSxcbiAgWyAnYzQnLCAyMjksIDMyNCBdLFxuICBbICdjNScsIDE2MiwgMjI5IF0sXG4gIFsgJ2M2JywgMTE0LCAxNjIgXSxcbiAgWyAnYzcnLCA4MSwgMTE0IF0sXG4gIFsgJ2M4JywgNTcsIDgxIF0sXG4gIFsgJ2M5JywgNDAsIDU3IF0sXG4gIFsgJ2MxMCcsIDI4LCA0MCBdLFxuICBbICdjMTEnLCAyMiwgMzIgXSxcbiAgWyAnYzEyJywgMTYsIDIyIF0sXG5cbiAgLy8gVXNlIGluY2hlcyBmb3IgTm9ydGggQW1lcmljYW4gc2l6ZXMsXG4gIC8vIGFzIGl0IHByb2R1Y2VzIGxlc3MgZmxvYXQgcHJlY2lzaW9uIGVycm9yc1xuICBbICdoYWxmLWxldHRlcicsIDUuNSwgOC41LCAnaW4nIF0sXG4gIFsgJ2xldHRlcicsIDguNSwgMTEsICdpbicgXSxcbiAgWyAnbGVnYWwnLCA4LjUsIDE0LCAnaW4nIF0sXG4gIFsgJ2p1bmlvci1sZWdhbCcsIDUsIDgsICdpbicgXSxcbiAgWyAnbGVkZ2VyJywgMTEsIDE3LCAnaW4nIF0sXG4gIFsgJ3RhYmxvaWQnLCAxMSwgMTcsICdpbicgXSxcbiAgWyAnYW5zaS1hJywgOC41LCAxMS4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktYicsIDExLjAsIDE3LjAsICdpbicgXSxcbiAgWyAnYW5zaS1jJywgMTcuMCwgMjIuMCwgJ2luJyBdLFxuICBbICdhbnNpLWQnLCAyMi4wLCAzNC4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktZScsIDM0LjAsIDQ0LjAsICdpbicgXSxcbiAgWyAnYXJjaC1hJywgOSwgMTIsICdpbicgXSxcbiAgWyAnYXJjaC1iJywgMTIsIDE4LCAnaW4nIF0sXG4gIFsgJ2FyY2gtYycsIDE4LCAyNCwgJ2luJyBdLFxuICBbICdhcmNoLWQnLCAyNCwgMzYsICdpbicgXSxcbiAgWyAnYXJjaC1lJywgMzYsIDQ4LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZTEnLCAzMCwgNDIsICdpbicgXSxcbiAgWyAnYXJjaC1lMicsIDI2LCAzOCwgJ2luJyBdLFxuICBbICdhcmNoLWUzJywgMjcsIDM5LCAnaW4nIF1cbl07XG5cbmV4cG9ydCBkZWZhdWx0IGRhdGEucmVkdWNlKChkaWN0LCBwcmVzZXQpID0+IHtcbiAgY29uc3QgaXRlbSA9IHtcbiAgICB1bml0czogcHJlc2V0WzNdIHx8IGRlZmF1bHRVbml0cyxcbiAgICBkaW1lbnNpb25zOiBbIHByZXNldFsxXSwgcHJlc2V0WzJdIF1cbiAgfTtcbiAgZGljdFtwcmVzZXRbMF1dID0gaXRlbTtcbiAgZGljdFtwcmVzZXRbMF0ucmVwbGFjZSgvLS9nLCAnICcpXSA9IGl0ZW07XG4gIHJldHVybiBkaWN0O1xufSwge30pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gYXJndW1lbnRzW2ldO1xuICAgIH1cbn07XG4iLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciB1bml0cyA9IFsgJ21tJywgJ2NtJywgJ20nLCAncGMnLCAncHQnLCAnaW4nLCAnZnQnLCAncHgnIF07XG5cbnZhciBjb252ZXJzaW9ucyA9IHtcbiAgLy8gbWV0cmljXG4gIG06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMVxuICB9LFxuICBjbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxIC8gMTAwXG4gIH0sXG4gIG1tOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDAwXG4gIH0sXG4gIC8vIGltcGVyaWFsXG4gIHB0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDcyXG4gIH0sXG4gIHBjOiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDZcbiAgfSxcbiAgaW46IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGZ0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMTJcbiAgfVxufTtcblxuY29uc3QgYW5jaG9ycyA9IHtcbiAgbWV0cmljOiB7XG4gICAgdW5pdDogJ20nLFxuICAgIHJhdGlvOiAxIC8gMC4wMjU0XG4gIH0sXG4gIGltcGVyaWFsOiB7XG4gICAgdW5pdDogJ2luJyxcbiAgICByYXRpbzogMC4wMjU0XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJvdW5kICh2YWx1ZSwgZGVjaW1hbHMpIHtcbiAgcmV0dXJuIE51bWJlcihNYXRoLnJvdW5kKHZhbHVlICsgJ2UnICsgZGVjaW1hbHMpICsgJ2UtJyArIGRlY2ltYWxzKTtcbn1cblxuZnVuY3Rpb24gY29udmVydERpc3RhbmNlICh2YWx1ZSwgZnJvbVVuaXQsIHRvVW5pdCwgb3B0cykge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhaXNGaW5pdGUodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyJyk7XG4gIGlmICghZnJvbVVuaXQgfHwgIXRvVW5pdCkgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgZnJvbSBhbmQgdG8gdW5pdHMnKTtcblxuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgdmFyIHBpeGVsc1BlckluY2ggPSBkZWZpbmVkKG9wdHMucGl4ZWxzUGVySW5jaCwgOTYpO1xuICB2YXIgcHJlY2lzaW9uID0gb3B0cy5wcmVjaXNpb247XG4gIHZhciByb3VuZFBpeGVsID0gb3B0cy5yb3VuZFBpeGVsICE9PSBmYWxzZTtcblxuICBmcm9tVW5pdCA9IGZyb21Vbml0LnRvTG93ZXJDYXNlKCk7XG4gIHRvVW5pdCA9IHRvVW5pdC50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICh1bml0cy5pbmRleE9mKGZyb21Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgZnJvbVVuaXQgKyAnXCIsIG11c3QgYmUgb25lIG9mOiAnICsgdW5pdHMuam9pbignLCAnKSk7XG4gIGlmICh1bml0cy5pbmRleE9mKHRvVW5pdCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZnJvbSB1bml0IFwiJyArIHRvVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcblxuICBpZiAoZnJvbVVuaXQgPT09IHRvVW5pdCkge1xuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY29udmVydCBmcm9tIEEgdG8gQiBzaW5jZSB0aGV5IGFyZSB0aGUgc2FtZSBhbHJlYWR5XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdmFyIHRvRmFjdG9yID0gMTtcbiAgdmFyIGZyb21GYWN0b3IgPSAxO1xuICB2YXIgaXNUb1BpeGVsID0gZmFsc2U7XG5cbiAgaWYgKGZyb21Vbml0ID09PSAncHgnKSB7XG4gICAgZnJvbUZhY3RvciA9IDEgLyBwaXhlbHNQZXJJbmNoO1xuICAgIGZyb21Vbml0ID0gJ2luJztcbiAgfVxuICBpZiAodG9Vbml0ID09PSAncHgnKSB7XG4gICAgaXNUb1BpeGVsID0gdHJ1ZTtcbiAgICB0b0ZhY3RvciA9IHBpeGVsc1BlckluY2g7XG4gICAgdG9Vbml0ID0gJ2luJztcbiAgfVxuXG4gIHZhciBmcm9tVW5pdERhdGEgPSBjb252ZXJzaW9uc1tmcm9tVW5pdF07XG4gIHZhciB0b1VuaXREYXRhID0gY29udmVyc2lvbnNbdG9Vbml0XTtcblxuICAvLyBzb3VyY2UgdG8gYW5jaG9yIGluc2lkZSBzb3VyY2UncyBzeXN0ZW1cbiAgdmFyIGFuY2hvciA9IHZhbHVlICogZnJvbVVuaXREYXRhLmZhY3RvciAqIGZyb21GYWN0b3I7XG5cbiAgLy8gaWYgc3lzdGVtcyBkaWZmZXIsIGNvbnZlcnQgb25lIHRvIGFub3RoZXJcbiAgaWYgKGZyb21Vbml0RGF0YS5zeXN0ZW0gIT09IHRvVW5pdERhdGEuc3lzdGVtKSB7XG4gICAgLy8gcmVndWxhciAnbScgdG8gJ2luJyBhbmQgc28gZm9ydGhcbiAgICBhbmNob3IgKj0gYW5jaG9yc1tmcm9tVW5pdERhdGEuc3lzdGVtXS5yYXRpbztcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBhbmNob3IgLyB0b1VuaXREYXRhLmZhY3RvciAqIHRvRmFjdG9yO1xuICBpZiAoaXNUb1BpeGVsICYmIHJvdW5kUGl4ZWwpIHtcbiAgICByZXN1bHQgPSBNYXRoLnJvdW5kKHJlc3VsdCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByZWNpc2lvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUocHJlY2lzaW9uKSkge1xuICAgIHJlc3VsdCA9IHJvdW5kKHJlc3VsdCwgcHJlY2lzaW9uKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnREaXN0YW5jZTtcbm1vZHVsZS5leHBvcnRzLnVuaXRzID0gdW5pdHM7XG4iLCJpbXBvcnQgcGFwZXJTaXplcyBmcm9tICcuL3BhcGVyLXNpemVzJztcbmltcG9ydCBjb252ZXJ0TGVuZ3RoIGZyb20gJ2NvbnZlcnQtbGVuZ3RoJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpbWVuc2lvbnNGcm9tUHJlc2V0IChkaW1lbnNpb25zLCB1bml0c1RvID0gJ3B4JywgcGl4ZWxzUGVySW5jaCA9IDcyKSB7XG4gIGlmICh0eXBlb2YgZGltZW5zaW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBrZXkgPSBkaW1lbnNpb25zLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCEoa2V5IGluIHBhcGVyU2l6ZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBkaW1lbnNpb24gcHJlc2V0IFwiJHtkaW1lbnNpb25zfVwiIGlzIG5vdCBzdXBwb3J0ZWQgb3IgY291bGQgbm90IGJlIGZvdW5kOyB0cnkgdXNpbmcgYTQsIGEzLCBwb3N0Y2FyZCwgbGV0dGVyLCBldGMuYClcbiAgICB9XG4gICAgY29uc3QgcHJlc2V0ID0gcGFwZXJTaXplc1trZXldO1xuICAgIHJldHVybiBwcmVzZXQuZGltZW5zaW9ucy5tYXAoZCA9PiB7XG4gICAgICByZXR1cm4gY29udmVydERpc3RhbmNlKGQsIHByZXNldC51bml0cywgdW5pdHNUbywgcGl4ZWxzUGVySW5jaCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRpbWVuc2lvbnM7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREaXN0YW5jZSAoZGltZW5zaW9uLCB1bml0c0Zyb20gPSAncHgnLCB1bml0c1RvID0gJ3B4JywgcGl4ZWxzUGVySW5jaCA9IDcyKSB7XG4gIHJldHVybiBjb252ZXJ0TGVuZ3RoKGRpbWVuc2lvbiwgdW5pdHNGcm9tLCB1bml0c1RvLCB7XG4gICAgcGl4ZWxzUGVySW5jaCxcbiAgICBwcmVjaXNpb246IDQsXG4gICAgcm91bmRQaXhlbDogdHJ1ZVxuICB9KTtcbn1cbiIsImltcG9ydCB7IGdldERpbWVuc2lvbnNGcm9tUHJlc2V0LCBjb252ZXJ0RGlzdGFuY2UgfSBmcm9tICcuLi9kaXN0YW5jZXMnO1xuaW1wb3J0IHsgaXNCcm93c2VyLCBkZWZpbmVkIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmZ1bmN0aW9uIGNoZWNrSWZIYXNEaW1lbnNpb25zIChzZXR0aW5ncykge1xuICBpZiAoIXNldHRpbmdzLmRpbWVuc2lvbnMpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBzZXR0aW5ncy5kaW1lbnNpb25zID09PSAnc3RyaW5nJykgcmV0dXJuIHRydWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHNldHRpbmdzLmRpbWVuc2lvbnMpICYmIHNldHRpbmdzLmRpbWVuc2lvbnMubGVuZ3RoID49IDIpIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmVudFNpemUgKHByb3BzLCBzZXR0aW5ncykge1xuICAvLyBXaGVuIG5vIHsgZGltZW5zaW9uIH0gaXMgcGFzc2VkIGluIG5vZGUsIHdlIGRlZmF1bHQgdG8gSFRNTCBjYW52YXMgc2l6ZVxuICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgcmV0dXJuIFsgMzAwLCAxNTAgXTtcbiAgfVxuXG4gIGxldCBlbGVtZW50ID0gc2V0dGluZ3MucGFyZW50IHx8IHdpbmRvdztcblxuICBpZiAoZWxlbWVudCA9PT0gd2luZG93IHx8XG4gICAgICBlbGVtZW50ID09PSBkb2N1bWVudCB8fFxuICAgICAgZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgIHJldHVybiBbIHdpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHQgXTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIFsgd2lkdGgsIGhlaWdodCBdO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc2l6ZUNhbnZhcyAocHJvcHMsIHNldHRpbmdzKSB7XG4gIGxldCB3aWR0aCwgaGVpZ2h0O1xuICBsZXQgc3R5bGVXaWR0aCwgc3R5bGVIZWlnaHQ7XG4gIGxldCBjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0O1xuXG4gIGNvbnN0IGJyb3dzZXIgPSBpc0Jyb3dzZXIoKTtcbiAgY29uc3QgZGltZW5zaW9ucyA9IHNldHRpbmdzLmRpbWVuc2lvbnM7XG4gIGNvbnN0IGhhc0RpbWVuc2lvbnMgPSBjaGVja0lmSGFzRGltZW5zaW9ucyhzZXR0aW5ncyk7XG4gIGNvbnN0IGV4cG9ydGluZyA9IHByb3BzLmV4cG9ydGluZztcbiAgbGV0IHNjYWxlVG9GaXQgPSBoYXNEaW1lbnNpb25zID8gc2V0dGluZ3Muc2NhbGVUb0ZpdCAhPT0gZmFsc2UgOiBmYWxzZTtcbiAgbGV0IHNjYWxlVG9WaWV3ID0gKCFleHBvcnRpbmcgJiYgaGFzRGltZW5zaW9ucykgPyBzZXR0aW5ncy5zY2FsZVRvVmlldyA6IHRydWU7XG4gIC8vIGluIG5vZGUsIGNhbmNlbCBib3RoIG9mIHRoZXNlIG9wdGlvbnNcbiAgaWYgKCFicm93c2VyKSBzY2FsZVRvRml0ID0gc2NhbGVUb1ZpZXcgPSBmYWxzZTtcbiAgY29uc3QgdW5pdHMgPSBzZXR0aW5ncy51bml0cztcbiAgY29uc3QgcGl4ZWxzUGVySW5jaCA9ICh0eXBlb2Ygc2V0dGluZ3MucGl4ZWxzUGVySW5jaCA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc2V0dGluZ3MucGl4ZWxzUGVySW5jaCkpID8gc2V0dGluZ3MucGl4ZWxzUGVySW5jaCA6IDcyO1xuICBjb25zdCBibGVlZCA9IGRlZmluZWQoc2V0dGluZ3MuYmxlZWQsIDApO1xuXG4gIGNvbnN0IGRldmljZVBpeGVsUmF0aW8gPSBicm93c2VyID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxO1xuICBjb25zdCBiYXNlUGl4ZWxSYXRpbyA9IHNjYWxlVG9WaWV3ID8gZGV2aWNlUGl4ZWxSYXRpbyA6IDE7XG5cbiAgbGV0IHBpeGVsUmF0aW8sIGV4cG9ydFBpeGVsUmF0aW87XG5cbiAgLy8gSWYgYSBwaXhlbCByYXRpbyBpcyBzcGVjaWZpZWQsIHdlIHdpbGwgdXNlIGl0LlxuICAvLyBPdGhlcndpc2U6XG4gIC8vICAtPiBJZiBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCB1c2UgYmFzZSByYXRpbyAoaS5lLiBzaXplIGZvciBleHBvcnQpXG4gIC8vICAtPiBJZiBubyBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCB1c2UgZGV2aWNlIHJhdGlvIChpLmUuIHNpemUgZm9yIHNjcmVlbilcbiAgaWYgKHR5cGVvZiBzZXR0aW5ncy5waXhlbFJhdGlvID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5waXhlbFJhdGlvKSkge1xuICAgIC8vIFdoZW4geyBwaXhlbFJhdGlvIH0gaXMgc3BlY2lmaWVkLCBpdCdzIGFsc28gdXNlZCBhcyBkZWZhdWx0IGV4cG9ydFBpeGVsUmF0aW8uXG4gICAgcGl4ZWxSYXRpbyA9IHNldHRpbmdzLnBpeGVsUmF0aW87XG4gICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGhhc0RpbWVuc2lvbnMpIHtcbiAgICAgIC8vIFdoZW4gYSBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCB1c2UgdGhlIGJhc2UgcmF0aW8gcmF0aGVyIHRoYW4gc2NyZWVuIHJhdGlvXG4gICAgICBwaXhlbFJhdGlvID0gYmFzZVBpeGVsUmF0aW87XG4gICAgICAvLyBEZWZhdWx0IHRvIGEgcGl4ZWwgcmF0aW8gb2YgMSBzbyB0aGF0IHlvdSBlbmQgdXAgd2l0aCB0aGUgc2FtZSBkaW1lbnNpb25cbiAgICAgIC8vIHlvdSBzcGVjaWZpZWQsIGkuZS4gWyA1MDAsIDUwMCBdIGlzIGV4cG9ydGVkIGFzIDUwMHg1MDAgcHhcbiAgICAgIGV4cG9ydFBpeGVsUmF0aW8gPSBkZWZpbmVkKHNldHRpbmdzLmV4cG9ydFBpeGVsUmF0aW8sIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCBhc3N1bWUgZnVsbC1zY3JlZW4gcmV0aW5hIHNpemluZ1xuICAgICAgcGl4ZWxSYXRpbyA9IGRldmljZVBpeGVsUmF0aW87XG4gICAgICAvLyBEZWZhdWx0IHRvIHNjcmVlbiBwaXhlbCByYXRpbywgc28gdGhhdCBpdCdzIGxpa2UgdGFraW5nIGEgZGV2aWNlIHNjcmVlbnNob3RcbiAgICAgIGV4cG9ydFBpeGVsUmF0aW8gPSBkZWZpbmVkKHNldHRpbmdzLmV4cG9ydFBpeGVsUmF0aW8sIHBpeGVsUmF0aW8pO1xuICAgIH1cbiAgfVxuXG4gIC8vIENsYW1wIHBpeGVsIHJhdGlvXG4gIGlmICh0eXBlb2Ygc2V0dGluZ3MubWF4UGl4ZWxSYXRpbyA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc2V0dGluZ3MubWF4UGl4ZWxSYXRpbykpIHtcbiAgICBwaXhlbFJhdGlvID0gTWF0aC5taW4oc2V0dGluZ3MubWF4UGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7XG4gIH1cblxuICAvLyBIYW5kbGUgZXhwb3J0IHBpeGVsIHJhdGlvXG4gIGlmIChleHBvcnRpbmcpIHtcbiAgICBwaXhlbFJhdGlvID0gZXhwb3J0UGl4ZWxSYXRpbztcbiAgfVxuXG4gIC8vIHBhcmVudFdpZHRoID0gdHlwZW9mIHBhcmVudFdpZHRoID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHROb2RlU2l6ZVswXSA6IHBhcmVudFdpZHRoO1xuICAvLyBwYXJlbnRIZWlnaHQgPSB0eXBlb2YgcGFyZW50SGVpZ2h0ID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHROb2RlU2l6ZVsxXSA6IHBhcmVudEhlaWdodDtcblxuICBsZXQgWyBwYXJlbnRXaWR0aCwgcGFyZW50SGVpZ2h0IF0gPSBnZXRQYXJlbnRTaXplKHByb3BzLCBzZXR0aW5ncyk7XG4gIGxldCB0cmltV2lkdGgsIHRyaW1IZWlnaHQ7XG5cbiAgLy8gWW91IGNhbiBzcGVjaWZ5IGEgZGltZW5zaW9ucyBpbiBwaXhlbHMgb3IgY20vbS9pbi9ldGNcbiAgaWYgKGhhc0RpbWVuc2lvbnMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBnZXREaW1lbnNpb25zRnJvbVByZXNldChkaW1lbnNpb25zLCB1bml0cywgcGl4ZWxzUGVySW5jaCk7XG4gICAgY29uc3QgaGlnaGVzdCA9IE1hdGgubWF4KHJlc3VsdFswXSwgcmVzdWx0WzFdKTtcbiAgICBjb25zdCBsb3dlc3QgPSBNYXRoLm1pbihyZXN1bHRbMF0sIHJlc3VsdFsxXSk7XG4gICAgaWYgKHNldHRpbmdzLm9yaWVudGF0aW9uKSB7XG4gICAgICBjb25zdCBsYW5kc2NhcGUgPSBzZXR0aW5ncy5vcmllbnRhdGlvbiA9PT0gJ2xhbmRzY2FwZSc7XG4gICAgICB3aWR0aCA9IGxhbmRzY2FwZSA/IGhpZ2hlc3QgOiBsb3dlc3Q7XG4gICAgICBoZWlnaHQgPSBsYW5kc2NhcGUgPyBsb3dlc3QgOiBoaWdoZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWR0aCA9IHJlc3VsdFswXTtcbiAgICAgIGhlaWdodCA9IHJlc3VsdFsxXTtcbiAgICB9XG5cbiAgICB0cmltV2lkdGggPSB3aWR0aDtcbiAgICB0cmltSGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgLy8gQXBwbHkgYmxlZWQgd2hpY2ggaXMgYXNzdW1lZCB0byBiZSBpbiB0aGUgc2FtZSB1bml0c1xuICAgIHdpZHRoICs9IGJsZWVkICogMjtcbiAgICBoZWlnaHQgKz0gYmxlZWQgKiAyO1xuICB9IGVsc2Uge1xuICAgIHdpZHRoID0gcGFyZW50V2lkdGg7XG4gICAgaGVpZ2h0ID0gcGFyZW50SGVpZ2h0O1xuICAgIHRyaW1XaWR0aCA9IHdpZHRoO1xuICAgIHRyaW1IZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICAvLyBSZWFsIHNpemUgaW4gcGl4ZWxzIGFmdGVyIFBQSSBpcyB0YWtlbiBpbnRvIGFjY291bnRcbiAgbGV0IHJlYWxXaWR0aCA9IHdpZHRoO1xuICBsZXQgcmVhbEhlaWdodCA9IGhlaWdodDtcbiAgaWYgKGhhc0RpbWVuc2lvbnMgJiYgdW5pdHMpIHtcbiAgICAvLyBDb252ZXJ0IHRvIGRpZ2l0YWwvcGl4ZWwgdW5pdHMgaWYgbmVjZXNzYXJ5XG4gICAgcmVhbFdpZHRoID0gY29udmVydERpc3RhbmNlKHdpZHRoLCB1bml0cywgJ3B4JywgcGl4ZWxzUGVySW5jaCk7XG4gICAgcmVhbEhlaWdodCA9IGNvbnZlcnREaXN0YW5jZShoZWlnaHQsIHVuaXRzLCAncHgnLCBwaXhlbHNQZXJJbmNoKTtcbiAgfVxuXG4gIC8vIEhvdyBiaWcgdG8gc2V0IHRoZSAndmlldycgb2YgdGhlIGNhbnZhcyBpbiB0aGUgYnJvd3NlciAoaS5lLiBzdHlsZSlcbiAgc3R5bGVXaWR0aCA9IE1hdGgucm91bmQocmVhbFdpZHRoKTtcbiAgc3R5bGVIZWlnaHQgPSBNYXRoLnJvdW5kKHJlYWxIZWlnaHQpO1xuXG4gIC8vIElmIHdlIHdpc2ggdG8gc2NhbGUgdGhlIHZpZXcgdG8gdGhlIGJyb3dzZXIgd2luZG93XG4gIGlmIChzY2FsZVRvRml0ICYmICFleHBvcnRpbmcgJiYgaGFzRGltZW5zaW9ucykge1xuICAgIGNvbnN0IGFzcGVjdCA9IHdpZHRoIC8gaGVpZ2h0O1xuICAgIGNvbnN0IHdpbmRvd0FzcGVjdCA9IHBhcmVudFdpZHRoIC8gcGFyZW50SGVpZ2h0O1xuICAgIGNvbnN0IHNjYWxlVG9GaXRQYWRkaW5nID0gZGVmaW5lZChzZXR0aW5ncy5zY2FsZVRvRml0UGFkZGluZywgNDApO1xuICAgIGNvbnN0IG1heFdpZHRoID0gTWF0aC5yb3VuZChwYXJlbnRXaWR0aCAtIHNjYWxlVG9GaXRQYWRkaW5nICogMik7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gTWF0aC5yb3VuZChwYXJlbnRIZWlnaHQgLSBzY2FsZVRvRml0UGFkZGluZyAqIDIpO1xuICAgIGlmIChzdHlsZVdpZHRoID4gbWF4V2lkdGggfHwgc3R5bGVIZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgIGlmICh3aW5kb3dBc3BlY3QgPiBhc3BlY3QpIHtcbiAgICAgICAgc3R5bGVIZWlnaHQgPSBtYXhIZWlnaHQ7XG4gICAgICAgIHN0eWxlV2lkdGggPSBNYXRoLnJvdW5kKHN0eWxlSGVpZ2h0ICogYXNwZWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlV2lkdGggPSBtYXhXaWR0aDtcbiAgICAgICAgc3R5bGVIZWlnaHQgPSBNYXRoLnJvdW5kKHN0eWxlV2lkdGggLyBhc3BlY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNhbnZhc1dpZHRoID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiBzdHlsZVdpZHRoKSA6IE1hdGgucm91bmQocGl4ZWxSYXRpbyAqIHJlYWxXaWR0aCk7XG4gIGNhbnZhc0hlaWdodCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChwaXhlbFJhdGlvICogc3R5bGVIZWlnaHQpIDogTWF0aC5yb3VuZChwaXhlbFJhdGlvICogcmVhbEhlaWdodCk7XG5cbiAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChzdHlsZVdpZHRoKSA6IE1hdGgucm91bmQocmVhbFdpZHRoKTtcbiAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBzY2FsZVRvVmlldyA/IE1hdGgucm91bmQoc3R5bGVIZWlnaHQpIDogTWF0aC5yb3VuZChyZWFsSGVpZ2h0KTtcblxuICBjb25zdCBzY2FsZVggPSBjYW52YXNXaWR0aCAvIHdpZHRoO1xuICBjb25zdCBzY2FsZVkgPSBjYW52YXNIZWlnaHQgLyBoZWlnaHQ7XG5cbiAgLy8gQXNzaWduIHRvIGN1cnJlbnQgcHJvcHNcbiAgcmV0dXJuIHtcbiAgICBibGVlZCxcbiAgICBwaXhlbFJhdGlvLFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBkaW1lbnNpb25zOiBbIHdpZHRoLCBoZWlnaHQgXSxcbiAgICB1bml0czogdW5pdHMgfHwgJ3B4JyxcbiAgICBzY2FsZVgsXG4gICAgc2NhbGVZLFxuICAgIHBpeGVsc1BlckluY2gsXG4gICAgdmlld3BvcnRXaWR0aCxcbiAgICB2aWV3cG9ydEhlaWdodCxcbiAgICBjYW52YXNXaWR0aCxcbiAgICBjYW52YXNIZWlnaHQsXG4gICAgdHJpbVdpZHRoLFxuICAgIHRyaW1IZWlnaHQsXG4gICAgc3R5bGVXaWR0aCxcbiAgICBzdHlsZUhlaWdodFxuICB9O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBnZXRDYW52YXNDb250ZXh0XG5mdW5jdGlvbiBnZXRDYW52YXNDb250ZXh0ICh0eXBlLCBvcHRzKSB7XG4gIGlmICh0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdXN0IHNwZWNpZnkgdHlwZSBzdHJpbmcnKVxuICB9XG5cbiAgb3B0cyA9IG9wdHMgfHwge31cblxuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyAmJiAhb3B0cy5jYW52YXMpIHtcbiAgICByZXR1cm4gbnVsbCAvLyBjaGVjayBmb3IgTm9kZVxuICB9XG5cbiAgdmFyIGNhbnZhcyA9IG9wdHMuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG4gIGlmICh0eXBlb2Ygb3B0cy53aWR0aCA9PT0gJ251bWJlcicpIHtcbiAgICBjYW52YXMud2lkdGggPSBvcHRzLndpZHRoXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlaWdodCA9PT0gJ251bWJlcicpIHtcbiAgICBjYW52YXMuaGVpZ2h0ID0gb3B0cy5oZWlnaHRcbiAgfVxuXG4gIHZhciBhdHRyaWJzID0gb3B0c1xuICB2YXIgZ2xcbiAgdHJ5IHtcbiAgICB2YXIgbmFtZXMgPSBbIHR5cGUgXVxuICAgIC8vIHByZWZpeCBHTCBjb250ZXh0c1xuICAgIGlmICh0eXBlLmluZGV4T2YoJ3dlYmdsJykgPT09IDApIHtcbiAgICAgIG5hbWVzLnB1c2goJ2V4cGVyaW1lbnRhbC0nICsgdHlwZSlcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KG5hbWVzW2ldLCBhdHRyaWJzKVxuICAgICAgaWYgKGdsKSByZXR1cm4gZ2xcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBnbCA9IG51bGxcbiAgfVxuICByZXR1cm4gKGdsIHx8IG51bGwpIC8vIGVuc3VyZSBudWxsIG9uIGZhaWxcbn1cbiIsImltcG9ydCBhc3NpZ24gZnJvbSAnb2JqZWN0LWFzc2lnbic7XG5pbXBvcnQgZ2V0Q2FudmFzQ29udGV4dCBmcm9tICdnZXQtY2FudmFzLWNvbnRleHQnO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhbnZhc0VsZW1lbnQgKCkge1xuICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJdCBhcHBlYXJzIHlvdSBhcmUgcnVuaW5nIGZyb20gTm9kZS5qcyBvciBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiBUcnkgcGFzc2luZyBpbiBhbiBleGlzdGluZyB7IGNhbnZhcyB9IGludGVyZmFjZSBpbnN0ZWFkLicpO1xuICB9XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2FudmFzIChzZXR0aW5ncyA9IHt9KSB7XG4gIGxldCBjb250ZXh0LCBjYW52YXM7XG4gIGxldCBvd25zQ2FudmFzID0gZmFsc2U7XG4gIGlmIChzZXR0aW5ncy5jYW52YXMgIT09IGZhbHNlKSB7XG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBjYW52YXMgYW5kIGNvbnRleHQgdG8gY3JlYXRlXG4gICAgY29udGV4dCA9IHNldHRpbmdzLmNvbnRleHQ7XG4gICAgaWYgKCFjb250ZXh0IHx8IHR5cGVvZiBjb250ZXh0ID09PSAnc3RyaW5nJykge1xuICAgICAgbGV0IG5ld0NhbnZhcyA9IHNldHRpbmdzLmNhbnZhcztcbiAgICAgIGlmICghbmV3Q2FudmFzKSB7XG4gICAgICAgIG5ld0NhbnZhcyA9IGNyZWF0ZUNhbnZhc0VsZW1lbnQoKTtcbiAgICAgICAgb3duc0NhbnZhcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB0eXBlID0gY29udGV4dCB8fCAnMmQnO1xuICAgICAgaWYgKHR5cGVvZiBuZXdDYW52YXMuZ2V0Q29udGV4dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzcGVjaWZpZWQgeyBjYW52YXMgfSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSBnZXRDb250ZXh0KCkgZnVuY3Rpb24sIG1heWJlIGl0IGlzIG5vdCBhIDxjYW52YXM+IHRhZz9gKTtcbiAgICAgIH1cbiAgICAgIGNvbnRleHQgPSBnZXRDYW52YXNDb250ZXh0KHR5cGUsIGFzc2lnbih7fSwgc2V0dGluZ3MuYXR0cmlidXRlcywgeyBjYW52YXM6IG5ld0NhbnZhcyB9KSk7XG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgYXQgY2FudmFzLmdldENvbnRleHQoJyR7dHlwZX0nKSAtIHRoZSBicm93c2VyIG1heSBub3Qgc3VwcG9ydCB0aGlzIGNvbnRleHQsIG9yIGEgZGlmZmVyZW50IGNvbnRleHQgbWF5IGFscmVhZHkgYmUgaW4gdXNlIHdpdGggdGhpcyBjYW52YXMuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FudmFzID0gY29udGV4dC5jYW52YXM7XG4gICAgLy8gRW5zdXJlIGNvbnRleHQgbWF0Y2hlcyB1c2VyJ3MgY2FudmFzIGV4cGVjdGF0aW9uc1xuICAgIGlmIChzZXR0aW5ncy5jYW52YXMgJiYgY2FudmFzICE9PSBzZXR0aW5ncy5jYW52YXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHsgY2FudmFzIH0gYW5kIHsgY29udGV4dCB9IHNldHRpbmdzIG11c3QgcG9pbnQgdG8gdGhlIHNhbWUgdW5kZXJseWluZyBjYW52YXMgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHBpeGVsYXRpb24gdG8gY2FudmFzIGlmIG5lY2Vzc2FyeSwgdGhpcyBpcyBtb3N0bHkgYSBjb252ZW5pZW5jZSB1dGlsaXR5XG4gICAgaWYgKHNldHRpbmdzLnBpeGVsYXRlZCkge1xuICAgICAgY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjYW52YXMuc3R5bGVbJ2ltYWdlLXJlbmRlcmluZyddID0gJ3BpeGVsYXRlZCc7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGNhbnZhcywgY29udGV4dCwgb3duc0NhbnZhcyB9O1xufVxuIiwiaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmltcG9ydCByaWdodE5vdyBmcm9tICdyaWdodC1ub3cnO1xuaW1wb3J0IGlzUHJvbWlzZSBmcm9tICdpcy1wcm9taXNlJztcbmltcG9ydCB7IGlzQnJvd3NlciwgZGVmaW5lZCwgaXNXZWJHTENvbnRleHQsIGlzQ2FudmFzLCBnZXRDbGllbnRBUEkgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCc7XG5pbXBvcnQge1xuICByZXNvbHZlRmlsZW5hbWUsXG4gIHNhdmVGaWxlLFxuICBzYXZlRGF0YVVSTCxcbiAgZ2V0VGltZVN0YW1wLFxuICBleHBvcnRDYW52YXMsXG4gIHN0cmVhbVN0YXJ0LFxuICBzdHJlYW1FbmRcbn0gZnJvbSAnLi4vc2F2ZSc7XG5pbXBvcnQgeyBjaGVja1NldHRpbmdzIH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5cbmltcG9ydCBrZXlib2FyZFNob3J0Y3V0cyBmcm9tICcuL2tleWJvYXJkU2hvcnRjdXRzJztcbmltcG9ydCByZXNpemVDYW52YXMgZnJvbSAnLi9yZXNpemVDYW52YXMnO1xuaW1wb3J0IGNyZWF0ZUNhbnZhcyBmcm9tICcuL2NyZWF0ZUNhbnZhcyc7XG5cbmNsYXNzIFNrZXRjaE1hbmFnZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5fc2V0dGluZ3MgPSB7fTtcbiAgICB0aGlzLl9wcm9wcyA9IHt9O1xuICAgIHRoaXMuX3NrZXRjaCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yYWYgPSBudWxsO1xuICAgIHRoaXMuX3JlY29yZFRpbWVvdXQgPSBudWxsO1xuXG4gICAgLy8gU29tZSBoYWNreSB0aGluZ3MgcmVxdWlyZWQgdG8gZ2V0IGFyb3VuZCBwNS5qcyBzdHJ1Y3R1cmVcbiAgICB0aGlzLl9sYXN0UmVkcmF3UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2lzUDVSZXNpemluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dHMgPSBrZXlib2FyZFNob3J0Y3V0cyh7XG4gICAgICBlbmFibGVkOiAoKSA9PiB0aGlzLnNldHRpbmdzLmhvdGtleXMgIT09IGZhbHNlLFxuICAgICAgc2F2ZTogKGV2KSA9PiB7XG4gICAgICAgIGlmIChldi5zaGlmdEtleSkge1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykge1xuICAgICAgICAgICAgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICAgICAgICAgIHRoaXMucnVuKCk7XG4gICAgICAgICAgfSBlbHNlIHRoaXMucmVjb3JkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSB7XG4gICAgICAgICAgdGhpcy5leHBvcnRGcmFtZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9nZ2xlUGxheTogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5wbGF5aW5nKSB0aGlzLnBhdXNlKCk7XG4gICAgICAgIGVsc2UgdGhpcy5wbGF5KCk7XG4gICAgICB9LFxuICAgICAgY29tbWl0OiAoZXYpID0+IHtcbiAgICAgICAgdGhpcy5leHBvcnRGcmFtZSh7IGNvbW1pdDogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2FuaW1hdGVIYW5kbGVyID0gKCkgPT4gdGhpcy5hbmltYXRlKCk7XG5cbiAgICB0aGlzLl9yZXNpemVIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMucmVzaXplKCk7XG4gICAgICAvLyBPbmx5IHJlLXJlbmRlciB3aGVuIHNpemUgYWN0dWFsbHkgY2hhbmdlc1xuICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZ2V0IHNrZXRjaCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NrZXRjaDtcbiAgfVxuXG4gIGdldCBzZXR0aW5ncyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzO1xuICB9XG5cbiAgZ2V0IHByb3BzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvcHM7XG4gIH1cblxuICBfY29tcHV0ZVBsYXloZWFkIChjdXJyZW50VGltZSwgZHVyYXRpb24pIHtcbiAgICBjb25zdCBoYXNEdXJhdGlvbiA9IHR5cGVvZiBkdXJhdGlvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoZHVyYXRpb24pO1xuICAgIHJldHVybiBoYXNEdXJhdGlvbiA/IGN1cnJlbnRUaW1lIC8gZHVyYXRpb24gOiAwO1xuICB9XG5cbiAgX2NvbXB1dGVGcmFtZSAocGxheWhlYWQsIHRpbWUsIHRvdGFsRnJhbWVzLCBmcHMpIHtcbiAgICByZXR1cm4gKGlzRmluaXRlKHRvdGFsRnJhbWVzKSAmJiB0b3RhbEZyYW1lcyA+IDEpXG4gICAgICA/IE1hdGguZmxvb3IocGxheWhlYWQgKiAodG90YWxGcmFtZXMgLSAxKSlcbiAgICAgIDogTWF0aC5mbG9vcihmcHMgKiB0aW1lKTtcbiAgfVxuXG4gIF9jb21wdXRlQ3VycmVudEZyYW1lICgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUZyYW1lKFxuICAgICAgdGhpcy5wcm9wcy5wbGF5aGVhZCwgdGhpcy5wcm9wcy50aW1lLFxuICAgICAgdGhpcy5wcm9wcy50b3RhbEZyYW1lcywgdGhpcy5wcm9wcy5mcHNcbiAgICApO1xuICB9XG5cbiAgX2dldFNpemVQcm9wcyAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogcHJvcHMud2lkdGgsXG4gICAgICBoZWlnaHQ6IHByb3BzLmhlaWdodCxcbiAgICAgIHBpeGVsUmF0aW86IHByb3BzLnBpeGVsUmF0aW8sXG4gICAgICBjYW52YXNXaWR0aDogcHJvcHMuY2FudmFzV2lkdGgsXG4gICAgICBjYW52YXNIZWlnaHQ6IHByb3BzLmNhbnZhc0hlaWdodCxcbiAgICAgIHZpZXdwb3J0V2lkdGg6IHByb3BzLnZpZXdwb3J0V2lkdGgsXG4gICAgICB2aWV3cG9ydEhlaWdodDogcHJvcHMudmlld3BvcnRIZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgcnVuICgpIHtcbiAgICBpZiAoIXRoaXMuc2tldGNoKSB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCB3YWl0IHVudGlsIHNrZXRjaCBpcyBsb2FkZWQgYmVmb3JlIHRyeWluZyB0byBwbGF5KCknKTtcblxuICAgIC8vIFN0YXJ0IGFuIGFuaW1hdGlvbiBmcmFtZSBsb29wIGlmIG5lY2Vzc2FyeVxuICAgIGlmICh0aGlzLnNldHRpbmdzLnBsYXlpbmcgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnBsYXkoKTtcbiAgICB9XG5cbiAgICAvLyBMZXQncyBsZXQgdGhpcyB3YXJuaW5nIGhhbmcgYXJvdW5kIGZvciBhIGZldyB2ZXJzaW9ucy4uLlxuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2guZGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKCdJbiBjYW52YXMtc2tldGNoQDAuMC4yMyB0aGUgZGlzcG9zZSgpIGV2ZW50IGhhcyBiZWVuIHJlbmFtZWQgdG8gdW5sb2FkKCknKTtcbiAgICB9XG5cbiAgICAvLyBJbiBjYXNlIHdlIGFyZW4ndCBwbGF5aW5nIG9yIGFuaW1hdGVkLCBtYWtlIHN1cmUgd2Ugc3RpbGwgdHJpZ2dlciBiZWdpbiBtZXNzYWdlLi4uXG4gICAgaWYgKCF0aGlzLnByb3BzLnN0YXJ0ZWQpIHtcbiAgICAgIHRoaXMuX3NpZ25hbEJlZ2luKCk7XG4gICAgICB0aGlzLnByb3BzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFJlbmRlciBhbiBpbml0aWFsIGZyYW1lXG4gICAgdGhpcy50aWNrKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIF9jYW5jZWxUaW1lb3V0cyAoKSB7XG4gICAgaWYgKHRoaXMuX3JhZiAhPSBudWxsICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpO1xuICAgICAgdGhpcy5fcmFmID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3JlY29yZFRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3JlY29yZFRpbWVvdXQpO1xuICAgICAgdGhpcy5fcmVjb3JkVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcGxheSAoKSB7XG4gICAgbGV0IGFuaW1hdGUgPSB0aGlzLnNldHRpbmdzLmFuaW1hdGU7XG4gICAgaWYgKCdhbmltYXRpb24nIGluIHRoaXMuc2V0dGluZ3MpIHtcbiAgICAgIGFuaW1hdGUgPSB0cnVlO1xuICAgICAgY29uc29sZS53YXJuKCdbY2FudmFzLXNrZXRjaF0geyBhbmltYXRpb24gfSBoYXMgYmVlbiByZW5hbWVkIHRvIHsgYW5pbWF0ZSB9Jyk7XG4gICAgfVxuICAgIGlmICghYW5pbWF0ZSkgcmV0dXJuO1xuICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tjYW52YXMtc2tldGNoXSBXQVJOOiBVc2luZyB7IGFuaW1hdGUgfSBpbiBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLnBsYXlpbmcpIHJldHVybjtcbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coJ3BsYXknLCB0aGlzLnByb3BzLnRpbWUpXG5cbiAgICAvLyBTdGFydCBhIHJlbmRlciBsb29wXG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICAgIHRoaXMuX2xhc3RUaW1lID0gcmlnaHROb3coKTtcbiAgICB0aGlzLl9yYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGVIYW5kbGVyKTtcbiAgfVxuXG4gIHBhdXNlICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yZWNvcmRpbmcpIHRoaXMuZW5kUmVjb3JkKCk7XG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICB9XG5cbiAgdG9nZ2xlUGxheSAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucGxheWluZykgdGhpcy5wYXVzZSgpO1xuICAgIGVsc2UgdGhpcy5wbGF5KCk7XG4gIH1cblxuICAvLyBTdG9wIGFuZCByZXNldCB0byBmcmFtZSB6ZXJvXG4gIHN0b3AgKCkge1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLnByb3BzLmZyYW1lID0gMDtcbiAgICB0aGlzLnByb3BzLnBsYXloZWFkID0gMDtcbiAgICB0aGlzLnByb3BzLnRpbWUgPSAwO1xuICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICB0aGlzLnByb3BzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVjb3JkICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yZWNvcmRpbmcpIHJldHVybjtcbiAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbY2FudmFzLXNrZXRjaF0gV0FSTjogUmVjb3JkaW5nIGZyb20gTm9kZS5qcyBpcyBub3QgeWV0IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcCgpO1xuICAgIHRoaXMucHJvcHMucGxheWluZyA9IHRydWU7XG4gICAgdGhpcy5wcm9wcy5yZWNvcmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZXhwb3J0T3B0cyA9IHRoaXMuX2NyZWF0ZUV4cG9ydE9wdGlvbnMoeyBzZXF1ZW5jZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxIC8gdGhpcy5wcm9wcy5mcHM7XG4gICAgLy8gUmVuZGVyIGVhY2ggZnJhbWUgaW4gdGhlIHNlcXVlbmNlXG4gICAgdGhpcy5fY2FuY2VsVGltZW91dHMoKTtcbiAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnByb3BzLnJlY29yZGluZykgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSBmcmFtZUludGVydmFsO1xuICAgICAgdGhpcy50aWNrKCk7XG4gICAgICByZXR1cm4gdGhpcy5leHBvcnRGcmFtZShleHBvcnRPcHRzKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLnByb3BzLnJlY29yZGluZykgcmV0dXJuOyAvLyB3YXMgY2FuY2VsbGVkIGJlZm9yZVxuICAgICAgICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICAgICAgICB0aGlzLnByb3BzLmZyYW1lKys7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuZnJhbWUgPCB0aGlzLnByb3BzLnRvdGFsRnJhbWVzKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLnRpbWUgKz0gZnJhbWVJbnRlcnZhbDtcbiAgICAgICAgICAgIHRoaXMucHJvcHMucGxheWhlYWQgPSB0aGlzLl9jb21wdXRlUGxheWhlYWQodGhpcy5wcm9wcy50aW1lLCB0aGlzLnByb3BzLmR1cmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29yZFRpbWVvdXQgPSBzZXRUaW1lb3V0KHRpY2ssIDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRmluaXNoZWQgcmVjb3JkaW5nJyk7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWxFbmQoKTtcbiAgICAgICAgICAgIHRoaXMuZW5kUmVjb3JkKCk7XG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMucnVuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLy8gVHJpZ2dlciBhIHN0YXJ0IGV2ZW50IGJlZm9yZSB3ZSBiZWdpbiByZWNvcmRpbmdcbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciAnYmVnaW4gcmVjb3JkJyBldmVudFxuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guYmVnaW5SZWNvcmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2guYmVnaW5SZWNvcmQocHJvcHMpKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWF0ZSBhIHN0cmVhbWluZyBzdGFydCBpZiBuZWNlc3NhcnlcbiAgICBzdHJlYW1TdGFydChleHBvcnRPcHRzKVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH0pXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgICB9KTtcbiAgfVxuXG4gIF9zaWduYWxCZWdpbiAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5iZWdpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5iZWdpbihwcm9wcykpO1xuICAgIH1cbiAgfVxuXG4gIF9zaWduYWxFbmQgKCkge1xuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guZW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmVuZChwcm9wcykpO1xuICAgIH1cbiAgfVxuXG4gIGVuZFJlY29yZCAoKSB7XG4gICAgY29uc3Qgd2FzUmVjb3JkaW5nID0gdGhpcy5wcm9wcy5yZWNvcmRpbmc7XG5cbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICAgIHRoaXMucHJvcHMucmVjb3JkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIHRoaXMucHJvcHMucGxheWluZyA9IGZhbHNlO1xuXG4gICAgLy8gdGVsbCBDTEkgdGhhdCBzdHJlYW0gaGFzIGZpbmlzaGVkXG4gICAgcmV0dXJuIHN0cmVhbUVuZCgpXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gVHJpZ2dlciAnZW5kIHJlY29yZCcgZXZlbnRcbiAgICAgICAgaWYgKHdhc1JlY29yZGluZyAmJiB0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guZW5kUmVjb3JkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5lbmRSZWNvcmQocHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBfY3JlYXRlRXhwb3J0T3B0aW9ucyAob3B0ID0ge30pIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VxdWVuY2U6IG9wdC5zZXF1ZW5jZSxcbiAgICAgIHNhdmU6IG9wdC5zYXZlLFxuICAgICAgZnBzOiB0aGlzLnByb3BzLmZwcyxcbiAgICAgIGZyYW1lOiBvcHQuc2VxdWVuY2UgPyB0aGlzLnByb3BzLmZyYW1lIDogdW5kZWZpbmVkLFxuICAgICAgZmlsZTogdGhpcy5zZXR0aW5ncy5maWxlLFxuICAgICAgbmFtZTogdGhpcy5zZXR0aW5ncy5uYW1lLFxuICAgICAgcHJlZml4OiB0aGlzLnNldHRpbmdzLnByZWZpeCxcbiAgICAgIHN1ZmZpeDogdGhpcy5zZXR0aW5ncy5zdWZmaXgsXG4gICAgICBlbmNvZGluZzogdGhpcy5zZXR0aW5ncy5lbmNvZGluZyxcbiAgICAgIGVuY29kaW5nUXVhbGl0eTogdGhpcy5zZXR0aW5ncy5lbmNvZGluZ1F1YWxpdHksXG4gICAgICB0aW1lU3RhbXA6IG9wdC50aW1lU3RhbXAgfHwgZ2V0VGltZVN0YW1wKCksXG4gICAgICB0b3RhbEZyYW1lczogaXNGaW5pdGUodGhpcy5wcm9wcy50b3RhbEZyYW1lcykgPyBNYXRoLm1heCgwLCB0aGlzLnByb3BzLnRvdGFsRnJhbWVzKSA6IDEwMDBcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0RnJhbWUgKG9wdCA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuIFByb21pc2UuYWxsKFtdKTtcbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnByZUV4cG9ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5za2V0Y2gucHJlRXhwb3J0KCk7XG4gICAgfVxuXG4gICAgLy8gT3B0aW9ucyBmb3IgZXhwb3J0IGZ1bmN0aW9uXG4gICAgbGV0IGV4cG9ydE9wdHMgPSB0aGlzLl9jcmVhdGVFeHBvcnRPcHRpb25zKG9wdCk7XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBsZXQgcCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGlmIChjbGllbnQgJiYgb3B0LmNvbW1pdCAmJiB0eXBlb2YgY2xpZW50LmNvbW1pdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgY29tbWl0T3B0cyA9IGFzc2lnbih7fSwgZXhwb3J0T3B0cyk7XG4gICAgICBjb25zdCBoYXNoID0gY2xpZW50LmNvbW1pdChjb21taXRPcHRzKTtcbiAgICAgIGlmIChpc1Byb21pc2UoaGFzaCkpIHAgPSBoYXNoO1xuICAgICAgZWxzZSBwID0gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cblxuICAgIHJldHVybiBwLnRoZW4oaGFzaCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5fZG9FeHBvcnRGcmFtZShhc3NpZ24oe30sIGV4cG9ydE9wdHMsIHsgaGFzaDogaGFzaCB8fCAnJyB9KSk7XG4gICAgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgLy8gTW9zdCBjb21tb24gdXNlY2FzZSBpcyB0byBleHBvcnQgYSBzaW5nbGUgbGF5ZXIsXG4gICAgICAvLyBzbyBsZXQncyBvcHRpbWl6ZSB0aGUgdXNlciBleHBlcmllbmNlIGZvciB0aGF0LlxuICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDEpIHJldHVybiByZXN1bHRbMF07XG4gICAgICBlbHNlIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICBfZG9FeHBvcnRGcmFtZSAoZXhwb3J0T3B0cyA9IHt9KSB7XG4gICAgdGhpcy5fcHJvcHMuZXhwb3J0aW5nID0gdHJ1ZTtcblxuICAgIC8vIFJlc2l6ZSB0byBvdXRwdXQgcmVzb2x1dGlvblxuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICAvLyBEcmF3IGF0IHRoaXMgb3V0cHV0IHJlc29sdXRpb25cbiAgICBsZXQgZHJhd1Jlc3VsdCA9IHRoaXMucmVuZGVyKCk7XG5cbiAgICAvLyBUaGUgc2VsZiBvd25lZCBjYW52YXMgKG1heSBiZSB1bmRlZmluZWQuLi4hKVxuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMucHJvcHMuY2FudmFzO1xuXG4gICAgLy8gR2V0IGxpc3Qgb2YgcmVzdWx0cyBmcm9tIHJlbmRlclxuICAgIGlmICh0eXBlb2YgZHJhd1Jlc3VsdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRyYXdSZXN1bHQgPSBbIGNhbnZhcyBdO1xuICAgIH1cbiAgICBkcmF3UmVzdWx0ID0gW10uY29uY2F0KGRyYXdSZXN1bHQpLmZpbHRlcihCb29sZWFuKTtcblxuICAgIC8vIFRyYW5zZm9ybSB0aGUgY2FudmFzL2ZpbGUgZGVzY3JpcHRvcnMgaW50byBhIGNvbnNpc3RlbnQgZm9ybWF0LFxuICAgIC8vIGFuZCBwdWxsIG91dCBhbnkgZGF0YSBVUkxzIGZyb20gY2FudmFzIGVsZW1lbnRzXG4gICAgZHJhd1Jlc3VsdCA9IGRyYXdSZXN1bHQubWFwKHJlc3VsdCA9PiB7XG4gICAgICBjb25zdCBoYXNEYXRhT2JqZWN0ID0gdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmICgnZGF0YScgaW4gcmVzdWx0IHx8ICdkYXRhVVJMJyBpbiByZXN1bHQpO1xuICAgICAgY29uc3QgZGF0YSA9IGhhc0RhdGFPYmplY3QgPyByZXN1bHQuZGF0YSA6IHJlc3VsdDtcbiAgICAgIGNvbnN0IG9wdHMgPSBoYXNEYXRhT2JqZWN0ID8gYXNzaWduKHt9LCByZXN1bHQsIHsgZGF0YSB9KSA6IHsgZGF0YSB9O1xuICAgICAgaWYgKGlzQ2FudmFzKGRhdGEpKSB7XG4gICAgICAgIGNvbnN0IGVuY29kaW5nID0gb3B0cy5lbmNvZGluZyB8fCBleHBvcnRPcHRzLmVuY29kaW5nO1xuICAgICAgICBjb25zdCBlbmNvZGluZ1F1YWxpdHkgPSBkZWZpbmVkKG9wdHMuZW5jb2RpbmdRdWFsaXR5LCBleHBvcnRPcHRzLmVuY29kaW5nUXVhbGl0eSwgMC45NSk7XG4gICAgICAgIGNvbnN0IHsgZGF0YVVSTCwgZXh0ZW5zaW9uLCB0eXBlIH0gPSBleHBvcnRDYW52YXMoZGF0YSwgeyBlbmNvZGluZywgZW5jb2RpbmdRdWFsaXR5IH0pO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihvcHRzLCB7IGRhdGFVUkwsIGV4dGVuc2lvbiwgdHlwZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvcHRzO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTm93IHJldHVybiB0byByZWd1bGFyIHJlbmRlcmluZyBtb2RlXG4gICAgdGhpcy5fcHJvcHMuZXhwb3J0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5yZXNpemUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgLy8gQW5kIG5vdyB3ZSBjYW4gc2F2ZSBlYWNoIHJlc3VsdFxuICAgIHJldHVybiBQcm9taXNlLmFsbChkcmF3UmVzdWx0Lm1hcCgocmVzdWx0LCBpLCBsYXllckxpc3QpID0+IHtcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIGlmIHJlbmRlcmluZyBtdWx0aXBsZSBsYXllcnMgd2Ugd2lsbCBnaXZlIHRoZW0gaW5kaWNlc1xuICAgICAgY29uc3QgY3VyT3B0ID0gYXNzaWduKHtcbiAgICAgICAgZXh0ZW5zaW9uOiAnJyxcbiAgICAgICAgcHJlZml4OiAnJyxcbiAgICAgICAgc3VmZml4OiAnJ1xuICAgICAgfSwgZXhwb3J0T3B0cywgcmVzdWx0LCB7XG4gICAgICAgIGxheWVyOiBpLFxuICAgICAgICB0b3RhbExheWVyczogbGF5ZXJMaXN0Lmxlbmd0aFxuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIGV4cG9ydCBpcyBleHBsaWNpdGx5IG5vdCBzYXZpbmcsIG1ha2Ugc3VyZSBub3RoaW5nIHNhdmVzXG4gICAgICAvLyBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgbGF5ZXIgc2F2ZSBvcHRpb24sIG9yIGZhbGxiYWNrIHRvIHRydWVcbiAgICAgIGNvbnN0IHNhdmVQYXJhbSA9IGV4cG9ydE9wdHMuc2F2ZSA9PT0gZmFsc2UgPyBmYWxzZSA6IHJlc3VsdC5zYXZlO1xuICAgICAgY3VyT3B0LnNhdmUgPSBzYXZlUGFyYW0gIT09IGZhbHNlO1xuXG4gICAgICAvLyBSZXNvbHZlIGEgZnVsbCBmaWxlbmFtZSBmcm9tIGFsbCB0aGUgb3B0aW9uc1xuICAgICAgY3VyT3B0LmZpbGVuYW1lID0gcmVzb2x2ZUZpbGVuYW1lKGN1ck9wdCk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHNvbWUgcGFyYW1ldGVycyB0aGF0IG1heSBiZSBhbWJpZ3VvdXMgdG8gdGhlIHVzZXJcbiAgICAgIGRlbGV0ZSBjdXJPcHQuZW5jb2Rpbmc7XG4gICAgICBkZWxldGUgY3VyT3B0LmVuY29kaW5nUXVhbGl0eTtcblxuICAgICAgLy8gQ2xlYW4gaXQgdXAgZnVydGhlciBieSBqdXN0IHJlbW92aW5nIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICAgIGZvciAobGV0IGsgaW4gY3VyT3B0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY3VyT3B0W2tdID09PSAndW5kZWZpbmVkJykgZGVsZXRlIGN1ck9wdFtrXTtcbiAgICAgIH1cblxuICAgICAgbGV0IHNhdmVQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGlmIChjdXJPcHQuc2F2ZSkge1xuICAgICAgICAvLyBXaGV0aGVyIHRvIGFjdHVhbGx5IHNhdmUgKGRvd25sb2FkKSB0aGlzIGZyYWdtZW50XG4gICAgICAgIGNvbnN0IGRhdGEgPSBjdXJPcHQuZGF0YTtcbiAgICAgICAgaWYgKGN1ck9wdC5kYXRhVVJMKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVVSTCA9IGN1ck9wdC5kYXRhVVJMO1xuICAgICAgICAgIHNhdmVQcm9taXNlID0gc2F2ZURhdGFVUkwoZGF0YVVSTCwgY3VyT3B0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzYXZlUHJvbWlzZSA9IHNhdmVGaWxlKGRhdGEsIGN1ck9wdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzYXZlUHJvbWlzZS50aGVuKHNhdmVSZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY3VyT3B0LCBzYXZlUmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pKS50aGVuKGV2ID0+IHtcbiAgICAgIGNvbnN0IHNhdmVkRXZlbnRzID0gZXYuZmlsdGVyKGUgPT4gZS5zYXZlKTtcbiAgICAgIGlmIChzYXZlZEV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIExvZyB0aGUgc2F2ZWQgZXhwb3J0c1xuICAgICAgICBjb25zdCBldmVudFdpdGhPdXRwdXQgPSBzYXZlZEV2ZW50cy5maW5kKGUgPT4gZS5vdXRwdXROYW1lKTtcbiAgICAgICAgY29uc3QgaXNDbGllbnQgPSBzYXZlZEV2ZW50cy5zb21lKGUgPT4gZS5jbGllbnQpO1xuICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IHNhdmVkRXZlbnRzLnNvbWUoZSA9PiBlLnN0cmVhbSk7XG4gICAgICAgIGxldCBpdGVtO1xuICAgICAgICAvLyBtYW55IGZpbGVzLCBqdXN0IGxvZyBob3cgbWFueSB3ZXJlIGV4cG9ydGVkXG4gICAgICAgIGlmIChzYXZlZEV2ZW50cy5sZW5ndGggPiAxKSBpdGVtID0gc2F2ZWRFdmVudHMubGVuZ3RoO1xuICAgICAgICAvLyBpbiBDTEksIHdlIGtub3cgZXhhY3QgcGF0aCBkaXJuYW1lXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50V2l0aE91dHB1dCkgaXRlbSA9IGAke2V2ZW50V2l0aE91dHB1dC5vdXRwdXROYW1lfS8ke3NhdmVkRXZlbnRzWzBdLmZpbGVuYW1lfWA7XG4gICAgICAgIC8vIGluIGJyb3dzZXIsIHdlIGNhbiBvbmx5IGtub3cgaXQgd2VudCB0byBcImJyb3dzZXIgZG93bmxvYWQgZm9sZGVyXCJcbiAgICAgICAgZWxzZSBpdGVtID0gYCR7c2F2ZWRFdmVudHNbMF0uZmlsZW5hbWV9YDtcbiAgICAgICAgbGV0IG9mU2VxID0gJyc7XG4gICAgICAgIGlmIChleHBvcnRPcHRzLnNlcXVlbmNlKSB7XG4gICAgICAgICAgY29uc3QgaGFzVG90YWxGcmFtZXMgPSBpc0Zpbml0ZSh0aGlzLnByb3BzLnRvdGFsRnJhbWVzKTtcbiAgICAgICAgICBvZlNlcSA9IGhhc1RvdGFsRnJhbWVzID8gYCAoZnJhbWUgJHtleHBvcnRPcHRzLmZyYW1lICsgMX0gLyAke3RoaXMucHJvcHMudG90YWxGcmFtZXN9KWAgOiBgIChmcmFtZSAke2V4cG9ydE9wdHMuZnJhbWV9KWA7XG4gICAgICAgIH0gZWxzZSBpZiAoc2F2ZWRFdmVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIG9mU2VxID0gYCBmaWxlc2A7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xpZW50ID0gaXNDbGllbnQgPyAnY2FudmFzLXNrZXRjaC1jbGknIDogJ2NhbnZhcy1za2V0Y2gnO1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBpc1N0cmVhbWluZyA/ICdTdHJlYW1pbmcgaW50bycgOiAnRXhwb3J0ZWQnO1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNbJHtjbGllbnR9XSVjICR7YWN0aW9ufSAlYyR7aXRlbX0lYyR7b2ZTZXF9YCwgJ2NvbG9yOiAjOGU4ZThlOycsICdjb2xvcjogaW5pdGlhbDsnLCAnZm9udC13ZWlnaHQ6IGJvbGQ7JywgJ2ZvbnQtd2VpZ2h0OiBpbml0aWFsOycpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5wb3N0RXhwb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc2tldGNoLnBvc3RFeHBvcnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBldjtcbiAgICB9KTtcbiAgfVxuXG4gIF93cmFwQ29udGV4dFNjYWxlIChjYikge1xuICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuICAgIGNiKHRoaXMucHJvcHMpO1xuICAgIHRoaXMuX3Bvc3RSZW5kZXIoKTtcbiAgfVxuXG4gIF9wcmVSZW5kZXIgKCkge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFNjYWxlIGNvbnRleHQgZm9yIHVuaXQgc2l6aW5nXG4gICAgaWYgKCF0aGlzLnByb3BzLmdsICYmIHByb3BzLmNvbnRleHQgJiYgIXByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5jb250ZXh0LnNhdmUoKTtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnNjYWxlQ29udGV4dCAhPT0gZmFsc2UpIHtcbiAgICAgICAgcHJvcHMuY29udGV4dC5zY2FsZShwcm9wcy5zY2FsZVgsIHByb3BzLnNjYWxlWSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wcy5wNSkge1xuICAgICAgcHJvcHMucDUuc2NhbGUocHJvcHMuc2NhbGVYIC8gcHJvcHMucGl4ZWxSYXRpbywgcHJvcHMuc2NhbGVZIC8gcHJvcHMucGl4ZWxSYXRpbyk7XG4gICAgfVxuICB9XG5cbiAgX3Bvc3RSZW5kZXIgKCkge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIGlmICghdGhpcy5wcm9wcy5nbCAmJiBwcm9wcy5jb250ZXh0ICYmICFwcm9wcy5wNSkge1xuICAgICAgcHJvcHMuY29udGV4dC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgLy8gRmx1c2ggYnkgZGVmYXVsdCwgdGhpcyBtYXkgYmUgcmV2aXNpdGVkIGF0IGEgbGF0ZXIgcG9pbnQuXG4gICAgLy8gV2UgZG8gdGhpcyB0byBlbnN1cmUgdG9EYXRhVVJMIGNhbiBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIuXG4gICAgLy8gTW9zdCBsaWtlbHkgYnJvd3NlcnMgYWxyZWFkeSBoYW5kbGUgdGhpcywgc28gd2UgbWF5IHJldmlzaXQgdGhpcyBhbmRcbiAgICAvLyByZW1vdmUgaXQgaWYgaXQgaW1wcm92ZXMgcGVyZm9ybWFuY2Ugd2l0aG91dCBhbnkgdXNhYmlsaXR5IGlzc3Vlcy5cbiAgICBpZiAocHJvcHMuZ2wgJiYgdGhpcy5zZXR0aW5ncy5mbHVzaCAhPT0gZmFsc2UgJiYgIXByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5nbC5mbHVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHRpY2sgKCkge1xuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2gudGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fcHJlUmVuZGVyKCk7XG4gICAgICB0aGlzLnNrZXRjaC50aWNrKHRoaXMucHJvcHMpO1xuICAgICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucDUpIHtcbiAgICAgIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnByb3BzLnA1LnJlZHJhdygpO1xuICAgICAgcmV0dXJuIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnN1Ym1pdERyYXdDYWxsKCk7XG4gICAgfVxuICB9XG5cbiAgc3VibWl0RHJhd0NhbGwgKCkge1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHJldHVybjtcblxuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLl9wcmVSZW5kZXIoKTtcblxuICAgIGxldCBkcmF3UmVzdWx0O1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IHRoaXMuc2tldGNoKHByb3BzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRyYXdSZXN1bHQgPSB0aGlzLnNrZXRjaC5yZW5kZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHRoaXMuX3Bvc3RSZW5kZXIoKTtcblxuICAgIHJldHVybiBkcmF3UmVzdWx0O1xuICB9XG5cbiAgdXBkYXRlIChvcHQgPSB7fSkge1xuICAgIC8vIEN1cnJlbnRseSB1cGRhdGUoKSBpcyBvbmx5IGZvY3VzZWQgb24gcmVzaXppbmcsXG4gICAgLy8gYnV0IGxhdGVyIHdlIHdpbGwgc3VwcG9ydCBvdGhlciBvcHRpb25zIGxpa2Ugc3dpdGNoaW5nXG4gICAgLy8gZnJhbWVzIGFuZCBzdWNoLlxuICAgIGNvbnN0IG5vdFlldFN1cHBvcnRlZCA9IFtcbiAgICAgICdhbmltYXRlJ1xuICAgIF07XG5cbiAgICBPYmplY3Qua2V5cyhvcHQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChub3RZZXRTdXBwb3J0ZWQuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb3JyeSwgdGhlIHsgJHtrZXl9IH0gb3B0aW9uIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggdXBkYXRlKCkuYCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBvbGRDYW52YXMgPSB0aGlzLl9zZXR0aW5ncy5jYW52YXM7XG4gICAgY29uc3Qgb2xkQ29udGV4dCA9IHRoaXMuX3NldHRpbmdzLmNvbnRleHQ7XG5cbiAgICAvLyBNZXJnZSBuZXcgb3B0aW9ucyBpbnRvIHNldHRpbmdzXG4gICAgZm9yIChsZXQga2V5IGluIG9wdCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7IC8vIGlnbm9yZSB1bmRlZmluZWRcbiAgICAgICAgdGhpcy5fc2V0dGluZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1lcmdlIGluIHRpbWUgcHJvcHNcbiAgICBjb25zdCB0aW1lT3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3NldHRpbmdzLCBvcHQpO1xuICAgIGlmICgndGltZScgaW4gb3B0ICYmICdmcmFtZScgaW4gb3B0KSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBzaG91bGQgc3BlY2lmeSB7IHRpbWUgfSBvciB7IGZyYW1lIH0gYnV0IG5vdCBib3RoJyk7XG4gICAgZWxzZSBpZiAoJ3RpbWUnIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLmZyYW1lO1xuICAgIGVsc2UgaWYgKCdmcmFtZScgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMudGltZTtcbiAgICBpZiAoJ2R1cmF0aW9uJyBpbiBvcHQgJiYgJ3RvdGFsRnJhbWVzJyBpbiBvcHQpIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IHsgZHVyYXRpb24gfSBvciB7IHRvdGFsRnJhbWVzIH0gYnV0IG5vdCBib3RoJyk7XG4gICAgZWxzZSBpZiAoJ2R1cmF0aW9uJyBpbiBvcHQpIGRlbGV0ZSB0aW1lT3B0cy50b3RhbEZyYW1lcztcbiAgICBlbHNlIGlmICgndG90YWxGcmFtZXMnIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLmR1cmF0aW9uO1xuXG4gICAgLy8gTWVyZ2UgaW4gdXNlciBkYXRhIHdpdGhvdXQgY29weWluZ1xuICAgIGlmICgnZGF0YScgaW4gb3B0KSB0aGlzLl9wcm9wcy5kYXRhID0gb3B0LmRhdGE7XG5cbiAgICBjb25zdCB0aW1lUHJvcHMgPSB0aGlzLmdldFRpbWVQcm9wcyh0aW1lT3B0cyk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wcm9wcywgdGltZVByb3BzKTtcblxuICAgIC8vIElmIGVpdGhlciBjYW52YXMgb3IgY29udGV4dCBpcyBjaGFuZ2VkLCB3ZSBzaG91bGQgcmUtdXBkYXRlXG4gICAgaWYgKG9sZENhbnZhcyAhPT0gdGhpcy5fc2V0dGluZ3MuY2FudmFzIHx8IG9sZENvbnRleHQgIT09IHRoaXMuX3NldHRpbmdzLmNvbnRleHQpIHtcbiAgICAgIGNvbnN0IHsgY2FudmFzLCBjb250ZXh0IH0gPSBjcmVhdGVDYW52YXModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgICB0aGlzLnByb3BzLmNhbnZhcyA9IGNhbnZhcztcbiAgICAgIHRoaXMucHJvcHMuY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgICAgIC8vIERlbGV0ZSBvciBhZGQgYSAnZ2wnIHByb3AgZm9yIGNvbnZlbmllbmNlXG4gICAgICB0aGlzLl9zZXR1cEdMS2V5KCk7XG5cbiAgICAgIC8vIFJlLW1vdW50IHRoZSBuZXcgY2FudmFzIGlmIGl0IGhhcyBubyBwYXJlbnRcbiAgICAgIHRoaXMuX2FwcGVuZENhbnZhc0lmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHRvIHN1cHBvcnQgUDUuanNcbiAgICBpZiAob3B0LnA1ICYmIHR5cGVvZiBvcHQucDUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMucHJvcHMucDUgPSBvcHQucDU7XG4gICAgICB0aGlzLnByb3BzLnA1LmRyYXcgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc1A1UmVzaXppbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdCA9IHRoaXMuc3VibWl0RHJhd0NhbGwoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHBsYXlpbmcgc3RhdGUgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKCdwbGF5aW5nJyBpbiBvcHQpIHtcbiAgICAgIGlmIChvcHQucGxheWluZykgdGhpcy5wbGF5KCk7XG4gICAgICBlbHNlIHRoaXMucGF1c2UoKTtcbiAgICB9XG5cbiAgICBjaGVja1NldHRpbmdzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIC8vIERyYXcgbmV3IGZyYW1lXG4gICAgdGhpcy5yZXNpemUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHJldHVybiB0aGlzLnByb3BzO1xuICB9XG5cbiAgcmVzaXplICgpIHtcbiAgICBjb25zdCBvbGRTaXplcyA9IHRoaXMuX2dldFNpemVQcm9wcygpO1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzO1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFJlY29tcHV0ZSBuZXcgcHJvcGVydGllcyBiYXNlZCBvbiBjdXJyZW50IHNldHVwXG4gICAgY29uc3QgbmV3UHJvcHMgPSByZXNpemVDYW52YXMocHJvcHMsIHNldHRpbmdzKTtcblxuICAgIC8vIEFzc2lnbiB0byBjdXJyZW50IHByb3BzXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wcm9wcywgbmV3UHJvcHMpO1xuXG4gICAgLy8gTm93IHdlIGFjdHVhbGx5IHVwZGF0ZSB0aGUgY2FudmFzIHdpZHRoL2hlaWdodCBhbmQgc3R5bGUgcHJvcHNcbiAgICBjb25zdCB7XG4gICAgICBwaXhlbFJhdGlvLFxuICAgICAgY2FudmFzV2lkdGgsXG4gICAgICBjYW52YXNIZWlnaHQsXG4gICAgICBzdHlsZVdpZHRoLFxuICAgICAgc3R5bGVIZWlnaHRcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFVwZGF0ZSBjYW52YXMgc2V0dGluZ3NcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLnByb3BzLmNhbnZhcztcbiAgICBpZiAoY2FudmFzICYmIHNldHRpbmdzLnJlc2l6ZUNhbnZhcyAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChwcm9wcy5wNSkge1xuICAgICAgICAvLyBQNS5qcyBzcGVjaWZpYyBlZGdlIGNhc2VcbiAgICAgICAgaWYgKGNhbnZhcy53aWR0aCAhPT0gY2FudmFzV2lkdGggfHwgY2FudmFzLmhlaWdodCAhPT0gY2FudmFzSGVpZ2h0KSB7XG4gICAgICAgICAgdGhpcy5faXNQNVJlc2l6aW5nID0gdHJ1ZTtcbiAgICAgICAgICAvLyBUaGlzIGNhdXNlcyBhIHJlLWRyYXcgOlxcIHNvIHdlIGlnbm9yZSBkcmF3cyBpbiB0aGUgbWVhbiB0aW1lLi4uIHNvcnRhIGhhY2t5XG4gICAgICAgICAgcHJvcHMucDUucGl4ZWxEZW5zaXR5KHBpeGVsUmF0aW8pO1xuICAgICAgICAgIHByb3BzLnA1LnJlc2l6ZUNhbnZhcyhjYW52YXNXaWR0aCAvIHBpeGVsUmF0aW8sIGNhbnZhc0hlaWdodCAvIHBpeGVsUmF0aW8sIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLl9pc1A1UmVzaXppbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yY2UgY2FudmFzIHNpemVcbiAgICAgICAgaWYgKGNhbnZhcy53aWR0aCAhPT0gY2FudmFzV2lkdGgpIGNhbnZhcy53aWR0aCA9IGNhbnZhc1dpZHRoO1xuICAgICAgICBpZiAoY2FudmFzLmhlaWdodCAhPT0gY2FudmFzSGVpZ2h0KSBjYW52YXMuaGVpZ2h0ID0gY2FudmFzSGVpZ2h0O1xuICAgICAgfVxuICAgICAgLy8gVXBkYXRlIGNhbnZhcyBzdHlsZVxuICAgICAgaWYgKGlzQnJvd3NlcigpICYmIHNldHRpbmdzLnN0eWxlQ2FudmFzICE9PSBmYWxzZSkge1xuICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSBgJHtzdHlsZVdpZHRofXB4YDtcbiAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGAke3N0eWxlSGVpZ2h0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXdTaXplcyA9IHRoaXMuX2dldFNpemVQcm9wcygpO1xuICAgIGxldCBjaGFuZ2VkID0gIWRlZXBFcXVhbChvbGRTaXplcywgbmV3U2l6ZXMpO1xuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLl9zaXplQ2hhbmdlZCgpO1xuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlZDtcbiAgfVxuXG4gIF9zaXplQ2hhbmdlZCAoKSB7XG4gICAgLy8gU2VuZCByZXNpemUgZXZlbnQgdG8gc2tldGNoXG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5yZXNpemUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuc2tldGNoLnJlc2l6ZSh0aGlzLnByb3BzKTtcbiAgICB9XG4gIH1cblxuICBhbmltYXRlICgpIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGxheWluZykgcmV0dXJuO1xuICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tjYW52YXMtc2tldGNoXSBXQVJOOiBBbmltYXRpb24gaW4gTm9kZS5qcyBpcyBub3QgeWV0IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9yYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGVIYW5kbGVyKTtcblxuICAgIGxldCBub3cgPSByaWdodE5vdygpO1xuXG4gICAgY29uc3QgZnBzID0gdGhpcy5wcm9wcy5mcHM7XG4gICAgY29uc3QgZnJhbWVJbnRlcnZhbE1TID0gMTAwMCAvIGZwcztcbiAgICBsZXQgZGVsdGFUaW1lTVMgPSBub3cgLSB0aGlzLl9sYXN0VGltZTtcblxuICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5wcm9wcy5kdXJhdGlvbjtcbiAgICBjb25zdCBoYXNEdXJhdGlvbiA9IHR5cGVvZiBkdXJhdGlvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoZHVyYXRpb24pO1xuXG4gICAgbGV0IGlzTmV3RnJhbWUgPSB0cnVlO1xuICAgIGNvbnN0IHBsYXliYWNrUmF0ZSA9IHRoaXMuc2V0dGluZ3MucGxheWJhY2tSYXRlO1xuICAgIGlmIChwbGF5YmFja1JhdGUgPT09ICdmaXhlZCcpIHtcbiAgICAgIGRlbHRhVGltZU1TID0gZnJhbWVJbnRlcnZhbE1TO1xuICAgIH0gZWxzZSBpZiAocGxheWJhY2tSYXRlID09PSAndGhyb3R0bGUnKSB7XG4gICAgICBpZiAoZGVsdGFUaW1lTVMgPiBmcmFtZUludGVydmFsTVMpIHtcbiAgICAgICAgbm93ID0gbm93IC0gKGRlbHRhVGltZU1TICUgZnJhbWVJbnRlcnZhbE1TKTtcbiAgICAgICAgdGhpcy5fbGFzdFRpbWUgPSBub3c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc05ld0ZyYW1lID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xhc3RUaW1lID0gbm93O1xuICAgIH1cblxuICAgIGNvbnN0IGRlbHRhVGltZSA9IGRlbHRhVGltZU1TIC8gMTAwMDtcbiAgICBsZXQgbmV3VGltZSA9IHRoaXMucHJvcHMudGltZSArIGRlbHRhVGltZSAqIHRoaXMucHJvcHMudGltZVNjYWxlO1xuXG4gICAgLy8gSGFuZGxlIHJldmVyc2UgdGltZSBzY2FsZVxuICAgIGlmIChuZXdUaW1lIDwgMCAmJiBoYXNEdXJhdGlvbikge1xuICAgICAgbmV3VGltZSA9IGR1cmF0aW9uICsgbmV3VGltZTtcbiAgICB9XG5cbiAgICAvLyBSZS1zdGFydCBhbmltYXRpb25cbiAgICBsZXQgaXNGaW5pc2hlZCA9IGZhbHNlO1xuICAgIGxldCBpc0xvb3BTdGFydCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbG9vcGluZyA9IHRoaXMuc2V0dGluZ3MubG9vcCAhPT0gZmFsc2U7XG5cbiAgICBpZiAoaGFzRHVyYXRpb24gJiYgbmV3VGltZSA+PSBkdXJhdGlvbikge1xuICAgICAgLy8gUmUtc3RhcnQgYW5pbWF0aW9uXG4gICAgICBpZiAobG9vcGluZykge1xuICAgICAgICBpc05ld0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgbmV3VGltZSA9IG5ld1RpbWUgJSBkdXJhdGlvbjtcbiAgICAgICAgaXNMb29wU3RhcnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNOZXdGcmFtZSA9IGZhbHNlO1xuICAgICAgICBuZXdUaW1lID0gZHVyYXRpb247XG4gICAgICAgIGlzRmluaXNoZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zaWduYWxFbmQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOZXdGcmFtZSkge1xuICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSBkZWx0YVRpbWU7XG4gICAgICB0aGlzLnByb3BzLnRpbWUgPSBuZXdUaW1lO1xuICAgICAgdGhpcy5wcm9wcy5wbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZChuZXdUaW1lLCBkdXJhdGlvbik7XG4gICAgICBjb25zdCBsYXN0RnJhbWUgPSB0aGlzLnByb3BzLmZyYW1lO1xuICAgICAgdGhpcy5wcm9wcy5mcmFtZSA9IHRoaXMuX2NvbXB1dGVDdXJyZW50RnJhbWUoKTtcbiAgICAgIGlmIChpc0xvb3BTdGFydCkgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIGlmIChsYXN0RnJhbWUgIT09IHRoaXMucHJvcHMuZnJhbWUpIHRoaXMudGljaygpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaXNGaW5pc2hlZCkge1xuICAgICAgdGhpcy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRpc3BhdGNoIChjYikge1xuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFcnJvcignbXVzdCBwYXNzIGZ1bmN0aW9uIGludG8gZGlzcGF0Y2goKScpO1xuICAgIGNiKHRoaXMucHJvcHMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBtb3VudCAoKSB7XG4gICAgdGhpcy5fYXBwZW5kQ2FudmFzSWZOZWVkZWQoKTtcbiAgfVxuXG4gIHVubW91bnQgKCkge1xuICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3Jlc2l6ZUhhbmRsZXIpO1xuICAgICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dHMuZGV0YWNoKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmNhbnZhcy5wYXJlbnRFbGVtZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmNhbnZhcy5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMucHJvcHMuY2FudmFzKTtcbiAgICB9XG4gIH1cblxuICBfYXBwZW5kQ2FudmFzSWZOZWVkZWQgKCkge1xuICAgIGlmICghaXNCcm93c2VyKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5wYXJlbnQgIT09IGZhbHNlICYmICh0aGlzLnByb3BzLmNhbnZhcyAmJiAhdGhpcy5wcm9wcy5jYW52YXMucGFyZW50RWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRQYXJlbnQgPSB0aGlzLnNldHRpbmdzLnBhcmVudCB8fCBkb2N1bWVudC5ib2R5O1xuICAgICAgZGVmYXVsdFBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLnByb3BzLmNhbnZhcyk7XG4gICAgfVxuICB9XG5cbiAgX3NldHVwR0xLZXkgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmNvbnRleHQpIHtcbiAgICAgIGlmIChpc1dlYkdMQ29udGV4dCh0aGlzLnByb3BzLmNvbnRleHQpKSB7XG4gICAgICAgIHRoaXMuX3Byb3BzLmdsID0gdGhpcy5wcm9wcy5jb250ZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3Byb3BzLmdsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFRpbWVQcm9wcyAoc2V0dGluZ3MgPSB7fSkge1xuICAgIC8vIEdldCB0aW1pbmcgZGF0YVxuICAgIGxldCBkdXJhdGlvbiA9IHNldHRpbmdzLmR1cmF0aW9uO1xuICAgIGxldCB0b3RhbEZyYW1lcyA9IHNldHRpbmdzLnRvdGFsRnJhbWVzO1xuICAgIGNvbnN0IHRpbWVTY2FsZSA9IGRlZmluZWQoc2V0dGluZ3MudGltZVNjYWxlLCAxKTtcbiAgICBjb25zdCBmcHMgPSBkZWZpbmVkKHNldHRpbmdzLmZwcywgMjQpO1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG4gICAgY29uc3QgaGFzVG90YWxGcmFtZXMgPSB0eXBlb2YgdG90YWxGcmFtZXMgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHRvdGFsRnJhbWVzKTtcblxuICAgIGNvbnN0IHRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uID0gaGFzRHVyYXRpb24gPyBNYXRoLmZsb29yKGZwcyAqIGR1cmF0aW9uKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkdXJhdGlvbkZyb21Ub3RhbEZyYW1lcyA9IGhhc1RvdGFsRnJhbWVzID8gKHRvdGFsRnJhbWVzIC8gZnBzKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFzRHVyYXRpb24gJiYgaGFzVG90YWxGcmFtZXMgJiYgdG90YWxGcmFtZXNGcm9tRHVyYXRpb24gIT09IHRvdGFsRnJhbWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBzaG91bGQgc3BlY2lmeSBlaXRoZXIgZHVyYXRpb24gb3IgdG90YWxGcmFtZXMsIGJ1dCBub3QgYm90aC4gT3IsIHRoZXkgbXVzdCBtYXRjaCBleGFjdGx5LicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2V0dGluZ3MuZGltZW5zaW9ucyA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNldHRpbmdzLnVuaXRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS53YXJuKGBZb3UndmUgc3BlY2lmaWVkIGEgeyB1bml0cyB9IHNldHRpbmcgYnV0IG5vIHsgZGltZW5zaW9uIH0sIHNvIHRoZSB1bml0cyB3aWxsIGJlIGlnbm9yZWQuYCk7XG4gICAgfVxuXG4gICAgdG90YWxGcmFtZXMgPSBkZWZpbmVkKHRvdGFsRnJhbWVzLCB0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiwgSW5maW5pdHkpO1xuICAgIGR1cmF0aW9uID0gZGVmaW5lZChkdXJhdGlvbiwgZHVyYXRpb25Gcm9tVG90YWxGcmFtZXMsIEluZmluaXR5KTtcblxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHNldHRpbmdzLnRpbWU7XG4gICAgY29uc3Qgc3RhcnRGcmFtZSA9IHNldHRpbmdzLmZyYW1lO1xuICAgIGNvbnN0IGhhc1N0YXJ0VGltZSA9IHR5cGVvZiBzdGFydFRpbWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHN0YXJ0VGltZSk7XG4gICAgY29uc3QgaGFzU3RhcnRGcmFtZSA9IHR5cGVvZiBzdGFydEZyYW1lID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzdGFydEZyYW1lKTtcblxuICAgIC8vIHN0YXJ0IGF0IHplcm8gdW5sZXNzIHVzZXIgc3BlY2lmaWVzIGZyYW1lIG9yIHRpbWUgKGJ1dCBub3QgYm90aCBtaXNtYXRjaGVkKVxuICAgIGxldCB0aW1lID0gMDtcbiAgICBsZXQgZnJhbWUgPSAwO1xuICAgIGxldCBwbGF5aGVhZCA9IDA7XG4gICAgaWYgKGhhc1N0YXJ0VGltZSAmJiBoYXNTdGFydEZyYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBzaG91bGQgc3BlY2lmeSBlaXRoZXIgc3RhcnQgZnJhbWUgb3IgdGltZSwgYnV0IG5vdCBib3RoLicpO1xuICAgIH0gZWxzZSBpZiAoaGFzU3RhcnRUaW1lKSB7XG4gICAgICAvLyBVc2VyIHNwZWNpZmllcyB0aW1lLCB3ZSBpbmZlciBmcmFtZXMgZnJvbSBGUFNcbiAgICAgIHRpbWUgPSBzdGFydFRpbWU7XG4gICAgICBwbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZCh0aW1lLCBkdXJhdGlvbik7XG4gICAgICBmcmFtZSA9IHRoaXMuX2NvbXB1dGVGcmFtZShcbiAgICAgICAgcGxheWhlYWQsIHRpbWUsXG4gICAgICAgIHRvdGFsRnJhbWVzLCBmcHNcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChoYXNTdGFydEZyYW1lKSB7XG4gICAgICAvLyBVc2VyIHNwZWNpZmllcyBmcmFtZSBudW1iZXIsIHdlIGluZmVyIHRpbWUgZnJvbSBGUFNcbiAgICAgIGZyYW1lID0gc3RhcnRGcmFtZTtcbiAgICAgIHRpbWUgPSBmcmFtZSAvIGZwcztcbiAgICAgIHBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKHRpbWUsIGR1cmF0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGxheWhlYWQsXG4gICAgICB0aW1lLFxuICAgICAgZnJhbWUsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRvdGFsRnJhbWVzLFxuICAgICAgZnBzLFxuICAgICAgdGltZVNjYWxlXG4gICAgfTtcbiAgfVxuXG4gIHNldHVwIChzZXR0aW5ncyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuc2tldGNoKSB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGxlIHNldHVwKCkgY2FsbHMgbm90IHlldCBzdXBwb3J0ZWQuJyk7XG5cbiAgICB0aGlzLl9zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHNldHRpbmdzLCB0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICBjaGVja1NldHRpbmdzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIC8vIEdldCBpbml0aWFsIGNhbnZhcyAmIGNvbnRleHRcbiAgICBjb25zdCB7IGNvbnRleHQsIGNhbnZhcyB9ID0gY3JlYXRlQ2FudmFzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIGNvbnN0IHRpbWVQcm9wcyA9IHRoaXMuZ2V0VGltZVByb3BzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIC8vIEluaXRpYWwgcmVuZGVyIHN0YXRlIGZlYXR1cmVzXG4gICAgdGhpcy5fcHJvcHMgPSB7XG4gICAgICAuLi50aW1lUHJvcHMsXG4gICAgICBjYW52YXMsXG4gICAgICBjb250ZXh0LFxuICAgICAgZGVsdGFUaW1lOiAwLFxuICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICBleHBvcnRpbmc6IGZhbHNlLFxuICAgICAgcGxheWluZzogZmFsc2UsXG4gICAgICByZWNvcmRpbmc6IGZhbHNlLFxuICAgICAgc2V0dGluZ3M6IHRoaXMuc2V0dGluZ3MsXG4gICAgICBkYXRhOiB0aGlzLnNldHRpbmdzLmRhdGEsXG5cbiAgICAgIC8vIEV4cG9ydCBzb21lIHNwZWNpZmljIGFjdGlvbnMgdG8gdGhlIHNrZXRjaFxuICAgICAgcmVuZGVyOiAoKSA9PiB0aGlzLnJlbmRlcigpLFxuICAgICAgdG9nZ2xlUGxheTogKCkgPT4gdGhpcy50b2dnbGVQbGF5KCksXG4gICAgICBkaXNwYXRjaDogKGNiKSA9PiB0aGlzLmRpc3BhdGNoKGNiKSxcbiAgICAgIHRpY2s6ICgpID0+IHRoaXMudGljaygpLFxuICAgICAgcmVzaXplOiAoKSA9PiB0aGlzLnJlc2l6ZSgpLFxuICAgICAgdXBkYXRlOiAob3B0KSA9PiB0aGlzLnVwZGF0ZShvcHQpLFxuICAgICAgZXhwb3J0RnJhbWU6IG9wdCA9PiB0aGlzLmV4cG9ydEZyYW1lKG9wdCksXG4gICAgICByZWNvcmQ6ICgpID0+IHRoaXMucmVjb3JkKCksXG4gICAgICBwbGF5OiAoKSA9PiB0aGlzLnBsYXkoKSxcbiAgICAgIHBhdXNlOiAoKSA9PiB0aGlzLnBhdXNlKCksXG4gICAgICBzdG9wOiAoKSA9PiB0aGlzLnN0b3AoKVxuICAgIH07XG5cbiAgICAvLyBGb3IgV2ViR0wgc2tldGNoZXMsIGEgZ2wgdmFyaWFibGUgcmVhZHMgYSBiaXQgYmV0dGVyXG4gICAgdGhpcy5fc2V0dXBHTEtleSgpO1xuXG4gICAgLy8gVHJpZ2dlciBpbml0aWFsIHJlc2l6ZSBub3cgc28gdGhhdCBjYW52YXMgaXMgYWxyZWFkeSBzaXplZFxuICAgIC8vIGJ5IHRoZSB0aW1lIHdlIGxvYWQgdGhlIHNrZXRjaFxuICAgIHRoaXMucmVzaXplKCk7XG4gIH1cblxuICBsb2FkQW5kUnVuIChjYW52YXNTa2V0Y2gsIG5ld1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMubG9hZChjYW52YXNTa2V0Y2gsIG5ld1NldHRpbmdzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMucnVuKCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9KTtcbiAgfVxuXG4gIHVubG9hZCAoKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnVubG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC51bmxvYWQocHJvcHMpKTtcbiAgICB9XG4gICAgdGhpcy5fc2tldGNoID0gbnVsbDtcbiAgfVxuXG4gIGRlc3Ryb3kgKCkge1xuICAgIHRoaXMudW5sb2FkKCk7XG4gICAgdGhpcy51bm1vdW50KCk7XG4gIH1cblxuICBsb2FkIChjcmVhdGVTa2V0Y2gsIG5ld1NldHRpbmdzKSB7XG4gICAgLy8gVXNlciBkaWRuJ3Qgc3BlY2lmeSBhIGZ1bmN0aW9uXG4gICAgaWYgKHR5cGVvZiBjcmVhdGVTa2V0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZ1bmN0aW9uIG11c3QgdGFrZSBpbiBhIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuIEV4YW1wbGU6XFxuICBjYW52YXNTa2V0Y2hlcigoKSA9PiB7IC4uLiB9LCBzZXR0aW5ncyknKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5za2V0Y2gpIHtcbiAgICAgIHRoaXMudW5sb2FkKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdTZXR0aW5ncyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMudXBkYXRlKG5ld1NldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgdHJpY2t5IGNhc2U7IHdlIHNldCB1cCB0aGUgYXV0by1zY2FsaW5nIGhlcmVcbiAgICAvLyBpbiBjYXNlIHRoZSB1c2VyIGRlY2lkZXMgdG8gcmVuZGVyIGFueXRoaW5nIHRvIHRoZSBjb250ZXh0ICpiZWZvcmUqIHRoZVxuICAgIC8vIHJlbmRlcigpIGZ1bmN0aW9uLi4uIEhvd2V2ZXIsIHVzZXJzIHNob3VsZCBpbnN0ZWFkIHVzZSBiZWdpbigpIGZ1bmN0aW9uIGZvciB0aGF0LlxuICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuXG4gICAgbGV0IHByZWxvYWQgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIC8vIEJlY2F1c2Ugb2YgUDUuanMncyB1bnVzdWFsIHN0cnVjdHVyZSwgd2UgaGF2ZSB0byBkbyBhIGJpdCBvZlxuICAgIC8vIGxpYnJhcnktc3BlY2lmaWMgY2hhbmdlcyB0byBzdXBwb3J0IGl0IHByb3Blcmx5LlxuICAgIGlmICh0aGlzLnNldHRpbmdzLnA1KSB7XG4gICAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignW2NhbnZhcy1za2V0Y2hdIEVSUk9SOiBVc2luZyBwNS5qcyBpbiBOb2RlLmpzIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHByZWxvYWQgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgbGV0IFA1Q29uc3RydWN0b3IgPSB0aGlzLnNldHRpbmdzLnA1O1xuICAgICAgICBsZXQgcHJlbG9hZDtcbiAgICAgICAgaWYgKFA1Q29uc3RydWN0b3IucDUpIHtcbiAgICAgICAgICBwcmVsb2FkID0gUDVDb25zdHJ1Y3Rvci5wcmVsb2FkO1xuICAgICAgICAgIFA1Q29uc3RydWN0b3IgPSBQNUNvbnN0cnVjdG9yLnA1O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHNrZXRjaCBzZXR1cDsgZGlzYWJsZSBsb29wLCBzZXQgc2l6aW5nLCBldGMuXG4gICAgICAgIGNvbnN0IHA1U2tldGNoID0gcDUgPT4ge1xuICAgICAgICAgIC8vIEhvb2sgaW4gcHJlbG9hZCBpZiBuZWNlc3NhcnlcbiAgICAgICAgICBpZiAocHJlbG9hZCkgcDUucHJlbG9hZCA9ICgpID0+IHByZWxvYWQocDUpO1xuICAgICAgICAgIHA1LnNldHVwID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgICAgICAgICAgY29uc3QgaXNHTCA9IHRoaXMuc2V0dGluZ3MuY29udGV4dCA9PT0gJ3dlYmdsJztcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gaXNHTCA/IHA1LldFQkdMIDogcDUuUDJEO1xuICAgICAgICAgICAgcDUubm9Mb29wKCk7XG4gICAgICAgICAgICBwNS5waXhlbERlbnNpdHkocHJvcHMucGl4ZWxSYXRpbyk7XG4gICAgICAgICAgICBwNS5jcmVhdGVDYW52YXMocHJvcHMudmlld3BvcnRXaWR0aCwgcHJvcHMudmlld3BvcnRIZWlnaHQsIHJlbmRlcmVyKTtcbiAgICAgICAgICAgIGlmIChpc0dMICYmIHRoaXMuc2V0dGluZ3MuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICBwNS5zZXRBdHRyaWJ1dGVzKHRoaXMuc2V0dGluZ3MuYXR0cmlidXRlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHsgcDUsIGNhbnZhczogcDUuY2FudmFzLCBjb250ZXh0OiBwNS5fcmVuZGVyZXIuZHJhd2luZ0NvbnRleHQgfSk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTdXBwb3J0IGdsb2JhbCBhbmQgaW5zdGFuY2UgUDUuanMgbW9kZXNcbiAgICAgICAgaWYgKHR5cGVvZiBQNUNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgbmV3IFA1Q29uc3RydWN0b3IocDVTa2V0Y2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LmNyZWF0ZUNhbnZhcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieyBwNSB9IHNldHRpbmcgaXMgcGFzc2VkIGJ1dCBjYW4ndCBmaW5kIHA1LmpzIGluIGdsb2JhbCAod2luZG93KSBzY29wZS4gTWF5YmUgeW91IGRpZCBub3QgY3JlYXRlIGl0IGdsb2JhbGx5P1xcbm5ldyBwNSgpOyAvLyA8LS0gYXR0YWNoZXMgdG8gZ2xvYmFsIHNjb3BlXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwNVNrZXRjaCh3aW5kb3cpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJlbG9hZC50aGVuKCgpID0+IHtcbiAgICAgIC8vIExvYWQgdGhlIHVzZXIncyBza2V0Y2hcbiAgICAgIGxldCBsb2FkZXIgPSBjcmVhdGVTa2V0Y2godGhpcy5wcm9wcyk7XG4gICAgICBpZiAoIWlzUHJvbWlzZShsb2FkZXIpKSB7XG4gICAgICAgIGxvYWRlciA9IFByb21pc2UucmVzb2x2ZShsb2FkZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvYWRlcjtcbiAgICB9KS50aGVuKHNrZXRjaCA9PiB7XG4gICAgICBpZiAoIXNrZXRjaCkgc2tldGNoID0ge307XG4gICAgICB0aGlzLl9za2V0Y2ggPSBza2V0Y2g7XG5cbiAgICAgIC8vIE9uY2UgdGhlIHNrZXRjaCBpcyBsb2FkZWQgd2UgY2FuIGFkZCB0aGUgZXZlbnRzXG4gICAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dHMuYXR0YWNoKCk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9yZXNpemVIYW5kbGVyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuXG4gICAgICAvLyBUaGUgaW5pdGlhbCByZXNpemUoKSBpbiB0aGUgY29uc3RydWN0b3Igd2lsbCBub3QgaGF2ZVxuICAgICAgLy8gdHJpZ2dlcmVkIGEgcmVzaXplKCkgZXZlbnQgb24gdGhlIHNrZXRjaCwgc2luY2UgaXQgd2FzIGJlZm9yZVxuICAgICAgLy8gdGhlIHNrZXRjaCB3YXMgbG9hZGVkLiBTbyB3ZSBzZW5kIHRoZSBzaWduYWwgaGVyZSwgYWxsb3dpbmdcbiAgICAgIC8vIHVzZXJzIHRvIHJlYWN0IHRvIHRoZSBpbml0aWFsIHNpemUgYmVmb3JlIGZpcnN0IHJlbmRlci5cbiAgICAgIHRoaXMuX3NpemVDaGFuZ2VkKCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgY29uc29sZS53YXJuKCdDb3VsZCBub3Qgc3RhcnQgc2tldGNoLCB0aGUgYXN5bmMgbG9hZGluZyBmdW5jdGlvbiByZWplY3RlZCB3aXRoIGFuIGVycm9yOlxcbiAgICBFcnJvcjogJyArIGVyci5tZXNzYWdlKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTa2V0Y2hNYW5hZ2VyO1xuIiwiaW1wb3J0IHsgZ2V0Q2xpZW50QVBJIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChvcHQgPSB7fSkge1xuICBjb25zdCBoYW5kbGVyID0gZXYgPT4ge1xuICAgIGlmICghb3B0LmVuYWJsZWQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgaWYgKGV2LmtleUNvZGUgPT09IDgzICYmICFldi5hbHRLZXkgJiYgKGV2Lm1ldGFLZXkgfHwgZXYuY3RybEtleSkpIHtcbiAgICAgIC8vIENtZCArIFNcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvcHQuc2F2ZShldik7XG4gICAgfSBlbHNlIGlmIChldi5rZXlDb2RlID09PSAzMikge1xuICAgICAgLy8gU3BhY2VcbiAgICAgIC8vIFRPRE86IHdoYXQgdG8gZG8gd2l0aCB0aGlzPyBrZWVwIGl0LCBvciByZW1vdmUgaXQ/XG4gICAgICBvcHQudG9nZ2xlUGxheShldik7XG4gICAgfSBlbHNlIGlmIChjbGllbnQgJiYgIWV2LmFsdEtleSAmJiBldi5rZXlDb2RlID09PSA3NSAmJiAoZXYubWV0YUtleSB8fCBldi5jdHJsS2V5KSkge1xuICAgICAgLy8gQ21kICsgSywgb25seSB3aGVuIGNhbnZhcy1za2V0Y2gtY2xpIGlzIHVzZWRcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvcHQuY29tbWl0KGV2KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYXR0YWNoID0gKCkgPT4ge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlcik7XG4gIH07XG5cbiAgY29uc3QgZGV0YWNoID0gKCkgPT4ge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlcik7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhdHRhY2gsXG4gICAgZGV0YWNoXG4gIH07XG59XG4iLCJpbXBvcnQgU2tldGNoTWFuYWdlciBmcm9tICcuL2NvcmUvU2tldGNoTWFuYWdlcic7XG5pbXBvcnQgUGFwZXJTaXplcyBmcm9tICcuL3BhcGVyLXNpemVzJztcbmltcG9ydCB7IGdldENsaWVudEFQSSwgZGVmaW5lZCB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IENBQ0hFID0gJ2hvdC1pZC1jYWNoZSc7XG5jb25zdCBydW50aW1lQ29sbGlzaW9ucyA9IFtdO1xuXG5mdW5jdGlvbiBpc0hvdFJlbG9hZCAoKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICByZXR1cm4gY2xpZW50ICYmIGNsaWVudC5ob3Q7XG59XG5cbmZ1bmN0aW9uIGNhY2hlR2V0IChpZCkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgaWYgKCFjbGllbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNsaWVudFtDQUNIRV0gPSBjbGllbnRbQ0FDSEVdIHx8IHt9O1xuICByZXR1cm4gY2xpZW50W0NBQ0hFXVtpZF07XG59XG5cbmZ1bmN0aW9uIGNhY2hlUHV0IChpZCwgZGF0YSkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgaWYgKCFjbGllbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNsaWVudFtDQUNIRV0gPSBjbGllbnRbQ0FDSEVdIHx8IHt9O1xuICBjbGllbnRbQ0FDSEVdW2lkXSA9IGRhdGE7XG59XG5cbmZ1bmN0aW9uIGdldFRpbWVQcm9wIChvbGRNYW5hZ2VyLCBuZXdTZXR0aW5ncykge1xuICAvLyBTdGF0aWMgc2tldGNoZXMgaWdub3JlIHRoZSB0aW1lIHBlcnNpc3RlbmN5XG4gIHJldHVybiBuZXdTZXR0aW5ncy5hbmltYXRlID8geyB0aW1lOiBvbGRNYW5hZ2VyLnByb3BzLnRpbWUgfSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY2FudmFzU2tldGNoIChza2V0Y2gsIHNldHRpbmdzID0ge30pIHtcbiAgaWYgKHNldHRpbmdzLnA1KSB7XG4gICAgaWYgKHNldHRpbmdzLmNhbnZhcyB8fCAoc2V0dGluZ3MuY29udGV4dCAmJiB0eXBlb2Ygc2V0dGluZ3MuY29udGV4dCAhPT0gJ3N0cmluZycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEluIHsgcDUgfSBtb2RlLCB5b3UgY2FuJ3QgcGFzcyB5b3VyIG93biBjYW52YXMgb3IgY29udGV4dCwgdW5sZXNzIHRoZSBjb250ZXh0IGlzIGEgXCJ3ZWJnbFwiIG9yIFwiMmRcIiBzdHJpbmdgKTtcbiAgICB9XG5cbiAgICAvLyBEbyBub3QgY3JlYXRlIGEgY2FudmFzIG9uIHN0YXJ0dXAsIHNpbmNlIFA1LmpzIGRvZXMgdGhhdCBmb3IgdXNcbiAgICBjb25zdCBjb250ZXh0ID0gdHlwZW9mIHNldHRpbmdzLmNvbnRleHQgPT09ICdzdHJpbmcnID8gc2V0dGluZ3MuY29udGV4dCA6IGZhbHNlO1xuICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIHsgY2FudmFzOiBmYWxzZSwgY29udGV4dCB9KTtcbiAgfVxuXG4gIGNvbnN0IGlzSG90ID0gaXNIb3RSZWxvYWQoKTtcbiAgbGV0IGhvdElEO1xuICBpZiAoaXNIb3QpIHtcbiAgICAvLyBVc2UgYSBtYWdpYyBuYW1lIGJ5IGRlZmF1bHQsIGZvcmNlIHVzZXIgdG8gZGVmaW5lIGVhY2ggc2tldGNoIGlmIHRoZXlcbiAgICAvLyByZXF1aXJlIG1vcmUgdGhhbiBvbmUgaW4gYW4gYXBwbGljYXRpb24uIE9wZW4gdG8gb3RoZXIgaWRlYXMgb24gaG93IHRvIHRhY2tsZVxuICAgIC8vIHRoaXMgYXMgd2VsbC4uLlxuICAgIGhvdElEID0gZGVmaW5lZChzZXR0aW5ncy5pZCwgJyRfX0RFRkFVTFRfQ0FOVkFTX1NLRVRDSF9JRF9fJCcpO1xuICB9XG4gIGxldCBpc0luamVjdGluZyA9IGlzSG90ICYmIHR5cGVvZiBob3RJRCA9PT0gJ3N0cmluZyc7XG5cbiAgaWYgKGlzSW5qZWN0aW5nICYmIHJ1bnRpbWVDb2xsaXNpb25zLmluY2x1ZGVzKGhvdElEKSkge1xuICAgIGNvbnNvbGUud2FybihgV2FybmluZzogWW91IGhhdmUgbXVsdGlwbGUgY2FsbHMgdG8gY2FudmFzU2tldGNoKCkgaW4gLS1ob3QgbW9kZS4gWW91IG11c3QgcGFzcyB1bmlxdWUgeyBpZCB9IHN0cmluZ3MgaW4gc2V0dGluZ3MgdG8gZW5hYmxlIGhvdCByZWxvYWQgYWNyb3NzIG11bHRpcGxlIHNrZXRjaGVzLiBgLCBob3RJRCk7XG4gICAgaXNJbmplY3RpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGxldCBwcmVsb2FkID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgaWYgKGlzSW5qZWN0aW5nKSB7XG4gICAgLy8gTWFyayB0aGlzIGFzIGFscmVhZHkgc3BvdHRlZCBpbiB0aGlzIHJ1bnRpbWUgaW5zdGFuY2VcbiAgICBydW50aW1lQ29sbGlzaW9ucy5wdXNoKGhvdElEKTtcblxuICAgIGNvbnN0IHByZXZpb3VzRGF0YSA9IGNhY2hlR2V0KGhvdElEKTtcbiAgICBpZiAocHJldmlvdXNEYXRhKSB7XG4gICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAvLyBHcmFiIG5ldyBwcm9wcyBmcm9tIG9sZCBza2V0Y2ggaW5zdGFuY2VcbiAgICAgICAgY29uc3QgbmV3UHJvcHMgPSBnZXRUaW1lUHJvcChwcmV2aW91c0RhdGEubWFuYWdlciwgc2V0dGluZ3MpO1xuICAgICAgICAvLyBEZXN0cm95IHRoZSBvbGQgaW5zdGFuY2VcbiAgICAgICAgcHJldmlvdXNEYXRhLm1hbmFnZXIuZGVzdHJveSgpO1xuICAgICAgICAvLyBQYXNzIGFsb25nIG5ldyBwcm9wc1xuICAgICAgICByZXR1cm4gbmV3UHJvcHM7XG4gICAgICB9O1xuXG4gICAgICAvLyBNb3ZlIGFsb25nIHRoZSBuZXh0IGRhdGEuLi5cbiAgICAgIHByZWxvYWQgPSBwcmV2aW91c0RhdGEubG9hZC50aGVuKG5leHQpLmNhdGNoKG5leHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcmVsb2FkLnRoZW4obmV3UHJvcHMgPT4ge1xuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgU2tldGNoTWFuYWdlcigpO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHNrZXRjaCkge1xuICAgICAgLy8gTWVyZ2Ugd2l0aCBpbmNvbWluZyBkYXRhXG4gICAgICBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHNldHRpbmdzLCBuZXdQcm9wcyk7XG5cbiAgICAgIC8vIEFwcGx5IHNldHRpbmdzIGFuZCBjcmVhdGUgYSBjYW52YXNcbiAgICAgIG1hbmFnZXIuc2V0dXAoc2V0dGluZ3MpO1xuXG4gICAgICAvLyBNb3VudCB0byBET01cbiAgICAgIG1hbmFnZXIubW91bnQoKTtcblxuICAgICAgLy8gbG9hZCB0aGUgc2tldGNoIGZpcnN0XG4gICAgICByZXN1bHQgPSBtYW5hZ2VyLmxvYWRBbmRSdW4oc2tldGNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gUHJvbWlzZS5yZXNvbHZlKG1hbmFnZXIpO1xuICAgIH1cbiAgICBpZiAoaXNJbmplY3RpbmcpIHtcbiAgICAgIGNhY2hlUHV0KGhvdElELCB7IGxvYWQ6IHJlc3VsdCwgbWFuYWdlciB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbi8vIFRPRE86IEZpZ3VyZSBvdXQgYSBuaWNlIHdheSB0byBleHBvcnQgdGhpbmdzLlxuY2FudmFzU2tldGNoLmNhbnZhc1NrZXRjaCA9IGNhbnZhc1NrZXRjaDtcbmNhbnZhc1NrZXRjaC5QYXBlclNpemVzID0gUGFwZXJTaXplcztcblxuZXhwb3J0IGRlZmF1bHQgY2FudmFzU2tldGNoO1xuIiwidmFyIGNsb25lID0gKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfaW5zdGFuY2VvZihvYmosIHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUgIT0gbnVsbCAmJiBvYmogaW5zdGFuY2VvZiB0eXBlO1xufVxuXG52YXIgbmF0aXZlTWFwO1xudHJ5IHtcbiAgbmF0aXZlTWFwID0gTWFwO1xufSBjYXRjaChfKSB7XG4gIC8vIG1heWJlIGEgcmVmZXJlbmNlIGVycm9yIGJlY2F1c2Ugbm8gYE1hcGAuIEdpdmUgaXQgYSBkdW1teSB2YWx1ZSB0aGF0IG5vXG4gIC8vIHZhbHVlIHdpbGwgZXZlciBiZSBhbiBpbnN0YW5jZW9mLlxuICBuYXRpdmVNYXAgPSBmdW5jdGlvbigpIHt9O1xufVxuXG52YXIgbmF0aXZlU2V0O1xudHJ5IHtcbiAgbmF0aXZlU2V0ID0gU2V0O1xufSBjYXRjaChfKSB7XG4gIG5hdGl2ZVNldCA9IGZ1bmN0aW9uKCkge307XG59XG5cbnZhciBuYXRpdmVQcm9taXNlO1xudHJ5IHtcbiAgbmF0aXZlUHJvbWlzZSA9IFByb21pc2U7XG59IGNhdGNoKF8pIHtcbiAgbmF0aXZlUHJvbWlzZSA9IGZ1bmN0aW9uKCkge307XG59XG5cbi8qKlxuICogQ2xvbmVzIChjb3BpZXMpIGFuIE9iamVjdCB1c2luZyBkZWVwIGNvcHlpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGRlZmF1bHQsIGJ1dCBpZiB5b3UgYXJlIGNlcnRhaW5cbiAqIHRoZXJlIGFyZSBubyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHlvdXIgb2JqZWN0LCB5b3UgY2FuIHNhdmUgc29tZSBDUFUgdGltZVxuICogYnkgY2FsbGluZyBjbG9uZShvYmosIGZhbHNlKS5cbiAqXG4gKiBDYXV0aW9uOiBpZiBgY2lyY3VsYXJgIGlzIGZhbHNlIGFuZCBgcGFyZW50YCBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2VzLFxuICogeW91ciBwcm9ncmFtIG1heSBlbnRlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBjcmFzaC5cbiAqXG4gKiBAcGFyYW0gYHBhcmVudGAgLSB0aGUgb2JqZWN0IHRvIGJlIGNsb25lZFxuICogQHBhcmFtIGBjaXJjdWxhcmAgLSBzZXQgdG8gdHJ1ZSBpZiB0aGUgb2JqZWN0IHRvIGJlIGNsb25lZCBtYXkgY29udGFpblxuICogICAgY2lyY3VsYXIgcmVmZXJlbmNlcy4gKG9wdGlvbmFsIC0gdHJ1ZSBieSBkZWZhdWx0KVxuICogQHBhcmFtIGBkZXB0aGAgLSBzZXQgdG8gYSBudW1iZXIgaWYgdGhlIG9iamVjdCBpcyBvbmx5IHRvIGJlIGNsb25lZCB0b1xuICogICAgYSBwYXJ0aWN1bGFyIGRlcHRoLiAob3B0aW9uYWwgLSBkZWZhdWx0cyB0byBJbmZpbml0eSlcbiAqIEBwYXJhbSBgcHJvdG90eXBlYCAtIHNldHMgdGhlIHByb3RvdHlwZSB0byBiZSB1c2VkIHdoZW4gY2xvbmluZyBhbiBvYmplY3QuXG4gKiAgICAob3B0aW9uYWwgLSBkZWZhdWx0cyB0byBwYXJlbnQgcHJvdG90eXBlKS5cbiAqIEBwYXJhbSBgaW5jbHVkZU5vbkVudW1lcmFibGVgIC0gc2V0IHRvIHRydWUgaWYgdGhlIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAqICAgIHNob3VsZCBiZSBjbG9uZWQgYXMgd2VsbC4gTm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBvbiB0aGUgcHJvdG90eXBlXG4gKiAgICBjaGFpbiB3aWxsIGJlIGlnbm9yZWQuIChvcHRpb25hbCAtIGZhbHNlIGJ5IGRlZmF1bHQpXG4qL1xuZnVuY3Rpb24gY2xvbmUocGFyZW50LCBjaXJjdWxhciwgZGVwdGgsIHByb3RvdHlwZSwgaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgaWYgKHR5cGVvZiBjaXJjdWxhciA9PT0gJ29iamVjdCcpIHtcbiAgICBkZXB0aCA9IGNpcmN1bGFyLmRlcHRoO1xuICAgIHByb3RvdHlwZSA9IGNpcmN1bGFyLnByb3RvdHlwZTtcbiAgICBpbmNsdWRlTm9uRW51bWVyYWJsZSA9IGNpcmN1bGFyLmluY2x1ZGVOb25FbnVtZXJhYmxlO1xuICAgIGNpcmN1bGFyID0gY2lyY3VsYXIuY2lyY3VsYXI7XG4gIH1cbiAgLy8gbWFpbnRhaW4gdHdvIGFycmF5cyBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcywgd2hlcmUgY29ycmVzcG9uZGluZyBwYXJlbnRzXG4gIC8vIGFuZCBjaGlsZHJlbiBoYXZlIHRoZSBzYW1lIGluZGV4XG4gIHZhciBhbGxQYXJlbnRzID0gW107XG4gIHZhciBhbGxDaGlsZHJlbiA9IFtdO1xuXG4gIHZhciB1c2VCdWZmZXIgPSB0eXBlb2YgQnVmZmVyICE9ICd1bmRlZmluZWQnO1xuXG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT0gJ3VuZGVmaW5lZCcpXG4gICAgY2lyY3VsYXIgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZGVwdGggPT0gJ3VuZGVmaW5lZCcpXG4gICAgZGVwdGggPSBJbmZpbml0eTtcblxuICAvLyByZWN1cnNlIHRoaXMgZnVuY3Rpb24gc28gd2UgZG9uJ3QgcmVzZXQgYWxsUGFyZW50cyBhbmQgYWxsQ2hpbGRyZW5cbiAgZnVuY3Rpb24gX2Nsb25lKHBhcmVudCwgZGVwdGgpIHtcbiAgICAvLyBjbG9uaW5nIG51bGwgYWx3YXlzIHJldHVybnMgbnVsbFxuICAgIGlmIChwYXJlbnQgPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGlmIChkZXB0aCA9PT0gMClcbiAgICAgIHJldHVybiBwYXJlbnQ7XG5cbiAgICB2YXIgY2hpbGQ7XG4gICAgdmFyIHByb3RvO1xuICAgIGlmICh0eXBlb2YgcGFyZW50ICE9ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cblxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZU1hcCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZU1hcCgpO1xuICAgIH0gZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVTZXQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBuYXRpdmVTZXQoKTtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlUHJvbWlzZSkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZVByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBwYXJlbnQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgIHJlc29sdmUoX2Nsb25lKHZhbHVlLCBkZXB0aCAtIDEpKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KF9jbG9uZShlcnIsIGRlcHRoIC0gMSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc0FycmF5KHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gW107XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzUmVnRXhwKHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IFJlZ0V4cChwYXJlbnQuc291cmNlLCBfX2dldFJlZ0V4cEZsYWdzKHBhcmVudCkpO1xuICAgICAgaWYgKHBhcmVudC5sYXN0SW5kZXgpIGNoaWxkLmxhc3RJbmRleCA9IHBhcmVudC5sYXN0SW5kZXg7XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzRGF0ZShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBEYXRlKHBhcmVudC5nZXRUaW1lKCkpO1xuICAgIH0gZWxzZSBpZiAodXNlQnVmZmVyICYmIEJ1ZmZlci5pc0J1ZmZlcihwYXJlbnQpKSB7XG4gICAgICBpZiAoQnVmZmVyLmFsbG9jVW5zYWZlKSB7XG4gICAgICAgIC8vIE5vZGUuanMgPj0gNC41LjBcbiAgICAgICAgY2hpbGQgPSBCdWZmZXIuYWxsb2NVbnNhZmUocGFyZW50Lmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPbGRlciBOb2RlLmpzIHZlcnNpb25zXG4gICAgICAgIGNoaWxkID0gbmV3IEJ1ZmZlcihwYXJlbnQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudC5jb3B5KGNoaWxkKTtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgRXJyb3IpKSB7XG4gICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcbiAgICAgICAgcHJvdG8gPSBwcm90b3R5cGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNpcmN1bGFyKSB7XG4gICAgICB2YXIgaW5kZXggPSBhbGxQYXJlbnRzLmluZGV4T2YocGFyZW50KTtcblxuICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICAgIHJldHVybiBhbGxDaGlsZHJlbltpbmRleF07XG4gICAgICB9XG4gICAgICBhbGxQYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgIGFsbENoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZU1hcCkpIHtcbiAgICAgIHBhcmVudC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgdmFyIGtleUNoaWxkID0gX2Nsb25lKGtleSwgZGVwdGggLSAxKTtcbiAgICAgICAgdmFyIHZhbHVlQ2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLnNldChrZXlDaGlsZCwgdmFsdWVDaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlU2V0KSkge1xuICAgICAgcGFyZW50LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGVudHJ5Q2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLmFkZChlbnRyeUNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgaW4gcGFyZW50KSB7XG4gICAgICB2YXIgYXR0cnM7XG4gICAgICBpZiAocHJvdG8pIHtcbiAgICAgICAgYXR0cnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJzICYmIGF0dHJzLnNldCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY2hpbGRbaV0gPSBfY2xvbmUocGFyZW50W2ldLCBkZXB0aCAtIDEpO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGNsb25pbmcgYSBzeW1ib2wgYmVjYXVzZSBpdCBpcyBhIHByaW1pdGl2ZSxcbiAgICAgICAgLy8gbGlrZSBhIG51bWJlciBvciBzdHJpbmcuXG4gICAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xzW2ldO1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBzeW1ib2wpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlICYmICFpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkW3N5bWJvbF0gPSBfY2xvbmUocGFyZW50W3N5bWJvbF0sIGRlcHRoIC0gMSk7XG4gICAgICAgIGlmICghZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBzeW1ib2wsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgICAgIHZhciBhbGxQcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsUHJvcGVydHlOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gYWxsUHJvcGVydHlOYW1lc1tpXTtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRbcHJvcGVydHlOYW1lXSA9IF9jbG9uZShwYXJlbnRbcHJvcGVydHlOYW1lXSwgZGVwdGggLSAxKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBwcm9wZXJ0eU5hbWUsIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICByZXR1cm4gX2Nsb25lKHBhcmVudCwgZGVwdGgpO1xufVxuXG4vKipcbiAqIFNpbXBsZSBmbGF0IGNsb25lIHVzaW5nIHByb3RvdHlwZSwgYWNjZXB0cyBvbmx5IG9iamVjdHMsIHVzZWZ1bGwgZm9yIHByb3BlcnR5XG4gKiBvdmVycmlkZSBvbiBGTEFUIGNvbmZpZ3VyYXRpb24gb2JqZWN0IChubyBuZXN0ZWQgcHJvcHMpLlxuICpcbiAqIFVTRSBXSVRIIENBVVRJT04hIFRoaXMgbWF5IG5vdCBiZWhhdmUgYXMgeW91IHdpc2ggaWYgeW91IGRvIG5vdCBrbm93IGhvdyB0aGlzXG4gKiB3b3Jrcy5cbiAqL1xuY2xvbmUuY2xvbmVQcm90b3R5cGUgPSBmdW5jdGlvbiBjbG9uZVByb3RvdHlwZShwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgYyA9IGZ1bmN0aW9uICgpIHt9O1xuICBjLnByb3RvdHlwZSA9IHBhcmVudDtcbiAgcmV0dXJuIG5ldyBjKCk7XG59O1xuXG4vLyBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIF9fb2JqVG9TdHIobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuY2xvbmUuX19vYmpUb1N0ciA9IF9fb2JqVG9TdHI7XG5cbmZ1bmN0aW9uIF9faXNEYXRlKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBfX29ialRvU3RyKG8pID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5jbG9uZS5fX2lzRGF0ZSA9IF9faXNEYXRlO1xuXG5mdW5jdGlvbiBfX2lzQXJyYXkobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5jbG9uZS5fX2lzQXJyYXkgPSBfX2lzQXJyYXk7XG5cbmZ1bmN0aW9uIF9faXNSZWdFeHAobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuY2xvbmUuX19pc1JlZ0V4cCA9IF9faXNSZWdFeHA7XG5cbmZ1bmN0aW9uIF9fZ2V0UmVnRXhwRmxhZ3MocmUpIHtcbiAgdmFyIGZsYWdzID0gJyc7XG4gIGlmIChyZS5nbG9iYWwpIGZsYWdzICs9ICdnJztcbiAgaWYgKHJlLmlnbm9yZUNhc2UpIGZsYWdzICs9ICdpJztcbiAgaWYgKHJlLm11bHRpbGluZSkgZmxhZ3MgKz0gJ20nO1xuICByZXR1cm4gZmxhZ3M7XG59XG5jbG9uZS5fX2dldFJlZ0V4cEZsYWdzID0gX19nZXRSZWdFeHBGbGFncztcblxucmV0dXJuIGNsb25lO1xufSkoKTtcblxuaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gY2xvbmU7XG59XG4iLCIvKiBNSVQgbGljZW5zZSAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmdiMmhzbDogcmdiMmhzbCxcbiAgcmdiMmhzdjogcmdiMmhzdixcbiAgcmdiMmh3YjogcmdiMmh3YixcbiAgcmdiMmNteWs6IHJnYjJjbXlrLFxuICByZ2Iya2V5d29yZDogcmdiMmtleXdvcmQsXG4gIHJnYjJ4eXo6IHJnYjJ4eXosXG4gIHJnYjJsYWI6IHJnYjJsYWIsXG4gIHJnYjJsY2g6IHJnYjJsY2gsXG5cbiAgaHNsMnJnYjogaHNsMnJnYixcbiAgaHNsMmhzdjogaHNsMmhzdixcbiAgaHNsMmh3YjogaHNsMmh3YixcbiAgaHNsMmNteWs6IGhzbDJjbXlrLFxuICBoc2wya2V5d29yZDogaHNsMmtleXdvcmQsXG5cbiAgaHN2MnJnYjogaHN2MnJnYixcbiAgaHN2MmhzbDogaHN2MmhzbCxcbiAgaHN2Mmh3YjogaHN2Mmh3YixcbiAgaHN2MmNteWs6IGhzdjJjbXlrLFxuICBoc3Yya2V5d29yZDogaHN2MmtleXdvcmQsXG5cbiAgaHdiMnJnYjogaHdiMnJnYixcbiAgaHdiMmhzbDogaHdiMmhzbCxcbiAgaHdiMmhzdjogaHdiMmhzdixcbiAgaHdiMmNteWs6IGh3YjJjbXlrLFxuICBod2Iya2V5d29yZDogaHdiMmtleXdvcmQsXG5cbiAgY215azJyZ2I6IGNteWsycmdiLFxuICBjbXlrMmhzbDogY215azJoc2wsXG4gIGNteWsyaHN2OiBjbXlrMmhzdixcbiAgY215azJod2I6IGNteWsyaHdiLFxuICBjbXlrMmtleXdvcmQ6IGNteWsya2V5d29yZCxcblxuICBrZXl3b3JkMnJnYjoga2V5d29yZDJyZ2IsXG4gIGtleXdvcmQyaHNsOiBrZXl3b3JkMmhzbCxcbiAga2V5d29yZDJoc3Y6IGtleXdvcmQyaHN2LFxuICBrZXl3b3JkMmh3Yjoga2V5d29yZDJod2IsXG4gIGtleXdvcmQyY215azoga2V5d29yZDJjbXlrLFxuICBrZXl3b3JkMmxhYjoga2V5d29yZDJsYWIsXG4gIGtleXdvcmQyeHl6OiBrZXl3b3JkMnh5eixcblxuICB4eXoycmdiOiB4eXoycmdiLFxuICB4eXoybGFiOiB4eXoybGFiLFxuICB4eXoybGNoOiB4eXoybGNoLFxuXG4gIGxhYjJ4eXo6IGxhYjJ4eXosXG4gIGxhYjJyZ2I6IGxhYjJyZ2IsXG4gIGxhYjJsY2g6IGxhYjJsY2gsXG5cbiAgbGNoMmxhYjogbGNoMmxhYixcbiAgbGNoMnh5ejogbGNoMnh5eixcbiAgbGNoMnJnYjogbGNoMnJnYlxufVxuXG5cbmZ1bmN0aW9uIHJnYjJoc2wocmdiKSB7XG4gIHZhciByID0gcmdiWzBdLzI1NSxcbiAgICAgIGcgPSByZ2JbMV0vMjU1LFxuICAgICAgYiA9IHJnYlsyXS8yNTUsXG4gICAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcbiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgICAgZGVsdGEgPSBtYXggLSBtaW4sXG4gICAgICBoLCBzLCBsO1xuXG4gIGlmIChtYXggPT0gbWluKVxuICAgIGggPSAwO1xuICBlbHNlIGlmIChyID09IG1heClcbiAgICBoID0gKGcgLSBiKSAvIGRlbHRhO1xuICBlbHNlIGlmIChnID09IG1heClcbiAgICBoID0gMiArIChiIC0gcikgLyBkZWx0YTtcbiAgZWxzZSBpZiAoYiA9PSBtYXgpXG4gICAgaCA9IDQgKyAociAtIGcpLyBkZWx0YTtcblxuICBoID0gTWF0aC5taW4oaCAqIDYwLCAzNjApO1xuXG4gIGlmIChoIDwgMClcbiAgICBoICs9IDM2MDtcblxuICBsID0gKG1pbiArIG1heCkgLyAyO1xuXG4gIGlmIChtYXggPT0gbWluKVxuICAgIHMgPSAwO1xuICBlbHNlIGlmIChsIDw9IDAuNSlcbiAgICBzID0gZGVsdGEgLyAobWF4ICsgbWluKTtcbiAgZWxzZVxuICAgIHMgPSBkZWx0YSAvICgyIC0gbWF4IC0gbWluKTtcblxuICByZXR1cm4gW2gsIHMgKiAxMDAsIGwgKiAxMDBdO1xufVxuXG5mdW5jdGlvbiByZ2IyaHN2KHJnYikge1xuICB2YXIgciA9IHJnYlswXSxcbiAgICAgIGcgPSByZ2JbMV0sXG4gICAgICBiID0gcmdiWzJdLFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGRlbHRhID0gbWF4IC0gbWluLFxuICAgICAgaCwgcywgdjtcblxuICBpZiAobWF4ID09IDApXG4gICAgcyA9IDA7XG4gIGVsc2VcbiAgICBzID0gKGRlbHRhL21heCAqIDEwMDApLzEwO1xuXG4gIGlmIChtYXggPT0gbWluKVxuICAgIGggPSAwO1xuICBlbHNlIGlmIChyID09IG1heClcbiAgICBoID0gKGcgLSBiKSAvIGRlbHRhO1xuICBlbHNlIGlmIChnID09IG1heClcbiAgICBoID0gMiArIChiIC0gcikgLyBkZWx0YTtcbiAgZWxzZSBpZiAoYiA9PSBtYXgpXG4gICAgaCA9IDQgKyAociAtIGcpIC8gZGVsdGE7XG5cbiAgaCA9IE1hdGgubWluKGggKiA2MCwgMzYwKTtcblxuICBpZiAoaCA8IDApXG4gICAgaCArPSAzNjA7XG5cbiAgdiA9ICgobWF4IC8gMjU1KSAqIDEwMDApIC8gMTA7XG5cbiAgcmV0dXJuIFtoLCBzLCB2XTtcbn1cblxuZnVuY3Rpb24gcmdiMmh3YihyZ2IpIHtcbiAgdmFyIHIgPSByZ2JbMF0sXG4gICAgICBnID0gcmdiWzFdLFxuICAgICAgYiA9IHJnYlsyXSxcbiAgICAgIGggPSByZ2IyaHNsKHJnYilbMF0sXG4gICAgICB3ID0gMS8yNTUgKiBNYXRoLm1pbihyLCBNYXRoLm1pbihnLCBiKSksXG4gICAgICBiID0gMSAtIDEvMjU1ICogTWF0aC5tYXgociwgTWF0aC5tYXgoZywgYikpO1xuXG4gIHJldHVybiBbaCwgdyAqIDEwMCwgYiAqIDEwMF07XG59XG5cbmZ1bmN0aW9uIHJnYjJjbXlrKHJnYikge1xuICB2YXIgciA9IHJnYlswXSAvIDI1NSxcbiAgICAgIGcgPSByZ2JbMV0gLyAyNTUsXG4gICAgICBiID0gcmdiWzJdIC8gMjU1LFxuICAgICAgYywgbSwgeSwgaztcblxuICBrID0gTWF0aC5taW4oMSAtIHIsIDEgLSBnLCAxIC0gYik7XG4gIGMgPSAoMSAtIHIgLSBrKSAvICgxIC0gaykgfHwgMDtcbiAgbSA9ICgxIC0gZyAtIGspIC8gKDEgLSBrKSB8fCAwO1xuICB5ID0gKDEgLSBiIC0gaykgLyAoMSAtIGspIHx8IDA7XG4gIHJldHVybiBbYyAqIDEwMCwgbSAqIDEwMCwgeSAqIDEwMCwgayAqIDEwMF07XG59XG5cbmZ1bmN0aW9uIHJnYjJrZXl3b3JkKHJnYikge1xuICByZXR1cm4gcmV2ZXJzZUtleXdvcmRzW0pTT04uc3RyaW5naWZ5KHJnYildO1xufVxuXG5mdW5jdGlvbiByZ2IyeHl6KHJnYikge1xuICB2YXIgciA9IHJnYlswXSAvIDI1NSxcbiAgICAgIGcgPSByZ2JbMV0gLyAyNTUsXG4gICAgICBiID0gcmdiWzJdIC8gMjU1O1xuXG4gIC8vIGFzc3VtZSBzUkdCXG4gIHIgPSByID4gMC4wNDA0NSA/IE1hdGgucG93KCgociArIDAuMDU1KSAvIDEuMDU1KSwgMi40KSA6IChyIC8gMTIuOTIpO1xuICBnID0gZyA+IDAuMDQwNDUgPyBNYXRoLnBvdygoKGcgKyAwLjA1NSkgLyAxLjA1NSksIDIuNCkgOiAoZyAvIDEyLjkyKTtcbiAgYiA9IGIgPiAwLjA0MDQ1ID8gTWF0aC5wb3coKChiICsgMC4wNTUpIC8gMS4wNTUpLCAyLjQpIDogKGIgLyAxMi45Mik7XG5cbiAgdmFyIHggPSAociAqIDAuNDEyNCkgKyAoZyAqIDAuMzU3NikgKyAoYiAqIDAuMTgwNSk7XG4gIHZhciB5ID0gKHIgKiAwLjIxMjYpICsgKGcgKiAwLjcxNTIpICsgKGIgKiAwLjA3MjIpO1xuICB2YXIgeiA9IChyICogMC4wMTkzKSArIChnICogMC4xMTkyKSArIChiICogMC45NTA1KTtcblxuICByZXR1cm4gW3ggKiAxMDAsIHkgKjEwMCwgeiAqIDEwMF07XG59XG5cbmZ1bmN0aW9uIHJnYjJsYWIocmdiKSB7XG4gIHZhciB4eXogPSByZ2IyeHl6KHJnYiksXG4gICAgICAgIHggPSB4eXpbMF0sXG4gICAgICAgIHkgPSB4eXpbMV0sXG4gICAgICAgIHogPSB4eXpbMl0sXG4gICAgICAgIGwsIGEsIGI7XG5cbiAgeCAvPSA5NS4wNDc7XG4gIHkgLz0gMTAwO1xuICB6IC89IDEwOC44ODM7XG5cbiAgeCA9IHggPiAwLjAwODg1NiA/IE1hdGgucG93KHgsIDEvMykgOiAoNy43ODcgKiB4KSArICgxNiAvIDExNik7XG4gIHkgPSB5ID4gMC4wMDg4NTYgPyBNYXRoLnBvdyh5LCAxLzMpIDogKDcuNzg3ICogeSkgKyAoMTYgLyAxMTYpO1xuICB6ID0geiA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeiwgMS8zKSA6ICg3Ljc4NyAqIHopICsgKDE2IC8gMTE2KTtcblxuICBsID0gKDExNiAqIHkpIC0gMTY7XG4gIGEgPSA1MDAgKiAoeCAtIHkpO1xuICBiID0gMjAwICogKHkgLSB6KTtcblxuICByZXR1cm4gW2wsIGEsIGJdO1xufVxuXG5mdW5jdGlvbiByZ2IybGNoKGFyZ3MpIHtcbiAgcmV0dXJuIGxhYjJsY2gocmdiMmxhYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGhzbDJyZ2IoaHNsKSB7XG4gIHZhciBoID0gaHNsWzBdIC8gMzYwLFxuICAgICAgcyA9IGhzbFsxXSAvIDEwMCxcbiAgICAgIGwgPSBoc2xbMl0gLyAxMDAsXG4gICAgICB0MSwgdDIsIHQzLCByZ2IsIHZhbDtcblxuICBpZiAocyA9PSAwKSB7XG4gICAgdmFsID0gbCAqIDI1NTtcbiAgICByZXR1cm4gW3ZhbCwgdmFsLCB2YWxdO1xuICB9XG5cbiAgaWYgKGwgPCAwLjUpXG4gICAgdDIgPSBsICogKDEgKyBzKTtcbiAgZWxzZVxuICAgIHQyID0gbCArIHMgLSBsICogcztcbiAgdDEgPSAyICogbCAtIHQyO1xuXG4gIHJnYiA9IFswLCAwLCAwXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICB0MyA9IGggKyAxIC8gMyAqIC0gKGkgLSAxKTtcbiAgICB0MyA8IDAgJiYgdDMrKztcbiAgICB0MyA+IDEgJiYgdDMtLTtcblxuICAgIGlmICg2ICogdDMgPCAxKVxuICAgICAgdmFsID0gdDEgKyAodDIgLSB0MSkgKiA2ICogdDM7XG4gICAgZWxzZSBpZiAoMiAqIHQzIDwgMSlcbiAgICAgIHZhbCA9IHQyO1xuICAgIGVsc2UgaWYgKDMgKiB0MyA8IDIpXG4gICAgICB2YWwgPSB0MSArICh0MiAtIHQxKSAqICgyIC8gMyAtIHQzKSAqIDY7XG4gICAgZWxzZVxuICAgICAgdmFsID0gdDE7XG5cbiAgICByZ2JbaV0gPSB2YWwgKiAyNTU7XG4gIH1cblxuICByZXR1cm4gcmdiO1xufVxuXG5mdW5jdGlvbiBoc2wyaHN2KGhzbCkge1xuICB2YXIgaCA9IGhzbFswXSxcbiAgICAgIHMgPSBoc2xbMV0gLyAxMDAsXG4gICAgICBsID0gaHNsWzJdIC8gMTAwLFxuICAgICAgc3YsIHY7XG5cbiAgaWYobCA9PT0gMCkge1xuICAgICAgLy8gbm8gbmVlZCB0byBkbyBjYWxjIG9uIGJsYWNrXG4gICAgICAvLyBhbHNvIGF2b2lkcyBkaXZpZGUgYnkgMCBlcnJvclxuICAgICAgcmV0dXJuIFswLCAwLCAwXTtcbiAgfVxuXG4gIGwgKj0gMjtcbiAgcyAqPSAobCA8PSAxKSA/IGwgOiAyIC0gbDtcbiAgdiA9IChsICsgcykgLyAyO1xuICBzdiA9ICgyICogcykgLyAobCArIHMpO1xuICByZXR1cm4gW2gsIHN2ICogMTAwLCB2ICogMTAwXTtcbn1cblxuZnVuY3Rpb24gaHNsMmh3YihhcmdzKSB7XG4gIHJldHVybiByZ2IyaHdiKGhzbDJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBoc2wyY215ayhhcmdzKSB7XG4gIHJldHVybiByZ2IyY215ayhoc2wycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gaHNsMmtleXdvcmQoYXJncykge1xuICByZXR1cm4gcmdiMmtleXdvcmQoaHNsMnJnYihhcmdzKSk7XG59XG5cblxuZnVuY3Rpb24gaHN2MnJnYihoc3YpIHtcbiAgdmFyIGggPSBoc3ZbMF0gLyA2MCxcbiAgICAgIHMgPSBoc3ZbMV0gLyAxMDAsXG4gICAgICB2ID0gaHN2WzJdIC8gMTAwLFxuICAgICAgaGkgPSBNYXRoLmZsb29yKGgpICUgNjtcblxuICB2YXIgZiA9IGggLSBNYXRoLmZsb29yKGgpLFxuICAgICAgcCA9IDI1NSAqIHYgKiAoMSAtIHMpLFxuICAgICAgcSA9IDI1NSAqIHYgKiAoMSAtIChzICogZikpLFxuICAgICAgdCA9IDI1NSAqIHYgKiAoMSAtIChzICogKDEgLSBmKSkpLFxuICAgICAgdiA9IDI1NSAqIHY7XG5cbiAgc3dpdGNoKGhpKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIFt2LCB0LCBwXTtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gW3EsIHYsIHBdO1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBbcCwgdiwgdF07XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIFtwLCBxLCB2XTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gW3QsIHAsIHZdO1xuICAgIGNhc2UgNTpcbiAgICAgIHJldHVybiBbdiwgcCwgcV07XG4gIH1cbn1cblxuZnVuY3Rpb24gaHN2MmhzbChoc3YpIHtcbiAgdmFyIGggPSBoc3ZbMF0sXG4gICAgICBzID0gaHN2WzFdIC8gMTAwLFxuICAgICAgdiA9IGhzdlsyXSAvIDEwMCxcbiAgICAgIHNsLCBsO1xuXG4gIGwgPSAoMiAtIHMpICogdjtcbiAgc2wgPSBzICogdjtcbiAgc2wgLz0gKGwgPD0gMSkgPyBsIDogMiAtIGw7XG4gIHNsID0gc2wgfHwgMDtcbiAgbCAvPSAyO1xuICByZXR1cm4gW2gsIHNsICogMTAwLCBsICogMTAwXTtcbn1cblxuZnVuY3Rpb24gaHN2Mmh3YihhcmdzKSB7XG4gIHJldHVybiByZ2IyaHdiKGhzdjJyZ2IoYXJncykpXG59XG5cbmZ1bmN0aW9uIGhzdjJjbXlrKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJjbXlrKGhzdjJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBoc3Yya2V5d29yZChhcmdzKSB7XG4gIHJldHVybiByZ2Iya2V5d29yZChoc3YycmdiKGFyZ3MpKTtcbn1cblxuLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzLWNvbG9yLyNod2ItdG8tcmdiXG5mdW5jdGlvbiBod2IycmdiKGh3Yikge1xuICB2YXIgaCA9IGh3YlswXSAvIDM2MCxcbiAgICAgIHdoID0gaHdiWzFdIC8gMTAwLFxuICAgICAgYmwgPSBod2JbMl0gLyAxMDAsXG4gICAgICByYXRpbyA9IHdoICsgYmwsXG4gICAgICBpLCB2LCBmLCBuO1xuXG4gIC8vIHdoICsgYmwgY2FudCBiZSA+IDFcbiAgaWYgKHJhdGlvID4gMSkge1xuICAgIHdoIC89IHJhdGlvO1xuICAgIGJsIC89IHJhdGlvO1xuICB9XG5cbiAgaSA9IE1hdGguZmxvb3IoNiAqIGgpO1xuICB2ID0gMSAtIGJsO1xuICBmID0gNiAqIGggLSBpO1xuICBpZiAoKGkgJiAweDAxKSAhPSAwKSB7XG4gICAgZiA9IDEgLSBmO1xuICB9XG4gIG4gPSB3aCArIGYgKiAodiAtIHdoKTsgIC8vIGxpbmVhciBpbnRlcnBvbGF0aW9uXG5cbiAgc3dpdGNoIChpKSB7XG4gICAgZGVmYXVsdDpcbiAgICBjYXNlIDY6XG4gICAgY2FzZSAwOiByID0gdjsgZyA9IG47IGIgPSB3aDsgYnJlYWs7XG4gICAgY2FzZSAxOiByID0gbjsgZyA9IHY7IGIgPSB3aDsgYnJlYWs7XG4gICAgY2FzZSAyOiByID0gd2g7IGcgPSB2OyBiID0gbjsgYnJlYWs7XG4gICAgY2FzZSAzOiByID0gd2g7IGcgPSBuOyBiID0gdjsgYnJlYWs7XG4gICAgY2FzZSA0OiByID0gbjsgZyA9IHdoOyBiID0gdjsgYnJlYWs7XG4gICAgY2FzZSA1OiByID0gdjsgZyA9IHdoOyBiID0gbjsgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdO1xufVxuXG5mdW5jdGlvbiBod2IyaHNsKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJoc2woaHdiMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGh3YjJoc3YoYXJncykge1xuICByZXR1cm4gcmdiMmhzdihod2IycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gaHdiMmNteWsoYXJncykge1xuICByZXR1cm4gcmdiMmNteWsoaHdiMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGh3YjJrZXl3b3JkKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJrZXl3b3JkKGh3YjJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBjbXlrMnJnYihjbXlrKSB7XG4gIHZhciBjID0gY215a1swXSAvIDEwMCxcbiAgICAgIG0gPSBjbXlrWzFdIC8gMTAwLFxuICAgICAgeSA9IGNteWtbMl0gLyAxMDAsXG4gICAgICBrID0gY215a1szXSAvIDEwMCxcbiAgICAgIHIsIGcsIGI7XG5cbiAgciA9IDEgLSBNYXRoLm1pbigxLCBjICogKDEgLSBrKSArIGspO1xuICBnID0gMSAtIE1hdGgubWluKDEsIG0gKiAoMSAtIGspICsgayk7XG4gIGIgPSAxIC0gTWF0aC5taW4oMSwgeSAqICgxIC0gaykgKyBrKTtcbiAgcmV0dXJuIFtyICogMjU1LCBnICogMjU1LCBiICogMjU1XTtcbn1cblxuZnVuY3Rpb24gY215azJoc2woYXJncykge1xuICByZXR1cm4gcmdiMmhzbChjbXlrMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGNteWsyaHN2KGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJoc3YoY215azJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBjbXlrMmh3YihhcmdzKSB7XG4gIHJldHVybiByZ2IyaHdiKGNteWsycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gY215azJrZXl3b3JkKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJrZXl3b3JkKGNteWsycmdiKGFyZ3MpKTtcbn1cblxuXG5mdW5jdGlvbiB4eXoycmdiKHh5eikge1xuICB2YXIgeCA9IHh5elswXSAvIDEwMCxcbiAgICAgIHkgPSB4eXpbMV0gLyAxMDAsXG4gICAgICB6ID0geHl6WzJdIC8gMTAwLFxuICAgICAgciwgZywgYjtcblxuICByID0gKHggKiAzLjI0MDYpICsgKHkgKiAtMS41MzcyKSArICh6ICogLTAuNDk4Nik7XG4gIGcgPSAoeCAqIC0wLjk2ODkpICsgKHkgKiAxLjg3NTgpICsgKHogKiAwLjA0MTUpO1xuICBiID0gKHggKiAwLjA1NTcpICsgKHkgKiAtMC4yMDQwKSArICh6ICogMS4wNTcwKTtcblxuICAvLyBhc3N1bWUgc1JHQlxuICByID0gciA+IDAuMDAzMTMwOCA/ICgoMS4wNTUgKiBNYXRoLnBvdyhyLCAxLjAgLyAyLjQpKSAtIDAuMDU1KVxuICAgIDogciA9IChyICogMTIuOTIpO1xuXG4gIGcgPSBnID4gMC4wMDMxMzA4ID8gKCgxLjA1NSAqIE1hdGgucG93KGcsIDEuMCAvIDIuNCkpIC0gMC4wNTUpXG4gICAgOiBnID0gKGcgKiAxMi45Mik7XG5cbiAgYiA9IGIgPiAwLjAwMzEzMDggPyAoKDEuMDU1ICogTWF0aC5wb3coYiwgMS4wIC8gMi40KSkgLSAwLjA1NSlcbiAgICA6IGIgPSAoYiAqIDEyLjkyKTtcblxuICByID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgciksIDEpO1xuICBnID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZyksIDEpO1xuICBiID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgYiksIDEpO1xuXG4gIHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07XG59XG5cbmZ1bmN0aW9uIHh5ejJsYWIoeHl6KSB7XG4gIHZhciB4ID0geHl6WzBdLFxuICAgICAgeSA9IHh5elsxXSxcbiAgICAgIHogPSB4eXpbMl0sXG4gICAgICBsLCBhLCBiO1xuXG4gIHggLz0gOTUuMDQ3O1xuICB5IC89IDEwMDtcbiAgeiAvPSAxMDguODgzO1xuXG4gIHggPSB4ID4gMC4wMDg4NTYgPyBNYXRoLnBvdyh4LCAxLzMpIDogKDcuNzg3ICogeCkgKyAoMTYgLyAxMTYpO1xuICB5ID0geSA+IDAuMDA4ODU2ID8gTWF0aC5wb3coeSwgMS8zKSA6ICg3Ljc4NyAqIHkpICsgKDE2IC8gMTE2KTtcbiAgeiA9IHogPiAwLjAwODg1NiA/IE1hdGgucG93KHosIDEvMykgOiAoNy43ODcgKiB6KSArICgxNiAvIDExNik7XG5cbiAgbCA9ICgxMTYgKiB5KSAtIDE2O1xuICBhID0gNTAwICogKHggLSB5KTtcbiAgYiA9IDIwMCAqICh5IC0geik7XG5cbiAgcmV0dXJuIFtsLCBhLCBiXTtcbn1cblxuZnVuY3Rpb24geHl6MmxjaChhcmdzKSB7XG4gIHJldHVybiBsYWIybGNoKHh5ejJsYWIoYXJncykpO1xufVxuXG5mdW5jdGlvbiBsYWIyeHl6KGxhYikge1xuICB2YXIgbCA9IGxhYlswXSxcbiAgICAgIGEgPSBsYWJbMV0sXG4gICAgICBiID0gbGFiWzJdLFxuICAgICAgeCwgeSwgeiwgeTI7XG5cbiAgaWYgKGwgPD0gOCkge1xuICAgIHkgPSAobCAqIDEwMCkgLyA5MDMuMztcbiAgICB5MiA9ICg3Ljc4NyAqICh5IC8gMTAwKSkgKyAoMTYgLyAxMTYpO1xuICB9IGVsc2Uge1xuICAgIHkgPSAxMDAgKiBNYXRoLnBvdygobCArIDE2KSAvIDExNiwgMyk7XG4gICAgeTIgPSBNYXRoLnBvdyh5IC8gMTAwLCAxLzMpO1xuICB9XG5cbiAgeCA9IHggLyA5NS4wNDcgPD0gMC4wMDg4NTYgPyB4ID0gKDk1LjA0NyAqICgoYSAvIDUwMCkgKyB5MiAtICgxNiAvIDExNikpKSAvIDcuNzg3IDogOTUuMDQ3ICogTWF0aC5wb3coKGEgLyA1MDApICsgeTIsIDMpO1xuXG4gIHogPSB6IC8gMTA4Ljg4MyA8PSAwLjAwODg1OSA/IHogPSAoMTA4Ljg4MyAqICh5MiAtIChiIC8gMjAwKSAtICgxNiAvIDExNikpKSAvIDcuNzg3IDogMTA4Ljg4MyAqIE1hdGgucG93KHkyIC0gKGIgLyAyMDApLCAzKTtcblxuICByZXR1cm4gW3gsIHksIHpdO1xufVxuXG5mdW5jdGlvbiBsYWIybGNoKGxhYikge1xuICB2YXIgbCA9IGxhYlswXSxcbiAgICAgIGEgPSBsYWJbMV0sXG4gICAgICBiID0gbGFiWzJdLFxuICAgICAgaHIsIGgsIGM7XG5cbiAgaHIgPSBNYXRoLmF0YW4yKGIsIGEpO1xuICBoID0gaHIgKiAzNjAgLyAyIC8gTWF0aC5QSTtcbiAgaWYgKGggPCAwKSB7XG4gICAgaCArPSAzNjA7XG4gIH1cbiAgYyA9IE1hdGguc3FydChhICogYSArIGIgKiBiKTtcbiAgcmV0dXJuIFtsLCBjLCBoXTtcbn1cblxuZnVuY3Rpb24gbGFiMnJnYihhcmdzKSB7XG4gIHJldHVybiB4eXoycmdiKGxhYjJ4eXooYXJncykpO1xufVxuXG5mdW5jdGlvbiBsY2gybGFiKGxjaCkge1xuICB2YXIgbCA9IGxjaFswXSxcbiAgICAgIGMgPSBsY2hbMV0sXG4gICAgICBoID0gbGNoWzJdLFxuICAgICAgYSwgYiwgaHI7XG5cbiAgaHIgPSBoIC8gMzYwICogMiAqIE1hdGguUEk7XG4gIGEgPSBjICogTWF0aC5jb3MoaHIpO1xuICBiID0gYyAqIE1hdGguc2luKGhyKTtcbiAgcmV0dXJuIFtsLCBhLCBiXTtcbn1cblxuZnVuY3Rpb24gbGNoMnh5eihhcmdzKSB7XG4gIHJldHVybiBsYWIyeHl6KGxjaDJsYWIoYXJncykpO1xufVxuXG5mdW5jdGlvbiBsY2gycmdiKGFyZ3MpIHtcbiAgcmV0dXJuIGxhYjJyZ2IobGNoMmxhYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGtleXdvcmQycmdiKGtleXdvcmQpIHtcbiAgcmV0dXJuIGNzc0tleXdvcmRzW2tleXdvcmRdO1xufVxuXG5mdW5jdGlvbiBrZXl3b3JkMmhzbChhcmdzKSB7XG4gIHJldHVybiByZ2IyaHNsKGtleXdvcmQycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24ga2V5d29yZDJoc3YoYXJncykge1xuICByZXR1cm4gcmdiMmhzdihrZXl3b3JkMnJnYihhcmdzKSk7XG59XG5cbmZ1bmN0aW9uIGtleXdvcmQyaHdiKGFyZ3MpIHtcbiAgcmV0dXJuIHJnYjJod2Ioa2V5d29yZDJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBrZXl3b3JkMmNteWsoYXJncykge1xuICByZXR1cm4gcmdiMmNteWsoa2V5d29yZDJyZ2IoYXJncykpO1xufVxuXG5mdW5jdGlvbiBrZXl3b3JkMmxhYihhcmdzKSB7XG4gIHJldHVybiByZ2IybGFiKGtleXdvcmQycmdiKGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24ga2V5d29yZDJ4eXooYXJncykge1xuICByZXR1cm4gcmdiMnh5eihrZXl3b3JkMnJnYihhcmdzKSk7XG59XG5cbnZhciBjc3NLZXl3b3JkcyA9IHtcbiAgYWxpY2VibHVlOiAgWzI0MCwyNDgsMjU1XSxcbiAgYW50aXF1ZXdoaXRlOiBbMjUwLDIzNSwyMTVdLFxuICBhcXVhOiBbMCwyNTUsMjU1XSxcbiAgYXF1YW1hcmluZTogWzEyNywyNTUsMjEyXSxcbiAgYXp1cmU6ICBbMjQwLDI1NSwyNTVdLFxuICBiZWlnZTogIFsyNDUsMjQ1LDIyMF0sXG4gIGJpc3F1ZTogWzI1NSwyMjgsMTk2XSxcbiAgYmxhY2s6ICBbMCwwLDBdLFxuICBibGFuY2hlZGFsbW9uZDogWzI1NSwyMzUsMjA1XSxcbiAgYmx1ZTogWzAsMCwyNTVdLFxuICBibHVldmlvbGV0OiBbMTM4LDQzLDIyNl0sXG4gIGJyb3duOiAgWzE2NSw0Miw0Ml0sXG4gIGJ1cmx5d29vZDogIFsyMjIsMTg0LDEzNV0sXG4gIGNhZGV0Ymx1ZTogIFs5NSwxNTgsMTYwXSxcbiAgY2hhcnRyZXVzZTogWzEyNywyNTUsMF0sXG4gIGNob2NvbGF0ZTogIFsyMTAsMTA1LDMwXSxcbiAgY29yYWw6ICBbMjU1LDEyNyw4MF0sXG4gIGNvcm5mbG93ZXJibHVlOiBbMTAwLDE0OSwyMzddLFxuICBjb3Juc2lsazogWzI1NSwyNDgsMjIwXSxcbiAgY3JpbXNvbjogIFsyMjAsMjAsNjBdLFxuICBjeWFuOiBbMCwyNTUsMjU1XSxcbiAgZGFya2JsdWU6IFswLDAsMTM5XSxcbiAgZGFya2N5YW46IFswLDEzOSwxMzldLFxuICBkYXJrZ29sZGVucm9kOiAgWzE4NCwxMzQsMTFdLFxuICBkYXJrZ3JheTogWzE2OSwxNjksMTY5XSxcbiAgZGFya2dyZWVuOiAgWzAsMTAwLDBdLFxuICBkYXJrZ3JleTogWzE2OSwxNjksMTY5XSxcbiAgZGFya2toYWtpOiAgWzE4OSwxODMsMTA3XSxcbiAgZGFya21hZ2VudGE6ICBbMTM5LDAsMTM5XSxcbiAgZGFya29saXZlZ3JlZW46IFs4NSwxMDcsNDddLFxuICBkYXJrb3JhbmdlOiBbMjU1LDE0MCwwXSxcbiAgZGFya29yY2hpZDogWzE1Myw1MCwyMDRdLFxuICBkYXJrcmVkOiAgWzEzOSwwLDBdLFxuICBkYXJrc2FsbW9uOiBbMjMzLDE1MCwxMjJdLFxuICBkYXJrc2VhZ3JlZW46IFsxNDMsMTg4LDE0M10sXG4gIGRhcmtzbGF0ZWJsdWU6ICBbNzIsNjEsMTM5XSxcbiAgZGFya3NsYXRlZ3JheTogIFs0Nyw3OSw3OV0sXG4gIGRhcmtzbGF0ZWdyZXk6ICBbNDcsNzksNzldLFxuICBkYXJrdHVycXVvaXNlOiAgWzAsMjA2LDIwOV0sXG4gIGRhcmt2aW9sZXQ6IFsxNDgsMCwyMTFdLFxuICBkZWVwcGluazogWzI1NSwyMCwxNDddLFxuICBkZWVwc2t5Ymx1ZTogIFswLDE5MSwyNTVdLFxuICBkaW1ncmF5OiAgWzEwNSwxMDUsMTA1XSxcbiAgZGltZ3JleTogIFsxMDUsMTA1LDEwNV0sXG4gIGRvZGdlcmJsdWU6IFszMCwxNDQsMjU1XSxcbiAgZmlyZWJyaWNrOiAgWzE3OCwzNCwzNF0sXG4gIGZsb3JhbHdoaXRlOiAgWzI1NSwyNTAsMjQwXSxcbiAgZm9yZXN0Z3JlZW46ICBbMzQsMTM5LDM0XSxcbiAgZnVjaHNpYTogIFsyNTUsMCwyNTVdLFxuICBnYWluc2Jvcm86ICBbMjIwLDIyMCwyMjBdLFxuICBnaG9zdHdoaXRlOiBbMjQ4LDI0OCwyNTVdLFxuICBnb2xkOiBbMjU1LDIxNSwwXSxcbiAgZ29sZGVucm9kOiAgWzIxOCwxNjUsMzJdLFxuICBncmF5OiBbMTI4LDEyOCwxMjhdLFxuICBncmVlbjogIFswLDEyOCwwXSxcbiAgZ3JlZW55ZWxsb3c6ICBbMTczLDI1NSw0N10sXG4gIGdyZXk6IFsxMjgsMTI4LDEyOF0sXG4gIGhvbmV5ZGV3OiBbMjQwLDI1NSwyNDBdLFxuICBob3RwaW5rOiAgWzI1NSwxMDUsMTgwXSxcbiAgaW5kaWFucmVkOiAgWzIwNSw5Miw5Ml0sXG4gIGluZGlnbzogWzc1LDAsMTMwXSxcbiAgaXZvcnk6ICBbMjU1LDI1NSwyNDBdLFxuICBraGFraTogIFsyNDAsMjMwLDE0MF0sXG4gIGxhdmVuZGVyOiBbMjMwLDIzMCwyNTBdLFxuICBsYXZlbmRlcmJsdXNoOiAgWzI1NSwyNDAsMjQ1XSxcbiAgbGF3bmdyZWVuOiAgWzEyNCwyNTIsMF0sXG4gIGxlbW9uY2hpZmZvbjogWzI1NSwyNTAsMjA1XSxcbiAgbGlnaHRibHVlOiAgWzE3MywyMTYsMjMwXSxcbiAgbGlnaHRjb3JhbDogWzI0MCwxMjgsMTI4XSxcbiAgbGlnaHRjeWFuOiAgWzIyNCwyNTUsMjU1XSxcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFsyNTAsMjUwLDIxMF0sXG4gIGxpZ2h0Z3JheTogIFsyMTEsMjExLDIxMV0sXG4gIGxpZ2h0Z3JlZW46IFsxNDQsMjM4LDE0NF0sXG4gIGxpZ2h0Z3JleTogIFsyMTEsMjExLDIxMV0sXG4gIGxpZ2h0cGluazogIFsyNTUsMTgyLDE5M10sXG4gIGxpZ2h0c2FsbW9uOiAgWzI1NSwxNjAsMTIyXSxcbiAgbGlnaHRzZWFncmVlbjogIFszMiwxNzgsMTcwXSxcbiAgbGlnaHRza3libHVlOiBbMTM1LDIwNiwyNTBdLFxuICBsaWdodHNsYXRlZ3JheTogWzExOSwxMzYsMTUzXSxcbiAgbGlnaHRzbGF0ZWdyZXk6IFsxMTksMTM2LDE1M10sXG4gIGxpZ2h0c3RlZWxibHVlOiBbMTc2LDE5NiwyMjJdLFxuICBsaWdodHllbGxvdzogIFsyNTUsMjU1LDIyNF0sXG4gIGxpbWU6IFswLDI1NSwwXSxcbiAgbGltZWdyZWVuOiAgWzUwLDIwNSw1MF0sXG4gIGxpbmVuOiAgWzI1MCwyNDAsMjMwXSxcbiAgbWFnZW50YTogIFsyNTUsMCwyNTVdLFxuICBtYXJvb246IFsxMjgsMCwwXSxcbiAgbWVkaXVtYXF1YW1hcmluZTogWzEwMiwyMDUsMTcwXSxcbiAgbWVkaXVtYmx1ZTogWzAsMCwyMDVdLFxuICBtZWRpdW1vcmNoaWQ6IFsxODYsODUsMjExXSxcbiAgbWVkaXVtcHVycGxlOiBbMTQ3LDExMiwyMTldLFxuICBtZWRpdW1zZWFncmVlbjogWzYwLDE3OSwxMTNdLFxuICBtZWRpdW1zbGF0ZWJsdWU6ICBbMTIzLDEwNCwyMzhdLFxuICBtZWRpdW1zcHJpbmdncmVlbjogIFswLDI1MCwxNTRdLFxuICBtZWRpdW10dXJxdW9pc2U6ICBbNzIsMjA5LDIwNF0sXG4gIG1lZGl1bXZpb2xldHJlZDogIFsxOTksMjEsMTMzXSxcbiAgbWlkbmlnaHRibHVlOiBbMjUsMjUsMTEyXSxcbiAgbWludGNyZWFtOiAgWzI0NSwyNTUsMjUwXSxcbiAgbWlzdHlyb3NlOiAgWzI1NSwyMjgsMjI1XSxcbiAgbW9jY2FzaW46IFsyNTUsMjI4LDE4MV0sXG4gIG5hdmFqb3doaXRlOiAgWzI1NSwyMjIsMTczXSxcbiAgbmF2eTogWzAsMCwxMjhdLFxuICBvbGRsYWNlOiAgWzI1MywyNDUsMjMwXSxcbiAgb2xpdmU6ICBbMTI4LDEyOCwwXSxcbiAgb2xpdmVkcmFiOiAgWzEwNywxNDIsMzVdLFxuICBvcmFuZ2U6IFsyNTUsMTY1LDBdLFxuICBvcmFuZ2VyZWQ6ICBbMjU1LDY5LDBdLFxuICBvcmNoaWQ6IFsyMTgsMTEyLDIxNF0sXG4gIHBhbGVnb2xkZW5yb2Q6ICBbMjM4LDIzMiwxNzBdLFxuICBwYWxlZ3JlZW46ICBbMTUyLDI1MSwxNTJdLFxuICBwYWxldHVycXVvaXNlOiAgWzE3NSwyMzgsMjM4XSxcbiAgcGFsZXZpb2xldHJlZDogIFsyMTksMTEyLDE0N10sXG4gIHBhcGF5YXdoaXA6IFsyNTUsMjM5LDIxM10sXG4gIHBlYWNocHVmZjogIFsyNTUsMjE4LDE4NV0sXG4gIHBlcnU6IFsyMDUsMTMzLDYzXSxcbiAgcGluazogWzI1NSwxOTIsMjAzXSxcbiAgcGx1bTogWzIyMSwxNjAsMjIxXSxcbiAgcG93ZGVyYmx1ZTogWzE3NiwyMjQsMjMwXSxcbiAgcHVycGxlOiBbMTI4LDAsMTI4XSxcbiAgcmViZWNjYXB1cnBsZTogWzEwMiwgNTEsIDE1M10sXG4gIHJlZDogIFsyNTUsMCwwXSxcbiAgcm9zeWJyb3duOiAgWzE4OCwxNDMsMTQzXSxcbiAgcm95YWxibHVlOiAgWzY1LDEwNSwyMjVdLFxuICBzYWRkbGVicm93bjogIFsxMzksNjksMTldLFxuICBzYWxtb246IFsyNTAsMTI4LDExNF0sXG4gIHNhbmR5YnJvd246IFsyNDQsMTY0LDk2XSxcbiAgc2VhZ3JlZW46IFs0NiwxMzksODddLFxuICBzZWFzaGVsbDogWzI1NSwyNDUsMjM4XSxcbiAgc2llbm5hOiBbMTYwLDgyLDQ1XSxcbiAgc2lsdmVyOiBbMTkyLDE5MiwxOTJdLFxuICBza3libHVlOiAgWzEzNSwyMDYsMjM1XSxcbiAgc2xhdGVibHVlOiAgWzEwNiw5MCwyMDVdLFxuICBzbGF0ZWdyYXk6ICBbMTEyLDEyOCwxNDRdLFxuICBzbGF0ZWdyZXk6ICBbMTEyLDEyOCwxNDRdLFxuICBzbm93OiBbMjU1LDI1MCwyNTBdLFxuICBzcHJpbmdncmVlbjogIFswLDI1NSwxMjddLFxuICBzdGVlbGJsdWU6ICBbNzAsMTMwLDE4MF0sXG4gIHRhbjogIFsyMTAsMTgwLDE0MF0sXG4gIHRlYWw6IFswLDEyOCwxMjhdLFxuICB0aGlzdGxlOiAgWzIxNiwxOTEsMjE2XSxcbiAgdG9tYXRvOiBbMjU1LDk5LDcxXSxcbiAgdHVycXVvaXNlOiAgWzY0LDIyNCwyMDhdLFxuICB2aW9sZXQ6IFsyMzgsMTMwLDIzOF0sXG4gIHdoZWF0OiAgWzI0NSwyMjIsMTc5XSxcbiAgd2hpdGU6ICBbMjU1LDI1NSwyNTVdLFxuICB3aGl0ZXNtb2tlOiBbMjQ1LDI0NSwyNDVdLFxuICB5ZWxsb3c6IFsyNTUsMjU1LDBdLFxuICB5ZWxsb3dncmVlbjogIFsxNTQsMjA1LDUwXVxufTtcblxudmFyIHJldmVyc2VLZXl3b3JkcyA9IHt9O1xuZm9yICh2YXIga2V5IGluIGNzc0tleXdvcmRzKSB7XG4gIHJldmVyc2VLZXl3b3Jkc1tKU09OLnN0cmluZ2lmeShjc3NLZXl3b3Jkc1trZXldKV0gPSBrZXk7XG59XG4iLCJ2YXIgY29udmVyc2lvbnMgPSByZXF1aXJlKFwiLi9jb252ZXJzaW9uc1wiKTtcblxudmFyIGNvbnZlcnQgPSBmdW5jdGlvbigpIHtcbiAgIHJldHVybiBuZXcgQ29udmVydGVyKCk7XG59XG5cbmZvciAodmFyIGZ1bmMgaW4gY29udmVyc2lvbnMpIHtcbiAgLy8gZXhwb3J0IFJhdyB2ZXJzaW9uc1xuICBjb252ZXJ0W2Z1bmMgKyBcIlJhd1wiXSA9ICAoZnVuY3Rpb24oZnVuYykge1xuICAgIC8vIGFjY2VwdCBhcnJheSBvciBwbGFpbiBhcmdzXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgICAgaWYgKHR5cGVvZiBhcmcgPT0gXCJudW1iZXJcIilcbiAgICAgICAgYXJnID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjb252ZXJzaW9uc1tmdW5jXShhcmcpO1xuICAgIH1cbiAgfSkoZnVuYyk7XG5cbiAgdmFyIHBhaXIgPSAvKFxcdyspMihcXHcrKS8uZXhlYyhmdW5jKSxcbiAgICAgIGZyb20gPSBwYWlyWzFdLFxuICAgICAgdG8gPSBwYWlyWzJdO1xuXG4gIC8vIGV4cG9ydCByZ2IyaHNsIGFuZCBbXCJyZ2JcIl1bXCJoc2xcIl1cbiAgY29udmVydFtmcm9tXSA9IGNvbnZlcnRbZnJvbV0gfHwge307XG5cbiAgY29udmVydFtmcm9tXVt0b10gPSBjb252ZXJ0W2Z1bmNdID0gKGZ1bmN0aW9uKGZ1bmMpIHsgXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgICAgaWYgKHR5cGVvZiBhcmcgPT0gXCJudW1iZXJcIilcbiAgICAgICAgYXJnID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIFxuICAgICAgdmFyIHZhbCA9IGNvbnZlcnNpb25zW2Z1bmNdKGFyZyk7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiIHx8IHZhbCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdmFsOyAvLyBrZXl3b3JkXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKVxuICAgICAgICB2YWxbaV0gPSBNYXRoLnJvdW5kKHZhbFtpXSk7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgfSkoZnVuYyk7XG59XG5cblxuLyogQ29udmVydGVyIGRvZXMgbGF6eSBjb252ZXJzaW9uIGFuZCBjYWNoaW5nICovXG52YXIgQ29udmVydGVyID0gZnVuY3Rpb24oKSB7XG4gICB0aGlzLmNvbnZzID0ge307XG59O1xuXG4vKiBFaXRoZXIgZ2V0IHRoZSB2YWx1ZXMgZm9yIGEgc3BhY2Ugb3JcbiAgc2V0IHRoZSB2YWx1ZXMgZm9yIGEgc3BhY2UsIGRlcGVuZGluZyBvbiBhcmdzICovXG5Db252ZXJ0ZXIucHJvdG90eXBlLnJvdXRlU3BhY2UgPSBmdW5jdGlvbihzcGFjZSwgYXJncykge1xuICAgdmFyIHZhbHVlcyA9IGFyZ3NbMF07XG4gICBpZiAodmFsdWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGNvbG9yLnJnYigpXG4gICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZXMoc3BhY2UpO1xuICAgfVxuICAgLy8gY29sb3IucmdiKDEwLCAxMCwgMTApXG4gICBpZiAodHlwZW9mIHZhbHVlcyA9PSBcIm51bWJlclwiKSB7XG4gICAgICB2YWx1ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKTsgICAgICAgIFxuICAgfVxuXG4gICByZXR1cm4gdGhpcy5zZXRWYWx1ZXMoc3BhY2UsIHZhbHVlcyk7XG59O1xuICBcbi8qIFNldCB0aGUgdmFsdWVzIGZvciBhIHNwYWNlLCBpbnZhbGlkYXRpbmcgY2FjaGUgKi9cbkNvbnZlcnRlci5wcm90b3R5cGUuc2V0VmFsdWVzID0gZnVuY3Rpb24oc3BhY2UsIHZhbHVlcykge1xuICAgdGhpcy5zcGFjZSA9IHNwYWNlO1xuICAgdGhpcy5jb252cyA9IHt9O1xuICAgdGhpcy5jb252c1tzcGFjZV0gPSB2YWx1ZXM7XG4gICByZXR1cm4gdGhpcztcbn07XG5cbi8qIEdldCB0aGUgdmFsdWVzIGZvciBhIHNwYWNlLiBJZiB0aGVyZSdzIGFscmVhZHlcbiAgYSBjb252ZXJzaW9uIGZvciB0aGUgc3BhY2UsIGZldGNoIGl0LCBvdGhlcndpc2VcbiAgY29tcHV0ZSBpdCAqL1xuQ29udmVydGVyLnByb3RvdHlwZS5nZXRWYWx1ZXMgPSBmdW5jdGlvbihzcGFjZSkge1xuICAgdmFyIHZhbHMgPSB0aGlzLmNvbnZzW3NwYWNlXTtcbiAgIGlmICghdmFscykge1xuICAgICAgdmFyIGZzcGFjZSA9IHRoaXMuc3BhY2UsXG4gICAgICAgICAgZnJvbSA9IHRoaXMuY29udnNbZnNwYWNlXTtcbiAgICAgIHZhbHMgPSBjb252ZXJ0W2ZzcGFjZV1bc3BhY2VdKGZyb20pO1xuXG4gICAgICB0aGlzLmNvbnZzW3NwYWNlXSA9IHZhbHM7XG4gICB9XG4gIHJldHVybiB2YWxzO1xufTtcblxuW1wicmdiXCIsIFwiaHNsXCIsIFwiaHN2XCIsIFwiY215a1wiLCBcImtleXdvcmRcIl0uZm9yRWFjaChmdW5jdGlvbihzcGFjZSkge1xuICAgQ29udmVydGVyLnByb3RvdHlwZVtzcGFjZV0gPSBmdW5jdGlvbih2YWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVNwYWNlKHNwYWNlLCBhcmd1bWVudHMpO1xuICAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydDsiLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciB1bml0cyA9IFsgJ21tJywgJ2NtJywgJ20nLCAncGMnLCAncHQnLCAnaW4nLCAnZnQnLCAncHgnIF07XG5cbnZhciBjb252ZXJzaW9ucyA9IHtcbiAgLy8gbWV0cmljXG4gIG06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMVxuICB9LFxuICBjbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxIC8gMTAwXG4gIH0sXG4gIG1tOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDAwXG4gIH0sXG4gIC8vIGltcGVyaWFsXG4gIHB0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDcyXG4gIH0sXG4gIHBjOiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMSAvIDZcbiAgfSxcbiAgaW46IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGZ0OiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMTJcbiAgfVxufTtcblxuY29uc3QgYW5jaG9ycyA9IHtcbiAgbWV0cmljOiB7XG4gICAgdW5pdDogJ20nLFxuICAgIHJhdGlvOiAxIC8gMC4wMjU0XG4gIH0sXG4gIGltcGVyaWFsOiB7XG4gICAgdW5pdDogJ2luJyxcbiAgICByYXRpbzogMC4wMjU0XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJvdW5kICh2YWx1ZSwgZGVjaW1hbHMpIHtcbiAgcmV0dXJuIE51bWJlcihNYXRoLnJvdW5kKHZhbHVlICsgJ2UnICsgZGVjaW1hbHMpICsgJ2UtJyArIGRlY2ltYWxzKTtcbn1cblxuZnVuY3Rpb24gY29udmVydERpc3RhbmNlICh2YWx1ZSwgZnJvbVVuaXQsIHRvVW5pdCwgb3B0cykge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhaXNGaW5pdGUodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyJyk7XG4gIGlmICghZnJvbVVuaXQgfHwgIXRvVW5pdCkgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHNwZWNpZnkgZnJvbSBhbmQgdG8gdW5pdHMnKTtcblxuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgdmFyIHBpeGVsc1BlckluY2ggPSBkZWZpbmVkKG9wdHMucGl4ZWxzUGVySW5jaCwgOTYpO1xuICB2YXIgcHJlY2lzaW9uID0gb3B0cy5wcmVjaXNpb247XG4gIHZhciByb3VuZFBpeGVsID0gb3B0cy5yb3VuZFBpeGVsICE9PSBmYWxzZTtcblxuICBmcm9tVW5pdCA9IGZyb21Vbml0LnRvTG93ZXJDYXNlKCk7XG4gIHRvVW5pdCA9IHRvVW5pdC50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICh1bml0cy5pbmRleE9mKGZyb21Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgZnJvbVVuaXQgKyAnXCIsIG11c3QgYmUgb25lIG9mOiAnICsgdW5pdHMuam9pbignLCAnKSk7XG4gIGlmICh1bml0cy5pbmRleE9mKHRvVW5pdCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZnJvbSB1bml0IFwiJyArIHRvVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcblxuICBpZiAoZnJvbVVuaXQgPT09IHRvVW5pdCkge1xuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY29udmVydCBmcm9tIEEgdG8gQiBzaW5jZSB0aGV5IGFyZSB0aGUgc2FtZSBhbHJlYWR5XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdmFyIHRvRmFjdG9yID0gMTtcbiAgdmFyIGZyb21GYWN0b3IgPSAxO1xuICB2YXIgaXNUb1BpeGVsID0gZmFsc2U7XG5cbiAgaWYgKGZyb21Vbml0ID09PSAncHgnKSB7XG4gICAgZnJvbUZhY3RvciA9IDEgLyBwaXhlbHNQZXJJbmNoO1xuICAgIGZyb21Vbml0ID0gJ2luJztcbiAgfVxuICBpZiAodG9Vbml0ID09PSAncHgnKSB7XG4gICAgaXNUb1BpeGVsID0gdHJ1ZTtcbiAgICB0b0ZhY3RvciA9IHBpeGVsc1BlckluY2g7XG4gICAgdG9Vbml0ID0gJ2luJztcbiAgfVxuXG4gIHZhciBmcm9tVW5pdERhdGEgPSBjb252ZXJzaW9uc1tmcm9tVW5pdF07XG4gIHZhciB0b1VuaXREYXRhID0gY29udmVyc2lvbnNbdG9Vbml0XTtcblxuICAvLyBzb3VyY2UgdG8gYW5jaG9yIGluc2lkZSBzb3VyY2UncyBzeXN0ZW1cbiAgdmFyIGFuY2hvciA9IHZhbHVlICogZnJvbVVuaXREYXRhLmZhY3RvciAqIGZyb21GYWN0b3I7XG5cbiAgLy8gaWYgc3lzdGVtcyBkaWZmZXIsIGNvbnZlcnQgb25lIHRvIGFub3RoZXJcbiAgaWYgKGZyb21Vbml0RGF0YS5zeXN0ZW0gIT09IHRvVW5pdERhdGEuc3lzdGVtKSB7XG4gICAgLy8gcmVndWxhciAnbScgdG8gJ2luJyBhbmQgc28gZm9ydGhcbiAgICBhbmNob3IgKj0gYW5jaG9yc1tmcm9tVW5pdERhdGEuc3lzdGVtXS5yYXRpbztcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBhbmNob3IgLyB0b1VuaXREYXRhLmZhY3RvciAqIHRvRmFjdG9yO1xuICBpZiAoaXNUb1BpeGVsICYmIHJvdW5kUGl4ZWwpIHtcbiAgICByZXN1bHQgPSBNYXRoLnJvdW5kKHJlc3VsdCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByZWNpc2lvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUocHJlY2lzaW9uKSkge1xuICAgIHJlc3VsdCA9IHJvdW5kKHJlc3VsdCwgcHJlY2lzaW9uKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnZlcnREaXN0YW5jZTtcbm1vZHVsZS5leHBvcnRzLnVuaXRzID0gdW5pdHM7XG4iLCIvLyBodHRwczovL2QzanMub3JnL2QzLXBhdGgvIHYxLjAuOSBDb3B5cmlnaHQgMjAxOSBNaWtlIEJvc3RvY2tcbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG50eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbnR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuKGdsb2JhbCA9IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5kMyA9IGdsb2JhbC5kMyB8fCB7fSkpO1xufSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbnZhciBwaSA9IE1hdGguUEksXG4gICAgdGF1ID0gMiAqIHBpLFxuICAgIGVwc2lsb24gPSAxZS02LFxuICAgIHRhdUVwc2lsb24gPSB0YXUgLSBlcHNpbG9uO1xuXG5mdW5jdGlvbiBQYXRoKCkge1xuICB0aGlzLl94MCA9IHRoaXMuX3kwID0gLy8gc3RhcnQgb2YgY3VycmVudCBzdWJwYXRoXG4gIHRoaXMuX3gxID0gdGhpcy5feTEgPSBudWxsOyAvLyBlbmQgb2YgY3VycmVudCBzdWJwYXRoXG4gIHRoaXMuXyA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHBhdGgoKSB7XG4gIHJldHVybiBuZXcgUGF0aDtcbn1cblxuUGF0aC5wcm90b3R5cGUgPSBwYXRoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFBhdGgsXG4gIG1vdmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MCA9IHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTAgPSB0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgY2xvc2VQYXRoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5feDEgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3gxID0gdGhpcy5feDAsIHRoaXMuX3kxID0gdGhpcy5feTA7XG4gICAgICB0aGlzLl8gKz0gXCJaXCI7XG4gICAgfVxuICB9LFxuICBsaW5lVG86IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJMXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgcXVhZHJhdGljQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiUVwiICsgKCt4MSkgKyBcIixcIiArICgreTEpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYmV6aWVyQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJDXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICgreDIpICsgXCIsXCIgKyAoK3kyKSArIFwiLFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGFyY1RvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5Miwgcikge1xuICAgIHgxID0gK3gxLCB5MSA9ICt5MSwgeDIgPSAreDIsIHkyID0gK3kyLCByID0gK3I7XG4gICAgdmFyIHgwID0gdGhpcy5feDEsXG4gICAgICAgIHkwID0gdGhpcy5feTEsXG4gICAgICAgIHgyMSA9IHgyIC0geDEsXG4gICAgICAgIHkyMSA9IHkyIC0geTEsXG4gICAgICAgIHgwMSA9IHgwIC0geDEsXG4gICAgICAgIHkwMSA9IHkwIC0geTEsXG4gICAgICAgIGwwMV8yID0geDAxICogeDAxICsgeTAxICogeTAxO1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiICsgcik7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgxLHkxKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MSA9IHgxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEpO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDAseTApPyBEbyBub3RoaW5nLlxuICAgIGVsc2UgaWYgKCEobDAxXzIgPiBlcHNpbG9uKSk7XG5cbiAgICAvLyBPciwgYXJlICh4MCx5MCksICh4MSx5MSkgYW5kICh4Mix5MikgY29sbGluZWFyP1xuICAgIC8vIEVxdWl2YWxlbnRseSwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgyLHkyKT9cbiAgICAvLyBPciwgaXMgdGhlIHJhZGl1cyB6ZXJvPyBMaW5lIHRvICh4MSx5MSkuXG4gICAgZWxzZSBpZiAoIShNYXRoLmFicyh5MDEgKiB4MjEgLSB5MjEgKiB4MDEpID4gZXBzaWxvbikgfHwgIXIpIHtcbiAgICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9IHgxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEpO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgZHJhdyBhbiBhcmMhXG4gICAgZWxzZSB7XG4gICAgICB2YXIgeDIwID0geDIgLSB4MCxcbiAgICAgICAgICB5MjAgPSB5MiAtIHkwLFxuICAgICAgICAgIGwyMV8yID0geDIxICogeDIxICsgeTIxICogeTIxLFxuICAgICAgICAgIGwyMF8yID0geDIwICogeDIwICsgeTIwICogeTIwLFxuICAgICAgICAgIGwyMSA9IE1hdGguc3FydChsMjFfMiksXG4gICAgICAgICAgbDAxID0gTWF0aC5zcXJ0KGwwMV8yKSxcbiAgICAgICAgICBsID0gciAqIE1hdGgudGFuKChwaSAtIE1hdGguYWNvcygobDIxXzIgKyBsMDFfMiAtIGwyMF8yKSAvICgyICogbDIxICogbDAxKSkpIC8gMiksXG4gICAgICAgICAgdDAxID0gbCAvIGwwMSxcbiAgICAgICAgICB0MjEgPSBsIC8gbDIxO1xuXG4gICAgICAvLyBJZiB0aGUgc3RhcnQgdGFuZ2VudCBpcyBub3QgY29pbmNpZGVudCB3aXRoICh4MCx5MCksIGxpbmUgdG8uXG4gICAgICBpZiAoTWF0aC5hYnModDAxIC0gMSkgPiBlcHNpbG9uKSB7XG4gICAgICAgIHRoaXMuXyArPSBcIkxcIiArICh4MSArIHQwMSAqIHgwMSkgKyBcIixcIiArICh5MSArIHQwMSAqIHkwMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDAsXCIgKyAoKyh5MDEgKiB4MjAgPiB4MDEgKiB5MjApKSArIFwiLFwiICsgKHRoaXMuX3gxID0geDEgKyB0MjEgKiB4MjEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSArIHQyMSAqIHkyMSk7XG4gICAgfVxuICB9LFxuICBhcmM6IGZ1bmN0aW9uKHgsIHksIHIsIGEwLCBhMSwgY2N3KSB7XG4gICAgeCA9ICt4LCB5ID0gK3ksIHIgPSArciwgY2N3ID0gISFjY3c7XG4gICAgdmFyIGR4ID0gciAqIE1hdGguY29zKGEwKSxcbiAgICAgICAgZHkgPSByICogTWF0aC5zaW4oYTApLFxuICAgICAgICB4MCA9IHggKyBkeCxcbiAgICAgICAgeTAgPSB5ICsgZHksXG4gICAgICAgIGN3ID0gMSBeIGNjdyxcbiAgICAgICAgZGEgPSBjY3cgPyBhMCAtIGExIDogYTEgLSBhMDtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIiArIHIpO1xuXG4gICAgLy8gSXMgdGhpcyBwYXRoIGVtcHR5PyBNb3ZlIHRvICh4MCx5MCkuXG4gICAgaWYgKHRoaXMuX3gxID09PSBudWxsKSB7XG4gICAgICB0aGlzLl8gKz0gXCJNXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MCx5MCkgbm90IGNvaW5jaWRlbnQgd2l0aCB0aGUgcHJldmlvdXMgcG9pbnQ/IExpbmUgdG8gKHgwLHkwKS5cbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLl94MSAtIHgwKSA+IGVwc2lsb24gfHwgTWF0aC5hYnModGhpcy5feTEgLSB5MCkgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJMXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgZW1wdHk/IFdl4oCZcmUgZG9uZS5cbiAgICBpZiAoIXIpIHJldHVybjtcblxuICAgIC8vIERvZXMgdGhlIGFuZ2xlIGdvIHRoZSB3cm9uZyB3YXk/IEZsaXAgdGhlIGRpcmVjdGlvbi5cbiAgICBpZiAoZGEgPCAwKSBkYSA9IGRhICUgdGF1ICsgdGF1O1xuXG4gICAgLy8gSXMgdGhpcyBhIGNvbXBsZXRlIGNpcmNsZT8gRHJhdyB0d28gYXJjcyB0byBjb21wbGV0ZSB0aGUgY2lyY2xlLlxuICAgIGlmIChkYSA+IHRhdUVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDEsXCIgKyBjdyArIFwiLFwiICsgKHggLSBkeCkgKyBcIixcIiArICh5IC0gZHkpICsgXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh0aGlzLl94MSA9IHgwKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTApO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIG5vbi1lbXB0eT8gRHJhdyBhbiBhcmMhXG4gICAgZWxzZSBpZiAoZGEgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCxcIiArICgrKGRhID49IHBpKSkgKyBcIixcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4ICsgciAqIE1hdGguY29zKGExKSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkgKyByICogTWF0aC5zaW4oYTEpKTtcbiAgICB9XG4gIH0sXG4gIHJlY3Q6IGZ1bmN0aW9uKHgsIHksIHcsIGgpIHtcbiAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDAgPSB0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kwID0gdGhpcy5feTEgPSAreSkgKyBcImhcIiArICgrdykgKyBcInZcIiArICgraCkgKyBcImhcIiArICgtdykgKyBcIlpcIjtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl87XG4gIH1cbn07XG5cbmV4cG9ydHMucGF0aCA9IHBhdGg7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHNbaV0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGFyZ3VtZW50c1tpXTtcbiAgICB9XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBoc2wycmdiXG5mdW5jdGlvbiBoc2wycmdiIChoc2wpIHtcbiAgdmFyIGggPSBoc2xbMF0sXG4gICAgcyA9IGhzbFsxXSxcbiAgICBsID0gaHNsWzJdLFxuICAgIHQxLCB0MiwgdDMsIHJnYiwgdmFsXG5cbiAgaWYgKHMgPT09IDApIHtcbiAgICB2YWwgPSBsXG4gICAgcmV0dXJuIFt2YWwsIHZhbCwgdmFsXVxuICB9XG5cbiAgaWYgKGwgPCAwLjUpIHtcbiAgICB0MiA9IGwgKiAoMSArIHMpXG4gIH0gZWxzZSB7XG4gICAgdDIgPSBsICsgcyAtIGwgKiBzXG4gIH1cbiAgdDEgPSAyICogbCAtIHQyXG5cbiAgcmdiID0gWzAsIDAsIDBdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgdDMgPSBoICsgMSAvIDMgKiAtKGkgLSAxKVxuICAgIGlmICh0MyA8IDApIHtcbiAgICAgIHQzKytcbiAgICB9XG4gICAgaWYgKHQzID4gMSkge1xuICAgICAgdDMtLVxuICAgIH1cblxuICAgIGlmICg2ICogdDMgPCAxKSB7XG4gICAgICB2YWwgPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0M1xuICAgIH0gZWxzZSBpZiAoMiAqIHQzIDwgMSkge1xuICAgICAgdmFsID0gdDJcbiAgICB9IGVsc2UgaWYgKDMgKiB0MyA8IDIpIHtcbiAgICAgIHZhbCA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDMpICogNlxuICAgIH0gZWxzZSB7XG4gICAgICB2YWwgPSB0MVxuICAgIH1cblxuICAgIHJnYltpXSA9IHZhbFxuICB9XG5cbiAgcmV0dXJuIHJnYlxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZ2IyaHNsXG5mdW5jdGlvbiByZ2IyaHNsIChyZ2IpIHtcbiAgdmFyIHIgPSByZ2JbMF0sXG4gICAgZyA9IHJnYlsxXSxcbiAgICBiID0gcmdiWzJdLFxuICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxuICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgIGRlbHRhID0gbWF4IC0gbWluLFxuICAgIGgsIHMsIGxcblxuICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICBoID0gMFxuICB9IGVsc2UgaWYgKHIgPT09IG1heCkge1xuICAgIGggPSAoZyAtIGIpIC8gZGVsdGFcbiAgfSBlbHNlIGlmIChnID09PSBtYXgpIHtcbiAgICBoID0gMiArIChiIC0gcikgLyBkZWx0YVxuICB9IGVsc2UgaWYgKGIgPT09IG1heCkge1xuICAgIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhXG4gIH1cblxuICBoID0gTWF0aC5taW4oaCAqIDYwLCAzNjApXG5cbiAgaWYgKGggPCAwKSB7XG4gICAgaCArPSAzNjBcbiAgfVxuXG4gIGwgPSAobWluICsgbWF4KSAvIDJcblxuICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICBzID0gMFxuICB9IGVsc2UgaWYgKGwgPD0gMC41KSB7XG4gICAgcyA9IGRlbHRhIC8gKG1heCArIG1pbilcbiAgfSBlbHNlIHtcbiAgICBzID0gZGVsdGEgLyAoMiAtIG1heCAtIG1pbilcbiAgfVxuXG4gIHJldHVybiBbaCAvIDM2MCwgcywgbF1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBsaW5lY2xpcDtcblxubGluZWNsaXAucG9seWxpbmUgPSBsaW5lY2xpcDtcbmxpbmVjbGlwLnBvbHlnb24gPSBwb2x5Z29uY2xpcDtcblxuXG4vLyBDb2hlbi1TdXRoZXJsYW5kIGxpbmUgY2xpcHBpZ24gYWxnb3JpdGhtLCBhZGFwdGVkIHRvIGVmZmljaWVudGx5XG4vLyBoYW5kbGUgcG9seWxpbmVzIHJhdGhlciB0aGFuIGp1c3Qgc2VnbWVudHNcblxuZnVuY3Rpb24gbGluZWNsaXAocG9pbnRzLCBiYm94LCByZXN1bHQpIHtcblxuICAgIHZhciBsZW4gPSBwb2ludHMubGVuZ3RoLFxuICAgICAgICBjb2RlQSA9IGJpdENvZGUocG9pbnRzWzBdLCBiYm94KSxcbiAgICAgICAgcGFydCA9IFtdLFxuICAgICAgICBpLCBhLCBiLCBjb2RlQiwgbGFzdENvZGU7XG5cbiAgICBpZiAoIXJlc3VsdCkgcmVzdWx0ID0gW107XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgYSA9IHBvaW50c1tpIC0gMV07XG4gICAgICAgIGIgPSBwb2ludHNbaV07XG4gICAgICAgIGNvZGVCID0gbGFzdENvZGUgPSBiaXRDb2RlKGIsIGJib3gpO1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG5cbiAgICAgICAgICAgIGlmICghKGNvZGVBIHwgY29kZUIpKSB7IC8vIGFjY2VwdFxuICAgICAgICAgICAgICAgIHBhcnQucHVzaChhKTtcblxuICAgICAgICAgICAgICAgIGlmIChjb2RlQiAhPT0gbGFzdENvZGUpIHsgLy8gc2VnbWVudCB3ZW50IG91dHNpZGVcbiAgICAgICAgICAgICAgICAgICAgcGFydC5wdXNoKGIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgbGVuIC0gMSkgeyAvLyBzdGFydCBhIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gbGVuIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVBICYgY29kZUIpIHsgLy8gdHJpdmlhbCByZWplY3RcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlQSkgeyAvLyBhIG91dHNpZGUsIGludGVyc2VjdCB3aXRoIGNsaXAgZWRnZVxuICAgICAgICAgICAgICAgIGEgPSBpbnRlcnNlY3QoYSwgYiwgY29kZUEsIGJib3gpO1xuICAgICAgICAgICAgICAgIGNvZGVBID0gYml0Q29kZShhLCBiYm94KTtcblxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gYiBvdXRzaWRlXG4gICAgICAgICAgICAgICAgYiA9IGludGVyc2VjdChhLCBiLCBjb2RlQiwgYmJveCk7XG4gICAgICAgICAgICAgICAgY29kZUIgPSBiaXRDb2RlKGIsIGJib3gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29kZUEgPSBsYXN0Q29kZTtcbiAgICB9XG5cbiAgICBpZiAocGFydC5sZW5ndGgpIHJlc3VsdC5wdXNoKHBhcnQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gU3V0aGVybGFuZC1Ib2RnZW1hbiBwb2x5Z29uIGNsaXBwaW5nIGFsZ29yaXRobVxuXG5mdW5jdGlvbiBwb2x5Z29uY2xpcChwb2ludHMsIGJib3gpIHtcblxuICAgIHZhciByZXN1bHQsIGVkZ2UsIHByZXYsIHByZXZJbnNpZGUsIGksIHAsIGluc2lkZTtcblxuICAgIC8vIGNsaXAgYWdhaW5zdCBlYWNoIHNpZGUgb2YgdGhlIGNsaXAgcmVjdGFuZ2xlXG4gICAgZm9yIChlZGdlID0gMTsgZWRnZSA8PSA4OyBlZGdlICo9IDIpIHtcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIHByZXYgPSBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBwcmV2SW5zaWRlID0gIShiaXRDb2RlKHByZXYsIGJib3gpICYgZWRnZSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcCA9IHBvaW50c1tpXTtcbiAgICAgICAgICAgIGluc2lkZSA9ICEoYml0Q29kZShwLCBiYm94KSAmIGVkZ2UpO1xuXG4gICAgICAgICAgICAvLyBpZiBzZWdtZW50IGdvZXMgdGhyb3VnaCB0aGUgY2xpcCB3aW5kb3csIGFkZCBhbiBpbnRlcnNlY3Rpb25cbiAgICAgICAgICAgIGlmIChpbnNpZGUgIT09IHByZXZJbnNpZGUpIHJlc3VsdC5wdXNoKGludGVyc2VjdChwcmV2LCBwLCBlZGdlLCBiYm94KSk7XG5cbiAgICAgICAgICAgIGlmIChpbnNpZGUpIHJlc3VsdC5wdXNoKHApOyAvLyBhZGQgYSBwb2ludCBpZiBpdCdzIGluc2lkZVxuXG4gICAgICAgICAgICBwcmV2ID0gcDtcbiAgICAgICAgICAgIHByZXZJbnNpZGUgPSBpbnNpZGU7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHMgPSByZXN1bHQ7XG5cbiAgICAgICAgaWYgKCFwb2ludHMubGVuZ3RoKSBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBpbnRlcnNlY3QgYSBzZWdtZW50IGFnYWluc3Qgb25lIG9mIHRoZSA0IGxpbmVzIHRoYXQgbWFrZSB1cCB0aGUgYmJveFxuXG5mdW5jdGlvbiBpbnRlcnNlY3QoYSwgYiwgZWRnZSwgYmJveCkge1xuICAgIHJldHVybiBlZGdlICYgOCA/IFthWzBdICsgKGJbMF0gLSBhWzBdKSAqIChiYm94WzNdIC0gYVsxXSkgLyAoYlsxXSAtIGFbMV0pLCBiYm94WzNdXSA6IC8vIHRvcFxuICAgICAgICAgICBlZGdlICYgNCA/IFthWzBdICsgKGJbMF0gLSBhWzBdKSAqIChiYm94WzFdIC0gYVsxXSkgLyAoYlsxXSAtIGFbMV0pLCBiYm94WzFdXSA6IC8vIGJvdHRvbVxuICAgICAgICAgICBlZGdlICYgMiA/IFtiYm94WzJdLCBhWzFdICsgKGJbMV0gLSBhWzFdKSAqIChiYm94WzJdIC0gYVswXSkgLyAoYlswXSAtIGFbMF0pXSA6IC8vIHJpZ2h0XG4gICAgICAgICAgIGVkZ2UgJiAxID8gW2Jib3hbMF0sIGFbMV0gKyAoYlsxXSAtIGFbMV0pICogKGJib3hbMF0gLSBhWzBdKSAvIChiWzBdIC0gYVswXSldIDogLy8gbGVmdFxuICAgICAgICAgICBudWxsO1xufVxuXG4vLyBiaXQgY29kZSByZWZsZWN0cyB0aGUgcG9pbnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGJib3g6XG5cbi8vICAgICAgICAgbGVmdCAgbWlkICByaWdodFxuLy8gICAgdG9wICAxMDAxICAxMDAwICAxMDEwXG4vLyAgICBtaWQgIDAwMDEgIDAwMDAgIDAwMTBcbi8vIGJvdHRvbSAgMDEwMSAgMDEwMCAgMDExMFxuXG5mdW5jdGlvbiBiaXRDb2RlKHAsIGJib3gpIHtcbiAgICB2YXIgY29kZSA9IDA7XG5cbiAgICBpZiAocFswXSA8IGJib3hbMF0pIGNvZGUgfD0gMTsgLy8gbGVmdFxuICAgIGVsc2UgaWYgKHBbMF0gPiBiYm94WzJdKSBjb2RlIHw9IDI7IC8vIHJpZ2h0XG5cbiAgICBpZiAocFsxXSA8IGJib3hbMV0pIGNvZGUgfD0gNDsgLy8gYm90dG9tXG4gICAgZWxzZSBpZiAocFsxXSA+IGJib3hbM10pIGNvZGUgfD0gODsgLy8gdG9wXG5cbiAgICByZXR1cm4gY29kZTtcbn1cbiIsIid1c2Ugc3RyaWN0J1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBub3JtYWxpemVcclxuXHJcbnZhciBhcmNUb0N1cnZlID0gcmVxdWlyZSgnc3ZnLWFyYy10by1jdWJpYy1iZXppZXInKVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplKHBhdGgpe1xyXG4gIC8vIGluaXQgc3RhdGVcclxuICB2YXIgcHJldlxyXG4gIHZhciByZXN1bHQgPSBbXVxyXG4gIHZhciBiZXppZXJYID0gMFxyXG4gIHZhciBiZXppZXJZID0gMFxyXG4gIHZhciBzdGFydFggPSAwXHJcbiAgdmFyIHN0YXJ0WSA9IDBcclxuICB2YXIgcXVhZFggPSBudWxsXHJcbiAgdmFyIHF1YWRZID0gbnVsbFxyXG4gIHZhciB4ID0gMFxyXG4gIHZhciB5ID0gMFxyXG5cclxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gcGF0aC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgdmFyIHNlZyA9IHBhdGhbaV1cclxuICAgIHZhciBjb21tYW5kID0gc2VnWzBdXHJcblxyXG4gICAgc3dpdGNoIChjb21tYW5kKSB7XHJcbiAgICAgIGNhc2UgJ00nOlxyXG4gICAgICAgIHN0YXJ0WCA9IHNlZ1sxXVxyXG4gICAgICAgIHN0YXJ0WSA9IHNlZ1syXVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgIHZhciBjdXJ2ZXMgPSBhcmNUb0N1cnZlKHtcclxuICAgICAgICAgIHB4OiB4LFxyXG4gICAgICAgICAgcHk6IHksXHJcbiAgICAgICAgICBjeDogc2VnWzZdLFxyXG4gICAgICAgICAgY3k6ICBzZWdbN10sXHJcbiAgICAgICAgICByeDogc2VnWzFdLFxyXG4gICAgICAgICAgcnk6IHNlZ1syXSxcclxuICAgICAgICAgIHhBeGlzUm90YXRpb246IHNlZ1szXSxcclxuICAgICAgICAgIGxhcmdlQXJjRmxhZzogc2VnWzRdLFxyXG4gICAgICAgICAgc3dlZXBGbGFnOiBzZWdbNV1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICAvLyBudWxsLWN1cnZlc1xyXG4gICAgICAgIGlmICghY3VydmVzLmxlbmd0aCkgY29udGludWVcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGM7IGogPCBjdXJ2ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGMgPSBjdXJ2ZXNbal1cclxuICAgICAgICAgIHNlZyA9IFsnQycsIGMueDEsIGMueTEsIGMueDIsIGMueTIsIGMueCwgYy55XVxyXG4gICAgICAgICAgaWYgKGogPCBjdXJ2ZXMubGVuZ3RoIC0gMSkgcmVzdWx0LnB1c2goc2VnKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnUyc6XHJcbiAgICAgICAgLy8gZGVmYXVsdCBjb250cm9sIHBvaW50XHJcbiAgICAgICAgdmFyIGN4ID0geFxyXG4gICAgICAgIHZhciBjeSA9IHlcclxuICAgICAgICBpZiAocHJldiA9PSAnQycgfHwgcHJldiA9PSAnUycpIHtcclxuICAgICAgICAgIGN4ICs9IGN4IC0gYmV6aWVyWCAvLyByZWZsZWN0IHRoZSBwcmV2aW91cyBjb21tYW5kJ3MgY29udHJvbFxyXG4gICAgICAgICAgY3kgKz0gY3kgLSBiZXppZXJZIC8vIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvaW50XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlZyA9IFsnQycsIGN4LCBjeSwgc2VnWzFdLCBzZWdbMl0sIHNlZ1szXSwgc2VnWzRdXVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ1QnOlxyXG4gICAgICAgIGlmIChwcmV2ID09ICdRJyB8fCBwcmV2ID09ICdUJykge1xyXG4gICAgICAgICAgcXVhZFggPSB4ICogMiAtIHF1YWRYIC8vIGFzIHdpdGggJ1MnIHJlZmxlY3QgcHJldmlvdXMgY29udHJvbCBwb2ludFxyXG4gICAgICAgICAgcXVhZFkgPSB5ICogMiAtIHF1YWRZXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHF1YWRYID0geFxyXG4gICAgICAgICAgcXVhZFkgPSB5XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlZyA9IHF1YWRyYXRpYyh4LCB5LCBxdWFkWCwgcXVhZFksIHNlZ1sxXSwgc2VnWzJdKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ1EnOlxyXG4gICAgICAgIHF1YWRYID0gc2VnWzFdXHJcbiAgICAgICAgcXVhZFkgPSBzZWdbMl1cclxuICAgICAgICBzZWcgPSBxdWFkcmF0aWMoeCwgeSwgc2VnWzFdLCBzZWdbMl0sIHNlZ1szXSwgc2VnWzRdKVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ0wnOlxyXG4gICAgICAgIHNlZyA9IGxpbmUoeCwgeSwgc2VnWzFdLCBzZWdbMl0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnSCc6XHJcbiAgICAgICAgc2VnID0gbGluZSh4LCB5LCBzZWdbMV0sIHkpXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnVic6XHJcbiAgICAgICAgc2VnID0gbGluZSh4LCB5LCB4LCBzZWdbMV0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnWic6XHJcbiAgICAgICAgc2VnID0gbGluZSh4LCB5LCBzdGFydFgsIHN0YXJ0WSlcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHVwZGF0ZSBzdGF0ZVxyXG4gICAgcHJldiA9IGNvbW1hbmRcclxuICAgIHggPSBzZWdbc2VnLmxlbmd0aCAtIDJdXHJcbiAgICB5ID0gc2VnW3NlZy5sZW5ndGggLSAxXVxyXG4gICAgaWYgKHNlZy5sZW5ndGggPiA0KSB7XHJcbiAgICAgIGJlemllclggPSBzZWdbc2VnLmxlbmd0aCAtIDRdXHJcbiAgICAgIGJlemllclkgPSBzZWdbc2VnLmxlbmd0aCAtIDNdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiZXppZXJYID0geFxyXG4gICAgICBiZXppZXJZID0geVxyXG4gICAgfVxyXG4gICAgcmVzdWx0LnB1c2goc2VnKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdFxyXG59XHJcblxyXG5mdW5jdGlvbiBsaW5lKHgxLCB5MSwgeDIsIHkyKXtcclxuICByZXR1cm4gWydDJywgeDEsIHkxLCB4MiwgeTIsIHgyLCB5Ml1cclxufVxyXG5cclxuZnVuY3Rpb24gcXVhZHJhdGljKHgxLCB5MSwgY3gsIGN5LCB4MiwgeTIpe1xyXG4gIHJldHVybiBbXHJcbiAgICAnQycsXHJcbiAgICB4MS8zICsgKDIvMykgKiBjeCxcclxuICAgIHkxLzMgKyAoMi8zKSAqIGN5LFxyXG4gICAgeDIvMyArICgyLzMpICogY3gsXHJcbiAgICB5Mi8zICsgKDIvMykgKiBjeSxcclxuICAgIHgyLFxyXG4gICAgeTJcclxuICBdXHJcbn1cclxuIiwidmFyIGNvbnZlcnQgPSByZXF1aXJlKCdjb2xvci1jb252ZXJ0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzdHIpIHtcbiAgICB2YXIgbSwgY29udiwgcGFydHMsIGFscGhhO1xuICAgIGlmIChtID0gL14oKD86cmdifGhzW2x2XXxjbXlrfHh5enxsYWIpYT8pXFxzKlxcKChbXlxcKV0qKVxcKS8uZXhlYyhjc3RyKSkge1xuICAgICAgICB2YXIgbmFtZSA9IG1bMV07XG4gICAgICAgIHZhciBiYXNlID0gbmFtZS5yZXBsYWNlKC9hJC8sICcnKTtcbiAgICAgICAgdmFyIHNpemUgPSBiYXNlID09PSAnY215aycgPyA0IDogMztcbiAgICAgICAgY29udiA9IGNvbnZlcnRbYmFzZV07XG4gICAgICAgIFxuICAgICAgICBwYXJ0cyA9IG1bMl0ucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG4gICAgICAgICAgICAuc3BsaXQoL1xccyosXFxzKi8pXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKC8lJC8udGVzdCh4KSAmJiBpID09PSBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHgpIC8gMTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgvJSQvLnRlc3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgO1xuICAgICAgICBpZiAobmFtZSA9PT0gYmFzZSkgcGFydHMucHVzaCgxKTtcbiAgICAgICAgYWxwaGEgPSBwYXJ0c1tzaXplXSA9PT0gdW5kZWZpbmVkID8gMSA6IHBhcnRzW3NpemVdO1xuICAgICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDAsIHNpemUpO1xuICAgICAgICBcbiAgICAgICAgY29udltiYXNlXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhcnRzIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKC9eI1tBLUZhLWYwLTldKyQvLnRlc3QoY3N0cikpIHtcbiAgICAgICAgdmFyIGJhc2UgPSBjc3RyLnJlcGxhY2UoL14jLywnJyk7XG4gICAgICAgIHZhciBzaXplID0gYmFzZS5sZW5ndGg7XG4gICAgICAgIGNvbnYgPSBjb252ZXJ0LnJnYjtcbiAgICAgICAgcGFydHMgPSBiYXNlLnNwbGl0KHNpemUgPT09IDMgPyAvKC4pLyA6IC8oLi4pLyk7XG4gICAgICAgIHBhcnRzID0gcGFydHMuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgaWYgKHNpemUgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHggKyB4LCAxNik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoeCwgMTYpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgO1xuICAgICAgICBhbHBoYSA9IDE7XG4gICAgICAgIGNvbnYucmdiID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcGFydHMgfTtcbiAgICAgICAgaWYgKCFwYXJ0c1swXSkgcGFydHNbMF0gPSAwO1xuICAgICAgICBpZiAoIXBhcnRzWzFdKSBwYXJ0c1sxXSA9IDA7XG4gICAgICAgIGlmICghcGFydHNbMl0pIHBhcnRzWzJdID0gMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnYgPSBjb252ZXJ0LmtleXdvcmQ7XG4gICAgICAgIGNvbnYua2V5d29yZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNzdHIgfTtcbiAgICAgICAgcGFydHMgPSBjc3RyO1xuICAgICAgICBhbHBoYSA9IDE7XG4gICAgfVxuICAgIFxuICAgIHZhciByZXMgPSB7XG4gICAgICAgIHJnYjogdW5kZWZpbmVkLFxuICAgICAgICBoc2w6IHVuZGVmaW5lZCxcbiAgICAgICAgaHN2OiB1bmRlZmluZWQsXG4gICAgICAgIGNteWs6IHVuZGVmaW5lZCxcbiAgICAgICAga2V5d29yZDogdW5kZWZpbmVkLFxuICAgICAgICBoZXg6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgdHJ5IHsgcmVzLnJnYiA9IGNvbnYucmdiKHBhcnRzKSB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7IHJlcy5oc2wgPSBjb252LmhzbChwYXJ0cykgfSBjYXRjaCAoZSkge31cbiAgICB0cnkgeyByZXMuaHN2ID0gY29udi5oc3YocGFydHMpIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHsgcmVzLmNteWsgPSBjb252LmNteWsocGFydHMpIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHsgcmVzLmtleXdvcmQgPSBjb252LmtleXdvcmQocGFydHMpIH0gY2F0Y2ggKGUpIHt9XG4gICAgXG4gICAgaWYgKHJlcy5yZ2IpIHJlcy5oZXggPSAnIycgKyByZXMucmdiLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgICB2YXIgcyA9IHgudG9TdHJpbmcoMTYpO1xuICAgICAgICBpZiAocy5sZW5ndGggPT09IDEpIHJldHVybiAnMCcgKyBzO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9KS5qb2luKCcnKTtcbiAgICBcbiAgICBpZiAocmVzLnJnYikgcmVzLnJnYmEgPSByZXMucmdiLmNvbmNhdChhbHBoYSk7XG4gICAgaWYgKHJlcy5oc2wpIHJlcy5oc2xhID0gcmVzLmhzbC5jb25jYXQoYWxwaGEpO1xuICAgIGlmIChyZXMuaHN2KSByZXMuaHN2YSA9IHJlcy5oc3YuY29uY2F0KGFscGhhKTtcbiAgICBpZiAocmVzLmNteWspIHJlcy5jbXlrYSA9IHJlcy5jbXlrLmNvbmNhdChhbHBoYSk7XG4gICAgXG4gICAgcmV0dXJuIHJlcztcbn07XG4iLCJcbm1vZHVsZS5leHBvcnRzID0gcGFyc2VcblxuLyoqXG4gKiBleHBlY3RlZCBhcmd1bWVudCBsZW5ndGhzXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cbnZhciBsZW5ndGggPSB7YTogNywgYzogNiwgaDogMSwgbDogMiwgbTogMiwgcTogNCwgczogNCwgdDogMiwgdjogMSwgejogMH1cblxuLyoqXG4gKiBzZWdtZW50IHBhdHRlcm5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cblxudmFyIHNlZ21lbnQgPSAvKFthc3R2enFtaGxjXSkoW15hc3R2enFtaGxjXSopL2lnXG5cbi8qKlxuICogcGFyc2UgYW4gc3ZnIHBhdGggZGF0YSBzdHJpbmcuIEdlbmVyYXRlcyBhbiBBcnJheVxuICogb2YgY29tbWFuZHMgd2hlcmUgZWFjaCBjb21tYW5kIGlzIGFuIEFycmF5IG9mIHRoZVxuICogZm9ybSBgW2NvbW1hbmQsIGFyZzEsIGFyZzIsIC4uLl1gXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cbmZ1bmN0aW9uIHBhcnNlKHBhdGgpIHtcblx0dmFyIGRhdGEgPSBbXVxuXHRwYXRoLnJlcGxhY2Uoc2VnbWVudCwgZnVuY3Rpb24oXywgY29tbWFuZCwgYXJncyl7XG5cdFx0dmFyIHR5cGUgPSBjb21tYW5kLnRvTG93ZXJDYXNlKClcblx0XHRhcmdzID0gcGFyc2VWYWx1ZXMoYXJncylcblxuXHRcdC8vIG92ZXJsb2FkZWQgbW92ZVRvXG5cdFx0aWYgKHR5cGUgPT0gJ20nICYmIGFyZ3MubGVuZ3RoID4gMikge1xuXHRcdFx0ZGF0YS5wdXNoKFtjb21tYW5kXS5jb25jYXQoYXJncy5zcGxpY2UoMCwgMikpKVxuXHRcdFx0dHlwZSA9ICdsJ1xuXHRcdFx0Y29tbWFuZCA9IGNvbW1hbmQgPT0gJ20nID8gJ2wnIDogJ0wnXG5cdFx0fVxuXG5cdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PSBsZW5ndGhbdHlwZV0pIHtcblx0XHRcdFx0YXJncy51bnNoaWZ0KGNvbW1hbmQpXG5cdFx0XHRcdHJldHVybiBkYXRhLnB1c2goYXJncylcblx0XHRcdH1cblx0XHRcdGlmIChhcmdzLmxlbmd0aCA8IGxlbmd0aFt0eXBlXSkgdGhyb3cgbmV3IEVycm9yKCdtYWxmb3JtZWQgcGF0aCBkYXRhJylcblx0XHRcdGRhdGEucHVzaChbY29tbWFuZF0uY29uY2F0KGFyZ3Muc3BsaWNlKDAsIGxlbmd0aFt0eXBlXSkpKVxuXHRcdH1cblx0fSlcblx0cmV0dXJuIGRhdGFcbn1cblxudmFyIG51bWJlciA9IC8tP1swLTldKlxcLj9bMC05XSsoPzplWy0rXT9cXGQrKT8vaWdcblxuZnVuY3Rpb24gcGFyc2VWYWx1ZXMoYXJncykge1xuXHR2YXIgbnVtYmVycyA9IGFyZ3MubWF0Y2gobnVtYmVyKVxuXHRyZXR1cm4gbnVtYmVycyA/IG51bWJlcnMubWFwKE51bWJlcikgOiBbXVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBwcmltaXRpdmVRdWFkXG5cbmZ1bmN0aW9uIHByaW1pdGl2ZVF1YWQgKHNjYWxlKSB7XG4gIHNjYWxlID0gdHlwZW9mIHNjYWxlICE9PSAndW5kZWZpbmVkJyA/IHNjYWxlIDogMVxuICBpZiAoIUFycmF5LmlzQXJyYXkoc2NhbGUpKSB7XG4gICAgc2NhbGUgPSBbc2NhbGUsIHNjYWxlXVxuICB9XG5cbiAgdmFyIHBvc2l0aW9ucyA9IFtcbiAgICBbLXNjYWxlWzBdLCAtc2NhbGVbMV0sIDBdLFxuICAgIFtzY2FsZVswXSwgLXNjYWxlWzFdLCAwXSxcbiAgICBbc2NhbGVbMF0sIHNjYWxlWzFdLCAwXSxcbiAgICBbLXNjYWxlWzBdLCBzY2FsZVsxXSwgMF1cbiAgXVxuICB2YXIgY2VsbHMgPSBbXG4gICAgWzAsIDEsIDJdLFxuICAgIFsyLCAzLCAwXVxuICBdXG4gIHZhciB1dnMgPSBbWzAsIDBdLCBbMSwgMF0sIFsxLCAxXSwgWzAsIDFdXVxuICB2YXIgbiA9IFswLCAwLCAtMV1cbiAgdmFyIG5vcm1hbHMgPSBbIG4uc2xpY2UoKSwgbi5zbGljZSgpLCBuLnNsaWNlKCksIG4uc2xpY2UoKSBdXG4gIHJldHVybiB7XG4gICAgcG9zaXRpb25zOiBwb3NpdGlvbnMsXG4gICAgY2VsbHM6IGNlbGxzLFxuICAgIHV2czogdXZzLFxuICAgIG5vcm1hbHM6IG5vcm1hbHNcbiAgfVxufVxuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsLmNyZWF0ZVJFR0wgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbnZhciBpc1R5cGVkQXJyYXkgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gKFxuICAgIHggaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIEludDhBcnJheSB8fFxuICAgIHggaW5zdGFuY2VvZiBJbnQxNkFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIEludDMyQXJyYXkgfHxcbiAgICB4IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5IHx8XG4gICAgeCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSB8fFxuICAgIHggaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheVxuICApXG59XG5cbnZhciBleHRlbmQgPSBmdW5jdGlvbiAoYmFzZSwgb3B0cykge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdHMpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgIGJhc2Vba2V5c1tpXV0gPSBvcHRzW2tleXNbaV1dXG4gIH1cbiAgcmV0dXJuIGJhc2Vcbn1cblxuLy8gRXJyb3IgY2hlY2tpbmcgYW5kIHBhcmFtZXRlciB2YWxpZGF0aW9uLlxuLy9cbi8vIFN0YXRlbWVudHMgZm9yIHRoZSBmb3JtIGBjaGVjay5zb21lUHJvY2VkdXJlKC4uLilgIGdldCByZW1vdmVkIGJ5XG4vLyBhIGJyb3dzZXJpZnkgdHJhbnNmb3JtIGZvciBvcHRpbWl6ZWQvbWluaWZpZWQgYnVuZGxlcy5cbi8vXG4vKiBnbG9iYWxzIGF0b2IgKi9cbnZhciBlbmRsID0gJ1xcbidcblxuLy8gb25seSB1c2VkIGZvciBleHRyYWN0aW5nIHNoYWRlciBuYW1lcy4gIGlmIGF0b2Igbm90IHByZXNlbnQsIHRoZW4gZXJyb3JzXG4vLyB3aWxsIGJlIHNsaWdodGx5IGNyYXBwaWVyXG5mdW5jdGlvbiBkZWNvZGVCNjQgKHN0cikge1xuICBpZiAodHlwZW9mIGF0b2IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGF0b2Ioc3RyKVxuICB9XG4gIHJldHVybiAnYmFzZTY0OicgKyBzdHJcbn1cblxuZnVuY3Rpb24gcmFpc2UgKG1lc3NhZ2UpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKCcocmVnbCkgJyArIG1lc3NhZ2UpXG4gIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gIHRocm93IGVycm9yXG59XG5cbmZ1bmN0aW9uIGNoZWNrIChwcmVkLCBtZXNzYWdlKSB7XG4gIGlmICghcHJlZCkge1xuICAgIHJhaXNlKG1lc3NhZ2UpXG4gIH1cbn1cblxuZnVuY3Rpb24gZW5jb2xvbiAobWVzc2FnZSkge1xuICBpZiAobWVzc2FnZSkge1xuICAgIHJldHVybiAnOiAnICsgbWVzc2FnZVxuICB9XG4gIHJldHVybiAnJ1xufVxuXG5mdW5jdGlvbiBjaGVja1BhcmFtZXRlciAocGFyYW0sIHBvc3NpYmlsaXRpZXMsIG1lc3NhZ2UpIHtcbiAgaWYgKCEocGFyYW0gaW4gcG9zc2liaWxpdGllcykpIHtcbiAgICByYWlzZSgndW5rbm93biBwYXJhbWV0ZXIgKCcgKyBwYXJhbSArICcpJyArIGVuY29sb24obWVzc2FnZSkgK1xuICAgICAgICAgICcuIHBvc3NpYmxlIHZhbHVlczogJyArIE9iamVjdC5rZXlzKHBvc3NpYmlsaXRpZXMpLmpvaW4oKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0lzVHlwZWRBcnJheSAoZGF0YSwgbWVzc2FnZSkge1xuICBpZiAoIWlzVHlwZWRBcnJheShkYXRhKSkge1xuICAgIHJhaXNlKFxuICAgICAgJ2ludmFsaWQgcGFyYW1ldGVyIHR5cGUnICsgZW5jb2xvbihtZXNzYWdlKSArXG4gICAgICAnLiBtdXN0IGJlIGEgdHlwZWQgYXJyYXknKVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0YW5kYXJkVHlwZUVoICh2YWx1ZSwgdHlwZSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdudW1iZXInOiByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJ1xuICAgIGNhc2UgJ29iamVjdCc6IHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG4gICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICBjYXNlICdib29sZWFuJzogcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nXG4gICAgY2FzZSAnZnVuY3Rpb24nOiByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgY2FzZSAndW5kZWZpbmVkJzogcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCdcbiAgICBjYXNlICdzeW1ib2wnOiByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJ1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrVHlwZU9mICh2YWx1ZSwgdHlwZSwgbWVzc2FnZSkge1xuICBpZiAoIXN0YW5kYXJkVHlwZUVoKHZhbHVlLCB0eXBlKSkge1xuICAgIHJhaXNlKFxuICAgICAgJ2ludmFsaWQgcGFyYW1ldGVyIHR5cGUnICsgZW5jb2xvbihtZXNzYWdlKSArXG4gICAgICAnLiBleHBlY3RlZCAnICsgdHlwZSArICcsIGdvdCAnICsgKHR5cGVvZiB2YWx1ZSkpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOb25OZWdhdGl2ZUludCAodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCEoKHZhbHVlID49IDApICYmXG4gICAgICAgICgodmFsdWUgfCAwKSA9PT0gdmFsdWUpKSkge1xuICAgIHJhaXNlKCdpbnZhbGlkIHBhcmFtZXRlciB0eXBlLCAoJyArIHZhbHVlICsgJyknICsgZW5jb2xvbihtZXNzYWdlKSArXG4gICAgICAgICAgJy4gbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXInKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrT25lT2YgKHZhbHVlLCBsaXN0LCBtZXNzYWdlKSB7XG4gIGlmIChsaXN0LmluZGV4T2YodmFsdWUpIDwgMCkge1xuICAgIHJhaXNlKCdpbnZhbGlkIHZhbHVlJyArIGVuY29sb24obWVzc2FnZSkgKyAnLiBtdXN0IGJlIG9uZSBvZjogJyArIGxpc3QpXG4gIH1cbn1cblxudmFyIGNvbnN0cnVjdG9yS2V5cyA9IFtcbiAgJ2dsJyxcbiAgJ2NhbnZhcycsXG4gICdjb250YWluZXInLFxuICAnYXR0cmlidXRlcycsXG4gICdwaXhlbFJhdGlvJyxcbiAgJ2V4dGVuc2lvbnMnLFxuICAnb3B0aW9uYWxFeHRlbnNpb25zJyxcbiAgJ3Byb2ZpbGUnLFxuICAnb25Eb25lJ1xuXVxuXG5mdW5jdGlvbiBjaGVja0NvbnN0cnVjdG9yIChvYmopIHtcbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoY29uc3RydWN0b3JLZXlzLmluZGV4T2Yoa2V5KSA8IDApIHtcbiAgICAgIHJhaXNlKCdpbnZhbGlkIHJlZ2wgY29uc3RydWN0b3IgYXJndW1lbnQgXCInICsga2V5ICsgJ1wiLiBtdXN0IGJlIG9uZSBvZiAnICsgY29uc3RydWN0b3JLZXlzKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gbGVmdFBhZCAoc3RyLCBuKSB7XG4gIHN0ciA9IHN0ciArICcnXG4gIHdoaWxlIChzdHIubGVuZ3RoIDwgbikge1xuICAgIHN0ciA9ICcgJyArIHN0clxuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gU2hhZGVyRmlsZSAoKSB7XG4gIHRoaXMubmFtZSA9ICd1bmtub3duJ1xuICB0aGlzLmxpbmVzID0gW11cbiAgdGhpcy5pbmRleCA9IHt9XG4gIHRoaXMuaGFzRXJyb3JzID0gZmFsc2Vcbn1cblxuZnVuY3Rpb24gU2hhZGVyTGluZSAobnVtYmVyLCBsaW5lKSB7XG4gIHRoaXMubnVtYmVyID0gbnVtYmVyXG4gIHRoaXMubGluZSA9IGxpbmVcbiAgdGhpcy5lcnJvcnMgPSBbXVxufVxuXG5mdW5jdGlvbiBTaGFkZXJFcnJvciAoZmlsZU51bWJlciwgbGluZU51bWJlciwgbWVzc2FnZSkge1xuICB0aGlzLmZpbGUgPSBmaWxlTnVtYmVyXG4gIHRoaXMubGluZSA9IGxpbmVOdW1iZXJcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxufVxuXG5mdW5jdGlvbiBndWVzc0NvbW1hbmQgKCkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoKVxuICB2YXIgc3RhY2sgPSAoZXJyb3Iuc3RhY2sgfHwgZXJyb3IpLnRvU3RyaW5nKClcbiAgdmFyIHBhdCA9IC9jb21waWxlUHJvY2VkdXJlLipcXG5cXHMqYXQuKlxcKCguKilcXCkvLmV4ZWMoc3RhY2spXG4gIGlmIChwYXQpIHtcbiAgICByZXR1cm4gcGF0WzFdXG4gIH1cbiAgdmFyIHBhdDIgPSAvY29tcGlsZVByb2NlZHVyZS4qXFxuXFxzKmF0XFxzKyguKikoXFxufCQpLy5leGVjKHN0YWNrKVxuICBpZiAocGF0Mikge1xuICAgIHJldHVybiBwYXQyWzFdXG4gIH1cbiAgcmV0dXJuICd1bmtub3duJ1xufVxuXG5mdW5jdGlvbiBndWVzc0NhbGxTaXRlICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKClcbiAgdmFyIHN0YWNrID0gKGVycm9yLnN0YWNrIHx8IGVycm9yKS50b1N0cmluZygpXG4gIHZhciBwYXQgPSAvYXQgUkVHTENvbW1hbmQuKlxcblxccythdC4qXFwoKC4qKVxcKS8uZXhlYyhzdGFjaylcbiAgaWYgKHBhdCkge1xuICAgIHJldHVybiBwYXRbMV1cbiAgfVxuICB2YXIgcGF0MiA9IC9hdCBSRUdMQ29tbWFuZC4qXFxuXFxzK2F0XFxzKyguKilcXG4vLmV4ZWMoc3RhY2spXG4gIGlmIChwYXQyKSB7XG4gICAgcmV0dXJuIHBhdDJbMV1cbiAgfVxuICByZXR1cm4gJ3Vua25vd24nXG59XG5cbmZ1bmN0aW9uIHBhcnNlU291cmNlIChzb3VyY2UsIGNvbW1hbmQpIHtcbiAgdmFyIGxpbmVzID0gc291cmNlLnNwbGl0KCdcXG4nKVxuICB2YXIgbGluZU51bWJlciA9IDFcbiAgdmFyIGZpbGVOdW1iZXIgPSAwXG4gIHZhciBmaWxlcyA9IHtcbiAgICB1bmtub3duOiBuZXcgU2hhZGVyRmlsZSgpLFxuICAgIDA6IG5ldyBTaGFkZXJGaWxlKClcbiAgfVxuICBmaWxlcy51bmtub3duLm5hbWUgPSBmaWxlc1swXS5uYW1lID0gY29tbWFuZCB8fCBndWVzc0NvbW1hbmQoKVxuICBmaWxlcy51bmtub3duLmxpbmVzLnB1c2gobmV3IFNoYWRlckxpbmUoMCwgJycpKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGxpbmUgPSBsaW5lc1tpXVxuICAgIHZhciBwYXJ0cyA9IC9eXFxzKiNcXHMqKFxcdyspXFxzKyguKylcXHMqJC8uZXhlYyhsaW5lKVxuICAgIGlmIChwYXJ0cykge1xuICAgICAgc3dpdGNoIChwYXJ0c1sxXSkge1xuICAgICAgICBjYXNlICdsaW5lJzpcbiAgICAgICAgICB2YXIgbGluZU51bWJlckluZm8gPSAvKFxcZCspKFxccytcXGQrKT8vLmV4ZWMocGFydHNbMl0pXG4gICAgICAgICAgaWYgKGxpbmVOdW1iZXJJbmZvKSB7XG4gICAgICAgICAgICBsaW5lTnVtYmVyID0gbGluZU51bWJlckluZm9bMV0gfCAwXG4gICAgICAgICAgICBpZiAobGluZU51bWJlckluZm9bMl0pIHtcbiAgICAgICAgICAgICAgZmlsZU51bWJlciA9IGxpbmVOdW1iZXJJbmZvWzJdIHwgMFxuICAgICAgICAgICAgICBpZiAoIShmaWxlTnVtYmVyIGluIGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIGZpbGVzW2ZpbGVOdW1iZXJdID0gbmV3IFNoYWRlckZpbGUoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2RlZmluZSc6XG4gICAgICAgICAgdmFyIG5hbWVJbmZvID0gL1NIQURFUl9OQU1FKF9CNjQpP1xccysoLiopJC8uZXhlYyhwYXJ0c1syXSlcbiAgICAgICAgICBpZiAobmFtZUluZm8pIHtcbiAgICAgICAgICAgIGZpbGVzW2ZpbGVOdW1iZXJdLm5hbWUgPSAobmFtZUluZm9bMV1cbiAgICAgICAgICAgICAgPyBkZWNvZGVCNjQobmFtZUluZm9bMl0pXG4gICAgICAgICAgICAgIDogbmFtZUluZm9bMl0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIGZpbGVzW2ZpbGVOdW1iZXJdLmxpbmVzLnB1c2gobmV3IFNoYWRlckxpbmUobGluZU51bWJlcisrLCBsaW5lKSlcbiAgfVxuICBPYmplY3Qua2V5cyhmaWxlcykuZm9yRWFjaChmdW5jdGlvbiAoZmlsZU51bWJlcikge1xuICAgIHZhciBmaWxlID0gZmlsZXNbZmlsZU51bWJlcl1cbiAgICBmaWxlLmxpbmVzLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGZpbGUuaW5kZXhbbGluZS5udW1iZXJdID0gbGluZVxuICAgIH0pXG4gIH0pXG4gIHJldHVybiBmaWxlc1xufVxuXG5mdW5jdGlvbiBwYXJzZUVycm9yTG9nIChlcnJMb2cpIHtcbiAgdmFyIHJlc3VsdCA9IFtdXG4gIGVyckxvZy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiAoZXJyTXNnKSB7XG4gICAgaWYgKGVyck1zZy5sZW5ndGggPCA1KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIHBhcnRzID0gL15FUlJPUjpcXHMrKFxcZCspOihcXGQrKTpcXHMqKC4qKSQvLmV4ZWMoZXJyTXNnKVxuICAgIGlmIChwYXJ0cykge1xuICAgICAgcmVzdWx0LnB1c2gobmV3IFNoYWRlckVycm9yKFxuICAgICAgICBwYXJ0c1sxXSB8IDAsXG4gICAgICAgIHBhcnRzWzJdIHwgMCxcbiAgICAgICAgcGFydHNbM10udHJpbSgpKSlcbiAgICB9IGVsc2UgaWYgKGVyck1zZy5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHQucHVzaChuZXcgU2hhZGVyRXJyb3IoJ3Vua25vd24nLCAwLCBlcnJNc2cpKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBhbm5vdGF0ZUZpbGVzIChmaWxlcywgZXJyb3JzKSB7XG4gIGVycm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgIHZhciBmaWxlID0gZmlsZXNbZXJyb3IuZmlsZV1cbiAgICBpZiAoZmlsZSkge1xuICAgICAgdmFyIGxpbmUgPSBmaWxlLmluZGV4W2Vycm9yLmxpbmVdXG4gICAgICBpZiAobGluZSkge1xuICAgICAgICBsaW5lLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgICBmaWxlLmhhc0Vycm9ycyA9IHRydWVcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIGZpbGVzLnVua25vd24uaGFzRXJyb3JzID0gdHJ1ZVxuICAgIGZpbGVzLnVua25vd24ubGluZXNbMF0uZXJyb3JzLnB1c2goZXJyb3IpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNoZWNrU2hhZGVyRXJyb3IgKGdsLCBzaGFkZXIsIHNvdXJjZSwgdHlwZSwgY29tbWFuZCkge1xuICBpZiAoIWdsLmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSkge1xuICAgIHZhciBlcnJMb2cgPSBnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcilcbiAgICB2YXIgdHlwZU5hbWUgPSB0eXBlID09PSBnbC5GUkFHTUVOVF9TSEFERVIgPyAnZnJhZ21lbnQnIDogJ3ZlcnRleCdcbiAgICBjaGVja0NvbW1hbmRUeXBlKHNvdXJjZSwgJ3N0cmluZycsIHR5cGVOYW1lICsgJyBzaGFkZXIgc291cmNlIG11c3QgYmUgYSBzdHJpbmcnLCBjb21tYW5kKVxuICAgIHZhciBmaWxlcyA9IHBhcnNlU291cmNlKHNvdXJjZSwgY29tbWFuZClcbiAgICB2YXIgZXJyb3JzID0gcGFyc2VFcnJvckxvZyhlcnJMb2cpXG4gICAgYW5ub3RhdGVGaWxlcyhmaWxlcywgZXJyb3JzKVxuXG4gICAgT2JqZWN0LmtleXMoZmlsZXMpLmZvckVhY2goZnVuY3Rpb24gKGZpbGVOdW1iZXIpIHtcbiAgICAgIHZhciBmaWxlID0gZmlsZXNbZmlsZU51bWJlcl1cbiAgICAgIGlmICghZmlsZS5oYXNFcnJvcnMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHZhciBzdHJpbmdzID0gWycnXVxuICAgICAgdmFyIHN0eWxlcyA9IFsnJ11cblxuICAgICAgZnVuY3Rpb24gcHVzaCAoc3RyLCBzdHlsZSkge1xuICAgICAgICBzdHJpbmdzLnB1c2goc3RyKVxuICAgICAgICBzdHlsZXMucHVzaChzdHlsZSB8fCAnJylcbiAgICAgIH1cblxuICAgICAgcHVzaCgnZmlsZSBudW1iZXIgJyArIGZpbGVOdW1iZXIgKyAnOiAnICsgZmlsZS5uYW1lICsgJ1xcbicsICdjb2xvcjpyZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXdlaWdodDpib2xkJylcblxuICAgICAgZmlsZS5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIGlmIChsaW5lLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHVzaChsZWZ0UGFkKGxpbmUubnVtYmVyLCA0KSArICd8ICAnLCAnYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IGZvbnQtd2VpZ2h0OmJvbGQnKVxuICAgICAgICAgIHB1c2gobGluZS5saW5lICsgZW5kbCwgJ2NvbG9yOnJlZDsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IGZvbnQtd2VpZ2h0OmJvbGQnKVxuXG4gICAgICAgICAgLy8gdHJ5IHRvIGd1ZXNzIHRva2VuXG4gICAgICAgICAgdmFyIG9mZnNldCA9IDBcbiAgICAgICAgICBsaW5lLmVycm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlXG4gICAgICAgICAgICB2YXIgdG9rZW4gPSAvXlxccyonKC4qKSdcXHMqOlxccyooLiopJC8uZXhlYyhtZXNzYWdlKVxuICAgICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAgIHZhciB0b2tlblBhdCA9IHRva2VuWzFdXG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSB0b2tlblsyXVxuICAgICAgICAgICAgICBzd2l0Y2ggKHRva2VuUGF0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYXNzaWduJzpcbiAgICAgICAgICAgICAgICAgIHRva2VuUGF0ID0gJz0nXG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9mZnNldCA9IE1hdGgubWF4KGxpbmUubGluZS5pbmRleE9mKHRva2VuUGF0LCBvZmZzZXQpLCAwKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwdXNoKGxlZnRQYWQoJ3wgJywgNikpXG4gICAgICAgICAgICBwdXNoKGxlZnRQYWQoJ15eXicsIG9mZnNldCArIDMpICsgZW5kbCwgJ2ZvbnQtd2VpZ2h0OmJvbGQnKVxuICAgICAgICAgICAgcHVzaChsZWZ0UGFkKCd8ICcsIDYpKVxuICAgICAgICAgICAgcHVzaChtZXNzYWdlICsgZW5kbCwgJ2ZvbnQtd2VpZ2h0OmJvbGQnKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcHVzaChsZWZ0UGFkKCd8ICcsIDYpICsgZW5kbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwdXNoKGxlZnRQYWQobGluZS5udW1iZXIsIDQpICsgJ3wgICcpXG4gICAgICAgICAgcHVzaChsaW5lLmxpbmUgKyBlbmRsLCAnY29sb3I6cmVkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmICF3aW5kb3cuY2hyb21lKSB7XG4gICAgICAgIHN0eWxlc1swXSA9IHN0cmluZ3Muam9pbignJWMnKVxuICAgICAgICBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBzdHlsZXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhzdHJpbmdzLmpvaW4oJycpKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGVjay5yYWlzZSgnRXJyb3IgY29tcGlsaW5nICcgKyB0eXBlTmFtZSArICcgc2hhZGVyLCAnICsgZmlsZXNbMF0ubmFtZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0xpbmtFcnJvciAoZ2wsIHByb2dyYW0sIGZyYWdTaGFkZXIsIHZlcnRTaGFkZXIsIGNvbW1hbmQpIHtcbiAgaWYgKCFnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSkge1xuICAgIHZhciBlcnJMb2cgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKVxuICAgIHZhciBmcmFnUGFyc2UgPSBwYXJzZVNvdXJjZShmcmFnU2hhZGVyLCBjb21tYW5kKVxuICAgIHZhciB2ZXJ0UGFyc2UgPSBwYXJzZVNvdXJjZSh2ZXJ0U2hhZGVyLCBjb21tYW5kKVxuXG4gICAgdmFyIGhlYWRlciA9ICdFcnJvciBsaW5raW5nIHByb2dyYW0gd2l0aCB2ZXJ0ZXggc2hhZGVyLCBcIicgK1xuICAgICAgdmVydFBhcnNlWzBdLm5hbWUgKyAnXCIsIGFuZCBmcmFnbWVudCBzaGFkZXIgXCInICsgZnJhZ1BhcnNlWzBdLm5hbWUgKyAnXCInXG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5sb2coJyVjJyArIGhlYWRlciArIGVuZGwgKyAnJWMnICsgZXJyTG9nLFxuICAgICAgICAnY29sb3I6cmVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6Ym9sZCcsXG4gICAgICAgICdjb2xvcjpyZWQnKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhoZWFkZXIgKyBlbmRsICsgZXJyTG9nKVxuICAgIH1cbiAgICBjaGVjay5yYWlzZShoZWFkZXIpXG4gIH1cbn1cblxuZnVuY3Rpb24gc2F2ZUNvbW1hbmRSZWYgKG9iamVjdCkge1xuICBvYmplY3QuX2NvbW1hbmRSZWYgPSBndWVzc0NvbW1hbmQoKVxufVxuXG5mdW5jdGlvbiBzYXZlRHJhd0NvbW1hbmRJbmZvIChvcHRzLCB1bmlmb3JtcywgYXR0cmlidXRlcywgc3RyaW5nU3RvcmUpIHtcbiAgc2F2ZUNvbW1hbmRSZWYob3B0cylcblxuICBmdW5jdGlvbiBpZCAoc3RyKSB7XG4gICAgaWYgKHN0cikge1xuICAgICAgcmV0dXJuIHN0cmluZ1N0b3JlLmlkKHN0cilcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfVxuICBvcHRzLl9mcmFnSWQgPSBpZChvcHRzLnN0YXRpYy5mcmFnKVxuICBvcHRzLl92ZXJ0SWQgPSBpZChvcHRzLnN0YXRpYy52ZXJ0KVxuXG4gIGZ1bmN0aW9uIGFkZFByb3BzIChkaWN0LCBzZXQpIHtcbiAgICBPYmplY3Qua2V5cyhzZXQpLmZvckVhY2goZnVuY3Rpb24gKHUpIHtcbiAgICAgIGRpY3Rbc3RyaW5nU3RvcmUuaWQodSldID0gdHJ1ZVxuICAgIH0pXG4gIH1cblxuICB2YXIgdW5pZm9ybVNldCA9IG9wdHMuX3VuaWZvcm1TZXQgPSB7fVxuICBhZGRQcm9wcyh1bmlmb3JtU2V0LCB1bmlmb3Jtcy5zdGF0aWMpXG4gIGFkZFByb3BzKHVuaWZvcm1TZXQsIHVuaWZvcm1zLmR5bmFtaWMpXG5cbiAgdmFyIGF0dHJpYnV0ZVNldCA9IG9wdHMuX2F0dHJpYnV0ZVNldCA9IHt9XG4gIGFkZFByb3BzKGF0dHJpYnV0ZVNldCwgYXR0cmlidXRlcy5zdGF0aWMpXG4gIGFkZFByb3BzKGF0dHJpYnV0ZVNldCwgYXR0cmlidXRlcy5keW5hbWljKVxuXG4gIG9wdHMuX2hhc0NvdW50ID0gKFxuICAgICdjb3VudCcgaW4gb3B0cy5zdGF0aWMgfHxcbiAgICAnY291bnQnIGluIG9wdHMuZHluYW1pYyB8fFxuICAgICdlbGVtZW50cycgaW4gb3B0cy5zdGF0aWMgfHxcbiAgICAnZWxlbWVudHMnIGluIG9wdHMuZHluYW1pYylcbn1cblxuZnVuY3Rpb24gY29tbWFuZFJhaXNlIChtZXNzYWdlLCBjb21tYW5kKSB7XG4gIHZhciBjYWxsU2l0ZSA9IGd1ZXNzQ2FsbFNpdGUoKVxuICByYWlzZShtZXNzYWdlICtcbiAgICAnIGluIGNvbW1hbmQgJyArIChjb21tYW5kIHx8IGd1ZXNzQ29tbWFuZCgpKSArXG4gICAgKGNhbGxTaXRlID09PSAndW5rbm93bicgPyAnJyA6ICcgY2FsbGVkIGZyb20gJyArIGNhbGxTaXRlKSlcbn1cblxuZnVuY3Rpb24gY2hlY2tDb21tYW5kIChwcmVkLCBtZXNzYWdlLCBjb21tYW5kKSB7XG4gIGlmICghcHJlZCkge1xuICAgIGNvbW1hbmRSYWlzZShtZXNzYWdlLCBjb21tYW5kIHx8IGd1ZXNzQ29tbWFuZCgpKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUGFyYW1ldGVyQ29tbWFuZCAocGFyYW0sIHBvc3NpYmlsaXRpZXMsIG1lc3NhZ2UsIGNvbW1hbmQpIHtcbiAgaWYgKCEocGFyYW0gaW4gcG9zc2liaWxpdGllcykpIHtcbiAgICBjb21tYW5kUmFpc2UoXG4gICAgICAndW5rbm93biBwYXJhbWV0ZXIgKCcgKyBwYXJhbSArICcpJyArIGVuY29sb24obWVzc2FnZSkgK1xuICAgICAgJy4gcG9zc2libGUgdmFsdWVzOiAnICsgT2JqZWN0LmtleXMocG9zc2liaWxpdGllcykuam9pbigpLFxuICAgICAgY29tbWFuZCB8fCBndWVzc0NvbW1hbmQoKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0NvbW1hbmRUeXBlICh2YWx1ZSwgdHlwZSwgbWVzc2FnZSwgY29tbWFuZCkge1xuICBpZiAoIXN0YW5kYXJkVHlwZUVoKHZhbHVlLCB0eXBlKSkge1xuICAgIGNvbW1hbmRSYWlzZShcbiAgICAgICdpbnZhbGlkIHBhcmFtZXRlciB0eXBlJyArIGVuY29sb24obWVzc2FnZSkgK1xuICAgICAgJy4gZXhwZWN0ZWQgJyArIHR5cGUgKyAnLCBnb3QgJyArICh0eXBlb2YgdmFsdWUpLFxuICAgICAgY29tbWFuZCB8fCBndWVzc0NvbW1hbmQoKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja09wdGlvbmFsIChibG9jaykge1xuICBibG9jaygpXG59XG5cbmZ1bmN0aW9uIGNoZWNrRnJhbWVidWZmZXJGb3JtYXQgKGF0dGFjaG1lbnQsIHRleEZvcm1hdHMsIHJiRm9ybWF0cykge1xuICBpZiAoYXR0YWNobWVudC50ZXh0dXJlKSB7XG4gICAgY2hlY2tPbmVPZihcbiAgICAgIGF0dGFjaG1lbnQudGV4dHVyZS5fdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCxcbiAgICAgIHRleEZvcm1hdHMsXG4gICAgICAndW5zdXBwb3J0ZWQgdGV4dHVyZSBmb3JtYXQgZm9yIGF0dGFjaG1lbnQnKVxuICB9IGVsc2Uge1xuICAgIGNoZWNrT25lT2YoXG4gICAgICBhdHRhY2htZW50LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmZvcm1hdCxcbiAgICAgIHJiRm9ybWF0cyxcbiAgICAgICd1bnN1cHBvcnRlZCByZW5kZXJidWZmZXIgZm9ybWF0IGZvciBhdHRhY2htZW50JylcbiAgfVxufVxuXG52YXIgR0xfQ0xBTVBfVE9fRURHRSA9IDB4ODEyRlxuXG52YXIgR0xfTkVBUkVTVCA9IDB4MjYwMFxudmFyIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QgPSAweDI3MDBcbnZhciBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QgPSAweDI3MDFcbnZhciBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIgPSAweDI3MDJcbnZhciBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiA9IDB4MjcwM1xuXG52YXIgR0xfQllURSA9IDUxMjBcbnZhciBHTF9VTlNJR05FRF9CWVRFID0gNTEyMVxudmFyIEdMX1NIT1JUID0gNTEyMlxudmFyIEdMX1VOU0lHTkVEX1NIT1JUID0gNTEyM1xudmFyIEdMX0lOVCA9IDUxMjRcbnZhciBHTF9VTlNJR05FRF9JTlQgPSA1MTI1XG52YXIgR0xfRkxPQVQgPSA1MTI2XG5cbnZhciBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80ID0gMHg4MDMzXG52YXIgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSA9IDB4ODAzNFxudmFyIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81ID0gMHg4MzYzXG52YXIgR0xfVU5TSUdORURfSU5UXzI0XzhfV0VCR0wgPSAweDg0RkFcblxudmFyIEdMX0hBTEZfRkxPQVRfT0VTID0gMHg4RDYxXG5cbnZhciBUWVBFX1NJWkUgPSB7fVxuXG5UWVBFX1NJWkVbR0xfQllURV0gPVxuVFlQRV9TSVpFW0dMX1VOU0lHTkVEX0JZVEVdID0gMVxuXG5UWVBFX1NJWkVbR0xfU0hPUlRdID1cblRZUEVfU0laRVtHTF9VTlNJR05FRF9TSE9SVF0gPVxuVFlQRV9TSVpFW0dMX0hBTEZfRkxPQVRfT0VTXSA9XG5UWVBFX1NJWkVbR0xfVU5TSUdORURfU0hPUlRfNV82XzVdID1cblRZUEVfU0laRVtHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80XSA9XG5UWVBFX1NJWkVbR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMV0gPSAyXG5cblRZUEVfU0laRVtHTF9JTlRdID1cblRZUEVfU0laRVtHTF9VTlNJR05FRF9JTlRdID1cblRZUEVfU0laRVtHTF9GTE9BVF0gPVxuVFlQRV9TSVpFW0dMX1VOU0lHTkVEX0lOVF8yNF84X1dFQkdMXSA9IDRcblxuZnVuY3Rpb24gcGl4ZWxTaXplICh0eXBlLCBjaGFubmVscykge1xuICBpZiAodHlwZSA9PT0gR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSB8fFxuICAgICAgdHlwZSA9PT0gR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCB8fFxuICAgICAgdHlwZSA9PT0gR0xfVU5TSUdORURfU0hPUlRfNV82XzUpIHtcbiAgICByZXR1cm4gMlxuICB9IGVsc2UgaWYgKHR5cGUgPT09IEdMX1VOU0lHTkVEX0lOVF8yNF84X1dFQkdMKSB7XG4gICAgcmV0dXJuIDRcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gVFlQRV9TSVpFW3R5cGVdICogY2hhbm5lbHNcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BvdzIgKHYpIHtcbiAgcmV0dXJuICEodiAmICh2IC0gMSkpICYmICghIXYpXG59XG5cbmZ1bmN0aW9uIGNoZWNrVGV4dHVyZTJEIChpbmZvLCBtaXBEYXRhLCBsaW1pdHMpIHtcbiAgdmFyIGlcbiAgdmFyIHcgPSBtaXBEYXRhLndpZHRoXG4gIHZhciBoID0gbWlwRGF0YS5oZWlnaHRcbiAgdmFyIGMgPSBtaXBEYXRhLmNoYW5uZWxzXG5cbiAgLy8gQ2hlY2sgdGV4dHVyZSBzaGFwZVxuICBjaGVjayh3ID4gMCAmJiB3IDw9IGxpbWl0cy5tYXhUZXh0dXJlU2l6ZSAmJlxuICAgICAgICBoID4gMCAmJiBoIDw9IGxpbWl0cy5tYXhUZXh0dXJlU2l6ZSxcbiAgJ2ludmFsaWQgdGV4dHVyZSBzaGFwZScpXG5cbiAgLy8gY2hlY2sgd3JhcCBtb2RlXG4gIGlmIChpbmZvLndyYXBTICE9PSBHTF9DTEFNUF9UT19FREdFIHx8IGluZm8ud3JhcFQgIT09IEdMX0NMQU1QX1RPX0VER0UpIHtcbiAgICBjaGVjayhpc1BvdzIodykgJiYgaXNQb3cyKGgpLFxuICAgICAgJ2luY29tcGF0aWJsZSB3cmFwIG1vZGUgZm9yIHRleHR1cmUsIGJvdGggd2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIHBvd2VyIG9mIDInKVxuICB9XG5cbiAgaWYgKG1pcERhdGEubWlwbWFzayA9PT0gMSkge1xuICAgIGlmICh3ICE9PSAxICYmIGggIT09IDEpIHtcbiAgICAgIGNoZWNrKFxuICAgICAgICBpbmZvLm1pbkZpbHRlciAhPT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAmJlxuICAgICAgICBpbmZvLm1pbkZpbHRlciAhPT0gR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSICYmXG4gICAgICAgIGluZm8ubWluRmlsdGVyICE9PSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QgJiZcbiAgICAgICAgaW5mby5taW5GaWx0ZXIgIT09IEdMX0xJTkVBUl9NSVBNQVBfTElORUFSLFxuICAgICAgICAnbWluIGZpbHRlciByZXF1aXJlcyBtaXBtYXAnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyB0ZXh0dXJlIG11c3QgYmUgcG93ZXIgb2YgMlxuICAgIGNoZWNrKGlzUG93Mih3KSAmJiBpc1BvdzIoaCksXG4gICAgICAndGV4dHVyZSBtdXN0IGJlIGEgc3F1YXJlIHBvd2VyIG9mIDIgdG8gc3VwcG9ydCBtaXBtYXBwaW5nJylcbiAgICBjaGVjayhtaXBEYXRhLm1pcG1hc2sgPT09ICh3IDw8IDEpIC0gMSxcbiAgICAgICdtaXNzaW5nIG9yIGluY29tcGxldGUgbWlwbWFwIGRhdGEnKVxuICB9XG5cbiAgaWYgKG1pcERhdGEudHlwZSA9PT0gR0xfRkxPQVQpIHtcbiAgICBpZiAobGltaXRzLmV4dGVuc2lvbnMuaW5kZXhPZignb2VzX3RleHR1cmVfZmxvYXRfbGluZWFyJykgPCAwKSB7XG4gICAgICBjaGVjayhpbmZvLm1pbkZpbHRlciA9PT0gR0xfTkVBUkVTVCAmJiBpbmZvLm1hZ0ZpbHRlciA9PT0gR0xfTkVBUkVTVCxcbiAgICAgICAgJ2ZpbHRlciBub3Qgc3VwcG9ydGVkLCBtdXN0IGVuYWJsZSBvZXNfdGV4dHVyZV9mbG9hdF9saW5lYXInKVxuICAgIH1cbiAgICBjaGVjayghaW5mby5nZW5NaXBtYXBzLFxuICAgICAgJ21pcG1hcCBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgd2l0aCBmbG9hdCB0ZXh0dXJlcycpXG4gIH1cblxuICAvLyBjaGVjayBpbWFnZSBjb21wbGV0ZVxuICB2YXIgbWlwaW1hZ2VzID0gbWlwRGF0YS5pbWFnZXNcbiAgZm9yIChpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICBpZiAobWlwaW1hZ2VzW2ldKSB7XG4gICAgICB2YXIgbXcgPSB3ID4+IGlcbiAgICAgIHZhciBtaCA9IGggPj4gaVxuICAgICAgY2hlY2sobWlwRGF0YS5taXBtYXNrICYgKDEgPDwgaSksICdtaXNzaW5nIG1pcG1hcCBkYXRhJylcblxuICAgICAgdmFyIGltZyA9IG1pcGltYWdlc1tpXVxuXG4gICAgICBjaGVjayhcbiAgICAgICAgaW1nLndpZHRoID09PSBtdyAmJlxuICAgICAgICBpbWcuaGVpZ2h0ID09PSBtaCxcbiAgICAgICAgJ2ludmFsaWQgc2hhcGUgZm9yIG1pcCBpbWFnZXMnKVxuXG4gICAgICBjaGVjayhcbiAgICAgICAgaW1nLmZvcm1hdCA9PT0gbWlwRGF0YS5mb3JtYXQgJiZcbiAgICAgICAgaW1nLmludGVybmFsZm9ybWF0ID09PSBtaXBEYXRhLmludGVybmFsZm9ybWF0ICYmXG4gICAgICAgIGltZy50eXBlID09PSBtaXBEYXRhLnR5cGUsXG4gICAgICAgICdpbmNvbXBhdGlibGUgdHlwZSBmb3IgbWlwIGltYWdlJylcblxuICAgICAgaWYgKGltZy5jb21wcmVzc2VkKSB7XG4gICAgICAgIC8vIFRPRE86IGNoZWNrIHNpemUgZm9yIGNvbXByZXNzZWQgaW1hZ2VzXG4gICAgICB9IGVsc2UgaWYgKGltZy5kYXRhKSB7XG4gICAgICAgIC8vIGNoZWNrKGltZy5kYXRhLmJ5dGVMZW5ndGggPT09IG13ICogbWggKlxuICAgICAgICAvLyBNYXRoLm1heChwaXhlbFNpemUoaW1nLnR5cGUsIGMpLCBpbWcudW5wYWNrQWxpZ25tZW50KSxcbiAgICAgICAgdmFyIHJvd1NpemUgPSBNYXRoLmNlaWwocGl4ZWxTaXplKGltZy50eXBlLCBjKSAqIG13IC8gaW1nLnVucGFja0FsaWdubWVudCkgKiBpbWcudW5wYWNrQWxpZ25tZW50XG4gICAgICAgIGNoZWNrKGltZy5kYXRhLmJ5dGVMZW5ndGggPT09IHJvd1NpemUgKiBtaCxcbiAgICAgICAgICAnaW52YWxpZCBkYXRhIGZvciBpbWFnZSwgYnVmZmVyIHNpemUgaXMgaW5jb25zaXN0ZW50IHdpdGggaW1hZ2UgZm9ybWF0JylcbiAgICAgIH0gZWxzZSBpZiAoaW1nLmVsZW1lbnQpIHtcbiAgICAgICAgLy8gVE9ETzogY2hlY2sgZWxlbWVudCBjYW4gYmUgbG9hZGVkXG4gICAgICB9IGVsc2UgaWYgKGltZy5jb3B5KSB7XG4gICAgICAgIC8vIFRPRE86IGNoZWNrIGNvbXBhdGlibGUgZm9ybWF0IGFuZCB0eXBlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaW5mby5nZW5NaXBtYXBzKSB7XG4gICAgICBjaGVjaygobWlwRGF0YS5taXBtYXNrICYgKDEgPDwgaSkpID09PSAwLCAnZXh0cmEgbWlwbWFwIGRhdGEnKVxuICAgIH1cbiAgfVxuXG4gIGlmIChtaXBEYXRhLmNvbXByZXNzZWQpIHtcbiAgICBjaGVjayghaW5mby5nZW5NaXBtYXBzLFxuICAgICAgJ21pcG1hcCBnZW5lcmF0aW9uIGZvciBjb21wcmVzc2VkIGltYWdlcyBub3Qgc3VwcG9ydGVkJylcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1RleHR1cmVDdWJlICh0ZXh0dXJlLCBpbmZvLCBmYWNlcywgbGltaXRzKSB7XG4gIHZhciB3ID0gdGV4dHVyZS53aWR0aFxuICB2YXIgaCA9IHRleHR1cmUuaGVpZ2h0XG4gIHZhciBjID0gdGV4dHVyZS5jaGFubmVsc1xuXG4gIC8vIENoZWNrIHRleHR1cmUgc2hhcGVcbiAgY2hlY2soXG4gICAgdyA+IDAgJiYgdyA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUgJiYgaCA+IDAgJiYgaCA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUsXG4gICAgJ2ludmFsaWQgdGV4dHVyZSBzaGFwZScpXG4gIGNoZWNrKFxuICAgIHcgPT09IGgsXG4gICAgJ2N1YmUgbWFwIG11c3QgYmUgc3F1YXJlJylcbiAgY2hlY2soXG4gICAgaW5mby53cmFwUyA9PT0gR0xfQ0xBTVBfVE9fRURHRSAmJiBpbmZvLndyYXBUID09PSBHTF9DTEFNUF9UT19FREdFLFxuICAgICd3cmFwIG1vZGUgbm90IHN1cHBvcnRlZCBieSBjdWJlIG1hcCcpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWNlcy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBmYWNlID0gZmFjZXNbaV1cbiAgICBjaGVjayhcbiAgICAgIGZhY2Uud2lkdGggPT09IHcgJiYgZmFjZS5oZWlnaHQgPT09IGgsXG4gICAgICAnaW5jb25zaXN0ZW50IGN1YmUgbWFwIGZhY2Ugc2hhcGUnKVxuXG4gICAgaWYgKGluZm8uZ2VuTWlwbWFwcykge1xuICAgICAgY2hlY2soIWZhY2UuY29tcHJlc3NlZCxcbiAgICAgICAgJ2NhbiBub3QgZ2VuZXJhdGUgbWlwbWFwIGZvciBjb21wcmVzc2VkIHRleHR1cmVzJylcbiAgICAgIGNoZWNrKGZhY2UubWlwbWFzayA9PT0gMSxcbiAgICAgICAgJ2NhbiBub3Qgc3BlY2lmeSBtaXBtYXBzIGFuZCBnZW5lcmF0ZSBtaXBtYXBzJylcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETzogY2hlY2sgbWlwIGFuZCBmaWx0ZXIgbW9kZVxuICAgIH1cblxuICAgIHZhciBtaXBtYXBzID0gZmFjZS5pbWFnZXNcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIHZhciBpbWcgPSBtaXBtYXBzW2pdXG4gICAgICBpZiAoaW1nKSB7XG4gICAgICAgIHZhciBtdyA9IHcgPj4galxuICAgICAgICB2YXIgbWggPSBoID4+IGpcbiAgICAgICAgY2hlY2soZmFjZS5taXBtYXNrICYgKDEgPDwgaiksICdtaXNzaW5nIG1pcG1hcCBkYXRhJylcbiAgICAgICAgY2hlY2soXG4gICAgICAgICAgaW1nLndpZHRoID09PSBtdyAmJlxuICAgICAgICAgIGltZy5oZWlnaHQgPT09IG1oLFxuICAgICAgICAgICdpbnZhbGlkIHNoYXBlIGZvciBtaXAgaW1hZ2VzJylcbiAgICAgICAgY2hlY2soXG4gICAgICAgICAgaW1nLmZvcm1hdCA9PT0gdGV4dHVyZS5mb3JtYXQgJiZcbiAgICAgICAgICBpbWcuaW50ZXJuYWxmb3JtYXQgPT09IHRleHR1cmUuaW50ZXJuYWxmb3JtYXQgJiZcbiAgICAgICAgICBpbWcudHlwZSA9PT0gdGV4dHVyZS50eXBlLFxuICAgICAgICAgICdpbmNvbXBhdGlibGUgdHlwZSBmb3IgbWlwIGltYWdlJylcblxuICAgICAgICBpZiAoaW1nLmNvbXByZXNzZWQpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjaGVjayBzaXplIGZvciBjb21wcmVzc2VkIGltYWdlc1xuICAgICAgICB9IGVsc2UgaWYgKGltZy5kYXRhKSB7XG4gICAgICAgICAgY2hlY2soaW1nLmRhdGEuYnl0ZUxlbmd0aCA9PT0gbXcgKiBtaCAqXG4gICAgICAgICAgICBNYXRoLm1heChwaXhlbFNpemUoaW1nLnR5cGUsIGMpLCBpbWcudW5wYWNrQWxpZ25tZW50KSxcbiAgICAgICAgICAnaW52YWxpZCBkYXRhIGZvciBpbWFnZSwgYnVmZmVyIHNpemUgaXMgaW5jb25zaXN0ZW50IHdpdGggaW1hZ2UgZm9ybWF0JylcbiAgICAgICAgfSBlbHNlIGlmIChpbWcuZWxlbWVudCkge1xuICAgICAgICAgIC8vIFRPRE86IGNoZWNrIGVsZW1lbnQgY2FuIGJlIGxvYWRlZFxuICAgICAgICB9IGVsc2UgaWYgKGltZy5jb3B5KSB7XG4gICAgICAgICAgLy8gVE9ETzogY2hlY2sgY29tcGF0aWJsZSBmb3JtYXQgYW5kIHR5cGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgY2hlY2skMSA9IGV4dGVuZChjaGVjaywge1xuICBvcHRpb25hbDogY2hlY2tPcHRpb25hbCxcbiAgcmFpc2U6IHJhaXNlLFxuICBjb21tYW5kUmFpc2U6IGNvbW1hbmRSYWlzZSxcbiAgY29tbWFuZDogY2hlY2tDb21tYW5kLFxuICBwYXJhbWV0ZXI6IGNoZWNrUGFyYW1ldGVyLFxuICBjb21tYW5kUGFyYW1ldGVyOiBjaGVja1BhcmFtZXRlckNvbW1hbmQsXG4gIGNvbnN0cnVjdG9yOiBjaGVja0NvbnN0cnVjdG9yLFxuICB0eXBlOiBjaGVja1R5cGVPZixcbiAgY29tbWFuZFR5cGU6IGNoZWNrQ29tbWFuZFR5cGUsXG4gIGlzVHlwZWRBcnJheTogY2hlY2tJc1R5cGVkQXJyYXksXG4gIG5uaTogY2hlY2tOb25OZWdhdGl2ZUludCxcbiAgb25lT2Y6IGNoZWNrT25lT2YsXG4gIHNoYWRlckVycm9yOiBjaGVja1NoYWRlckVycm9yLFxuICBsaW5rRXJyb3I6IGNoZWNrTGlua0Vycm9yLFxuICBjYWxsU2l0ZTogZ3Vlc3NDYWxsU2l0ZSxcbiAgc2F2ZUNvbW1hbmRSZWY6IHNhdmVDb21tYW5kUmVmLFxuICBzYXZlRHJhd0luZm86IHNhdmVEcmF3Q29tbWFuZEluZm8sXG4gIGZyYW1lYnVmZmVyRm9ybWF0OiBjaGVja0ZyYW1lYnVmZmVyRm9ybWF0LFxuICBndWVzc0NvbW1hbmQ6IGd1ZXNzQ29tbWFuZCxcbiAgdGV4dHVyZTJEOiBjaGVja1RleHR1cmUyRCxcbiAgdGV4dHVyZUN1YmU6IGNoZWNrVGV4dHVyZUN1YmVcbn0pO1xuXG52YXIgVkFSSUFCTEVfQ09VTlRFUiA9IDBcblxudmFyIERZTl9GVU5DID0gMFxudmFyIERZTl9DT05TVEFOVCA9IDVcbnZhciBEWU5fQVJSQVkgPSA2XG5cbmZ1bmN0aW9uIER5bmFtaWNWYXJpYWJsZSAodHlwZSwgZGF0YSkge1xuICB0aGlzLmlkID0gKFZBUklBQkxFX0NPVU5URVIrKylcbiAgdGhpcy50eXBlID0gdHlwZVxuICB0aGlzLmRhdGEgPSBkYXRhXG59XG5cbmZ1bmN0aW9uIGVzY2FwZVN0ciAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJylcbn1cblxuZnVuY3Rpb24gc3BsaXRQYXJ0cyAoc3RyKSB7XG4gIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICB2YXIgZmlyc3RDaGFyID0gc3RyLmNoYXJBdCgwKVxuICB2YXIgbGFzdENoYXIgPSBzdHIuY2hhckF0KHN0ci5sZW5ndGggLSAxKVxuXG4gIGlmIChzdHIubGVuZ3RoID4gMSAmJlxuICAgICAgZmlyc3RDaGFyID09PSBsYXN0Q2hhciAmJlxuICAgICAgKGZpcnN0Q2hhciA9PT0gJ1wiJyB8fCBmaXJzdENoYXIgPT09IFwiJ1wiKSkge1xuICAgIHJldHVybiBbJ1wiJyArIGVzY2FwZVN0cihzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKSkgKyAnXCInXVxuICB9XG5cbiAgdmFyIHBhcnRzID0gL1xcWyhmYWxzZXx0cnVlfG51bGx8XFxkK3wnW14nXSonfFwiW15cIl0qXCIpXFxdLy5leGVjKHN0cilcbiAgaWYgKHBhcnRzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHNwbGl0UGFydHMoc3RyLnN1YnN0cigwLCBwYXJ0cy5pbmRleCkpXG4gICAgICAgIC5jb25jYXQoc3BsaXRQYXJ0cyhwYXJ0c1sxXSkpXG4gICAgICAgIC5jb25jYXQoc3BsaXRQYXJ0cyhzdHIuc3Vic3RyKHBhcnRzLmluZGV4ICsgcGFydHNbMF0ubGVuZ3RoKSkpXG4gICAgKVxuICB9XG5cbiAgdmFyIHN1YnBhcnRzID0gc3RyLnNwbGl0KCcuJylcbiAgaWYgKHN1YnBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBbJ1wiJyArIGVzY2FwZVN0cihzdHIpICsgJ1wiJ11cbiAgfVxuXG4gIHZhciByZXN1bHQgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChzcGxpdFBhcnRzKHN1YnBhcnRzW2ldKSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHRvQWNjZXNzb3JTdHJpbmcgKHN0cikge1xuICByZXR1cm4gJ1snICsgc3BsaXRQYXJ0cyhzdHIpLmpvaW4oJ11bJykgKyAnXSdcbn1cblxuZnVuY3Rpb24gZGVmaW5lRHluYW1pYyAodHlwZSwgZGF0YSkge1xuICByZXR1cm4gbmV3IER5bmFtaWNWYXJpYWJsZSh0eXBlLCB0b0FjY2Vzc29yU3RyaW5nKGRhdGEgKyAnJykpXG59XG5cbmZ1bmN0aW9uIGlzRHluYW1pYyAoeCkge1xuICByZXR1cm4gKHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nICYmICF4Ll9yZWdsVHlwZSkgfHwgKHggaW5zdGFuY2VvZiBEeW5hbWljVmFyaWFibGUpXG59XG5cbmZ1bmN0aW9uIHVuYm94ICh4LCBwYXRoKSB7XG4gIGlmICh0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgRHluYW1pY1ZhcmlhYmxlKERZTl9GVU5DLCB4KVxuICB9IGVsc2UgaWYgKHR5cGVvZiB4ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIG5ldyBEeW5hbWljVmFyaWFibGUoRFlOX0NPTlNUQU5ULCB4KVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICByZXR1cm4gbmV3IER5bmFtaWNWYXJpYWJsZShEWU5fQVJSQVksIHgubWFwKCh5LCBpKSA9PiB1bmJveCh5LCBwYXRoICsgJ1snICsgaSArICddJykpKVxuICB9IGVsc2UgaWYgKHggaW5zdGFuY2VvZiBEeW5hbWljVmFyaWFibGUpIHtcbiAgICByZXR1cm4geFxuICB9XG4gIGNoZWNrJDEoZmFsc2UsICdpbnZhbGlkIG9wdGlvbiB0eXBlIGluIHVuaWZvcm0gJyArIHBhdGgpXG59XG5cbnZhciBkeW5hbWljID0ge1xuICBEeW5hbWljVmFyaWFibGU6IER5bmFtaWNWYXJpYWJsZSxcbiAgZGVmaW5lOiBkZWZpbmVEeW5hbWljLFxuICBpc0R5bmFtaWM6IGlzRHluYW1pYyxcbiAgdW5ib3g6IHVuYm94LFxuICBhY2Nlc3NvcjogdG9BY2Nlc3NvclN0cmluZ1xufTtcblxuLyogZ2xvYmFscyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGNhbmNlbEFuaW1hdGlvbkZyYW1lICovXG52YXIgcmFmID0ge1xuICBuZXh0OiB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nXG4gICAgPyBmdW5jdGlvbiAoY2IpIHsgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYikgfVxuICAgIDogZnVuY3Rpb24gKGNiKSB7IHJldHVybiBzZXRUaW1lb3V0KGNiLCAxNikgfSxcbiAgY2FuY2VsOiB0eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbidcbiAgICA/IGZ1bmN0aW9uIChyYWYpIHsgcmV0dXJuIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZikgfVxuICAgIDogY2xlYXJUaW1lb3V0XG59O1xuXG4vKiBnbG9iYWxzIHBlcmZvcm1hbmNlICovXG52YXIgY2xvY2sgPSAodHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJyAmJiBwZXJmb3JtYW5jZS5ub3cpXG4gICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZS5ub3coKSB9XG4gICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiArKG5ldyBEYXRlKCkpIH07XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ1N0b3JlICgpIHtcbiAgdmFyIHN0cmluZ0lkcyA9IHsgJyc6IDAgfVxuICB2YXIgc3RyaW5nVmFsdWVzID0gWycnXVxuICByZXR1cm4ge1xuICAgIGlkOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gc3RyaW5nSWRzW3N0cl1cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfVxuICAgICAgcmVzdWx0ID0gc3RyaW5nSWRzW3N0cl0gPSBzdHJpbmdWYWx1ZXMubGVuZ3RoXG4gICAgICBzdHJpbmdWYWx1ZXMucHVzaChzdHIpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSxcblxuICAgIHN0cjogZnVuY3Rpb24gKGlkKSB7XG4gICAgICByZXR1cm4gc3RyaW5nVmFsdWVzW2lkXVxuICAgIH1cbiAgfVxufVxuXG4vLyBDb250ZXh0IGFuZCBjYW52YXMgY3JlYXRpb24gaGVscGVyIGZ1bmN0aW9uc1xuZnVuY3Rpb24gY3JlYXRlQ2FudmFzIChlbGVtZW50LCBvbkRvbmUsIHBpeGVsUmF0aW8pIHtcbiAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG4gIGV4dGVuZChjYW52YXMuc3R5bGUsIHtcbiAgICBib3JkZXI6IDAsXG4gICAgbWFyZ2luOiAwLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDBcbiAgfSlcbiAgZWxlbWVudC5hcHBlbmRDaGlsZChjYW52YXMpXG5cbiAgaWYgKGVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICBjYW52YXMuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXG4gICAgZXh0ZW5kKGVsZW1lbnQuc3R5bGUsIHtcbiAgICAgIG1hcmdpbjogMCxcbiAgICAgIHBhZGRpbmc6IDBcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzaXplICgpIHtcbiAgICB2YXIgdyA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgdmFyIGggPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICBpZiAoZWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgdmFyIGJvdW5kcyA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIHcgPSBib3VuZHMucmlnaHQgLSBib3VuZHMubGVmdFxuICAgICAgaCA9IGJvdW5kcy5ib3R0b20gLSBib3VuZHMudG9wXG4gICAgfVxuICAgIGNhbnZhcy53aWR0aCA9IHBpeGVsUmF0aW8gKiB3XG4gICAgY2FudmFzLmhlaWdodCA9IHBpeGVsUmF0aW8gKiBoXG4gICAgZXh0ZW5kKGNhbnZhcy5zdHlsZSwge1xuICAgICAgd2lkdGg6IHcgKyAncHgnLFxuICAgICAgaGVpZ2h0OiBoICsgJ3B4J1xuICAgIH0pXG4gIH1cblxuICB2YXIgcmVzaXplT2JzZXJ2ZXJcbiAgaWYgKGVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkgJiYgdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gaWdub3JlICdSZXNpemVPYnNlcnZlcicgaXMgbm90IGRlZmluZWRcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzZXRUaW1lb3V0IHRvIGF2b2lkIGZsaWNrZXJcbiAgICAgIHNldFRpbWVvdXQocmVzaXplKVxuICAgIH0pXG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KVxuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemUsIGZhbHNlKVxuICB9XG5cbiAgZnVuY3Rpb24gb25EZXN0cm95ICgpIHtcbiAgICBpZiAocmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzaXplKVxuICAgIH1cbiAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGNhbnZhcylcbiAgfVxuXG4gIHJlc2l6ZSgpXG5cbiAgcmV0dXJuIHtcbiAgICBjYW52YXM6IGNhbnZhcyxcbiAgICBvbkRlc3Ryb3k6IG9uRGVzdHJveVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQgKGNhbnZhcywgY29udGV4dEF0dHJpYnV0ZXMpIHtcbiAgZnVuY3Rpb24gZ2V0IChuYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYW52YXMuZ2V0Q29udGV4dChuYW1lLCBjb250ZXh0QXR0cmlidXRlcylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuICByZXR1cm4gKFxuICAgIGdldCgnd2ViZ2wnKSB8fFxuICAgIGdldCgnZXhwZXJpbWVudGFsLXdlYmdsJykgfHxcbiAgICBnZXQoJ3dlYmdsLWV4cGVyaW1lbnRhbCcpXG4gIClcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudCAob2JqKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG9iai5ub2RlTmFtZSA9PT0gJ3N0cmluZycgJiZcbiAgICB0eXBlb2Ygb2JqLmFwcGVuZENoaWxkID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iai5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5mdW5jdGlvbiBpc1dlYkdMQ29udGV4dCAob2JqKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG9iai5kcmF3QXJyYXlzID09PSAnZnVuY3Rpb24nIHx8XG4gICAgdHlwZW9mIG9iai5kcmF3RWxlbWVudHMgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZUV4dGVuc2lvbnMgKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGlucHV0LnNwbGl0KClcbiAgfVxuICBjaGVjayQxKEFycmF5LmlzQXJyYXkoaW5wdXQpLCAnaW52YWxpZCBleHRlbnNpb24gYXJyYXknKVxuICByZXR1cm4gaW5wdXRcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudCAoZGVzYykge1xuICBpZiAodHlwZW9mIGRlc2MgPT09ICdzdHJpbmcnKSB7XG4gICAgY2hlY2skMSh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnLCAnbm90IHN1cHBvcnRlZCBvdXRzaWRlIG9mIERPTScpXG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZGVzYylcbiAgfVxuICByZXR1cm4gZGVzY1xufVxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MgKGFyZ3NfKSB7XG4gIHZhciBhcmdzID0gYXJnc18gfHwge31cbiAgdmFyIGVsZW1lbnQsIGNvbnRhaW5lciwgY2FudmFzLCBnbFxuICB2YXIgY29udGV4dEF0dHJpYnV0ZXMgPSB7fVxuICB2YXIgZXh0ZW5zaW9ucyA9IFtdXG4gIHZhciBvcHRpb25hbEV4dGVuc2lvbnMgPSBbXVxuICB2YXIgcGl4ZWxSYXRpbyA9ICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IDEgOiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbylcbiAgdmFyIHByb2ZpbGUgPSBmYWxzZVxuICB2YXIgb25Eb25lID0gZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNoZWNrJDEucmFpc2UoZXJyKVxuICAgIH1cbiAgfVxuICB2YXIgb25EZXN0cm95ID0gZnVuY3Rpb24gKCkge31cbiAgaWYgKHR5cGVvZiBhcmdzID09PSAnc3RyaW5nJykge1xuICAgIGNoZWNrJDEoXG4gICAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnLFxuICAgICAgJ3NlbGVjdG9yIHF1ZXJpZXMgb25seSBzdXBwb3J0ZWQgaW4gRE9NIGVudmlyb21lbnRzJylcbiAgICBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhcmdzKVxuICAgIGNoZWNrJDEoZWxlbWVudCwgJ2ludmFsaWQgcXVlcnkgc3RyaW5nIGZvciBlbGVtZW50JylcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoaXNIVE1MRWxlbWVudChhcmdzKSkge1xuICAgICAgZWxlbWVudCA9IGFyZ3NcbiAgICB9IGVsc2UgaWYgKGlzV2ViR0xDb250ZXh0KGFyZ3MpKSB7XG4gICAgICBnbCA9IGFyZ3NcbiAgICAgIGNhbnZhcyA9IGdsLmNhbnZhc1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVjayQxLmNvbnN0cnVjdG9yKGFyZ3MpXG4gICAgICBpZiAoJ2dsJyBpbiBhcmdzKSB7XG4gICAgICAgIGdsID0gYXJncy5nbFxuICAgICAgfSBlbHNlIGlmICgnY2FudmFzJyBpbiBhcmdzKSB7XG4gICAgICAgIGNhbnZhcyA9IGdldEVsZW1lbnQoYXJncy5jYW52YXMpXG4gICAgICB9IGVsc2UgaWYgKCdjb250YWluZXInIGluIGFyZ3MpIHtcbiAgICAgICAgY29udGFpbmVyID0gZ2V0RWxlbWVudChhcmdzLmNvbnRhaW5lcilcbiAgICAgIH1cbiAgICAgIGlmICgnYXR0cmlidXRlcycgaW4gYXJncykge1xuICAgICAgICBjb250ZXh0QXR0cmlidXRlcyA9IGFyZ3MuYXR0cmlidXRlc1xuICAgICAgICBjaGVjayQxLnR5cGUoY29udGV4dEF0dHJpYnV0ZXMsICdvYmplY3QnLCAnaW52YWxpZCBjb250ZXh0IGF0dHJpYnV0ZXMnKVxuICAgICAgfVxuICAgICAgaWYgKCdleHRlbnNpb25zJyBpbiBhcmdzKSB7XG4gICAgICAgIGV4dGVuc2lvbnMgPSBwYXJzZUV4dGVuc2lvbnMoYXJncy5leHRlbnNpb25zKVxuICAgICAgfVxuICAgICAgaWYgKCdvcHRpb25hbEV4dGVuc2lvbnMnIGluIGFyZ3MpIHtcbiAgICAgICAgb3B0aW9uYWxFeHRlbnNpb25zID0gcGFyc2VFeHRlbnNpb25zKGFyZ3Mub3B0aW9uYWxFeHRlbnNpb25zKVxuICAgICAgfVxuICAgICAgaWYgKCdvbkRvbmUnIGluIGFyZ3MpIHtcbiAgICAgICAgY2hlY2skMS50eXBlKFxuICAgICAgICAgIGFyZ3Mub25Eb25lLCAnZnVuY3Rpb24nLFxuICAgICAgICAgICdpbnZhbGlkIG9yIG1pc3Npbmcgb25Eb25lIGNhbGxiYWNrJylcbiAgICAgICAgb25Eb25lID0gYXJncy5vbkRvbmVcbiAgICAgIH1cbiAgICAgIGlmICgncHJvZmlsZScgaW4gYXJncykge1xuICAgICAgICBwcm9maWxlID0gISFhcmdzLnByb2ZpbGVcbiAgICAgIH1cbiAgICAgIGlmICgncGl4ZWxSYXRpbycgaW4gYXJncykge1xuICAgICAgICBwaXhlbFJhdGlvID0gK2FyZ3MucGl4ZWxSYXRpb1xuICAgICAgICBjaGVjayQxKHBpeGVsUmF0aW8gPiAwLCAnaW52YWxpZCBwaXhlbCByYXRpbycpXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgYXJndW1lbnRzIHRvIHJlZ2wnKVxuICB9XG5cbiAgaWYgKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnY2FudmFzJykge1xuICAgICAgY2FudmFzID0gZWxlbWVudFxuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIgPSBlbGVtZW50XG4gICAgfVxuICB9XG5cbiAgaWYgKCFnbCkge1xuICAgIGlmICghY2FudmFzKSB7XG4gICAgICBjaGVjayQxKFxuICAgICAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnLFxuICAgICAgICAnbXVzdCBtYW51YWxseSBzcGVjaWZ5IHdlYmdsIGNvbnRleHQgb3V0c2lkZSBvZiBET00gZW52aXJvbm1lbnRzJylcbiAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVDYW52YXMoY29udGFpbmVyIHx8IGRvY3VtZW50LmJvZHksIG9uRG9uZSwgcGl4ZWxSYXRpbylcbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBjYW52YXMgPSByZXN1bHQuY2FudmFzXG4gICAgICBvbkRlc3Ryb3kgPSByZXN1bHQub25EZXN0cm95XG4gICAgfVxuICAgIC8vIHdvcmthcm91bmQgZm9yIGNocm9taXVtIGJ1ZywgcHJlbXVsdGlwbGllZCBhbHBoYSB2YWx1ZSBpcyBwbGF0Zm9ybSBkZXBlbmRlbnRcbiAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhID09PSB1bmRlZmluZWQpIGNvbnRleHRBdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWVcbiAgICBnbCA9IGNyZWF0ZUNvbnRleHQoY2FudmFzLCBjb250ZXh0QXR0cmlidXRlcylcbiAgfVxuXG4gIGlmICghZ2wpIHtcbiAgICBvbkRlc3Ryb3koKVxuICAgIG9uRG9uZSgnd2ViZ2wgbm90IHN1cHBvcnRlZCwgdHJ5IHVwZ3JhZGluZyB5b3VyIGJyb3dzZXIgb3IgZ3JhcGhpY3MgZHJpdmVycyBodHRwOi8vZ2V0LndlYmdsLm9yZycpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZ2w6IGdsLFxuICAgIGNhbnZhczogY2FudmFzLFxuICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgIGV4dGVuc2lvbnM6IGV4dGVuc2lvbnMsXG4gICAgb3B0aW9uYWxFeHRlbnNpb25zOiBvcHRpb25hbEV4dGVuc2lvbnMsXG4gICAgcGl4ZWxSYXRpbzogcGl4ZWxSYXRpbyxcbiAgICBwcm9maWxlOiBwcm9maWxlLFxuICAgIG9uRG9uZTogb25Eb25lLFxuICAgIG9uRGVzdHJveTogb25EZXN0cm95XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRXh0ZW5zaW9uQ2FjaGUgKGdsLCBjb25maWcpIHtcbiAgdmFyIGV4dGVuc2lvbnMgPSB7fVxuXG4gIGZ1bmN0aW9uIHRyeUxvYWRFeHRlbnNpb24gKG5hbWVfKSB7XG4gICAgY2hlY2skMS50eXBlKG5hbWVfLCAnc3RyaW5nJywgJ2V4dGVuc2lvbiBuYW1lIG11c3QgYmUgc3RyaW5nJylcbiAgICB2YXIgbmFtZSA9IG5hbWVfLnRvTG93ZXJDYXNlKClcbiAgICB2YXIgZXh0XG4gICAgdHJ5IHtcbiAgICAgIGV4dCA9IGV4dGVuc2lvbnNbbmFtZV0gPSBnbC5nZXRFeHRlbnNpb24obmFtZSlcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiAhIWV4dFxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWcuZXh0ZW5zaW9ucy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBuYW1lID0gY29uZmlnLmV4dGVuc2lvbnNbaV1cbiAgICBpZiAoIXRyeUxvYWRFeHRlbnNpb24obmFtZSkpIHtcbiAgICAgIGNvbmZpZy5vbkRlc3Ryb3koKVxuICAgICAgY29uZmlnLm9uRG9uZSgnXCInICsgbmFtZSArICdcIiBleHRlbnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBXZWJHTCBjb250ZXh0LCB0cnkgdXBncmFkaW5nIHlvdXIgc3lzdGVtIG9yIGEgZGlmZmVyZW50IGJyb3dzZXInKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBjb25maWcub3B0aW9uYWxFeHRlbnNpb25zLmZvckVhY2godHJ5TG9hZEV4dGVuc2lvbilcblxuICByZXR1cm4ge1xuICAgIGV4dGVuc2lvbnM6IGV4dGVuc2lvbnMsXG4gICAgcmVzdG9yZTogZnVuY3Rpb24gKCkge1xuICAgICAgT2JqZWN0LmtleXMoZXh0ZW5zaW9ucykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAoZXh0ZW5zaW9uc1tuYW1lXSAmJiAhdHJ5TG9hZEV4dGVuc2lvbihuYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignKHJlZ2wpOiBlcnJvciByZXN0b3JpbmcgZXh0ZW5zaW9uICcgKyBuYW1lKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsb29wIChuLCBmKSB7XG4gIHZhciByZXN1bHQgPSBBcnJheShuKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkge1xuICAgIHJlc3VsdFtpXSA9IGYoaSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbnZhciBHTF9CWVRFJDEgPSA1MTIwXG52YXIgR0xfVU5TSUdORURfQllURSQyID0gNTEyMVxudmFyIEdMX1NIT1JUJDEgPSA1MTIyXG52YXIgR0xfVU5TSUdORURfU0hPUlQkMSA9IDUxMjNcbnZhciBHTF9JTlQkMSA9IDUxMjRcbnZhciBHTF9VTlNJR05FRF9JTlQkMSA9IDUxMjVcbnZhciBHTF9GTE9BVCQyID0gNTEyNlxuXG5mdW5jdGlvbiBuZXh0UG93MTYgKHYpIHtcbiAgZm9yICh2YXIgaSA9IDE2OyBpIDw9ICgxIDw8IDI4KTsgaSAqPSAxNikge1xuICAgIGlmICh2IDw9IGkpIHtcbiAgICAgIHJldHVybiBpXG4gICAgfVxuICB9XG4gIHJldHVybiAwXG59XG5cbmZ1bmN0aW9uIGxvZzIgKHYpIHtcbiAgdmFyIHIsIHNoaWZ0XG4gIHIgPSAodiA+IDB4RkZGRikgPDwgNFxuICB2ID4+Pj0gclxuICBzaGlmdCA9ICh2ID4gMHhGRikgPDwgM1xuICB2ID4+Pj0gc2hpZnQ7IHIgfD0gc2hpZnRcbiAgc2hpZnQgPSAodiA+IDB4RikgPDwgMlxuICB2ID4+Pj0gc2hpZnQ7IHIgfD0gc2hpZnRcbiAgc2hpZnQgPSAodiA+IDB4MykgPDwgMVxuICB2ID4+Pj0gc2hpZnQ7IHIgfD0gc2hpZnRcbiAgcmV0dXJuIHIgfCAodiA+PiAxKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQb29sICgpIHtcbiAgdmFyIGJ1ZmZlclBvb2wgPSBsb29wKDgsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gW11cbiAgfSlcblxuICBmdW5jdGlvbiBhbGxvYyAobikge1xuICAgIHZhciBzeiA9IG5leHRQb3cxNihuKVxuICAgIHZhciBiaW4gPSBidWZmZXJQb29sW2xvZzIoc3opID4+IDJdXG4gICAgaWYgKGJpbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gYmluLnBvcCgpXG4gICAgfVxuICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoc3opXG4gIH1cblxuICBmdW5jdGlvbiBmcmVlIChidWYpIHtcbiAgICBidWZmZXJQb29sW2xvZzIoYnVmLmJ5dGVMZW5ndGgpID4+IDJdLnB1c2goYnVmKVxuICB9XG5cbiAgZnVuY3Rpb24gYWxsb2NUeXBlICh0eXBlLCBuKSB7XG4gICAgdmFyIHJlc3VsdCA9IG51bGxcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgR0xfQllURSQxOlxuICAgICAgICByZXN1bHQgPSBuZXcgSW50OEFycmF5KGFsbG9jKG4pLCAwLCBuKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFJDI6XG4gICAgICAgIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGFsbG9jKG4pLCAwLCBuKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBHTF9TSE9SVCQxOlxuICAgICAgICByZXN1bHQgPSBuZXcgSW50MTZBcnJheShhbGxvYygyICogbiksIDAsIG4pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUJDE6XG4gICAgICAgIHJlc3VsdCA9IG5ldyBVaW50MTZBcnJheShhbGxvYygyICogbiksIDAsIG4pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIEdMX0lOVCQxOlxuICAgICAgICByZXN1bHQgPSBuZXcgSW50MzJBcnJheShhbGxvYyg0ICogbiksIDAsIG4pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVCQxOlxuICAgICAgICByZXN1bHQgPSBuZXcgVWludDMyQXJyYXkoYWxsb2MoNCAqIG4pLCAwLCBuKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBHTF9GTE9BVCQyOlxuICAgICAgICByZXN1bHQgPSBuZXcgRmxvYXQzMkFycmF5KGFsbG9jKDQgKiBuKSwgMCwgbilcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGlmIChyZXN1bHQubGVuZ3RoICE9PSBuKSB7XG4gICAgICByZXR1cm4gcmVzdWx0LnN1YmFycmF5KDAsIG4pXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGZ1bmN0aW9uIGZyZWVUeXBlIChhcnJheSkge1xuICAgIGZyZWUoYXJyYXkuYnVmZmVyKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhbGxvYzogYWxsb2MsXG4gICAgZnJlZTogZnJlZSxcbiAgICBhbGxvY1R5cGU6IGFsbG9jVHlwZSxcbiAgICBmcmVlVHlwZTogZnJlZVR5cGVcbiAgfVxufVxuXG52YXIgcG9vbCA9IGNyZWF0ZVBvb2woKVxuXG4vLyB6ZXJvIHBvb2wgZm9yIGluaXRpYWwgemVybyBkYXRhXG5wb29sLnplcm8gPSBjcmVhdGVQb29sKClcblxudmFyIEdMX1NVQlBJWEVMX0JJVFMgPSAweDBENTBcbnZhciBHTF9SRURfQklUUyA9IDB4MEQ1MlxudmFyIEdMX0dSRUVOX0JJVFMgPSAweDBENTNcbnZhciBHTF9CTFVFX0JJVFMgPSAweDBENTRcbnZhciBHTF9BTFBIQV9CSVRTID0gMHgwRDU1XG52YXIgR0xfREVQVEhfQklUUyA9IDB4MEQ1NlxudmFyIEdMX1NURU5DSUxfQklUUyA9IDB4MEQ1N1xuXG52YXIgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFID0gMHg4NDZEXG52YXIgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFID0gMHg4NDZFXG5cbnZhciBHTF9NQVhfVEVYVFVSRV9TSVpFID0gMHgwRDMzXG52YXIgR0xfTUFYX1ZJRVdQT1JUX0RJTVMgPSAweDBEM0FcbnZhciBHTF9NQVhfVkVSVEVYX0FUVFJJQlMgPSAweDg4NjlcbnZhciBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyA9IDB4OERGQlxudmFyIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPSAweDhERkNcbnZhciBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RFxudmFyIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0Q1xudmFyIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMHg4ODcyXG52YXIgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyA9IDB4OERGRFxudmFyIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAweDg1MUNcbnZhciBHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkUgPSAweDg0RThcblxudmFyIEdMX1ZFTkRPUiA9IDB4MUYwMFxudmFyIEdMX1JFTkRFUkVSID0gMHgxRjAxXG52YXIgR0xfVkVSU0lPTiA9IDB4MUYwMlxudmFyIEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTiA9IDB4OEI4Q1xuXG52YXIgR0xfTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUID0gMHg4NEZGXG5cbnZhciBHTF9NQVhfQ09MT1JfQVRUQUNITUVOVFNfV0VCR0wgPSAweDhDREZcbnZhciBHTF9NQVhfRFJBV19CVUZGRVJTX1dFQkdMID0gMHg4ODI0XG5cbnZhciBHTF9URVhUVVJFXzJEID0gMHgwREUxXG52YXIgR0xfVEVYVFVSRV9DVUJFX01BUCA9IDB4ODUxM1xudmFyIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9IDB4ODUxNVxudmFyIEdMX1RFWFRVUkUwID0gMHg4NEMwXG52YXIgR0xfUkdCQSA9IDB4MTkwOFxudmFyIEdMX0ZMT0FUJDEgPSAweDE0MDZcbnZhciBHTF9VTlNJR05FRF9CWVRFJDEgPSAweDE0MDFcbnZhciBHTF9GUkFNRUJVRkZFUiA9IDB4OEQ0MFxudmFyIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFID0gMHg4Q0Q1XG52YXIgR0xfQ09MT1JfQVRUQUNITUVOVDAgPSAweDhDRTBcbnZhciBHTF9DT0xPUl9CVUZGRVJfQklUJDEgPSAweDQwMDBcblxudmFyIHdyYXBMaW1pdHMgPSBmdW5jdGlvbiAoZ2wsIGV4dGVuc2lvbnMpIHtcbiAgdmFyIG1heEFuaXNvdHJvcGljID0gMVxuICBpZiAoZXh0ZW5zaW9ucy5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMpIHtcbiAgICBtYXhBbmlzb3Ryb3BpYyA9IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpXG4gIH1cblxuICB2YXIgbWF4RHJhd2J1ZmZlcnMgPSAxXG4gIHZhciBtYXhDb2xvckF0dGFjaG1lbnRzID0gMVxuICBpZiAoZXh0ZW5zaW9ucy53ZWJnbF9kcmF3X2J1ZmZlcnMpIHtcbiAgICBtYXhEcmF3YnVmZmVycyA9IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfRFJBV19CVUZGRVJTX1dFQkdMKVxuICAgIG1heENvbG9yQXR0YWNobWVudHMgPSBnbC5nZXRQYXJhbWV0ZXIoR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKVxuICB9XG5cbiAgLy8gZGV0ZWN0IGlmIHJlYWRpbmcgZmxvYXQgdGV4dHVyZXMgaXMgYXZhaWxhYmxlIChTYWZhcmkgZG9lc24ndCBzdXBwb3J0KVxuICB2YXIgcmVhZEZsb2F0ID0gISFleHRlbnNpb25zLm9lc190ZXh0dXJlX2Zsb2F0XG4gIGlmIChyZWFkRmxvYXQpIHtcbiAgICB2YXIgcmVhZEZsb2F0VGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKVxuICAgIGdsLmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHJlYWRGbG9hdFRleHR1cmUpXG4gICAgZ2wudGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCAxLCAxLCAwLCBHTF9SR0JBLCBHTF9GTE9BVCQxLCBudWxsKVxuXG4gICAgdmFyIGZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKClcbiAgICBnbC5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibylcbiAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIHJlYWRGbG9hdFRleHR1cmUsIDApXG4gICAgZ2wuYmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbnVsbClcblxuICAgIGlmIChnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKSAhPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHJlYWRGbG9hdCA9IGZhbHNlXG5cbiAgICBlbHNlIHtcbiAgICAgIGdsLnZpZXdwb3J0KDAsIDAsIDEsIDEpXG4gICAgICBnbC5jbGVhckNvbG9yKDEuMCwgMC4wLCAwLjAsIDEuMClcbiAgICAgIGdsLmNsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQkMSlcbiAgICAgIHZhciBwaXhlbHMgPSBwb29sLmFsbG9jVHlwZShHTF9GTE9BVCQxLCA0KVxuICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCAxLCAxLCBHTF9SR0JBLCBHTF9GTE9BVCQxLCBwaXhlbHMpXG5cbiAgICAgIGlmIChnbC5nZXRFcnJvcigpKSByZWFkRmxvYXQgPSBmYWxzZVxuICAgICAgZWxzZSB7XG4gICAgICAgIGdsLmRlbGV0ZUZyYW1lYnVmZmVyKGZibylcbiAgICAgICAgZ2wuZGVsZXRlVGV4dHVyZShyZWFkRmxvYXRUZXh0dXJlKVxuXG4gICAgICAgIHJlYWRGbG9hdCA9IHBpeGVsc1swXSA9PT0gMS4wXG4gICAgICB9XG5cbiAgICAgIHBvb2wuZnJlZVR5cGUocGl4ZWxzKVxuICAgIH1cbiAgfVxuXG4gIC8vIGRldGVjdCBub24gcG93ZXIgb2YgdHdvIGN1YmUgdGV4dHVyZXMgc3VwcG9ydCAoSUUgZG9lc24ndCBzdXBwb3J0KVxuICB2YXIgaXNJRSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmICgvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAvVHJpZGVudFxcLy8udGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbikgfHwgL0VkZ2UvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpXG5cbiAgdmFyIG5wb3RUZXh0dXJlQ3ViZSA9IHRydWVcblxuICBpZiAoIWlzSUUpIHtcbiAgICB2YXIgY3ViZVRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKClcbiAgICB2YXIgZGF0YSA9IHBvb2wuYWxsb2NUeXBlKEdMX1VOU0lHTkVEX0JZVEUkMSwgMzYpXG4gICAgZ2wuYWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMClcbiAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFX0NVQkVfTUFQLCBjdWJlVGV4dHVyZSlcbiAgICBnbC50ZXhJbWFnZTJEKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCwgR0xfUkdCQSwgMywgMywgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSQxLCBkYXRhKVxuICAgIHBvb2wuZnJlZVR5cGUoZGF0YSlcbiAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFX0NVQkVfTUFQLCBudWxsKVxuICAgIGdsLmRlbGV0ZVRleHR1cmUoY3ViZVRleHR1cmUpXG4gICAgbnBvdFRleHR1cmVDdWJlID0gIWdsLmdldEVycm9yKClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLy8gZHJhd2luZyBidWZmZXIgYml0IGRlcHRoXG4gICAgY29sb3JCaXRzOiBbXG4gICAgICBnbC5nZXRQYXJhbWV0ZXIoR0xfUkVEX0JJVFMpLFxuICAgICAgZ2wuZ2V0UGFyYW1ldGVyKEdMX0dSRUVOX0JJVFMpLFxuICAgICAgZ2wuZ2V0UGFyYW1ldGVyKEdMX0JMVUVfQklUUyksXG4gICAgICBnbC5nZXRQYXJhbWV0ZXIoR0xfQUxQSEFfQklUUylcbiAgICBdLFxuICAgIGRlcHRoQml0czogZ2wuZ2V0UGFyYW1ldGVyKEdMX0RFUFRIX0JJVFMpLFxuICAgIHN0ZW5jaWxCaXRzOiBnbC5nZXRQYXJhbWV0ZXIoR0xfU1RFTkNJTF9CSVRTKSxcbiAgICBzdWJwaXhlbEJpdHM6IGdsLmdldFBhcmFtZXRlcihHTF9TVUJQSVhFTF9CSVRTKSxcblxuICAgIC8vIHN1cHBvcnRlZCBleHRlbnNpb25zXG4gICAgZXh0ZW5zaW9uczogT2JqZWN0LmtleXMoZXh0ZW5zaW9ucykuZmlsdGVyKGZ1bmN0aW9uIChleHQpIHtcbiAgICAgIHJldHVybiAhIWV4dGVuc2lvbnNbZXh0XVxuICAgIH0pLFxuXG4gICAgLy8gbWF4IGFuaXNvIHNhbXBsZXNcbiAgICBtYXhBbmlzb3Ryb3BpYzogbWF4QW5pc290cm9waWMsXG5cbiAgICAvLyBtYXggZHJhdyBidWZmZXJzXG4gICAgbWF4RHJhd2J1ZmZlcnM6IG1heERyYXdidWZmZXJzLFxuICAgIG1heENvbG9yQXR0YWNobWVudHM6IG1heENvbG9yQXR0YWNobWVudHMsXG5cbiAgICAvLyBwb2ludCBhbmQgbGluZSBzaXplIHJhbmdlc1xuICAgIHBvaW50U2l6ZURpbXM6IGdsLmdldFBhcmFtZXRlcihHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UpLFxuICAgIGxpbmVXaWR0aERpbXM6IGdsLmdldFBhcmFtZXRlcihHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UpLFxuICAgIG1heFZpZXdwb3J0RGltczogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9WSUVXUE9SVF9ESU1TKSxcbiAgICBtYXhDb21iaW5lZFRleHR1cmVVbml0czogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTKSxcbiAgICBtYXhDdWJlTWFwU2l6ZTogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUpLFxuICAgIG1heFJlbmRlcmJ1ZmZlclNpemU6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkUpLFxuICAgIG1heFRleHR1cmVVbml0czogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTKSxcbiAgICBtYXhUZXh0dXJlU2l6ZTogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9URVhUVVJFX1NJWkUpLFxuICAgIG1heEF0dHJpYnV0ZXM6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfVkVSVEVYX0FUVFJJQlMpLFxuICAgIG1heFZlcnRleFVuaWZvcm1zOiBnbC5nZXRQYXJhbWV0ZXIoR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpLFxuICAgIG1heFZlcnRleFRleHR1cmVVbml0czogZ2wuZ2V0UGFyYW1ldGVyKEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyksXG4gICAgbWF4VmFyeWluZ1ZlY3RvcnM6IGdsLmdldFBhcmFtZXRlcihHTF9NQVhfVkFSWUlOR19WRUNUT1JTKSxcbiAgICBtYXhGcmFnbWVudFVuaWZvcm1zOiBnbC5nZXRQYXJhbWV0ZXIoR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyksXG5cbiAgICAvLyB2ZW5kb3IgaW5mb1xuICAgIGdsc2w6IGdsLmdldFBhcmFtZXRlcihHTF9TSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pLFxuICAgIHJlbmRlcmVyOiBnbC5nZXRQYXJhbWV0ZXIoR0xfUkVOREVSRVIpLFxuICAgIHZlbmRvcjogZ2wuZ2V0UGFyYW1ldGVyKEdMX1ZFTkRPUiksXG4gICAgdmVyc2lvbjogZ2wuZ2V0UGFyYW1ldGVyKEdMX1ZFUlNJT04pLFxuXG4gICAgLy8gcXVpcmtzXG4gICAgcmVhZEZsb2F0OiByZWFkRmxvYXQsXG4gICAgbnBvdFRleHR1cmVDdWJlOiBucG90VGV4dHVyZUN1YmVcbiAgfVxufVxuXG5mdW5jdGlvbiBpc05EQXJyYXlMaWtlIChvYmopIHtcbiAgcmV0dXJuIChcbiAgICAhIW9iaiAmJlxuICAgIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmXG4gICAgQXJyYXkuaXNBcnJheShvYmouc2hhcGUpICYmXG4gICAgQXJyYXkuaXNBcnJheShvYmouc3RyaWRlKSAmJlxuICAgIHR5cGVvZiBvYmoub2Zmc2V0ID09PSAnbnVtYmVyJyAmJlxuICAgIG9iai5zaGFwZS5sZW5ndGggPT09IG9iai5zdHJpZGUubGVuZ3RoICYmXG4gICAgKEFycmF5LmlzQXJyYXkob2JqLmRhdGEpIHx8XG4gICAgICBpc1R5cGVkQXJyYXkob2JqLmRhdGEpKSlcbn1cblxudmFyIHZhbHVlcyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIG9ialtrZXldIH0pXG59XG5cbnZhciBmbGF0dGVuVXRpbHMgPSB7XG4gIHNoYXBlOiBhcnJheVNoYXBlJDEsXG4gIGZsYXR0ZW46IGZsYXR0ZW5BcnJheVxufTtcblxuZnVuY3Rpb24gZmxhdHRlbjFEIChhcnJheSwgbngsIG91dCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG54OyArK2kpIHtcbiAgICBvdXRbaV0gPSBhcnJheVtpXVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW4yRCAoYXJyYXksIG54LCBueSwgb3V0KSB7XG4gIHZhciBwdHIgPSAwXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbng7ICsraSkge1xuICAgIHZhciByb3cgPSBhcnJheVtpXVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnk7ICsraikge1xuICAgICAgb3V0W3B0cisrXSA9IHJvd1tqXVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuM0QgKGFycmF5LCBueCwgbnksIG56LCBvdXQsIHB0cl8pIHtcbiAgdmFyIHB0ciA9IHB0cl9cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBueDsgKytpKSB7XG4gICAgdmFyIHJvdyA9IGFycmF5W2ldXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBueTsgKytqKSB7XG4gICAgICB2YXIgY29sID0gcm93W2pdXG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IG56OyArK2spIHtcbiAgICAgICAgb3V0W3B0cisrXSA9IGNvbFtrXVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuUmVjIChhcnJheSwgc2hhcGUsIGxldmVsLCBvdXQsIHB0cikge1xuICB2YXIgc3RyaWRlID0gMVxuICBmb3IgKHZhciBpID0gbGV2ZWwgKyAxOyBpIDwgc2hhcGUubGVuZ3RoOyArK2kpIHtcbiAgICBzdHJpZGUgKj0gc2hhcGVbaV1cbiAgfVxuICB2YXIgbiA9IHNoYXBlW2xldmVsXVxuICBpZiAoc2hhcGUubGVuZ3RoIC0gbGV2ZWwgPT09IDQpIHtcbiAgICB2YXIgbnggPSBzaGFwZVtsZXZlbCArIDFdXG4gICAgdmFyIG55ID0gc2hhcGVbbGV2ZWwgKyAyXVxuICAgIHZhciBueiA9IHNoYXBlW2xldmVsICsgM11cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBmbGF0dGVuM0QoYXJyYXlbaV0sIG54LCBueSwgbnosIG91dCwgcHRyKVxuICAgICAgcHRyICs9IHN0cmlkZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBmbGF0dGVuUmVjKGFycmF5W2ldLCBzaGFwZSwgbGV2ZWwgKyAxLCBvdXQsIHB0cilcbiAgICAgIHB0ciArPSBzdHJpZGVcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmxhdHRlbkFycmF5IChhcnJheSwgc2hhcGUsIHR5cGUsIG91dF8pIHtcbiAgdmFyIHN6ID0gMVxuICBpZiAoc2hhcGUubGVuZ3RoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaGFwZS5sZW5ndGg7ICsraSkge1xuICAgICAgc3ogKj0gc2hhcGVbaV1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3ogPSAwXG4gIH1cbiAgdmFyIG91dCA9IG91dF8gfHwgcG9vbC5hbGxvY1R5cGUodHlwZSwgc3opXG4gIHN3aXRjaCAoc2hhcGUubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgYnJlYWtcbiAgICBjYXNlIDE6XG4gICAgICBmbGF0dGVuMUQoYXJyYXksIHNoYXBlWzBdLCBvdXQpXG4gICAgICBicmVha1xuICAgIGNhc2UgMjpcbiAgICAgIGZsYXR0ZW4yRChhcnJheSwgc2hhcGVbMF0sIHNoYXBlWzFdLCBvdXQpXG4gICAgICBicmVha1xuICAgIGNhc2UgMzpcbiAgICAgIGZsYXR0ZW4zRChhcnJheSwgc2hhcGVbMF0sIHNoYXBlWzFdLCBzaGFwZVsyXSwgb3V0LCAwKVxuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgZmxhdHRlblJlYyhhcnJheSwgc2hhcGUsIDAsIG91dCwgMClcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIGFycmF5U2hhcGUkMSAoYXJyYXlfKSB7XG4gIHZhciBzaGFwZSA9IFtdXG4gIGZvciAodmFyIGFycmF5ID0gYXJyYXlfOyBhcnJheS5sZW5ndGg7IGFycmF5ID0gYXJyYXlbMF0pIHtcbiAgICBzaGFwZS5wdXNoKGFycmF5Lmxlbmd0aClcbiAgfVxuICByZXR1cm4gc2hhcGVcbn1cblxudmFyIGFycmF5VHlwZXMgPSAge1xuXHRcIltvYmplY3QgSW50OEFycmF5XVwiOiA1MTIwLFxuXHRcIltvYmplY3QgSW50MTZBcnJheV1cIjogNTEyMixcblx0XCJbb2JqZWN0IEludDMyQXJyYXldXCI6IDUxMjQsXG5cdFwiW29iamVjdCBVaW50OEFycmF5XVwiOiA1MTIxLFxuXHRcIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldXCI6IDUxMjEsXG5cdFwiW29iamVjdCBVaW50MTZBcnJheV1cIjogNTEyMyxcblx0XCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiOiA1MTI1LFxuXHRcIltvYmplY3QgRmxvYXQzMkFycmF5XVwiOiA1MTI2LFxuXHRcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiOiA1MTIxLFxuXHRcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI6IDUxMjFcbn07XG5cbnZhciBpbnQ4ID0gNTEyMDtcbnZhciBpbnQxNiA9IDUxMjI7XG52YXIgaW50MzIgPSA1MTI0O1xudmFyIHVpbnQ4ID0gNTEyMTtcbnZhciB1aW50MTYgPSA1MTIzO1xudmFyIHVpbnQzMiA9IDUxMjU7XG52YXIgZmxvYXQgPSA1MTI2O1xudmFyIGZsb2F0MzIgPSA1MTI2O1xudmFyIGdsVHlwZXMgPSB7XG5cdGludDg6IGludDgsXG5cdGludDE2OiBpbnQxNixcblx0aW50MzI6IGludDMyLFxuXHR1aW50ODogdWludDgsXG5cdHVpbnQxNjogdWludDE2LFxuXHR1aW50MzI6IHVpbnQzMixcblx0ZmxvYXQ6IGZsb2F0LFxuXHRmbG9hdDMyOiBmbG9hdDMyXG59O1xuXG52YXIgZHluYW1pYyQxID0gMzUwNDg7XG52YXIgc3RyZWFtID0gMzUwNDA7XG52YXIgdXNhZ2VUeXBlcyA9IHtcblx0ZHluYW1pYzogZHluYW1pYyQxLFxuXHRzdHJlYW06IHN0cmVhbSxcblx0XCJzdGF0aWNcIjogMzUwNDRcbn07XG5cbnZhciBhcnJheUZsYXR0ZW4gPSBmbGF0dGVuVXRpbHMuZmxhdHRlblxudmFyIGFycmF5U2hhcGUgPSBmbGF0dGVuVXRpbHMuc2hhcGVcblxudmFyIEdMX1NUQVRJQ19EUkFXID0gMHg4OEU0XG52YXIgR0xfU1RSRUFNX0RSQVcgPSAweDg4RTBcblxudmFyIEdMX1VOU0lHTkVEX0JZVEUkMyA9IDUxMjFcbnZhciBHTF9GTE9BVCQzID0gNTEyNlxuXG52YXIgRFRZUEVTX1NJWkVTID0gW11cbkRUWVBFU19TSVpFU1s1MTIwXSA9IDEgLy8gaW50OFxuRFRZUEVTX1NJWkVTWzUxMjJdID0gMiAvLyBpbnQxNlxuRFRZUEVTX1NJWkVTWzUxMjRdID0gNCAvLyBpbnQzMlxuRFRZUEVTX1NJWkVTWzUxMjFdID0gMSAvLyB1aW50OFxuRFRZUEVTX1NJWkVTWzUxMjNdID0gMiAvLyB1aW50MTZcbkRUWVBFU19TSVpFU1s1MTI1XSA9IDQgLy8gdWludDMyXG5EVFlQRVNfU0laRVNbNTEyNl0gPSA0IC8vIGZsb2F0MzJcblxuZnVuY3Rpb24gdHlwZWRBcnJheUNvZGUgKGRhdGEpIHtcbiAgcmV0dXJuIGFycmF5VHlwZXNbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpXSB8IDBcbn1cblxuZnVuY3Rpb24gY29weUFycmF5IChvdXQsIGlucCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGlucC5sZW5ndGg7ICsraSkge1xuICAgIG91dFtpXSA9IGlucFtpXVxuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zcG9zZSAoXG4gIHJlc3VsdCwgZGF0YSwgc2hhcGVYLCBzaGFwZVksIHN0cmlkZVgsIHN0cmlkZVksIG9mZnNldCkge1xuICB2YXIgcHRyID0gMFxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNoYXBlWDsgKytpKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaGFwZVk7ICsraikge1xuICAgICAgcmVzdWx0W3B0cisrXSA9IGRhdGFbc3RyaWRlWCAqIGkgKyBzdHJpZGVZICogaiArIG9mZnNldF1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JhcEJ1ZmZlclN0YXRlIChnbCwgc3RhdHMsIGNvbmZpZywgZGVzdHJveUJ1ZmZlcikge1xuICB2YXIgYnVmZmVyQ291bnQgPSAwXG4gIHZhciBidWZmZXJTZXQgPSB7fVxuXG4gIGZ1bmN0aW9uIFJFR0xCdWZmZXIgKHR5cGUpIHtcbiAgICB0aGlzLmlkID0gYnVmZmVyQ291bnQrK1xuICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKClcbiAgICB0aGlzLnR5cGUgPSB0eXBlXG4gICAgdGhpcy51c2FnZSA9IEdMX1NUQVRJQ19EUkFXXG4gICAgdGhpcy5ieXRlTGVuZ3RoID0gMFxuICAgIHRoaXMuZGltZW5zaW9uID0gMVxuICAgIHRoaXMuZHR5cGUgPSBHTF9VTlNJR05FRF9CWVRFJDNcblxuICAgIHRoaXMucGVyc2lzdGVudERhdGEgPSBudWxsXG5cbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIHRoaXMuc3RhdHMgPSB7IHNpemU6IDAgfVxuICAgIH1cbiAgfVxuXG4gIFJFR0xCdWZmZXIucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgZ2wuYmluZEJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMuYnVmZmVyKVxuICB9XG5cbiAgUkVHTEJ1ZmZlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICBkZXN0cm95KHRoaXMpXG4gIH1cblxuICB2YXIgc3RyZWFtUG9vbCA9IFtdXG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyZWFtICh0eXBlLCBkYXRhKSB7XG4gICAgdmFyIGJ1ZmZlciA9IHN0cmVhbVBvb2wucG9wKClcbiAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgYnVmZmVyID0gbmV3IFJFR0xCdWZmZXIodHlwZSlcbiAgICB9XG4gICAgYnVmZmVyLmJpbmQoKVxuICAgIGluaXRCdWZmZXJGcm9tRGF0YShidWZmZXIsIGRhdGEsIEdMX1NUUkVBTV9EUkFXLCAwLCAxLCBmYWxzZSlcbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95U3RyZWFtIChzdHJlYW0kJDEpIHtcbiAgICBzdHJlYW1Qb29sLnB1c2goc3RyZWFtJCQxKVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdEJ1ZmZlckZyb21UeXBlZEFycmF5IChidWZmZXIsIGRhdGEsIHVzYWdlKSB7XG4gICAgYnVmZmVyLmJ5dGVMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGhcbiAgICBnbC5idWZmZXJEYXRhKGJ1ZmZlci50eXBlLCBkYXRhLCB1c2FnZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRCdWZmZXJGcm9tRGF0YSAoYnVmZmVyLCBkYXRhLCB1c2FnZSwgZHR5cGUsIGRpbWVuc2lvbiwgcGVyc2lzdCkge1xuICAgIHZhciBzaGFwZVxuICAgIGJ1ZmZlci51c2FnZSA9IHVzYWdlXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IEdMX0ZMT0FUJDNcbiAgICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIGZsYXREYXRhXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbMF0pKSB7XG4gICAgICAgICAgc2hhcGUgPSBhcnJheVNoYXBlKGRhdGEpXG4gICAgICAgICAgdmFyIGRpbSA9IDFcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHNoYXBlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBkaW0gKj0gc2hhcGVbaV1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnVmZmVyLmRpbWVuc2lvbiA9IGRpbVxuICAgICAgICAgIGZsYXREYXRhID0gYXJyYXlGbGF0dGVuKGRhdGEsIHNoYXBlLCBidWZmZXIuZHR5cGUpXG4gICAgICAgICAgaW5pdEJ1ZmZlckZyb21UeXBlZEFycmF5KGJ1ZmZlciwgZmxhdERhdGEsIHVzYWdlKVxuICAgICAgICAgIGlmIChwZXJzaXN0KSB7XG4gICAgICAgICAgICBidWZmZXIucGVyc2lzdGVudERhdGEgPSBmbGF0RGF0YVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb29sLmZyZWVUeXBlKGZsYXREYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YVswXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBidWZmZXIuZGltZW5zaW9uID0gZGltZW5zaW9uXG4gICAgICAgICAgdmFyIHR5cGVkRGF0YSA9IHBvb2wuYWxsb2NUeXBlKGJ1ZmZlci5kdHlwZSwgZGF0YS5sZW5ndGgpXG4gICAgICAgICAgY29weUFycmF5KHR5cGVkRGF0YSwgZGF0YSlcbiAgICAgICAgICBpbml0QnVmZmVyRnJvbVR5cGVkQXJyYXkoYnVmZmVyLCB0eXBlZERhdGEsIHVzYWdlKVxuICAgICAgICAgIGlmIChwZXJzaXN0KSB7XG4gICAgICAgICAgICBidWZmZXIucGVyc2lzdGVudERhdGEgPSB0eXBlZERhdGFcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9vbC5mcmVlVHlwZSh0eXBlZERhdGEpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzVHlwZWRBcnJheShkYXRhWzBdKSkge1xuICAgICAgICAgIGJ1ZmZlci5kaW1lbnNpb24gPSBkYXRhWzBdLmxlbmd0aFxuICAgICAgICAgIGJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IHR5cGVkQXJyYXlDb2RlKGRhdGFbMF0pIHx8IEdMX0ZMT0FUJDNcbiAgICAgICAgICBmbGF0RGF0YSA9IGFycmF5RmxhdHRlbihcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBbZGF0YS5sZW5ndGgsIGRhdGFbMF0ubGVuZ3RoXSxcbiAgICAgICAgICAgIGJ1ZmZlci5kdHlwZSlcbiAgICAgICAgICBpbml0QnVmZmVyRnJvbVR5cGVkQXJyYXkoYnVmZmVyLCBmbGF0RGF0YSwgdXNhZ2UpXG4gICAgICAgICAgaWYgKHBlcnNpc3QpIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wZXJzaXN0ZW50RGF0YSA9IGZsYXREYXRhXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvb2wuZnJlZVR5cGUoZmxhdERhdGEpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgYnVmZmVyIGRhdGEnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1R5cGVkQXJyYXkoZGF0YSkpIHtcbiAgICAgIGJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IHR5cGVkQXJyYXlDb2RlKGRhdGEpXG4gICAgICBidWZmZXIuZGltZW5zaW9uID0gZGltZW5zaW9uXG4gICAgICBpbml0QnVmZmVyRnJvbVR5cGVkQXJyYXkoYnVmZmVyLCBkYXRhLCB1c2FnZSlcbiAgICAgIGlmIChwZXJzaXN0KSB7XG4gICAgICAgIGJ1ZmZlci5wZXJzaXN0ZW50RGF0YSA9IG5ldyBVaW50OEFycmF5KG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyKSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzTkRBcnJheUxpa2UoZGF0YSkpIHtcbiAgICAgIHNoYXBlID0gZGF0YS5zaGFwZVxuICAgICAgdmFyIHN0cmlkZSA9IGRhdGEuc3RyaWRlXG4gICAgICB2YXIgb2Zmc2V0ID0gZGF0YS5vZmZzZXRcblxuICAgICAgdmFyIHNoYXBlWCA9IDBcbiAgICAgIHZhciBzaGFwZVkgPSAwXG4gICAgICB2YXIgc3RyaWRlWCA9IDBcbiAgICAgIHZhciBzdHJpZGVZID0gMFxuICAgICAgaWYgKHNoYXBlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBzaGFwZVggPSBzaGFwZVswXVxuICAgICAgICBzaGFwZVkgPSAxXG4gICAgICAgIHN0cmlkZVggPSBzdHJpZGVbMF1cbiAgICAgICAgc3RyaWRlWSA9IDBcbiAgICAgIH0gZWxzZSBpZiAoc2hhcGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHNoYXBlWCA9IHNoYXBlWzBdXG4gICAgICAgIHNoYXBlWSA9IHNoYXBlWzFdXG4gICAgICAgIHN0cmlkZVggPSBzdHJpZGVbMF1cbiAgICAgICAgc3RyaWRlWSA9IHN0cmlkZVsxXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBzaGFwZScpXG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IHR5cGVkQXJyYXlDb2RlKGRhdGEuZGF0YSkgfHwgR0xfRkxPQVQkM1xuICAgICAgYnVmZmVyLmRpbWVuc2lvbiA9IHNoYXBlWVxuXG4gICAgICB2YXIgdHJhbnNwb3NlRGF0YSA9IHBvb2wuYWxsb2NUeXBlKGJ1ZmZlci5kdHlwZSwgc2hhcGVYICogc2hhcGVZKVxuICAgICAgdHJhbnNwb3NlKHRyYW5zcG9zZURhdGEsXG4gICAgICAgIGRhdGEuZGF0YSxcbiAgICAgICAgc2hhcGVYLCBzaGFwZVksXG4gICAgICAgIHN0cmlkZVgsIHN0cmlkZVksXG4gICAgICAgIG9mZnNldClcbiAgICAgIGluaXRCdWZmZXJGcm9tVHlwZWRBcnJheShidWZmZXIsIHRyYW5zcG9zZURhdGEsIHVzYWdlKVxuICAgICAgaWYgKHBlcnNpc3QpIHtcbiAgICAgICAgYnVmZmVyLnBlcnNpc3RlbnREYXRhID0gdHJhbnNwb3NlRGF0YVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9vbC5mcmVlVHlwZSh0cmFuc3Bvc2VEYXRhKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICBidWZmZXIuZHR5cGUgPSBHTF9VTlNJR05FRF9CWVRFJDNcbiAgICAgIGJ1ZmZlci5kaW1lbnNpb24gPSBkaW1lbnNpb25cbiAgICAgIGluaXRCdWZmZXJGcm9tVHlwZWRBcnJheShidWZmZXIsIGRhdGEsIHVzYWdlKVxuICAgICAgaWYgKHBlcnNpc3QpIHtcbiAgICAgICAgYnVmZmVyLnBlcnNpc3RlbnREYXRhID0gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQ4QXJyYXkoZGF0YSkpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgYnVmZmVyIGRhdGEnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3kgKGJ1ZmZlcikge1xuICAgIHN0YXRzLmJ1ZmZlckNvdW50LS1cblxuICAgIC8vIHJlbW92ZSBhdHRyaWJ1dGUgbGlua1xuICAgIGRlc3Ryb3lCdWZmZXIoYnVmZmVyKVxuXG4gICAgdmFyIGhhbmRsZSA9IGJ1ZmZlci5idWZmZXJcbiAgICBjaGVjayQxKGhhbmRsZSwgJ2J1ZmZlciBtdXN0IG5vdCBiZSBkZWxldGVkIGFscmVhZHknKVxuICAgIGdsLmRlbGV0ZUJ1ZmZlcihoYW5kbGUpXG4gICAgYnVmZmVyLmJ1ZmZlciA9IG51bGxcbiAgICBkZWxldGUgYnVmZmVyU2V0W2J1ZmZlci5pZF1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAob3B0aW9ucywgdHlwZSwgZGVmZXJJbml0LCBwZXJzaXN0ZW50KSB7XG4gICAgc3RhdHMuYnVmZmVyQ291bnQrK1xuXG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBSRUdMQnVmZmVyKHR5cGUpXG4gICAgYnVmZmVyU2V0W2J1ZmZlci5pZF0gPSBidWZmZXJcblxuICAgIGZ1bmN0aW9uIHJlZ2xCdWZmZXIgKG9wdGlvbnMpIHtcbiAgICAgIHZhciB1c2FnZSA9IEdMX1NUQVRJQ19EUkFXXG4gICAgICB2YXIgZGF0YSA9IG51bGxcbiAgICAgIHZhciBieXRlTGVuZ3RoID0gMFxuICAgICAgdmFyIGR0eXBlID0gMFxuICAgICAgdmFyIGRpbWVuc2lvbiA9IDFcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpIHx8XG4gICAgICAgICAgaXNUeXBlZEFycmF5KG9wdGlvbnMpIHx8XG4gICAgICAgICAgaXNOREFycmF5TGlrZShvcHRpb25zKSB8fFxuICAgICAgICAgIG9wdGlvbnMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICBkYXRhID0gb3B0aW9uc1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgYnl0ZUxlbmd0aCA9IG9wdGlvbnMgfCAwXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgY2hlY2skMS50eXBlKFxuICAgICAgICAgIG9wdGlvbnMsICdvYmplY3QnLFxuICAgICAgICAgICdidWZmZXIgYXJndW1lbnRzIG11c3QgYmUgYW4gb2JqZWN0LCBhIG51bWJlciBvciBhbiBhcnJheScpXG5cbiAgICAgICAgaWYgKCdkYXRhJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgY2hlY2skMShcbiAgICAgICAgICAgIGRhdGEgPT09IG51bGwgfHxcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgICAgIGlzVHlwZWRBcnJheShkYXRhKSB8fFxuICAgICAgICAgICAgaXNOREFycmF5TGlrZShkYXRhKSxcbiAgICAgICAgICAgICdpbnZhbGlkIGRhdGEgZm9yIGJ1ZmZlcicpXG4gICAgICAgICAgZGF0YSA9IG9wdGlvbnMuZGF0YVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCd1c2FnZScgaW4gb3B0aW9ucykge1xuICAgICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG9wdGlvbnMudXNhZ2UsIHVzYWdlVHlwZXMsICdpbnZhbGlkIGJ1ZmZlciB1c2FnZScpXG4gICAgICAgICAgdXNhZ2UgPSB1c2FnZVR5cGVzW29wdGlvbnMudXNhZ2VdXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3R5cGUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjaGVjayQxLnBhcmFtZXRlcihvcHRpb25zLnR5cGUsIGdsVHlwZXMsICdpbnZhbGlkIGJ1ZmZlciB0eXBlJylcbiAgICAgICAgICBkdHlwZSA9IGdsVHlwZXNbb3B0aW9ucy50eXBlXVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdkaW1lbnNpb24nIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjaGVjayQxLnR5cGUob3B0aW9ucy5kaW1lbnNpb24sICdudW1iZXInLCAnaW52YWxpZCBkaW1lbnNpb24nKVxuICAgICAgICAgIGRpbWVuc2lvbiA9IG9wdGlvbnMuZGltZW5zaW9uIHwgMFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdsZW5ndGgnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjaGVjayQxLm5uaShieXRlTGVuZ3RoLCAnYnVmZmVyIGxlbmd0aCBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlcicpXG4gICAgICAgICAgYnl0ZUxlbmd0aCA9IG9wdGlvbnMubGVuZ3RoIHwgMFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlci5iaW5kKClcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAvLyAjNDc1XG4gICAgICAgIGlmIChieXRlTGVuZ3RoKSBnbC5idWZmZXJEYXRhKGJ1ZmZlci50eXBlLCBieXRlTGVuZ3RoLCB1c2FnZSlcbiAgICAgICAgYnVmZmVyLmR0eXBlID0gZHR5cGUgfHwgR0xfVU5TSUdORURfQllURSQzXG4gICAgICAgIGJ1ZmZlci51c2FnZSA9IHVzYWdlXG4gICAgICAgIGJ1ZmZlci5kaW1lbnNpb24gPSBkaW1lbnNpb25cbiAgICAgICAgYnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0QnVmZmVyRnJvbURhdGEoYnVmZmVyLCBkYXRhLCB1c2FnZSwgZHR5cGUsIGRpbWVuc2lvbiwgcGVyc2lzdGVudClcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIGJ1ZmZlci5zdGF0cy5zaXplID0gYnVmZmVyLmJ5dGVMZW5ndGggKiBEVFlQRVNfU0laRVNbYnVmZmVyLmR0eXBlXVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVnbEJ1ZmZlclxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFN1YkRhdGEgKGRhdGEsIG9mZnNldCkge1xuICAgICAgY2hlY2skMShvZmZzZXQgKyBkYXRhLmJ5dGVMZW5ndGggPD0gYnVmZmVyLmJ5dGVMZW5ndGgsXG4gICAgICAgICdpbnZhbGlkIGJ1ZmZlciBzdWJkYXRhIGNhbGwsIGJ1ZmZlciBpcyB0b28gc21hbGwuICcgKyAnIENhblxcJ3Qgd3JpdGUgZGF0YSBvZiBzaXplICcgKyBkYXRhLmJ5dGVMZW5ndGggKyAnIHN0YXJ0aW5nIGZyb20gb2Zmc2V0ICcgKyBvZmZzZXQgKyAnIHRvIGEgYnVmZmVyIG9mIHNpemUgJyArIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuXG4gICAgICBnbC5idWZmZXJTdWJEYXRhKGJ1ZmZlci50eXBlLCBvZmZzZXQsIGRhdGEpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3ViZGF0YSAoZGF0YSwgb2Zmc2V0Xykge1xuICAgICAgdmFyIG9mZnNldCA9IChvZmZzZXRfIHx8IDApIHwgMFxuICAgICAgdmFyIHNoYXBlXG4gICAgICBidWZmZXIuYmluZCgpXG4gICAgICBpZiAoaXNUeXBlZEFycmF5KGRhdGEpIHx8IGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICBzZXRTdWJEYXRhKGRhdGEsIG9mZnNldClcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhWzBdID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdmFyIGNvbnZlcnRlZCA9IHBvb2wuYWxsb2NUeXBlKGJ1ZmZlci5kdHlwZSwgZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICBjb3B5QXJyYXkoY29udmVydGVkLCBkYXRhKVxuICAgICAgICAgICAgc2V0U3ViRGF0YShjb252ZXJ0ZWQsIG9mZnNldClcbiAgICAgICAgICAgIHBvb2wuZnJlZVR5cGUoY29udmVydGVkKVxuICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhWzBdKSB8fCBpc1R5cGVkQXJyYXkoZGF0YVswXSkpIHtcbiAgICAgICAgICAgIHNoYXBlID0gYXJyYXlTaGFwZShkYXRhKVxuICAgICAgICAgICAgdmFyIGZsYXREYXRhID0gYXJyYXlGbGF0dGVuKGRhdGEsIHNoYXBlLCBidWZmZXIuZHR5cGUpXG4gICAgICAgICAgICBzZXRTdWJEYXRhKGZsYXREYXRhLCBvZmZzZXQpXG4gICAgICAgICAgICBwb29sLmZyZWVUeXBlKGZsYXREYXRhKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGVjayQxLnJhaXNlKCdpbnZhbGlkIGJ1ZmZlciBkYXRhJylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNOREFycmF5TGlrZShkYXRhKSkge1xuICAgICAgICBzaGFwZSA9IGRhdGEuc2hhcGVcbiAgICAgICAgdmFyIHN0cmlkZSA9IGRhdGEuc3RyaWRlXG5cbiAgICAgICAgdmFyIHNoYXBlWCA9IDBcbiAgICAgICAgdmFyIHNoYXBlWSA9IDBcbiAgICAgICAgdmFyIHN0cmlkZVggPSAwXG4gICAgICAgIHZhciBzdHJpZGVZID0gMFxuICAgICAgICBpZiAoc2hhcGUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgc2hhcGVYID0gc2hhcGVbMF1cbiAgICAgICAgICBzaGFwZVkgPSAxXG4gICAgICAgICAgc3RyaWRlWCA9IHN0cmlkZVswXVxuICAgICAgICAgIHN0cmlkZVkgPSAwXG4gICAgICAgIH0gZWxzZSBpZiAoc2hhcGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgc2hhcGVYID0gc2hhcGVbMF1cbiAgICAgICAgICBzaGFwZVkgPSBzaGFwZVsxXVxuICAgICAgICAgIHN0cmlkZVggPSBzdHJpZGVbMF1cbiAgICAgICAgICBzdHJpZGVZID0gc3RyaWRlWzFdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBzaGFwZScpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIGR0eXBlID0gQXJyYXkuaXNBcnJheShkYXRhLmRhdGEpXG4gICAgICAgICAgPyBidWZmZXIuZHR5cGVcbiAgICAgICAgICA6IHR5cGVkQXJyYXlDb2RlKGRhdGEuZGF0YSlcblxuICAgICAgICB2YXIgdHJhbnNwb3NlRGF0YSA9IHBvb2wuYWxsb2NUeXBlKGR0eXBlLCBzaGFwZVggKiBzaGFwZVkpXG4gICAgICAgIHRyYW5zcG9zZSh0cmFuc3Bvc2VEYXRhLFxuICAgICAgICAgIGRhdGEuZGF0YSxcbiAgICAgICAgICBzaGFwZVgsIHNoYXBlWSxcbiAgICAgICAgICBzdHJpZGVYLCBzdHJpZGVZLFxuICAgICAgICAgIGRhdGEub2Zmc2V0KVxuICAgICAgICBzZXRTdWJEYXRhKHRyYW5zcG9zZURhdGEsIG9mZnNldClcbiAgICAgICAgcG9vbC5mcmVlVHlwZSh0cmFuc3Bvc2VEYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBkYXRhIGZvciBidWZmZXIgc3ViZGF0YScpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVnbEJ1ZmZlclxuICAgIH1cblxuICAgIGlmICghZGVmZXJJbml0KSB7XG4gICAgICByZWdsQnVmZmVyKG9wdGlvbnMpXG4gICAgfVxuXG4gICAgcmVnbEJ1ZmZlci5fcmVnbFR5cGUgPSAnYnVmZmVyJ1xuICAgIHJlZ2xCdWZmZXIuX2J1ZmZlciA9IGJ1ZmZlclxuICAgIHJlZ2xCdWZmZXIuc3ViZGF0YSA9IHN1YmRhdGFcbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIHJlZ2xCdWZmZXIuc3RhdHMgPSBidWZmZXIuc3RhdHNcbiAgICB9XG4gICAgcmVnbEJ1ZmZlci5kZXN0cm95ID0gZnVuY3Rpb24gKCkgeyBkZXN0cm95KGJ1ZmZlcikgfVxuXG4gICAgcmV0dXJuIHJlZ2xCdWZmZXJcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3RvcmVCdWZmZXJzICgpIHtcbiAgICB2YWx1ZXMoYnVmZmVyU2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChidWZmZXIpIHtcbiAgICAgIGJ1ZmZlci5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKVxuICAgICAgZ2wuYmluZEJ1ZmZlcihidWZmZXIudHlwZSwgYnVmZmVyLmJ1ZmZlcilcbiAgICAgIGdsLmJ1ZmZlckRhdGEoXG4gICAgICAgIGJ1ZmZlci50eXBlLCBidWZmZXIucGVyc2lzdGVudERhdGEgfHwgYnVmZmVyLmJ5dGVMZW5ndGgsIGJ1ZmZlci51c2FnZSlcbiAgICB9KVxuICB9XG5cbiAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgc3RhdHMuZ2V0VG90YWxCdWZmZXJTaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRvdGFsID0gMFxuICAgICAgLy8gVE9ETzogUmlnaHQgbm93LCB0aGUgc3RyZWFtcyBhcmUgbm90IHBhcnQgb2YgdGhlIHRvdGFsIGNvdW50LlxuICAgICAgT2JqZWN0LmtleXMoYnVmZmVyU2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdG90YWwgKz0gYnVmZmVyU2V0W2tleV0uc3RhdHMuc2l6ZVxuICAgICAgfSlcbiAgICAgIHJldHVybiB0b3RhbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBjcmVhdGVCdWZmZXIsXG5cbiAgICBjcmVhdGVTdHJlYW06IGNyZWF0ZVN0cmVhbSxcbiAgICBkZXN0cm95U3RyZWFtOiBkZXN0cm95U3RyZWFtLFxuXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhbHVlcyhidWZmZXJTZXQpLmZvckVhY2goZGVzdHJveSlcbiAgICAgIHN0cmVhbVBvb2wuZm9yRWFjaChkZXN0cm95KVxuICAgIH0sXG5cbiAgICBnZXRCdWZmZXI6IGZ1bmN0aW9uICh3cmFwcGVyKSB7XG4gICAgICBpZiAod3JhcHBlciAmJiB3cmFwcGVyLl9idWZmZXIgaW5zdGFuY2VvZiBSRUdMQnVmZmVyKSB7XG4gICAgICAgIHJldHVybiB3cmFwcGVyLl9idWZmZXJcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIHJlc3RvcmU6IHJlc3RvcmVCdWZmZXJzLFxuXG4gICAgX2luaXRCdWZmZXI6IGluaXRCdWZmZXJGcm9tRGF0YVxuICB9XG59XG5cbnZhciBwb2ludHMgPSAwO1xudmFyIHBvaW50ID0gMDtcbnZhciBsaW5lcyA9IDE7XG52YXIgbGluZSA9IDE7XG52YXIgdHJpYW5nbGVzID0gNDtcbnZhciB0cmlhbmdsZSA9IDQ7XG52YXIgcHJpbVR5cGVzID0ge1xuXHRwb2ludHM6IHBvaW50cyxcblx0cG9pbnQ6IHBvaW50LFxuXHRsaW5lczogbGluZXMsXG5cdGxpbmU6IGxpbmUsXG5cdHRyaWFuZ2xlczogdHJpYW5nbGVzLFxuXHR0cmlhbmdsZTogdHJpYW5nbGUsXG5cdFwibGluZSBsb29wXCI6IDIsXG5cdFwibGluZSBzdHJpcFwiOiAzLFxuXHRcInRyaWFuZ2xlIHN0cmlwXCI6IDUsXG5cdFwidHJpYW5nbGUgZmFuXCI6IDZcbn07XG5cbnZhciBHTF9QT0lOVFMgPSAwXG52YXIgR0xfTElORVMgPSAxXG52YXIgR0xfVFJJQU5HTEVTID0gNFxuXG52YXIgR0xfQllURSQyID0gNTEyMFxudmFyIEdMX1VOU0lHTkVEX0JZVEUkNCA9IDUxMjFcbnZhciBHTF9TSE9SVCQyID0gNTEyMlxudmFyIEdMX1VOU0lHTkVEX1NIT1JUJDIgPSA1MTIzXG52YXIgR0xfSU5UJDIgPSA1MTI0XG52YXIgR0xfVU5TSUdORURfSU5UJDIgPSA1MTI1XG5cbnZhciBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiA9IDM0OTYzXG5cbnZhciBHTF9TVFJFQU1fRFJBVyQxID0gMHg4OEUwXG52YXIgR0xfU1RBVElDX0RSQVckMSA9IDB4ODhFNFxuXG5mdW5jdGlvbiB3cmFwRWxlbWVudHNTdGF0ZSAoZ2wsIGV4dGVuc2lvbnMsIGJ1ZmZlclN0YXRlLCBzdGF0cykge1xuICB2YXIgZWxlbWVudFNldCA9IHt9XG4gIHZhciBlbGVtZW50Q291bnQgPSAwXG5cbiAgdmFyIGVsZW1lbnRUeXBlcyA9IHtcbiAgICAndWludDgnOiBHTF9VTlNJR05FRF9CWVRFJDQsXG4gICAgJ3VpbnQxNic6IEdMX1VOU0lHTkVEX1NIT1JUJDJcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLm9lc19lbGVtZW50X2luZGV4X3VpbnQpIHtcbiAgICBlbGVtZW50VHlwZXMudWludDMyID0gR0xfVU5TSUdORURfSU5UJDJcbiAgfVxuXG4gIGZ1bmN0aW9uIFJFR0xFbGVtZW50QnVmZmVyIChidWZmZXIpIHtcbiAgICB0aGlzLmlkID0gZWxlbWVudENvdW50KytcbiAgICBlbGVtZW50U2V0W3RoaXMuaWRdID0gdGhpc1xuICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyXG4gICAgdGhpcy5wcmltVHlwZSA9IEdMX1RSSUFOR0xFU1xuICAgIHRoaXMudmVydENvdW50ID0gMFxuICAgIHRoaXMudHlwZSA9IDBcbiAgfVxuXG4gIFJFR0xFbGVtZW50QnVmZmVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuYnVmZmVyLmJpbmQoKVxuICB9XG5cbiAgdmFyIGJ1ZmZlclBvb2wgPSBbXVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRTdHJlYW0gKGRhdGEpIHtcbiAgICB2YXIgcmVzdWx0ID0gYnVmZmVyUG9vbC5wb3AoKVxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXN1bHQgPSBuZXcgUkVHTEVsZW1lbnRCdWZmZXIoYnVmZmVyU3RhdGUuY3JlYXRlKFxuICAgICAgICBudWxsLFxuICAgICAgICBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUixcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgZmFsc2UpLl9idWZmZXIpXG4gICAgfVxuICAgIGluaXRFbGVtZW50cyhyZXN1bHQsIGRhdGEsIEdMX1NUUkVBTV9EUkFXJDEsIC0xLCAtMSwgMCwgMClcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95RWxlbWVudFN0cmVhbSAoZWxlbWVudHMpIHtcbiAgICBidWZmZXJQb29sLnB1c2goZWxlbWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBpbml0RWxlbWVudHMgKFxuICAgIGVsZW1lbnRzLFxuICAgIGRhdGEsXG4gICAgdXNhZ2UsXG4gICAgcHJpbSxcbiAgICBjb3VudCxcbiAgICBieXRlTGVuZ3RoLFxuICAgIHR5cGUpIHtcbiAgICBlbGVtZW50cy5idWZmZXIuYmluZCgpXG4gICAgdmFyIGR0eXBlXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHZhciBwcmVkaWN0ZWRUeXBlID0gdHlwZVxuICAgICAgaWYgKCF0eXBlICYmIChcbiAgICAgICAgIWlzVHlwZWRBcnJheShkYXRhKSB8fFxuICAgICAgICAgKGlzTkRBcnJheUxpa2UoZGF0YSkgJiYgIWlzVHlwZWRBcnJheShkYXRhLmRhdGEpKSkpIHtcbiAgICAgICAgcHJlZGljdGVkVHlwZSA9IGV4dGVuc2lvbnMub2VzX2VsZW1lbnRfaW5kZXhfdWludFxuICAgICAgICAgID8gR0xfVU5TSUdORURfSU5UJDJcbiAgICAgICAgICA6IEdMX1VOU0lHTkVEX1NIT1JUJDJcbiAgICAgIH1cbiAgICAgIGJ1ZmZlclN0YXRlLl9pbml0QnVmZmVyKFxuICAgICAgICBlbGVtZW50cy5idWZmZXIsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHVzYWdlLFxuICAgICAgICBwcmVkaWN0ZWRUeXBlLFxuICAgICAgICAzKVxuICAgIH0gZWxzZSB7XG4gICAgICBnbC5idWZmZXJEYXRhKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBieXRlTGVuZ3RoLCB1c2FnZSlcbiAgICAgIGVsZW1lbnRzLmJ1ZmZlci5kdHlwZSA9IGR0eXBlIHx8IEdMX1VOU0lHTkVEX0JZVEUkNFxuICAgICAgZWxlbWVudHMuYnVmZmVyLnVzYWdlID0gdXNhZ2VcbiAgICAgIGVsZW1lbnRzLmJ1ZmZlci5kaW1lbnNpb24gPSAzXG4gICAgICBlbGVtZW50cy5idWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbiAgICB9XG5cbiAgICBkdHlwZSA9IHR5cGVcbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgIHN3aXRjaCAoZWxlbWVudHMuYnVmZmVyLmR0eXBlKSB7XG4gICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURSQ0OlxuICAgICAgICBjYXNlIEdMX0JZVEUkMjpcbiAgICAgICAgICBkdHlwZSA9IEdMX1VOU0lHTkVEX0JZVEUkNFxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVCQyOlxuICAgICAgICBjYXNlIEdMX1NIT1JUJDI6XG4gICAgICAgICAgZHR5cGUgPSBHTF9VTlNJR05FRF9TSE9SVCQyXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVCQyOlxuICAgICAgICBjYXNlIEdMX0lOVCQyOlxuICAgICAgICAgIGR0eXBlID0gR0xfVU5TSUdORURfSU5UJDJcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY2hlY2skMS5yYWlzZSgndW5zdXBwb3J0ZWQgdHlwZSBmb3IgZWxlbWVudCBhcnJheScpXG4gICAgICB9XG4gICAgICBlbGVtZW50cy5idWZmZXIuZHR5cGUgPSBkdHlwZVxuICAgIH1cbiAgICBlbGVtZW50cy50eXBlID0gZHR5cGVcblxuICAgIC8vIENoZWNrIG9lc19lbGVtZW50X2luZGV4X3VpbnQgZXh0ZW5zaW9uXG4gICAgY2hlY2skMShcbiAgICAgIGR0eXBlICE9PSBHTF9VTlNJR05FRF9JTlQkMiB8fFxuICAgICAgISFleHRlbnNpb25zLm9lc19lbGVtZW50X2luZGV4X3VpbnQsXG4gICAgICAnMzIgYml0IGVsZW1lbnQgYnVmZmVycyBub3Qgc3VwcG9ydGVkLCBlbmFibGUgb2VzX2VsZW1lbnRfaW5kZXhfdWludCBmaXJzdCcpXG5cbiAgICAvLyB0cnkgdG8gZ3Vlc3MgZGVmYXVsdCBwcmltaXRpdmUgdHlwZSBhbmQgYXJndW1lbnRzXG4gICAgdmFyIHZlcnRDb3VudCA9IGNvdW50XG4gICAgaWYgKHZlcnRDb3VudCA8IDApIHtcbiAgICAgIHZlcnRDb3VudCA9IGVsZW1lbnRzLmJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICBpZiAoZHR5cGUgPT09IEdMX1VOU0lHTkVEX1NIT1JUJDIpIHtcbiAgICAgICAgdmVydENvdW50ID4+PSAxXG4gICAgICB9IGVsc2UgaWYgKGR0eXBlID09PSBHTF9VTlNJR05FRF9JTlQkMikge1xuICAgICAgICB2ZXJ0Q291bnQgPj49IDJcbiAgICAgIH1cbiAgICB9XG4gICAgZWxlbWVudHMudmVydENvdW50ID0gdmVydENvdW50XG5cbiAgICAvLyB0cnkgdG8gZ3Vlc3MgcHJpbWl0aXZlIHR5cGUgZnJvbSBjZWxsIGRpbWVuc2lvblxuICAgIHZhciBwcmltVHlwZSA9IHByaW1cbiAgICBpZiAocHJpbSA8IDApIHtcbiAgICAgIHByaW1UeXBlID0gR0xfVFJJQU5HTEVTXG4gICAgICB2YXIgZGltZW5zaW9uID0gZWxlbWVudHMuYnVmZmVyLmRpbWVuc2lvblxuICAgICAgaWYgKGRpbWVuc2lvbiA9PT0gMSkgcHJpbVR5cGUgPSBHTF9QT0lOVFNcbiAgICAgIGlmIChkaW1lbnNpb24gPT09IDIpIHByaW1UeXBlID0gR0xfTElORVNcbiAgICAgIGlmIChkaW1lbnNpb24gPT09IDMpIHByaW1UeXBlID0gR0xfVFJJQU5HTEVTXG4gICAgfVxuICAgIGVsZW1lbnRzLnByaW1UeXBlID0gcHJpbVR5cGVcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3lFbGVtZW50cyAoZWxlbWVudHMpIHtcbiAgICBzdGF0cy5lbGVtZW50c0NvdW50LS1cblxuICAgIGNoZWNrJDEoZWxlbWVudHMuYnVmZmVyICE9PSBudWxsLCAnbXVzdCBub3QgZG91YmxlIGRlc3Ryb3kgZWxlbWVudHMnKVxuICAgIGRlbGV0ZSBlbGVtZW50U2V0W2VsZW1lbnRzLmlkXVxuICAgIGVsZW1lbnRzLmJ1ZmZlci5kZXN0cm95KClcbiAgICBlbGVtZW50cy5idWZmZXIgPSBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50cyAob3B0aW9ucywgcGVyc2lzdGVudCkge1xuICAgIHZhciBidWZmZXIgPSBidWZmZXJTdGF0ZS5jcmVhdGUobnVsbCwgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRydWUpXG4gICAgdmFyIGVsZW1lbnRzID0gbmV3IFJFR0xFbGVtZW50QnVmZmVyKGJ1ZmZlci5fYnVmZmVyKVxuICAgIHN0YXRzLmVsZW1lbnRzQ291bnQrK1xuXG4gICAgZnVuY3Rpb24gcmVnbEVsZW1lbnRzIChvcHRpb25zKSB7XG4gICAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgYnVmZmVyKClcbiAgICAgICAgZWxlbWVudHMucHJpbVR5cGUgPSBHTF9UUklBTkdMRVNcbiAgICAgICAgZWxlbWVudHMudmVydENvdW50ID0gMFxuICAgICAgICBlbGVtZW50cy50eXBlID0gR0xfVU5TSUdORURfQllURSQ0XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykge1xuICAgICAgICBidWZmZXIob3B0aW9ucylcbiAgICAgICAgZWxlbWVudHMucHJpbVR5cGUgPSBHTF9UUklBTkdMRVNcbiAgICAgICAgZWxlbWVudHMudmVydENvdW50ID0gb3B0aW9ucyB8IDBcbiAgICAgICAgZWxlbWVudHMudHlwZSA9IEdMX1VOU0lHTkVEX0JZVEUkNFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGRhdGEgPSBudWxsXG4gICAgICAgIHZhciB1c2FnZSA9IEdMX1NUQVRJQ19EUkFXJDFcbiAgICAgICAgdmFyIHByaW1UeXBlID0gLTFcbiAgICAgICAgdmFyIHZlcnRDb3VudCA9IC0xXG4gICAgICAgIHZhciBieXRlTGVuZ3RoID0gMFxuICAgICAgICB2YXIgZHR5cGUgPSAwXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpIHx8XG4gICAgICAgICAgICBpc1R5cGVkQXJyYXkob3B0aW9ucykgfHxcbiAgICAgICAgICAgIGlzTkRBcnJheUxpa2Uob3B0aW9ucykpIHtcbiAgICAgICAgICBkYXRhID0gb3B0aW9uc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoZWNrJDEudHlwZShvcHRpb25zLCAnb2JqZWN0JywgJ2ludmFsaWQgYXJndW1lbnRzIGZvciBlbGVtZW50cycpXG4gICAgICAgICAgaWYgKCdkYXRhJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBkYXRhID0gb3B0aW9ucy5kYXRhXG4gICAgICAgICAgICBjaGVjayQxKFxuICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGRhdGEpIHx8XG4gICAgICAgICAgICAgICAgaXNUeXBlZEFycmF5KGRhdGEpIHx8XG4gICAgICAgICAgICAgICAgaXNOREFycmF5TGlrZShkYXRhKSxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgZGF0YSBmb3IgZWxlbWVudCBidWZmZXInKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ3VzYWdlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjaGVjayQxLnBhcmFtZXRlcihcbiAgICAgICAgICAgICAgb3B0aW9ucy51c2FnZSxcbiAgICAgICAgICAgICAgdXNhZ2VUeXBlcyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgZWxlbWVudCBidWZmZXIgdXNhZ2UnKVxuICAgICAgICAgICAgdXNhZ2UgPSB1c2FnZVR5cGVzW29wdGlvbnMudXNhZ2VdXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgncHJpbWl0aXZlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjaGVjayQxLnBhcmFtZXRlcihcbiAgICAgICAgICAgICAgb3B0aW9ucy5wcmltaXRpdmUsXG4gICAgICAgICAgICAgIHByaW1UeXBlcyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgZWxlbWVudCBidWZmZXIgcHJpbWl0aXZlJylcbiAgICAgICAgICAgIHByaW1UeXBlID0gcHJpbVR5cGVzW29wdGlvbnMucHJpbWl0aXZlXVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ2NvdW50JyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjaGVjayQxKFxuICAgICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5jb3VudCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5jb3VudCA+PSAwLFxuICAgICAgICAgICAgICAnaW52YWxpZCB2ZXJ0ZXggY291bnQgZm9yIGVsZW1lbnRzJylcbiAgICAgICAgICAgIHZlcnRDb3VudCA9IG9wdGlvbnMuY291bnQgfCAwXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgndHlwZScgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIoXG4gICAgICAgICAgICAgIG9wdGlvbnMudHlwZSxcbiAgICAgICAgICAgICAgZWxlbWVudFR5cGVzLFxuICAgICAgICAgICAgICAnaW52YWxpZCBidWZmZXIgdHlwZScpXG4gICAgICAgICAgICBkdHlwZSA9IGVsZW1lbnRUeXBlc1tvcHRpb25zLnR5cGVdXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgnbGVuZ3RoJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gb3B0aW9ucy5sZW5ndGggfCAwXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSB2ZXJ0Q291bnRcbiAgICAgICAgICAgIGlmIChkdHlwZSA9PT0gR0xfVU5TSUdORURfU0hPUlQkMiB8fCBkdHlwZSA9PT0gR0xfU0hPUlQkMikge1xuICAgICAgICAgICAgICBieXRlTGVuZ3RoICo9IDJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZHR5cGUgPT09IEdMX1VOU0lHTkVEX0lOVCQyIHx8IGR0eXBlID09PSBHTF9JTlQkMikge1xuICAgICAgICAgICAgICBieXRlTGVuZ3RoICo9IDRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5pdEVsZW1lbnRzKFxuICAgICAgICAgIGVsZW1lbnRzLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdXNhZ2UsXG4gICAgICAgICAgcHJpbVR5cGUsXG4gICAgICAgICAgdmVydENvdW50LFxuICAgICAgICAgIGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZHR5cGUpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWdsRWxlbWVudHNcbiAgICB9XG5cbiAgICByZWdsRWxlbWVudHMob3B0aW9ucylcblxuICAgIHJlZ2xFbGVtZW50cy5fcmVnbFR5cGUgPSAnZWxlbWVudHMnXG4gICAgcmVnbEVsZW1lbnRzLl9lbGVtZW50cyA9IGVsZW1lbnRzXG4gICAgcmVnbEVsZW1lbnRzLnN1YmRhdGEgPSBmdW5jdGlvbiAoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICBidWZmZXIuc3ViZGF0YShkYXRhLCBvZmZzZXQpXG4gICAgICByZXR1cm4gcmVnbEVsZW1lbnRzXG4gICAgfVxuICAgIHJlZ2xFbGVtZW50cy5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGVzdHJveUVsZW1lbnRzKGVsZW1lbnRzKVxuICAgIH1cblxuICAgIHJldHVybiByZWdsRWxlbWVudHNcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBjcmVhdGVFbGVtZW50cyxcbiAgICBjcmVhdGVTdHJlYW06IGNyZWF0ZUVsZW1lbnRTdHJlYW0sXG4gICAgZGVzdHJveVN0cmVhbTogZGVzdHJveUVsZW1lbnRTdHJlYW0sXG4gICAgZ2V0RWxlbWVudHM6IGZ1bmN0aW9uIChlbGVtZW50cykge1xuICAgICAgaWYgKHR5cGVvZiBlbGVtZW50cyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgIGVsZW1lbnRzLl9lbGVtZW50cyBpbnN0YW5jZW9mIFJFR0xFbGVtZW50QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50cy5fZWxlbWVudHNcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFsdWVzKGVsZW1lbnRTZXQpLmZvckVhY2goZGVzdHJveUVsZW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG52YXIgRkxPQVQgPSBuZXcgRmxvYXQzMkFycmF5KDEpXG52YXIgSU5UID0gbmV3IFVpbnQzMkFycmF5KEZMT0FULmJ1ZmZlcilcblxudmFyIEdMX1VOU0lHTkVEX1NIT1JUJDQgPSA1MTIzXG5cbmZ1bmN0aW9uIGNvbnZlcnRUb0hhbGZGbG9hdCAoYXJyYXkpIHtcbiAgdmFyIHVzaG9ydHMgPSBwb29sLmFsbG9jVHlwZShHTF9VTlNJR05FRF9TSE9SVCQ0LCBhcnJheS5sZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChpc05hTihhcnJheVtpXSkpIHtcbiAgICAgIHVzaG9ydHNbaV0gPSAweGZmZmZcbiAgICB9IGVsc2UgaWYgKGFycmF5W2ldID09PSBJbmZpbml0eSkge1xuICAgICAgdXNob3J0c1tpXSA9IDB4N2MwMFxuICAgIH0gZWxzZSBpZiAoYXJyYXlbaV0gPT09IC1JbmZpbml0eSkge1xuICAgICAgdXNob3J0c1tpXSA9IDB4ZmMwMFxuICAgIH0gZWxzZSB7XG4gICAgICBGTE9BVFswXSA9IGFycmF5W2ldXG4gICAgICB2YXIgeCA9IElOVFswXVxuXG4gICAgICB2YXIgc2duID0gKHggPj4+IDMxKSA8PCAxNVxuICAgICAgdmFyIGV4cCA9ICgoeCA8PCAxKSA+Pj4gMjQpIC0gMTI3XG4gICAgICB2YXIgZnJhYyA9ICh4ID4+IDEzKSAmICgoMSA8PCAxMCkgLSAxKVxuXG4gICAgICBpZiAoZXhwIDwgLTI0KSB7XG4gICAgICAgIC8vIHJvdW5kIG5vbi1yZXByZXNlbnRhYmxlIGRlbm9ybWFscyB0byAwXG4gICAgICAgIHVzaG9ydHNbaV0gPSBzZ25cbiAgICAgIH0gZWxzZSBpZiAoZXhwIDwgLTE0KSB7XG4gICAgICAgIC8vIGhhbmRsZSBkZW5vcm1hbHNcbiAgICAgICAgdmFyIHMgPSAtMTQgLSBleHBcbiAgICAgICAgdXNob3J0c1tpXSA9IHNnbiArICgoZnJhYyArICgxIDw8IDEwKSkgPj4gcylcbiAgICAgIH0gZWxzZSBpZiAoZXhwID4gMTUpIHtcbiAgICAgICAgLy8gcm91bmQgb3ZlcmZsb3cgdG8gKy8tIEluZmluaXR5XG4gICAgICAgIHVzaG9ydHNbaV0gPSBzZ24gKyAweDdjMDBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBjb252ZXJ0IGRpcmVjdGx5XG4gICAgICAgIHVzaG9ydHNbaV0gPSBzZ24gKyAoKGV4cCArIDE1KSA8PCAxMCkgKyBmcmFjXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVzaG9ydHNcbn1cblxuZnVuY3Rpb24gaXNBcnJheUxpa2UgKHMpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocykgfHwgaXNUeXBlZEFycmF5KHMpXG59XG5cbnZhciBpc1BvdzIkMSA9IGZ1bmN0aW9uICh2KSB7XG4gIHJldHVybiAhKHYgJiAodiAtIDEpKSAmJiAoISF2KVxufVxuXG52YXIgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgPSAweDg2QTNcblxudmFyIEdMX1RFWFRVUkVfMkQkMSA9IDB4MERFMVxudmFyIEdMX1RFWFRVUkVfQ1VCRV9NQVAkMSA9IDB4ODUxM1xudmFyIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQxID0gMHg4NTE1XG5cbnZhciBHTF9SR0JBJDEgPSAweDE5MDhcbnZhciBHTF9BTFBIQSA9IDB4MTkwNlxudmFyIEdMX1JHQiA9IDB4MTkwN1xudmFyIEdMX0xVTUlOQU5DRSA9IDB4MTkwOVxudmFyIEdMX0xVTUlOQU5DRV9BTFBIQSA9IDB4MTkwQVxuXG52YXIgR0xfUkdCQTQgPSAweDgwNTZcbnZhciBHTF9SR0I1X0ExID0gMHg4MDU3XG52YXIgR0xfUkdCNTY1ID0gMHg4RDYyXG5cbnZhciBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80JDEgPSAweDgwMzNcbnZhciBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xJDEgPSAweDgwMzRcbnZhciBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSQxID0gMHg4MzYzXG52YXIgR0xfVU5TSUdORURfSU5UXzI0XzhfV0VCR0wkMSA9IDB4ODRGQVxuXG52YXIgR0xfREVQVEhfQ09NUE9ORU5UID0gMHgxOTAyXG52YXIgR0xfREVQVEhfU1RFTkNJTCA9IDB4ODRGOVxuXG52YXIgR0xfU1JHQl9FWFQgPSAweDhDNDBcbnZhciBHTF9TUkdCX0FMUEhBX0VYVCA9IDB4OEM0MlxuXG52YXIgR0xfSEFMRl9GTE9BVF9PRVMkMSA9IDB4OEQ2MVxuXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCA9IDB4ODNGMFxudmFyIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUID0gMHg4M0YxXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQgPSAweDgzRjJcbnZhciBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCA9IDB4ODNGM1xuXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JfQVRDX1dFQkdMID0gMHg4QzkyXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JBX0FUQ19FWFBMSUNJVF9BTFBIQV9XRUJHTCA9IDB4OEM5M1xudmFyIEdMX0NPTVBSRVNTRURfUkdCQV9BVENfSU5URVJQT0xBVEVEX0FMUEhBX1dFQkdMID0gMHg4N0VFXG5cbnZhciBHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HID0gMHg4QzAwXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyA9IDB4OEMwMVxudmFyIEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HID0gMHg4QzAyXG52YXIgR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUcgPSAweDhDMDNcblxudmFyIEdMX0NPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0wgPSAweDhENjRcblxudmFyIEdMX1VOU0lHTkVEX0JZVEUkNSA9IDB4MTQwMVxudmFyIEdMX1VOU0lHTkVEX1NIT1JUJDMgPSAweDE0MDNcbnZhciBHTF9VTlNJR05FRF9JTlQkMyA9IDB4MTQwNVxudmFyIEdMX0ZMT0FUJDQgPSAweDE0MDZcblxudmFyIEdMX1RFWFRVUkVfV1JBUF9TID0gMHgyODAyXG52YXIgR0xfVEVYVFVSRV9XUkFQX1QgPSAweDI4MDNcblxudmFyIEdMX1JFUEVBVCA9IDB4MjkwMVxudmFyIEdMX0NMQU1QX1RPX0VER0UkMSA9IDB4ODEyRlxudmFyIEdMX01JUlJPUkVEX1JFUEVBVCA9IDB4ODM3MFxuXG52YXIgR0xfVEVYVFVSRV9NQUdfRklMVEVSID0gMHgyODAwXG52YXIgR0xfVEVYVFVSRV9NSU5fRklMVEVSID0gMHgyODAxXG5cbnZhciBHTF9ORUFSRVNUJDEgPSAweDI2MDBcbnZhciBHTF9MSU5FQVIgPSAweDI2MDFcbnZhciBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUJDEgPSAweDI3MDBcbnZhciBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QkMSA9IDB4MjcwMVxudmFyIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiQxID0gMHgyNzAyXG52YXIgR0xfTElORUFSX01JUE1BUF9MSU5FQVIkMSA9IDB4MjcwM1xuXG52YXIgR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQgPSAweDgxOTJcbnZhciBHTF9ET05UX0NBUkUgPSAweDExMDBcbnZhciBHTF9GQVNURVNUID0gMHgxMTAxXG52YXIgR0xfTklDRVNUID0gMHgxMTAyXG5cbnZhciBHTF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCA9IDB4ODRGRVxuXG52YXIgR0xfVU5QQUNLX0FMSUdOTUVOVCA9IDB4MENGNVxudmFyIEdMX1VOUEFDS19GTElQX1lfV0VCR0wgPSAweDkyNDBcbnZhciBHTF9VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgPSAweDkyNDFcbnZhciBHTF9VTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMID0gMHg5MjQzXG5cbnZhciBHTF9CUk9XU0VSX0RFRkFVTFRfV0VCR0wgPSAweDkyNDRcblxudmFyIEdMX1RFWFRVUkUwJDEgPSAweDg0QzBcblxudmFyIE1JUE1BUF9GSUxURVJTID0gW1xuICBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUJDEsXG4gIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiQxLFxuICBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QkMSxcbiAgR0xfTElORUFSX01JUE1BUF9MSU5FQVIkMVxuXVxuXG52YXIgQ0hBTk5FTFNfRk9STUFUID0gW1xuICAwLFxuICBHTF9MVU1JTkFOQ0UsXG4gIEdMX0xVTUlOQU5DRV9BTFBIQSxcbiAgR0xfUkdCLFxuICBHTF9SR0JBJDFcbl1cblxudmFyIEZPUk1BVF9DSEFOTkVMUyA9IHt9XG5GT1JNQVRfQ0hBTk5FTFNbR0xfTFVNSU5BTkNFXSA9XG5GT1JNQVRfQ0hBTk5FTFNbR0xfQUxQSEFdID1cbkZPUk1BVF9DSEFOTkVMU1tHTF9ERVBUSF9DT01QT05FTlRdID0gMVxuRk9STUFUX0NIQU5ORUxTW0dMX0RFUFRIX1NURU5DSUxdID1cbkZPUk1BVF9DSEFOTkVMU1tHTF9MVU1JTkFOQ0VfQUxQSEFdID0gMlxuRk9STUFUX0NIQU5ORUxTW0dMX1JHQl0gPVxuRk9STUFUX0NIQU5ORUxTW0dMX1NSR0JfRVhUXSA9IDNcbkZPUk1BVF9DSEFOTkVMU1tHTF9SR0JBJDFdID1cbkZPUk1BVF9DSEFOTkVMU1tHTF9TUkdCX0FMUEhBX0VYVF0gPSA0XG5cbmZ1bmN0aW9uIG9iamVjdE5hbWUgKHN0cikge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIHN0ciArICddJ1xufVxuXG52YXIgQ0FOVkFTX0NMQVNTID0gb2JqZWN0TmFtZSgnSFRNTENhbnZhc0VsZW1lbnQnKVxudmFyIE9GRlNDUkVFTkNBTlZBU19DTEFTUyA9IG9iamVjdE5hbWUoJ09mZnNjcmVlbkNhbnZhcycpXG52YXIgQ09OVEVYVDJEX0NMQVNTID0gb2JqZWN0TmFtZSgnQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJylcbnZhciBCSVRNQVBfQ0xBU1MgPSBvYmplY3ROYW1lKCdJbWFnZUJpdG1hcCcpXG52YXIgSU1BR0VfQ0xBU1MgPSBvYmplY3ROYW1lKCdIVE1MSW1hZ2VFbGVtZW50JylcbnZhciBWSURFT19DTEFTUyA9IG9iamVjdE5hbWUoJ0hUTUxWaWRlb0VsZW1lbnQnKVxuXG52YXIgUElYRUxfQ0xBU1NFUyA9IE9iamVjdC5rZXlzKGFycmF5VHlwZXMpLmNvbmNhdChbXG4gIENBTlZBU19DTEFTUyxcbiAgT0ZGU0NSRUVOQ0FOVkFTX0NMQVNTLFxuICBDT05URVhUMkRfQ0xBU1MsXG4gIEJJVE1BUF9DTEFTUyxcbiAgSU1BR0VfQ0xBU1MsXG4gIFZJREVPX0NMQVNTXG5dKVxuXG4vLyBmb3IgZXZlcnkgdGV4dHVyZSB0eXBlLCBzdG9yZVxuLy8gdGhlIHNpemUgaW4gYnl0ZXMuXG52YXIgVFlQRV9TSVpFUyA9IFtdXG5UWVBFX1NJWkVTW0dMX1VOU0lHTkVEX0JZVEUkNV0gPSAxXG5UWVBFX1NJWkVTW0dMX0ZMT0FUJDRdID0gNFxuVFlQRV9TSVpFU1tHTF9IQUxGX0ZMT0FUX09FUyQxXSA9IDJcblxuVFlQRV9TSVpFU1tHTF9VTlNJR05FRF9TSE9SVCQzXSA9IDJcblRZUEVfU0laRVNbR0xfVU5TSUdORURfSU5UJDNdID0gNFxuXG52YXIgRk9STUFUX1NJWkVTX1NQRUNJQUwgPSBbXVxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfUkdCQTRdID0gMlxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfUkdCNV9BMV0gPSAyXG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9SR0I1NjVdID0gMlxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfREVQVEhfU1RFTkNJTF0gPSA0XG5cbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFRdID0gMC41XG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVF0gPSAwLjVcbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUXSA9IDFcbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUXSA9IDFcblxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfQ09NUFJFU1NFRF9SR0JfQVRDX1dFQkdMXSA9IDAuNVxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfQ09NUFJFU1NFRF9SR0JBX0FUQ19FWFBMSUNJVF9BTFBIQV9XRUJHTF0gPSAxXG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQkFfQVRDX0lOVEVSUE9MQVRFRF9BTFBIQV9XRUJHTF0gPSAxXG5cbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUddID0gMC41XG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HXSA9IDAuMjVcbkZPUk1BVF9TSVpFU19TUEVDSUFMW0dMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HXSA9IDAuNVxuRk9STUFUX1NJWkVTX1NQRUNJQUxbR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUddID0gMC4yNVxuXG5GT1JNQVRfU0laRVNfU1BFQ0lBTFtHTF9DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMXSA9IDAuNVxuXG5mdW5jdGlvbiBpc051bWVyaWNBcnJheSAoYXJyKSB7XG4gIHJldHVybiAoXG4gICAgQXJyYXkuaXNBcnJheShhcnIpICYmXG4gICAgKGFyci5sZW5ndGggPT09IDAgfHxcbiAgICB0eXBlb2YgYXJyWzBdID09PSAnbnVtYmVyJykpXG59XG5cbmZ1bmN0aW9uIGlzUmVjdEFycmF5IChhcnIpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICB2YXIgd2lkdGggPSBhcnIubGVuZ3RoXG4gIGlmICh3aWR0aCA9PT0gMCB8fCAhaXNBcnJheUxpa2UoYXJyWzBdKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGNsYXNzU3RyaW5nICh4KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeClcbn1cblxuZnVuY3Rpb24gaXNDYW52YXNFbGVtZW50IChvYmplY3QpIHtcbiAgcmV0dXJuIGNsYXNzU3RyaW5nKG9iamVjdCkgPT09IENBTlZBU19DTEFTU1xufVxuXG5mdW5jdGlvbiBpc09mZnNjcmVlbkNhbnZhcyAob2JqZWN0KSB7XG4gIHJldHVybiBjbGFzc1N0cmluZyhvYmplY3QpID09PSBPRkZTQ1JFRU5DQU5WQVNfQ0xBU1Ncbn1cblxuZnVuY3Rpb24gaXNDb250ZXh0MkQgKG9iamVjdCkge1xuICByZXR1cm4gY2xhc3NTdHJpbmcob2JqZWN0KSA9PT0gQ09OVEVYVDJEX0NMQVNTXG59XG5cbmZ1bmN0aW9uIGlzQml0bWFwIChvYmplY3QpIHtcbiAgcmV0dXJuIGNsYXNzU3RyaW5nKG9iamVjdCkgPT09IEJJVE1BUF9DTEFTU1xufVxuXG5mdW5jdGlvbiBpc0ltYWdlRWxlbWVudCAob2JqZWN0KSB7XG4gIHJldHVybiBjbGFzc1N0cmluZyhvYmplY3QpID09PSBJTUFHRV9DTEFTU1xufVxuXG5mdW5jdGlvbiBpc1ZpZGVvRWxlbWVudCAob2JqZWN0KSB7XG4gIHJldHVybiBjbGFzc1N0cmluZyhvYmplY3QpID09PSBWSURFT19DTEFTU1xufVxuXG5mdW5jdGlvbiBpc1BpeGVsRGF0YSAob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgdmFyIGNsYXNzTmFtZSA9IGNsYXNzU3RyaW5nKG9iamVjdClcbiAgaWYgKFBJWEVMX0NMQVNTRVMuaW5kZXhPZihjbGFzc05hbWUpID49IDApIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiAoXG4gICAgaXNOdW1lcmljQXJyYXkob2JqZWN0KSB8fFxuICAgIGlzUmVjdEFycmF5KG9iamVjdCkgfHxcbiAgICBpc05EQXJyYXlMaWtlKG9iamVjdCkpXG59XG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlDb2RlJDEgKGRhdGEpIHtcbiAgcmV0dXJuIGFycmF5VHlwZXNbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpXSB8IDBcbn1cblxuZnVuY3Rpb24gY29udmVydERhdGEgKHJlc3VsdCwgZGF0YSkge1xuICB2YXIgbiA9IGRhdGEubGVuZ3RoXG4gIHN3aXRjaCAocmVzdWx0LnR5cGUpIHtcbiAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEUkNTpcbiAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUJDM6XG4gICAgY2FzZSBHTF9VTlNJR05FRF9JTlQkMzpcbiAgICBjYXNlIEdMX0ZMT0FUJDQ6XG4gICAgICB2YXIgY29udmVydGVkID0gcG9vbC5hbGxvY1R5cGUocmVzdWx0LnR5cGUsIG4pXG4gICAgICBjb252ZXJ0ZWQuc2V0KGRhdGEpXG4gICAgICByZXN1bHQuZGF0YSA9IGNvbnZlcnRlZFxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVMkMTpcbiAgICAgIHJlc3VsdC5kYXRhID0gY29udmVydFRvSGFsZkZsb2F0KGRhdGEpXG4gICAgICBicmVha1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGNoZWNrJDEucmFpc2UoJ3Vuc3VwcG9ydGVkIHRleHR1cmUgdHlwZSwgbXVzdCBzcGVjaWZ5IGEgdHlwZWQgYXJyYXknKVxuICB9XG59XG5cbmZ1bmN0aW9uIHByZUNvbnZlcnQgKGltYWdlLCBuKSB7XG4gIHJldHVybiBwb29sLmFsbG9jVHlwZShcbiAgICBpbWFnZS50eXBlID09PSBHTF9IQUxGX0ZMT0FUX09FUyQxXG4gICAgICA/IEdMX0ZMT0FUJDRcbiAgICAgIDogaW1hZ2UudHlwZSwgbilcbn1cblxuZnVuY3Rpb24gcG9zdENvbnZlcnQgKGltYWdlLCBkYXRhKSB7XG4gIGlmIChpbWFnZS50eXBlID09PSBHTF9IQUxGX0ZMT0FUX09FUyQxKSB7XG4gICAgaW1hZ2UuZGF0YSA9IGNvbnZlcnRUb0hhbGZGbG9hdChkYXRhKVxuICAgIHBvb2wuZnJlZVR5cGUoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICBpbWFnZS5kYXRhID0gZGF0YVxuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zcG9zZURhdGEgKGltYWdlLCBhcnJheSwgc3RyaWRlWCwgc3RyaWRlWSwgc3RyaWRlQywgb2Zmc2V0KSB7XG4gIHZhciB3ID0gaW1hZ2Uud2lkdGhcbiAgdmFyIGggPSBpbWFnZS5oZWlnaHRcbiAgdmFyIGMgPSBpbWFnZS5jaGFubmVsc1xuICB2YXIgbiA9IHcgKiBoICogY1xuICB2YXIgZGF0YSA9IHByZUNvbnZlcnQoaW1hZ2UsIG4pXG5cbiAgdmFyIHAgPSAwXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaDsgKytpKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCB3OyArK2opIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYzsgKytrKSB7XG4gICAgICAgIGRhdGFbcCsrXSA9IGFycmF5W3N0cmlkZVggKiBqICsgc3RyaWRlWSAqIGkgKyBzdHJpZGVDICogayArIG9mZnNldF1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwb3N0Q29udmVydChpbWFnZSwgZGF0YSlcbn1cblxuZnVuY3Rpb24gZ2V0VGV4dHVyZVNpemUgKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgaXNNaXBtYXAsIGlzQ3ViZSkge1xuICB2YXIgc1xuICBpZiAodHlwZW9mIEZPUk1BVF9TSVpFU19TUEVDSUFMW2Zvcm1hdF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gd2UgaGF2ZSBhIHNwZWNpYWwgYXJyYXkgZm9yIGRlYWxpbmcgd2l0aCB3ZWlyZCBjb2xvciBmb3JtYXRzIHN1Y2ggYXMgUkdCNUExXG4gICAgcyA9IEZPUk1BVF9TSVpFU19TUEVDSUFMW2Zvcm1hdF1cbiAgfSBlbHNlIHtcbiAgICBzID0gRk9STUFUX0NIQU5ORUxTW2Zvcm1hdF0gKiBUWVBFX1NJWkVTW3R5cGVdXG4gIH1cblxuICBpZiAoaXNDdWJlKSB7XG4gICAgcyAqPSA2XG4gIH1cblxuICBpZiAoaXNNaXBtYXApIHtcbiAgICAvLyBjb21wdXRlIHRoZSB0b3RhbCBzaXplIG9mIGFsbCB0aGUgbWlwbWFwcy5cbiAgICB2YXIgdG90YWwgPSAwXG5cbiAgICB2YXIgdyA9IHdpZHRoXG4gICAgd2hpbGUgKHcgPj0gMSkge1xuICAgICAgLy8gd2UgY2FuIG9ubHkgdXNlIG1pcG1hcHMgb24gYSBzcXVhcmUgaW1hZ2UsXG4gICAgICAvLyBzbyB3ZSBjYW4gc2ltcGx5IHVzZSB0aGUgd2lkdGggYW5kIGlnbm9yZSB0aGUgaGVpZ2h0OlxuICAgICAgdG90YWwgKz0gcyAqIHcgKiB3XG4gICAgICB3IC89IDJcbiAgICB9XG4gICAgcmV0dXJuIHRvdGFsXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHMgKiB3aWR0aCAqIGhlaWdodFxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRleHR1cmVTZXQgKFxuICBnbCwgZXh0ZW5zaW9ucywgbGltaXRzLCByZWdsUG9sbCwgY29udGV4dFN0YXRlLCBzdGF0cywgY29uZmlnKSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSW5pdGlhbGl6ZSBjb25zdGFudHMgYW5kIHBhcmFtZXRlciB0YWJsZXMgaGVyZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHZhciBtaXBtYXBIaW50ID0ge1xuICAgIFwiZG9uJ3QgY2FyZVwiOiBHTF9ET05UX0NBUkUsXG4gICAgJ2RvbnQgY2FyZSc6IEdMX0RPTlRfQ0FSRSxcbiAgICAnbmljZSc6IEdMX05JQ0VTVCxcbiAgICAnZmFzdCc6IEdMX0ZBU1RFU1RcbiAgfVxuXG4gIHZhciB3cmFwTW9kZXMgPSB7XG4gICAgJ3JlcGVhdCc6IEdMX1JFUEVBVCxcbiAgICAnY2xhbXAnOiBHTF9DTEFNUF9UT19FREdFJDEsXG4gICAgJ21pcnJvcic6IEdMX01JUlJPUkVEX1JFUEVBVFxuICB9XG5cbiAgdmFyIG1hZ0ZpbHRlcnMgPSB7XG4gICAgJ25lYXJlc3QnOiBHTF9ORUFSRVNUJDEsXG4gICAgJ2xpbmVhcic6IEdMX0xJTkVBUlxuICB9XG5cbiAgdmFyIG1pbkZpbHRlcnMgPSBleHRlbmQoe1xuICAgICdtaXBtYXAnOiBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiQxLFxuICAgICduZWFyZXN0IG1pcG1hcCBuZWFyZXN0JzogR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCQxLFxuICAgICdsaW5lYXIgbWlwbWFwIG5lYXJlc3QnOiBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1QkMSxcbiAgICAnbmVhcmVzdCBtaXBtYXAgbGluZWFyJzogR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSJDEsXG4gICAgJ2xpbmVhciBtaXBtYXAgbGluZWFyJzogR0xfTElORUFSX01JUE1BUF9MSU5FQVIkMVxuICB9LCBtYWdGaWx0ZXJzKVxuXG4gIHZhciBjb2xvclNwYWNlID0ge1xuICAgICdub25lJzogMCxcbiAgICAnYnJvd3Nlcic6IEdMX0JST1dTRVJfREVGQVVMVF9XRUJHTFxuICB9XG5cbiAgdmFyIHRleHR1cmVUeXBlcyA9IHtcbiAgICAndWludDgnOiBHTF9VTlNJR05FRF9CWVRFJDUsXG4gICAgJ3JnYmE0JzogR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCQxLFxuICAgICdyZ2I1NjUnOiBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSQxLFxuICAgICdyZ2I1IGExJzogR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSQxXG4gIH1cblxuICB2YXIgdGV4dHVyZUZvcm1hdHMgPSB7XG4gICAgJ2FscGhhJzogR0xfQUxQSEEsXG4gICAgJ2x1bWluYW5jZSc6IEdMX0xVTUlOQU5DRSxcbiAgICAnbHVtaW5hbmNlIGFscGhhJzogR0xfTFVNSU5BTkNFX0FMUEhBLFxuICAgICdyZ2InOiBHTF9SR0IsXG4gICAgJ3JnYmEnOiBHTF9SR0JBJDEsXG4gICAgJ3JnYmE0JzogR0xfUkdCQTQsXG4gICAgJ3JnYjUgYTEnOiBHTF9SR0I1X0ExLFxuICAgICdyZ2I1NjUnOiBHTF9SR0I1NjVcbiAgfVxuXG4gIHZhciBjb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMgPSB7fVxuXG4gIGlmIChleHRlbnNpb25zLmV4dF9zcmdiKSB7XG4gICAgdGV4dHVyZUZvcm1hdHMuc3JnYiA9IEdMX1NSR0JfRVhUXG4gICAgdGV4dHVyZUZvcm1hdHMuc3JnYmEgPSBHTF9TUkdCX0FMUEhBX0VYVFxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMub2VzX3RleHR1cmVfZmxvYXQpIHtcbiAgICB0ZXh0dXJlVHlwZXMuZmxvYXQzMiA9IHRleHR1cmVUeXBlcy5mbG9hdCA9IEdMX0ZMT0FUJDRcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQpIHtcbiAgICB0ZXh0dXJlVHlwZXNbJ2Zsb2F0MTYnXSA9IHRleHR1cmVUeXBlc1snaGFsZiBmbG9hdCddID0gR0xfSEFMRl9GTE9BVF9PRVMkMVxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMud2ViZ2xfZGVwdGhfdGV4dHVyZSkge1xuICAgIGV4dGVuZCh0ZXh0dXJlRm9ybWF0cywge1xuICAgICAgJ2RlcHRoJzogR0xfREVQVEhfQ09NUE9ORU5ULFxuICAgICAgJ2RlcHRoIHN0ZW5jaWwnOiBHTF9ERVBUSF9TVEVOQ0lMXG4gICAgfSlcblxuICAgIGV4dGVuZCh0ZXh0dXJlVHlwZXMsIHtcbiAgICAgICd1aW50MTYnOiBHTF9VTlNJR05FRF9TSE9SVCQzLFxuICAgICAgJ3VpbnQzMic6IEdMX1VOU0lHTkVEX0lOVCQzLFxuICAgICAgJ2RlcHRoIHN0ZW5jaWwnOiBHTF9VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCQxXG4gICAgfSlcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjKSB7XG4gICAgZXh0ZW5kKGNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cywge1xuICAgICAgJ3JnYiBzM3RjIGR4dDEnOiBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULFxuICAgICAgJ3JnYmEgczN0YyBkeHQxJzogR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsXG4gICAgICAncmdiYSBzM3RjIGR4dDMnOiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVCxcbiAgICAgICdyZ2JhIHMzdGMgZHh0NSc6IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUXG4gICAgfSlcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMpIHtcbiAgICBleHRlbmQoY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLCB7XG4gICAgICAncmdiIGF0Yyc6IEdMX0NPTVBSRVNTRURfUkdCX0FUQ19XRUJHTCxcbiAgICAgICdyZ2JhIGF0YyBleHBsaWNpdCBhbHBoYSc6IEdMX0NPTVBSRVNTRURfUkdCQV9BVENfRVhQTElDSVRfQUxQSEFfV0VCR0wsXG4gICAgICAncmdiYSBhdGMgaW50ZXJwb2xhdGVkIGFscGhhJzogR0xfQ09NUFJFU1NFRF9SR0JBX0FUQ19JTlRFUlBPTEFURURfQUxQSEFfV0VCR0xcbiAgICB9KVxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjKSB7XG4gICAgZXh0ZW5kKGNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cywge1xuICAgICAgJ3JnYiBwdnJ0YyA0YnBwdjEnOiBHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HLFxuICAgICAgJ3JnYiBwdnJ0YyAyYnBwdjEnOiBHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HLFxuICAgICAgJ3JnYmEgcHZydGMgNGJwcHYxJzogR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUcsXG4gICAgICAncmdiYSBwdnJ0YyAyYnBwdjEnOiBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR1xuICAgIH0pXG4gIH1cblxuICBpZiAoZXh0ZW5zaW9ucy53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSkge1xuICAgIGNvbXByZXNzZWRUZXh0dXJlRm9ybWF0c1sncmdiIGV0YzEnXSA9IEdMX0NPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0xcbiAgfVxuXG4gIC8vIENvcHkgb3ZlciBhbGwgdGV4dHVyZSBmb3JtYXRzXG4gIHZhciBzdXBwb3J0ZWRDb21wcmVzc2VkRm9ybWF0cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFxuICAgIGdsLmdldFBhcmFtZXRlcihHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUykpXG4gIE9iamVjdC5rZXlzKGNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBmb3JtYXQgPSBjb21wcmVzc2VkVGV4dHVyZUZvcm1hdHNbbmFtZV1cbiAgICBpZiAoc3VwcG9ydGVkQ29tcHJlc3NlZEZvcm1hdHMuaW5kZXhPZihmb3JtYXQpID49IDApIHtcbiAgICAgIHRleHR1cmVGb3JtYXRzW25hbWVdID0gZm9ybWF0XG4gICAgfVxuICB9KVxuXG4gIHZhciBzdXBwb3J0ZWRGb3JtYXRzID0gT2JqZWN0LmtleXModGV4dHVyZUZvcm1hdHMpXG4gIGxpbWl0cy50ZXh0dXJlRm9ybWF0cyA9IHN1cHBvcnRlZEZvcm1hdHNcblxuICAvLyBhc3NvY2lhdGUgd2l0aCBldmVyeSBmb3JtYXQgc3RyaW5nIGl0c1xuICAvLyBjb3JyZXNwb25kaW5nIEdMLXZhbHVlLlxuICB2YXIgdGV4dHVyZUZvcm1hdHNJbnZlcnQgPSBbXVxuICBPYmplY3Qua2V5cyh0ZXh0dXJlRm9ybWF0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbCA9IHRleHR1cmVGb3JtYXRzW2tleV1cbiAgICB0ZXh0dXJlRm9ybWF0c0ludmVydFt2YWxdID0ga2V5XG4gIH0pXG5cbiAgLy8gYXNzb2NpYXRlIHdpdGggZXZlcnkgdHlwZSBzdHJpbmcgaXRzXG4gIC8vIGNvcnJlc3BvbmRpbmcgR0wtdmFsdWUuXG4gIHZhciB0ZXh0dXJlVHlwZXNJbnZlcnQgPSBbXVxuICBPYmplY3Qua2V5cyh0ZXh0dXJlVHlwZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciB2YWwgPSB0ZXh0dXJlVHlwZXNba2V5XVxuICAgIHRleHR1cmVUeXBlc0ludmVydFt2YWxdID0ga2V5XG4gIH0pXG5cbiAgdmFyIG1hZ0ZpbHRlcnNJbnZlcnQgPSBbXVxuICBPYmplY3Qua2V5cyhtYWdGaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsID0gbWFnRmlsdGVyc1trZXldXG4gICAgbWFnRmlsdGVyc0ludmVydFt2YWxdID0ga2V5XG4gIH0pXG5cbiAgdmFyIG1pbkZpbHRlcnNJbnZlcnQgPSBbXVxuICBPYmplY3Qua2V5cyhtaW5GaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsID0gbWluRmlsdGVyc1trZXldXG4gICAgbWluRmlsdGVyc0ludmVydFt2YWxdID0ga2V5XG4gIH0pXG5cbiAgdmFyIHdyYXBNb2Rlc0ludmVydCA9IFtdXG4gIE9iamVjdC5rZXlzKHdyYXBNb2RlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbCA9IHdyYXBNb2Rlc1trZXldXG4gICAgd3JhcE1vZGVzSW52ZXJ0W3ZhbF0gPSBrZXlcbiAgfSlcblxuICAvLyBjb2xvckZvcm1hdHNbXSBnaXZlcyB0aGUgZm9ybWF0IChjaGFubmVscykgYXNzb2NpYXRlZCB0byBhblxuICAvLyBpbnRlcm5hbGZvcm1hdFxuICB2YXIgY29sb3JGb3JtYXRzID0gc3VwcG9ydGVkRm9ybWF0cy5yZWR1Y2UoZnVuY3Rpb24gKGNvbG9yLCBrZXkpIHtcbiAgICB2YXIgZ2xlbnVtID0gdGV4dHVyZUZvcm1hdHNba2V5XVxuICAgIGlmIChnbGVudW0gPT09IEdMX0xVTUlOQU5DRSB8fFxuICAgICAgICBnbGVudW0gPT09IEdMX0FMUEhBIHx8XG4gICAgICAgIGdsZW51bSA9PT0gR0xfTFVNSU5BTkNFIHx8XG4gICAgICAgIGdsZW51bSA9PT0gR0xfTFVNSU5BTkNFX0FMUEhBIHx8XG4gICAgICAgIGdsZW51bSA9PT0gR0xfREVQVEhfQ09NUE9ORU5UIHx8XG4gICAgICAgIGdsZW51bSA9PT0gR0xfREVQVEhfU1RFTkNJTCB8fFxuICAgICAgICAoZXh0ZW5zaW9ucy5leHRfc3JnYiAmJlxuICAgICAgICAgICAgICAgIChnbGVudW0gPT09IEdMX1NSR0JfRVhUIHx8XG4gICAgICAgICAgICAgICAgIGdsZW51bSA9PT0gR0xfU1JHQl9BTFBIQV9FWFQpKSkge1xuICAgICAgY29sb3JbZ2xlbnVtXSA9IGdsZW51bVxuICAgIH0gZWxzZSBpZiAoZ2xlbnVtID09PSBHTF9SR0I1X0ExIHx8IGtleS5pbmRleE9mKCdyZ2JhJykgPj0gMCkge1xuICAgICAgY29sb3JbZ2xlbnVtXSA9IEdMX1JHQkEkMVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2xvcltnbGVudW1dID0gR0xfUkdCXG4gICAgfVxuICAgIHJldHVybiBjb2xvclxuICB9LCB7fSlcblxuICBmdW5jdGlvbiBUZXhGbGFncyAoKSB7XG4gICAgLy8gZm9ybWF0IGluZm9cbiAgICB0aGlzLmludGVybmFsZm9ybWF0ID0gR0xfUkdCQSQxXG4gICAgdGhpcy5mb3JtYXQgPSBHTF9SR0JBJDFcbiAgICB0aGlzLnR5cGUgPSBHTF9VTlNJR05FRF9CWVRFJDVcbiAgICB0aGlzLmNvbXByZXNzZWQgPSBmYWxzZVxuXG4gICAgLy8gcGl4ZWwgc3RvcmFnZVxuICAgIHRoaXMucHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlXG4gICAgdGhpcy5mbGlwWSA9IGZhbHNlXG4gICAgdGhpcy51bnBhY2tBbGlnbm1lbnQgPSAxXG4gICAgdGhpcy5jb2xvclNwYWNlID0gR0xfQlJPV1NFUl9ERUZBVUxUX1dFQkdMXG5cbiAgICAvLyBzaGFwZSBpbmZvXG4gICAgdGhpcy53aWR0aCA9IDBcbiAgICB0aGlzLmhlaWdodCA9IDBcbiAgICB0aGlzLmNoYW5uZWxzID0gMFxuICB9XG5cbiAgZnVuY3Rpb24gY29weUZsYWdzIChyZXN1bHQsIG90aGVyKSB7XG4gICAgcmVzdWx0LmludGVybmFsZm9ybWF0ID0gb3RoZXIuaW50ZXJuYWxmb3JtYXRcbiAgICByZXN1bHQuZm9ybWF0ID0gb3RoZXIuZm9ybWF0XG4gICAgcmVzdWx0LnR5cGUgPSBvdGhlci50eXBlXG4gICAgcmVzdWx0LmNvbXByZXNzZWQgPSBvdGhlci5jb21wcmVzc2VkXG5cbiAgICByZXN1bHQucHJlbXVsdGlwbHlBbHBoYSA9IG90aGVyLnByZW11bHRpcGx5QWxwaGFcbiAgICByZXN1bHQuZmxpcFkgPSBvdGhlci5mbGlwWVxuICAgIHJlc3VsdC51bnBhY2tBbGlnbm1lbnQgPSBvdGhlci51bnBhY2tBbGlnbm1lbnRcbiAgICByZXN1bHQuY29sb3JTcGFjZSA9IG90aGVyLmNvbG9yU3BhY2VcblxuICAgIHJlc3VsdC53aWR0aCA9IG90aGVyLndpZHRoXG4gICAgcmVzdWx0LmhlaWdodCA9IG90aGVyLmhlaWdodFxuICAgIHJlc3VsdC5jaGFubmVscyA9IG90aGVyLmNoYW5uZWxzXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUZsYWdzIChmbGFncywgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcgfHwgIW9wdGlvbnMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICgncHJlbXVsdGlwbHlBbHBoYScgaW4gb3B0aW9ucykge1xuICAgICAgY2hlY2skMS50eXBlKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSwgJ2Jvb2xlYW4nLFxuICAgICAgICAnaW52YWxpZCBwcmVtdWx0aXBseUFscGhhJylcbiAgICAgIGZsYWdzLnByZW11bHRpcGx5QWxwaGEgPSBvcHRpb25zLnByZW11bHRpcGx5QWxwaGFcbiAgICB9XG5cbiAgICBpZiAoJ2ZsaXBZJyBpbiBvcHRpb25zKSB7XG4gICAgICBjaGVjayQxLnR5cGUob3B0aW9ucy5mbGlwWSwgJ2Jvb2xlYW4nLFxuICAgICAgICAnaW52YWxpZCB0ZXh0dXJlIGZsaXAnKVxuICAgICAgZmxhZ3MuZmxpcFkgPSBvcHRpb25zLmZsaXBZXG4gICAgfVxuXG4gICAgaWYgKCdhbGlnbm1lbnQnIGluIG9wdGlvbnMpIHtcbiAgICAgIGNoZWNrJDEub25lT2Yob3B0aW9ucy5hbGlnbm1lbnQsIFsxLCAyLCA0LCA4XSxcbiAgICAgICAgJ2ludmFsaWQgdGV4dHVyZSB1bnBhY2sgYWxpZ25tZW50JylcbiAgICAgIGZsYWdzLnVucGFja0FsaWdubWVudCA9IG9wdGlvbnMuYWxpZ25tZW50XG4gICAgfVxuXG4gICAgaWYgKCdjb2xvclNwYWNlJyBpbiBvcHRpb25zKSB7XG4gICAgICBjaGVjayQxLnBhcmFtZXRlcihvcHRpb25zLmNvbG9yU3BhY2UsIGNvbG9yU3BhY2UsXG4gICAgICAgICdpbnZhbGlkIGNvbG9yU3BhY2UnKVxuICAgICAgZmxhZ3MuY29sb3JTcGFjZSA9IGNvbG9yU3BhY2Vbb3B0aW9ucy5jb2xvclNwYWNlXVxuICAgIH1cblxuICAgIGlmICgndHlwZScgaW4gb3B0aW9ucykge1xuICAgICAgdmFyIHR5cGUgPSBvcHRpb25zLnR5cGVcbiAgICAgIGNoZWNrJDEoZXh0ZW5zaW9ucy5vZXNfdGV4dHVyZV9mbG9hdCB8fFxuICAgICAgICAhKHR5cGUgPT09ICdmbG9hdCcgfHwgdHlwZSA9PT0gJ2Zsb2F0MzInKSxcbiAgICAgICd5b3UgbXVzdCBlbmFibGUgdGhlIE9FU190ZXh0dXJlX2Zsb2F0IGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMuJylcbiAgICAgIGNoZWNrJDEoZXh0ZW5zaW9ucy5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0IHx8XG4gICAgICAgICEodHlwZSA9PT0gJ2hhbGYgZmxvYXQnIHx8IHR5cGUgPT09ICdmbG9hdDE2JyksXG4gICAgICAneW91IG11c3QgZW5hYmxlIHRoZSBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgMTYtYml0IGZsb2F0aW5nIHBvaW50IHRleHR1cmVzLicpXG4gICAgICBjaGVjayQxKGV4dGVuc2lvbnMud2ViZ2xfZGVwdGhfdGV4dHVyZSB8fFxuICAgICAgICAhKHR5cGUgPT09ICd1aW50MTYnIHx8IHR5cGUgPT09ICd1aW50MzInIHx8IHR5cGUgPT09ICdkZXB0aCBzdGVuY2lsJyksXG4gICAgICAneW91IG11c3QgZW5hYmxlIHRoZSBXRUJHTF9kZXB0aF90ZXh0dXJlIGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZGVwdGgvc3RlbmNpbCB0ZXh0dXJlcy4nKVxuICAgICAgY2hlY2skMS5wYXJhbWV0ZXIodHlwZSwgdGV4dHVyZVR5cGVzLFxuICAgICAgICAnaW52YWxpZCB0ZXh0dXJlIHR5cGUnKVxuICAgICAgZmxhZ3MudHlwZSA9IHRleHR1cmVUeXBlc1t0eXBlXVxuICAgIH1cblxuICAgIHZhciB3ID0gZmxhZ3Mud2lkdGhcbiAgICB2YXIgaCA9IGZsYWdzLmhlaWdodFxuICAgIHZhciBjID0gZmxhZ3MuY2hhbm5lbHNcbiAgICB2YXIgaGFzQ2hhbm5lbHMgPSBmYWxzZVxuICAgIGlmICgnc2hhcGUnIGluIG9wdGlvbnMpIHtcbiAgICAgIGNoZWNrJDEoQXJyYXkuaXNBcnJheShvcHRpb25zLnNoYXBlKSAmJiBvcHRpb25zLnNoYXBlLmxlbmd0aCA+PSAyLFxuICAgICAgICAnc2hhcGUgbXVzdCBiZSBhbiBhcnJheScpXG4gICAgICB3ID0gb3B0aW9ucy5zaGFwZVswXVxuICAgICAgaCA9IG9wdGlvbnMuc2hhcGVbMV1cbiAgICAgIGlmIChvcHRpb25zLnNoYXBlLmxlbmd0aCA9PT0gMykge1xuICAgICAgICBjID0gb3B0aW9ucy5zaGFwZVsyXVxuICAgICAgICBjaGVjayQxKGMgPiAwICYmIGMgPD0gNCwgJ2ludmFsaWQgbnVtYmVyIG9mIGNoYW5uZWxzJylcbiAgICAgICAgaGFzQ2hhbm5lbHMgPSB0cnVlXG4gICAgICB9XG4gICAgICBjaGVjayQxKHcgPj0gMCAmJiB3IDw9IGxpbWl0cy5tYXhUZXh0dXJlU2l6ZSwgJ2ludmFsaWQgd2lkdGgnKVxuICAgICAgY2hlY2skMShoID49IDAgJiYgaCA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUsICdpbnZhbGlkIGhlaWdodCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgncmFkaXVzJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIHcgPSBoID0gb3B0aW9ucy5yYWRpdXNcbiAgICAgICAgY2hlY2skMSh3ID49IDAgJiYgdyA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUsICdpbnZhbGlkIHJhZGl1cycpXG4gICAgICB9XG4gICAgICBpZiAoJ3dpZHRoJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIHcgPSBvcHRpb25zLndpZHRoXG4gICAgICAgIGNoZWNrJDEodyA+PSAwICYmIHcgPD0gbGltaXRzLm1heFRleHR1cmVTaXplLCAnaW52YWxpZCB3aWR0aCcpXG4gICAgICB9XG4gICAgICBpZiAoJ2hlaWdodCcgaW4gb3B0aW9ucykge1xuICAgICAgICBoID0gb3B0aW9ucy5oZWlnaHRcbiAgICAgICAgY2hlY2skMShoID49IDAgJiYgaCA8PSBsaW1pdHMubWF4VGV4dHVyZVNpemUsICdpbnZhbGlkIGhlaWdodCcpXG4gICAgICB9XG4gICAgICBpZiAoJ2NoYW5uZWxzJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIGMgPSBvcHRpb25zLmNoYW5uZWxzXG4gICAgICAgIGNoZWNrJDEoYyA+IDAgJiYgYyA8PSA0LCAnaW52YWxpZCBudW1iZXIgb2YgY2hhbm5lbHMnKVxuICAgICAgICBoYXNDaGFubmVscyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgZmxhZ3Mud2lkdGggPSB3IHwgMFxuICAgIGZsYWdzLmhlaWdodCA9IGggfCAwXG4gICAgZmxhZ3MuY2hhbm5lbHMgPSBjIHwgMFxuXG4gICAgdmFyIGhhc0Zvcm1hdCA9IGZhbHNlXG4gICAgaWYgKCdmb3JtYXQnIGluIG9wdGlvbnMpIHtcbiAgICAgIHZhciBmb3JtYXRTdHIgPSBvcHRpb25zLmZvcm1hdFxuICAgICAgY2hlY2skMShleHRlbnNpb25zLndlYmdsX2RlcHRoX3RleHR1cmUgfHxcbiAgICAgICAgIShmb3JtYXRTdHIgPT09ICdkZXB0aCcgfHwgZm9ybWF0U3RyID09PSAnZGVwdGggc3RlbmNpbCcpLFxuICAgICAgJ3lvdSBtdXN0IGVuYWJsZSB0aGUgV0VCR0xfZGVwdGhfdGV4dHVyZSBleHRlbnNpb24gaW4gb3JkZXIgdG8gdXNlIGRlcHRoL3N0ZW5jaWwgdGV4dHVyZXMuJylcbiAgICAgIGNoZWNrJDEucGFyYW1ldGVyKGZvcm1hdFN0ciwgdGV4dHVyZUZvcm1hdHMsXG4gICAgICAgICdpbnZhbGlkIHRleHR1cmUgZm9ybWF0JylcbiAgICAgIHZhciBpbnRlcm5hbGZvcm1hdCA9IGZsYWdzLmludGVybmFsZm9ybWF0ID0gdGV4dHVyZUZvcm1hdHNbZm9ybWF0U3RyXVxuICAgICAgZmxhZ3MuZm9ybWF0ID0gY29sb3JGb3JtYXRzW2ludGVybmFsZm9ybWF0XVxuICAgICAgaWYgKGZvcm1hdFN0ciBpbiB0ZXh0dXJlVHlwZXMpIHtcbiAgICAgICAgaWYgKCEoJ3R5cGUnIGluIG9wdGlvbnMpKSB7XG4gICAgICAgICAgZmxhZ3MudHlwZSA9IHRleHR1cmVUeXBlc1tmb3JtYXRTdHJdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3JtYXRTdHIgaW4gY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzKSB7XG4gICAgICAgIGZsYWdzLmNvbXByZXNzZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICBoYXNGb3JtYXQgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gUmVjb25jaWxlIGNoYW5uZWxzIGFuZCBmb3JtYXRcbiAgICBpZiAoIWhhc0NoYW5uZWxzICYmIGhhc0Zvcm1hdCkge1xuICAgICAgZmxhZ3MuY2hhbm5lbHMgPSBGT1JNQVRfQ0hBTk5FTFNbZmxhZ3MuZm9ybWF0XVxuICAgIH0gZWxzZSBpZiAoaGFzQ2hhbm5lbHMgJiYgIWhhc0Zvcm1hdCkge1xuICAgICAgaWYgKGZsYWdzLmNoYW5uZWxzICE9PSBDSEFOTkVMU19GT1JNQVRbZmxhZ3MuZm9ybWF0XSkge1xuICAgICAgICBmbGFncy5mb3JtYXQgPSBmbGFncy5pbnRlcm5hbGZvcm1hdCA9IENIQU5ORUxTX0ZPUk1BVFtmbGFncy5jaGFubmVsc11cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhhc0Zvcm1hdCAmJiBoYXNDaGFubmVscykge1xuICAgICAgY2hlY2skMShcbiAgICAgICAgZmxhZ3MuY2hhbm5lbHMgPT09IEZPUk1BVF9DSEFOTkVMU1tmbGFncy5mb3JtYXRdLFxuICAgICAgICAnbnVtYmVyIG9mIGNoYW5uZWxzIGluY29uc2lzdGVudCB3aXRoIHNwZWNpZmllZCBmb3JtYXQnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEZsYWdzIChmbGFncykge1xuICAgIGdsLnBpeGVsU3RvcmVpKEdMX1VOUEFDS19GTElQX1lfV0VCR0wsIGZsYWdzLmZsaXBZKVxuICAgIGdsLnBpeGVsU3RvcmVpKEdMX1VOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgZmxhZ3MucHJlbXVsdGlwbHlBbHBoYSlcbiAgICBnbC5waXhlbFN0b3JlaShHTF9VTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMLCBmbGFncy5jb2xvclNwYWNlKVxuICAgIGdsLnBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIGZsYWdzLnVucGFja0FsaWdubWVudClcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gVGV4IGltYWdlIGRhdGFcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBmdW5jdGlvbiBUZXhJbWFnZSAoKSB7XG4gICAgVGV4RmxhZ3MuY2FsbCh0aGlzKVxuXG4gICAgdGhpcy54T2Zmc2V0ID0gMFxuICAgIHRoaXMueU9mZnNldCA9IDBcblxuICAgIC8vIGRhdGFcbiAgICB0aGlzLmRhdGEgPSBudWxsXG4gICAgdGhpcy5uZWVkc0ZyZWUgPSBmYWxzZVxuXG4gICAgLy8gaHRtbCBlbGVtZW50XG4gICAgdGhpcy5lbGVtZW50ID0gbnVsbFxuXG4gICAgLy8gY29weVRleEltYWdlIGluZm9cbiAgICB0aGlzLm5lZWRzQ29weSA9IGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUltYWdlIChpbWFnZSwgb3B0aW9ucykge1xuICAgIHZhciBkYXRhID0gbnVsbFxuICAgIGlmIChpc1BpeGVsRGF0YShvcHRpb25zKSkge1xuICAgICAgZGF0YSA9IG9wdGlvbnNcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGNoZWNrJDEudHlwZShvcHRpb25zLCAnb2JqZWN0JywgJ2ludmFsaWQgcGl4ZWwgZGF0YSB0eXBlJylcbiAgICAgIHBhcnNlRmxhZ3MoaW1hZ2UsIG9wdGlvbnMpXG4gICAgICBpZiAoJ3gnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgaW1hZ2UueE9mZnNldCA9IG9wdGlvbnMueCB8IDBcbiAgICAgIH1cbiAgICAgIGlmICgneScgaW4gb3B0aW9ucykge1xuICAgICAgICBpbWFnZS55T2Zmc2V0ID0gb3B0aW9ucy55IHwgMFxuICAgICAgfVxuICAgICAgaWYgKGlzUGl4ZWxEYXRhKG9wdGlvbnMuZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IG9wdGlvbnMuZGF0YVxuICAgICAgfVxuICAgIH1cblxuICAgIGNoZWNrJDEoXG4gICAgICAhaW1hZ2UuY29tcHJlc3NlZCB8fFxuICAgICAgZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksXG4gICAgICAnY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEgbXVzdCBiZSBzdG9yZWQgaW4gYSB1aW50OGFycmF5JylcblxuICAgIGlmIChvcHRpb25zLmNvcHkpIHtcbiAgICAgIGNoZWNrJDEoIWRhdGEsICdjYW4gbm90IHNwZWNpZnkgY29weSBhbmQgZGF0YSBmaWVsZCBmb3IgdGhlIHNhbWUgdGV4dHVyZScpXG4gICAgICB2YXIgdmlld1cgPSBjb250ZXh0U3RhdGUudmlld3BvcnRXaWR0aFxuICAgICAgdmFyIHZpZXdIID0gY29udGV4dFN0YXRlLnZpZXdwb3J0SGVpZ2h0XG4gICAgICBpbWFnZS53aWR0aCA9IGltYWdlLndpZHRoIHx8ICh2aWV3VyAtIGltYWdlLnhPZmZzZXQpXG4gICAgICBpbWFnZS5oZWlnaHQgPSBpbWFnZS5oZWlnaHQgfHwgKHZpZXdIIC0gaW1hZ2UueU9mZnNldClcbiAgICAgIGltYWdlLm5lZWRzQ29weSA9IHRydWVcbiAgICAgIGNoZWNrJDEoaW1hZ2UueE9mZnNldCA+PSAwICYmIGltYWdlLnhPZmZzZXQgPCB2aWV3VyAmJlxuICAgICAgICAgICAgaW1hZ2UueU9mZnNldCA+PSAwICYmIGltYWdlLnlPZmZzZXQgPCB2aWV3SCAmJlxuICAgICAgICAgICAgaW1hZ2Uud2lkdGggPiAwICYmIGltYWdlLndpZHRoIDw9IHZpZXdXICYmXG4gICAgICAgICAgICBpbWFnZS5oZWlnaHQgPiAwICYmIGltYWdlLmhlaWdodCA8PSB2aWV3SCxcbiAgICAgICdjb3B5IHRleHR1cmUgcmVhZCBvdXQgb2YgYm91bmRzJylcbiAgICB9IGVsc2UgaWYgKCFkYXRhKSB7XG4gICAgICBpbWFnZS53aWR0aCA9IGltYWdlLndpZHRoIHx8IDFcbiAgICAgIGltYWdlLmhlaWdodCA9IGltYWdlLmhlaWdodCB8fCAxXG4gICAgICBpbWFnZS5jaGFubmVscyA9IGltYWdlLmNoYW5uZWxzIHx8IDRcbiAgICB9IGVsc2UgaWYgKGlzVHlwZWRBcnJheShkYXRhKSkge1xuICAgICAgaW1hZ2UuY2hhbm5lbHMgPSBpbWFnZS5jaGFubmVscyB8fCA0XG4gICAgICBpbWFnZS5kYXRhID0gZGF0YVxuICAgICAgaWYgKCEoJ3R5cGUnIGluIG9wdGlvbnMpICYmIGltYWdlLnR5cGUgPT09IEdMX1VOU0lHTkVEX0JZVEUkNSkge1xuICAgICAgICBpbWFnZS50eXBlID0gdHlwZWRBcnJheUNvZGUkMShkYXRhKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXkoZGF0YSkpIHtcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gaW1hZ2UuY2hhbm5lbHMgfHwgNFxuICAgICAgY29udmVydERhdGEoaW1hZ2UsIGRhdGEpXG4gICAgICBpbWFnZS5hbGlnbm1lbnQgPSAxXG4gICAgICBpbWFnZS5uZWVkc0ZyZWUgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc05EQXJyYXlMaWtlKGRhdGEpKSB7XG4gICAgICB2YXIgYXJyYXkgPSBkYXRhLmRhdGFcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheSkgJiYgaW1hZ2UudHlwZSA9PT0gR0xfVU5TSUdORURfQllURSQ1KSB7XG4gICAgICAgIGltYWdlLnR5cGUgPSB0eXBlZEFycmF5Q29kZSQxKGFycmF5KVxuICAgICAgfVxuICAgICAgdmFyIHNoYXBlID0gZGF0YS5zaGFwZVxuICAgICAgdmFyIHN0cmlkZSA9IGRhdGEuc3RyaWRlXG4gICAgICB2YXIgc2hhcGVYLCBzaGFwZVksIHNoYXBlQywgc3RyaWRlWCwgc3RyaWRlWSwgc3RyaWRlQ1xuICAgICAgaWYgKHNoYXBlLmxlbmd0aCA9PT0gMykge1xuICAgICAgICBzaGFwZUMgPSBzaGFwZVsyXVxuICAgICAgICBzdHJpZGVDID0gc3RyaWRlWzJdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVjayQxKHNoYXBlLmxlbmd0aCA9PT0gMiwgJ2ludmFsaWQgbmRhcnJheSBwaXhlbCBkYXRhLCBtdXN0IGJlIDIgb3IgM0QnKVxuICAgICAgICBzaGFwZUMgPSAxXG4gICAgICAgIHN0cmlkZUMgPSAxXG4gICAgICB9XG4gICAgICBzaGFwZVggPSBzaGFwZVswXVxuICAgICAgc2hhcGVZID0gc2hhcGVbMV1cbiAgICAgIHN0cmlkZVggPSBzdHJpZGVbMF1cbiAgICAgIHN0cmlkZVkgPSBzdHJpZGVbMV1cbiAgICAgIGltYWdlLmFsaWdubWVudCA9IDFcbiAgICAgIGltYWdlLndpZHRoID0gc2hhcGVYXG4gICAgICBpbWFnZS5oZWlnaHQgPSBzaGFwZVlcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gc2hhcGVDXG4gICAgICBpbWFnZS5mb3JtYXQgPSBpbWFnZS5pbnRlcm5hbGZvcm1hdCA9IENIQU5ORUxTX0ZPUk1BVFtzaGFwZUNdXG4gICAgICBpbWFnZS5uZWVkc0ZyZWUgPSB0cnVlXG4gICAgICB0cmFuc3Bvc2VEYXRhKGltYWdlLCBhcnJheSwgc3RyaWRlWCwgc3RyaWRlWSwgc3RyaWRlQywgZGF0YS5vZmZzZXQpXG4gICAgfSBlbHNlIGlmIChpc0NhbnZhc0VsZW1lbnQoZGF0YSkgfHwgaXNPZmZzY3JlZW5DYW52YXMoZGF0YSkgfHwgaXNDb250ZXh0MkQoZGF0YSkpIHtcbiAgICAgIGlmIChpc0NhbnZhc0VsZW1lbnQoZGF0YSkgfHwgaXNPZmZzY3JlZW5DYW52YXMoZGF0YSkpIHtcbiAgICAgICAgaW1hZ2UuZWxlbWVudCA9IGRhdGFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGltYWdlLmVsZW1lbnQgPSBkYXRhLmNhbnZhc1xuICAgICAgfVxuICAgICAgaW1hZ2Uud2lkdGggPSBpbWFnZS5lbGVtZW50LndpZHRoXG4gICAgICBpbWFnZS5oZWlnaHQgPSBpbWFnZS5lbGVtZW50LmhlaWdodFxuICAgICAgaW1hZ2UuY2hhbm5lbHMgPSA0XG4gICAgfSBlbHNlIGlmIChpc0JpdG1hcChkYXRhKSkge1xuICAgICAgaW1hZ2UuZWxlbWVudCA9IGRhdGFcbiAgICAgIGltYWdlLndpZHRoID0gZGF0YS53aWR0aFxuICAgICAgaW1hZ2UuaGVpZ2h0ID0gZGF0YS5oZWlnaHRcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gNFxuICAgIH0gZWxzZSBpZiAoaXNJbWFnZUVsZW1lbnQoZGF0YSkpIHtcbiAgICAgIGltYWdlLmVsZW1lbnQgPSBkYXRhXG4gICAgICBpbWFnZS53aWR0aCA9IGRhdGEubmF0dXJhbFdpZHRoXG4gICAgICBpbWFnZS5oZWlnaHQgPSBkYXRhLm5hdHVyYWxIZWlnaHRcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gNFxuICAgIH0gZWxzZSBpZiAoaXNWaWRlb0VsZW1lbnQoZGF0YSkpIHtcbiAgICAgIGltYWdlLmVsZW1lbnQgPSBkYXRhXG4gICAgICBpbWFnZS53aWR0aCA9IGRhdGEudmlkZW9XaWR0aFxuICAgICAgaW1hZ2UuaGVpZ2h0ID0gZGF0YS52aWRlb0hlaWdodFxuICAgICAgaW1hZ2UuY2hhbm5lbHMgPSA0XG4gICAgfSBlbHNlIGlmIChpc1JlY3RBcnJheShkYXRhKSkge1xuICAgICAgdmFyIHcgPSBpbWFnZS53aWR0aCB8fCBkYXRhWzBdLmxlbmd0aFxuICAgICAgdmFyIGggPSBpbWFnZS5oZWlnaHQgfHwgZGF0YS5sZW5ndGhcbiAgICAgIHZhciBjID0gaW1hZ2UuY2hhbm5lbHNcbiAgICAgIGlmIChpc0FycmF5TGlrZShkYXRhWzBdWzBdKSkge1xuICAgICAgICBjID0gYyB8fCBkYXRhWzBdWzBdLmxlbmd0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYyA9IGMgfHwgMVxuICAgICAgfVxuICAgICAgdmFyIGFycmF5U2hhcGUgPSBmbGF0dGVuVXRpbHMuc2hhcGUoZGF0YSlcbiAgICAgIHZhciBuID0gMVxuICAgICAgZm9yICh2YXIgZGQgPSAwOyBkZCA8IGFycmF5U2hhcGUubGVuZ3RoOyArK2RkKSB7XG4gICAgICAgIG4gKj0gYXJyYXlTaGFwZVtkZF1cbiAgICAgIH1cbiAgICAgIHZhciBhbGxvY0RhdGEgPSBwcmVDb252ZXJ0KGltYWdlLCBuKVxuICAgICAgZmxhdHRlblV0aWxzLmZsYXR0ZW4oZGF0YSwgYXJyYXlTaGFwZSwgJycsIGFsbG9jRGF0YSlcbiAgICAgIHBvc3RDb252ZXJ0KGltYWdlLCBhbGxvY0RhdGEpXG4gICAgICBpbWFnZS5hbGlnbm1lbnQgPSAxXG4gICAgICBpbWFnZS53aWR0aCA9IHdcbiAgICAgIGltYWdlLmhlaWdodCA9IGhcbiAgICAgIGltYWdlLmNoYW5uZWxzID0gY1xuICAgICAgaW1hZ2UuZm9ybWF0ID0gaW1hZ2UuaW50ZXJuYWxmb3JtYXQgPSBDSEFOTkVMU19GT1JNQVRbY11cbiAgICAgIGltYWdlLm5lZWRzRnJlZSA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAoaW1hZ2UudHlwZSA9PT0gR0xfRkxPQVQkNCkge1xuICAgICAgY2hlY2skMShsaW1pdHMuZXh0ZW5zaW9ucy5pbmRleE9mKCdvZXNfdGV4dHVyZV9mbG9hdCcpID49IDAsXG4gICAgICAgICdvZXNfdGV4dHVyZV9mbG9hdCBleHRlbnNpb24gbm90IGVuYWJsZWQnKVxuICAgIH0gZWxzZSBpZiAoaW1hZ2UudHlwZSA9PT0gR0xfSEFMRl9GTE9BVF9PRVMkMSkge1xuICAgICAgY2hlY2skMShsaW1pdHMuZXh0ZW5zaW9ucy5pbmRleE9mKCdvZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JykgPj0gMCxcbiAgICAgICAgJ29lc190ZXh0dXJlX2hhbGZfZmxvYXQgZXh0ZW5zaW9uIG5vdCBlbmFibGVkJylcbiAgICB9XG5cbiAgICAvLyBkbyBjb21wcmVzc2VkIHRleHR1cmUgIHZhbGlkYXRpb24gaGVyZS5cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEltYWdlIChpbmZvLCB0YXJnZXQsIG1pcGxldmVsKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBpbmZvLmVsZW1lbnRcbiAgICB2YXIgZGF0YSA9IGluZm8uZGF0YVxuICAgIHZhciBpbnRlcm5hbGZvcm1hdCA9IGluZm8uaW50ZXJuYWxmb3JtYXRcbiAgICB2YXIgZm9ybWF0ID0gaW5mby5mb3JtYXRcbiAgICB2YXIgdHlwZSA9IGluZm8udHlwZVxuICAgIHZhciB3aWR0aCA9IGluZm8ud2lkdGhcbiAgICB2YXIgaGVpZ2h0ID0gaW5mby5oZWlnaHRcblxuICAgIHNldEZsYWdzKGluZm8pXG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgZ2wudGV4SW1hZ2UyRCh0YXJnZXQsIG1pcGxldmVsLCBmb3JtYXQsIGZvcm1hdCwgdHlwZSwgZWxlbWVudClcbiAgICB9IGVsc2UgaWYgKGluZm8uY29tcHJlc3NlZCkge1xuICAgICAgZ2wuY29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBtaXBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGRhdGEpXG4gICAgfSBlbHNlIGlmIChpbmZvLm5lZWRzQ29weSkge1xuICAgICAgcmVnbFBvbGwoKVxuICAgICAgZ2wuY29weVRleEltYWdlMkQoXG4gICAgICAgIHRhcmdldCwgbWlwbGV2ZWwsIGZvcm1hdCwgaW5mby54T2Zmc2V0LCBpbmZvLnlPZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDApXG4gICAgfSBlbHNlIHtcbiAgICAgIGdsLnRleEltYWdlMkQodGFyZ2V0LCBtaXBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIGRhdGEgfHwgbnVsbClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRTdWJJbWFnZSAoaW5mbywgdGFyZ2V0LCB4LCB5LCBtaXBsZXZlbCkge1xuICAgIHZhciBlbGVtZW50ID0gaW5mby5lbGVtZW50XG4gICAgdmFyIGRhdGEgPSBpbmZvLmRhdGFcbiAgICB2YXIgaW50ZXJuYWxmb3JtYXQgPSBpbmZvLmludGVybmFsZm9ybWF0XG4gICAgdmFyIGZvcm1hdCA9IGluZm8uZm9ybWF0XG4gICAgdmFyIHR5cGUgPSBpbmZvLnR5cGVcbiAgICB2YXIgd2lkdGggPSBpbmZvLndpZHRoXG4gICAgdmFyIGhlaWdodCA9IGluZm8uaGVpZ2h0XG5cbiAgICBzZXRGbGFncyhpbmZvKVxuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGdsLnRleFN1YkltYWdlMkQoXG4gICAgICAgIHRhcmdldCwgbWlwbGV2ZWwsIHgsIHksIGZvcm1hdCwgdHlwZSwgZWxlbWVudClcbiAgICB9IGVsc2UgaWYgKGluZm8uY29tcHJlc3NlZCkge1xuICAgICAgZ2wuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoXG4gICAgICAgIHRhcmdldCwgbWlwbGV2ZWwsIHgsIHksIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkYXRhKVxuICAgIH0gZWxzZSBpZiAoaW5mby5uZWVkc0NvcHkpIHtcbiAgICAgIHJlZ2xQb2xsKClcbiAgICAgIGdsLmNvcHlUZXhTdWJJbWFnZTJEKFxuICAgICAgICB0YXJnZXQsIG1pcGxldmVsLCB4LCB5LCBpbmZvLnhPZmZzZXQsIGluZm8ueU9mZnNldCwgd2lkdGgsIGhlaWdodClcbiAgICB9IGVsc2Uge1xuICAgICAgZ2wudGV4U3ViSW1hZ2UyRChcbiAgICAgICAgdGFyZ2V0LCBtaXBsZXZlbCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKVxuICAgIH1cbiAgfVxuXG4gIC8vIHRleEltYWdlIHBvb2xcbiAgdmFyIGltYWdlUG9vbCA9IFtdXG5cbiAgZnVuY3Rpb24gYWxsb2NJbWFnZSAoKSB7XG4gICAgcmV0dXJuIGltYWdlUG9vbC5wb3AoKSB8fCBuZXcgVGV4SW1hZ2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gZnJlZUltYWdlIChpbWFnZSkge1xuICAgIGlmIChpbWFnZS5uZWVkc0ZyZWUpIHtcbiAgICAgIHBvb2wuZnJlZVR5cGUoaW1hZ2UuZGF0YSlcbiAgICB9XG4gICAgVGV4SW1hZ2UuY2FsbChpbWFnZSlcbiAgICBpbWFnZVBvb2wucHVzaChpbWFnZSlcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWlwIG1hcFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGZ1bmN0aW9uIE1pcE1hcCAoKSB7XG4gICAgVGV4RmxhZ3MuY2FsbCh0aGlzKVxuXG4gICAgdGhpcy5nZW5NaXBtYXBzID0gZmFsc2VcbiAgICB0aGlzLm1pcG1hcEhpbnQgPSBHTF9ET05UX0NBUkVcbiAgICB0aGlzLm1pcG1hc2sgPSAwXG4gICAgdGhpcy5pbWFnZXMgPSBBcnJheSgxNilcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTWlwTWFwRnJvbVNoYXBlIChtaXBtYXAsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICB2YXIgaW1nID0gbWlwbWFwLmltYWdlc1swXSA9IGFsbG9jSW1hZ2UoKVxuICAgIG1pcG1hcC5taXBtYXNrID0gMVxuICAgIGltZy53aWR0aCA9IG1pcG1hcC53aWR0aCA9IHdpZHRoXG4gICAgaW1nLmhlaWdodCA9IG1pcG1hcC5oZWlnaHQgPSBoZWlnaHRcbiAgICBpbWcuY2hhbm5lbHMgPSBtaXBtYXAuY2hhbm5lbHMgPSA0XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU1pcE1hcEZyb21PYmplY3QgKG1pcG1hcCwgb3B0aW9ucykge1xuICAgIHZhciBpbWdEYXRhID0gbnVsbFxuICAgIGlmIChpc1BpeGVsRGF0YShvcHRpb25zKSkge1xuICAgICAgaW1nRGF0YSA9IG1pcG1hcC5pbWFnZXNbMF0gPSBhbGxvY0ltYWdlKClcbiAgICAgIGNvcHlGbGFncyhpbWdEYXRhLCBtaXBtYXApXG4gICAgICBwYXJzZUltYWdlKGltZ0RhdGEsIG9wdGlvbnMpXG4gICAgICBtaXBtYXAubWlwbWFzayA9IDFcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VGbGFncyhtaXBtYXAsIG9wdGlvbnMpXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLm1pcG1hcCkpIHtcbiAgICAgICAgdmFyIG1pcERhdGEgPSBvcHRpb25zLm1pcG1hcFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pcERhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBpbWdEYXRhID0gbWlwbWFwLmltYWdlc1tpXSA9IGFsbG9jSW1hZ2UoKVxuICAgICAgICAgIGNvcHlGbGFncyhpbWdEYXRhLCBtaXBtYXApXG4gICAgICAgICAgaW1nRGF0YS53aWR0aCA+Pj0gaVxuICAgICAgICAgIGltZ0RhdGEuaGVpZ2h0ID4+PSBpXG4gICAgICAgICAgcGFyc2VJbWFnZShpbWdEYXRhLCBtaXBEYXRhW2ldKVxuICAgICAgICAgIG1pcG1hcC5taXBtYXNrIHw9ICgxIDw8IGkpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGltZ0RhdGEgPSBtaXBtYXAuaW1hZ2VzWzBdID0gYWxsb2NJbWFnZSgpXG4gICAgICAgIGNvcHlGbGFncyhpbWdEYXRhLCBtaXBtYXApXG4gICAgICAgIHBhcnNlSW1hZ2UoaW1nRGF0YSwgb3B0aW9ucylcbiAgICAgICAgbWlwbWFwLm1pcG1hc2sgPSAxXG4gICAgICB9XG4gICAgfVxuICAgIGNvcHlGbGFncyhtaXBtYXAsIG1pcG1hcC5pbWFnZXNbMF0pXG5cbiAgICAvLyBGb3IgdGV4dHVyZXMgb2YgdGhlIGNvbXByZXNzZWQgZm9ybWF0IFdFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjXG4gICAgLy8gd2UgbXVzdCBoYXZlIHRoYXRcbiAgICAvL1xuICAgIC8vIFwiV2hlbiBsZXZlbCBlcXVhbHMgemVybyB3aWR0aCBhbmQgaGVpZ2h0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LlxuICAgIC8vIFdoZW4gbGV2ZWwgaXMgZ3JlYXRlciB0aGFuIDAgd2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIDAsIDEsIDIgb3IgYSBtdWx0aXBsZSBvZiA0LiBcIlxuICAgIC8vXG4gICAgLy8gYnV0IHdlIGRvIG5vdCB5ZXQgc3VwcG9ydCBoYXZpbmcgbXVsdGlwbGUgbWlwbWFwIGxldmVscyBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcyxcbiAgICAvLyBzbyB3ZSBvbmx5IHRlc3QgZm9yIGxldmVsIHplcm8uXG5cbiAgICBpZiAoXG4gICAgICBtaXBtYXAuY29tcHJlc3NlZCAmJlxuICAgICAgKFxuICAgICAgICBtaXBtYXAuaW50ZXJuYWxmb3JtYXQgPT09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgfHxcbiAgICAgICAgbWlwbWFwLmludGVybmFsZm9ybWF0ID09PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCB8fFxuICAgICAgICBtaXBtYXAuaW50ZXJuYWxmb3JtYXQgPT09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUIHx8XG4gICAgICAgIG1pcG1hcC5pbnRlcm5hbGZvcm1hdCA9PT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFRcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGNoZWNrJDEobWlwbWFwLndpZHRoICUgNCA9PT0gMCAmJiBtaXBtYXAuaGVpZ2h0ICUgNCA9PT0gMCxcbiAgICAgICAgJ2ZvciBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0cywgbWlwbWFwIGxldmVsIDAgbXVzdCBoYXZlIHdpZHRoIGFuZCBoZWlnaHQgdGhhdCBhcmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRNaXBNYXAgKG1pcG1hcCwgdGFyZ2V0KSB7XG4gICAgdmFyIGltYWdlcyA9IG1pcG1hcC5pbWFnZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKCFpbWFnZXNbaV0pIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzZXRJbWFnZShpbWFnZXNbaV0sIHRhcmdldCwgaSlcbiAgICB9XG4gIH1cblxuICB2YXIgbWlwUG9vbCA9IFtdXG5cbiAgZnVuY3Rpb24gYWxsb2NNaXBNYXAgKCkge1xuICAgIHZhciByZXN1bHQgPSBtaXBQb29sLnBvcCgpIHx8IG5ldyBNaXBNYXAoKVxuICAgIFRleEZsYWdzLmNhbGwocmVzdWx0KVxuICAgIHJlc3VsdC5taXBtYXNrID0gMFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgcmVzdWx0LmltYWdlc1tpXSA9IG51bGxcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZnVuY3Rpb24gZnJlZU1pcE1hcCAobWlwbWFwKSB7XG4gICAgdmFyIGltYWdlcyA9IG1pcG1hcC5pbWFnZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGltYWdlc1tpXSkge1xuICAgICAgICBmcmVlSW1hZ2UoaW1hZ2VzW2ldKVxuICAgICAgfVxuICAgICAgaW1hZ2VzW2ldID0gbnVsbFxuICAgIH1cbiAgICBtaXBQb29sLnB1c2gobWlwbWFwKVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBUZXggaW5mb1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGZ1bmN0aW9uIFRleEluZm8gKCkge1xuICAgIHRoaXMubWluRmlsdGVyID0gR0xfTkVBUkVTVCQxXG4gICAgdGhpcy5tYWdGaWx0ZXIgPSBHTF9ORUFSRVNUJDFcblxuICAgIHRoaXMud3JhcFMgPSBHTF9DTEFNUF9UT19FREdFJDFcbiAgICB0aGlzLndyYXBUID0gR0xfQ0xBTVBfVE9fRURHRSQxXG5cbiAgICB0aGlzLmFuaXNvdHJvcGljID0gMVxuXG4gICAgdGhpcy5nZW5NaXBtYXBzID0gZmFsc2VcbiAgICB0aGlzLm1pcG1hcEhpbnQgPSBHTF9ET05UX0NBUkVcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlVGV4SW5mbyAoaW5mbywgb3B0aW9ucykge1xuICAgIGlmICgnbWluJyBpbiBvcHRpb25zKSB7XG4gICAgICB2YXIgbWluRmlsdGVyID0gb3B0aW9ucy5taW5cbiAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG1pbkZpbHRlciwgbWluRmlsdGVycylcbiAgICAgIGluZm8ubWluRmlsdGVyID0gbWluRmlsdGVyc1ttaW5GaWx0ZXJdXG4gICAgICBpZiAoTUlQTUFQX0ZJTFRFUlMuaW5kZXhPZihpbmZvLm1pbkZpbHRlcikgPj0gMCAmJiAhKCdmYWNlcycgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgaW5mby5nZW5NaXBtYXBzID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICgnbWFnJyBpbiBvcHRpb25zKSB7XG4gICAgICB2YXIgbWFnRmlsdGVyID0gb3B0aW9ucy5tYWdcbiAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG1hZ0ZpbHRlciwgbWFnRmlsdGVycylcbiAgICAgIGluZm8ubWFnRmlsdGVyID0gbWFnRmlsdGVyc1ttYWdGaWx0ZXJdXG4gICAgfVxuXG4gICAgdmFyIHdyYXBTID0gaW5mby53cmFwU1xuICAgIHZhciB3cmFwVCA9IGluZm8ud3JhcFRcbiAgICBpZiAoJ3dyYXAnIGluIG9wdGlvbnMpIHtcbiAgICAgIHZhciB3cmFwID0gb3B0aW9ucy53cmFwXG4gICAgICBpZiAodHlwZW9mIHdyYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKHdyYXAsIHdyYXBNb2RlcylcbiAgICAgICAgd3JhcFMgPSB3cmFwVCA9IHdyYXBNb2Rlc1t3cmFwXVxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHdyYXApKSB7XG4gICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKHdyYXBbMF0sIHdyYXBNb2RlcylcbiAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIod3JhcFsxXSwgd3JhcE1vZGVzKVxuICAgICAgICB3cmFwUyA9IHdyYXBNb2Rlc1t3cmFwWzBdXVxuICAgICAgICB3cmFwVCA9IHdyYXBNb2Rlc1t3cmFwWzFdXVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJ3dyYXBTJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIHZhciBvcHRXcmFwUyA9IG9wdGlvbnMud3JhcFNcbiAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIob3B0V3JhcFMsIHdyYXBNb2RlcylcbiAgICAgICAgd3JhcFMgPSB3cmFwTW9kZXNbb3B0V3JhcFNdXG4gICAgICB9XG4gICAgICBpZiAoJ3dyYXBUJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIHZhciBvcHRXcmFwVCA9IG9wdGlvbnMud3JhcFRcbiAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIob3B0V3JhcFQsIHdyYXBNb2RlcylcbiAgICAgICAgd3JhcFQgPSB3cmFwTW9kZXNbb3B0V3JhcFRdXG4gICAgICB9XG4gICAgfVxuICAgIGluZm8ud3JhcFMgPSB3cmFwU1xuICAgIGluZm8ud3JhcFQgPSB3cmFwVFxuXG4gICAgaWYgKCdhbmlzb3Ryb3BpYycgaW4gb3B0aW9ucykge1xuICAgICAgdmFyIGFuaXNvdHJvcGljID0gb3B0aW9ucy5hbmlzb3Ryb3BpY1xuICAgICAgY2hlY2skMSh0eXBlb2YgYW5pc290cm9waWMgPT09ICdudW1iZXInICYmXG4gICAgICAgICBhbmlzb3Ryb3BpYyA+PSAxICYmIGFuaXNvdHJvcGljIDw9IGxpbWl0cy5tYXhBbmlzb3Ryb3BpYyxcbiAgICAgICdhbmlzbyBzYW1wbGVzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAnKVxuICAgICAgaW5mby5hbmlzb3Ryb3BpYyA9IG9wdGlvbnMuYW5pc290cm9waWNcbiAgICB9XG5cbiAgICBpZiAoJ21pcG1hcCcgaW4gb3B0aW9ucykge1xuICAgICAgdmFyIGhhc01pcE1hcCA9IGZhbHNlXG4gICAgICBzd2l0Y2ggKHR5cGVvZiBvcHRpb25zLm1pcG1hcCkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG9wdGlvbnMubWlwbWFwLCBtaXBtYXBIaW50LFxuICAgICAgICAgICAgJ2ludmFsaWQgbWlwbWFwIGhpbnQnKVxuICAgICAgICAgIGluZm8ubWlwbWFwSGludCA9IG1pcG1hcEhpbnRbb3B0aW9ucy5taXBtYXBdXG4gICAgICAgICAgaW5mby5nZW5NaXBtYXBzID0gdHJ1ZVxuICAgICAgICAgIGhhc01pcE1hcCA9IHRydWVcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgIGhhc01pcE1hcCA9IGluZm8uZ2VuTWlwbWFwcyA9IG9wdGlvbnMubWlwbWFwXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgIGNoZWNrJDEoQXJyYXkuaXNBcnJheShvcHRpb25zLm1pcG1hcCksICdpbnZhbGlkIG1pcG1hcCB0eXBlJylcbiAgICAgICAgICBpbmZvLmdlbk1pcG1hcHMgPSBmYWxzZVxuICAgICAgICAgIGhhc01pcE1hcCA9IHRydWVcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCBtaXBtYXAgdHlwZScpXG4gICAgICB9XG4gICAgICBpZiAoaGFzTWlwTWFwICYmICEoJ21pbicgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgaW5mby5taW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUJDFcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRUZXhJbmZvIChpbmZvLCB0YXJnZXQpIHtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBpbmZvLm1pbkZpbHRlcilcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBpbmZvLm1hZ0ZpbHRlcilcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIGluZm8ud3JhcFMpXG4gICAgZ2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBpbmZvLndyYXBUKVxuICAgIGlmIChleHRlbnNpb25zLmV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYykge1xuICAgICAgZ2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULCBpbmZvLmFuaXNvdHJvcGljKVxuICAgIH1cbiAgICBpZiAoaW5mby5nZW5NaXBtYXBzKSB7XG4gICAgICBnbC5oaW50KEdMX0dFTkVSQVRFX01JUE1BUF9ISU5ULCBpbmZvLm1pcG1hcEhpbnQpXG4gICAgICBnbC5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpXG4gICAgfVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBGdWxsIHRleHR1cmUgb2JqZWN0XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgdmFyIHRleHR1cmVDb3VudCA9IDBcbiAgdmFyIHRleHR1cmVTZXQgPSB7fVxuICB2YXIgbnVtVGV4VW5pdHMgPSBsaW1pdHMubWF4VGV4dHVyZVVuaXRzXG4gIHZhciB0ZXh0dXJlVW5pdHMgPSBBcnJheShudW1UZXhVbml0cykubWFwKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9KVxuXG4gIGZ1bmN0aW9uIFJFR0xUZXh0dXJlICh0YXJnZXQpIHtcbiAgICBUZXhGbGFncy5jYWxsKHRoaXMpXG4gICAgdGhpcy5taXBtYXNrID0gMFxuICAgIHRoaXMuaW50ZXJuYWxmb3JtYXQgPSBHTF9SR0JBJDFcblxuICAgIHRoaXMuaWQgPSB0ZXh0dXJlQ291bnQrK1xuXG4gICAgdGhpcy5yZWZDb3VudCA9IDFcblxuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0XG4gICAgdGhpcy50ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpXG5cbiAgICB0aGlzLnVuaXQgPSAtMVxuICAgIHRoaXMuYmluZENvdW50ID0gMFxuXG4gICAgdGhpcy50ZXhJbmZvID0gbmV3IFRleEluZm8oKVxuXG4gICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICB0aGlzLnN0YXRzID0geyBzaXplOiAwIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0ZW1wQmluZCAodGV4dHVyZSkge1xuICAgIGdsLmFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTAkMSlcbiAgICBnbC5iaW5kVGV4dHVyZSh0ZXh0dXJlLnRhcmdldCwgdGV4dHVyZS50ZXh0dXJlKVxuICB9XG5cbiAgZnVuY3Rpb24gdGVtcFJlc3RvcmUgKCkge1xuICAgIHZhciBwcmV2ID0gdGV4dHVyZVVuaXRzWzBdXG4gICAgaWYgKHByZXYpIHtcbiAgICAgIGdsLmJpbmRUZXh0dXJlKHByZXYudGFyZ2V0LCBwcmV2LnRleHR1cmUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGdsLmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQkMSwgbnVsbClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95ICh0ZXh0dXJlKSB7XG4gICAgdmFyIGhhbmRsZSA9IHRleHR1cmUudGV4dHVyZVxuICAgIGNoZWNrJDEoaGFuZGxlLCAnbXVzdCBub3QgZG91YmxlIGRlc3Ryb3kgdGV4dHVyZScpXG4gICAgdmFyIHVuaXQgPSB0ZXh0dXJlLnVuaXRcbiAgICB2YXIgdGFyZ2V0ID0gdGV4dHVyZS50YXJnZXRcbiAgICBpZiAodW5pdCA+PSAwKSB7XG4gICAgICBnbC5hY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwJDEgKyB1bml0KVxuICAgICAgZ2wuYmluZFRleHR1cmUodGFyZ2V0LCBudWxsKVxuICAgICAgdGV4dHVyZVVuaXRzW3VuaXRdID0gbnVsbFxuICAgIH1cbiAgICBnbC5kZWxldGVUZXh0dXJlKGhhbmRsZSlcbiAgICB0ZXh0dXJlLnRleHR1cmUgPSBudWxsXG4gICAgdGV4dHVyZS5wYXJhbXMgPSBudWxsXG4gICAgdGV4dHVyZS5waXhlbHMgPSBudWxsXG4gICAgdGV4dHVyZS5yZWZDb3VudCA9IDBcbiAgICBkZWxldGUgdGV4dHVyZVNldFt0ZXh0dXJlLmlkXVxuICAgIHN0YXRzLnRleHR1cmVDb3VudC0tXG4gIH1cblxuICBleHRlbmQoUkVHTFRleHR1cmUucHJvdG90eXBlLCB7XG4gICAgYmluZDogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRleHR1cmUgPSB0aGlzXG4gICAgICB0ZXh0dXJlLmJpbmRDb3VudCArPSAxXG4gICAgICB2YXIgdW5pdCA9IHRleHR1cmUudW5pdFxuICAgICAgaWYgKHVuaXQgPCAwKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtVGV4VW5pdHM7ICsraSkge1xuICAgICAgICAgIHZhciBvdGhlciA9IHRleHR1cmVVbml0c1tpXVxuICAgICAgICAgIGlmIChvdGhlcikge1xuICAgICAgICAgICAgaWYgKG90aGVyLmJpbmRDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG90aGVyLnVuaXQgPSAtMVxuICAgICAgICAgIH1cbiAgICAgICAgICB0ZXh0dXJlVW5pdHNbaV0gPSB0ZXh0dXJlXG4gICAgICAgICAgdW5pdCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bml0ID49IG51bVRleFVuaXRzKSB7XG4gICAgICAgICAgY2hlY2skMS5yYWlzZSgnaW5zdWZmaWNpZW50IG51bWJlciBvZiB0ZXh0dXJlIHVuaXRzJylcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLnByb2ZpbGUgJiYgc3RhdHMubWF4VGV4dHVyZVVuaXRzIDwgKHVuaXQgKyAxKSkge1xuICAgICAgICAgIHN0YXRzLm1heFRleHR1cmVVbml0cyA9IHVuaXQgKyAxIC8vICsxLCBzaW5jZSB0aGUgdW5pdHMgYXJlIHplcm8tYmFzZWRcbiAgICAgICAgfVxuICAgICAgICB0ZXh0dXJlLnVuaXQgPSB1bml0XG4gICAgICAgIGdsLmFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTAkMSArIHVuaXQpXG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKHRleHR1cmUudGFyZ2V0LCB0ZXh0dXJlLnRleHR1cmUpXG4gICAgICB9XG4gICAgICByZXR1cm4gdW5pdFxuICAgIH0sXG5cbiAgICB1bmJpbmQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuYmluZENvdW50IC09IDFcbiAgICB9LFxuXG4gICAgZGVjUmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoLS10aGlzLnJlZkNvdW50IDw9IDApIHtcbiAgICAgICAgZGVzdHJveSh0aGlzKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBmdW5jdGlvbiBjcmVhdGVUZXh0dXJlMkQgKGEsIGIpIHtcbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBSRUdMVGV4dHVyZShHTF9URVhUVVJFXzJEJDEpXG4gICAgdGV4dHVyZVNldFt0ZXh0dXJlLmlkXSA9IHRleHR1cmVcbiAgICBzdGF0cy50ZXh0dXJlQ291bnQrK1xuXG4gICAgZnVuY3Rpb24gcmVnbFRleHR1cmUyRCAoYSwgYikge1xuICAgICAgdmFyIHRleEluZm8gPSB0ZXh0dXJlLnRleEluZm9cbiAgICAgIFRleEluZm8uY2FsbCh0ZXhJbmZvKVxuICAgICAgdmFyIG1pcERhdGEgPSBhbGxvY01pcE1hcCgpXG5cbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbVNoYXBlKG1pcERhdGEsIGEgfCAwLCBiIHwgMClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZU1pcE1hcEZyb21TaGFwZShtaXBEYXRhLCBhIHwgMCwgYSB8IDApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYSkge1xuICAgICAgICBjaGVjayQxLnR5cGUoYSwgJ29iamVjdCcsICdpbnZhbGlkIGFyZ3VtZW50cyB0byByZWdsLnRleHR1cmUnKVxuICAgICAgICBwYXJzZVRleEluZm8odGV4SW5mbywgYSlcbiAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KG1pcERhdGEsIGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlbXB0eSB0ZXh0dXJlcyBnZXQgYXNzaWduZWQgYSBkZWZhdWx0IHNoYXBlIG9mIDF4MVxuICAgICAgICBwYXJzZU1pcE1hcEZyb21TaGFwZShtaXBEYXRhLCAxLCAxKVxuICAgICAgfVxuXG4gICAgICBpZiAodGV4SW5mby5nZW5NaXBtYXBzKSB7XG4gICAgICAgIG1pcERhdGEubWlwbWFzayA9IChtaXBEYXRhLndpZHRoIDw8IDEpIC0gMVxuICAgICAgfVxuICAgICAgdGV4dHVyZS5taXBtYXNrID0gbWlwRGF0YS5taXBtYXNrXG5cbiAgICAgIGNvcHlGbGFncyh0ZXh0dXJlLCBtaXBEYXRhKVxuXG4gICAgICBjaGVjayQxLnRleHR1cmUyRCh0ZXhJbmZvLCBtaXBEYXRhLCBsaW1pdHMpXG4gICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0ID0gbWlwRGF0YS5pbnRlcm5hbGZvcm1hdFxuXG4gICAgICByZWdsVGV4dHVyZTJELndpZHRoID0gbWlwRGF0YS53aWR0aFxuICAgICAgcmVnbFRleHR1cmUyRC5oZWlnaHQgPSBtaXBEYXRhLmhlaWdodFxuXG4gICAgICB0ZW1wQmluZCh0ZXh0dXJlKVxuICAgICAgc2V0TWlwTWFwKG1pcERhdGEsIEdMX1RFWFRVUkVfMkQkMSlcbiAgICAgIHNldFRleEluZm8odGV4SW5mbywgR0xfVEVYVFVSRV8yRCQxKVxuICAgICAgdGVtcFJlc3RvcmUoKVxuXG4gICAgICBmcmVlTWlwTWFwKG1pcERhdGEpXG5cbiAgICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgICB0ZXh0dXJlLnN0YXRzLnNpemUgPSBnZXRUZXh0dXJlU2l6ZShcbiAgICAgICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0LFxuICAgICAgICAgIHRleHR1cmUudHlwZSxcbiAgICAgICAgICBtaXBEYXRhLndpZHRoLFxuICAgICAgICAgIG1pcERhdGEuaGVpZ2h0LFxuICAgICAgICAgIHRleEluZm8uZ2VuTWlwbWFwcyxcbiAgICAgICAgICBmYWxzZSlcbiAgICAgIH1cbiAgICAgIHJlZ2xUZXh0dXJlMkQuZm9ybWF0ID0gdGV4dHVyZUZvcm1hdHNJbnZlcnRbdGV4dHVyZS5pbnRlcm5hbGZvcm1hdF1cbiAgICAgIHJlZ2xUZXh0dXJlMkQudHlwZSA9IHRleHR1cmVUeXBlc0ludmVydFt0ZXh0dXJlLnR5cGVdXG5cbiAgICAgIHJlZ2xUZXh0dXJlMkQubWFnID0gbWFnRmlsdGVyc0ludmVydFt0ZXhJbmZvLm1hZ0ZpbHRlcl1cbiAgICAgIHJlZ2xUZXh0dXJlMkQubWluID0gbWluRmlsdGVyc0ludmVydFt0ZXhJbmZvLm1pbkZpbHRlcl1cblxuICAgICAgcmVnbFRleHR1cmUyRC53cmFwUyA9IHdyYXBNb2Rlc0ludmVydFt0ZXhJbmZvLndyYXBTXVxuICAgICAgcmVnbFRleHR1cmUyRC53cmFwVCA9IHdyYXBNb2Rlc0ludmVydFt0ZXhJbmZvLndyYXBUXVxuXG4gICAgICByZXR1cm4gcmVnbFRleHR1cmUyRFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN1YmltYWdlIChpbWFnZSwgeF8sIHlfLCBsZXZlbF8pIHtcbiAgICAgIGNoZWNrJDEoISFpbWFnZSwgJ211c3Qgc3BlY2lmeSBpbWFnZSBkYXRhJylcblxuICAgICAgdmFyIHggPSB4XyB8IDBcbiAgICAgIHZhciB5ID0geV8gfCAwXG4gICAgICB2YXIgbGV2ZWwgPSBsZXZlbF8gfCAwXG5cbiAgICAgIHZhciBpbWFnZURhdGEgPSBhbGxvY0ltYWdlKClcbiAgICAgIGNvcHlGbGFncyhpbWFnZURhdGEsIHRleHR1cmUpXG4gICAgICBpbWFnZURhdGEud2lkdGggPSAwXG4gICAgICBpbWFnZURhdGEuaGVpZ2h0ID0gMFxuICAgICAgcGFyc2VJbWFnZShpbWFnZURhdGEsIGltYWdlKVxuICAgICAgaW1hZ2VEYXRhLndpZHRoID0gaW1hZ2VEYXRhLndpZHRoIHx8ICgodGV4dHVyZS53aWR0aCA+PiBsZXZlbCkgLSB4KVxuICAgICAgaW1hZ2VEYXRhLmhlaWdodCA9IGltYWdlRGF0YS5oZWlnaHQgfHwgKCh0ZXh0dXJlLmhlaWdodCA+PiBsZXZlbCkgLSB5KVxuXG4gICAgICBjaGVjayQxKFxuICAgICAgICB0ZXh0dXJlLnR5cGUgPT09IGltYWdlRGF0YS50eXBlICYmXG4gICAgICAgIHRleHR1cmUuZm9ybWF0ID09PSBpbWFnZURhdGEuZm9ybWF0ICYmXG4gICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQgPT09IGltYWdlRGF0YS5pbnRlcm5hbGZvcm1hdCxcbiAgICAgICAgJ2luY29tcGF0aWJsZSBmb3JtYXQgZm9yIHRleHR1cmUuc3ViaW1hZ2UnKVxuICAgICAgY2hlY2skMShcbiAgICAgICAgeCA+PSAwICYmIHkgPj0gMCAmJlxuICAgICAgICB4ICsgaW1hZ2VEYXRhLndpZHRoIDw9IHRleHR1cmUud2lkdGggJiZcbiAgICAgICAgeSArIGltYWdlRGF0YS5oZWlnaHQgPD0gdGV4dHVyZS5oZWlnaHQsXG4gICAgICAgICd0ZXh0dXJlLnN1YmltYWdlIHdyaXRlIG91dCBvZiBib3VuZHMnKVxuICAgICAgY2hlY2skMShcbiAgICAgICAgdGV4dHVyZS5taXBtYXNrICYgKDEgPDwgbGV2ZWwpLFxuICAgICAgICAnbWlzc2luZyBtaXBtYXAgZGF0YScpXG4gICAgICBjaGVjayQxKFxuICAgICAgICBpbWFnZURhdGEuZGF0YSB8fCBpbWFnZURhdGEuZWxlbWVudCB8fCBpbWFnZURhdGEubmVlZHNDb3B5LFxuICAgICAgICAnbWlzc2luZyBpbWFnZSBkYXRhJylcblxuICAgICAgdGVtcEJpbmQodGV4dHVyZSlcbiAgICAgIHNldFN1YkltYWdlKGltYWdlRGF0YSwgR0xfVEVYVFVSRV8yRCQxLCB4LCB5LCBsZXZlbClcbiAgICAgIHRlbXBSZXN0b3JlKClcblxuICAgICAgZnJlZUltYWdlKGltYWdlRGF0YSlcblxuICAgICAgcmV0dXJuIHJlZ2xUZXh0dXJlMkRcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNpemUgKHdfLCBoXykge1xuICAgICAgdmFyIHcgPSB3XyB8IDBcbiAgICAgIHZhciBoID0gKGhfIHwgMCkgfHwgd1xuICAgICAgaWYgKHcgPT09IHRleHR1cmUud2lkdGggJiYgaCA9PT0gdGV4dHVyZS5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2xUZXh0dXJlMkRcbiAgICAgIH1cblxuICAgICAgcmVnbFRleHR1cmUyRC53aWR0aCA9IHRleHR1cmUud2lkdGggPSB3XG4gICAgICByZWdsVGV4dHVyZTJELmhlaWdodCA9IHRleHR1cmUuaGVpZ2h0ID0gaFxuXG4gICAgICB0ZW1wQmluZCh0ZXh0dXJlKVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgdGV4dHVyZS5taXBtYXNrID4+IGk7ICsraSkge1xuICAgICAgICB2YXIgX3cgPSB3ID4+IGlcbiAgICAgICAgdmFyIF9oID0gaCA+PiBpXG4gICAgICAgIGlmICghX3cgfHwgIV9oKSBicmVha1xuICAgICAgICBnbC50ZXhJbWFnZTJEKFxuICAgICAgICAgIEdMX1RFWFRVUkVfMkQkMSxcbiAgICAgICAgICBpLFxuICAgICAgICAgIHRleHR1cmUuZm9ybWF0LFxuICAgICAgICAgIF93LFxuICAgICAgICAgIF9oLFxuICAgICAgICAgIDAsXG4gICAgICAgICAgdGV4dHVyZS5mb3JtYXQsXG4gICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgIG51bGwpXG4gICAgICB9XG4gICAgICB0ZW1wUmVzdG9yZSgpXG5cbiAgICAgIC8vIGFsc28sIHJlY29tcHV0ZSB0aGUgdGV4dHVyZSBzaXplLlxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIHRleHR1cmUuc3RhdHMuc2l6ZSA9IGdldFRleHR1cmVTaXplKFxuICAgICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQsXG4gICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgIHcsXG4gICAgICAgICAgaCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBmYWxzZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlZ2xUZXh0dXJlMkRcbiAgICB9XG5cbiAgICByZWdsVGV4dHVyZTJEKGEsIGIpXG5cbiAgICByZWdsVGV4dHVyZTJELnN1YmltYWdlID0gc3ViaW1hZ2VcbiAgICByZWdsVGV4dHVyZTJELnJlc2l6ZSA9IHJlc2l6ZVxuICAgIHJlZ2xUZXh0dXJlMkQuX3JlZ2xUeXBlID0gJ3RleHR1cmUyZCdcbiAgICByZWdsVGV4dHVyZTJELl90ZXh0dXJlID0gdGV4dHVyZVxuICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgcmVnbFRleHR1cmUyRC5zdGF0cyA9IHRleHR1cmUuc3RhdHNcbiAgICB9XG4gICAgcmVnbFRleHR1cmUyRC5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGV4dHVyZS5kZWNSZWYoKVxuICAgIH1cblxuICAgIHJldHVybiByZWdsVGV4dHVyZTJEXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVUZXh0dXJlQ3ViZSAoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICAgIHZhciB0ZXh0dXJlID0gbmV3IFJFR0xUZXh0dXJlKEdMX1RFWFRVUkVfQ1VCRV9NQVAkMSlcbiAgICB0ZXh0dXJlU2V0W3RleHR1cmUuaWRdID0gdGV4dHVyZVxuICAgIHN0YXRzLmN1YmVDb3VudCsrXG5cbiAgICB2YXIgZmFjZXMgPSBuZXcgQXJyYXkoNilcblxuICAgIGZ1bmN0aW9uIHJlZ2xUZXh0dXJlQ3ViZSAoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICAgICAgdmFyIGlcbiAgICAgIHZhciB0ZXhJbmZvID0gdGV4dHVyZS50ZXhJbmZvXG4gICAgICBUZXhJbmZvLmNhbGwodGV4SW5mbylcbiAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgZmFjZXNbaV0gPSBhbGxvY01pcE1hcCgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgYTAgPT09ICdudW1iZXInIHx8ICFhMCkge1xuICAgICAgICB2YXIgcyA9IChhMCB8IDApIHx8IDFcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDY7ICsraSkge1xuICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbVNoYXBlKGZhY2VzW2ldLCBzLCBzKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhMCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGExKSB7XG4gICAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KGZhY2VzWzBdLCBhMClcbiAgICAgICAgICBwYXJzZU1pcE1hcEZyb21PYmplY3QoZmFjZXNbMV0sIGExKVxuICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbU9iamVjdChmYWNlc1syXSwgYTIpXG4gICAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KGZhY2VzWzNdLCBhMylcbiAgICAgICAgICBwYXJzZU1pcE1hcEZyb21PYmplY3QoZmFjZXNbNF0sIGE0KVxuICAgICAgICAgIHBhcnNlTWlwTWFwRnJvbU9iamVjdChmYWNlc1s1XSwgYTUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VUZXhJbmZvKHRleEluZm8sIGEwKVxuICAgICAgICAgIHBhcnNlRmxhZ3ModGV4dHVyZSwgYTApXG4gICAgICAgICAgaWYgKCdmYWNlcycgaW4gYTApIHtcbiAgICAgICAgICAgIHZhciBmYWNlSW5wdXQgPSBhMC5mYWNlc1xuICAgICAgICAgICAgY2hlY2skMShBcnJheS5pc0FycmF5KGZhY2VJbnB1dCkgJiYgZmFjZUlucHV0Lmxlbmd0aCA9PT0gNixcbiAgICAgICAgICAgICAgJ2N1YmUgZmFjZXMgbXVzdCBiZSBhIGxlbmd0aCA2IGFycmF5JylcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgICAgICAgY2hlY2skMSh0eXBlb2YgZmFjZUlucHV0W2ldID09PSAnb2JqZWN0JyAmJiAhIWZhY2VJbnB1dFtpXSxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBpbnB1dCBmb3IgY3ViZSBtYXAgZmFjZScpXG4gICAgICAgICAgICAgIGNvcHlGbGFncyhmYWNlc1tpXSwgdGV4dHVyZSlcbiAgICAgICAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KGZhY2VzW2ldLCBmYWNlSW5wdXRbaV0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgICAgICAgcGFyc2VNaXBNYXBGcm9tT2JqZWN0KGZhY2VzW2ldLCBhMClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrJDEucmFpc2UoJ2ludmFsaWQgYXJndW1lbnRzIHRvIGN1YmUgbWFwJylcbiAgICAgIH1cblxuICAgICAgY29weUZsYWdzKHRleHR1cmUsIGZhY2VzWzBdKVxuXG4gICAgICBpZiAoIWxpbWl0cy5ucG90VGV4dHVyZUN1YmUpIHtcbiAgICAgICAgY2hlY2skMShpc1BvdzIkMSh0ZXh0dXJlLndpZHRoKSAmJiBpc1BvdzIkMSh0ZXh0dXJlLmhlaWdodCksICd5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBub24gcG93ZXIgb3IgdHdvIHRleHR1cmUgZGltZW5zaW9ucycpXG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXhJbmZvLmdlbk1pcG1hcHMpIHtcbiAgICAgICAgdGV4dHVyZS5taXBtYXNrID0gKGZhY2VzWzBdLndpZHRoIDw8IDEpIC0gMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dHVyZS5taXBtYXNrID0gZmFjZXNbMF0ubWlwbWFza1xuICAgICAgfVxuXG4gICAgICBjaGVjayQxLnRleHR1cmVDdWJlKHRleHR1cmUsIHRleEluZm8sIGZhY2VzLCBsaW1pdHMpXG4gICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0ID0gZmFjZXNbMF0uaW50ZXJuYWxmb3JtYXRcblxuICAgICAgcmVnbFRleHR1cmVDdWJlLndpZHRoID0gZmFjZXNbMF0ud2lkdGhcbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS5oZWlnaHQgPSBmYWNlc1swXS5oZWlnaHRcblxuICAgICAgdGVtcEJpbmQodGV4dHVyZSlcbiAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgc2V0TWlwTWFwKGZhY2VzW2ldLCBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMSArIGkpXG4gICAgICB9XG4gICAgICBzZXRUZXhJbmZvKHRleEluZm8sIEdMX1RFWFRVUkVfQ1VCRV9NQVAkMSlcbiAgICAgIHRlbXBSZXN0b3JlKClcblxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIHRleHR1cmUuc3RhdHMuc2l6ZSA9IGdldFRleHR1cmVTaXplKFxuICAgICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQsXG4gICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgIHJlZ2xUZXh0dXJlQ3ViZS53aWR0aCxcbiAgICAgICAgICByZWdsVGV4dHVyZUN1YmUuaGVpZ2h0LFxuICAgICAgICAgIHRleEluZm8uZ2VuTWlwbWFwcyxcbiAgICAgICAgICB0cnVlKVxuICAgICAgfVxuXG4gICAgICByZWdsVGV4dHVyZUN1YmUuZm9ybWF0ID0gdGV4dHVyZUZvcm1hdHNJbnZlcnRbdGV4dHVyZS5pbnRlcm5hbGZvcm1hdF1cbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS50eXBlID0gdGV4dHVyZVR5cGVzSW52ZXJ0W3RleHR1cmUudHlwZV1cblxuICAgICAgcmVnbFRleHR1cmVDdWJlLm1hZyA9IG1hZ0ZpbHRlcnNJbnZlcnRbdGV4SW5mby5tYWdGaWx0ZXJdXG4gICAgICByZWdsVGV4dHVyZUN1YmUubWluID0gbWluRmlsdGVyc0ludmVydFt0ZXhJbmZvLm1pbkZpbHRlcl1cblxuICAgICAgcmVnbFRleHR1cmVDdWJlLndyYXBTID0gd3JhcE1vZGVzSW52ZXJ0W3RleEluZm8ud3JhcFNdXG4gICAgICByZWdsVGV4dHVyZUN1YmUud3JhcFQgPSB3cmFwTW9kZXNJbnZlcnRbdGV4SW5mby53cmFwVF1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IDY7ICsraSkge1xuICAgICAgICBmcmVlTWlwTWFwKGZhY2VzW2ldKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVnbFRleHR1cmVDdWJlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3ViaW1hZ2UgKGZhY2UsIGltYWdlLCB4XywgeV8sIGxldmVsXykge1xuICAgICAgY2hlY2skMSghIWltYWdlLCAnbXVzdCBzcGVjaWZ5IGltYWdlIGRhdGEnKVxuICAgICAgY2hlY2skMSh0eXBlb2YgZmFjZSA9PT0gJ251bWJlcicgJiYgZmFjZSA9PT0gKGZhY2UgfCAwKSAmJlxuICAgICAgICBmYWNlID49IDAgJiYgZmFjZSA8IDYsICdpbnZhbGlkIGZhY2UnKVxuXG4gICAgICB2YXIgeCA9IHhfIHwgMFxuICAgICAgdmFyIHkgPSB5XyB8IDBcbiAgICAgIHZhciBsZXZlbCA9IGxldmVsXyB8IDBcblxuICAgICAgdmFyIGltYWdlRGF0YSA9IGFsbG9jSW1hZ2UoKVxuICAgICAgY29weUZsYWdzKGltYWdlRGF0YSwgdGV4dHVyZSlcbiAgICAgIGltYWdlRGF0YS53aWR0aCA9IDBcbiAgICAgIGltYWdlRGF0YS5oZWlnaHQgPSAwXG4gICAgICBwYXJzZUltYWdlKGltYWdlRGF0YSwgaW1hZ2UpXG4gICAgICBpbWFnZURhdGEud2lkdGggPSBpbWFnZURhdGEud2lkdGggfHwgKCh0ZXh0dXJlLndpZHRoID4+IGxldmVsKSAtIHgpXG4gICAgICBpbWFnZURhdGEuaGVpZ2h0ID0gaW1hZ2VEYXRhLmhlaWdodCB8fCAoKHRleHR1cmUuaGVpZ2h0ID4+IGxldmVsKSAtIHkpXG5cbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIHRleHR1cmUudHlwZSA9PT0gaW1hZ2VEYXRhLnR5cGUgJiZcbiAgICAgICAgdGV4dHVyZS5mb3JtYXQgPT09IGltYWdlRGF0YS5mb3JtYXQgJiZcbiAgICAgICAgdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCA9PT0gaW1hZ2VEYXRhLmludGVybmFsZm9ybWF0LFxuICAgICAgICAnaW5jb21wYXRpYmxlIGZvcm1hdCBmb3IgdGV4dHVyZS5zdWJpbWFnZScpXG4gICAgICBjaGVjayQxKFxuICAgICAgICB4ID49IDAgJiYgeSA+PSAwICYmXG4gICAgICAgIHggKyBpbWFnZURhdGEud2lkdGggPD0gdGV4dHVyZS53aWR0aCAmJlxuICAgICAgICB5ICsgaW1hZ2VEYXRhLmhlaWdodCA8PSB0ZXh0dXJlLmhlaWdodCxcbiAgICAgICAgJ3RleHR1cmUuc3ViaW1hZ2Ugd3JpdGUgb3V0IG9mIGJvdW5kcycpXG4gICAgICBjaGVjayQxKFxuICAgICAgICB0ZXh0dXJlLm1pcG1hc2sgJiAoMSA8PCBsZXZlbCksXG4gICAgICAgICdtaXNzaW5nIG1pcG1hcCBkYXRhJylcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIGltYWdlRGF0YS5kYXRhIHx8IGltYWdlRGF0YS5lbGVtZW50IHx8IGltYWdlRGF0YS5uZWVkc0NvcHksXG4gICAgICAgICdtaXNzaW5nIGltYWdlIGRhdGEnKVxuXG4gICAgICB0ZW1wQmluZCh0ZXh0dXJlKVxuICAgICAgc2V0U3ViSW1hZ2UoaW1hZ2VEYXRhLCBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMSArIGZhY2UsIHgsIHksIGxldmVsKVxuICAgICAgdGVtcFJlc3RvcmUoKVxuXG4gICAgICBmcmVlSW1hZ2UoaW1hZ2VEYXRhKVxuXG4gICAgICByZXR1cm4gcmVnbFRleHR1cmVDdWJlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplIChyYWRpdXNfKSB7XG4gICAgICB2YXIgcmFkaXVzID0gcmFkaXVzXyB8IDBcbiAgICAgIGlmIChyYWRpdXMgPT09IHRleHR1cmUud2lkdGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS53aWR0aCA9IHRleHR1cmUud2lkdGggPSByYWRpdXNcbiAgICAgIHJlZ2xUZXh0dXJlQ3ViZS5oZWlnaHQgPSB0ZXh0dXJlLmhlaWdodCA9IHJhZGl1c1xuXG4gICAgICB0ZW1wQmluZCh0ZXh0dXJlKVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IHRleHR1cmUubWlwbWFzayA+PiBqOyArK2opIHtcbiAgICAgICAgICBnbC50ZXhJbWFnZTJEKFxuICAgICAgICAgICAgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDEgKyBpLFxuICAgICAgICAgICAgaixcbiAgICAgICAgICAgIHRleHR1cmUuZm9ybWF0LFxuICAgICAgICAgICAgcmFkaXVzID4+IGosXG4gICAgICAgICAgICByYWRpdXMgPj4gaixcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0ZXh0dXJlLmZvcm1hdCxcbiAgICAgICAgICAgIHRleHR1cmUudHlwZSxcbiAgICAgICAgICAgIG51bGwpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRlbXBSZXN0b3JlKClcblxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIHRleHR1cmUuc3RhdHMuc2l6ZSA9IGdldFRleHR1cmVTaXplKFxuICAgICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQsXG4gICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgIHJlZ2xUZXh0dXJlQ3ViZS53aWR0aCxcbiAgICAgICAgICByZWdsVGV4dHVyZUN1YmUuaGVpZ2h0LFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRydWUpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWdsVGV4dHVyZUN1YmVcbiAgICB9XG5cbiAgICByZWdsVGV4dHVyZUN1YmUoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSlcblxuICAgIHJlZ2xUZXh0dXJlQ3ViZS5zdWJpbWFnZSA9IHN1YmltYWdlXG4gICAgcmVnbFRleHR1cmVDdWJlLnJlc2l6ZSA9IHJlc2l6ZVxuICAgIHJlZ2xUZXh0dXJlQ3ViZS5fcmVnbFR5cGUgPSAndGV4dHVyZUN1YmUnXG4gICAgcmVnbFRleHR1cmVDdWJlLl90ZXh0dXJlID0gdGV4dHVyZVxuICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgcmVnbFRleHR1cmVDdWJlLnN0YXRzID0gdGV4dHVyZS5zdGF0c1xuICAgIH1cbiAgICByZWdsVGV4dHVyZUN1YmUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRleHR1cmUuZGVjUmVmKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVnbFRleHR1cmVDdWJlXG4gIH1cblxuICAvLyBDYWxsZWQgd2hlbiByZWdsIGlzIGRlc3Ryb3llZFxuICBmdW5jdGlvbiBkZXN0cm95VGV4dHVyZXMgKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtVGV4VW5pdHM7ICsraSkge1xuICAgICAgZ2wuYWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCQxICsgaSlcbiAgICAgIGdsLmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQkMSwgbnVsbClcbiAgICAgIHRleHR1cmVVbml0c1tpXSA9IG51bGxcbiAgICB9XG4gICAgdmFsdWVzKHRleHR1cmVTZXQpLmZvckVhY2goZGVzdHJveSlcblxuICAgIHN0YXRzLmN1YmVDb3VudCA9IDBcbiAgICBzdGF0cy50ZXh0dXJlQ291bnQgPSAwXG4gIH1cblxuICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICBzdGF0cy5nZXRUb3RhbFRleHR1cmVTaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRvdGFsID0gMFxuICAgICAgT2JqZWN0LmtleXModGV4dHVyZVNldCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHRvdGFsICs9IHRleHR1cmVTZXRba2V5XS5zdGF0cy5zaXplXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHRvdGFsXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdG9yZVRleHR1cmVzICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVRleFVuaXRzOyArK2kpIHtcbiAgICAgIHZhciB0ZXggPSB0ZXh0dXJlVW5pdHNbaV1cbiAgICAgIGlmICh0ZXgpIHtcbiAgICAgICAgdGV4LmJpbmRDb3VudCA9IDBcbiAgICAgICAgdGV4LnVuaXQgPSAtMVxuICAgICAgICB0ZXh0dXJlVW5pdHNbaV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFsdWVzKHRleHR1cmVTZXQpLmZvckVhY2goZnVuY3Rpb24gKHRleHR1cmUpIHtcbiAgICAgIHRleHR1cmUudGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKVxuICAgICAgZ2wuYmluZFRleHR1cmUodGV4dHVyZS50YXJnZXQsIHRleHR1cmUudGV4dHVyZSlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7ICsraSkge1xuICAgICAgICBpZiAoKHRleHR1cmUubWlwbWFzayAmICgxIDw8IGkpKSA9PT0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHR1cmUudGFyZ2V0ID09PSBHTF9URVhUVVJFXzJEJDEpIHtcbiAgICAgICAgICBnbC50ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQkMSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0LFxuICAgICAgICAgICAgdGV4dHVyZS53aWR0aCA+PiBpLFxuICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPj4gaSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0ZXh0dXJlLmludGVybmFsZm9ybWF0LFxuICAgICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgICAgbnVsbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDY7ICsraikge1xuICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMSArIGosXG4gICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgIHRleHR1cmUuaW50ZXJuYWxmb3JtYXQsXG4gICAgICAgICAgICAgIHRleHR1cmUud2lkdGggPj4gaSxcbiAgICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPj4gaSxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgdGV4dHVyZS5pbnRlcm5hbGZvcm1hdCxcbiAgICAgICAgICAgICAgdGV4dHVyZS50eXBlLFxuICAgICAgICAgICAgICBudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0VGV4SW5mbyh0ZXh0dXJlLnRleEluZm8sIHRleHR1cmUudGFyZ2V0KVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiByZWZyZXNoVGV4dHVyZXMgKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtVGV4VW5pdHM7ICsraSkge1xuICAgICAgdmFyIHRleCA9IHRleHR1cmVVbml0c1tpXVxuICAgICAgaWYgKHRleCkge1xuICAgICAgICB0ZXguYmluZENvdW50ID0gMFxuICAgICAgICB0ZXgudW5pdCA9IC0xXG4gICAgICAgIHRleHR1cmVVbml0c1tpXSA9IG51bGxcbiAgICAgIH1cbiAgICAgIGdsLmFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTAkMSArIGkpXG4gICAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFXzJEJDEsIG51bGwpXG4gICAgICBnbC5iaW5kVGV4dHVyZShHTF9URVhUVVJFX0NVQkVfTUFQJDEsIG51bGwpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGUyRDogY3JlYXRlVGV4dHVyZTJELFxuICAgIGNyZWF0ZUN1YmU6IGNyZWF0ZVRleHR1cmVDdWJlLFxuICAgIGNsZWFyOiBkZXN0cm95VGV4dHVyZXMsXG4gICAgZ2V0VGV4dHVyZTogZnVuY3Rpb24gKHdyYXBwZXIpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcbiAgICByZXN0b3JlOiByZXN0b3JlVGV4dHVyZXMsXG4gICAgcmVmcmVzaDogcmVmcmVzaFRleHR1cmVzXG4gIH1cbn1cblxudmFyIEdMX1JFTkRFUkJVRkZFUiA9IDB4OEQ0MVxuXG52YXIgR0xfUkdCQTQkMSA9IDB4ODA1NlxudmFyIEdMX1JHQjVfQTEkMSA9IDB4ODA1N1xudmFyIEdMX1JHQjU2NSQxID0gMHg4RDYyXG52YXIgR0xfREVQVEhfQ09NUE9ORU5UMTYgPSAweDgxQTVcbnZhciBHTF9TVEVOQ0lMX0lOREVYOCA9IDB4OEQ0OFxudmFyIEdMX0RFUFRIX1NURU5DSUwkMSA9IDB4ODRGOVxuXG52YXIgR0xfU1JHQjhfQUxQSEE4X0VYVCA9IDB4OEM0M1xuXG52YXIgR0xfUkdCQTMyRl9FWFQgPSAweDg4MTRcblxudmFyIEdMX1JHQkExNkZfRVhUID0gMHg4ODFBXG52YXIgR0xfUkdCMTZGX0VYVCA9IDB4ODgxQlxuXG52YXIgRk9STUFUX1NJWkVTID0gW11cblxuRk9STUFUX1NJWkVTW0dMX1JHQkE0JDFdID0gMlxuRk9STUFUX1NJWkVTW0dMX1JHQjVfQTEkMV0gPSAyXG5GT1JNQVRfU0laRVNbR0xfUkdCNTY1JDFdID0gMlxuXG5GT1JNQVRfU0laRVNbR0xfREVQVEhfQ09NUE9ORU5UMTZdID0gMlxuRk9STUFUX1NJWkVTW0dMX1NURU5DSUxfSU5ERVg4XSA9IDFcbkZPUk1BVF9TSVpFU1tHTF9ERVBUSF9TVEVOQ0lMJDFdID0gNFxuXG5GT1JNQVRfU0laRVNbR0xfU1JHQjhfQUxQSEE4X0VYVF0gPSA0XG5GT1JNQVRfU0laRVNbR0xfUkdCQTMyRl9FWFRdID0gMTZcbkZPUk1BVF9TSVpFU1tHTF9SR0JBMTZGX0VYVF0gPSA4XG5GT1JNQVRfU0laRVNbR0xfUkdCMTZGX0VYVF0gPSA2XG5cbmZ1bmN0aW9uIGdldFJlbmRlcmJ1ZmZlclNpemUgKGZvcm1hdCwgd2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gRk9STUFUX1NJWkVTW2Zvcm1hdF0gKiB3aWR0aCAqIGhlaWdodFxufVxuXG52YXIgd3JhcFJlbmRlcmJ1ZmZlcnMgPSBmdW5jdGlvbiAoZ2wsIGV4dGVuc2lvbnMsIGxpbWl0cywgc3RhdHMsIGNvbmZpZykge1xuICB2YXIgZm9ybWF0VHlwZXMgPSB7XG4gICAgJ3JnYmE0JzogR0xfUkdCQTQkMSxcbiAgICAncmdiNTY1JzogR0xfUkdCNTY1JDEsXG4gICAgJ3JnYjUgYTEnOiBHTF9SR0I1X0ExJDEsXG4gICAgJ2RlcHRoJzogR0xfREVQVEhfQ09NUE9ORU5UMTYsXG4gICAgJ3N0ZW5jaWwnOiBHTF9TVEVOQ0lMX0lOREVYOCxcbiAgICAnZGVwdGggc3RlbmNpbCc6IEdMX0RFUFRIX1NURU5DSUwkMVxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMuZXh0X3NyZ2IpIHtcbiAgICBmb3JtYXRUeXBlc1snc3JnYmEnXSA9IEdMX1NSR0I4X0FMUEhBOF9FWFRcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCkge1xuICAgIGZvcm1hdFR5cGVzWydyZ2JhMTZmJ10gPSBHTF9SR0JBMTZGX0VYVFxuICAgIGZvcm1hdFR5cGVzWydyZ2IxNmYnXSA9IEdMX1JHQjE2Rl9FWFRcbiAgfVxuXG4gIGlmIChleHRlbnNpb25zLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCkge1xuICAgIGZvcm1hdFR5cGVzWydyZ2JhMzJmJ10gPSBHTF9SR0JBMzJGX0VYVFxuICB9XG5cbiAgdmFyIGZvcm1hdFR5cGVzSW52ZXJ0ID0gW11cbiAgT2JqZWN0LmtleXMoZm9ybWF0VHlwZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciB2YWwgPSBmb3JtYXRUeXBlc1trZXldXG4gICAgZm9ybWF0VHlwZXNJbnZlcnRbdmFsXSA9IGtleVxuICB9KVxuXG4gIHZhciByZW5kZXJidWZmZXJDb3VudCA9IDBcbiAgdmFyIHJlbmRlcmJ1ZmZlclNldCA9IHt9XG5cbiAgZnVuY3Rpb24gUkVHTFJlbmRlcmJ1ZmZlciAocmVuZGVyYnVmZmVyKSB7XG4gICAgdGhpcy5pZCA9IHJlbmRlcmJ1ZmZlckNvdW50KytcbiAgICB0aGlzLnJlZkNvdW50ID0gMVxuXG4gICAgdGhpcy5yZW5kZXJidWZmZXIgPSByZW5kZXJidWZmZXJcblxuICAgIHRoaXMuZm9ybWF0ID0gR0xfUkdCQTQkMVxuICAgIHRoaXMud2lkdGggPSAwXG4gICAgdGhpcy5oZWlnaHQgPSAwXG5cbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIHRoaXMuc3RhdHMgPSB7IHNpemU6IDAgfVxuICAgIH1cbiAgfVxuXG4gIFJFR0xSZW5kZXJidWZmZXIucHJvdG90eXBlLmRlY1JlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoLS10aGlzLnJlZkNvdW50IDw9IDApIHtcbiAgICAgIGRlc3Ryb3kodGhpcylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95IChyYikge1xuICAgIHZhciBoYW5kbGUgPSByYi5yZW5kZXJidWZmZXJcbiAgICBjaGVjayQxKGhhbmRsZSwgJ211c3Qgbm90IGRvdWJsZSBkZXN0cm95IHJlbmRlcmJ1ZmZlcicpXG4gICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG51bGwpXG4gICAgZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKGhhbmRsZSlcbiAgICByYi5yZW5kZXJidWZmZXIgPSBudWxsXG4gICAgcmIucmVmQ291bnQgPSAwXG4gICAgZGVsZXRlIHJlbmRlcmJ1ZmZlclNldFtyYi5pZF1cbiAgICBzdGF0cy5yZW5kZXJidWZmZXJDb3VudC0tXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSZW5kZXJidWZmZXIgKGEsIGIpIHtcbiAgICB2YXIgcmVuZGVyYnVmZmVyID0gbmV3IFJFR0xSZW5kZXJidWZmZXIoZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkpXG4gICAgcmVuZGVyYnVmZmVyU2V0W3JlbmRlcmJ1ZmZlci5pZF0gPSByZW5kZXJidWZmZXJcbiAgICBzdGF0cy5yZW5kZXJidWZmZXJDb3VudCsrXG5cbiAgICBmdW5jdGlvbiByZWdsUmVuZGVyYnVmZmVyIChhLCBiKSB7XG4gICAgICB2YXIgdyA9IDBcbiAgICAgIHZhciBoID0gMFxuICAgICAgdmFyIGZvcm1hdCA9IEdMX1JHQkE0JDFcblxuICAgICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiBhKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gYVxuICAgICAgICBpZiAoJ3NoYXBlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgdmFyIHNoYXBlID0gb3B0aW9ucy5zaGFwZVxuICAgICAgICAgIGNoZWNrJDEoQXJyYXkuaXNBcnJheShzaGFwZSkgJiYgc2hhcGUubGVuZ3RoID49IDIsXG4gICAgICAgICAgICAnaW52YWxpZCByZW5kZXJidWZmZXIgc2hhcGUnKVxuICAgICAgICAgIHcgPSBzaGFwZVswXSB8IDBcbiAgICAgICAgICBoID0gc2hhcGVbMV0gfCAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCdyYWRpdXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHcgPSBoID0gb3B0aW9ucy5yYWRpdXMgfCAwXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgnd2lkdGgnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHcgPSBvcHRpb25zLndpZHRoIHwgMFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ2hlaWdodCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgaCA9IG9wdGlvbnMuaGVpZ2h0IHwgMFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2Zvcm1hdCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgIGNoZWNrJDEucGFyYW1ldGVyKG9wdGlvbnMuZm9ybWF0LCBmb3JtYXRUeXBlcyxcbiAgICAgICAgICAgICdpbnZhbGlkIHJlbmRlcmJ1ZmZlciBmb3JtYXQnKVxuICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdFR5cGVzW29wdGlvbnMuZm9ybWF0XVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhID09PSAnbnVtYmVyJykge1xuICAgICAgICB3ID0gYSB8IDBcbiAgICAgICAgaWYgKHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGggPSBiIHwgMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGggPSB3XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWEpIHtcbiAgICAgICAgdyA9IGggPSAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVjayQxLnJhaXNlKCdpbnZhbGlkIGFyZ3VtZW50cyB0byByZW5kZXJidWZmZXIgY29uc3RydWN0b3InKVxuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBzaGFwZVxuICAgICAgY2hlY2skMShcbiAgICAgICAgdyA+IDAgJiYgaCA+IDAgJiZcbiAgICAgICAgdyA8PSBsaW1pdHMubWF4UmVuZGVyYnVmZmVyU2l6ZSAmJiBoIDw9IGxpbWl0cy5tYXhSZW5kZXJidWZmZXJTaXplLFxuICAgICAgICAnaW52YWxpZCByZW5kZXJidWZmZXIgc2l6ZScpXG5cbiAgICAgIGlmICh3ID09PSByZW5kZXJidWZmZXIud2lkdGggJiZcbiAgICAgICAgICBoID09PSByZW5kZXJidWZmZXIuaGVpZ2h0ICYmXG4gICAgICAgICAgZm9ybWF0ID09PSByZW5kZXJidWZmZXIuZm9ybWF0KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZWdsUmVuZGVyYnVmZmVyLndpZHRoID0gcmVuZGVyYnVmZmVyLndpZHRoID0gd1xuICAgICAgcmVnbFJlbmRlcmJ1ZmZlci5oZWlnaHQgPSByZW5kZXJidWZmZXIuaGVpZ2h0ID0gaFxuICAgICAgcmVuZGVyYnVmZmVyLmZvcm1hdCA9IGZvcm1hdFxuXG4gICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLnJlbmRlcmJ1ZmZlcilcbiAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBmb3JtYXQsIHcsIGgpXG5cbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIGdsLmdldEVycm9yKCkgPT09IDAsXG4gICAgICAgICdpbnZhbGlkIHJlbmRlciBidWZmZXIgZm9ybWF0JylcblxuICAgICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICAgIHJlbmRlcmJ1ZmZlci5zdGF0cy5zaXplID0gZ2V0UmVuZGVyYnVmZmVyU2l6ZShyZW5kZXJidWZmZXIuZm9ybWF0LCByZW5kZXJidWZmZXIud2lkdGgsIHJlbmRlcmJ1ZmZlci5oZWlnaHQpXG4gICAgICB9XG4gICAgICByZWdsUmVuZGVyYnVmZmVyLmZvcm1hdCA9IGZvcm1hdFR5cGVzSW52ZXJ0W3JlbmRlcmJ1ZmZlci5mb3JtYXRdXG5cbiAgICAgIHJldHVybiByZWdsUmVuZGVyYnVmZmVyXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplICh3XywgaF8pIHtcbiAgICAgIHZhciB3ID0gd18gfCAwXG4gICAgICB2YXIgaCA9IChoXyB8IDApIHx8IHdcblxuICAgICAgaWYgKHcgPT09IHJlbmRlcmJ1ZmZlci53aWR0aCAmJiBoID09PSByZW5kZXJidWZmZXIuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiByZWdsUmVuZGVyYnVmZmVyXG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIHNoYXBlXG4gICAgICBjaGVjayQxKFxuICAgICAgICB3ID4gMCAmJiBoID4gMCAmJlxuICAgICAgICB3IDw9IGxpbWl0cy5tYXhSZW5kZXJidWZmZXJTaXplICYmIGggPD0gbGltaXRzLm1heFJlbmRlcmJ1ZmZlclNpemUsXG4gICAgICAgICdpbnZhbGlkIHJlbmRlcmJ1ZmZlciBzaXplJylcblxuICAgICAgcmVnbFJlbmRlcmJ1ZmZlci53aWR0aCA9IHJlbmRlcmJ1ZmZlci53aWR0aCA9IHdcbiAgICAgIHJlZ2xSZW5kZXJidWZmZXIuaGVpZ2h0ID0gcmVuZGVyYnVmZmVyLmhlaWdodCA9IGhcblxuICAgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlci5yZW5kZXJidWZmZXIpXG4gICAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLmZvcm1hdCwgdywgaClcblxuICAgICAgY2hlY2skMShcbiAgICAgICAgZ2wuZ2V0RXJyb3IoKSA9PT0gMCxcbiAgICAgICAgJ2ludmFsaWQgcmVuZGVyIGJ1ZmZlciBmb3JtYXQnKVxuXG4gICAgICAvLyBhbHNvLCByZWNvbXB1dGUgc2l6ZS5cbiAgICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgICByZW5kZXJidWZmZXIuc3RhdHMuc2l6ZSA9IGdldFJlbmRlcmJ1ZmZlclNpemUoXG4gICAgICAgICAgcmVuZGVyYnVmZmVyLmZvcm1hdCwgcmVuZGVyYnVmZmVyLndpZHRoLCByZW5kZXJidWZmZXIuaGVpZ2h0KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVnbFJlbmRlcmJ1ZmZlclxuICAgIH1cblxuICAgIHJlZ2xSZW5kZXJidWZmZXIoYSwgYilcblxuICAgIHJlZ2xSZW5kZXJidWZmZXIucmVzaXplID0gcmVzaXplXG4gICAgcmVnbFJlbmRlcmJ1ZmZlci5fcmVnbFR5cGUgPSAncmVuZGVyYnVmZmVyJ1xuICAgIHJlZ2xSZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlciA9IHJlbmRlcmJ1ZmZlclxuICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgcmVnbFJlbmRlcmJ1ZmZlci5zdGF0cyA9IHJlbmRlcmJ1ZmZlci5zdGF0c1xuICAgIH1cbiAgICByZWdsUmVuZGVyYnVmZmVyLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZW5kZXJidWZmZXIuZGVjUmVmKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVnbFJlbmRlcmJ1ZmZlclxuICB9XG5cbiAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgc3RhdHMuZ2V0VG90YWxSZW5kZXJidWZmZXJTaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRvdGFsID0gMFxuICAgICAgT2JqZWN0LmtleXMocmVuZGVyYnVmZmVyU2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdG90YWwgKz0gcmVuZGVyYnVmZmVyU2V0W2tleV0uc3RhdHMuc2l6ZVxuICAgICAgfSlcbiAgICAgIHJldHVybiB0b3RhbFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3RvcmVSZW5kZXJidWZmZXJzICgpIHtcbiAgICB2YWx1ZXMocmVuZGVyYnVmZmVyU2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChyYikge1xuICAgICAgcmIucmVuZGVyYnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKClcbiAgICAgIGdsLmJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByYi5yZW5kZXJidWZmZXIpXG4gICAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgcmIuZm9ybWF0LCByYi53aWR0aCwgcmIuaGVpZ2h0KVxuICAgIH0pXG4gICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG51bGwpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyZWF0ZTogY3JlYXRlUmVuZGVyYnVmZmVyLFxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YWx1ZXMocmVuZGVyYnVmZmVyU2V0KS5mb3JFYWNoKGRlc3Ryb3kpXG4gICAgfSxcbiAgICByZXN0b3JlOiByZXN0b3JlUmVuZGVyYnVmZmVyc1xuICB9XG59XG5cbi8vIFdlIHN0b3JlIHRoZXNlIGNvbnN0YW50cyBzbyB0aGF0IHRoZSBtaW5pZmllciBjYW4gaW5saW5lIHRoZW1cbnZhciBHTF9GUkFNRUJVRkZFUiQxID0gMHg4RDQwXG52YXIgR0xfUkVOREVSQlVGRkVSJDEgPSAweDhENDFcblxudmFyIEdMX1RFWFRVUkVfMkQkMiA9IDB4MERFMVxudmFyIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQyID0gMHg4NTE1XG5cbnZhciBHTF9DT0xPUl9BVFRBQ0hNRU5UMCQxID0gMHg4Q0UwXG52YXIgR0xfREVQVEhfQVRUQUNITUVOVCA9IDB4OEQwMFxudmFyIEdMX1NURU5DSUxfQVRUQUNITUVOVCA9IDB4OEQyMFxudmFyIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVCA9IDB4ODIxQVxuXG52YXIgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUkMSA9IDB4OENENVxudmFyIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCA9IDB4OENENlxudmFyIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UID0gMHg4Q0Q3XG52YXIgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TID0gMHg4Q0Q5XG52YXIgR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgPSAweDhDRERcblxudmFyIEdMX0hBTEZfRkxPQVRfT0VTJDIgPSAweDhENjFcbnZhciBHTF9VTlNJR05FRF9CWVRFJDYgPSAweDE0MDFcbnZhciBHTF9GTE9BVCQ1ID0gMHgxNDA2XG5cbnZhciBHTF9SR0IkMSA9IDB4MTkwN1xudmFyIEdMX1JHQkEkMiA9IDB4MTkwOFxuXG52YXIgR0xfREVQVEhfQ09NUE9ORU5UJDEgPSAweDE5MDJcblxudmFyIGNvbG9yVGV4dHVyZUZvcm1hdEVudW1zID0gW1xuICBHTF9SR0IkMSxcbiAgR0xfUkdCQSQyXG5dXG5cbi8vIGZvciBldmVyeSB0ZXh0dXJlIGZvcm1hdCwgc3RvcmVcbi8vIHRoZSBudW1iZXIgb2YgY2hhbm5lbHNcbnZhciB0ZXh0dXJlRm9ybWF0Q2hhbm5lbHMgPSBbXVxudGV4dHVyZUZvcm1hdENoYW5uZWxzW0dMX1JHQkEkMl0gPSA0XG50ZXh0dXJlRm9ybWF0Q2hhbm5lbHNbR0xfUkdCJDFdID0gM1xuXG4vLyBmb3IgZXZlcnkgdGV4dHVyZSB0eXBlLCBzdG9yZVxuLy8gdGhlIHNpemUgaW4gYnl0ZXMuXG52YXIgdGV4dHVyZVR5cGVTaXplcyA9IFtdXG50ZXh0dXJlVHlwZVNpemVzW0dMX1VOU0lHTkVEX0JZVEUkNl0gPSAxXG50ZXh0dXJlVHlwZVNpemVzW0dMX0ZMT0FUJDVdID0gNFxudGV4dHVyZVR5cGVTaXplc1tHTF9IQUxGX0ZMT0FUX09FUyQyXSA9IDJcblxudmFyIEdMX1JHQkE0JDIgPSAweDgwNTZcbnZhciBHTF9SR0I1X0ExJDIgPSAweDgwNTdcbnZhciBHTF9SR0I1NjUkMiA9IDB4OEQ2MlxudmFyIEdMX0RFUFRIX0NPTVBPTkVOVDE2JDEgPSAweDgxQTVcbnZhciBHTF9TVEVOQ0lMX0lOREVYOCQxID0gMHg4RDQ4XG52YXIgR0xfREVQVEhfU1RFTkNJTCQyID0gMHg4NEY5XG5cbnZhciBHTF9TUkdCOF9BTFBIQThfRVhUJDEgPSAweDhDNDNcblxudmFyIEdMX1JHQkEzMkZfRVhUJDEgPSAweDg4MTRcblxudmFyIEdMX1JHQkExNkZfRVhUJDEgPSAweDg4MUFcbnZhciBHTF9SR0IxNkZfRVhUJDEgPSAweDg4MUJcblxudmFyIGNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0RW51bXMgPSBbXG4gIEdMX1JHQkE0JDIsXG4gIEdMX1JHQjVfQTEkMixcbiAgR0xfUkdCNTY1JDIsXG4gIEdMX1NSR0I4X0FMUEhBOF9FWFQkMSxcbiAgR0xfUkdCQTE2Rl9FWFQkMSxcbiAgR0xfUkdCMTZGX0VYVCQxLFxuICBHTF9SR0JBMzJGX0VYVCQxXG5dXG5cbnZhciBzdGF0dXNDb2RlID0ge31cbnN0YXR1c0NvZGVbR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUkMV0gPSAnY29tcGxldGUnXG5zdGF0dXNDb2RlW0dMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVF0gPSAnaW5jb21wbGV0ZSBhdHRhY2htZW50J1xuc3RhdHVzQ29kZVtHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlNdID0gJ2luY29tcGxldGUgZGltZW5zaW9ucydcbnN0YXR1c0NvZGVbR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlRdID0gJ2luY29tcGxldGUsIG1pc3NpbmcgYXR0YWNobWVudCdcbnN0YXR1c0NvZGVbR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURURdID0gJ3Vuc3VwcG9ydGVkJ1xuXG5mdW5jdGlvbiB3cmFwRkJPU3RhdGUgKFxuICBnbCxcbiAgZXh0ZW5zaW9ucyxcbiAgbGltaXRzLFxuICB0ZXh0dXJlU3RhdGUsXG4gIHJlbmRlcmJ1ZmZlclN0YXRlLFxuICBzdGF0cykge1xuICB2YXIgZnJhbWVidWZmZXJTdGF0ZSA9IHtcbiAgICBjdXI6IG51bGwsXG4gICAgbmV4dDogbnVsbCxcbiAgICBkaXJ0eTogZmFsc2UsXG4gICAgc2V0RkJPOiBudWxsXG4gIH1cblxuICB2YXIgY29sb3JUZXh0dXJlRm9ybWF0cyA9IFsncmdiYSddXG4gIHZhciBjb2xvclJlbmRlcmJ1ZmZlckZvcm1hdHMgPSBbJ3JnYmE0JywgJ3JnYjU2NScsICdyZ2I1IGExJ11cblxuICBpZiAoZXh0ZW5zaW9ucy5leHRfc3JnYikge1xuICAgIGNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0cy5wdXNoKCdzcmdiYScpXG4gIH1cblxuICBpZiAoZXh0ZW5zaW9ucy5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQpIHtcbiAgICBjb2xvclJlbmRlcmJ1ZmZlckZvcm1hdHMucHVzaCgncmdiYTE2ZicsICdyZ2IxNmYnKVxuICB9XG5cbiAgaWYgKGV4dGVuc2lvbnMud2ViZ2xfY29sb3JfYnVmZmVyX2Zsb2F0KSB7XG4gICAgY29sb3JSZW5kZXJidWZmZXJGb3JtYXRzLnB1c2goJ3JnYmEzMmYnKVxuICB9XG5cbiAgdmFyIGNvbG9yVHlwZXMgPSBbJ3VpbnQ4J11cbiAgaWYgKGV4dGVuc2lvbnMub2VzX3RleHR1cmVfaGFsZl9mbG9hdCkge1xuICAgIGNvbG9yVHlwZXMucHVzaCgnaGFsZiBmbG9hdCcsICdmbG9hdDE2JylcbiAgfVxuICBpZiAoZXh0ZW5zaW9ucy5vZXNfdGV4dHVyZV9mbG9hdCkge1xuICAgIGNvbG9yVHlwZXMucHVzaCgnZmxvYXQnLCAnZmxvYXQzMicpXG4gIH1cblxuICBmdW5jdGlvbiBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQgKHRhcmdldCwgdGV4dHVyZSwgcmVuZGVyYnVmZmVyKSB7XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXRcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlXG4gICAgdGhpcy5yZW5kZXJidWZmZXIgPSByZW5kZXJidWZmZXJcblxuICAgIHZhciB3ID0gMFxuICAgIHZhciBoID0gMFxuICAgIGlmICh0ZXh0dXJlKSB7XG4gICAgICB3ID0gdGV4dHVyZS53aWR0aFxuICAgICAgaCA9IHRleHR1cmUuaGVpZ2h0XG4gICAgfSBlbHNlIGlmIChyZW5kZXJidWZmZXIpIHtcbiAgICAgIHcgPSByZW5kZXJidWZmZXIud2lkdGhcbiAgICAgIGggPSByZW5kZXJidWZmZXIuaGVpZ2h0XG4gICAgfVxuICAgIHRoaXMud2lkdGggPSB3XG4gICAgdGhpcy5oZWlnaHQgPSBoXG4gIH1cblxuICBmdW5jdGlvbiBkZWNSZWYgKGF0dGFjaG1lbnQpIHtcbiAgICBpZiAoYXR0YWNobWVudCkge1xuICAgICAgaWYgKGF0dGFjaG1lbnQudGV4dHVyZSkge1xuICAgICAgICBhdHRhY2htZW50LnRleHR1cmUuX3RleHR1cmUuZGVjUmVmKClcbiAgICAgIH1cbiAgICAgIGlmIChhdHRhY2htZW50LnJlbmRlcmJ1ZmZlcikge1xuICAgICAgICBhdHRhY2htZW50LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmRlY1JlZigpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5jUmVmQW5kQ2hlY2tTaGFwZSAoYXR0YWNobWVudCwgd2lkdGgsIGhlaWdodCkge1xuICAgIGlmICghYXR0YWNobWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChhdHRhY2htZW50LnRleHR1cmUpIHtcbiAgICAgIHZhciB0ZXh0dXJlID0gYXR0YWNobWVudC50ZXh0dXJlLl90ZXh0dXJlXG4gICAgICB2YXIgdHcgPSBNYXRoLm1heCgxLCB0ZXh0dXJlLndpZHRoKVxuICAgICAgdmFyIHRoID0gTWF0aC5tYXgoMSwgdGV4dHVyZS5oZWlnaHQpXG4gICAgICBjaGVjayQxKHR3ID09PSB3aWR0aCAmJiB0aCA9PT0gaGVpZ2h0LFxuICAgICAgICAnaW5jb25zaXN0ZW50IHdpZHRoL2hlaWdodCBmb3Igc3VwcGxpZWQgdGV4dHVyZScpXG4gICAgICB0ZXh0dXJlLnJlZkNvdW50ICs9IDFcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJlbmRlcmJ1ZmZlciA9IGF0dGFjaG1lbnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXJcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIHJlbmRlcmJ1ZmZlci53aWR0aCA9PT0gd2lkdGggJiYgcmVuZGVyYnVmZmVyLmhlaWdodCA9PT0gaGVpZ2h0LFxuICAgICAgICAnaW5jb25zaXN0ZW50IHdpZHRoL2hlaWdodCBmb3IgcmVuZGVyYnVmZmVyJylcbiAgICAgIHJlbmRlcmJ1ZmZlci5yZWZDb3VudCArPSAxXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXR0YWNoIChsb2NhdGlvbiwgYXR0YWNobWVudCkge1xuICAgIGlmIChhdHRhY2htZW50KSB7XG4gICAgICBpZiAoYXR0YWNobWVudC50ZXh0dXJlKSB7XG4gICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgICAgIEdMX0ZSQU1FQlVGRkVSJDEsXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgYXR0YWNobWVudC50YXJnZXQsXG4gICAgICAgICAgYXR0YWNobWVudC50ZXh0dXJlLl90ZXh0dXJlLnRleHR1cmUsXG4gICAgICAgICAgMClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKFxuICAgICAgICAgIEdMX0ZSQU1FQlVGRkVSJDEsXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgR0xfUkVOREVSQlVGRkVSJDEsXG4gICAgICAgICAgYXR0YWNobWVudC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5yZW5kZXJidWZmZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VBdHRhY2htZW50IChhdHRhY2htZW50KSB7XG4gICAgdmFyIHRhcmdldCA9IEdMX1RFWFRVUkVfMkQkMlxuICAgIHZhciB0ZXh0dXJlID0gbnVsbFxuICAgIHZhciByZW5kZXJidWZmZXIgPSBudWxsXG5cbiAgICB2YXIgZGF0YSA9IGF0dGFjaG1lbnRcbiAgICBpZiAodHlwZW9mIGF0dGFjaG1lbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICBkYXRhID0gYXR0YWNobWVudC5kYXRhXG4gICAgICBpZiAoJ3RhcmdldCcgaW4gYXR0YWNobWVudCkge1xuICAgICAgICB0YXJnZXQgPSBhdHRhY2htZW50LnRhcmdldCB8IDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVjayQxLnR5cGUoZGF0YSwgJ2Z1bmN0aW9uJywgJ2ludmFsaWQgYXR0YWNobWVudCBkYXRhJylcblxuICAgIHZhciB0eXBlID0gZGF0YS5fcmVnbFR5cGVcbiAgICBpZiAodHlwZSA9PT0gJ3RleHR1cmUyZCcpIHtcbiAgICAgIHRleHR1cmUgPSBkYXRhXG4gICAgICBjaGVjayQxKHRhcmdldCA9PT0gR0xfVEVYVFVSRV8yRCQyKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RleHR1cmVDdWJlJykge1xuICAgICAgdGV4dHVyZSA9IGRhdGFcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIHRhcmdldCA+PSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMiAmJlxuICAgICAgICB0YXJnZXQgPCBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMiArIDYsXG4gICAgICAgICdpbnZhbGlkIGN1YmUgbWFwIHRhcmdldCcpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAncmVuZGVyYnVmZmVyJykge1xuICAgICAgcmVuZGVyYnVmZmVyID0gZGF0YVxuICAgICAgdGFyZ2V0ID0gR0xfUkVOREVSQlVGRkVSJDFcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2skMS5yYWlzZSgnaW52YWxpZCByZWdsIG9iamVjdCBmb3IgYXR0YWNobWVudCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQodGFyZ2V0LCB0ZXh0dXJlLCByZW5kZXJidWZmZXIpXG4gIH1cblxuICBmdW5jdGlvbiBhbGxvY0F0dGFjaG1lbnQgKFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBpc1RleHR1cmUsXG4gICAgZm9ybWF0LFxuICAgIHR5cGUpIHtcbiAgICBpZiAoaXNUZXh0dXJlKSB7XG4gICAgICB2YXIgdGV4dHVyZSA9IHRleHR1cmVTdGF0ZS5jcmVhdGUyRCh7XG4gICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIGZvcm1hdDogZm9ybWF0LFxuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9KVxuICAgICAgdGV4dHVyZS5fdGV4dHVyZS5yZWZDb3VudCA9IDBcbiAgICAgIHJldHVybiBuZXcgRnJhbWVidWZmZXJBdHRhY2htZW50KEdMX1RFWFRVUkVfMkQkMiwgdGV4dHVyZSwgbnVsbClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJiID0gcmVuZGVyYnVmZmVyU3RhdGUuY3JlYXRlKHtcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgZm9ybWF0OiBmb3JtYXRcbiAgICAgIH0pXG4gICAgICByYi5fcmVuZGVyYnVmZmVyLnJlZkNvdW50ID0gMFxuICAgICAgcmV0dXJuIG5ldyBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQoR0xfUkVOREVSQlVGRkVSJDEsIG51bGwsIHJiKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVud3JhcEF0dGFjaG1lbnQgKGF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gYXR0YWNobWVudCAmJiAoYXR0YWNobWVudC50ZXh0dXJlIHx8IGF0dGFjaG1lbnQucmVuZGVyYnVmZmVyKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzaXplQXR0YWNobWVudCAoYXR0YWNobWVudCwgdywgaCkge1xuICAgIGlmIChhdHRhY2htZW50KSB7XG4gICAgICBpZiAoYXR0YWNobWVudC50ZXh0dXJlKSB7XG4gICAgICAgIGF0dGFjaG1lbnQudGV4dHVyZS5yZXNpemUodywgaClcbiAgICAgIH0gZWxzZSBpZiAoYXR0YWNobWVudC5yZW5kZXJidWZmZXIpIHtcbiAgICAgICAgYXR0YWNobWVudC5yZW5kZXJidWZmZXIucmVzaXplKHcsIGgpXG4gICAgICB9XG4gICAgICBhdHRhY2htZW50LndpZHRoID0gd1xuICAgICAgYXR0YWNobWVudC5oZWlnaHQgPSBoXG4gICAgfVxuICB9XG5cbiAgdmFyIGZyYW1lYnVmZmVyQ291bnQgPSAwXG4gIHZhciBmcmFtZWJ1ZmZlclNldCA9IHt9XG5cbiAgZnVuY3Rpb24gUkVHTEZyYW1lYnVmZmVyICgpIHtcbiAgICB0aGlzLmlkID0gZnJhbWVidWZmZXJDb3VudCsrXG4gICAgZnJhbWVidWZmZXJTZXRbdGhpcy5pZF0gPSB0aGlzXG5cbiAgICB0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKVxuICAgIHRoaXMud2lkdGggPSAwXG4gICAgdGhpcy5oZWlnaHQgPSAwXG5cbiAgICB0aGlzLmNvbG9yQXR0YWNobWVudHMgPSBbXVxuICAgIHRoaXMuZGVwdGhBdHRhY2htZW50ID0gbnVsbFxuICAgIHRoaXMuc3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsXG4gICAgdGhpcy5kZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gZGVjRkJPUmVmcyAoZnJhbWVidWZmZXIpIHtcbiAgICBmcmFtZWJ1ZmZlci5jb2xvckF0dGFjaG1lbnRzLmZvckVhY2goZGVjUmVmKVxuICAgIGRlY1JlZihmcmFtZWJ1ZmZlci5kZXB0aEF0dGFjaG1lbnQpXG4gICAgZGVjUmVmKGZyYW1lYnVmZmVyLnN0ZW5jaWxBdHRhY2htZW50KVxuICAgIGRlY1JlZihmcmFtZWJ1ZmZlci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50KVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSAoZnJhbWVidWZmZXIpIHtcbiAgICB2YXIgaGFuZGxlID0gZnJhbWVidWZmZXIuZnJhbWVidWZmZXJcbiAgICBjaGVjayQxKGhhbmRsZSwgJ211c3Qgbm90IGRvdWJsZSBkZXN0cm95IGZyYW1lYnVmZmVyJylcbiAgICBnbC5kZWxldGVGcmFtZWJ1ZmZlcihoYW5kbGUpXG4gICAgZnJhbWVidWZmZXIuZnJhbWVidWZmZXIgPSBudWxsXG4gICAgc3RhdHMuZnJhbWVidWZmZXJDb3VudC0tXG4gICAgZGVsZXRlIGZyYW1lYnVmZmVyU2V0W2ZyYW1lYnVmZmVyLmlkXVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJhbWVidWZmZXIgKGZyYW1lYnVmZmVyKSB7XG4gICAgdmFyIGlcblxuICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiQxLCBmcmFtZWJ1ZmZlci5mcmFtZWJ1ZmZlcilcbiAgICB2YXIgY29sb3JBdHRhY2htZW50cyA9IGZyYW1lYnVmZmVyLmNvbG9yQXR0YWNobWVudHNcbiAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JBdHRhY2htZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgYXR0YWNoKEdMX0NPTE9SX0FUVEFDSE1FTlQwJDEgKyBpLCBjb2xvckF0dGFjaG1lbnRzW2ldKVxuICAgIH1cbiAgICBmb3IgKGkgPSBjb2xvckF0dGFjaG1lbnRzLmxlbmd0aDsgaSA8IGxpbWl0cy5tYXhDb2xvckF0dGFjaG1lbnRzOyArK2kpIHtcbiAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgICBHTF9GUkFNRUJVRkZFUiQxLFxuICAgICAgICBHTF9DT0xPUl9BVFRBQ0hNRU5UMCQxICsgaSxcbiAgICAgICAgR0xfVEVYVFVSRV8yRCQyLFxuICAgICAgICBudWxsLFxuICAgICAgICAwKVxuICAgIH1cblxuICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgR0xfRlJBTUVCVUZGRVIkMSxcbiAgICAgIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVCxcbiAgICAgIEdMX1RFWFRVUkVfMkQkMixcbiAgICAgIG51bGwsXG4gICAgICAwKVxuICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKFxuICAgICAgR0xfRlJBTUVCVUZGRVIkMSxcbiAgICAgIEdMX0RFUFRIX0FUVEFDSE1FTlQsXG4gICAgICBHTF9URVhUVVJFXzJEJDIsXG4gICAgICBudWxsLFxuICAgICAgMClcbiAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChcbiAgICAgIEdMX0ZSQU1FQlVGRkVSJDEsXG4gICAgICBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsXG4gICAgICBHTF9URVhUVVJFXzJEJDIsXG4gICAgICBudWxsLFxuICAgICAgMClcblxuICAgIGF0dGFjaChHTF9ERVBUSF9BVFRBQ0hNRU5ULCBmcmFtZWJ1ZmZlci5kZXB0aEF0dGFjaG1lbnQpXG4gICAgYXR0YWNoKEdMX1NURU5DSUxfQVRUQUNITUVOVCwgZnJhbWVidWZmZXIuc3RlbmNpbEF0dGFjaG1lbnQpXG4gICAgYXR0YWNoKEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVCwgZnJhbWVidWZmZXIuZGVwdGhTdGVuY2lsQXR0YWNobWVudClcblxuICAgIC8vIENoZWNrIHN0YXR1cyBjb2RlXG4gICAgdmFyIHN0YXR1cyA9IGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIkMSlcbiAgICBpZiAoIWdsLmlzQ29udGV4dExvc3QoKSAmJiBzdGF0dXMgIT09IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFJDEpIHtcbiAgICAgIGNoZWNrJDEucmFpc2UoJ2ZyYW1lYnVmZmVyIGNvbmZpZ3VyYXRpb24gbm90IHN1cHBvcnRlZCwgc3RhdHVzID0gJyArXG4gICAgICAgIHN0YXR1c0NvZGVbc3RhdHVzXSlcbiAgICB9XG5cbiAgICBnbC5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIkMSwgZnJhbWVidWZmZXJTdGF0ZS5uZXh0ID8gZnJhbWVidWZmZXJTdGF0ZS5uZXh0LmZyYW1lYnVmZmVyIDogbnVsbClcbiAgICBmcmFtZWJ1ZmZlclN0YXRlLmN1ciA9IGZyYW1lYnVmZmVyU3RhdGUubmV4dFxuXG4gICAgLy8gRklYTUU6IENsZWFyIGVycm9yIGNvZGUgaGVyZS4gIFRoaXMgaXMgYSB3b3JrIGFyb3VuZCBmb3IgYSBidWcgaW5cbiAgICAvLyBoZWFkbGVzcy1nbFxuICAgIGdsLmdldEVycm9yKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUZCTyAoYTAsIGExKSB7XG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IFJFR0xGcmFtZWJ1ZmZlcigpXG4gICAgc3RhdHMuZnJhbWVidWZmZXJDb3VudCsrXG5cbiAgICBmdW5jdGlvbiByZWdsRnJhbWVidWZmZXIgKGEsIGIpIHtcbiAgICAgIHZhciBpXG5cbiAgICAgIGNoZWNrJDEoZnJhbWVidWZmZXJTdGF0ZS5uZXh0ICE9PSBmcmFtZWJ1ZmZlcixcbiAgICAgICAgJ2NhbiBub3QgdXBkYXRlIGZyYW1lYnVmZmVyIHdoaWNoIGlzIGN1cnJlbnRseSBpbiB1c2UnKVxuXG4gICAgICB2YXIgd2lkdGggPSAwXG4gICAgICB2YXIgaGVpZ2h0ID0gMFxuXG4gICAgICB2YXIgbmVlZHNEZXB0aCA9IHRydWVcbiAgICAgIHZhciBuZWVkc1N0ZW5jaWwgPSB0cnVlXG5cbiAgICAgIHZhciBjb2xvckJ1ZmZlciA9IG51bGxcbiAgICAgIHZhciBjb2xvclRleHR1cmUgPSB0cnVlXG4gICAgICB2YXIgY29sb3JGb3JtYXQgPSAncmdiYSdcbiAgICAgIHZhciBjb2xvclR5cGUgPSAndWludDgnXG4gICAgICB2YXIgY29sb3JDb3VudCA9IDFcblxuICAgICAgdmFyIGRlcHRoQnVmZmVyID0gbnVsbFxuICAgICAgdmFyIHN0ZW5jaWxCdWZmZXIgPSBudWxsXG4gICAgICB2YXIgZGVwdGhTdGVuY2lsQnVmZmVyID0gbnVsbFxuICAgICAgdmFyIGRlcHRoU3RlbmNpbFRleHR1cmUgPSBmYWxzZVxuXG4gICAgICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHdpZHRoID0gYSB8IDBcbiAgICAgICAgaGVpZ2h0ID0gKGIgfCAwKSB8fCB3aWR0aFxuICAgICAgfSBlbHNlIGlmICghYSkge1xuICAgICAgICB3aWR0aCA9IGhlaWdodCA9IDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrJDEudHlwZShhLCAnb2JqZWN0JywgJ2ludmFsaWQgYXJndW1lbnRzIGZvciBmcmFtZWJ1ZmZlcicpXG4gICAgICAgIHZhciBvcHRpb25zID0gYVxuXG4gICAgICAgIGlmICgnc2hhcGUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICB2YXIgc2hhcGUgPSBvcHRpb25zLnNoYXBlXG4gICAgICAgICAgY2hlY2skMShBcnJheS5pc0FycmF5KHNoYXBlKSAmJiBzaGFwZS5sZW5ndGggPj0gMixcbiAgICAgICAgICAgICdpbnZhbGlkIHNoYXBlIGZvciBmcmFtZWJ1ZmZlcicpXG4gICAgICAgICAgd2lkdGggPSBzaGFwZVswXVxuICAgICAgICAgIGhlaWdodCA9IHNoYXBlWzFdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCdyYWRpdXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gb3B0aW9ucy5yYWRpdXNcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCd3aWR0aCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgd2lkdGggPSBvcHRpb25zLndpZHRoXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgnaGVpZ2h0JyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSBvcHRpb25zLmhlaWdodFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnY29sb3InIGluIG9wdGlvbnMgfHxcbiAgICAgICAgICAgICdjb2xvcnMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBjb2xvckJ1ZmZlciA9XG4gICAgICAgICAgICBvcHRpb25zLmNvbG9yIHx8XG4gICAgICAgICAgICBvcHRpb25zLmNvbG9yc1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbG9yQnVmZmVyKSkge1xuICAgICAgICAgICAgY2hlY2skMShcbiAgICAgICAgICAgICAgY29sb3JCdWZmZXIubGVuZ3RoID09PSAxIHx8IGV4dGVuc2lvbnMud2ViZ2xfZHJhd19idWZmZXJzLFxuICAgICAgICAgICAgICAnbXVsdGlwbGUgcmVuZGVyIHRhcmdldHMgbm90IHN1cHBvcnRlZCcpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb2xvckJ1ZmZlcikge1xuICAgICAgICAgIGlmICgnY29sb3JDb3VudCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY29sb3JDb3VudCA9IG9wdGlvbnMuY29sb3JDb3VudCB8IDBcbiAgICAgICAgICAgIGNoZWNrJDEoY29sb3JDb3VudCA+IDAsICdpbnZhbGlkIGNvbG9yIGJ1ZmZlciBjb3VudCcpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCdjb2xvclRleHR1cmUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbG9yVGV4dHVyZSA9ICEhb3B0aW9ucy5jb2xvclRleHR1cmVcbiAgICAgICAgICAgIGNvbG9yRm9ybWF0ID0gJ3JnYmE0J1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgnY29sb3JUeXBlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb2xvclR5cGUgPSBvcHRpb25zLmNvbG9yVHlwZVxuICAgICAgICAgICAgaWYgKCFjb2xvclRleHR1cmUpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbG9yVHlwZSA9PT0gJ2hhbGYgZmxvYXQnIHx8IGNvbG9yVHlwZSA9PT0gJ2Zsb2F0MTYnKSB7XG4gICAgICAgICAgICAgICAgY2hlY2skMShleHRlbnNpb25zLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCxcbiAgICAgICAgICAgICAgICAgICd5b3UgbXVzdCBlbmFibGUgRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IHRvIHVzZSAxNi1iaXQgcmVuZGVyIGJ1ZmZlcnMnKVxuICAgICAgICAgICAgICAgIGNvbG9yRm9ybWF0ID0gJ3JnYmExNmYnXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sb3JUeXBlID09PSAnZmxvYXQnIHx8IGNvbG9yVHlwZSA9PT0gJ2Zsb2F0MzInKSB7XG4gICAgICAgICAgICAgICAgY2hlY2skMShleHRlbnNpb25zLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCxcbiAgICAgICAgICAgICAgICAgICd5b3UgbXVzdCBlbmFibGUgV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IGluIG9yZGVyIHRvIHVzZSAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgcmVuZGVyYnVmZmVycycpXG4gICAgICAgICAgICAgICAgY29sb3JGb3JtYXQgPSAncmdiYTMyZidcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hlY2skMShleHRlbnNpb25zLm9lc190ZXh0dXJlX2Zsb2F0IHx8XG4gICAgICAgICAgICAgICAgIShjb2xvclR5cGUgPT09ICdmbG9hdCcgfHwgY29sb3JUeXBlID09PSAnZmxvYXQzMicpLFxuICAgICAgICAgICAgICAneW91IG11c3QgZW5hYmxlIE9FU190ZXh0dXJlX2Zsb2F0IGluIG9yZGVyIHRvIHVzZSBmbG9hdGluZyBwb2ludCBmcmFtZWJ1ZmZlciBvYmplY3RzJylcbiAgICAgICAgICAgICAgY2hlY2skMShleHRlbnNpb25zLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQgfHxcbiAgICAgICAgICAgICAgICAhKGNvbG9yVHlwZSA9PT0gJ2hhbGYgZmxvYXQnIHx8IGNvbG9yVHlwZSA9PT0gJ2Zsb2F0MTYnKSxcbiAgICAgICAgICAgICAgJ3lvdSBtdXN0IGVuYWJsZSBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGluIG9yZGVyIHRvIHVzZSAxNi1iaXQgZmxvYXRpbmcgcG9pbnQgZnJhbWVidWZmZXIgb2JqZWN0cycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGVjayQxLm9uZU9mKGNvbG9yVHlwZSwgY29sb3JUeXBlcywgJ2ludmFsaWQgY29sb3IgdHlwZScpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCdjb2xvckZvcm1hdCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY29sb3JGb3JtYXQgPSBvcHRpb25zLmNvbG9yRm9ybWF0XG4gICAgICAgICAgICBpZiAoY29sb3JUZXh0dXJlRm9ybWF0cy5pbmRleE9mKGNvbG9yRm9ybWF0KSA+PSAwKSB7XG4gICAgICAgICAgICAgIGNvbG9yVGV4dHVyZSA9IHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sb3JSZW5kZXJidWZmZXJGb3JtYXRzLmluZGV4T2YoY29sb3JGb3JtYXQpID49IDApIHtcbiAgICAgICAgICAgICAgY29sb3JUZXh0dXJlID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChjb2xvclRleHR1cmUpIHtcbiAgICAgICAgICAgICAgICBjaGVjayQxLm9uZU9mKFxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb2xvckZvcm1hdCwgY29sb3JUZXh0dXJlRm9ybWF0cyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGNvbG9yIGZvcm1hdCBmb3IgdGV4dHVyZScpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hlY2skMS5vbmVPZihcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29sb3JGb3JtYXQsIGNvbG9yUmVuZGVyYnVmZmVyRm9ybWF0cyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGNvbG9yIGZvcm1hdCBmb3IgcmVuZGVyYnVmZmVyJylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnZGVwdGhUZXh0dXJlJyBpbiBvcHRpb25zIHx8ICdkZXB0aFN0ZW5jaWxUZXh0dXJlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZSA9ICEhKG9wdGlvbnMuZGVwdGhUZXh0dXJlIHx8XG4gICAgICAgICAgICBvcHRpb25zLmRlcHRoU3RlbmNpbFRleHR1cmUpXG4gICAgICAgICAgY2hlY2skMSghZGVwdGhTdGVuY2lsVGV4dHVyZSB8fCBleHRlbnNpb25zLndlYmdsX2RlcHRoX3RleHR1cmUsXG4gICAgICAgICAgICAnd2ViZ2xfZGVwdGhfdGV4dHVyZSBleHRlbnNpb24gbm90IHN1cHBvcnRlZCcpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ2RlcHRoJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlcHRoID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIG5lZWRzRGVwdGggPSBvcHRpb25zLmRlcHRoXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlcHRoQnVmZmVyID0gb3B0aW9ucy5kZXB0aFxuICAgICAgICAgICAgbmVlZHNTdGVuY2lsID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3N0ZW5jaWwnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc3RlbmNpbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBuZWVkc1N0ZW5jaWwgPSBvcHRpb25zLnN0ZW5jaWxcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RlbmNpbEJ1ZmZlciA9IG9wdGlvbnMuc3RlbmNpbFxuICAgICAgICAgICAgbmVlZHNEZXB0aCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdkZXB0aFN0ZW5jaWwnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVwdGhTdGVuY2lsID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIG5lZWRzRGVwdGggPSBuZWVkc1N0ZW5jaWwgPSBvcHRpb25zLmRlcHRoU3RlbmNpbFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZXB0aFN0ZW5jaWxCdWZmZXIgPSBvcHRpb25zLmRlcHRoU3RlbmNpbFxuICAgICAgICAgICAgbmVlZHNEZXB0aCA9IGZhbHNlXG4gICAgICAgICAgICBuZWVkc1N0ZW5jaWwgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBwYXJzZSBhdHRhY2htZW50c1xuICAgICAgdmFyIGNvbG9yQXR0YWNobWVudHMgPSBudWxsXG4gICAgICB2YXIgZGVwdGhBdHRhY2htZW50ID0gbnVsbFxuICAgICAgdmFyIHN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbFxuICAgICAgdmFyIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsXG5cbiAgICAgIC8vIFNldCB1cCBjb2xvciBhdHRhY2htZW50c1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3JCdWZmZXIpKSB7XG4gICAgICAgIGNvbG9yQXR0YWNobWVudHMgPSBjb2xvckJ1ZmZlci5tYXAocGFyc2VBdHRhY2htZW50KVxuICAgICAgfSBlbHNlIGlmIChjb2xvckJ1ZmZlcikge1xuICAgICAgICBjb2xvckF0dGFjaG1lbnRzID0gW3BhcnNlQXR0YWNobWVudChjb2xvckJ1ZmZlcildXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xvckF0dGFjaG1lbnRzID0gbmV3IEFycmF5KGNvbG9yQ291bnQpXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xvckNvdW50OyArK2kpIHtcbiAgICAgICAgICBjb2xvckF0dGFjaG1lbnRzW2ldID0gYWxsb2NBdHRhY2htZW50KFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICBjb2xvclRleHR1cmUsXG4gICAgICAgICAgICBjb2xvckZvcm1hdCxcbiAgICAgICAgICAgIGNvbG9yVHlwZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaGVjayQxKGV4dGVuc2lvbnMud2ViZ2xfZHJhd19idWZmZXJzIHx8IGNvbG9yQXR0YWNobWVudHMubGVuZ3RoIDw9IDEsXG4gICAgICAgICd5b3UgbXVzdCBlbmFibGUgdGhlIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24gaW4gb3JkZXIgdG8gdXNlIG11bHRpcGxlIGNvbG9yIGJ1ZmZlcnMuJylcbiAgICAgIGNoZWNrJDEoY29sb3JBdHRhY2htZW50cy5sZW5ndGggPD0gbGltaXRzLm1heENvbG9yQXR0YWNobWVudHMsXG4gICAgICAgICd0b28gbWFueSBjb2xvciBhdHRhY2htZW50cywgbm90IHN1cHBvcnRlZCcpXG5cbiAgICAgIHdpZHRoID0gd2lkdGggfHwgY29sb3JBdHRhY2htZW50c1swXS53aWR0aFxuICAgICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IGNvbG9yQXR0YWNobWVudHNbMF0uaGVpZ2h0XG5cbiAgICAgIGlmIChkZXB0aEJ1ZmZlcikge1xuICAgICAgICBkZXB0aEF0dGFjaG1lbnQgPSBwYXJzZUF0dGFjaG1lbnQoZGVwdGhCdWZmZXIpXG4gICAgICB9IGVsc2UgaWYgKG5lZWRzRGVwdGggJiYgIW5lZWRzU3RlbmNpbCkge1xuICAgICAgICBkZXB0aEF0dGFjaG1lbnQgPSBhbGxvY0F0dGFjaG1lbnQoXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmUsXG4gICAgICAgICAgJ2RlcHRoJyxcbiAgICAgICAgICAndWludDMyJylcbiAgICAgIH1cblxuICAgICAgaWYgKHN0ZW5jaWxCdWZmZXIpIHtcbiAgICAgICAgc3RlbmNpbEF0dGFjaG1lbnQgPSBwYXJzZUF0dGFjaG1lbnQoc3RlbmNpbEJ1ZmZlcilcbiAgICAgIH0gZWxzZSBpZiAobmVlZHNTdGVuY2lsICYmICFuZWVkc0RlcHRoKSB7XG4gICAgICAgIHN0ZW5jaWxBdHRhY2htZW50ID0gYWxsb2NBdHRhY2htZW50KFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAnc3RlbmNpbCcsXG4gICAgICAgICAgJ3VpbnQ4JylcbiAgICAgIH1cblxuICAgICAgaWYgKGRlcHRoU3RlbmNpbEJ1ZmZlcikge1xuICAgICAgICBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gcGFyc2VBdHRhY2htZW50KGRlcHRoU3RlbmNpbEJ1ZmZlcilcbiAgICAgIH0gZWxzZSBpZiAoIWRlcHRoQnVmZmVyICYmICFzdGVuY2lsQnVmZmVyICYmIG5lZWRzU3RlbmNpbCAmJiBuZWVkc0RlcHRoKSB7XG4gICAgICAgIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBhbGxvY0F0dGFjaG1lbnQoXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmUsXG4gICAgICAgICAgJ2RlcHRoIHN0ZW5jaWwnLFxuICAgICAgICAgICdkZXB0aCBzdGVuY2lsJylcbiAgICAgIH1cblxuICAgICAgY2hlY2skMShcbiAgICAgICAgKCEhZGVwdGhCdWZmZXIpICsgKCEhc3RlbmNpbEJ1ZmZlcikgKyAoISFkZXB0aFN0ZW5jaWxCdWZmZXIpIDw9IDEsXG4gICAgICAgICdpbnZhbGlkIGZyYW1lYnVmZmVyIGNvbmZpZ3VyYXRpb24sIGNhbiBzcGVjaWZ5IGV4YWN0bHkgb25lIGRlcHRoL3N0ZW5jaWwgYXR0YWNobWVudCcpXG5cbiAgICAgIHZhciBjb21tb25Db2xvckF0dGFjaG1lbnRTaXplID0gbnVsbFxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JBdHRhY2htZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpbmNSZWZBbmRDaGVja1NoYXBlKGNvbG9yQXR0YWNobWVudHNbaV0sIHdpZHRoLCBoZWlnaHQpXG4gICAgICAgIGNoZWNrJDEoIWNvbG9yQXR0YWNobWVudHNbaV0gfHxcbiAgICAgICAgICAoY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlICYmXG4gICAgICAgICAgICBjb2xvclRleHR1cmVGb3JtYXRFbnVtcy5pbmRleE9mKGNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZS5fdGV4dHVyZS5mb3JtYXQpID49IDApIHx8XG4gICAgICAgICAgKGNvbG9yQXR0YWNobWVudHNbaV0ucmVuZGVyYnVmZmVyICYmXG4gICAgICAgICAgICBjb2xvclJlbmRlcmJ1ZmZlckZvcm1hdEVudW1zLmluZGV4T2YoY29sb3JBdHRhY2htZW50c1tpXS5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5mb3JtYXQpID49IDApLFxuICAgICAgICAnZnJhbWVidWZmZXIgY29sb3IgYXR0YWNobWVudCAnICsgaSArICcgaXMgaW52YWxpZCcpXG5cbiAgICAgICAgaWYgKGNvbG9yQXR0YWNobWVudHNbaV0gJiYgY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlKSB7XG4gICAgICAgICAgdmFyIGNvbG9yQXR0YWNobWVudFNpemUgPVxuICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0Q2hhbm5lbHNbY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdF0gKlxuICAgICAgICAgICAgICB0ZXh0dXJlVHlwZVNpemVzW2NvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZS5fdGV4dHVyZS50eXBlXVxuXG4gICAgICAgICAgaWYgKGNvbW1vbkNvbG9yQXR0YWNobWVudFNpemUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbW1vbkNvbG9yQXR0YWNobWVudFNpemUgPSBjb2xvckF0dGFjaG1lbnRTaXplXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIGNvbG9yIGF0dGFjaG1lbnRzIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGJpdHBsYW5lc1xuICAgICAgICAgICAgLy8gKHRoYXQgaXMsIHRoZSBzYW1lIG51bWVyIG9mIGJpdHMgcGVyIHBpeGVsKVxuICAgICAgICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgR0xFUzIuMCBzdGFuZGFyZC4gU2VlIHRoZSBiZWdpbm5pbmcgb2YgQ2hhcHRlciA0IGluIHRoYXQgZG9jdW1lbnQuXG4gICAgICAgICAgICBjaGVjayQxKGNvbW1vbkNvbG9yQXR0YWNobWVudFNpemUgPT09IGNvbG9yQXR0YWNobWVudFNpemUsXG4gICAgICAgICAgICAgICdhbGwgY29sb3IgYXR0YWNobWVudHMgbXVjaCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbC4nKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaW5jUmVmQW5kQ2hlY2tTaGFwZShkZXB0aEF0dGFjaG1lbnQsIHdpZHRoLCBoZWlnaHQpXG4gICAgICBjaGVjayQxKCFkZXB0aEF0dGFjaG1lbnQgfHxcbiAgICAgICAgKGRlcHRoQXR0YWNobWVudC50ZXh0dXJlICYmXG4gICAgICAgICAgZGVwdGhBdHRhY2htZW50LnRleHR1cmUuX3RleHR1cmUuZm9ybWF0ID09PSBHTF9ERVBUSF9DT01QT05FTlQkMSkgfHxcbiAgICAgICAgKGRlcHRoQXR0YWNobWVudC5yZW5kZXJidWZmZXIgJiZcbiAgICAgICAgICBkZXB0aEF0dGFjaG1lbnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZm9ybWF0ID09PSBHTF9ERVBUSF9DT01QT05FTlQxNiQxKSxcbiAgICAgICdpbnZhbGlkIGRlcHRoIGF0dGFjaG1lbnQgZm9yIGZyYW1lYnVmZmVyIG9iamVjdCcpXG4gICAgICBpbmNSZWZBbmRDaGVja1NoYXBlKHN0ZW5jaWxBdHRhY2htZW50LCB3aWR0aCwgaGVpZ2h0KVxuICAgICAgY2hlY2skMSghc3RlbmNpbEF0dGFjaG1lbnQgfHxcbiAgICAgICAgKHN0ZW5jaWxBdHRhY2htZW50LnJlbmRlcmJ1ZmZlciAmJlxuICAgICAgICAgIHN0ZW5jaWxBdHRhY2htZW50LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmZvcm1hdCA9PT0gR0xfU1RFTkNJTF9JTkRFWDgkMSksXG4gICAgICAnaW52YWxpZCBzdGVuY2lsIGF0dGFjaG1lbnQgZm9yIGZyYW1lYnVmZmVyIG9iamVjdCcpXG4gICAgICBpbmNSZWZBbmRDaGVja1NoYXBlKGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQsIHdpZHRoLCBoZWlnaHQpXG4gICAgICBjaGVjayQxKCFkZXB0aFN0ZW5jaWxBdHRhY2htZW50IHx8XG4gICAgICAgIChkZXB0aFN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUgJiZcbiAgICAgICAgICBkZXB0aFN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUuX3RleHR1cmUuZm9ybWF0ID09PSBHTF9ERVBUSF9TVEVOQ0lMJDIpIHx8XG4gICAgICAgIChkZXB0aFN0ZW5jaWxBdHRhY2htZW50LnJlbmRlcmJ1ZmZlciAmJlxuICAgICAgICAgIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZm9ybWF0ID09PSBHTF9ERVBUSF9TVEVOQ0lMJDIpLFxuICAgICAgJ2ludmFsaWQgZGVwdGgtc3RlbmNpbCBhdHRhY2htZW50IGZvciBmcmFtZWJ1ZmZlciBvYmplY3QnKVxuXG4gICAgICAvLyBkZWNyZW1lbnQgcmVmZXJlbmNlc1xuICAgICAgZGVjRkJPUmVmcyhmcmFtZWJ1ZmZlcilcblxuICAgICAgZnJhbWVidWZmZXIud2lkdGggPSB3aWR0aFxuICAgICAgZnJhbWVidWZmZXIuaGVpZ2h0ID0gaGVpZ2h0XG5cbiAgICAgIGZyYW1lYnVmZmVyLmNvbG9yQXR0YWNobWVudHMgPSBjb2xvckF0dGFjaG1lbnRzXG4gICAgICBmcmFtZWJ1ZmZlci5kZXB0aEF0dGFjaG1lbnQgPSBkZXB0aEF0dGFjaG1lbnRcbiAgICAgIGZyYW1lYnVmZmVyLnN0ZW5jaWxBdHRhY2htZW50ID0gc3RlbmNpbEF0dGFjaG1lbnRcbiAgICAgIGZyYW1lYnVmZmVyLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBkZXB0aFN0ZW5jaWxBdHRhY2htZW50XG5cbiAgICAgIHJlZ2xGcmFtZWJ1ZmZlci5jb2xvciA9IGNvbG9yQXR0YWNobWVudHMubWFwKHVud3JhcEF0dGFjaG1lbnQpXG4gICAgICByZWdsRnJhbWVidWZmZXIuZGVwdGggPSB1bndyYXBBdHRhY2htZW50KGRlcHRoQXR0YWNobWVudClcbiAgICAgIHJlZ2xGcmFtZWJ1ZmZlci5zdGVuY2lsID0gdW53cmFwQXR0YWNobWVudChzdGVuY2lsQXR0YWNobWVudClcbiAgICAgIHJlZ2xGcmFtZWJ1ZmZlci5kZXB0aFN0ZW5jaWwgPSB1bndyYXBBdHRhY2htZW50KGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQpXG5cbiAgICAgIHJlZ2xGcmFtZWJ1ZmZlci53aWR0aCA9IGZyYW1lYnVmZmVyLndpZHRoXG4gICAgICByZWdsRnJhbWVidWZmZXIuaGVpZ2h0ID0gZnJhbWVidWZmZXIuaGVpZ2h0XG5cbiAgICAgIHVwZGF0ZUZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKVxuXG4gICAgICByZXR1cm4gcmVnbEZyYW1lYnVmZmVyXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplICh3XywgaF8pIHtcbiAgICAgIGNoZWNrJDEoZnJhbWVidWZmZXJTdGF0ZS5uZXh0ICE9PSBmcmFtZWJ1ZmZlcixcbiAgICAgICAgJ2NhbiBub3QgcmVzaXplIGEgZnJhbWVidWZmZXIgd2hpY2ggaXMgY3VycmVudGx5IGluIHVzZScpXG5cbiAgICAgIHZhciB3ID0gTWF0aC5tYXgod18gfCAwLCAxKVxuICAgICAgdmFyIGggPSBNYXRoLm1heCgoaF8gfCAwKSB8fCB3LCAxKVxuICAgICAgaWYgKHcgPT09IGZyYW1lYnVmZmVyLndpZHRoICYmIGggPT09IGZyYW1lYnVmZmVyLmhlaWdodCkge1xuICAgICAgICByZXR1cm4gcmVnbEZyYW1lYnVmZmVyXG4gICAgICB9XG5cbiAgICAgIC8vIHJlc2l6ZSBhbGwgYnVmZmVyc1xuICAgICAgdmFyIGNvbG9yQXR0YWNobWVudHMgPSBmcmFtZWJ1ZmZlci5jb2xvckF0dGFjaG1lbnRzXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yQXR0YWNobWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcmVzaXplQXR0YWNobWVudChjb2xvckF0dGFjaG1lbnRzW2ldLCB3LCBoKVxuICAgICAgfVxuICAgICAgcmVzaXplQXR0YWNobWVudChmcmFtZWJ1ZmZlci5kZXB0aEF0dGFjaG1lbnQsIHcsIGgpXG4gICAgICByZXNpemVBdHRhY2htZW50KGZyYW1lYnVmZmVyLnN0ZW5jaWxBdHRhY2htZW50LCB3LCBoKVxuICAgICAgcmVzaXplQXR0YWNobWVudChmcmFtZWJ1ZmZlci5kZXB0aFN0ZW5jaWxBdHRhY2htZW50LCB3LCBoKVxuXG4gICAgICBmcmFtZWJ1ZmZlci53aWR0aCA9IHJlZ2xGcmFtZWJ1ZmZlci53aWR0aCA9IHdcbiAgICAgIGZyYW1lYnVmZmVyLmhlaWdodCA9IHJlZ2xGcmFtZWJ1ZmZlci5oZWlnaHQgPSBoXG5cbiAgICAgIHVwZGF0ZUZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKVxuXG4gICAgICByZXR1cm4gcmVnbEZyYW1lYnVmZmVyXG4gICAgfVxuXG4gICAgcmVnbEZyYW1lYnVmZmVyKGEwLCBhMSlcblxuICAgIHJldHVybiBleHRlbmQocmVnbEZyYW1lYnVmZmVyLCB7XG4gICAgICByZXNpemU6IHJlc2l6ZSxcbiAgICAgIF9yZWdsVHlwZTogJ2ZyYW1lYnVmZmVyJyxcbiAgICAgIF9mcmFtZWJ1ZmZlcjogZnJhbWVidWZmZXIsXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc3Ryb3koZnJhbWVidWZmZXIpXG4gICAgICAgIGRlY0ZCT1JlZnMoZnJhbWVidWZmZXIpXG4gICAgICB9LFxuICAgICAgdXNlOiBmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgICAgZnJhbWVidWZmZXJTdGF0ZS5zZXRGQk8oe1xuICAgICAgICAgIGZyYW1lYnVmZmVyOiByZWdsRnJhbWVidWZmZXJcbiAgICAgICAgfSwgYmxvY2spXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUN1YmVGQk8gKG9wdGlvbnMpIHtcbiAgICB2YXIgZmFjZXMgPSBBcnJheSg2KVxuXG4gICAgZnVuY3Rpb24gcmVnbEZyYW1lYnVmZmVyQ3ViZSAoYSkge1xuICAgICAgdmFyIGlcblxuICAgICAgY2hlY2skMShmYWNlcy5pbmRleE9mKGZyYW1lYnVmZmVyU3RhdGUubmV4dCkgPCAwLFxuICAgICAgICAnY2FuIG5vdCB1cGRhdGUgZnJhbWVidWZmZXIgd2hpY2ggaXMgY3VycmVudGx5IGluIHVzZScpXG5cbiAgICAgIHZhciBwYXJhbXMgPSB7XG4gICAgICAgIGNvbG9yOiBudWxsXG4gICAgICB9XG5cbiAgICAgIHZhciByYWRpdXMgPSAwXG5cbiAgICAgIHZhciBjb2xvckJ1ZmZlciA9IG51bGxcbiAgICAgIHZhciBjb2xvckZvcm1hdCA9ICdyZ2JhJ1xuICAgICAgdmFyIGNvbG9yVHlwZSA9ICd1aW50OCdcbiAgICAgIHZhciBjb2xvckNvdW50ID0gMVxuXG4gICAgICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJhZGl1cyA9IGEgfCAwXG4gICAgICB9IGVsc2UgaWYgKCFhKSB7XG4gICAgICAgIHJhZGl1cyA9IDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrJDEudHlwZShhLCAnb2JqZWN0JywgJ2ludmFsaWQgYXJndW1lbnRzIGZvciBmcmFtZWJ1ZmZlcicpXG4gICAgICAgIHZhciBvcHRpb25zID0gYVxuXG4gICAgICAgIGlmICgnc2hhcGUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICB2YXIgc2hhcGUgPSBvcHRpb25zLnNoYXBlXG4gICAgICAgICAgY2hlY2skMShcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoc2hhcGUpICYmIHNoYXBlLmxlbmd0aCA+PSAyLFxuICAgICAgICAgICAgJ2ludmFsaWQgc2hhcGUgZm9yIGZyYW1lYnVmZmVyJylcbiAgICAgICAgICBjaGVjayQxKFxuICAgICAgICAgICAgc2hhcGVbMF0gPT09IHNoYXBlWzFdLFxuICAgICAgICAgICAgJ2N1YmUgZnJhbWVidWZmZXIgbXVzdCBiZSBzcXVhcmUnKVxuICAgICAgICAgIHJhZGl1cyA9IHNoYXBlWzBdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCdyYWRpdXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJhZGl1cyA9IG9wdGlvbnMucmFkaXVzIHwgMFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ3dpZHRoJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICByYWRpdXMgPSBvcHRpb25zLndpZHRoIHwgMFxuICAgICAgICAgICAgaWYgKCdoZWlnaHQnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgY2hlY2skMShvcHRpb25zLmhlaWdodCA9PT0gcmFkaXVzLCAnbXVzdCBiZSBzcXVhcmUnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoJ2hlaWdodCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgcmFkaXVzID0gb3B0aW9ucy5oZWlnaHQgfCAwXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdjb2xvcicgaW4gb3B0aW9ucyB8fFxuICAgICAgICAgICAgJ2NvbG9ycycgaW4gb3B0aW9ucykge1xuICAgICAgICAgIGNvbG9yQnVmZmVyID1cbiAgICAgICAgICAgIG9wdGlvbnMuY29sb3IgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuY29sb3JzXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3JCdWZmZXIpKSB7XG4gICAgICAgICAgICBjaGVjayQxKFxuICAgICAgICAgICAgICBjb2xvckJ1ZmZlci5sZW5ndGggPT09IDEgfHwgZXh0ZW5zaW9ucy53ZWJnbF9kcmF3X2J1ZmZlcnMsXG4gICAgICAgICAgICAgICdtdWx0aXBsZSByZW5kZXIgdGFyZ2V0cyBub3Qgc3VwcG9ydGVkJylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbG9yQnVmZmVyKSB7XG4gICAgICAgICAgaWYgKCdjb2xvckNvdW50JyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb2xvckNvdW50ID0gb3B0aW9ucy5jb2xvckNvdW50IHwgMFxuICAgICAgICAgICAgY2hlY2skMShjb2xvckNvdW50ID4gMCwgJ2ludmFsaWQgY29sb3IgYnVmZmVyIGNvdW50JylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoJ2NvbG9yVHlwZScgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY2hlY2skMS5vbmVPZihcbiAgICAgICAgICAgICAgb3B0aW9ucy5jb2xvclR5cGUsIGNvbG9yVHlwZXMsXG4gICAgICAgICAgICAgICdpbnZhbGlkIGNvbG9yIHR5cGUnKVxuICAgICAgICAgICAgY29sb3JUeXBlID0gb3B0aW9ucy5jb2xvclR5cGVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoJ2NvbG9yRm9ybWF0JyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb2xvckZvcm1hdCA9IG9wdGlvbnMuY29sb3JGb3JtYXRcbiAgICAgICAgICAgIGNoZWNrJDEub25lT2YoXG4gICAgICAgICAgICAgIG9wdGlvbnMuY29sb3JGb3JtYXQsIGNvbG9yVGV4dHVyZUZvcm1hdHMsXG4gICAgICAgICAgICAgICdpbnZhbGlkIGNvbG9yIGZvcm1hdCBmb3IgdGV4dHVyZScpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdkZXB0aCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgIHBhcmFtcy5kZXB0aCA9IG9wdGlvbnMuZGVwdGhcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnc3RlbmNpbCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgIHBhcmFtcy5zdGVuY2lsID0gb3B0aW9ucy5zdGVuY2lsXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ2RlcHRoU3RlbmNpbCcgaW4gb3B0aW9ucykge1xuICAgICAgICAgIHBhcmFtcy5kZXB0aFN0ZW5jaWwgPSBvcHRpb25zLmRlcHRoU3RlbmNpbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBjb2xvckN1YmVzXG4gICAgICBpZiAoY29sb3JCdWZmZXIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3JCdWZmZXIpKSB7XG4gICAgICAgICAgY29sb3JDdWJlcyA9IFtdXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbG9yQnVmZmVyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBjb2xvckN1YmVzW2ldID0gY29sb3JCdWZmZXJbaV1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sb3JDdWJlcyA9IFsgY29sb3JCdWZmZXIgXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xvckN1YmVzID0gQXJyYXkoY29sb3JDb3VudClcbiAgICAgICAgdmFyIGN1YmVNYXBQYXJhbXMgPSB7XG4gICAgICAgICAgcmFkaXVzOiByYWRpdXMsXG4gICAgICAgICAgZm9ybWF0OiBjb2xvckZvcm1hdCxcbiAgICAgICAgICB0eXBlOiBjb2xvclR5cGVcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JDb3VudDsgKytpKSB7XG4gICAgICAgICAgY29sb3JDdWJlc1tpXSA9IHRleHR1cmVTdGF0ZS5jcmVhdGVDdWJlKGN1YmVNYXBQYXJhbXMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgY29sb3IgY3ViZXNcbiAgICAgIHBhcmFtcy5jb2xvciA9IEFycmF5KGNvbG9yQ3ViZXMubGVuZ3RoKVxuICAgICAgZm9yIChpID0gMDsgaSA8IGNvbG9yQ3ViZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGN1YmUgPSBjb2xvckN1YmVzW2ldXG4gICAgICAgIGNoZWNrJDEoXG4gICAgICAgICAgdHlwZW9mIGN1YmUgPT09ICdmdW5jdGlvbicgJiYgY3ViZS5fcmVnbFR5cGUgPT09ICd0ZXh0dXJlQ3ViZScsXG4gICAgICAgICAgJ2ludmFsaWQgY3ViZSBtYXAnKVxuICAgICAgICByYWRpdXMgPSByYWRpdXMgfHwgY3ViZS53aWR0aFxuICAgICAgICBjaGVjayQxKFxuICAgICAgICAgIGN1YmUud2lkdGggPT09IHJhZGl1cyAmJiBjdWJlLmhlaWdodCA9PT0gcmFkaXVzLFxuICAgICAgICAgICdpbnZhbGlkIGN1YmUgbWFwIHNoYXBlJylcbiAgICAgICAgcGFyYW1zLmNvbG9yW2ldID0ge1xuICAgICAgICAgIHRhcmdldDogR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDIsXG4gICAgICAgICAgZGF0YTogY29sb3JDdWJlc1tpXVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2xvckN1YmVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgcGFyYW1zLmNvbG9yW2pdLnRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCQyICsgaVxuICAgICAgICB9XG4gICAgICAgIC8vIHJldXNlIGRlcHRoLXN0ZW5jaWwgYXR0YWNobWVudHMgYWNyb3NzIGFsbCBjdWJlIG1hcHNcbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgcGFyYW1zLmRlcHRoID0gZmFjZXNbMF0uZGVwdGhcbiAgICAgICAgICBwYXJhbXMuc3RlbmNpbCA9IGZhY2VzWzBdLnN0ZW5jaWxcbiAgICAgICAgICBwYXJhbXMuZGVwdGhTdGVuY2lsID0gZmFjZXNbMF0uZGVwdGhTdGVuY2lsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZhY2VzW2ldKSB7XG4gICAgICAgICAgKGZhY2VzW2ldKShwYXJhbXMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmFjZXNbaV0gPSBjcmVhdGVGQk8ocGFyYW1zKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBleHRlbmQocmVnbEZyYW1lYnVmZmVyQ3ViZSwge1xuICAgICAgICB3aWR0aDogcmFkaXVzLFxuICAgICAgICBoZWlnaHQ6IHJhZGl1cyxcbiAgICAgICAgY29sb3I6IGNvbG9yQ3ViZXNcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplIChyYWRpdXNfKSB7XG4gICAgICB2YXIgaVxuICAgICAgdmFyIHJhZGl1cyA9IHJhZGl1c18gfCAwXG4gICAgICBjaGVjayQxKHJhZGl1cyA+IDAgJiYgcmFkaXVzIDw9IGxpbWl0cy5tYXhDdWJlTWFwU2l6ZSxcbiAgICAgICAgJ2ludmFsaWQgcmFkaXVzIGZvciBjdWJlIGZibycpXG5cbiAgICAgIGlmIChyYWRpdXMgPT09IHJlZ2xGcmFtZWJ1ZmZlckN1YmUud2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2xGcmFtZWJ1ZmZlckN1YmVcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbG9ycyA9IHJlZ2xGcmFtZWJ1ZmZlckN1YmUuY29sb3JcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2xvcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29sb3JzW2ldLnJlc2l6ZShyYWRpdXMpXG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICAgICAgZmFjZXNbaV0ucmVzaXplKHJhZGl1cylcbiAgICAgIH1cblxuICAgICAgcmVnbEZyYW1lYnVmZmVyQ3ViZS53aWR0aCA9IHJlZ2xGcmFtZWJ1ZmZlckN1YmUuaGVpZ2h0ID0gcmFkaXVzXG5cbiAgICAgIHJldHVybiByZWdsRnJhbWVidWZmZXJDdWJlXG4gICAgfVxuXG4gICAgcmVnbEZyYW1lYnVmZmVyQ3ViZShvcHRpb25zKVxuXG4gICAgcmV0dXJuIGV4dGVuZChyZWdsRnJhbWVidWZmZXJDdWJlLCB7XG4gICAgICBmYWNlczogZmFjZXMsXG4gICAgICByZXNpemU6IHJlc2l6ZSxcbiAgICAgIF9yZWdsVHlwZTogJ2ZyYW1lYnVmZmVyQ3ViZScsXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZhY2VzLmZvckVhY2goZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgICBmLmRlc3Ryb3koKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiByZXN0b3JlRnJhbWVidWZmZXJzICgpIHtcbiAgICBmcmFtZWJ1ZmZlclN0YXRlLmN1ciA9IG51bGxcbiAgICBmcmFtZWJ1ZmZlclN0YXRlLm5leHQgPSBudWxsXG4gICAgZnJhbWVidWZmZXJTdGF0ZS5kaXJ0eSA9IHRydWVcbiAgICB2YWx1ZXMoZnJhbWVidWZmZXJTZXQpLmZvckVhY2goZnVuY3Rpb24gKGZiKSB7XG4gICAgICBmYi5mcmFtZWJ1ZmZlciA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKClcbiAgICAgIHVwZGF0ZUZyYW1lYnVmZmVyKGZiKVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gZXh0ZW5kKGZyYW1lYnVmZmVyU3RhdGUsIHtcbiAgICBnZXRGcmFtZWJ1ZmZlcjogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdmdW5jdGlvbicgJiYgb2JqZWN0Ll9yZWdsVHlwZSA9PT0gJ2ZyYW1lYnVmZmVyJykge1xuICAgICAgICB2YXIgZmJvID0gb2JqZWN0Ll9mcmFtZWJ1ZmZlclxuICAgICAgICBpZiAoZmJvIGluc3RhbmNlb2YgUkVHTEZyYW1lYnVmZmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGZib1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG4gICAgY3JlYXRlOiBjcmVhdGVGQk8sXG4gICAgY3JlYXRlQ3ViZTogY3JlYXRlQ3ViZUZCTyxcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFsdWVzKGZyYW1lYnVmZmVyU2V0KS5mb3JFYWNoKGRlc3Ryb3kpXG4gICAgfSxcbiAgICByZXN0b3JlOiByZXN0b3JlRnJhbWVidWZmZXJzXG4gIH0pXG59XG5cbnZhciBHTF9GTE9BVCQ2ID0gNTEyNlxudmFyIEdMX0FSUkFZX0JVRkZFUiQxID0gMzQ5NjJcblxuZnVuY3Rpb24gQXR0cmlidXRlUmVjb3JkICgpIHtcbiAgdGhpcy5zdGF0ZSA9IDBcblxuICB0aGlzLnggPSAwLjBcbiAgdGhpcy55ID0gMC4wXG4gIHRoaXMueiA9IDAuMFxuICB0aGlzLncgPSAwLjBcblxuICB0aGlzLmJ1ZmZlciA9IG51bGxcbiAgdGhpcy5zaXplID0gMFxuICB0aGlzLm5vcm1hbGl6ZWQgPSBmYWxzZVxuICB0aGlzLnR5cGUgPSBHTF9GTE9BVCQ2XG4gIHRoaXMub2Zmc2V0ID0gMFxuICB0aGlzLnN0cmlkZSA9IDBcbiAgdGhpcy5kaXZpc29yID0gMFxufVxuXG5mdW5jdGlvbiB3cmFwQXR0cmlidXRlU3RhdGUgKFxuICBnbCxcbiAgZXh0ZW5zaW9ucyxcbiAgbGltaXRzLFxuICBzdGF0cyxcbiAgYnVmZmVyU3RhdGUpIHtcbiAgdmFyIE5VTV9BVFRSSUJVVEVTID0gbGltaXRzLm1heEF0dHJpYnV0ZXNcbiAgdmFyIGF0dHJpYnV0ZUJpbmRpbmdzID0gbmV3IEFycmF5KE5VTV9BVFRSSUJVVEVTKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IE5VTV9BVFRSSUJVVEVTOyArK2kpIHtcbiAgICBhdHRyaWJ1dGVCaW5kaW5nc1tpXSA9IG5ldyBBdHRyaWJ1dGVSZWNvcmQoKVxuICB9XG4gIHZhciB2YW9Db3VudCA9IDBcbiAgdmFyIHZhb1NldCA9IHt9XG5cbiAgdmFyIHN0YXRlID0ge1xuICAgIFJlY29yZDogQXR0cmlidXRlUmVjb3JkLFxuICAgIHNjb3BlOiB7fSxcbiAgICBzdGF0ZTogYXR0cmlidXRlQmluZGluZ3MsXG4gICAgY3VycmVudFZBTzogbnVsbCxcbiAgICB0YXJnZXRWQU86IG51bGwsXG4gICAgcmVzdG9yZTogZXh0VkFPKCkgPyByZXN0b3JlVkFPIDogZnVuY3Rpb24gKCkge30sXG4gICAgY3JlYXRlVkFPOiBjcmVhdGVWQU8sXG4gICAgZ2V0VkFPOiBnZXRWQU8sXG4gICAgZGVzdHJveUJ1ZmZlcjogZGVzdHJveUJ1ZmZlcixcbiAgICBzZXRWQU86IGV4dFZBTygpID8gc2V0VkFPRVhUIDogc2V0VkFPRW11bGF0ZWQsXG4gICAgY2xlYXI6IGV4dFZBTygpID8gZGVzdHJveVZBT0VYVCA6IGZ1bmN0aW9uICgpIHt9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95QnVmZmVyIChidWZmZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUJpbmRpbmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgcmVjb3JkID0gYXR0cmlidXRlQmluZGluZ3NbaV1cbiAgICAgIGlmIChyZWNvcmQuYnVmZmVyID09PSBidWZmZXIpIHtcbiAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpXG4gICAgICAgIHJlY29yZC5idWZmZXIgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXh0VkFPICgpIHtcbiAgICByZXR1cm4gZXh0ZW5zaW9ucy5vZXNfdmVydGV4X2FycmF5X29iamVjdFxuICB9XG5cbiAgZnVuY3Rpb24gZXh0SW5zdGFuY2VkICgpIHtcbiAgICByZXR1cm4gZXh0ZW5zaW9ucy5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzXG4gIH1cblxuICBmdW5jdGlvbiBnZXRWQU8gKHZhbykge1xuICAgIGlmICh0eXBlb2YgdmFvID09PSAnZnVuY3Rpb24nICYmIHZhby5fdmFvKSB7XG4gICAgICByZXR1cm4gdmFvLl92YW9cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFZBT0VYVCAodmFvKSB7XG4gICAgaWYgKHZhbyA9PT0gc3RhdGUuY3VycmVudFZBTykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciBleHQgPSBleHRWQU8oKVxuICAgIGlmICh2YW8pIHtcbiAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvLnZhbylcbiAgICB9IGVsc2Uge1xuICAgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKVxuICAgIH1cbiAgICBzdGF0ZS5jdXJyZW50VkFPID0gdmFvXG4gIH1cblxuICBmdW5jdGlvbiBzZXRWQU9FbXVsYXRlZCAodmFvKSB7XG4gICAgaWYgKHZhbyA9PT0gc3RhdGUuY3VycmVudFZBTykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh2YW8pIHtcbiAgICAgIHZhby5iaW5kQXR0cnMoKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZXh0aSA9IGV4dEluc3RhbmNlZCgpXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUJpbmRpbmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBiaW5kaW5nID0gYXR0cmlidXRlQmluZGluZ3NbaV1cbiAgICAgICAgaWYgKGJpbmRpbmcuYnVmZmVyKSB7XG4gICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSlcbiAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksIGJpbmRpbmcuc2l6ZSwgYmluZGluZy50eXBlLCBiaW5kaW5nLm5vcm1hbGl6ZWQsIGJpbmRpbmcuc3RyaWRlLCBiaW5kaW5nLm9mZmZzZXQpXG4gICAgICAgICAgaWYgKGV4dGkgJiYgYmluZGluZy5kaXZpc29yKSB7XG4gICAgICAgICAgICBleHRpLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpLCBiaW5kaW5nLmRpdmlzb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKVxuICAgICAgICAgIGdsLnZlcnRleEF0dHJpYjRmKGksIGJpbmRpbmcueCwgYmluZGluZy55LCBiaW5kaW5nLnosIGJpbmRpbmcudylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzdGF0ZS5jdXJyZW50VkFPID0gdmFvXG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95VkFPRVhUICgpIHtcbiAgICB2YWx1ZXModmFvU2V0KS5mb3JFYWNoKGZ1bmN0aW9uICh2YW8pIHtcbiAgICAgIHZhby5kZXN0cm95KClcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gUkVHTFZBTyAoKSB7XG4gICAgdGhpcy5pZCA9ICsrdmFvQ291bnRcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBbXVxuICAgIHZhciBleHRlbnNpb24gPSBleHRWQU8oKVxuICAgIGlmIChleHRlbnNpb24pIHtcbiAgICAgIHRoaXMudmFvID0gZXh0ZW5zaW9uLmNyZWF0ZVZlcnRleEFycmF5T0VTKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YW8gPSBudWxsXG4gICAgfVxuICAgIHZhb1NldFt0aGlzLmlkXSA9IHRoaXNcbiAgICB0aGlzLmJ1ZmZlcnMgPSBbXVxuICB9XG5cbiAgUkVHTFZBTy5wcm90b3R5cGUuYmluZEF0dHJzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRpID0gZXh0SW5zdGFuY2VkKClcbiAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGF0dHIgPSBhdHRyaWJ1dGVzW2ldXG4gICAgICBpZiAoYXR0ci5idWZmZXIpIHtcbiAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSlcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIkMSwgYXR0ci5idWZmZXIuYnVmZmVyKVxuICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksIGF0dHIuc2l6ZSwgYXR0ci50eXBlLCBhdHRyLm5vcm1hbGl6ZWQsIGF0dHIuc3RyaWRlLCBhdHRyLm9mZnNldClcbiAgICAgICAgaWYgKGV4dGkgJiYgYXR0ci5kaXZpc29yKSB7XG4gICAgICAgICAgZXh0aS52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaSwgYXR0ci5kaXZpc29yKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSlcbiAgICAgICAgZ2wudmVydGV4QXR0cmliNGYoaSwgYXR0ci54LCBhdHRyLnksIGF0dHIueiwgYXR0ci53KVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBqID0gYXR0cmlidXRlcy5sZW5ndGg7IGogPCBOVU1fQVRUUklCVVRFUzsgKytqKSB7XG4gICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoailcbiAgICB9XG4gIH1cblxuICBSRUdMVkFPLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHQgPSBleHRWQU8oKVxuICAgIGlmIChleHQpIHtcbiAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModGhpcy52YW8pXG4gICAgICB0aGlzLmJpbmRBdHRycygpXG4gICAgICBzdGF0ZS5jdXJyZW50VkFPID0gdGhpc1xuICAgIH1cbiAgfVxuXG4gIFJFR0xWQU8ucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMudmFvKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0VkFPKClcbiAgICAgIGlmICh0aGlzID09PSBzdGF0ZS5jdXJyZW50VkFPKSB7XG4gICAgICAgIHN0YXRlLmN1cnJlbnRWQU8gPSBudWxsXG4gICAgICAgIGV4dGVuc2lvbi5iaW5kVmVydGV4QXJyYXlPRVMobnVsbClcbiAgICAgIH1cbiAgICAgIGV4dGVuc2lvbi5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbylcbiAgICAgIHRoaXMudmFvID0gbnVsbFxuICAgIH1cbiAgICBpZiAodmFvU2V0W3RoaXMuaWRdKSB7XG4gICAgICBkZWxldGUgdmFvU2V0W3RoaXMuaWRdXG4gICAgICBzdGF0cy52YW9Db3VudCAtPSAxXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdG9yZVZBTyAoKSB7XG4gICAgdmFyIGV4dCA9IGV4dFZBTygpXG4gICAgaWYgKGV4dCkge1xuICAgICAgdmFsdWVzKHZhb1NldCkuZm9yRWFjaChmdW5jdGlvbiAodmFvKSB7XG4gICAgICAgIHZhby5yZWZyZXNoKClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVkFPIChfYXR0cikge1xuICAgIHZhciB2YW8gPSBuZXcgUkVHTFZBTygpXG4gICAgc3RhdHMudmFvQ291bnQgKz0gMVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlVkFPIChhdHRyaWJ1dGVzKSB7XG4gICAgICBjaGVjayQxKEFycmF5LmlzQXJyYXkoYXR0cmlidXRlcyksICdhcmd1bWVudHMgdG8gdmVydGV4IGFycmF5IGNvbnN0cnVjdG9yIG11c3QgYmUgYW4gYXJyYXknKVxuICAgICAgY2hlY2skMShhdHRyaWJ1dGVzLmxlbmd0aCA8IE5VTV9BVFRSSUJVVEVTLCAndG9vIG1hbnkgYXR0cmlidXRlcycpXG4gICAgICBjaGVjayQxKGF0dHJpYnV0ZXMubGVuZ3RoID4gMCwgJ211c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgYXR0cmlidXRlJylcblxuICAgICAgdmFyIGJ1ZlVwZGF0ZWQgPSB7fVxuICAgICAgdmFyIG5hdHRyaWJ1dGVzID0gdmFvLmF0dHJpYnV0ZXNcbiAgICAgIG5hdHRyaWJ1dGVzLmxlbmd0aCA9IGF0dHJpYnV0ZXMubGVuZ3RoXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHNwZWMgPSBhdHRyaWJ1dGVzW2ldXG4gICAgICAgIHZhciByZWMgPSBuYXR0cmlidXRlc1tpXSA9IG5ldyBBdHRyaWJ1dGVSZWNvcmQoKVxuICAgICAgICB2YXIgZGF0YSA9IHNwZWMuZGF0YSB8fCBzcGVjXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpIHx8IGlzVHlwZWRBcnJheShkYXRhKSB8fCBpc05EQXJyYXlMaWtlKGRhdGEpKSB7XG4gICAgICAgICAgdmFyIGJ1ZlxuICAgICAgICAgIGlmICh2YW8uYnVmZmVyc1tpXSkge1xuICAgICAgICAgICAgYnVmID0gdmFvLmJ1ZmZlcnNbaV1cbiAgICAgICAgICAgIGlmIChpc1R5cGVkQXJyYXkoZGF0YSkgJiYgYnVmLl9idWZmZXIuYnl0ZUxlbmd0aCA+PSBkYXRhLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgYnVmLnN1YmRhdGEoZGF0YSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJ1Zi5kZXN0cm95KClcbiAgICAgICAgICAgICAgdmFvLmJ1ZmZlcnNbaV0gPSBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdmFvLmJ1ZmZlcnNbaV0pIHtcbiAgICAgICAgICAgIGJ1ZiA9IHZhby5idWZmZXJzW2ldID0gYnVmZmVyU3RhdGUuY3JlYXRlKHNwZWMsIEdMX0FSUkFZX0JVRkZFUiQxLCBmYWxzZSwgdHJ1ZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVjLmJ1ZmZlciA9IGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcihidWYpXG4gICAgICAgICAgcmVjLnNpemUgPSByZWMuYnVmZmVyLmRpbWVuc2lvbiB8IDBcbiAgICAgICAgICByZWMubm9ybWFsaXplZCA9IGZhbHNlXG4gICAgICAgICAgcmVjLnR5cGUgPSByZWMuYnVmZmVyLmR0eXBlXG4gICAgICAgICAgcmVjLm9mZnNldCA9IDBcbiAgICAgICAgICByZWMuc3RyaWRlID0gMFxuICAgICAgICAgIHJlYy5kaXZpc29yID0gMFxuICAgICAgICAgIHJlYy5zdGF0ZSA9IDFcbiAgICAgICAgICBidWZVcGRhdGVkW2ldID0gMVxuICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcihzcGVjKSkge1xuICAgICAgICAgIHJlYy5idWZmZXIgPSBidWZmZXJTdGF0ZS5nZXRCdWZmZXIoc3BlYylcbiAgICAgICAgICByZWMuc2l6ZSA9IHJlYy5idWZmZXIuZGltZW5zaW9uIHwgMFxuICAgICAgICAgIHJlYy5ub3JtYWxpemVkID0gZmFsc2VcbiAgICAgICAgICByZWMudHlwZSA9IHJlYy5idWZmZXIuZHR5cGVcbiAgICAgICAgICByZWMub2Zmc2V0ID0gMFxuICAgICAgICAgIHJlYy5zdHJpZGUgPSAwXG4gICAgICAgICAgcmVjLmRpdmlzb3IgPSAwXG4gICAgICAgICAgcmVjLnN0YXRlID0gMVxuICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcihzcGVjLmJ1ZmZlcikpIHtcbiAgICAgICAgICByZWMuYnVmZmVyID0gYnVmZmVyU3RhdGUuZ2V0QnVmZmVyKHNwZWMuYnVmZmVyKVxuICAgICAgICAgIHJlYy5zaXplID0gKCgrc3BlYy5zaXplKSB8fCByZWMuYnVmZmVyLmRpbWVuc2lvbikgfCAwXG4gICAgICAgICAgcmVjLm5vcm1hbGl6ZWQgPSAhIXNwZWMubm9ybWFsaXplZCB8fCBmYWxzZVxuICAgICAgICAgIGlmICgndHlwZScgaW4gc3BlYykge1xuICAgICAgICAgICAgY2hlY2skMS5wYXJhbWV0ZXIoc3BlYy50eXBlLCBnbFR5cGVzLCAnaW52YWxpZCBidWZmZXIgdHlwZScpXG4gICAgICAgICAgICByZWMudHlwZSA9IGdsVHlwZXNbc3BlYy50eXBlXVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWMudHlwZSA9IHJlYy5idWZmZXIuZHR5cGVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVjLm9mZnNldCA9IChzcGVjLm9mZnNldCB8fCAwKSB8IDBcbiAgICAgICAgICByZWMuc3RyaWRlID0gKHNwZWMuc3RyaWRlIHx8IDApIHwgMFxuICAgICAgICAgIHJlYy5kaXZpc29yID0gKHNwZWMuZGl2aXNvciB8fCAwKSB8IDBcbiAgICAgICAgICByZWMuc3RhdGUgPSAxXG5cbiAgICAgICAgICBjaGVjayQxKHJlYy5zaXplID49IDEgJiYgcmVjLnNpemUgPD0gNCwgJ3NpemUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQnKVxuICAgICAgICAgIGNoZWNrJDEocmVjLm9mZnNldCA+PSAwLCAnaW52YWxpZCBvZmZzZXQnKVxuICAgICAgICAgIGNoZWNrJDEocmVjLnN0cmlkZSA+PSAwICYmIHJlYy5zdHJpZGUgPD0gMjU1LCAnc3RyaWRlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTUnKVxuICAgICAgICAgIGNoZWNrJDEocmVjLmRpdmlzb3IgPj0gMCwgJ2Rpdmlzb3IgbXVzdCBiZSBwb3NpdGl2ZScpXG4gICAgICAgICAgY2hlY2skMSghcmVjLmRpdmlzb3IgfHwgISFleHRlbnNpb25zLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMsICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIG11c3QgYmUgZW5hYmxlZCB0byB1c2UgZGl2aXNvcicpXG4gICAgICAgIH0gZWxzZSBpZiAoJ3gnIGluIHNwZWMpIHtcbiAgICAgICAgICBjaGVjayQxKGkgPiAwLCAnZmlyc3QgYXR0cmlidXRlIG11c3Qgbm90IGJlIGEgY29uc3RhbnQnKVxuICAgICAgICAgIHJlYy54ID0gK3NwZWMueCB8fCAwXG4gICAgICAgICAgcmVjLnkgPSArc3BlYy55IHx8IDBcbiAgICAgICAgICByZWMueiA9ICtzcGVjLnogfHwgMFxuICAgICAgICAgIHJlYy53ID0gK3NwZWMudyB8fCAwXG4gICAgICAgICAgcmVjLnN0YXRlID0gMlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoZWNrJDEoZmFsc2UsICdpbnZhbGlkIGF0dHJpYnV0ZSBzcGVjIGZvciBsb2NhdGlvbiAnICsgaSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyByZXRpcmUgdW51c2VkIGJ1ZmZlcnNcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFvLmJ1ZmZlcnMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgaWYgKCFidWZVcGRhdGVkW2pdICYmIHZhby5idWZmZXJzW2pdKSB7XG4gICAgICAgICAgdmFvLmJ1ZmZlcnNbal0uZGVzdHJveSgpXG4gICAgICAgICAgdmFvLmJ1ZmZlcnNbal0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFvLnJlZnJlc2goKVxuICAgICAgcmV0dXJuIHVwZGF0ZVZBT1xuICAgIH1cblxuICAgIHVwZGF0ZVZBTy5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YW8uYnVmZmVycy5sZW5ndGg7ICsraikge1xuICAgICAgICBpZiAodmFvLmJ1ZmZlcnNbal0pIHtcbiAgICAgICAgICB2YW8uYnVmZmVyc1tqXS5kZXN0cm95KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFvLmJ1ZmZlcnMubGVuZ3RoID0gMFxuICAgICAgdmFvLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHVwZGF0ZVZBTy5fdmFvID0gdmFvXG4gICAgdXBkYXRlVkFPLl9yZWdsVHlwZSA9ICd2YW8nXG5cbiAgICByZXR1cm4gdXBkYXRlVkFPKF9hdHRyKVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlXG59XG5cbnZhciBHTF9GUkFHTUVOVF9TSEFERVIgPSAzNTYzMlxudmFyIEdMX1ZFUlRFWF9TSEFERVIgPSAzNTYzM1xuXG52YXIgR0xfQUNUSVZFX1VOSUZPUk1TID0gMHg4Qjg2XG52YXIgR0xfQUNUSVZFX0FUVFJJQlVURVMgPSAweDhCODlcblxuZnVuY3Rpb24gd3JhcFNoYWRlclN0YXRlIChnbCwgc3RyaW5nU3RvcmUsIHN0YXRzLCBjb25maWcpIHtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIGdsc2wgY29tcGlsYXRpb24gYW5kIGxpbmtpbmdcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBmcmFnU2hhZGVycyA9IHt9XG4gIHZhciB2ZXJ0U2hhZGVycyA9IHt9XG5cbiAgZnVuY3Rpb24gQWN0aXZlSW5mbyAobmFtZSwgaWQsIGxvY2F0aW9uLCBpbmZvKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMuaWQgPSBpZFxuICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvblxuICAgIHRoaXMuaW5mbyA9IGluZm9cbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2VydEFjdGl2ZUluZm8gKGxpc3QsIGluZm8pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChsaXN0W2ldLmlkID09PSBpbmZvLmlkKSB7XG4gICAgICAgIGxpc3RbaV0ubG9jYXRpb24gPSBpbmZvLmxvY2F0aW9uXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBsaXN0LnB1c2goaW5mbylcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNoYWRlciAodHlwZSwgaWQsIGNvbW1hbmQpIHtcbiAgICB2YXIgY2FjaGUgPSB0eXBlID09PSBHTF9GUkFHTUVOVF9TSEFERVIgPyBmcmFnU2hhZGVycyA6IHZlcnRTaGFkZXJzXG4gICAgdmFyIHNoYWRlciA9IGNhY2hlW2lkXVxuXG4gICAgaWYgKCFzaGFkZXIpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBzdHJpbmdTdG9yZS5zdHIoaWQpXG4gICAgICBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIodHlwZSlcbiAgICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNvdXJjZSlcbiAgICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKVxuICAgICAgY2hlY2skMS5zaGFkZXJFcnJvcihnbCwgc2hhZGVyLCBzb3VyY2UsIHR5cGUsIGNvbW1hbmQpXG4gICAgICBjYWNoZVtpZF0gPSBzaGFkZXJcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhZGVyXG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gcHJvZ3JhbSBsaW5raW5nXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgcHJvZ3JhbUNhY2hlID0ge31cbiAgdmFyIHByb2dyYW1MaXN0ID0gW11cblxuICB2YXIgUFJPR1JBTV9DT1VOVEVSID0gMFxuXG4gIGZ1bmN0aW9uIFJFR0xQcm9ncmFtIChmcmFnSWQsIHZlcnRJZCkge1xuICAgIHRoaXMuaWQgPSBQUk9HUkFNX0NPVU5URVIrK1xuICAgIHRoaXMuZnJhZ0lkID0gZnJhZ0lkXG4gICAgdGhpcy52ZXJ0SWQgPSB2ZXJ0SWRcbiAgICB0aGlzLnByb2dyYW0gPSBudWxsXG4gICAgdGhpcy51bmlmb3JtcyA9IFtdXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gW11cbiAgICB0aGlzLnJlZkNvdW50ID0gMVxuXG4gICAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgICB0aGlzLnN0YXRzID0ge1xuICAgICAgICB1bmlmb3Jtc0NvdW50OiAwLFxuICAgICAgICBhdHRyaWJ1dGVzQ291bnQ6IDBcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsaW5rUHJvZ3JhbSAoZGVzYywgY29tbWFuZCwgYXR0cmlidXRlTG9jYXRpb25zKSB7XG4gICAgdmFyIGksIGluZm9cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBjb21waWxlICYgbGlua1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB2YXIgZnJhZ1NoYWRlciA9IGdldFNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIsIGRlc2MuZnJhZ0lkKVxuICAgIHZhciB2ZXJ0U2hhZGVyID0gZ2V0U2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIsIGRlc2MudmVydElkKVxuXG4gICAgdmFyIHByb2dyYW0gPSBkZXNjLnByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKClcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ1NoYWRlcilcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydFNoYWRlcilcbiAgICBpZiAoYXR0cmlidXRlTG9jYXRpb25zKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cmlidXRlTG9jYXRpb25zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBiaW5kaW5nID0gYXR0cmlidXRlTG9jYXRpb25zW2ldXG4gICAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBiaW5kaW5nWzBdLCBiaW5kaW5nWzFdKVxuICAgICAgfVxuICAgIH1cblxuICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pXG4gICAgY2hlY2skMS5saW5rRXJyb3IoXG4gICAgICBnbCxcbiAgICAgIHByb2dyYW0sXG4gICAgICBzdHJpbmdTdG9yZS5zdHIoZGVzYy5mcmFnSWQpLFxuICAgICAgc3RyaW5nU3RvcmUuc3RyKGRlc2MudmVydElkKSxcbiAgICAgIGNvbW1hbmQpXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZ3JhYiB1bmlmb3Jtc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB2YXIgbnVtVW5pZm9ybXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNUylcbiAgICBpZiAoY29uZmlnLnByb2ZpbGUpIHtcbiAgICAgIGRlc2Muc3RhdHMudW5pZm9ybXNDb3VudCA9IG51bVVuaWZvcm1zXG4gICAgfVxuICAgIHZhciB1bmlmb3JtcyA9IGRlc2MudW5pZm9ybXNcbiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtVW5pZm9ybXM7ICsraSkge1xuICAgICAgaW5mbyA9IGdsLmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaSlcbiAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLnNpemUgPiAxKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpbmZvLnNpemU7ICsraikge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBpbmZvLm5hbWUucmVwbGFjZSgnWzBdJywgJ1snICsgaiArICddJylcbiAgICAgICAgICAgIGluc2VydEFjdGl2ZUluZm8odW5pZm9ybXMsIG5ldyBBY3RpdmVJbmZvKFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBzdHJpbmdTdG9yZS5pZChuYW1lKSxcbiAgICAgICAgICAgICAgZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpLFxuICAgICAgICAgICAgICBpbmZvKSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5zZXJ0QWN0aXZlSW5mbyh1bmlmb3JtcywgbmV3IEFjdGl2ZUluZm8oXG4gICAgICAgICAgICBpbmZvLm5hbWUsXG4gICAgICAgICAgICBzdHJpbmdTdG9yZS5pZChpbmZvLm5hbWUpLFxuICAgICAgICAgICAgZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIGluZm8ubmFtZSksXG4gICAgICAgICAgICBpbmZvKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBncmFiIGF0dHJpYnV0ZXNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdmFyIG51bUF0dHJpYnV0ZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVTKVxuICAgIGlmIChjb25maWcucHJvZmlsZSkge1xuICAgICAgZGVzYy5zdGF0cy5hdHRyaWJ1dGVzQ291bnQgPSBudW1BdHRyaWJ1dGVzXG4gICAgfVxuXG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBkZXNjLmF0dHJpYnV0ZXNcbiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtQXR0cmlidXRlczsgKytpKSB7XG4gICAgICBpbmZvID0gZ2wuZ2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGkpXG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICBpbnNlcnRBY3RpdmVJbmZvKGF0dHJpYnV0ZXMsIG5ldyBBY3RpdmVJbmZvKFxuICAgICAgICAgIGluZm8ubmFtZSxcbiAgICAgICAgICBzdHJpbmdTdG9yZS5pZChpbmZvLm5hbWUpLFxuICAgICAgICAgIGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZm8ubmFtZSksXG4gICAgICAgICAgaW5mbykpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbmZpZy5wcm9maWxlKSB7XG4gICAgc3RhdHMuZ2V0TWF4VW5pZm9ybXNDb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBtID0gMFxuICAgICAgcHJvZ3JhbUxpc3QuZm9yRWFjaChmdW5jdGlvbiAoZGVzYykge1xuICAgICAgICBpZiAoZGVzYy5zdGF0cy51bmlmb3Jtc0NvdW50ID4gbSkge1xuICAgICAgICAgIG0gPSBkZXNjLnN0YXRzLnVuaWZvcm1zQ291bnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiBtXG4gICAgfVxuXG4gICAgc3RhdHMuZ2V0TWF4QXR0cmlidXRlc0NvdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG0gPSAwXG4gICAgICBwcm9ncmFtTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChkZXNjKSB7XG4gICAgICAgIGlmIChkZXNjLnN0YXRzLmF0dHJpYnV0ZXNDb3VudCA+IG0pIHtcbiAgICAgICAgICBtID0gZGVzYy5zdGF0cy5hdHRyaWJ1dGVzQ291bnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiBtXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdG9yZVNoYWRlcnMgKCkge1xuICAgIGZyYWdTaGFkZXJzID0ge31cbiAgICB2ZXJ0U2hhZGVycyA9IHt9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9ncmFtTGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGlua1Byb2dyYW0ocHJvZ3JhbUxpc3RbaV0sIG51bGwsIHByb2dyYW1MaXN0W2ldLmF0dHJpYnV0ZXMubWFwKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICAgIHJldHVybiBbaW5mby5sb2NhdGlvbiwgaW5mby5uYW1lXVxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGRlbGV0ZVNoYWRlciA9IGdsLmRlbGV0ZVNoYWRlci5iaW5kKGdsKVxuICAgICAgdmFsdWVzKGZyYWdTaGFkZXJzKS5mb3JFYWNoKGRlbGV0ZVNoYWRlcilcbiAgICAgIGZyYWdTaGFkZXJzID0ge31cbiAgICAgIHZhbHVlcyh2ZXJ0U2hhZGVycykuZm9yRWFjaChkZWxldGVTaGFkZXIpXG4gICAgICB2ZXJ0U2hhZGVycyA9IHt9XG5cbiAgICAgIHByb2dyYW1MaXN0LmZvckVhY2goZnVuY3Rpb24gKGRlc2MpIHtcbiAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShkZXNjLnByb2dyYW0pXG4gICAgICB9KVxuICAgICAgcHJvZ3JhbUxpc3QubGVuZ3RoID0gMFxuICAgICAgcHJvZ3JhbUNhY2hlID0ge31cblxuICAgICAgc3RhdHMuc2hhZGVyQ291bnQgPSAwXG4gICAgfSxcblxuICAgIHByb2dyYW06IGZ1bmN0aW9uICh2ZXJ0SWQsIGZyYWdJZCwgY29tbWFuZCwgYXR0cmliTG9jYXRpb25zKSB7XG4gICAgICBjaGVjayQxLmNvbW1hbmQodmVydElkID49IDAsICdtaXNzaW5nIHZlcnRleCBzaGFkZXInLCBjb21tYW5kKVxuICAgICAgY2hlY2skMS5jb21tYW5kKGZyYWdJZCA+PSAwLCAnbWlzc2luZyBmcmFnbWVudCBzaGFkZXInLCBjb21tYW5kKVxuXG4gICAgICB2YXIgY2FjaGUgPSBwcm9ncmFtQ2FjaGVbZnJhZ0lkXVxuICAgICAgaWYgKCFjYWNoZSkge1xuICAgICAgICBjYWNoZSA9IHByb2dyYW1DYWNoZVtmcmFnSWRdID0ge31cbiAgICAgIH1cbiAgICAgIHZhciBwcmV2UHJvZ3JhbSA9IGNhY2hlW3ZlcnRJZF1cbiAgICAgIGlmIChwcmV2UHJvZ3JhbSkge1xuICAgICAgICBwcmV2UHJvZ3JhbS5yZWZDb3VudCsrXG4gICAgICAgIGlmICghYXR0cmliTG9jYXRpb25zKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZQcm9ncmFtXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBwcm9ncmFtID0gbmV3IFJFR0xQcm9ncmFtKGZyYWdJZCwgdmVydElkKVxuICAgICAgc3RhdHMuc2hhZGVyQ291bnQrK1xuICAgICAgbGlua1Byb2dyYW0ocHJvZ3JhbSwgY29tbWFuZCwgYXR0cmliTG9jYXRpb25zKVxuICAgICAgaWYgKCFwcmV2UHJvZ3JhbSkge1xuICAgICAgICBjYWNoZVt2ZXJ0SWRdID0gcHJvZ3JhbVxuICAgICAgfVxuICAgICAgcHJvZ3JhbUxpc3QucHVzaChwcm9ncmFtKVxuICAgICAgcmV0dXJuIGV4dGVuZChwcm9ncmFtLCB7XG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwcm9ncmFtLnJlZkNvdW50LS1cbiAgICAgICAgICBpZiAocHJvZ3JhbS5yZWZDb3VudCA8PSAwKSB7XG4gICAgICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0ucHJvZ3JhbSlcbiAgICAgICAgICAgIHZhciBpZHggPSBwcm9ncmFtTGlzdC5pbmRleE9mKHByb2dyYW0pXG4gICAgICAgICAgICBwcm9ncmFtTGlzdC5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgICAgc3RhdHMuc2hhZGVyQ291bnQtLVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBubyBwcm9ncmFtIGlzIGxpbmtlZCB0byB0aGlzIHZlcnQgYW55bW9yZVxuICAgICAgICAgIGlmIChjYWNoZVtwcm9ncmFtLnZlcnRJZF0ucmVmQ291bnQgPD0gMCkge1xuICAgICAgICAgICAgZ2wuZGVsZXRlU2hhZGVyKHZlcnRTaGFkZXJzW3Byb2dyYW0udmVydElkXSlcbiAgICAgICAgICAgIGRlbGV0ZSB2ZXJ0U2hhZGVyc1twcm9ncmFtLnZlcnRJZF1cbiAgICAgICAgICAgIGRlbGV0ZSBwcm9ncmFtQ2FjaGVbcHJvZ3JhbS5mcmFnSWRdW3Byb2dyYW0udmVydElkXVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBubyBwcm9ncmFtIGlzIGxpbmtlZCB0byB0aGlzIGZyYWcgYW55bW9yZVxuICAgICAgICAgIGlmICghT2JqZWN0LmtleXMocHJvZ3JhbUNhY2hlW3Byb2dyYW0uZnJhZ0lkXSkubGVuZ3RoKSB7XG4gICAgICAgICAgICBnbC5kZWxldGVTaGFkZXIoZnJhZ1NoYWRlcnNbcHJvZ3JhbS5mcmFnSWRdKVxuICAgICAgICAgICAgZGVsZXRlIGZyYWdTaGFkZXJzW3Byb2dyYW0uZnJhZ0lkXVxuICAgICAgICAgICAgZGVsZXRlIHByb2dyYW1DYWNoZVtwcm9ncmFtLmZyYWdJZF1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlc3RvcmU6IHJlc3RvcmVTaGFkZXJzLFxuXG4gICAgc2hhZGVyOiBnZXRTaGFkZXIsXG5cbiAgICBmcmFnOiAtMSxcbiAgICB2ZXJ0OiAtMVxuICB9XG59XG5cbnZhciBHTF9SR0JBJDMgPSA2NDA4XG52YXIgR0xfVU5TSUdORURfQllURSQ3ID0gNTEyMVxudmFyIEdMX1BBQ0tfQUxJR05NRU5UID0gMHgwRDA1XG52YXIgR0xfRkxPQVQkNyA9IDB4MTQwNiAvLyA1MTI2XG5cbmZ1bmN0aW9uIHdyYXBSZWFkUGl4ZWxzIChcbiAgZ2wsXG4gIGZyYW1lYnVmZmVyU3RhdGUsXG4gIHJlZ2xQb2xsLFxuICBjb250ZXh0LFxuICBnbEF0dHJpYnV0ZXMsXG4gIGV4dGVuc2lvbnMsXG4gIGxpbWl0cykge1xuICBmdW5jdGlvbiByZWFkUGl4ZWxzSW1wbCAoaW5wdXQpIHtcbiAgICB2YXIgdHlwZVxuICAgIGlmIChmcmFtZWJ1ZmZlclN0YXRlLm5leHQgPT09IG51bGwpIHtcbiAgICAgIGNoZWNrJDEoXG4gICAgICAgIGdsQXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsXG4gICAgICAgICd5b3UgbXVzdCBjcmVhdGUgYSB3ZWJnbCBjb250ZXh0IHdpdGggXCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXJcIjp0cnVlIGluIG9yZGVyIHRvIHJlYWQgcGl4ZWxzIGZyb20gdGhlIGRyYXdpbmcgYnVmZmVyJylcbiAgICAgIHR5cGUgPSBHTF9VTlNJR05FRF9CWVRFJDdcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2skMShcbiAgICAgICAgZnJhbWVidWZmZXJTdGF0ZS5uZXh0LmNvbG9yQXR0YWNobWVudHNbMF0udGV4dHVyZSAhPT0gbnVsbCxcbiAgICAgICAgJ1lvdSBjYW5ub3QgcmVhZCBmcm9tIGEgcmVuZGVyYnVmZmVyJylcbiAgICAgIHR5cGUgPSBmcmFtZWJ1ZmZlclN0YXRlLm5leHQuY29sb3JBdHRhY2htZW50c1swXS50ZXh0dXJlLl90ZXh0dXJlLnR5cGVcblxuICAgICAgaWYgKGV4dGVuc2lvbnMub2VzX3RleHR1cmVfZmxvYXQpIHtcbiAgICAgICAgY2hlY2skMShcbiAgICAgICAgICB0eXBlID09PSBHTF9VTlNJR05FRF9CWVRFJDcgfHwgdHlwZSA9PT0gR0xfRkxPQVQkNyxcbiAgICAgICAgICAnUmVhZGluZyBmcm9tIGEgZnJhbWVidWZmZXIgaXMgb25seSBhbGxvd2VkIGZvciB0aGUgdHlwZXMgXFwndWludDhcXCcgYW5kIFxcJ2Zsb2F0XFwnJylcblxuICAgICAgICBpZiAodHlwZSA9PT0gR0xfRkxPQVQkNykge1xuICAgICAgICAgIGNoZWNrJDEobGltaXRzLnJlYWRGbG9hdCwgJ1JlYWRpbmcgXFwnZmxvYXRcXCcgdmFsdWVzIGlzIG5vdCBwZXJtaXR0ZWQgaW4geW91ciBicm93c2VyLiBGb3IgYSBmYWxsYmFjaywgcGxlYXNlIHNlZTogaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvZ2xzbC1yZWFkLWZsb2F0JylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMShcbiAgICAgICAgICB0eXBlID09PSBHTF9VTlNJR05FRF9CWVRFJDcsXG4gICAgICAgICAgJ1JlYWRpbmcgZnJvbSBhIGZyYW1lYnVmZmVyIGlzIG9ubHkgYWxsb3dlZCBmb3IgdGhlIHR5cGUgXFwndWludDhcXCcnKVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB4ID0gMFxuICAgIHZhciB5ID0gMFxuICAgIHZhciB3aWR0aCA9IGNvbnRleHQuZnJhbWVidWZmZXJXaWR0aFxuICAgIHZhciBoZWlnaHQgPSBjb250ZXh0LmZyYW1lYnVmZmVySGVpZ2h0XG4gICAgdmFyIGRhdGEgPSBudWxsXG5cbiAgICBpZiAoaXNUeXBlZEFycmF5KGlucHV0KSkge1xuICAgICAgZGF0YSA9IGlucHV0XG4gICAgfSBlbHNlIGlmIChpbnB1dCkge1xuICAgICAgY2hlY2skMS50eXBlKGlucHV0LCAnb2JqZWN0JywgJ2ludmFsaWQgYXJndW1lbnRzIHRvIHJlZ2wucmVhZCgpJylcbiAgICAgIHggPSBpbnB1dC54IHwgMFxuICAgICAgeSA9IGlucHV0LnkgfCAwXG4gICAgICBjaGVjayQxKFxuICAgICAgICB4ID49IDAgJiYgeCA8IGNvbnRleHQuZnJhbWVidWZmZXJXaWR0aCxcbiAgICAgICAgJ2ludmFsaWQgeCBvZmZzZXQgZm9yIHJlZ2wucmVhZCcpXG4gICAgICBjaGVjayQxKFxuICAgICAgICB5ID49IDAgJiYgeSA8IGNvbnRleHQuZnJhbWVidWZmZXJIZWlnaHQsXG4gICAgICAgICdpbnZhbGlkIHkgb2Zmc2V0IGZvciByZWdsLnJlYWQnKVxuICAgICAgd2lkdGggPSAoaW5wdXQud2lkdGggfHwgKGNvbnRleHQuZnJhbWVidWZmZXJXaWR0aCAtIHgpKSB8IDBcbiAgICAgIGhlaWdodCA9IChpbnB1dC5oZWlnaHQgfHwgKGNvbnRleHQuZnJhbWVidWZmZXJIZWlnaHQgLSB5KSkgfCAwXG4gICAgICBkYXRhID0gaW5wdXQuZGF0YSB8fCBudWxsXG4gICAgfVxuXG4gICAgLy8gc2FuaXR5IGNoZWNrIGlucHV0LmRhdGFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKHR5cGUgPT09IEdMX1VOU0lHTkVEX0JZVEUkNykge1xuICAgICAgICBjaGVjayQxKFxuICAgICAgICAgIGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5LFxuICAgICAgICAgICdidWZmZXIgbXVzdCBiZSBcXCdVaW50OEFycmF5XFwnIHdoZW4gcmVhZGluZyBmcm9tIGEgZnJhbWVidWZmZXIgb2YgdHlwZSBcXCd1aW50OFxcJycpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEdMX0ZMT0FUJDcpIHtcbiAgICAgICAgY2hlY2skMShcbiAgICAgICAgICBkYXRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5LFxuICAgICAgICAgICdidWZmZXIgbXVzdCBiZSBcXCdGbG9hdDMyQXJyYXlcXCcgd2hlbiByZWFkaW5nIGZyb20gYSBmcmFtZWJ1ZmZlciBvZiB0eXBlIFxcJ2Zsb2F0XFwnJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVjayQxKFxuICAgICAgd2lkdGggPiAwICYmIHdpZHRoICsgeCA8PSBjb250ZXh0LmZyYW1lYnVmZmVyV2lkdGgsXG4gICAgICAnaW52YWxpZCB3aWR0aCBmb3IgcmVhZCBwaXhlbHMnKVxuICAgIGNoZWNrJDEoXG4gICAgICBoZWlnaHQgPiAwICYmIGhlaWdodCArIHkgPD0gY29udGV4dC5mcmFtZWJ1ZmZlckhlaWdodCxcbiAgICAgICdpbnZhbGlkIGhlaWdodCBmb3IgcmVhZCBwaXhlbHMnKVxuXG4gICAgLy8gVXBkYXRlIFdlYkdMIHN0YXRlXG4gICAgcmVnbFBvbGwoKVxuXG4gICAgLy8gQ29tcHV0ZSBzaXplXG4gICAgdmFyIHNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDRcblxuICAgIC8vIEFsbG9jYXRlIGRhdGFcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIGlmICh0eXBlID09PSBHTF9VTlNJR05FRF9CWVRFJDcpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBVaW50OEFycmF5KHNpemUpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEdMX0ZMT0FUJDcpIHtcbiAgICAgICAgZGF0YSA9IGRhdGEgfHwgbmV3IEZsb2F0MzJBcnJheShzaXplKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFR5cGUgY2hlY2tcbiAgICBjaGVjayQxLmlzVHlwZWRBcnJheShkYXRhLCAnZGF0YSBidWZmZXIgZm9yIHJlZ2wucmVhZCgpIG11c3QgYmUgYSB0eXBlZGFycmF5JylcbiAgICBjaGVjayQxKGRhdGEuYnl0ZUxlbmd0aCA+PSBzaXplLCAnZGF0YSBidWZmZXIgZm9yIHJlZ2wucmVhZCgpIHRvbyBzbWFsbCcpXG5cbiAgICAvLyBSdW4gcmVhZCBwaXhlbHNcbiAgICBnbC5waXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgNClcbiAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEkMyxcbiAgICAgIHR5cGUsXG4gICAgICBkYXRhKVxuXG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRQaXhlbHNGQk8gKG9wdGlvbnMpIHtcbiAgICB2YXIgcmVzdWx0XG4gICAgZnJhbWVidWZmZXJTdGF0ZS5zZXRGQk8oe1xuICAgICAgZnJhbWVidWZmZXI6IG9wdGlvbnMuZnJhbWVidWZmZXJcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXN1bHQgPSByZWFkUGl4ZWxzSW1wbChvcHRpb25zKVxuICAgIH0pXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZFBpeGVscyAob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucyB8fCAhKCdmcmFtZWJ1ZmZlcicgaW4gb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiByZWFkUGl4ZWxzSW1wbChvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVhZFBpeGVsc0ZCTyhvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWFkUGl4ZWxzXG59XG5cbmZ1bmN0aW9uIHNsaWNlICh4KSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh4KVxufVxuXG5mdW5jdGlvbiBqb2luICh4KSB7XG4gIHJldHVybiBzbGljZSh4KS5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnZpcm9ubWVudCAoKSB7XG4gIC8vIFVuaXF1ZSB2YXJpYWJsZSBpZCBjb3VudGVyXG4gIHZhciB2YXJDb3VudGVyID0gMFxuXG4gIC8vIExpbmtlZCB2YWx1ZXMgYXJlIHBhc3NlZCBmcm9tIHRoaXMgc2NvcGUgaW50byB0aGUgZ2VuZXJhdGVkIGNvZGUgYmxvY2tcbiAgLy8gQ2FsbGluZyBsaW5rKCkgcGFzc2VzIGEgdmFsdWUgaW50byB0aGUgZ2VuZXJhdGVkIHNjb3BlIGFuZCByZXR1cm5zXG4gIC8vIHRoZSB2YXJpYWJsZSBuYW1lIHdoaWNoIGl0IGlzIGJvdW5kIHRvXG4gIHZhciBsaW5rZWROYW1lcyA9IFtdXG4gIHZhciBsaW5rZWRWYWx1ZXMgPSBbXVxuICBmdW5jdGlvbiBsaW5rICh2YWx1ZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlua2VkVmFsdWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAobGlua2VkVmFsdWVzW2ldID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbGlua2VkTmFtZXNbaV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmFtZSA9ICdnJyArICh2YXJDb3VudGVyKyspXG4gICAgbGlua2VkTmFtZXMucHVzaChuYW1lKVxuICAgIGxpbmtlZFZhbHVlcy5wdXNoKHZhbHVlKVxuICAgIHJldHVybiBuYW1lXG4gIH1cblxuICAvLyBjcmVhdGUgYSBjb2RlIGJsb2NrXG4gIGZ1bmN0aW9uIGJsb2NrICgpIHtcbiAgICB2YXIgY29kZSA9IFtdXG4gICAgZnVuY3Rpb24gcHVzaCAoKSB7XG4gICAgICBjb2RlLnB1c2guYXBwbHkoY29kZSwgc2xpY2UoYXJndW1lbnRzKSlcbiAgICB9XG5cbiAgICB2YXIgdmFycyA9IFtdXG4gICAgZnVuY3Rpb24gZGVmICgpIHtcbiAgICAgIHZhciBuYW1lID0gJ3YnICsgKHZhckNvdW50ZXIrKylcbiAgICAgIHZhcnMucHVzaChuYW1lKVxuXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29kZS5wdXNoKG5hbWUsICc9JylcbiAgICAgICAgY29kZS5wdXNoLmFwcGx5KGNvZGUsIHNsaWNlKGFyZ3VtZW50cykpXG4gICAgICAgIGNvZGUucHVzaCgnOycpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuYW1lXG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dGVuZChwdXNoLCB7XG4gICAgICBkZWY6IGRlZixcbiAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBqb2luKFtcbiAgICAgICAgICAodmFycy5sZW5ndGggPiAwID8gJ3ZhciAnICsgdmFycy5qb2luKCcsJykgKyAnOycgOiAnJyksXG4gICAgICAgICAgam9pbihjb2RlKVxuICAgICAgICBdKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzY29wZSAoKSB7XG4gICAgdmFyIGVudHJ5ID0gYmxvY2soKVxuICAgIHZhciBleGl0ID0gYmxvY2soKVxuXG4gICAgdmFyIGVudHJ5VG9TdHJpbmcgPSBlbnRyeS50b1N0cmluZ1xuICAgIHZhciBleGl0VG9TdHJpbmcgPSBleGl0LnRvU3RyaW5nXG5cbiAgICBmdW5jdGlvbiBzYXZlIChvYmplY3QsIHByb3ApIHtcbiAgICAgIGV4aXQob2JqZWN0LCBwcm9wLCAnPScsIGVudHJ5LmRlZihvYmplY3QsIHByb3ApLCAnOycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgICBlbnRyeS5hcHBseShlbnRyeSwgc2xpY2UoYXJndW1lbnRzKSlcbiAgICB9LCB7XG4gICAgICBkZWY6IGVudHJ5LmRlZixcbiAgICAgIGVudHJ5OiBlbnRyeSxcbiAgICAgIGV4aXQ6IGV4aXQsXG4gICAgICBzYXZlOiBzYXZlLFxuICAgICAgc2V0OiBmdW5jdGlvbiAob2JqZWN0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICBzYXZlKG9iamVjdCwgcHJvcClcbiAgICAgICAgZW50cnkob2JqZWN0LCBwcm9wLCAnPScsIHZhbHVlLCAnOycpXG4gICAgICB9LFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGVudHJ5VG9TdHJpbmcoKSArIGV4aXRUb1N0cmluZygpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbmRpdGlvbmFsICgpIHtcbiAgICB2YXIgcHJlZCA9IGpvaW4oYXJndW1lbnRzKVxuICAgIHZhciB0aGVuQmxvY2sgPSBzY29wZSgpXG4gICAgdmFyIGVsc2VCbG9jayA9IHNjb3BlKClcblxuICAgIHZhciB0aGVuVG9TdHJpbmcgPSB0aGVuQmxvY2sudG9TdHJpbmdcbiAgICB2YXIgZWxzZVRvU3RyaW5nID0gZWxzZUJsb2NrLnRvU3RyaW5nXG5cbiAgICByZXR1cm4gZXh0ZW5kKHRoZW5CbG9jaywge1xuICAgICAgdGhlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGVuQmxvY2suYXBwbHkodGhlbkJsb2NrLCBzbGljZShhcmd1bWVudHMpKVxuICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgfSxcbiAgICAgIGVsc2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZWxzZUJsb2NrLmFwcGx5KGVsc2VCbG9jaywgc2xpY2UoYXJndW1lbnRzKSlcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZWxzZUNsYXVzZSA9IGVsc2VUb1N0cmluZygpXG4gICAgICAgIGlmIChlbHNlQ2xhdXNlKSB7XG4gICAgICAgICAgZWxzZUNsYXVzZSA9ICdlbHNleycgKyBlbHNlQ2xhdXNlICsgJ30nXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpvaW4oW1xuICAgICAgICAgICdpZignLCBwcmVkLCAnKXsnLFxuICAgICAgICAgIHRoZW5Ub1N0cmluZygpLFxuICAgICAgICAgICd9JywgZWxzZUNsYXVzZVxuICAgICAgICBdKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvLyBwcm9jZWR1cmUgbGlzdFxuICB2YXIgZ2xvYmFsQmxvY2sgPSBibG9jaygpXG4gIHZhciBwcm9jZWR1cmVzID0ge31cbiAgZnVuY3Rpb24gcHJvYyAobmFtZSwgY291bnQpIHtcbiAgICB2YXIgYXJncyA9IFtdXG4gICAgZnVuY3Rpb24gYXJnICgpIHtcbiAgICAgIHZhciBuYW1lID0gJ2EnICsgYXJncy5sZW5ndGhcbiAgICAgIGFyZ3MucHVzaChuYW1lKVxuICAgICAgcmV0dXJuIG5hbWVcbiAgICB9XG5cbiAgICBjb3VudCA9IGNvdW50IHx8IDBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgIGFyZygpXG4gICAgfVxuXG4gICAgdmFyIGJvZHkgPSBzY29wZSgpXG4gICAgdmFyIGJvZHlUb1N0cmluZyA9IGJvZHkudG9TdHJpbmdcblxuICAgIHZhciByZXN1bHQgPSBwcm9jZWR1cmVzW25hbWVdID0gZXh0ZW5kKGJvZHksIHtcbiAgICAgIGFyZzogYXJnLFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGpvaW4oW1xuICAgICAgICAgICdmdW5jdGlvbignLCBhcmdzLmpvaW4oKSwgJyl7JyxcbiAgICAgICAgICBib2R5VG9TdHJpbmcoKSxcbiAgICAgICAgICAnfSdcbiAgICAgICAgXSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZnVuY3Rpb24gY29tcGlsZSAoKSB7XG4gICAgdmFyIGNvZGUgPSBbJ1widXNlIHN0cmljdFwiOycsXG4gICAgICBnbG9iYWxCbG9jayxcbiAgICAgICdyZXR1cm4geyddXG4gICAgT2JqZWN0LmtleXMocHJvY2VkdXJlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgY29kZS5wdXNoKCdcIicsIG5hbWUsICdcIjonLCBwcm9jZWR1cmVzW25hbWVdLnRvU3RyaW5nKCksICcsJylcbiAgICB9KVxuICAgIGNvZGUucHVzaCgnfScpXG4gICAgdmFyIHNyYyA9IGpvaW4oY29kZSlcbiAgICAgIC5yZXBsYWNlKC87L2csICc7XFxuJylcbiAgICAgIC5yZXBsYWNlKC99L2csICd9XFxuJylcbiAgICAgIC5yZXBsYWNlKC97L2csICd7XFxuJylcbiAgICB2YXIgcHJvYyA9IEZ1bmN0aW9uLmFwcGx5KG51bGwsIGxpbmtlZE5hbWVzLmNvbmNhdChzcmMpKVxuICAgIHJldHVybiBwcm9jLmFwcGx5KG51bGwsIGxpbmtlZFZhbHVlcylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZ2xvYmFsOiBnbG9iYWxCbG9jayxcbiAgICBsaW5rOiBsaW5rLFxuICAgIGJsb2NrOiBibG9jayxcbiAgICBwcm9jOiBwcm9jLFxuICAgIHNjb3BlOiBzY29wZSxcbiAgICBjb25kOiBjb25kaXRpb25hbCxcbiAgICBjb21waWxlOiBjb21waWxlXG4gIH1cbn1cblxuLy8gXCJjdXRlXCIgbmFtZXMgZm9yIHZlY3RvciBjb21wb25lbnRzXG52YXIgQ1VURV9DT01QT05FTlRTID0gJ3h5encnLnNwbGl0KCcnKVxuXG52YXIgR0xfVU5TSUdORURfQllURSQ4ID0gNTEyMVxuXG52YXIgQVRUUklCX1NUQVRFX1BPSU5URVIgPSAxXG52YXIgQVRUUklCX1NUQVRFX0NPTlNUQU5UID0gMlxuXG52YXIgRFlOX0ZVTkMkMSA9IDBcbnZhciBEWU5fUFJPUCQxID0gMVxudmFyIERZTl9DT05URVhUJDEgPSAyXG52YXIgRFlOX1NUQVRFJDEgPSAzXG52YXIgRFlOX1RIVU5LID0gNFxudmFyIERZTl9DT05TVEFOVCQxID0gNVxudmFyIERZTl9BUlJBWSQxID0gNlxuXG52YXIgU19ESVRIRVIgPSAnZGl0aGVyJ1xudmFyIFNfQkxFTkRfRU5BQkxFID0gJ2JsZW5kLmVuYWJsZSdcbnZhciBTX0JMRU5EX0NPTE9SID0gJ2JsZW5kLmNvbG9yJ1xudmFyIFNfQkxFTkRfRVFVQVRJT04gPSAnYmxlbmQuZXF1YXRpb24nXG52YXIgU19CTEVORF9GVU5DID0gJ2JsZW5kLmZ1bmMnXG52YXIgU19ERVBUSF9FTkFCTEUgPSAnZGVwdGguZW5hYmxlJ1xudmFyIFNfREVQVEhfRlVOQyA9ICdkZXB0aC5mdW5jJ1xudmFyIFNfREVQVEhfUkFOR0UgPSAnZGVwdGgucmFuZ2UnXG52YXIgU19ERVBUSF9NQVNLID0gJ2RlcHRoLm1hc2snXG52YXIgU19DT0xPUl9NQVNLID0gJ2NvbG9yTWFzaydcbnZhciBTX0NVTExfRU5BQkxFID0gJ2N1bGwuZW5hYmxlJ1xudmFyIFNfQ1VMTF9GQUNFID0gJ2N1bGwuZmFjZSdcbnZhciBTX0ZST05UX0ZBQ0UgPSAnZnJvbnRGYWNlJ1xudmFyIFNfTElORV9XSURUSCA9ICdsaW5lV2lkdGgnXG52YXIgU19QT0xZR09OX09GRlNFVF9FTkFCTEUgPSAncG9seWdvbk9mZnNldC5lbmFibGUnXG52YXIgU19QT0xZR09OX09GRlNFVF9PRkZTRVQgPSAncG9seWdvbk9mZnNldC5vZmZzZXQnXG52YXIgU19TQU1QTEVfQUxQSEEgPSAnc2FtcGxlLmFscGhhJ1xudmFyIFNfU0FNUExFX0VOQUJMRSA9ICdzYW1wbGUuZW5hYmxlJ1xudmFyIFNfU0FNUExFX0NPVkVSQUdFID0gJ3NhbXBsZS5jb3ZlcmFnZSdcbnZhciBTX1NURU5DSUxfRU5BQkxFID0gJ3N0ZW5jaWwuZW5hYmxlJ1xudmFyIFNfU1RFTkNJTF9NQVNLID0gJ3N0ZW5jaWwubWFzaydcbnZhciBTX1NURU5DSUxfRlVOQyA9ICdzdGVuY2lsLmZ1bmMnXG52YXIgU19TVEVOQ0lMX09QRlJPTlQgPSAnc3RlbmNpbC5vcEZyb250J1xudmFyIFNfU1RFTkNJTF9PUEJBQ0sgPSAnc3RlbmNpbC5vcEJhY2snXG52YXIgU19TQ0lTU09SX0VOQUJMRSA9ICdzY2lzc29yLmVuYWJsZSdcbnZhciBTX1NDSVNTT1JfQk9YID0gJ3NjaXNzb3IuYm94J1xudmFyIFNfVklFV1BPUlQgPSAndmlld3BvcnQnXG5cbnZhciBTX1BST0ZJTEUgPSAncHJvZmlsZSdcblxudmFyIFNfRlJBTUVCVUZGRVIgPSAnZnJhbWVidWZmZXInXG52YXIgU19WRVJUID0gJ3ZlcnQnXG52YXIgU19GUkFHID0gJ2ZyYWcnXG52YXIgU19FTEVNRU5UUyA9ICdlbGVtZW50cydcbnZhciBTX1BSSU1JVElWRSA9ICdwcmltaXRpdmUnXG52YXIgU19DT1VOVCA9ICdjb3VudCdcbnZhciBTX09GRlNFVCA9ICdvZmZzZXQnXG52YXIgU19JTlNUQU5DRVMgPSAnaW5zdGFuY2VzJ1xudmFyIFNfVkFPID0gJ3ZhbydcblxudmFyIFNVRkZJWF9XSURUSCA9ICdXaWR0aCdcbnZhciBTVUZGSVhfSEVJR0hUID0gJ0hlaWdodCdcblxudmFyIFNfRlJBTUVCVUZGRVJfV0lEVEggPSBTX0ZSQU1FQlVGRkVSICsgU1VGRklYX1dJRFRIXG52YXIgU19GUkFNRUJVRkZFUl9IRUlHSFQgPSBTX0ZSQU1FQlVGRkVSICsgU1VGRklYX0hFSUdIVFxudmFyIFNfVklFV1BPUlRfV0lEVEggPSBTX1ZJRVdQT1JUICsgU1VGRklYX1dJRFRIXG52YXIgU19WSUVXUE9SVF9IRUlHSFQgPSBTX1ZJRVdQT1JUICsgU1VGRklYX0hFSUdIVFxudmFyIFNfRFJBV0lOR0JVRkZFUiA9ICdkcmF3aW5nQnVmZmVyJ1xudmFyIFNfRFJBV0lOR0JVRkZFUl9XSURUSCA9IFNfRFJBV0lOR0JVRkZFUiArIFNVRkZJWF9XSURUSFxudmFyIFNfRFJBV0lOR0JVRkZFUl9IRUlHSFQgPSBTX0RSQVdJTkdCVUZGRVIgKyBTVUZGSVhfSEVJR0hUXG5cbnZhciBORVNURURfT1BUSU9OUyA9IFtcbiAgU19CTEVORF9GVU5DLFxuICBTX0JMRU5EX0VRVUFUSU9OLFxuICBTX1NURU5DSUxfRlVOQyxcbiAgU19TVEVOQ0lMX09QRlJPTlQsXG4gIFNfU1RFTkNJTF9PUEJBQ0ssXG4gIFNfU0FNUExFX0NPVkVSQUdFLFxuICBTX1ZJRVdQT1JULFxuICBTX1NDSVNTT1JfQk9YLFxuICBTX1BPTFlHT05fT0ZGU0VUX09GRlNFVFxuXVxuXG52YXIgR0xfQVJSQVlfQlVGRkVSJDIgPSAzNDk2MlxudmFyIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSJDEgPSAzNDk2M1xuXG52YXIgR0xfRlJBR01FTlRfU0hBREVSJDEgPSAzNTYzMlxudmFyIEdMX1ZFUlRFWF9TSEFERVIkMSA9IDM1NjMzXG5cbnZhciBHTF9URVhUVVJFXzJEJDMgPSAweDBERTFcbnZhciBHTF9URVhUVVJFX0NVQkVfTUFQJDIgPSAweDg1MTNcblxudmFyIEdMX0NVTExfRkFDRSA9IDB4MEI0NFxudmFyIEdMX0JMRU5EID0gMHgwQkUyXG52YXIgR0xfRElUSEVSID0gMHgwQkQwXG52YXIgR0xfU1RFTkNJTF9URVNUID0gMHgwQjkwXG52YXIgR0xfREVQVEhfVEVTVCA9IDB4MEI3MVxudmFyIEdMX1NDSVNTT1JfVEVTVCA9IDB4MEMxMVxudmFyIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwgPSAweDgwMzdcbnZhciBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgPSAweDgwOUVcbnZhciBHTF9TQU1QTEVfQ09WRVJBR0UgPSAweDgwQTBcblxudmFyIEdMX0ZMT0FUJDggPSA1MTI2XG52YXIgR0xfRkxPQVRfVkVDMiA9IDM1NjY0XG52YXIgR0xfRkxPQVRfVkVDMyA9IDM1NjY1XG52YXIgR0xfRkxPQVRfVkVDNCA9IDM1NjY2XG52YXIgR0xfSU5UJDMgPSA1MTI0XG52YXIgR0xfSU5UX1ZFQzIgPSAzNTY2N1xudmFyIEdMX0lOVF9WRUMzID0gMzU2NjhcbnZhciBHTF9JTlRfVkVDNCA9IDM1NjY5XG52YXIgR0xfQk9PTCA9IDM1NjcwXG52YXIgR0xfQk9PTF9WRUMyID0gMzU2NzFcbnZhciBHTF9CT09MX1ZFQzMgPSAzNTY3MlxudmFyIEdMX0JPT0xfVkVDNCA9IDM1NjczXG52YXIgR0xfRkxPQVRfTUFUMiA9IDM1Njc0XG52YXIgR0xfRkxPQVRfTUFUMyA9IDM1Njc1XG52YXIgR0xfRkxPQVRfTUFUNCA9IDM1Njc2XG52YXIgR0xfU0FNUExFUl8yRCA9IDM1Njc4XG52YXIgR0xfU0FNUExFUl9DVUJFID0gMzU2ODBcblxudmFyIEdMX1RSSUFOR0xFUyQxID0gNFxuXG52YXIgR0xfRlJPTlQgPSAxMDI4XG52YXIgR0xfQkFDSyA9IDEwMjlcbnZhciBHTF9DVyA9IDB4MDkwMFxudmFyIEdMX0NDVyA9IDB4MDkwMVxudmFyIEdMX01JTl9FWFQgPSAweDgwMDdcbnZhciBHTF9NQVhfRVhUID0gMHg4MDA4XG52YXIgR0xfQUxXQVlTID0gNTE5XG52YXIgR0xfS0VFUCA9IDc2ODBcbnZhciBHTF9aRVJPID0gMFxudmFyIEdMX09ORSA9IDFcbnZhciBHTF9GVU5DX0FERCA9IDB4ODAwNlxudmFyIEdMX0xFU1MgPSA1MTNcblxudmFyIEdMX0ZSQU1FQlVGRkVSJDIgPSAweDhENDBcbnZhciBHTF9DT0xPUl9BVFRBQ0hNRU5UMCQyID0gMHg4Q0UwXG5cbnZhciBibGVuZEZ1bmNzID0ge1xuICAnMCc6IDAsXG4gICcxJzogMSxcbiAgJ3plcm8nOiAwLFxuICAnb25lJzogMSxcbiAgJ3NyYyBjb2xvcic6IDc2OCxcbiAgJ29uZSBtaW51cyBzcmMgY29sb3InOiA3NjksXG4gICdzcmMgYWxwaGEnOiA3NzAsXG4gICdvbmUgbWludXMgc3JjIGFscGhhJzogNzcxLFxuICAnZHN0IGNvbG9yJzogNzc0LFxuICAnb25lIG1pbnVzIGRzdCBjb2xvcic6IDc3NSxcbiAgJ2RzdCBhbHBoYSc6IDc3MixcbiAgJ29uZSBtaW51cyBkc3QgYWxwaGEnOiA3NzMsXG4gICdjb25zdGFudCBjb2xvcic6IDMyNzY5LFxuICAnb25lIG1pbnVzIGNvbnN0YW50IGNvbG9yJzogMzI3NzAsXG4gICdjb25zdGFudCBhbHBoYSc6IDMyNzcxLFxuICAnb25lIG1pbnVzIGNvbnN0YW50IGFscGhhJzogMzI3NzIsXG4gICdzcmMgYWxwaGEgc2F0dXJhdGUnOiA3NzZcbn1cblxuLy8gVGhlcmUgYXJlIGludmFsaWQgdmFsdWVzIGZvciBzcmNSR0IgYW5kIGRzdFJHQi4gU2VlOlxuLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvMS4wLyM2LjEzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL1dlYkdML2Jsb2IvMGQzMjAxZjVmN2VjM2MwMDYwYmMxZjA0MDc3NDYxNTQxZjE5ODdiOS9jb25mb3JtYW5jZS1zdWl0ZXMvMS4wLjMvY29uZm9ybWFuY2UvbWlzYy93ZWJnbC1zcGVjaWZpYy5odG1sI0w1NlxudmFyIGludmFsaWRCbGVuZENvbWJpbmF0aW9ucyA9IFtcbiAgJ2NvbnN0YW50IGNvbG9yLCBjb25zdGFudCBhbHBoYScsXG4gICdvbmUgbWludXMgY29uc3RhbnQgY29sb3IsIGNvbnN0YW50IGFscGhhJyxcbiAgJ2NvbnN0YW50IGNvbG9yLCBvbmUgbWludXMgY29uc3RhbnQgYWxwaGEnLFxuICAnb25lIG1pbnVzIGNvbnN0YW50IGNvbG9yLCBvbmUgbWludXMgY29uc3RhbnQgYWxwaGEnLFxuICAnY29uc3RhbnQgYWxwaGEsIGNvbnN0YW50IGNvbG9yJyxcbiAgJ2NvbnN0YW50IGFscGhhLCBvbmUgbWludXMgY29uc3RhbnQgY29sb3InLFxuICAnb25lIG1pbnVzIGNvbnN0YW50IGFscGhhLCBjb25zdGFudCBjb2xvcicsXG4gICdvbmUgbWludXMgY29uc3RhbnQgYWxwaGEsIG9uZSBtaW51cyBjb25zdGFudCBjb2xvcidcbl1cblxudmFyIGNvbXBhcmVGdW5jcyA9IHtcbiAgJ25ldmVyJzogNTEyLFxuICAnbGVzcyc6IDUxMyxcbiAgJzwnOiA1MTMsXG4gICdlcXVhbCc6IDUxNCxcbiAgJz0nOiA1MTQsXG4gICc9PSc6IDUxNCxcbiAgJz09PSc6IDUxNCxcbiAgJ2xlcXVhbCc6IDUxNSxcbiAgJzw9JzogNTE1LFxuICAnZ3JlYXRlcic6IDUxNixcbiAgJz4nOiA1MTYsXG4gICdub3RlcXVhbCc6IDUxNyxcbiAgJyE9JzogNTE3LFxuICAnIT09JzogNTE3LFxuICAnZ2VxdWFsJzogNTE4LFxuICAnPj0nOiA1MTgsXG4gICdhbHdheXMnOiA1MTlcbn1cblxudmFyIHN0ZW5jaWxPcHMgPSB7XG4gICcwJzogMCxcbiAgJ3plcm8nOiAwLFxuICAna2VlcCc6IDc2ODAsXG4gICdyZXBsYWNlJzogNzY4MSxcbiAgJ2luY3JlbWVudCc6IDc2ODIsXG4gICdkZWNyZW1lbnQnOiA3NjgzLFxuICAnaW5jcmVtZW50IHdyYXAnOiAzNDA1NSxcbiAgJ2RlY3JlbWVudCB3cmFwJzogMzQwNTYsXG4gICdpbnZlcnQnOiA1Mzg2XG59XG5cbnZhciBzaGFkZXJUeXBlID0ge1xuICAnZnJhZyc6IEdMX0ZSQUdNRU5UX1NIQURFUiQxLFxuICAndmVydCc6IEdMX1ZFUlRFWF9TSEFERVIkMVxufVxuXG52YXIgb3JpZW50YXRpb25UeXBlID0ge1xuICAnY3cnOiBHTF9DVyxcbiAgJ2Njdyc6IEdMX0NDV1xufVxuXG5mdW5jdGlvbiBpc0J1ZmZlckFyZ3MgKHgpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoeCkgfHxcbiAgICBpc1R5cGVkQXJyYXkoeCkgfHxcbiAgICBpc05EQXJyYXlMaWtlKHgpXG59XG5cbi8vIE1ha2Ugc3VyZSB2aWV3cG9ydCBpcyBwcm9jZXNzZWQgZmlyc3RcbmZ1bmN0aW9uIHNvcnRTdGF0ZSAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gU19WSUVXUE9SVCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfSBlbHNlIGlmIChiID09PSBTX1ZJRVdQT1JUKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgICByZXR1cm4gKGEgPCBiKSA/IC0xIDogMVxuICB9KVxufVxuXG5mdW5jdGlvbiBEZWNsYXJhdGlvbiAodGhpc0RlcCwgY29udGV4dERlcCwgcHJvcERlcCwgYXBwZW5kKSB7XG4gIHRoaXMudGhpc0RlcCA9IHRoaXNEZXBcbiAgdGhpcy5jb250ZXh0RGVwID0gY29udGV4dERlcFxuICB0aGlzLnByb3BEZXAgPSBwcm9wRGVwXG4gIHRoaXMuYXBwZW5kID0gYXBwZW5kXG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljIChkZWNsKSB7XG4gIHJldHVybiBkZWNsICYmICEoZGVjbC50aGlzRGVwIHx8IGRlY2wuY29udGV4dERlcCB8fCBkZWNsLnByb3BEZXApXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRpY0RlY2wgKGFwcGVuZCkge1xuICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGFwcGVuZClcbn1cblxuZnVuY3Rpb24gY3JlYXRlRHluYW1pY0RlY2wgKGR5biwgYXBwZW5kKSB7XG4gIHZhciB0eXBlID0gZHluLnR5cGVcbiAgaWYgKHR5cGUgPT09IERZTl9GVU5DJDEpIHtcbiAgICB2YXIgbnVtQXJncyA9IGR5bi5kYXRhLmxlbmd0aFxuICAgIHJldHVybiBuZXcgRGVjbGFyYXRpb24oXG4gICAgICB0cnVlLFxuICAgICAgbnVtQXJncyA+PSAxLFxuICAgICAgbnVtQXJncyA+PSAyLFxuICAgICAgYXBwZW5kKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09IERZTl9USFVOSykge1xuICAgIHZhciBkYXRhID0gZHluLmRhdGFcbiAgICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgZGF0YS50aGlzRGVwLFxuICAgICAgZGF0YS5jb250ZXh0RGVwLFxuICAgICAgZGF0YS5wcm9wRGVwLFxuICAgICAgYXBwZW5kKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09IERZTl9DT05TVEFOVCQxKSB7XG4gICAgcmV0dXJuIG5ldyBEZWNsYXJhdGlvbihcbiAgICAgIGZhbHNlLFxuICAgICAgZmFsc2UsXG4gICAgICBmYWxzZSxcbiAgICAgIGFwcGVuZClcbiAgfSBlbHNlIGlmICh0eXBlID09PSBEWU5fQVJSQVkkMSkge1xuICAgIHZhciB0aGlzRGVwID0gZmFsc2VcbiAgICB2YXIgY29udGV4dERlcCA9IGZhbHNlXG4gICAgdmFyIHByb3BEZXAgPSBmYWxzZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZHluLmRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBzdWJEeW4gPSBkeW4uZGF0YVtpXVxuICAgICAgaWYgKHN1YkR5bi50eXBlID09PSBEWU5fUFJPUCQxKSB7XG4gICAgICAgIHByb3BEZXAgPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKHN1YkR5bi50eXBlID09PSBEWU5fQ09OVEVYVCQxKSB7XG4gICAgICAgIGNvbnRleHREZXAgPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKHN1YkR5bi50eXBlID09PSBEWU5fU1RBVEUkMSkge1xuICAgICAgICB0aGlzRGVwID0gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChzdWJEeW4udHlwZSA9PT0gRFlOX0ZVTkMkMSkge1xuICAgICAgICB0aGlzRGVwID0gdHJ1ZVxuICAgICAgICB2YXIgc3ViQXJncyA9IHN1YkR5bi5kYXRhXG4gICAgICAgIGlmIChzdWJBcmdzID49IDEpIHtcbiAgICAgICAgICBjb250ZXh0RGVwID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdWJBcmdzID49IDIpIHtcbiAgICAgICAgICBwcm9wRGVwID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN1YkR5bi50eXBlID09PSBEWU5fVEhVTkspIHtcbiAgICAgICAgdGhpc0RlcCA9IHRoaXNEZXAgfHwgc3ViRHluLmRhdGEudGhpc0RlcFxuICAgICAgICBjb250ZXh0RGVwID0gY29udGV4dERlcCB8fCBzdWJEeW4uZGF0YS5jb250ZXh0RGVwXG4gICAgICAgIHByb3BEZXAgPSBwcm9wRGVwIHx8IHN1YkR5bi5kYXRhLnByb3BEZXBcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEZWNsYXJhdGlvbihcbiAgICAgIHRoaXNEZXAsXG4gICAgICBjb250ZXh0RGVwLFxuICAgICAgcHJvcERlcCxcbiAgICAgIGFwcGVuZClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgdHlwZSA9PT0gRFlOX1NUQVRFJDEsXG4gICAgICB0eXBlID09PSBEWU5fQ09OVEVYVCQxLFxuICAgICAgdHlwZSA9PT0gRFlOX1BST1AkMSxcbiAgICAgIGFwcGVuZClcbiAgfVxufVxuXG52YXIgU0NPUEVfREVDTCA9IG5ldyBEZWNsYXJhdGlvbihmYWxzZSwgZmFsc2UsIGZhbHNlLCBmdW5jdGlvbiAoKSB7fSlcblxuZnVuY3Rpb24gcmVnbENvcmUgKFxuICBnbCxcbiAgc3RyaW5nU3RvcmUsXG4gIGV4dGVuc2lvbnMsXG4gIGxpbWl0cyxcbiAgYnVmZmVyU3RhdGUsXG4gIGVsZW1lbnRTdGF0ZSxcbiAgdGV4dHVyZVN0YXRlLFxuICBmcmFtZWJ1ZmZlclN0YXRlLFxuICB1bmlmb3JtU3RhdGUsXG4gIGF0dHJpYnV0ZVN0YXRlLFxuICBzaGFkZXJTdGF0ZSxcbiAgZHJhd1N0YXRlLFxuICBjb250ZXh0U3RhdGUsXG4gIHRpbWVyLFxuICBjb25maWcpIHtcbiAgdmFyIEF0dHJpYnV0ZVJlY29yZCA9IGF0dHJpYnV0ZVN0YXRlLlJlY29yZFxuXG4gIHZhciBibGVuZEVxdWF0aW9ucyA9IHtcbiAgICAnYWRkJzogMzI3NzQsXG4gICAgJ3N1YnRyYWN0JzogMzI3NzgsXG4gICAgJ3JldmVyc2Ugc3VidHJhY3QnOiAzMjc3OVxuICB9XG4gIGlmIChleHRlbnNpb25zLmV4dF9ibGVuZF9taW5tYXgpIHtcbiAgICBibGVuZEVxdWF0aW9ucy5taW4gPSBHTF9NSU5fRVhUXG4gICAgYmxlbmRFcXVhdGlvbnMubWF4ID0gR0xfTUFYX0VYVFxuICB9XG5cbiAgdmFyIGV4dEluc3RhbmNpbmcgPSBleHRlbnNpb25zLmFuZ2xlX2luc3RhbmNlZF9hcnJheXNcbiAgdmFyIGV4dERyYXdCdWZmZXJzID0gZXh0ZW5zaW9ucy53ZWJnbF9kcmF3X2J1ZmZlcnNcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFdFQkdMIFNUQVRFXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGN1cnJlbnRTdGF0ZSA9IHtcbiAgICBkaXJ0eTogdHJ1ZSxcbiAgICBwcm9maWxlOiBjb25maWcucHJvZmlsZVxuICB9XG4gIHZhciBuZXh0U3RhdGUgPSB7fVxuICB2YXIgR0xfU1RBVEVfTkFNRVMgPSBbXVxuICB2YXIgR0xfRkxBR1MgPSB7fVxuICB2YXIgR0xfVkFSSUFCTEVTID0ge31cblxuICBmdW5jdGlvbiBwcm9wTmFtZSAobmFtZSkge1xuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoJy4nLCAnXycpXG4gIH1cblxuICBmdW5jdGlvbiBzdGF0ZUZsYWcgKHNuYW1lLCBjYXAsIGluaXQpIHtcbiAgICB2YXIgbmFtZSA9IHByb3BOYW1lKHNuYW1lKVxuICAgIEdMX1NUQVRFX05BTUVTLnB1c2goc25hbWUpXG4gICAgbmV4dFN0YXRlW25hbWVdID0gY3VycmVudFN0YXRlW25hbWVdID0gISFpbml0XG4gICAgR0xfRkxBR1NbbmFtZV0gPSBjYXBcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRlVmFyaWFibGUgKHNuYW1lLCBmdW5jLCBpbml0KSB7XG4gICAgdmFyIG5hbWUgPSBwcm9wTmFtZShzbmFtZSlcbiAgICBHTF9TVEFURV9OQU1FUy5wdXNoKHNuYW1lKVxuICAgIGlmIChBcnJheS5pc0FycmF5KGluaXQpKSB7XG4gICAgICBjdXJyZW50U3RhdGVbbmFtZV0gPSBpbml0LnNsaWNlKClcbiAgICAgIG5leHRTdGF0ZVtuYW1lXSA9IGluaXQuc2xpY2UoKVxuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50U3RhdGVbbmFtZV0gPSBuZXh0U3RhdGVbbmFtZV0gPSBpbml0XG4gICAgfVxuICAgIEdMX1ZBUklBQkxFU1tuYW1lXSA9IGZ1bmNcbiAgfVxuXG4gIC8vIERpdGhlcmluZ1xuICBzdGF0ZUZsYWcoU19ESVRIRVIsIEdMX0RJVEhFUilcblxuICAvLyBCbGVuZGluZ1xuICBzdGF0ZUZsYWcoU19CTEVORF9FTkFCTEUsIEdMX0JMRU5EKVxuICBzdGF0ZVZhcmlhYmxlKFNfQkxFTkRfQ09MT1IsICdibGVuZENvbG9yJywgWzAsIDAsIDAsIDBdKVxuICBzdGF0ZVZhcmlhYmxlKFNfQkxFTkRfRVFVQVRJT04sICdibGVuZEVxdWF0aW9uU2VwYXJhdGUnLFxuICAgIFtHTF9GVU5DX0FERCwgR0xfRlVOQ19BRERdKVxuICBzdGF0ZVZhcmlhYmxlKFNfQkxFTkRfRlVOQywgJ2JsZW5kRnVuY1NlcGFyYXRlJyxcbiAgICBbR0xfT05FLCBHTF9aRVJPLCBHTF9PTkUsIEdMX1pFUk9dKVxuXG4gIC8vIERlcHRoXG4gIHN0YXRlRmxhZyhTX0RFUFRIX0VOQUJMRSwgR0xfREVQVEhfVEVTVCwgdHJ1ZSlcbiAgc3RhdGVWYXJpYWJsZShTX0RFUFRIX0ZVTkMsICdkZXB0aEZ1bmMnLCBHTF9MRVNTKVxuICBzdGF0ZVZhcmlhYmxlKFNfREVQVEhfUkFOR0UsICdkZXB0aFJhbmdlJywgWzAsIDFdKVxuICBzdGF0ZVZhcmlhYmxlKFNfREVQVEhfTUFTSywgJ2RlcHRoTWFzaycsIHRydWUpXG5cbiAgLy8gQ29sb3IgbWFza1xuICBzdGF0ZVZhcmlhYmxlKFNfQ09MT1JfTUFTSywgU19DT0xPUl9NQVNLLCBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0pXG5cbiAgLy8gRmFjZSBjdWxsaW5nXG4gIHN0YXRlRmxhZyhTX0NVTExfRU5BQkxFLCBHTF9DVUxMX0ZBQ0UpXG4gIHN0YXRlVmFyaWFibGUoU19DVUxMX0ZBQ0UsICdjdWxsRmFjZScsIEdMX0JBQ0spXG5cbiAgLy8gRnJvbnQgZmFjZSBvcmllbnRhdGlvblxuICBzdGF0ZVZhcmlhYmxlKFNfRlJPTlRfRkFDRSwgU19GUk9OVF9GQUNFLCBHTF9DQ1cpXG5cbiAgLy8gTGluZSB3aWR0aFxuICBzdGF0ZVZhcmlhYmxlKFNfTElORV9XSURUSCwgU19MSU5FX1dJRFRILCAxKVxuXG4gIC8vIFBvbHlnb24gb2Zmc2V0XG4gIHN0YXRlRmxhZyhTX1BPTFlHT05fT0ZGU0VUX0VOQUJMRSwgR0xfUE9MWUdPTl9PRkZTRVRfRklMTClcbiAgc3RhdGVWYXJpYWJsZShTX1BPTFlHT05fT0ZGU0VUX09GRlNFVCwgJ3BvbHlnb25PZmZzZXQnLCBbMCwgMF0pXG5cbiAgLy8gU2FtcGxlIGNvdmVyYWdlXG4gIHN0YXRlRmxhZyhTX1NBTVBMRV9BTFBIQSwgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKVxuICBzdGF0ZUZsYWcoU19TQU1QTEVfRU5BQkxFLCBHTF9TQU1QTEVfQ09WRVJBR0UpXG4gIHN0YXRlVmFyaWFibGUoU19TQU1QTEVfQ09WRVJBR0UsICdzYW1wbGVDb3ZlcmFnZScsIFsxLCBmYWxzZV0pXG5cbiAgLy8gU3RlbmNpbFxuICBzdGF0ZUZsYWcoU19TVEVOQ0lMX0VOQUJMRSwgR0xfU1RFTkNJTF9URVNUKVxuICBzdGF0ZVZhcmlhYmxlKFNfU1RFTkNJTF9NQVNLLCAnc3RlbmNpbE1hc2snLCAtMSlcbiAgc3RhdGVWYXJpYWJsZShTX1NURU5DSUxfRlVOQywgJ3N0ZW5jaWxGdW5jJywgW0dMX0FMV0FZUywgMCwgLTFdKVxuICBzdGF0ZVZhcmlhYmxlKFNfU1RFTkNJTF9PUEZST05ULCAnc3RlbmNpbE9wU2VwYXJhdGUnLFxuICAgIFtHTF9GUk9OVCwgR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUF0pXG4gIHN0YXRlVmFyaWFibGUoU19TVEVOQ0lMX09QQkFDSywgJ3N0ZW5jaWxPcFNlcGFyYXRlJyxcbiAgICBbR0xfQkFDSywgR0xfS0VFUCwgR0xfS0VFUCwgR0xfS0VFUF0pXG5cbiAgLy8gU2Npc3NvclxuICBzdGF0ZUZsYWcoU19TQ0lTU09SX0VOQUJMRSwgR0xfU0NJU1NPUl9URVNUKVxuICBzdGF0ZVZhcmlhYmxlKFNfU0NJU1NPUl9CT1gsICdzY2lzc29yJyxcbiAgICBbMCwgMCwgZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLCBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0XSlcblxuICAvLyBWaWV3cG9ydFxuICBzdGF0ZVZhcmlhYmxlKFNfVklFV1BPUlQsIFNfVklFV1BPUlQsXG4gICAgWzAsIDAsIGdsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodF0pXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFTlZJUk9OTUVOVFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBzaGFyZWRTdGF0ZSA9IHtcbiAgICBnbDogZ2wsXG4gICAgY29udGV4dDogY29udGV4dFN0YXRlLFxuICAgIHN0cmluZ3M6IHN0cmluZ1N0b3JlLFxuICAgIG5leHQ6IG5leHRTdGF0ZSxcbiAgICBjdXJyZW50OiBjdXJyZW50U3RhdGUsXG4gICAgZHJhdzogZHJhd1N0YXRlLFxuICAgIGVsZW1lbnRzOiBlbGVtZW50U3RhdGUsXG4gICAgYnVmZmVyOiBidWZmZXJTdGF0ZSxcbiAgICBzaGFkZXI6IHNoYWRlclN0YXRlLFxuICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZVN0YXRlLnN0YXRlLFxuICAgIHZhbzogYXR0cmlidXRlU3RhdGUsXG4gICAgdW5pZm9ybXM6IHVuaWZvcm1TdGF0ZSxcbiAgICBmcmFtZWJ1ZmZlcjogZnJhbWVidWZmZXJTdGF0ZSxcbiAgICBleHRlbnNpb25zOiBleHRlbnNpb25zLFxuXG4gICAgdGltZXI6IHRpbWVyLFxuICAgIGlzQnVmZmVyQXJnczogaXNCdWZmZXJBcmdzXG4gIH1cblxuICB2YXIgc2hhcmVkQ29uc3RhbnRzID0ge1xuICAgIHByaW1UeXBlczogcHJpbVR5cGVzLFxuICAgIGNvbXBhcmVGdW5jczogY29tcGFyZUZ1bmNzLFxuICAgIGJsZW5kRnVuY3M6IGJsZW5kRnVuY3MsXG4gICAgYmxlbmRFcXVhdGlvbnM6IGJsZW5kRXF1YXRpb25zLFxuICAgIHN0ZW5jaWxPcHM6IHN0ZW5jaWxPcHMsXG4gICAgZ2xUeXBlczogZ2xUeXBlcyxcbiAgICBvcmllbnRhdGlvblR5cGU6IG9yaWVudGF0aW9uVHlwZVxuICB9XG5cbiAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgc2hhcmVkU3RhdGUuaXNBcnJheUxpa2UgPSBpc0FycmF5TGlrZVxuICB9KVxuXG4gIGlmIChleHREcmF3QnVmZmVycykge1xuICAgIHNoYXJlZENvbnN0YW50cy5iYWNrQnVmZmVyID0gW0dMX0JBQ0tdXG4gICAgc2hhcmVkQ29uc3RhbnRzLmRyYXdCdWZmZXIgPSBsb29wKGxpbWl0cy5tYXhEcmF3YnVmZmVycywgZnVuY3Rpb24gKGkpIHtcbiAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMF1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsb29wKGksIGZ1bmN0aW9uIChqKSB7XG4gICAgICAgIHJldHVybiBHTF9DT0xPUl9BVFRBQ0hNRU5UMCQyICsgalxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdmFyIGRyYXdDYWxsQ291bnRlciA9IDBcbiAgZnVuY3Rpb24gY3JlYXRlUkVHTEVudmlyb25tZW50ICgpIHtcbiAgICB2YXIgZW52ID0gY3JlYXRlRW52aXJvbm1lbnQoKVxuICAgIHZhciBsaW5rID0gZW52LmxpbmtcbiAgICB2YXIgZ2xvYmFsID0gZW52Lmdsb2JhbFxuICAgIGVudi5pZCA9IGRyYXdDYWxsQ291bnRlcisrXG5cbiAgICBlbnYuYmF0Y2hJZCA9ICcwJ1xuXG4gICAgLy8gbGluayBzaGFyZWQgc3RhdGVcbiAgICB2YXIgU0hBUkVEID0gbGluayhzaGFyZWRTdGF0ZSlcbiAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZCA9IHtcbiAgICAgIHByb3BzOiAnYTAnXG4gICAgfVxuICAgIE9iamVjdC5rZXlzKHNoYXJlZFN0YXRlKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICBzaGFyZWRbcHJvcF0gPSBnbG9iYWwuZGVmKFNIQVJFRCwgJy4nLCBwcm9wKVxuICAgIH0pXG5cbiAgICAvLyBJbmplY3QgcnVudGltZSBhc3NlcnRpb24gc3R1ZmYgZm9yIGRlYnVnIGJ1aWxkc1xuICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgZW52LkNIRUNLID0gbGluayhjaGVjayQxKVxuICAgICAgZW52LmNvbW1hbmRTdHIgPSBjaGVjayQxLmd1ZXNzQ29tbWFuZCgpXG4gICAgICBlbnYuY29tbWFuZCA9IGxpbmsoZW52LmNvbW1hbmRTdHIpXG4gICAgICBlbnYuYXNzZXJ0ID0gZnVuY3Rpb24gKGJsb2NrLCBwcmVkLCBtZXNzYWdlKSB7XG4gICAgICAgIGJsb2NrKFxuICAgICAgICAgICdpZighKCcsIHByZWQsICcpKScsXG4gICAgICAgICAgdGhpcy5DSEVDSywgJy5jb21tYW5kUmFpc2UoJywgbGluayhtZXNzYWdlKSwgJywnLCB0aGlzLmNvbW1hbmQsICcpOycpXG4gICAgICB9XG5cbiAgICAgIHNoYXJlZENvbnN0YW50cy5pbnZhbGlkQmxlbmRDb21iaW5hdGlvbnMgPSBpbnZhbGlkQmxlbmRDb21iaW5hdGlvbnNcbiAgICB9KVxuXG4gICAgLy8gQ29weSBHTCBzdGF0ZSB2YXJpYWJsZXMgb3ZlclxuICAgIHZhciBuZXh0VmFycyA9IGVudi5uZXh0ID0ge31cbiAgICB2YXIgY3VycmVudFZhcnMgPSBlbnYuY3VycmVudCA9IHt9XG4gICAgT2JqZWN0LmtleXMoR0xfVkFSSUFCTEVTKS5mb3JFYWNoKGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFN0YXRlW3ZhcmlhYmxlXSkpIHtcbiAgICAgICAgbmV4dFZhcnNbdmFyaWFibGVdID0gZ2xvYmFsLmRlZihzaGFyZWQubmV4dCwgJy4nLCB2YXJpYWJsZSlcbiAgICAgICAgY3VycmVudFZhcnNbdmFyaWFibGVdID0gZ2xvYmFsLmRlZihzaGFyZWQuY3VycmVudCwgJy4nLCB2YXJpYWJsZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBzaGFyZWQgY29uc3RhbnRzXG4gICAgdmFyIGNvbnN0YW50cyA9IGVudi5jb25zdGFudHMgPSB7fVxuICAgIE9iamVjdC5rZXlzKHNoYXJlZENvbnN0YW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgY29uc3RhbnRzW25hbWVdID0gZ2xvYmFsLmRlZihKU09OLnN0cmluZ2lmeShzaGFyZWRDb25zdGFudHNbbmFtZV0pKVxuICAgIH0pXG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGNhbGxpbmcgYSBibG9ja1xuICAgIGVudi5pbnZva2UgPSBmdW5jdGlvbiAoYmxvY2ssIHgpIHtcbiAgICAgIHN3aXRjaCAoeC50eXBlKSB7XG4gICAgICAgIGNhc2UgRFlOX0ZVTkMkMTpcbiAgICAgICAgICB2YXIgYXJnTGlzdCA9IFtcbiAgICAgICAgICAgICd0aGlzJyxcbiAgICAgICAgICAgIHNoYXJlZC5jb250ZXh0LFxuICAgICAgICAgICAgc2hhcmVkLnByb3BzLFxuICAgICAgICAgICAgZW52LmJhdGNoSWRcbiAgICAgICAgICBdXG4gICAgICAgICAgcmV0dXJuIGJsb2NrLmRlZihcbiAgICAgICAgICAgIGxpbmsoeC5kYXRhKSwgJy5jYWxsKCcsXG4gICAgICAgICAgICBhcmdMaXN0LnNsaWNlKDAsIE1hdGgubWF4KHguZGF0YS5sZW5ndGggKyAxLCA0KSksXG4gICAgICAgICAgICAnKScpXG4gICAgICAgIGNhc2UgRFlOX1BST1AkMTpcbiAgICAgICAgICByZXR1cm4gYmxvY2suZGVmKHNoYXJlZC5wcm9wcywgeC5kYXRhKVxuICAgICAgICBjYXNlIERZTl9DT05URVhUJDE6XG4gICAgICAgICAgcmV0dXJuIGJsb2NrLmRlZihzaGFyZWQuY29udGV4dCwgeC5kYXRhKVxuICAgICAgICBjYXNlIERZTl9TVEFURSQxOlxuICAgICAgICAgIHJldHVybiBibG9jay5kZWYoJ3RoaXMnLCB4LmRhdGEpXG4gICAgICAgIGNhc2UgRFlOX1RIVU5LOlxuICAgICAgICAgIHguZGF0YS5hcHBlbmQoZW52LCBibG9jaylcbiAgICAgICAgICByZXR1cm4geC5kYXRhLnJlZlxuICAgICAgICBjYXNlIERZTl9DT05TVEFOVCQxOlxuICAgICAgICAgIHJldHVybiB4LmRhdGEudG9TdHJpbmcoKVxuICAgICAgICBjYXNlIERZTl9BUlJBWSQxOlxuICAgICAgICAgIHJldHVybiB4LmRhdGEubWFwKGZ1bmN0aW9uICh5KSB7XG4gICAgICAgICAgICByZXR1cm4gZW52Lmludm9rZShibG9jaywgeSlcbiAgICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGVudi5hdHRyaWJDYWNoZSA9IHt9XG5cbiAgICB2YXIgc2NvcGVBdHRyaWJzID0ge31cbiAgICBlbnYuc2NvcGVBdHRyaWIgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGlkID0gc3RyaW5nU3RvcmUuaWQobmFtZSlcbiAgICAgIGlmIChpZCBpbiBzY29wZUF0dHJpYnMpIHtcbiAgICAgICAgcmV0dXJuIHNjb3BlQXR0cmlic1tpZF1cbiAgICAgIH1cbiAgICAgIHZhciBiaW5kaW5nID0gYXR0cmlidXRlU3RhdGUuc2NvcGVbaWRdXG4gICAgICBpZiAoIWJpbmRpbmcpIHtcbiAgICAgICAgYmluZGluZyA9IGF0dHJpYnV0ZVN0YXRlLnNjb3BlW2lkXSA9IG5ldyBBdHRyaWJ1dGVSZWNvcmQoKVxuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHNjb3BlQXR0cmlic1tpZF0gPSBsaW5rKGJpbmRpbmcpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudlxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQQVJTSU5HXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gcGFyc2VQcm9maWxlIChvcHRpb25zKSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuXG4gICAgdmFyIHByb2ZpbGVFbmFibGVcbiAgICBpZiAoU19QUk9GSUxFIGluIHN0YXRpY09wdGlvbnMpIHtcbiAgICAgIHZhciB2YWx1ZSA9ICEhc3RhdGljT3B0aW9uc1tTX1BST0ZJTEVdXG4gICAgICBwcm9maWxlRW5hYmxlID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0pXG4gICAgICBwcm9maWxlRW5hYmxlLmVuYWJsZSA9IHZhbHVlXG4gICAgfSBlbHNlIGlmIChTX1BST0ZJTEUgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgIHZhciBkeW4gPSBkeW5hbWljT3B0aW9uc1tTX1BST0ZJTEVdXG4gICAgICBwcm9maWxlRW5hYmxlID0gY3JlYXRlRHluYW1pY0RlY2woZHluLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICByZXR1cm4gZW52Lmludm9rZShzY29wZSwgZHluKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvZmlsZUVuYWJsZVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VGcmFtZWJ1ZmZlciAob3B0aW9ucywgZW52KSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuXG4gICAgaWYgKFNfRlJBTUVCVUZGRVIgaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgdmFyIGZyYW1lYnVmZmVyID0gc3RhdGljT3B0aW9uc1tTX0ZSQU1FQlVGRkVSXVxuICAgICAgaWYgKGZyYW1lYnVmZmVyKSB7XG4gICAgICAgIGZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXJTdGF0ZS5nZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcilcbiAgICAgICAgY2hlY2skMS5jb21tYW5kKGZyYW1lYnVmZmVyLCAnaW52YWxpZCBmcmFtZWJ1ZmZlciBvYmplY3QnKVxuICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBibG9jaykge1xuICAgICAgICAgIHZhciBGUkFNRUJVRkZFUiA9IGVudi5saW5rKGZyYW1lYnVmZmVyKVxuICAgICAgICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgICAgICAgYmxvY2suc2V0KFxuICAgICAgICAgICAgc2hhcmVkLmZyYW1lYnVmZmVyLFxuICAgICAgICAgICAgJy5uZXh0JyxcbiAgICAgICAgICAgIEZSQU1FQlVGRkVSKVxuICAgICAgICAgIHZhciBDT05URVhUID0gc2hhcmVkLmNvbnRleHRcbiAgICAgICAgICBibG9jay5zZXQoXG4gICAgICAgICAgICBDT05URVhULFxuICAgICAgICAgICAgJy4nICsgU19GUkFNRUJVRkZFUl9XSURUSCxcbiAgICAgICAgICAgIEZSQU1FQlVGRkVSICsgJy53aWR0aCcpXG4gICAgICAgICAgYmxvY2suc2V0KFxuICAgICAgICAgICAgQ09OVEVYVCxcbiAgICAgICAgICAgICcuJyArIFNfRlJBTUVCVUZGRVJfSEVJR0hULFxuICAgICAgICAgICAgRlJBTUVCVUZGRVIgKyAnLmhlaWdodCcpXG4gICAgICAgICAgcmV0dXJuIEZSQU1FQlVGRkVSXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgICAgICAgc2NvcGUuc2V0KFxuICAgICAgICAgICAgc2hhcmVkLmZyYW1lYnVmZmVyLFxuICAgICAgICAgICAgJy5uZXh0JyxcbiAgICAgICAgICAgICdudWxsJylcbiAgICAgICAgICB2YXIgQ09OVEVYVCA9IHNoYXJlZC5jb250ZXh0XG4gICAgICAgICAgc2NvcGUuc2V0KFxuICAgICAgICAgICAgQ09OVEVYVCxcbiAgICAgICAgICAgICcuJyArIFNfRlJBTUVCVUZGRVJfV0lEVEgsXG4gICAgICAgICAgICBDT05URVhUICsgJy4nICsgU19EUkFXSU5HQlVGRkVSX1dJRFRIKVxuICAgICAgICAgIHNjb3BlLnNldChcbiAgICAgICAgICAgIENPTlRFWFQsXG4gICAgICAgICAgICAnLicgKyBTX0ZSQU1FQlVGRkVSX0hFSUdIVCxcbiAgICAgICAgICAgIENPTlRFWFQgKyAnLicgKyBTX0RSQVdJTkdCVUZGRVJfSEVJR0hUKVxuICAgICAgICAgIHJldHVybiAnbnVsbCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFNfRlJBTUVCVUZGRVIgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgIHZhciBkeW4gPSBkeW5hbWljT3B0aW9uc1tTX0ZSQU1FQlVGRkVSXVxuICAgICAgcmV0dXJuIGNyZWF0ZUR5bmFtaWNEZWNsKGR5biwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgdmFyIEZSQU1FQlVGRkVSX0ZVTkMgPSBlbnYuaW52b2tlKHNjb3BlLCBkeW4pXG4gICAgICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgICAgIHZhciBGUkFNRUJVRkZFUl9TVEFURSA9IHNoYXJlZC5mcmFtZWJ1ZmZlclxuICAgICAgICB2YXIgRlJBTUVCVUZGRVIgPSBzY29wZS5kZWYoXG4gICAgICAgICAgRlJBTUVCVUZGRVJfU1RBVEUsICcuZ2V0RnJhbWVidWZmZXIoJywgRlJBTUVCVUZGRVJfRlVOQywgJyknKVxuXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAnIScgKyBGUkFNRUJVRkZFUl9GVU5DICsgJ3x8JyArIEZSQU1FQlVGRkVSLFxuICAgICAgICAgICAgJ2ludmFsaWQgZnJhbWVidWZmZXIgb2JqZWN0JylcbiAgICAgICAgfSlcblxuICAgICAgICBzY29wZS5zZXQoXG4gICAgICAgICAgRlJBTUVCVUZGRVJfU1RBVEUsXG4gICAgICAgICAgJy5uZXh0JyxcbiAgICAgICAgICBGUkFNRUJVRkZFUilcbiAgICAgICAgdmFyIENPTlRFWFQgPSBzaGFyZWQuY29udGV4dFxuICAgICAgICBzY29wZS5zZXQoXG4gICAgICAgICAgQ09OVEVYVCxcbiAgICAgICAgICAnLicgKyBTX0ZSQU1FQlVGRkVSX1dJRFRILFxuICAgICAgICAgIEZSQU1FQlVGRkVSICsgJz8nICsgRlJBTUVCVUZGRVIgKyAnLndpZHRoOicgK1xuICAgICAgICAgIENPTlRFWFQgKyAnLicgKyBTX0RSQVdJTkdCVUZGRVJfV0lEVEgpXG4gICAgICAgIHNjb3BlLnNldChcbiAgICAgICAgICBDT05URVhULFxuICAgICAgICAgICcuJyArIFNfRlJBTUVCVUZGRVJfSEVJR0hULFxuICAgICAgICAgIEZSQU1FQlVGRkVSICtcbiAgICAgICAgICAnPycgKyBGUkFNRUJVRkZFUiArICcuaGVpZ2h0OicgK1xuICAgICAgICAgIENPTlRFWFQgKyAnLicgKyBTX0RSQVdJTkdCVUZGRVJfSEVJR0hUKVxuICAgICAgICByZXR1cm4gRlJBTUVCVUZGRVJcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VWaWV3cG9ydFNjaXNzb3IgKG9wdGlvbnMsIGZyYW1lYnVmZmVyLCBlbnYpIHtcbiAgICB2YXIgc3RhdGljT3B0aW9ucyA9IG9wdGlvbnMuc3RhdGljXG4gICAgdmFyIGR5bmFtaWNPcHRpb25zID0gb3B0aW9ucy5keW5hbWljXG5cbiAgICBmdW5jdGlvbiBwYXJzZUJveCAocGFyYW0pIHtcbiAgICAgIGlmIChwYXJhbSBpbiBzdGF0aWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBib3ggPSBzdGF0aWNPcHRpb25zW3BhcmFtXVxuICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKGJveCwgJ29iamVjdCcsICdpbnZhbGlkICcgKyBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG5cbiAgICAgICAgdmFyIGlzU3RhdGljID0gdHJ1ZVxuICAgICAgICB2YXIgeCA9IGJveC54IHwgMFxuICAgICAgICB2YXIgeSA9IGJveC55IHwgMFxuICAgICAgICB2YXIgdywgaFxuICAgICAgICBpZiAoJ3dpZHRoJyBpbiBib3gpIHtcbiAgICAgICAgICB3ID0gYm94LndpZHRoIHwgMFxuICAgICAgICAgIGNoZWNrJDEuY29tbWFuZCh3ID49IDAsICdpbnZhbGlkICcgKyBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNTdGF0aWMgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmICgnaGVpZ2h0JyBpbiBib3gpIHtcbiAgICAgICAgICBoID0gYm94LmhlaWdodCB8IDBcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoaCA+PSAwLCAnaW52YWxpZCAnICsgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzU3RhdGljID0gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgRGVjbGFyYXRpb24oXG4gICAgICAgICAgIWlzU3RhdGljICYmIGZyYW1lYnVmZmVyICYmIGZyYW1lYnVmZmVyLnRoaXNEZXAsXG4gICAgICAgICAgIWlzU3RhdGljICYmIGZyYW1lYnVmZmVyICYmIGZyYW1lYnVmZmVyLmNvbnRleHREZXAsXG4gICAgICAgICAgIWlzU3RhdGljICYmIGZyYW1lYnVmZmVyICYmIGZyYW1lYnVmZmVyLnByb3BEZXAsXG4gICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICAgIHZhciBDT05URVhUID0gZW52LnNoYXJlZC5jb250ZXh0XG4gICAgICAgICAgICB2YXIgQk9YX1cgPSB3XG4gICAgICAgICAgICBpZiAoISgnd2lkdGgnIGluIGJveCkpIHtcbiAgICAgICAgICAgICAgQk9YX1cgPSBzY29wZS5kZWYoQ09OVEVYVCwgJy4nLCBTX0ZSQU1FQlVGRkVSX1dJRFRILCAnLScsIHgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgQk9YX0ggPSBoXG4gICAgICAgICAgICBpZiAoISgnaGVpZ2h0JyBpbiBib3gpKSB7XG4gICAgICAgICAgICAgIEJPWF9IID0gc2NvcGUuZGVmKENPTlRFWFQsICcuJywgU19GUkFNRUJVRkZFUl9IRUlHSFQsICctJywgeSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbeCwgeSwgQk9YX1csIEJPWF9IXVxuICAgICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKHBhcmFtIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBkeW5Cb3ggPSBkeW5hbWljT3B0aW9uc1twYXJhbV1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZUR5bmFtaWNEZWNsKGR5bkJveCwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICB2YXIgQk9YID0gZW52Lmludm9rZShzY29wZSwgZHluQm94KVxuXG4gICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICBCT1ggKyAnJiZ0eXBlb2YgJyArIEJPWCArICc9PT1cIm9iamVjdFwiJyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgJyArIHBhcmFtKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICB2YXIgQ09OVEVYVCA9IGVudi5zaGFyZWQuY29udGV4dFxuICAgICAgICAgIHZhciBCT1hfWCA9IHNjb3BlLmRlZihCT1gsICcueHwwJylcbiAgICAgICAgICB2YXIgQk9YX1kgPSBzY29wZS5kZWYoQk9YLCAnLnl8MCcpXG4gICAgICAgICAgdmFyIEJPWF9XID0gc2NvcGUuZGVmKFxuICAgICAgICAgICAgJ1wid2lkdGhcIiBpbiAnLCBCT1gsICc/JywgQk9YLCAnLndpZHRofDA6JyxcbiAgICAgICAgICAgICcoJywgQ09OVEVYVCwgJy4nLCBTX0ZSQU1FQlVGRkVSX1dJRFRILCAnLScsIEJPWF9YLCAnKScpXG4gICAgICAgICAgdmFyIEJPWF9IID0gc2NvcGUuZGVmKFxuICAgICAgICAgICAgJ1wiaGVpZ2h0XCIgaW4gJywgQk9YLCAnPycsIEJPWCwgJy5oZWlnaHR8MDonLFxuICAgICAgICAgICAgJygnLCBDT05URVhULCAnLicsIFNfRlJBTUVCVUZGRVJfSEVJR0hULCAnLScsIEJPWF9ZLCAnKScpXG5cbiAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgIEJPWF9XICsgJz49MCYmJyArXG4gICAgICAgICAgICAgIEJPWF9IICsgJz49MCcsXG4gICAgICAgICAgICAgICdpbnZhbGlkICcgKyBwYXJhbSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIFtCT1hfWCwgQk9YX1ksIEJPWF9XLCBCT1hfSF1cbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGZyYW1lYnVmZmVyKSB7XG4gICAgICAgICAgcmVzdWx0LnRoaXNEZXAgPSByZXN1bHQudGhpc0RlcCB8fCBmcmFtZWJ1ZmZlci50aGlzRGVwXG4gICAgICAgICAgcmVzdWx0LmNvbnRleHREZXAgPSByZXN1bHQuY29udGV4dERlcCB8fCBmcmFtZWJ1ZmZlci5jb250ZXh0RGVwXG4gICAgICAgICAgcmVzdWx0LnByb3BEZXAgPSByZXN1bHQucHJvcERlcCB8fCBmcmFtZWJ1ZmZlci5wcm9wRGVwXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBlbHNlIGlmIChmcmFtZWJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgICAgIGZyYW1lYnVmZmVyLnRoaXNEZXAsXG4gICAgICAgICAgZnJhbWVidWZmZXIuY29udGV4dERlcCxcbiAgICAgICAgICBmcmFtZWJ1ZmZlci5wcm9wRGVwLFxuICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgICB2YXIgQ09OVEVYVCA9IGVudi5zaGFyZWQuY29udGV4dFxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgMCwgMCxcbiAgICAgICAgICAgICAgc2NvcGUuZGVmKENPTlRFWFQsICcuJywgU19GUkFNRUJVRkZFUl9XSURUSCksXG4gICAgICAgICAgICAgIHNjb3BlLmRlZihDT05URVhULCAnLicsIFNfRlJBTUVCVUZGRVJfSEVJR0hUKV1cbiAgICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdmlld3BvcnQgPSBwYXJzZUJveChTX1ZJRVdQT1JUKVxuXG4gICAgaWYgKHZpZXdwb3J0KSB7XG4gICAgICB2YXIgcHJldlZpZXdwb3J0ID0gdmlld3BvcnRcbiAgICAgIHZpZXdwb3J0ID0gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgICB2aWV3cG9ydC50aGlzRGVwLFxuICAgICAgICB2aWV3cG9ydC5jb250ZXh0RGVwLFxuICAgICAgICB2aWV3cG9ydC5wcm9wRGVwLFxuICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciBWSUVXUE9SVCA9IHByZXZWaWV3cG9ydC5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgICAgICB2YXIgQ09OVEVYVCA9IGVudi5zaGFyZWQuY29udGV4dFxuICAgICAgICAgIHNjb3BlLnNldChcbiAgICAgICAgICAgIENPTlRFWFQsXG4gICAgICAgICAgICAnLicgKyBTX1ZJRVdQT1JUX1dJRFRILFxuICAgICAgICAgICAgVklFV1BPUlRbMl0pXG4gICAgICAgICAgc2NvcGUuc2V0KFxuICAgICAgICAgICAgQ09OVEVYVCxcbiAgICAgICAgICAgICcuJyArIFNfVklFV1BPUlRfSEVJR0hULFxuICAgICAgICAgICAgVklFV1BPUlRbM10pXG4gICAgICAgICAgcmV0dXJuIFZJRVdQT1JUXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpZXdwb3J0OiB2aWV3cG9ydCxcbiAgICAgIHNjaXNzb3JfYm94OiBwYXJzZUJveChTX1NDSVNTT1JfQk9YKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQXR0cmliTG9jYXRpb25zIChvcHRpb25zLCBhdHRyaWJ1dGVzKSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBzdGF0aWNQcm9ncmFtID1cbiAgICAgIHR5cGVvZiBzdGF0aWNPcHRpb25zW1NfRlJBR10gPT09ICdzdHJpbmcnICYmXG4gICAgICB0eXBlb2Ygc3RhdGljT3B0aW9uc1tTX1ZFUlRdID09PSAnc3RyaW5nJ1xuICAgIGlmIChzdGF0aWNQcm9ncmFtKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoYXR0cmlidXRlcy5keW5hbWljKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICB2YXIgc3RhdGljQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuc3RhdGljXG4gICAgICB2YXIgc0F0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhzdGF0aWNBdHRyaWJ1dGVzKVxuICAgICAgaWYgKHNBdHRyaWJ1dGVzLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHN0YXRpY0F0dHJpYnV0ZXNbc0F0dHJpYnV0ZXNbMF1dID09PSAnbnVtYmVyJykge1xuICAgICAgICB2YXIgYmluZGluZ3MgPSBbXVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNBdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2hlY2skMSh0eXBlb2Ygc3RhdGljQXR0cmlidXRlc1tzQXR0cmlidXRlc1tpXV0gPT09ICdudW1iZXInLCAnbXVzdCBzcGVjaWZ5IGFsbCB2ZXJ0ZXggYXR0cmlidXRlIGxvY2F0aW9ucyB3aGVuIHVzaW5nIHZhb3MnKVxuICAgICAgICAgIGJpbmRpbmdzLnB1c2goW3N0YXRpY0F0dHJpYnV0ZXNbc0F0dHJpYnV0ZXNbaV1dIHwgMCwgc0F0dHJpYnV0ZXNbaV1dKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiaW5kaW5nc1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VQcm9ncmFtIChvcHRpb25zLCBlbnYsIGF0dHJpYkxvY2F0aW9ucykge1xuICAgIHZhciBzdGF0aWNPcHRpb25zID0gb3B0aW9ucy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY09wdGlvbnMgPSBvcHRpb25zLmR5bmFtaWNcblxuICAgIGZ1bmN0aW9uIHBhcnNlU2hhZGVyIChuYW1lKSB7XG4gICAgICBpZiAobmFtZSBpbiBzdGF0aWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBpZCA9IHN0cmluZ1N0b3JlLmlkKHN0YXRpY09wdGlvbnNbbmFtZV0pXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNoYWRlclN0YXRlLnNoYWRlcihzaGFkZXJUeXBlW25hbWVdLCBpZCwgY2hlY2skMS5ndWVzc0NvbW1hbmQoKSlcbiAgICAgICAgfSlcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBpZFxuICAgICAgICB9KVxuICAgICAgICByZXN1bHQuaWQgPSBpZFxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9IGVsc2UgaWYgKG5hbWUgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIGR5biA9IGR5bmFtaWNPcHRpb25zW25hbWVdXG4gICAgICAgIHJldHVybiBjcmVhdGVEeW5hbWljRGVjbChkeW4sIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgdmFyIHN0ciA9IGVudi5pbnZva2Uoc2NvcGUsIGR5bilcbiAgICAgICAgICB2YXIgaWQgPSBzY29wZS5kZWYoZW52LnNoYXJlZC5zdHJpbmdzLCAnLmlkKCcsIHN0ciwgJyknKVxuICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2NvcGUoXG4gICAgICAgICAgICAgIGVudi5zaGFyZWQuc2hhZGVyLCAnLnNoYWRlcignLFxuICAgICAgICAgICAgICBzaGFkZXJUeXBlW25hbWVdLCAnLCcsXG4gICAgICAgICAgICAgIGlkLCAnLCcsXG4gICAgICAgICAgICAgIGVudi5jb21tYW5kLCAnKTsnKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIGlkXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHZhciBmcmFnID0gcGFyc2VTaGFkZXIoU19GUkFHKVxuICAgIHZhciB2ZXJ0ID0gcGFyc2VTaGFkZXIoU19WRVJUKVxuXG4gICAgdmFyIHByb2dyYW0gPSBudWxsXG4gICAgdmFyIHByb2dWYXJcbiAgICBpZiAoaXNTdGF0aWMoZnJhZykgJiYgaXNTdGF0aWModmVydCkpIHtcbiAgICAgIHByb2dyYW0gPSBzaGFkZXJTdGF0ZS5wcm9ncmFtKHZlcnQuaWQsIGZyYWcuaWQsIG51bGwsIGF0dHJpYkxvY2F0aW9ucylcbiAgICAgIHByb2dWYXIgPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgIHJldHVybiBlbnYubGluayhwcm9ncmFtKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ1ZhciA9IG5ldyBEZWNsYXJhdGlvbihcbiAgICAgICAgKGZyYWcgJiYgZnJhZy50aGlzRGVwKSB8fCAodmVydCAmJiB2ZXJ0LnRoaXNEZXApLFxuICAgICAgICAoZnJhZyAmJiBmcmFnLmNvbnRleHREZXApIHx8ICh2ZXJ0ICYmIHZlcnQuY29udGV4dERlcCksXG4gICAgICAgIChmcmFnICYmIGZyYWcucHJvcERlcCkgfHwgKHZlcnQgJiYgdmVydC5wcm9wRGVwKSxcbiAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICB2YXIgU0hBREVSX1NUQVRFID0gZW52LnNoYXJlZC5zaGFkZXJcbiAgICAgICAgICB2YXIgZnJhZ0lkXG4gICAgICAgICAgaWYgKGZyYWcpIHtcbiAgICAgICAgICAgIGZyYWdJZCA9IGZyYWcuYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyYWdJZCA9IHNjb3BlLmRlZihTSEFERVJfU1RBVEUsICcuJywgU19GUkFHKVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgdmVydElkXG4gICAgICAgICAgaWYgKHZlcnQpIHtcbiAgICAgICAgICAgIHZlcnRJZCA9IHZlcnQuYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZlcnRJZCA9IHNjb3BlLmRlZihTSEFERVJfU1RBVEUsICcuJywgU19WRVJUKVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgcHJvZ0RlZiA9IFNIQURFUl9TVEFURSArICcucHJvZ3JhbSgnICsgdmVydElkICsgJywnICsgZnJhZ0lkXG4gICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwcm9nRGVmICs9ICcsJyArIGVudi5jb21tYW5kXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm4gc2NvcGUuZGVmKHByb2dEZWYgKyAnKScpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZyYWc6IGZyYWcsXG4gICAgICB2ZXJ0OiB2ZXJ0LFxuICAgICAgcHJvZ1ZhcjogcHJvZ1ZhcixcbiAgICAgIHByb2dyYW06IHByb2dyYW1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZURyYXcgKG9wdGlvbnMsIGVudikge1xuICAgIHZhciBzdGF0aWNPcHRpb25zID0gb3B0aW9ucy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY09wdGlvbnMgPSBvcHRpb25zLmR5bmFtaWNcblxuICAgIGZ1bmN0aW9uIHBhcnNlRWxlbWVudHMgKCkge1xuICAgICAgaWYgKFNfRUxFTUVOVFMgaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgICB2YXIgZWxlbWVudHMgPSBzdGF0aWNPcHRpb25zW1NfRUxFTUVOVFNdXG4gICAgICAgIGlmIChpc0J1ZmZlckFyZ3MoZWxlbWVudHMpKSB7XG4gICAgICAgICAgZWxlbWVudHMgPSBlbGVtZW50U3RhdGUuZ2V0RWxlbWVudHMoZWxlbWVudFN0YXRlLmNyZWF0ZShlbGVtZW50cywgdHJ1ZSkpXG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgICBlbGVtZW50cyA9IGVsZW1lbnRTdGF0ZS5nZXRFbGVtZW50cyhlbGVtZW50cylcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoZWxlbWVudHMsICdpbnZhbGlkIGVsZW1lbnRzJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBlbnYubGluayhlbGVtZW50cylcbiAgICAgICAgICAgIGVudi5FTEVNRU5UUyA9IHJlc3VsdFxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgICBlbnYuRUxFTUVOVFMgPSBudWxsXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfSlcbiAgICAgICAgcmVzdWx0LnZhbHVlID0gZWxlbWVudHNcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBlbHNlIGlmIChTX0VMRU1FTlRTIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBkeW4gPSBkeW5hbWljT3B0aW9uc1tTX0VMRU1FTlRTXVxuICAgICAgICByZXR1cm4gY3JlYXRlRHluYW1pY0RlY2woZHluLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG5cbiAgICAgICAgICB2YXIgSVNfQlVGRkVSX0FSR1MgPSBzaGFyZWQuaXNCdWZmZXJBcmdzXG4gICAgICAgICAgdmFyIEVMRU1FTlRfU1RBVEUgPSBzaGFyZWQuZWxlbWVudHNcblxuICAgICAgICAgIHZhciBlbGVtZW50RGVmbiA9IGVudi5pbnZva2Uoc2NvcGUsIGR5bilcbiAgICAgICAgICB2YXIgZWxlbWVudHMgPSBzY29wZS5kZWYoJ251bGwnKVxuICAgICAgICAgIHZhciBlbGVtZW50U3RyZWFtID0gc2NvcGUuZGVmKElTX0JVRkZFUl9BUkdTLCAnKCcsIGVsZW1lbnREZWZuLCAnKScpXG5cbiAgICAgICAgICB2YXIgaWZ0ZSA9IGVudi5jb25kKGVsZW1lbnRTdHJlYW0pXG4gICAgICAgICAgICAudGhlbihlbGVtZW50cywgJz0nLCBFTEVNRU5UX1NUQVRFLCAnLmNyZWF0ZVN0cmVhbSgnLCBlbGVtZW50RGVmbiwgJyk7JylcbiAgICAgICAgICAgIC5lbHNlKGVsZW1lbnRzLCAnPScsIEVMRU1FTlRfU1RBVEUsICcuZ2V0RWxlbWVudHMoJywgZWxlbWVudERlZm4sICcpOycpXG5cbiAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoaWZ0ZS5lbHNlLFxuICAgICAgICAgICAgICAnIScgKyBlbGVtZW50RGVmbiArICd8fCcgKyBlbGVtZW50cyxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgZWxlbWVudHMnKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBzY29wZS5lbnRyeShpZnRlKVxuICAgICAgICAgIHNjb3BlLmV4aXQoXG4gICAgICAgICAgICBlbnYuY29uZChlbGVtZW50U3RyZWFtKVxuICAgICAgICAgICAgICAudGhlbihFTEVNRU5UX1NUQVRFLCAnLmRlc3Ryb3lTdHJlYW0oJywgZWxlbWVudHMsICcpOycpKVxuXG4gICAgICAgICAgZW52LkVMRU1FTlRTID0gZWxlbWVudHNcblxuICAgICAgICAgIHJldHVybiBlbGVtZW50c1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHZhciBlbGVtZW50cyA9IHBhcnNlRWxlbWVudHMoKVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQcmltaXRpdmUgKCkge1xuICAgICAgaWYgKFNfUFJJTUlUSVZFIGluIHN0YXRpY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIHByaW1pdGl2ZSA9IHN0YXRpY09wdGlvbnNbU19QUklNSVRJVkVdXG4gICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcihwcmltaXRpdmUsIHByaW1UeXBlcywgJ2ludmFsaWQgcHJpbWl0dmUnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICByZXR1cm4gcHJpbVR5cGVzW3ByaW1pdGl2ZV1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoU19QUklNSVRJVkUgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIGR5blByaW1pdGl2ZSA9IGR5bmFtaWNPcHRpb25zW1NfUFJJTUlUSVZFXVxuICAgICAgICByZXR1cm4gY3JlYXRlRHluYW1pY0RlY2woZHluUHJpbWl0aXZlLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciBQUklNX1RZUEVTID0gZW52LmNvbnN0YW50cy5wcmltVHlwZXNcbiAgICAgICAgICB2YXIgcHJpbSA9IGVudi5pbnZva2Uoc2NvcGUsIGR5blByaW1pdGl2ZSlcbiAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgIHByaW0gKyAnIGluICcgKyBQUklNX1RZUEVTLFxuICAgICAgICAgICAgICAnaW52YWxpZCBwcmltaXRpdmUsIG11c3QgYmUgb25lIG9mICcgKyBPYmplY3Qua2V5cyhwcmltVHlwZXMpKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihQUklNX1RZUEVTLCAnWycsIHByaW0sICddJylcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljKGVsZW1lbnRzKSkge1xuICAgICAgICAgIGlmIChlbGVtZW50cy52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihlbnYuRUxFTUVOVFMsICcucHJpbVR5cGUnKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gR0xfVFJJQU5HTEVTJDFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBuZXcgRGVjbGFyYXRpb24oXG4gICAgICAgICAgICBlbGVtZW50cy50aGlzRGVwLFxuICAgICAgICAgICAgZWxlbWVudHMuY29udGV4dERlcCxcbiAgICAgICAgICAgIGVsZW1lbnRzLnByb3BEZXAsXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBlbnYuRUxFTUVOVFNcbiAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihlbGVtZW50cywgJz8nLCBlbGVtZW50cywgJy5wcmltVHlwZTonLCBHTF9UUklBTkdMRVMkMSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQYXJhbSAocGFyYW0sIGlzT2Zmc2V0KSB7XG4gICAgICBpZiAocGFyYW0gaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgICB2YXIgdmFsdWUgPSBzdGF0aWNPcHRpb25zW3BhcmFtXSB8IDBcbiAgICAgICAgY2hlY2skMS5jb21tYW5kKCFpc09mZnNldCB8fCB2YWx1ZSA+PSAwLCAnaW52YWxpZCAnICsgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIGlmIChpc09mZnNldCkge1xuICAgICAgICAgICAgZW52Lk9GRlNFVCA9IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChwYXJhbSBpbiBkeW5hbWljT3B0aW9ucykge1xuICAgICAgICB2YXIgZHluVmFsdWUgPSBkeW5hbWljT3B0aW9uc1twYXJhbV1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR5bmFtaWNEZWNsKGR5blZhbHVlLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBlbnYuaW52b2tlKHNjb3BlLCBkeW5WYWx1ZSlcbiAgICAgICAgICBpZiAoaXNPZmZzZXQpIHtcbiAgICAgICAgICAgIGVudi5PRkZTRVQgPSByZXN1bHRcbiAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgIHJlc3VsdCArICc+PTAnLFxuICAgICAgICAgICAgICAgICdpbnZhbGlkICcgKyBwYXJhbSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoaXNPZmZzZXQgJiYgZWxlbWVudHMpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICBlbnYuT0ZGU0VUID0gJzAnXG4gICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdmFyIE9GRlNFVCA9IHBhcnNlUGFyYW0oU19PRkZTRVQsIHRydWUpXG5cbiAgICBmdW5jdGlvbiBwYXJzZVZlcnRDb3VudCAoKSB7XG4gICAgICBpZiAoU19DT1VOVCBpbiBzdGF0aWNPcHRpb25zKSB7XG4gICAgICAgIHZhciBjb3VudCA9IHN0YXRpY09wdGlvbnNbU19DT1VOVF0gfCAwXG4gICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICB0eXBlb2YgY291bnQgPT09ICdudW1iZXInICYmIGNvdW50ID49IDAsICdpbnZhbGlkIHZlcnRleCBjb3VudCcsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvdW50XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKFNfQ09VTlQgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgICAgdmFyIGR5bkNvdW50ID0gZHluYW1pY09wdGlvbnNbU19DT1VOVF1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR5bmFtaWNEZWNsKGR5bkNvdW50LCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBlbnYuaW52b2tlKHNjb3BlLCBkeW5Db3VudClcbiAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICd0eXBlb2YgJyArIHJlc3VsdCArICc9PT1cIm51bWJlclwiJiYnICtcbiAgICAgICAgICAgICAgcmVzdWx0ICsgJz49MCYmJyArXG4gICAgICAgICAgICAgIHJlc3VsdCArICc9PT0oJyArIHJlc3VsdCArICd8MCknLFxuICAgICAgICAgICAgICAnaW52YWxpZCB2ZXJ0ZXggY291bnQnKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChlbGVtZW50cykge1xuICAgICAgICBpZiAoaXNTdGF0aWMoZWxlbWVudHMpKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBpZiAoT0ZGU0VUKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgRGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgICAgT0ZGU0VULnRoaXNEZXAsXG4gICAgICAgICAgICAgICAgT0ZGU0VULmNvbnRleHREZXAsXG4gICAgICAgICAgICAgICAgT0ZGU0VULnByb3BEZXAsXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBzY29wZS5kZWYoXG4gICAgICAgICAgICAgICAgICAgIGVudi5FTEVNRU5UUywgJy52ZXJ0Q291bnQtJywgZW52Lk9GRlNFVClcblxuICAgICAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgJz49MCcsXG4gICAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgdmVydGV4IG9mZnNldC9lbGVtZW50IGJ1ZmZlciB0b28gc21hbGwnKVxuICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoZW52LkVMRU1FTlRTLCAnLnZlcnRDb3VudCcpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5NSVNTSU5HID0gdHJ1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHZhcmlhYmxlID0gbmV3IERlY2xhcmF0aW9uKFxuICAgICAgICAgICAgZWxlbWVudHMudGhpc0RlcCB8fCBPRkZTRVQudGhpc0RlcCxcbiAgICAgICAgICAgIGVsZW1lbnRzLmNvbnRleHREZXAgfHwgT0ZGU0VULmNvbnRleHREZXAsXG4gICAgICAgICAgICBlbGVtZW50cy5wcm9wRGVwIHx8IE9GRlNFVC5wcm9wRGVwLFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gZW52LkVMRU1FTlRTXG4gICAgICAgICAgICAgIGlmIChlbnYuT0ZGU0VUKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZihlbGVtZW50cywgJz8nLCBlbGVtZW50cywgJy52ZXJ0Q291bnQtJyxcbiAgICAgICAgICAgICAgICAgIGVudi5PRkZTRVQsICc6LTEnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoZWxlbWVudHMsICc/JywgZWxlbWVudHMsICcudmVydENvdW50Oi0xJylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXJpYWJsZS5EWU5BTUlDID0gdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHZhcmlhYmxlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcbiAgICAgIHByaW1pdGl2ZTogcGFyc2VQcmltaXRpdmUoKSxcbiAgICAgIGNvdW50OiBwYXJzZVZlcnRDb3VudCgpLFxuICAgICAgaW5zdGFuY2VzOiBwYXJzZVBhcmFtKFNfSU5TVEFOQ0VTLCBmYWxzZSksXG4gICAgICBvZmZzZXQ6IE9GRlNFVFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlR0xTdGF0ZSAob3B0aW9ucywgZW52KSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuXG4gICAgdmFyIFNUQVRFID0ge31cblxuICAgIEdMX1NUQVRFX05BTUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIHZhciBwYXJhbSA9IHByb3BOYW1lKHByb3ApXG5cbiAgICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW0gKHBhcnNlU3RhdGljLCBwYXJzZUR5bmFtaWMpIHtcbiAgICAgICAgaWYgKHByb3AgaW4gc3RhdGljT3B0aW9ucykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHBhcnNlU3RhdGljKHN0YXRpY09wdGlvbnNbcHJvcF0pXG4gICAgICAgICAgU1RBVEVbcGFyYW1dID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKHByb3AgaW4gZHluYW1pY09wdGlvbnMpIHtcbiAgICAgICAgICB2YXIgZHluID0gZHluYW1pY09wdGlvbnNbcHJvcF1cbiAgICAgICAgICBTVEFURVtwYXJhbV0gPSBjcmVhdGVEeW5hbWljRGVjbChkeW4sIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VEeW5hbWljKGVudiwgc2NvcGUsIGVudi5pbnZva2Uoc2NvcGUsIGR5bikpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHByb3ApIHtcbiAgICAgICAgY2FzZSBTX0NVTExfRU5BQkxFOlxuICAgICAgICBjYXNlIFNfQkxFTkRfRU5BQkxFOlxuICAgICAgICBjYXNlIFNfRElUSEVSOlxuICAgICAgICBjYXNlIFNfU1RFTkNJTF9FTkFCTEU6XG4gICAgICAgIGNhc2UgU19ERVBUSF9FTkFCTEU6XG4gICAgICAgIGNhc2UgU19TQ0lTU09SX0VOQUJMRTpcbiAgICAgICAgY2FzZSBTX1BPTFlHT05fT0ZGU0VUX0VOQUJMRTpcbiAgICAgICAgY2FzZSBTX1NBTVBMRV9BTFBIQTpcbiAgICAgICAgY2FzZSBTX1NBTVBMRV9FTkFCTEU6XG4gICAgICAgIGNhc2UgU19ERVBUSF9NQVNLOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdib29sZWFuJywgcHJvcCwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgJ3R5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJib29sZWFuXCInLFxuICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgZmxhZyAnICsgcHJvcCwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfREVQVEhfRlVOQzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIodmFsdWUsIGNvbXBhcmVGdW5jcywgJ2ludmFsaWQgJyArIHByb3AsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUZ1bmNzW3ZhbHVlXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICB2YXIgQ09NUEFSRV9GVU5DUyA9IGVudi5jb25zdGFudHMuY29tcGFyZUZ1bmNzXG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICcgaW4gJyArIENPTVBBUkVfRlVOQ1MsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCAnICsgcHJvcCArICcsIG11c3QgYmUgb25lIG9mICcgKyBPYmplY3Qua2V5cyhjb21wYXJlRnVuY3MpKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuZGVmKENPTVBBUkVfRlVOQ1MsICdbJywgdmFsdWUsICddJylcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0RFUFRIX1JBTkdFOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZS5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWVbMF0gPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlWzFdID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgIHZhbHVlWzBdIDw9IHZhbHVlWzFdLFxuICAgICAgICAgICAgICAgICdkZXB0aCByYW5nZSBpcyAyZCBhcnJheScsXG4gICAgICAgICAgICAgICAgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgZW52LnNoYXJlZC5pc0FycmF5TGlrZSArICcoJyArIHZhbHVlICsgJykmJicgK1xuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnLmxlbmd0aD09PTImJicgK1xuICAgICAgICAgICAgICAgICAgJ3R5cGVvZiAnICsgdmFsdWUgKyAnWzBdPT09XCJudW1iZXJcIiYmJyArXG4gICAgICAgICAgICAgICAgICAndHlwZW9mICcgKyB2YWx1ZSArICdbMV09PT1cIm51bWJlclwiJiYnICtcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJ1swXTw9JyArIHZhbHVlICsgJ1sxXScsXG4gICAgICAgICAgICAgICAgICAnZGVwdGggcmFuZ2UgbXVzdCBiZSBhIDJkIGFycmF5JylcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICB2YXIgWl9ORUFSID0gc2NvcGUuZGVmKCcrJywgdmFsdWUsICdbMF0nKVxuICAgICAgICAgICAgICB2YXIgWl9GQVIgPSBzY29wZS5kZWYoJysnLCB2YWx1ZSwgJ1sxXScpXG4gICAgICAgICAgICAgIHJldHVybiBbWl9ORUFSLCBaX0ZBUl1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0JMRU5EX0ZVTkM6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZSh2YWx1ZSwgJ29iamVjdCcsICdibGVuZC5mdW5jJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHZhciBzcmNSR0IgPSAoJ3NyY1JHQicgaW4gdmFsdWUgPyB2YWx1ZS5zcmNSR0IgOiB2YWx1ZS5zcmMpXG4gICAgICAgICAgICAgIHZhciBzcmNBbHBoYSA9ICgnc3JjQWxwaGEnIGluIHZhbHVlID8gdmFsdWUuc3JjQWxwaGEgOiB2YWx1ZS5zcmMpXG4gICAgICAgICAgICAgIHZhciBkc3RSR0IgPSAoJ2RzdFJHQicgaW4gdmFsdWUgPyB2YWx1ZS5kc3RSR0IgOiB2YWx1ZS5kc3QpXG4gICAgICAgICAgICAgIHZhciBkc3RBbHBoYSA9ICgnZHN0QWxwaGEnIGluIHZhbHVlID8gdmFsdWUuZHN0QWxwaGEgOiB2YWx1ZS5kc3QpXG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcihzcmNSR0IsIGJsZW5kRnVuY3MsIHBhcmFtICsgJy5zcmNSR0InLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKHNyY0FscGhhLCBibGVuZEZ1bmNzLCBwYXJhbSArICcuc3JjQWxwaGEnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKGRzdFJHQiwgYmxlbmRGdW5jcywgcGFyYW0gKyAnLmRzdFJHQicsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoZHN0QWxwaGEsIGJsZW5kRnVuY3MsIHBhcmFtICsgJy5kc3RBbHBoYScsIGVudi5jb21tYW5kU3RyKVxuXG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAoaW52YWxpZEJsZW5kQ29tYmluYXRpb25zLmluZGV4T2Yoc3JjUkdCICsgJywgJyArIGRzdFJHQikgPT09IC0xKSxcbiAgICAgICAgICAgICAgICAndW5hbGxvd2VkIGJsZW5kaW5nIGNvbWJpbmF0aW9uIChzcmNSR0IsIGRzdFJHQikgPSAoJyArIHNyY1JHQiArICcsICcgKyBkc3RSR0IgKyAnKScsIGVudi5jb21tYW5kU3RyKVxuXG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgYmxlbmRGdW5jc1tzcmNSR0JdLFxuICAgICAgICAgICAgICAgIGJsZW5kRnVuY3NbZHN0UkdCXSxcbiAgICAgICAgICAgICAgICBibGVuZEZ1bmNzW3NyY0FscGhhXSxcbiAgICAgICAgICAgICAgICBibGVuZEZ1bmNzW2RzdEFscGhhXVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgIHZhciBCTEVORF9GVU5DUyA9IGVudi5jb25zdGFudHMuYmxlbmRGdW5jc1xuXG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICcmJnR5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJvYmplY3RcIicsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCBibGVuZCBmdW5jLCBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZCAocHJlZml4LCBzdWZmaXgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZnVuYyA9IHNjb3BlLmRlZihcbiAgICAgICAgICAgICAgICAgICdcIicsIHByZWZpeCwgc3VmZml4LCAnXCIgaW4gJywgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAnPycsIHZhbHVlLCAnLicsIHByZWZpeCwgc3VmZml4LFxuICAgICAgICAgICAgICAgICAgJzonLCB2YWx1ZSwgJy4nLCBwcmVmaXgpXG5cbiAgICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICAgIGZ1bmMgKyAnIGluICcgKyBCTEVORF9GVU5DUyxcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgJyArIHByb3AgKyAnLicgKyBwcmVmaXggKyBzdWZmaXggKyAnLCBtdXN0IGJlIG9uZSBvZiAnICsgT2JqZWN0LmtleXMoYmxlbmRGdW5jcykpXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgc3JjUkdCID0gcmVhZCgnc3JjJywgJ1JHQicpXG4gICAgICAgICAgICAgIHZhciBkc3RSR0IgPSByZWFkKCdkc3QnLCAnUkdCJylcblxuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgSU5WQUxJRF9CTEVORF9DT01CSU5BVElPTlMgPSBlbnYuY29uc3RhbnRzLmludmFsaWRCbGVuZENvbWJpbmF0aW9uc1xuXG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIElOVkFMSURfQkxFTkRfQ09NQklOQVRJT05TICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICcuaW5kZXhPZignICsgc3JjUkdCICsgJytcIiwgXCIrJyArIGRzdFJHQiArICcpID09PSAtMSAnLFxuICAgICAgICAgICAgICAgICAgJ3VuYWxsb3dlZCBibGVuZGluZyBjb21iaW5hdGlvbiBmb3IgKHNyY1JHQiwgZHN0UkdCKSdcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgdmFyIFNSQ19SR0IgPSBzY29wZS5kZWYoQkxFTkRfRlVOQ1MsICdbJywgc3JjUkdCLCAnXScpXG4gICAgICAgICAgICAgIHZhciBTUkNfQUxQSEEgPSBzY29wZS5kZWYoQkxFTkRfRlVOQ1MsICdbJywgcmVhZCgnc3JjJywgJ0FscGhhJyksICddJylcbiAgICAgICAgICAgICAgdmFyIERTVF9SR0IgPSBzY29wZS5kZWYoQkxFTkRfRlVOQ1MsICdbJywgZHN0UkdCLCAnXScpXG4gICAgICAgICAgICAgIHZhciBEU1RfQUxQSEEgPSBzY29wZS5kZWYoQkxFTkRfRlVOQ1MsICdbJywgcmVhZCgnZHN0JywgJ0FscGhhJyksICddJylcblxuICAgICAgICAgICAgICByZXR1cm4gW1NSQ19SR0IsIERTVF9SR0IsIFNSQ19BTFBIQSwgRFNUX0FMUEhBXVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfQkxFTkRfRVFVQVRJT046XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIodmFsdWUsIGJsZW5kRXF1YXRpb25zLCAnaW52YWxpZCAnICsgcHJvcCwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgIGJsZW5kRXF1YXRpb25zW3ZhbHVlXSxcbiAgICAgICAgICAgICAgICAgIGJsZW5kRXF1YXRpb25zW3ZhbHVlXVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKFxuICAgICAgICAgICAgICAgICAgdmFsdWUucmdiLCBibGVuZEVxdWF0aW9ucywgcHJvcCArICcucmdiJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKFxuICAgICAgICAgICAgICAgICAgdmFsdWUuYWxwaGEsIGJsZW5kRXF1YXRpb25zLCBwcm9wICsgJy5hbHBoYScsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICBibGVuZEVxdWF0aW9uc1t2YWx1ZS5yZ2JdLFxuICAgICAgICAgICAgICAgICAgYmxlbmRFcXVhdGlvbnNbdmFsdWUuYWxwaGFdXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFJhaXNlKCdpbnZhbGlkIGJsZW5kLmVxdWF0aW9uJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFyIEJMRU5EX0VRVUFUSU9OUyA9IGVudi5jb25zdGFudHMuYmxlbmRFcXVhdGlvbnNcblxuICAgICAgICAgICAgICB2YXIgUkdCID0gc2NvcGUuZGVmKClcbiAgICAgICAgICAgICAgdmFyIEFMUEhBID0gc2NvcGUuZGVmKClcblxuICAgICAgICAgICAgICB2YXIgaWZ0ZSA9IGVudi5jb25kKCd0eXBlb2YgJywgdmFsdWUsICc9PT1cInN0cmluZ1wiJylcblxuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGVja1Byb3AgKGJsb2NrLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgZW52LmFzc2VydChibG9jayxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnIGluICcgKyBCTEVORF9FUVVBVElPTlMsXG4gICAgICAgICAgICAgICAgICAgICdpbnZhbGlkICcgKyBuYW1lICsgJywgbXVzdCBiZSBvbmUgb2YgJyArIE9iamVjdC5rZXlzKGJsZW5kRXF1YXRpb25zKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2hlY2tQcm9wKGlmdGUudGhlbiwgcHJvcCwgdmFsdWUpXG5cbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KGlmdGUuZWxzZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJyYmdHlwZW9mICcgKyB2YWx1ZSArICc9PT1cIm9iamVjdFwiJyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkICcgKyBwcm9wKVxuICAgICAgICAgICAgICAgIGNoZWNrUHJvcChpZnRlLmVsc2UsIHByb3AgKyAnLnJnYicsIHZhbHVlICsgJy5yZ2InKVxuICAgICAgICAgICAgICAgIGNoZWNrUHJvcChpZnRlLmVsc2UsIHByb3AgKyAnLmFscGhhJywgdmFsdWUgKyAnLmFscGhhJylcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBpZnRlLnRoZW4oXG4gICAgICAgICAgICAgICAgUkdCLCAnPScsIEFMUEhBLCAnPScsIEJMRU5EX0VRVUFUSU9OUywgJ1snLCB2YWx1ZSwgJ107JylcbiAgICAgICAgICAgICAgaWZ0ZS5lbHNlKFxuICAgICAgICAgICAgICAgIFJHQiwgJz0nLCBCTEVORF9FUVVBVElPTlMsICdbJywgdmFsdWUsICcucmdiXTsnLFxuICAgICAgICAgICAgICAgIEFMUEhBLCAnPScsIEJMRU5EX0VRVUFUSU9OUywgJ1snLCB2YWx1ZSwgJy5hbHBoYV07JylcblxuICAgICAgICAgICAgICBzY29wZShpZnRlKVxuXG4gICAgICAgICAgICAgIHJldHVybiBbUkdCLCBBTFBIQV1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0JMRU5EX0NPTE9SOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZS5sZW5ndGggPT09IDQsXG4gICAgICAgICAgICAgICAgJ2JsZW5kLmNvbG9yIG11c3QgYmUgYSA0ZCBhcnJheScsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gbG9vcCg0LCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiArdmFsdWVbaV1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIGVudi5zaGFyZWQuaXNBcnJheUxpa2UgKyAnKCcgKyB2YWx1ZSArICcpJiYnICtcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJy5sZW5ndGg9PT00JyxcbiAgICAgICAgICAgICAgICAgICdibGVuZC5jb2xvciBtdXN0IGJlIGEgNGQgYXJyYXknKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXR1cm4gbG9vcCg0LCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoJysnLCB2YWx1ZSwgJ1snLCBpLCAnXScpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIGNhc2UgU19TVEVOQ0lMX01BU0s6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZSh2YWx1ZSwgJ251bWJlcicsIHBhcmFtLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIHwgMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgJ3R5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJudW1iZXJcIicsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCBzdGVuY2lsLm1hc2snKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXR1cm4gc2NvcGUuZGVmKHZhbHVlLCAnfDAnKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfU1RFTkNJTF9GVU5DOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdvYmplY3QnLCBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHZhciBjbXAgPSB2YWx1ZS5jbXAgfHwgJ2tlZXAnXG4gICAgICAgICAgICAgIHZhciByZWYgPSB2YWx1ZS5yZWYgfHwgMFxuICAgICAgICAgICAgICB2YXIgbWFzayA9ICdtYXNrJyBpbiB2YWx1ZSA/IHZhbHVlLm1hc2sgOiAtMVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoY21wLCBjb21wYXJlRnVuY3MsIHByb3AgKyAnLmNtcCcsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKHJlZiwgJ251bWJlcicsIHByb3AgKyAnLnJlZicsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKG1hc2ssICdudW1iZXInLCBwcm9wICsgJy5tYXNrJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgY29tcGFyZUZ1bmNzW2NtcF0sXG4gICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgIG1hc2tcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICB2YXIgQ09NUEFSRV9GVU5DUyA9IGVudi5jb25zdGFudHMuY29tcGFyZUZ1bmNzXG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzc2VydCAoKSB7XG4gICAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywgJycpLFxuICAgICAgICAgICAgICAgICAgICAnaW52YWxpZCBzdGVuY2lsLmZ1bmMnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc3NlcnQodmFsdWUgKyAnJiZ0eXBlb2YgJywgdmFsdWUsICc9PT1cIm9iamVjdFwiJylcbiAgICAgICAgICAgICAgICBhc3NlcnQoJyEoXCJjbXBcIiBpbiAnLCB2YWx1ZSwgJyl8fCgnLFxuICAgICAgICAgICAgICAgICAgdmFsdWUsICcuY21wIGluICcsIENPTVBBUkVfRlVOQ1MsICcpJylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgdmFyIGNtcCA9IHNjb3BlLmRlZihcbiAgICAgICAgICAgICAgICAnXCJjbXBcIiBpbiAnLCB2YWx1ZSxcbiAgICAgICAgICAgICAgICAnPycsIENPTVBBUkVfRlVOQ1MsICdbJywgdmFsdWUsICcuY21wXScsXG4gICAgICAgICAgICAgICAgJzonLCBHTF9LRUVQKVxuICAgICAgICAgICAgICB2YXIgcmVmID0gc2NvcGUuZGVmKHZhbHVlLCAnLnJlZnwwJylcbiAgICAgICAgICAgICAgdmFyIG1hc2sgPSBzY29wZS5kZWYoXG4gICAgICAgICAgICAgICAgJ1wibWFza1wiIGluICcsIHZhbHVlLFxuICAgICAgICAgICAgICAgICc/JywgdmFsdWUsICcubWFza3wwOi0xJylcbiAgICAgICAgICAgICAgcmV0dXJuIFtjbXAsIHJlZiwgbWFza11cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX1NURU5DSUxfT1BGUk9OVDpcbiAgICAgICAgY2FzZSBTX1NURU5DSUxfT1BCQUNLOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdvYmplY3QnLCBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHZhciBmYWlsID0gdmFsdWUuZmFpbCB8fCAna2VlcCdcbiAgICAgICAgICAgICAgdmFyIHpmYWlsID0gdmFsdWUuemZhaWwgfHwgJ2tlZXAnXG4gICAgICAgICAgICAgIHZhciB6cGFzcyA9IHZhbHVlLnpwYXNzIHx8ICdrZWVwJ1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoZmFpbCwgc3RlbmNpbE9wcywgcHJvcCArICcuZmFpbCcsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRQYXJhbWV0ZXIoemZhaWwsIHN0ZW5jaWxPcHMsIHByb3AgKyAnLnpmYWlsJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcih6cGFzcywgc3RlbmNpbE9wcywgcHJvcCArICcuenBhc3MnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwcm9wID09PSBTX1NURU5DSUxfT1BCQUNLID8gR0xfQkFDSyA6IEdMX0ZST05ULFxuICAgICAgICAgICAgICAgIHN0ZW5jaWxPcHNbZmFpbF0sXG4gICAgICAgICAgICAgICAgc3RlbmNpbE9wc1t6ZmFpbF0sXG4gICAgICAgICAgICAgICAgc3RlbmNpbE9wc1t6cGFzc11cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICB2YXIgU1RFTkNJTF9PUFMgPSBlbnYuY29uc3RhbnRzLnN0ZW5jaWxPcHNcblxuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnJiZ0eXBlb2YgJyArIHZhbHVlICsgJz09PVwib2JqZWN0XCInLFxuICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgJyArIHByb3ApXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZCAobmFtZSkge1xuICAgICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgICAgJyEoXCInICsgbmFtZSArICdcIiBpbiAnICsgdmFsdWUgKyAnKXx8JyArXG4gICAgICAgICAgICAgICAgICAgICcoJyArIHZhbHVlICsgJy4nICsgbmFtZSArICcgaW4gJyArIFNURU5DSUxfT1BTICsgJyknLFxuICAgICAgICAgICAgICAgICAgICAnaW52YWxpZCAnICsgcHJvcCArICcuJyArIG5hbWUgKyAnLCBtdXN0IGJlIG9uZSBvZiAnICsgT2JqZWN0LmtleXMoc3RlbmNpbE9wcykpXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYoXG4gICAgICAgICAgICAgICAgICAnXCInLCBuYW1lLCAnXCIgaW4gJywgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAnPycsIFNURU5DSUxfT1BTLCAnWycsIHZhbHVlLCAnLicsIG5hbWUsICddOicsXG4gICAgICAgICAgICAgICAgICBHTF9LRUVQKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwcm9wID09PSBTX1NURU5DSUxfT1BCQUNLID8gR0xfQkFDSyA6IEdMX0ZST05ULFxuICAgICAgICAgICAgICAgIHJlYWQoJ2ZhaWwnKSxcbiAgICAgICAgICAgICAgICByZWFkKCd6ZmFpbCcpLFxuICAgICAgICAgICAgICAgIHJlYWQoJ3pwYXNzJylcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfUE9MWUdPTl9PRkZTRVRfT0ZGU0VUOlxuICAgICAgICAgIHJldHVybiBwYXJzZVBhcmFtKFxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdvYmplY3QnLCBwYXJhbSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHZhciBmYWN0b3IgPSB2YWx1ZS5mYWN0b3IgfCAwXG4gICAgICAgICAgICAgIHZhciB1bml0cyA9IHZhbHVlLnVuaXRzIHwgMFxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKGZhY3RvciwgJ251bWJlcicsIHBhcmFtICsgJy5mYWN0b3InLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kVHlwZSh1bml0cywgJ251bWJlcicsIHBhcmFtICsgJy51bml0cycsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gW2ZhY3RvciwgdW5pdHNdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVudiwgc2NvcGUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICcmJnR5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJvYmplY3RcIicsXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCAnICsgcHJvcClcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICB2YXIgRkFDVE9SID0gc2NvcGUuZGVmKHZhbHVlLCAnLmZhY3RvcnwwJylcbiAgICAgICAgICAgICAgdmFyIFVOSVRTID0gc2NvcGUuZGVmKHZhbHVlLCAnLnVuaXRzfDAnKVxuXG4gICAgICAgICAgICAgIHJldHVybiBbRkFDVE9SLCBVTklUU11cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0NVTExfRkFDRTpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICB2YXIgZmFjZSA9IDBcbiAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnZnJvbnQnKSB7XG4gICAgICAgICAgICAgICAgZmFjZSA9IEdMX0ZST05UXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdiYWNrJykge1xuICAgICAgICAgICAgICAgIGZhY2UgPSBHTF9CQUNLXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKCEhZmFjZSwgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICByZXR1cm4gZmFjZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnPT09XCJmcm9udFwifHwnICtcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJz09PVwiYmFja1wiJyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGN1bGwuZmFjZScpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJldHVybiBzY29wZS5kZWYodmFsdWUsICc9PT1cImZyb250XCI/JywgR0xfRlJPTlQsICc6JywgR0xfQkFDSylcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0xJTkVfV0lEVEg6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZSA+PSBsaW1pdHMubGluZVdpZHRoRGltc1swXSAmJlxuICAgICAgICAgICAgICAgIHZhbHVlIDw9IGxpbWl0cy5saW5lV2lkdGhEaW1zWzFdLFxuICAgICAgICAgICAgICAgICdpbnZhbGlkIGxpbmUgd2lkdGgsIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIgYmV0d2VlbiAnICtcbiAgICAgICAgICAgICAgICBsaW1pdHMubGluZVdpZHRoRGltc1swXSArICcgYW5kICcgKyBsaW1pdHMubGluZVdpZHRoRGltc1sxXSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgJ3R5cGVvZiAnICsgdmFsdWUgKyAnPT09XCJudW1iZXJcIiYmJyArXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICc+PScgKyBsaW1pdHMubGluZVdpZHRoRGltc1swXSArICcmJicgK1xuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnPD0nICsgbGltaXRzLmxpbmVXaWR0aERpbXNbMV0sXG4gICAgICAgICAgICAgICAgICAnaW52YWxpZCBsaW5lIHdpZHRoJylcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX0ZST05UX0ZBQ0U6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW0oXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kUGFyYW1ldGVyKHZhbHVlLCBvcmllbnRhdGlvblR5cGUsIHBhcmFtLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uVHlwZVt2YWx1ZV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJz09PVwiY3dcInx8JyArXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArICc9PT1cImNjd1wiJyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGZyb250RmFjZSwgbXVzdCBiZSBvbmUgb2YgY3csY2N3JylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlLmRlZih2YWx1ZSArICc9PT1cImN3XCI/JyArIEdMX0NXICsgJzonICsgR0xfQ0NXKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBjYXNlIFNfQ09MT1JfTUFTSzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gNCxcbiAgICAgICAgICAgICAgICAnY29sb3IubWFzayBtdXN0IGJlIGxlbmd0aCA0IGFycmF5JywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoZnVuY3Rpb24gKHYpIHsgcmV0dXJuICEhdiB9KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlbnYsIHNjb3BlLCB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLFxuICAgICAgICAgICAgICAgICAgZW52LnNoYXJlZC5pc0FycmF5TGlrZSArICcoJyArIHZhbHVlICsgJykmJicgK1xuICAgICAgICAgICAgICAgICAgdmFsdWUgKyAnLmxlbmd0aD09PTQnLFxuICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgY29sb3IubWFzaycpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJldHVybiBsb29wKDQsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICchIScgKyB2YWx1ZSArICdbJyArIGkgKyAnXSdcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgY2FzZSBTX1NBTVBMRV9DT1ZFUkFHRTpcbiAgICAgICAgICByZXR1cm4gcGFyc2VQYXJhbShcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSwgcGFyYW0sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICB2YXIgc2FtcGxlVmFsdWUgPSAndmFsdWUnIGluIHZhbHVlID8gdmFsdWUudmFsdWUgOiAxXG4gICAgICAgICAgICAgIHZhciBzYW1wbGVJbnZlcnQgPSAhIXZhbHVlLmludmVydFxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgdHlwZW9mIHNhbXBsZVZhbHVlID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgIHNhbXBsZVZhbHVlID49IDAgJiYgc2FtcGxlVmFsdWUgPD0gMSxcbiAgICAgICAgICAgICAgICAnc2FtcGxlLmNvdmVyYWdlLnZhbHVlIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIHJldHVybiBbc2FtcGxlVmFsdWUsIHNhbXBsZUludmVydF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZW52LCBzY29wZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZW52LmFzc2VydChzY29wZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlICsgJyYmdHlwZW9mICcgKyB2YWx1ZSArICc9PT1cIm9iamVjdFwiJyxcbiAgICAgICAgICAgICAgICAgICdpbnZhbGlkIHNhbXBsZS5jb3ZlcmFnZScpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHZhciBWQUxVRSA9IHNjb3BlLmRlZihcbiAgICAgICAgICAgICAgICAnXCJ2YWx1ZVwiIGluICcsIHZhbHVlLCAnPysnLCB2YWx1ZSwgJy52YWx1ZToxJylcbiAgICAgICAgICAgICAgdmFyIElOVkVSVCA9IHNjb3BlLmRlZignISEnLCB2YWx1ZSwgJy5pbnZlcnQnKVxuICAgICAgICAgICAgICByZXR1cm4gW1ZBTFVFLCBJTlZFUlRdXG4gICAgICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gU1RBVEVcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlVW5pZm9ybXMgKHVuaWZvcm1zLCBlbnYpIHtcbiAgICB2YXIgc3RhdGljVW5pZm9ybXMgPSB1bmlmb3Jtcy5zdGF0aWNcbiAgICB2YXIgZHluYW1pY1VuaWZvcm1zID0gdW5pZm9ybXMuZHluYW1pY1xuXG4gICAgdmFyIFVOSUZPUk1TID0ge31cblxuICAgIE9iamVjdC5rZXlzKHN0YXRpY1VuaWZvcm1zKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBzdGF0aWNVbmlmb3Jtc1tuYW1lXVxuICAgICAgdmFyIHJlc3VsdFxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciByZWdsVHlwZSA9IHZhbHVlLl9yZWdsVHlwZVxuICAgICAgICBpZiAocmVnbFR5cGUgPT09ICd0ZXh0dXJlMmQnIHx8XG4gICAgICAgICAgICByZWdsVHlwZSA9PT0gJ3RleHR1cmVDdWJlJykge1xuICAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZVN0YXRpY0RlY2woZnVuY3Rpb24gKGVudikge1xuICAgICAgICAgICAgcmV0dXJuIGVudi5saW5rKHZhbHVlKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAocmVnbFR5cGUgPT09ICdmcmFtZWJ1ZmZlcicgfHxcbiAgICAgICAgICAgICAgICAgICByZWdsVHlwZSA9PT0gJ2ZyYW1lYnVmZmVyQ3ViZScpIHtcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQodmFsdWUuY29sb3IubGVuZ3RoID4gMCxcbiAgICAgICAgICAgICdtaXNzaW5nIGNvbG9yIGF0dGFjaG1lbnQgZm9yIGZyYW1lYnVmZmVyIHNlbnQgdG8gdW5pZm9ybSBcIicgKyBuYW1lICsgJ1wiJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgcmVzdWx0ID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52KSB7XG4gICAgICAgICAgICByZXR1cm4gZW52LmxpbmsodmFsdWUuY29sb3JbMF0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmRSYWlzZSgnaW52YWxpZCBkYXRhIGZvciB1bmlmb3JtIFwiJyArIG5hbWUgKyAnXCInLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0ID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52KSB7XG4gICAgICAgICAgdmFyIElURU0gPSBlbnYuZ2xvYmFsLmRlZignWycsXG4gICAgICAgICAgICBsb29wKHZhbHVlLmxlbmd0aCwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZVtpXSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWVbaV0gPT09ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCB1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlW2ldXG4gICAgICAgICAgICB9KSwgJ10nKVxuICAgICAgICAgIHJldHVybiBJVEVNXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVjayQxLmNvbW1hbmRSYWlzZSgnaW52YWxpZCBvciBtaXNzaW5nIGRhdGEgZm9yIHVuaWZvcm0gXCInICsgbmFtZSArICdcIicsIGVudi5jb21tYW5kU3RyKVxuICAgICAgfVxuICAgICAgcmVzdWx0LnZhbHVlID0gdmFsdWVcbiAgICAgIFVOSUZPUk1TW25hbWVdID0gcmVzdWx0XG4gICAgfSlcblxuICAgIE9iamVjdC5rZXlzKGR5bmFtaWNVbmlmb3JtcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgZHluID0gZHluYW1pY1VuaWZvcm1zW2tleV1cbiAgICAgIFVOSUZPUk1TW2tleV0gPSBjcmVhdGVEeW5hbWljRGVjbChkeW4sIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgIHJldHVybiBlbnYuaW52b2tlKHNjb3BlLCBkeW4pXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gVU5JRk9STVNcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlcyAoYXR0cmlidXRlcywgZW52KSB7XG4gICAgdmFyIHN0YXRpY0F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLnN0YXRpY1xuICAgIHZhciBkeW5hbWljQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuZHluYW1pY1xuXG4gICAgdmFyIGF0dHJpYnV0ZURlZnMgPSB7fVxuXG4gICAgT2JqZWN0LmtleXMoc3RhdGljQXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICB2YXIgdmFsdWUgPSBzdGF0aWNBdHRyaWJ1dGVzW2F0dHJpYnV0ZV1cbiAgICAgIHZhciBpZCA9IHN0cmluZ1N0b3JlLmlkKGF0dHJpYnV0ZSlcblxuICAgICAgdmFyIHJlY29yZCA9IG5ldyBBdHRyaWJ1dGVSZWNvcmQoKVxuICAgICAgaWYgKGlzQnVmZmVyQXJncyh2YWx1ZSkpIHtcbiAgICAgICAgcmVjb3JkLnN0YXRlID0gQVRUUklCX1NUQVRFX1BPSU5URVJcbiAgICAgICAgcmVjb3JkLmJ1ZmZlciA9IGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcihcbiAgICAgICAgICBidWZmZXJTdGF0ZS5jcmVhdGUodmFsdWUsIEdMX0FSUkFZX0JVRkZFUiQyLCBmYWxzZSwgdHJ1ZSkpXG4gICAgICAgIHJlY29yZC50eXBlID0gMFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlclN0YXRlLmdldEJ1ZmZlcih2YWx1ZSlcbiAgICAgICAgaWYgKGJ1ZmZlcikge1xuICAgICAgICAgIHJlY29yZC5zdGF0ZSA9IEFUVFJJQl9TVEFURV9QT0lOVEVSXG4gICAgICAgICAgcmVjb3JkLmJ1ZmZlciA9IGJ1ZmZlclxuICAgICAgICAgIHJlY29yZC50eXBlID0gMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoZWNrJDEuY29tbWFuZCh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLFxuICAgICAgICAgICAgJ2ludmFsaWQgZGF0YSBmb3IgYXR0cmlidXRlICcgKyBhdHRyaWJ1dGUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgIGlmICgnY29uc3RhbnQnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgY29uc3RhbnQgPSB2YWx1ZS5jb25zdGFudFxuICAgICAgICAgICAgcmVjb3JkLmJ1ZmZlciA9ICdudWxsJ1xuICAgICAgICAgICAgcmVjb3JkLnN0YXRlID0gQVRUUklCX1NUQVRFX0NPTlNUQU5UXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnN0YW50ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICByZWNvcmQueCA9IGNvbnN0YW50XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgaXNBcnJheUxpa2UoY29uc3RhbnQpICYmXG4gICAgICAgICAgICAgICAgY29uc3RhbnQubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIGNvbnN0YW50Lmxlbmd0aCA8PSA0LFxuICAgICAgICAgICAgICAgICdpbnZhbGlkIGNvbnN0YW50IGZvciBhdHRyaWJ1dGUgJyArIGF0dHJpYnV0ZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgIENVVEVfQ09NUE9ORU5UUy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPCBjb25zdGFudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIHJlY29yZFtjXSA9IGNvbnN0YW50W2ldXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNCdWZmZXJBcmdzKHZhbHVlLmJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyU3RhdGUuZ2V0QnVmZmVyKFxuICAgICAgICAgICAgICAgIGJ1ZmZlclN0YXRlLmNyZWF0ZSh2YWx1ZS5idWZmZXIsIEdMX0FSUkFZX0JVRkZFUiQyLCBmYWxzZSwgdHJ1ZSkpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXJTdGF0ZS5nZXRCdWZmZXIodmFsdWUuYnVmZmVyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKCEhYnVmZmVyLCAnbWlzc2luZyBidWZmZXIgZm9yIGF0dHJpYnV0ZSBcIicgKyBhdHRyaWJ1dGUgKyAnXCInLCBlbnYuY29tbWFuZFN0cilcblxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHZhbHVlLm9mZnNldCB8IDBcbiAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChvZmZzZXQgPj0gMCxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgb2Zmc2V0IGZvciBhdHRyaWJ1dGUgXCInICsgYXR0cmlidXRlICsgJ1wiJywgZW52LmNvbW1hbmRTdHIpXG5cbiAgICAgICAgICAgIHZhciBzdHJpZGUgPSB2YWx1ZS5zdHJpZGUgfCAwXG4gICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoc3RyaWRlID49IDAgJiYgc3RyaWRlIDwgMjU2LFxuICAgICAgICAgICAgICAnaW52YWxpZCBzdHJpZGUgZm9yIGF0dHJpYnV0ZSBcIicgKyBhdHRyaWJ1dGUgKyAnXCIsIG11c3QgYmUgaW50ZWdlciBiZXR3ZWVlbiBbMCwgMjU1XScsIGVudi5jb21tYW5kU3RyKVxuXG4gICAgICAgICAgICB2YXIgc2l6ZSA9IHZhbHVlLnNpemUgfCAwXG4gICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoISgnc2l6ZScgaW4gdmFsdWUpIHx8IChzaXplID4gMCAmJiBzaXplIDw9IDQpLFxuICAgICAgICAgICAgICAnaW52YWxpZCBzaXplIGZvciBhdHRyaWJ1dGUgXCInICsgYXR0cmlidXRlICsgJ1wiLCBtdXN0IGJlIDEsMiwzLDQnLCBlbnYuY29tbWFuZFN0cilcblxuICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWQgPSAhIXZhbHVlLm5vcm1hbGl6ZWRcblxuICAgICAgICAgICAgdmFyIHR5cGUgPSAwXG4gICAgICAgICAgICBpZiAoJ3R5cGUnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFBhcmFtZXRlcihcbiAgICAgICAgICAgICAgICB2YWx1ZS50eXBlLCBnbFR5cGVzLFxuICAgICAgICAgICAgICAgICdpbnZhbGlkIHR5cGUgZm9yIGF0dHJpYnV0ZSAnICsgYXR0cmlidXRlLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgdHlwZSA9IGdsVHlwZXNbdmFsdWUudHlwZV1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGRpdmlzb3IgPSB2YWx1ZS5kaXZpc29yIHwgMFxuICAgICAgICAgICAgaWYgKCdkaXZpc29yJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoZGl2aXNvciA9PT0gMCB8fCBleHRJbnN0YW5jaW5nLFxuICAgICAgICAgICAgICAgICdjYW5ub3Qgc3BlY2lmeSBkaXZpc29yIGZvciBhdHRyaWJ1dGUgXCInICsgYXR0cmlidXRlICsgJ1wiLCBpbnN0YW5jaW5nIG5vdCBzdXBwb3J0ZWQnLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKGRpdmlzb3IgPj0gMCxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBkaXZpc29yIGZvciBhdHRyaWJ1dGUgXCInICsgYXR0cmlidXRlICsgJ1wiJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgY29tbWFuZCA9IGVudi5jb21tYW5kU3RyXG5cbiAgICAgICAgICAgICAgdmFyIFZBTElEX0tFWVMgPSBbXG4gICAgICAgICAgICAgICAgJ2J1ZmZlcicsXG4gICAgICAgICAgICAgICAgJ29mZnNldCcsXG4gICAgICAgICAgICAgICAgJ2Rpdmlzb3InLFxuICAgICAgICAgICAgICAgICdub3JtYWxpemVkJyxcbiAgICAgICAgICAgICAgICAndHlwZScsXG4gICAgICAgICAgICAgICAgJ3NpemUnLFxuICAgICAgICAgICAgICAgICdzdHJpZGUnXG4gICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIFZBTElEX0tFWVMuaW5kZXhPZihwcm9wKSA+PSAwLFxuICAgICAgICAgICAgICAgICAgJ3Vua25vd24gcGFyYW1ldGVyIFwiJyArIHByb3AgKyAnXCIgZm9yIGF0dHJpYnV0ZSBwb2ludGVyIFwiJyArIGF0dHJpYnV0ZSArICdcIiAodmFsaWQgcGFyYW1ldGVycyBhcmUgJyArIFZBTElEX0tFWVMgKyAnKScsXG4gICAgICAgICAgICAgICAgICBjb21tYW5kKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmVjb3JkLmJ1ZmZlciA9IGJ1ZmZlclxuICAgICAgICAgICAgcmVjb3JkLnN0YXRlID0gQVRUUklCX1NUQVRFX1BPSU5URVJcbiAgICAgICAgICAgIHJlY29yZC5zaXplID0gc2l6ZVxuICAgICAgICAgICAgcmVjb3JkLm5vcm1hbGl6ZWQgPSBub3JtYWxpemVkXG4gICAgICAgICAgICByZWNvcmQudHlwZSA9IHR5cGUgfHwgYnVmZmVyLmR0eXBlXG4gICAgICAgICAgICByZWNvcmQub2Zmc2V0ID0gb2Zmc2V0XG4gICAgICAgICAgICByZWNvcmQuc3RyaWRlID0gc3RyaWRlXG4gICAgICAgICAgICByZWNvcmQuZGl2aXNvciA9IGRpdmlzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXR0cmlidXRlRGVmc1thdHRyaWJ1dGVdID0gY3JlYXRlU3RhdGljRGVjbChmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICB2YXIgY2FjaGUgPSBlbnYuYXR0cmliQ2FjaGVcbiAgICAgICAgaWYgKGlkIGluIGNhY2hlKSB7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlW2lkXVxuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgICAgaXNTdHJlYW06IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmtleXMocmVjb3JkKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHJlY29yZFtrZXldXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZWNvcmQuYnVmZmVyKSB7XG4gICAgICAgICAgcmVzdWx0LmJ1ZmZlciA9IGVudi5saW5rKHJlY29yZC5idWZmZXIpXG4gICAgICAgICAgcmVzdWx0LnR5cGUgPSByZXN1bHQudHlwZSB8fCAocmVzdWx0LmJ1ZmZlciArICcuZHR5cGUnKVxuICAgICAgICB9XG4gICAgICAgIGNhY2hlW2lkXSA9IHJlc3VsdFxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBPYmplY3Qua2V5cyhkeW5hbWljQXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICB2YXIgZHluID0gZHluYW1pY0F0dHJpYnV0ZXNbYXR0cmlidXRlXVxuXG4gICAgICBmdW5jdGlvbiBhcHBlbmRBdHRyaWJ1dGVDb2RlIChlbnYsIGJsb2NrKSB7XG4gICAgICAgIHZhciBWQUxVRSA9IGVudi5pbnZva2UoYmxvY2ssIGR5bilcblxuICAgICAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuICAgICAgICB2YXIgY29uc3RhbnRzID0gZW52LmNvbnN0YW50c1xuXG4gICAgICAgIHZhciBJU19CVUZGRVJfQVJHUyA9IHNoYXJlZC5pc0J1ZmZlckFyZ3NcbiAgICAgICAgdmFyIEJVRkZFUl9TVEFURSA9IHNoYXJlZC5idWZmZXJcblxuICAgICAgICAvLyBQZXJmb3JtIHZhbGlkYXRpb24gb24gYXR0cmlidXRlXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVudi5hc3NlcnQoYmxvY2ssXG4gICAgICAgICAgICBWQUxVRSArICcmJih0eXBlb2YgJyArIFZBTFVFICsgJz09PVwib2JqZWN0XCJ8fHR5cGVvZiAnICtcbiAgICAgICAgICAgIFZBTFVFICsgJz09PVwiZnVuY3Rpb25cIikmJignICtcbiAgICAgICAgICAgIElTX0JVRkZFUl9BUkdTICsgJygnICsgVkFMVUUgKyAnKXx8JyArXG4gICAgICAgICAgICBCVUZGRVJfU1RBVEUgKyAnLmdldEJ1ZmZlcignICsgVkFMVUUgKyAnKXx8JyArXG4gICAgICAgICAgICBCVUZGRVJfU1RBVEUgKyAnLmdldEJ1ZmZlcignICsgVkFMVUUgKyAnLmJ1ZmZlcil8fCcgK1xuICAgICAgICAgICAgSVNfQlVGRkVSX0FSR1MgKyAnKCcgKyBWQUxVRSArICcuYnVmZmVyKXx8JyArXG4gICAgICAgICAgICAnKFwiY29uc3RhbnRcIiBpbiAnICsgVkFMVUUgK1xuICAgICAgICAgICAgJyYmKHR5cGVvZiAnICsgVkFMVUUgKyAnLmNvbnN0YW50PT09XCJudW1iZXJcInx8JyArXG4gICAgICAgICAgICBzaGFyZWQuaXNBcnJheUxpa2UgKyAnKCcgKyBWQUxVRSArICcuY29uc3RhbnQpKSkpJyxcbiAgICAgICAgICAgICdpbnZhbGlkIGR5bmFtaWMgYXR0cmlidXRlIFwiJyArIGF0dHJpYnV0ZSArICdcIicpXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gYWxsb2NhdGUgbmFtZXMgZm9yIHJlc3VsdFxuICAgICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICAgIGlzU3RyZWFtOiBibG9jay5kZWYoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlZmF1bHRSZWNvcmQgPSBuZXcgQXR0cmlidXRlUmVjb3JkKClcbiAgICAgICAgZGVmYXVsdFJlY29yZC5zdGF0ZSA9IEFUVFJJQl9TVEFURV9QT0lOVEVSXG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRSZWNvcmQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gYmxvY2suZGVmKCcnICsgZGVmYXVsdFJlY29yZFtrZXldKVxuICAgICAgICB9KVxuXG4gICAgICAgIHZhciBCVUZGRVIgPSByZXN1bHQuYnVmZmVyXG4gICAgICAgIHZhciBUWVBFID0gcmVzdWx0LnR5cGVcbiAgICAgICAgYmxvY2soXG4gICAgICAgICAgJ2lmKCcsIElTX0JVRkZFUl9BUkdTLCAnKCcsIFZBTFVFLCAnKSl7JyxcbiAgICAgICAgICByZXN1bHQuaXNTdHJlYW0sICc9dHJ1ZTsnLFxuICAgICAgICAgIEJVRkZFUiwgJz0nLCBCVUZGRVJfU1RBVEUsICcuY3JlYXRlU3RyZWFtKCcsIEdMX0FSUkFZX0JVRkZFUiQyLCAnLCcsIFZBTFVFLCAnKTsnLFxuICAgICAgICAgIFRZUEUsICc9JywgQlVGRkVSLCAnLmR0eXBlOycsXG4gICAgICAgICAgJ31lbHNleycsXG4gICAgICAgICAgQlVGRkVSLCAnPScsIEJVRkZFUl9TVEFURSwgJy5nZXRCdWZmZXIoJywgVkFMVUUsICcpOycsXG4gICAgICAgICAgJ2lmKCcsIEJVRkZFUiwgJyl7JyxcbiAgICAgICAgICBUWVBFLCAnPScsIEJVRkZFUiwgJy5kdHlwZTsnLFxuICAgICAgICAgICd9ZWxzZSBpZihcImNvbnN0YW50XCIgaW4gJywgVkFMVUUsICcpeycsXG4gICAgICAgICAgcmVzdWx0LnN0YXRlLCAnPScsIEFUVFJJQl9TVEFURV9DT05TVEFOVCwgJzsnLFxuICAgICAgICAgICdpZih0eXBlb2YgJyArIFZBTFVFICsgJy5jb25zdGFudCA9PT0gXCJudW1iZXJcIil7JyxcbiAgICAgICAgICByZXN1bHRbQ1VURV9DT01QT05FTlRTWzBdXSwgJz0nLCBWQUxVRSwgJy5jb25zdGFudDsnLFxuICAgICAgICAgIENVVEVfQ09NUE9ORU5UUy5zbGljZSgxKS5tYXAoZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRbbl1cbiAgICAgICAgICB9KS5qb2luKCc9JyksICc9MDsnLFxuICAgICAgICAgICd9ZWxzZXsnLFxuICAgICAgICAgIENVVEVfQ09NUE9ORU5UUy5tYXAoZnVuY3Rpb24gKG5hbWUsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSArICc9JyArIFZBTFVFICsgJy5jb25zdGFudC5sZW5ndGg+JyArIGkgK1xuICAgICAgICAgICAgICAnPycgKyBWQUxVRSArICcuY29uc3RhbnRbJyArIGkgKyAnXTowOydcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KS5qb2luKCcnKSxcbiAgICAgICAgICAnfX1lbHNleycsXG4gICAgICAgICAgJ2lmKCcsIElTX0JVRkZFUl9BUkdTLCAnKCcsIFZBTFVFLCAnLmJ1ZmZlcikpeycsXG4gICAgICAgICAgQlVGRkVSLCAnPScsIEJVRkZFUl9TVEFURSwgJy5jcmVhdGVTdHJlYW0oJywgR0xfQVJSQVlfQlVGRkVSJDIsICcsJywgVkFMVUUsICcuYnVmZmVyKTsnLFxuICAgICAgICAgICd9ZWxzZXsnLFxuICAgICAgICAgIEJVRkZFUiwgJz0nLCBCVUZGRVJfU1RBVEUsICcuZ2V0QnVmZmVyKCcsIFZBTFVFLCAnLmJ1ZmZlcik7JyxcbiAgICAgICAgICAnfScsXG4gICAgICAgICAgVFlQRSwgJz1cInR5cGVcIiBpbiAnLCBWQUxVRSwgJz8nLFxuICAgICAgICAgIGNvbnN0YW50cy5nbFR5cGVzLCAnWycsIFZBTFVFLCAnLnR5cGVdOicsIEJVRkZFUiwgJy5kdHlwZTsnLFxuICAgICAgICAgIHJlc3VsdC5ub3JtYWxpemVkLCAnPSEhJywgVkFMVUUsICcubm9ybWFsaXplZDsnKVxuICAgICAgICBmdW5jdGlvbiBlbWl0UmVhZFJlY29yZCAobmFtZSkge1xuICAgICAgICAgIGJsb2NrKHJlc3VsdFtuYW1lXSwgJz0nLCBWQUxVRSwgJy4nLCBuYW1lLCAnfDA7JylcbiAgICAgICAgfVxuICAgICAgICBlbWl0UmVhZFJlY29yZCgnc2l6ZScpXG4gICAgICAgIGVtaXRSZWFkUmVjb3JkKCdvZmZzZXQnKVxuICAgICAgICBlbWl0UmVhZFJlY29yZCgnc3RyaWRlJylcbiAgICAgICAgZW1pdFJlYWRSZWNvcmQoJ2Rpdmlzb3InKVxuXG4gICAgICAgIGJsb2NrKCd9fScpXG5cbiAgICAgICAgYmxvY2suZXhpdChcbiAgICAgICAgICAnaWYoJywgcmVzdWx0LmlzU3RyZWFtLCAnKXsnLFxuICAgICAgICAgIEJVRkZFUl9TVEFURSwgJy5kZXN0cm95U3RyZWFtKCcsIEJVRkZFUiwgJyk7JyxcbiAgICAgICAgICAnfScpXG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfVxuXG4gICAgICBhdHRyaWJ1dGVEZWZzW2F0dHJpYnV0ZV0gPSBjcmVhdGVEeW5hbWljRGVjbChkeW4sIGFwcGVuZEF0dHJpYnV0ZUNvZGUpXG4gICAgfSlcblxuICAgIHJldHVybiBhdHRyaWJ1dGVEZWZzXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVZBTyAob3B0aW9ucywgZW52KSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuICAgIGlmIChTX1ZBTyBpbiBzdGF0aWNPcHRpb25zKSB7XG4gICAgICB2YXIgdmFvID0gc3RhdGljT3B0aW9uc1tTX1ZBT11cbiAgICAgIGlmICh2YW8gIT09IG51bGwgJiYgYXR0cmlidXRlU3RhdGUuZ2V0VkFPKHZhbykgPT09IG51bGwpIHtcbiAgICAgICAgdmFvID0gYXR0cmlidXRlU3RhdGUuY3JlYXRlVkFPKHZhbylcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uIChlbnYpIHtcbiAgICAgICAgcmV0dXJuIGVudi5saW5rKGF0dHJpYnV0ZVN0YXRlLmdldFZBTyh2YW8pKVxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKFNfVkFPIGluIGR5bmFtaWNPcHRpb25zKSB7XG4gICAgICB2YXIgZHluID0gZHluYW1pY09wdGlvbnNbU19WQU9dXG4gICAgICByZXR1cm4gY3JlYXRlRHluYW1pY0RlY2woZHluLCBmdW5jdGlvbiAoZW52LCBzY29wZSkge1xuICAgICAgICB2YXIgdmFvUmVmID0gZW52Lmludm9rZShzY29wZSwgZHluKVxuICAgICAgICByZXR1cm4gc2NvcGUuZGVmKGVudi5zaGFyZWQudmFvICsgJy5nZXRWQU8oJyArIHZhb1JlZiArICcpJylcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUNvbnRleHQgKGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGljQ29udGV4dCA9IGNvbnRleHQuc3RhdGljXG4gICAgdmFyIGR5bmFtaWNDb250ZXh0ID0gY29udGV4dC5keW5hbWljXG4gICAgdmFyIHJlc3VsdCA9IHt9XG5cbiAgICBPYmplY3Qua2V5cyhzdGF0aWNDb250ZXh0KS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBzdGF0aWNDb250ZXh0W25hbWVdXG4gICAgICByZXN1bHRbbmFtZV0gPSBjcmVhdGVTdGF0aWNEZWNsKGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgcmV0dXJuICcnICsgdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZW52LmxpbmsodmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIE9iamVjdC5rZXlzKGR5bmFtaWNDb250ZXh0KS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZHluID0gZHluYW1pY0NvbnRleHRbbmFtZV1cbiAgICAgIHJlc3VsdFtuYW1lXSA9IGNyZWF0ZUR5bmFtaWNEZWNsKGR5biwgZnVuY3Rpb24gKGVudiwgc2NvcGUpIHtcbiAgICAgICAgcmV0dXJuIGVudi5pbnZva2Uoc2NvcGUsIGR5bilcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzIChvcHRpb25zLCBhdHRyaWJ1dGVzLCB1bmlmb3JtcywgY29udGV4dCwgZW52KSB7XG4gICAgdmFyIHN0YXRpY09wdGlvbnMgPSBvcHRpb25zLnN0YXRpY1xuICAgIHZhciBkeW5hbWljT3B0aW9ucyA9IG9wdGlvbnMuZHluYW1pY1xuXG4gICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgS0VZX05BTUVTID0gW1xuICAgICAgICBTX0ZSQU1FQlVGRkVSLFxuICAgICAgICBTX1ZFUlQsXG4gICAgICAgIFNfRlJBRyxcbiAgICAgICAgU19FTEVNRU5UUyxcbiAgICAgICAgU19QUklNSVRJVkUsXG4gICAgICAgIFNfT0ZGU0VULFxuICAgICAgICBTX0NPVU5ULFxuICAgICAgICBTX0lOU1RBTkNFUyxcbiAgICAgICAgU19QUk9GSUxFLFxuICAgICAgICBTX1ZBT1xuICAgICAgXS5jb25jYXQoR0xfU1RBVEVfTkFNRVMpXG5cbiAgICAgIGZ1bmN0aW9uIGNoZWNrS2V5cyAoZGljdCkge1xuICAgICAgICBPYmplY3Qua2V5cyhkaWN0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICBLRVlfTkFNRVMuaW5kZXhPZihrZXkpID49IDAsXG4gICAgICAgICAgICAndW5rbm93biBwYXJhbWV0ZXIgXCInICsga2V5ICsgJ1wiJyxcbiAgICAgICAgICAgIGVudi5jb21tYW5kU3RyKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjaGVja0tleXMoc3RhdGljT3B0aW9ucylcbiAgICAgIGNoZWNrS2V5cyhkeW5hbWljT3B0aW9ucylcbiAgICB9KVxuXG4gICAgdmFyIGF0dHJpYkxvY2F0aW9ucyA9IHBhcnNlQXR0cmliTG9jYXRpb25zKG9wdGlvbnMsIGF0dHJpYnV0ZXMpXG5cbiAgICB2YXIgZnJhbWVidWZmZXIgPSBwYXJzZUZyYW1lYnVmZmVyKG9wdGlvbnMsIGVudilcbiAgICB2YXIgdmlld3BvcnRBbmRTY2lzc29yID0gcGFyc2VWaWV3cG9ydFNjaXNzb3Iob3B0aW9ucywgZnJhbWVidWZmZXIsIGVudilcbiAgICB2YXIgZHJhdyA9IHBhcnNlRHJhdyhvcHRpb25zLCBlbnYpXG4gICAgdmFyIHN0YXRlID0gcGFyc2VHTFN0YXRlKG9wdGlvbnMsIGVudilcbiAgICB2YXIgc2hhZGVyID0gcGFyc2VQcm9ncmFtKG9wdGlvbnMsIGVudiwgYXR0cmliTG9jYXRpb25zKVxuXG4gICAgZnVuY3Rpb24gY29weUJveCAobmFtZSkge1xuICAgICAgdmFyIGRlZm4gPSB2aWV3cG9ydEFuZFNjaXNzb3JbbmFtZV1cbiAgICAgIGlmIChkZWZuKSB7XG4gICAgICAgIHN0YXRlW25hbWVdID0gZGVmblxuICAgICAgfVxuICAgIH1cbiAgICBjb3B5Qm94KFNfVklFV1BPUlQpXG4gICAgY29weUJveChwcm9wTmFtZShTX1NDSVNTT1JfQk9YKSlcblxuICAgIHZhciBkaXJ0eSA9IE9iamVjdC5rZXlzKHN0YXRlKS5sZW5ndGggPiAwXG5cbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgZnJhbWVidWZmZXI6IGZyYW1lYnVmZmVyLFxuICAgICAgZHJhdzogZHJhdyxcbiAgICAgIHNoYWRlcjogc2hhZGVyLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgZGlydHk6IGRpcnR5LFxuICAgICAgc2NvcGVWQU86IG51bGwsXG4gICAgICBkcmF3VkFPOiBudWxsLFxuICAgICAgdXNlVkFPOiBmYWxzZSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9XG4gICAgfVxuXG4gICAgcmVzdWx0LnByb2ZpbGUgPSBwYXJzZVByb2ZpbGUob3B0aW9ucywgZW52KVxuICAgIHJlc3VsdC51bmlmb3JtcyA9IHBhcnNlVW5pZm9ybXModW5pZm9ybXMsIGVudilcbiAgICByZXN1bHQuZHJhd1ZBTyA9IHJlc3VsdC5zY29wZVZBTyA9IHBhcnNlVkFPKG9wdGlvbnMsIGVudilcbiAgICAvLyBzcGVjaWFsIGNhc2U6IGNoZWNrIGlmIHdlIGNhbiBzdGF0aWNhbGx5IGFsbG9jYXRlIGEgdmVydGV4IGFycmF5IG9iamVjdCBmb3IgdGhpcyBwcm9ncmFtXG4gICAgaWYgKCFyZXN1bHQuZHJhd1ZBTyAmJiBzaGFkZXIucHJvZ3JhbSAmJiAhYXR0cmliTG9jYXRpb25zICYmIGV4dGVuc2lvbnMuYW5nbGVfaW5zdGFuY2VkX2FycmF5cykge1xuICAgICAgdmFyIHVzZVZBTyA9IHRydWVcbiAgICAgIHZhciBzdGF0aWNCaW5kaW5ncyA9IHNoYWRlci5wcm9ncmFtLmF0dHJpYnV0ZXMubWFwKGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICAgIHZhciBiaW5kaW5nID0gYXR0cmlidXRlcy5zdGF0aWNbYXR0cl1cbiAgICAgICAgdXNlVkFPID0gdXNlVkFPICYmICEhYmluZGluZ1xuICAgICAgICByZXR1cm4gYmluZGluZ1xuICAgICAgfSlcbiAgICAgIGlmICh1c2VWQU8gJiYgc3RhdGljQmluZGluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgdmFvID0gYXR0cmlidXRlU3RhdGUuZ2V0VkFPKGF0dHJpYnV0ZVN0YXRlLmNyZWF0ZVZBTyhzdGF0aWNCaW5kaW5ncykpXG4gICAgICAgIHJlc3VsdC5kcmF3VkFPID0gbmV3IERlY2xhcmF0aW9uKG51bGwsIG51bGwsIG51bGwsIGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7XG4gICAgICAgICAgcmV0dXJuIGVudi5saW5rKHZhbylcbiAgICAgICAgfSlcbiAgICAgICAgcmVzdWx0LnVzZVZBTyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGF0dHJpYkxvY2F0aW9ucykge1xuICAgICAgcmVzdWx0LnVzZVZBTyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LmF0dHJpYnV0ZXMgPSBwYXJzZUF0dHJpYnV0ZXMoYXR0cmlidXRlcywgZW52KVxuICAgIH1cbiAgICByZXN1bHQuY29udGV4dCA9IHBhcnNlQ29udGV4dChjb250ZXh0LCBlbnYpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDT01NT04gVVBEQVRFIEZVTkNUSU9OU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGZ1bmN0aW9uIGVtaXRDb250ZXh0IChlbnYsIHNjb3BlLCBjb250ZXh0KSB7XG4gICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcbiAgICB2YXIgQ09OVEVYVCA9IHNoYXJlZC5jb250ZXh0XG5cbiAgICB2YXIgY29udGV4dEVudGVyID0gZW52LnNjb3BlKClcblxuICAgIE9iamVjdC5rZXlzKGNvbnRleHQpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHNjb3BlLnNhdmUoQ09OVEVYVCwgJy4nICsgbmFtZSlcbiAgICAgIHZhciBkZWZuID0gY29udGV4dFtuYW1lXVxuICAgICAgdmFyIHZhbHVlID0gZGVmbi5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBjb250ZXh0RW50ZXIoQ09OVEVYVCwgJy4nLCBuYW1lLCAnPVsnLCB2YWx1ZS5qb2luKCksICddOycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0RW50ZXIoQ09OVEVYVCwgJy4nLCBuYW1lLCAnPScsIHZhbHVlLCAnOycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNjb3BlKGNvbnRleHRFbnRlcilcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ09NTU9OIERSQVdJTkcgRlVOQ1RJT05TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gZW1pdFBvbGxGcmFtZWJ1ZmZlciAoZW52LCBzY29wZSwgZnJhbWVidWZmZXIsIHNraXBDaGVjaykge1xuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG5cbiAgICB2YXIgR0wgPSBzaGFyZWQuZ2xcbiAgICB2YXIgRlJBTUVCVUZGRVJfU1RBVEUgPSBzaGFyZWQuZnJhbWVidWZmZXJcbiAgICB2YXIgRVhUX0RSQVdfQlVGRkVSU1xuICAgIGlmIChleHREcmF3QnVmZmVycykge1xuICAgICAgRVhUX0RSQVdfQlVGRkVSUyA9IHNjb3BlLmRlZihzaGFyZWQuZXh0ZW5zaW9ucywgJy53ZWJnbF9kcmF3X2J1ZmZlcnMnKVxuICAgIH1cblxuICAgIHZhciBjb25zdGFudHMgPSBlbnYuY29uc3RhbnRzXG5cbiAgICB2YXIgRFJBV19CVUZGRVJTID0gY29uc3RhbnRzLmRyYXdCdWZmZXJcbiAgICB2YXIgQkFDS19CVUZGRVIgPSBjb25zdGFudHMuYmFja0J1ZmZlclxuXG4gICAgdmFyIE5FWFRcbiAgICBpZiAoZnJhbWVidWZmZXIpIHtcbiAgICAgIE5FWFQgPSBmcmFtZWJ1ZmZlci5hcHBlbmQoZW52LCBzY29wZSlcbiAgICB9IGVsc2Uge1xuICAgICAgTkVYVCA9IHNjb3BlLmRlZihGUkFNRUJVRkZFUl9TVEFURSwgJy5uZXh0JylcbiAgICB9XG5cbiAgICBpZiAoIXNraXBDaGVjaykge1xuICAgICAgc2NvcGUoJ2lmKCcsIE5FWFQsICchPT0nLCBGUkFNRUJVRkZFUl9TVEFURSwgJy5jdXIpeycpXG4gICAgfVxuICAgIHNjb3BlKFxuICAgICAgJ2lmKCcsIE5FWFQsICcpeycsXG4gICAgICBHTCwgJy5iaW5kRnJhbWVidWZmZXIoJywgR0xfRlJBTUVCVUZGRVIkMiwgJywnLCBORVhULCAnLmZyYW1lYnVmZmVyKTsnKVxuICAgIGlmIChleHREcmF3QnVmZmVycykge1xuICAgICAgc2NvcGUoRVhUX0RSQVdfQlVGRkVSUywgJy5kcmF3QnVmZmVyc1dFQkdMKCcsXG4gICAgICAgIERSQVdfQlVGRkVSUywgJ1snLCBORVhULCAnLmNvbG9yQXR0YWNobWVudHMubGVuZ3RoXSk7JylcbiAgICB9XG4gICAgc2NvcGUoJ31lbHNleycsXG4gICAgICBHTCwgJy5iaW5kRnJhbWVidWZmZXIoJywgR0xfRlJBTUVCVUZGRVIkMiwgJyxudWxsKTsnKVxuICAgIGlmIChleHREcmF3QnVmZmVycykge1xuICAgICAgc2NvcGUoRVhUX0RSQVdfQlVGRkVSUywgJy5kcmF3QnVmZmVyc1dFQkdMKCcsIEJBQ0tfQlVGRkVSLCAnKTsnKVxuICAgIH1cbiAgICBzY29wZShcbiAgICAgICd9JyxcbiAgICAgIEZSQU1FQlVGRkVSX1NUQVRFLCAnLmN1cj0nLCBORVhULCAnOycpXG4gICAgaWYgKCFza2lwQ2hlY2spIHtcbiAgICAgIHNjb3BlKCd9JylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbWl0UG9sbFN0YXRlIChlbnYsIHNjb3BlLCBhcmdzKSB7XG4gICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcblxuICAgIHZhciBHTCA9IHNoYXJlZC5nbFxuXG4gICAgdmFyIENVUlJFTlRfVkFSUyA9IGVudi5jdXJyZW50XG4gICAgdmFyIE5FWFRfVkFSUyA9IGVudi5uZXh0XG4gICAgdmFyIENVUlJFTlRfU1RBVEUgPSBzaGFyZWQuY3VycmVudFxuICAgIHZhciBORVhUX1NUQVRFID0gc2hhcmVkLm5leHRcblxuICAgIHZhciBibG9jayA9IGVudi5jb25kKENVUlJFTlRfU1RBVEUsICcuZGlydHknKVxuXG4gICAgR0xfU1RBVEVfTkFNRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgdmFyIHBhcmFtID0gcHJvcE5hbWUocHJvcClcbiAgICAgIGlmIChwYXJhbSBpbiBhcmdzLnN0YXRlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB2YXIgTkVYVCwgQ1VSUkVOVFxuICAgICAgaWYgKHBhcmFtIGluIE5FWFRfVkFSUykge1xuICAgICAgICBORVhUID0gTkVYVF9WQVJTW3BhcmFtXVxuICAgICAgICBDVVJSRU5UID0gQ1VSUkVOVF9WQVJTW3BhcmFtXVxuICAgICAgICB2YXIgcGFydHMgPSBsb29wKGN1cnJlbnRTdGF0ZVtwYXJhbV0ubGVuZ3RoLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgIHJldHVybiBibG9jay5kZWYoTkVYVCwgJ1snLCBpLCAnXScpXG4gICAgICAgIH0pXG4gICAgICAgIGJsb2NrKGVudi5jb25kKHBhcnRzLm1hcChmdW5jdGlvbiAocCwgaSkge1xuICAgICAgICAgIHJldHVybiBwICsgJyE9PScgKyBDVVJSRU5UICsgJ1snICsgaSArICddJ1xuICAgICAgICB9KS5qb2luKCd8fCcpKVxuICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgR0wsICcuJywgR0xfVkFSSUFCTEVTW3BhcmFtXSwgJygnLCBwYXJ0cywgJyk7JyxcbiAgICAgICAgICAgIHBhcnRzLm1hcChmdW5jdGlvbiAocCwgaSkge1xuICAgICAgICAgICAgICByZXR1cm4gQ1VSUkVOVCArICdbJyArIGkgKyAnXT0nICsgcFxuICAgICAgICAgICAgfSkuam9pbignOycpLCAnOycpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTkVYVCA9IGJsb2NrLmRlZihORVhUX1NUQVRFLCAnLicsIHBhcmFtKVxuICAgICAgICB2YXIgaWZ0ZSA9IGVudi5jb25kKE5FWFQsICchPT0nLCBDVVJSRU5UX1NUQVRFLCAnLicsIHBhcmFtKVxuICAgICAgICBibG9jayhpZnRlKVxuICAgICAgICBpZiAocGFyYW0gaW4gR0xfRkxBR1MpIHtcbiAgICAgICAgICBpZnRlKFxuICAgICAgICAgICAgZW52LmNvbmQoTkVYVClcbiAgICAgICAgICAgICAgLnRoZW4oR0wsICcuZW5hYmxlKCcsIEdMX0ZMQUdTW3BhcmFtXSwgJyk7JylcbiAgICAgICAgICAgICAgLmVsc2UoR0wsICcuZGlzYWJsZSgnLCBHTF9GTEFHU1twYXJhbV0sICcpOycpLFxuICAgICAgICAgICAgQ1VSUkVOVF9TVEFURSwgJy4nLCBwYXJhbSwgJz0nLCBORVhULCAnOycpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWZ0ZShcbiAgICAgICAgICAgIEdMLCAnLicsIEdMX1ZBUklBQkxFU1twYXJhbV0sICcoJywgTkVYVCwgJyk7JyxcbiAgICAgICAgICAgIENVUlJFTlRfU1RBVEUsICcuJywgcGFyYW0sICc9JywgTkVYVCwgJzsnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAoT2JqZWN0LmtleXMoYXJncy5zdGF0ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBibG9jayhDVVJSRU5UX1NUQVRFLCAnLmRpcnR5PWZhbHNlOycpXG4gICAgfVxuICAgIHNjb3BlKGJsb2NrKVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdFNldE9wdGlvbnMgKGVudiwgc2NvcGUsIG9wdGlvbnMsIGZpbHRlcikge1xuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgdmFyIENVUlJFTlRfVkFSUyA9IGVudi5jdXJyZW50XG4gICAgdmFyIENVUlJFTlRfU1RBVEUgPSBzaGFyZWQuY3VycmVudFxuICAgIHZhciBHTCA9IHNoYXJlZC5nbFxuICAgIHNvcnRTdGF0ZShPYmplY3Qua2V5cyhvcHRpb25zKSkuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHZhciBkZWZuID0gb3B0aW9uc1twYXJhbV1cbiAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihkZWZuKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHZhciB2YXJpYWJsZSA9IGRlZm4uYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICBpZiAoR0xfRkxBR1NbcGFyYW1dKSB7XG4gICAgICAgIHZhciBmbGFnID0gR0xfRkxBR1NbcGFyYW1dXG4gICAgICAgIGlmIChpc1N0YXRpYyhkZWZuKSkge1xuICAgICAgICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgICAgICAgc2NvcGUoR0wsICcuZW5hYmxlKCcsIGZsYWcsICcpOycpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNjb3BlKEdMLCAnLmRpc2FibGUoJywgZmxhZywgJyk7JylcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NvcGUoZW52LmNvbmQodmFyaWFibGUpXG4gICAgICAgICAgICAudGhlbihHTCwgJy5lbmFibGUoJywgZmxhZywgJyk7JylcbiAgICAgICAgICAgIC5lbHNlKEdMLCAnLmRpc2FibGUoJywgZmxhZywgJyk7JykpXG4gICAgICAgIH1cbiAgICAgICAgc2NvcGUoQ1VSUkVOVF9TVEFURSwgJy4nLCBwYXJhbSwgJz0nLCB2YXJpYWJsZSwgJzsnKVxuICAgICAgfSBlbHNlIGlmIChpc0FycmF5TGlrZSh2YXJpYWJsZSkpIHtcbiAgICAgICAgdmFyIENVUlJFTlQgPSBDVVJSRU5UX1ZBUlNbcGFyYW1dXG4gICAgICAgIHNjb3BlKFxuICAgICAgICAgIEdMLCAnLicsIEdMX1ZBUklBQkxFU1twYXJhbV0sICcoJywgdmFyaWFibGUsICcpOycsXG4gICAgICAgICAgdmFyaWFibGUubWFwKGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gQ1VSUkVOVCArICdbJyArIGkgKyAnXT0nICsgdlxuICAgICAgICAgIH0pLmpvaW4oJzsnKSwgJzsnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NvcGUoXG4gICAgICAgICAgR0wsICcuJywgR0xfVkFSSUFCTEVTW3BhcmFtXSwgJygnLCB2YXJpYWJsZSwgJyk7JyxcbiAgICAgICAgICBDVVJSRU5UX1NUQVRFLCAnLicsIHBhcmFtLCAnPScsIHZhcmlhYmxlLCAnOycpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGluamVjdEV4dGVuc2lvbnMgKGVudiwgc2NvcGUpIHtcbiAgICBpZiAoZXh0SW5zdGFuY2luZykge1xuICAgICAgZW52Lmluc3RhbmNpbmcgPSBzY29wZS5kZWYoXG4gICAgICAgIGVudi5zaGFyZWQuZXh0ZW5zaW9ucywgJy5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzJylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbWl0UHJvZmlsZSAoZW52LCBzY29wZSwgYXJncywgdXNlU2NvcGUsIGluY3JlbWVudENvdW50ZXIpIHtcbiAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuICAgIHZhciBTVEFUUyA9IGVudi5zdGF0c1xuICAgIHZhciBDVVJSRU5UX1NUQVRFID0gc2hhcmVkLmN1cnJlbnRcbiAgICB2YXIgVElNRVIgPSBzaGFyZWQudGltZXJcbiAgICB2YXIgcHJvZmlsZUFyZyA9IGFyZ3MucHJvZmlsZVxuXG4gICAgZnVuY3Rpb24gcGVyZkNvdW50ZXIgKCkge1xuICAgICAgaWYgKHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICdEYXRlLm5vdygpJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICdwZXJmb3JtYW5jZS5ub3coKSdcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgQ1BVX1NUQVJULCBRVUVSWV9DT1VOVEVSXG4gICAgZnVuY3Rpb24gZW1pdFByb2ZpbGVTdGFydCAoYmxvY2spIHtcbiAgICAgIENQVV9TVEFSVCA9IHNjb3BlLmRlZigpXG4gICAgICBibG9jayhDUFVfU1RBUlQsICc9JywgcGVyZkNvdW50ZXIoKSwgJzsnKVxuICAgICAgaWYgKHR5cGVvZiBpbmNyZW1lbnRDb3VudGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICBibG9jayhTVEFUUywgJy5jb3VudCs9JywgaW5jcmVtZW50Q291bnRlciwgJzsnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmxvY2soU1RBVFMsICcuY291bnQrKzsnKVxuICAgICAgfVxuICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgIGlmICh1c2VTY29wZSkge1xuICAgICAgICAgIFFVRVJZX0NPVU5URVIgPSBzY29wZS5kZWYoKVxuICAgICAgICAgIGJsb2NrKFFVRVJZX0NPVU5URVIsICc9JywgVElNRVIsICcuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKTsnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJsb2NrKFRJTUVSLCAnLmJlZ2luUXVlcnkoJywgU1RBVFMsICcpOycpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0UHJvZmlsZUVuZCAoYmxvY2spIHtcbiAgICAgIGJsb2NrKFNUQVRTLCAnLmNwdVRpbWUrPScsIHBlcmZDb3VudGVyKCksICctJywgQ1BVX1NUQVJULCAnOycpXG4gICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgaWYgKHVzZVNjb3BlKSB7XG4gICAgICAgICAgYmxvY2soVElNRVIsICcucHVzaFNjb3BlU3RhdHMoJyxcbiAgICAgICAgICAgIFFVRVJZX0NPVU5URVIsICcsJyxcbiAgICAgICAgICAgIFRJTUVSLCAnLmdldE51bVBlbmRpbmdRdWVyaWVzKCksJyxcbiAgICAgICAgICAgIFNUQVRTLCAnKTsnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJsb2NrKFRJTUVSLCAnLmVuZFF1ZXJ5KCk7JylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjb3BlUHJvZmlsZSAodmFsdWUpIHtcbiAgICAgIHZhciBwcmV2ID0gc2NvcGUuZGVmKENVUlJFTlRfU1RBVEUsICcucHJvZmlsZScpXG4gICAgICBzY29wZShDVVJSRU5UX1NUQVRFLCAnLnByb2ZpbGU9JywgdmFsdWUsICc7JylcbiAgICAgIHNjb3BlLmV4aXQoQ1VSUkVOVF9TVEFURSwgJy5wcm9maWxlPScsIHByZXYsICc7JylcbiAgICB9XG5cbiAgICB2YXIgVVNFX1BST0ZJTEVcbiAgICBpZiAocHJvZmlsZUFyZykge1xuICAgICAgaWYgKGlzU3RhdGljKHByb2ZpbGVBcmcpKSB7XG4gICAgICAgIGlmIChwcm9maWxlQXJnLmVuYWJsZSkge1xuICAgICAgICAgIGVtaXRQcm9maWxlU3RhcnQoc2NvcGUpXG4gICAgICAgICAgZW1pdFByb2ZpbGVFbmQoc2NvcGUuZXhpdClcbiAgICAgICAgICBzY29wZVByb2ZpbGUoJ3RydWUnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjb3BlUHJvZmlsZSgnZmFsc2UnKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgVVNFX1BST0ZJTEUgPSBwcm9maWxlQXJnLmFwcGVuZChlbnYsIHNjb3BlKVxuICAgICAgc2NvcGVQcm9maWxlKFVTRV9QUk9GSUxFKVxuICAgIH0gZWxzZSB7XG4gICAgICBVU0VfUFJPRklMRSA9IHNjb3BlLmRlZihDVVJSRU5UX1NUQVRFLCAnLnByb2ZpbGUnKVxuICAgIH1cblxuICAgIHZhciBzdGFydCA9IGVudi5ibG9jaygpXG4gICAgZW1pdFByb2ZpbGVTdGFydChzdGFydClcbiAgICBzY29wZSgnaWYoJywgVVNFX1BST0ZJTEUsICcpeycsIHN0YXJ0LCAnfScpXG4gICAgdmFyIGVuZCA9IGVudi5ibG9jaygpXG4gICAgZW1pdFByb2ZpbGVFbmQoZW5kKVxuICAgIHNjb3BlLmV4aXQoJ2lmKCcsIFVTRV9QUk9GSUxFLCAnKXsnLCBlbmQsICd9JylcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXRBdHRyaWJ1dGVzIChlbnYsIHNjb3BlLCBhcmdzLCBhdHRyaWJ1dGVzLCBmaWx0ZXIpIHtcbiAgICB2YXIgc2hhcmVkID0gZW52LnNoYXJlZFxuXG4gICAgZnVuY3Rpb24gdHlwZUxlbmd0aCAoeCkge1xuICAgICAgc3dpdGNoICh4KSB7XG4gICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjpcbiAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjpcbiAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6XG4gICAgICAgICAgcmV0dXJuIDJcbiAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOlxuICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOlxuICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzpcbiAgICAgICAgICByZXR1cm4gM1xuICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6XG4gICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6XG4gICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OlxuICAgICAgICAgIHJldHVybiA0XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0QmluZEF0dHJpYnV0ZSAoQVRUUklCVVRFLCBzaXplLCByZWNvcmQpIHtcbiAgICAgIHZhciBHTCA9IHNoYXJlZC5nbFxuXG4gICAgICB2YXIgTE9DQVRJT04gPSBzY29wZS5kZWYoQVRUUklCVVRFLCAnLmxvY2F0aW9uJylcbiAgICAgIHZhciBCSU5ESU5HID0gc2NvcGUuZGVmKHNoYXJlZC5hdHRyaWJ1dGVzLCAnWycsIExPQ0FUSU9OLCAnXScpXG5cbiAgICAgIHZhciBTVEFURSA9IHJlY29yZC5zdGF0ZVxuICAgICAgdmFyIEJVRkZFUiA9IHJlY29yZC5idWZmZXJcbiAgICAgIHZhciBDT05TVF9DT01QT05FTlRTID0gW1xuICAgICAgICByZWNvcmQueCxcbiAgICAgICAgcmVjb3JkLnksXG4gICAgICAgIHJlY29yZC56LFxuICAgICAgICByZWNvcmQud1xuICAgICAgXVxuXG4gICAgICB2YXIgQ09NTU9OX0tFWVMgPSBbXG4gICAgICAgICdidWZmZXInLFxuICAgICAgICAnbm9ybWFsaXplZCcsXG4gICAgICAgICdvZmZzZXQnLFxuICAgICAgICAnc3RyaWRlJ1xuICAgICAgXVxuXG4gICAgICBmdW5jdGlvbiBlbWl0QnVmZmVyICgpIHtcbiAgICAgICAgc2NvcGUoXG4gICAgICAgICAgJ2lmKCEnLCBCSU5ESU5HLCAnLmJ1ZmZlcil7JyxcbiAgICAgICAgICBHTCwgJy5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgnLCBMT0NBVElPTiwgJyk7fScpXG5cbiAgICAgICAgdmFyIFRZUEUgPSByZWNvcmQudHlwZVxuICAgICAgICB2YXIgU0laRVxuICAgICAgICBpZiAoIXJlY29yZC5zaXplKSB7XG4gICAgICAgICAgU0laRSA9IHNpemVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBTSVpFID0gc2NvcGUuZGVmKHJlY29yZC5zaXplLCAnfHwnLCBzaXplKVxuICAgICAgICB9XG5cbiAgICAgICAgc2NvcGUoJ2lmKCcsXG4gICAgICAgICAgQklORElORywgJy50eXBlIT09JywgVFlQRSwgJ3x8JyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnNpemUhPT0nLCBTSVpFLCAnfHwnLFxuICAgICAgICAgIENPTU1PTl9LRVlTLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gQklORElORyArICcuJyArIGtleSArICchPT0nICsgcmVjb3JkW2tleV1cbiAgICAgICAgICB9KS5qb2luKCd8fCcpLFxuICAgICAgICAgICcpeycsXG4gICAgICAgICAgR0wsICcuYmluZEJ1ZmZlcignLCBHTF9BUlJBWV9CVUZGRVIkMiwgJywnLCBCVUZGRVIsICcuYnVmZmVyKTsnLFxuICAgICAgICAgIEdMLCAnLnZlcnRleEF0dHJpYlBvaW50ZXIoJywgW1xuICAgICAgICAgICAgTE9DQVRJT04sXG4gICAgICAgICAgICBTSVpFLFxuICAgICAgICAgICAgVFlQRSxcbiAgICAgICAgICAgIHJlY29yZC5ub3JtYWxpemVkLFxuICAgICAgICAgICAgcmVjb3JkLnN0cmlkZSxcbiAgICAgICAgICAgIHJlY29yZC5vZmZzZXRcbiAgICAgICAgICBdLCAnKTsnLFxuICAgICAgICAgIEJJTkRJTkcsICcudHlwZT0nLCBUWVBFLCAnOycsXG4gICAgICAgICAgQklORElORywgJy5zaXplPScsIFNJWkUsICc7JyxcbiAgICAgICAgICBDT01NT05fS0VZUy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIEJJTkRJTkcgKyAnLicgKyBrZXkgKyAnPScgKyByZWNvcmRba2V5XSArICc7J1xuICAgICAgICAgIH0pLmpvaW4oJycpLFxuICAgICAgICAgICd9JylcblxuICAgICAgICBpZiAoZXh0SW5zdGFuY2luZykge1xuICAgICAgICAgIHZhciBESVZJU09SID0gcmVjb3JkLmRpdmlzb3JcbiAgICAgICAgICBzY29wZShcbiAgICAgICAgICAgICdpZignLCBCSU5ESU5HLCAnLmRpdmlzb3IhPT0nLCBESVZJU09SLCAnKXsnLFxuICAgICAgICAgICAgZW52Lmluc3RhbmNpbmcsICcudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCcsIFtMT0NBVElPTiwgRElWSVNPUl0sICcpOycsXG4gICAgICAgICAgICBCSU5ESU5HLCAnLmRpdmlzb3I9JywgRElWSVNPUiwgJzt9JylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBlbWl0Q29uc3RhbnQgKCkge1xuICAgICAgICBzY29wZShcbiAgICAgICAgICAnaWYoJywgQklORElORywgJy5idWZmZXIpeycsXG4gICAgICAgICAgR0wsICcuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KCcsIExPQ0FUSU9OLCAnKTsnLFxuICAgICAgICAgIEJJTkRJTkcsICcuYnVmZmVyPW51bGw7JyxcbiAgICAgICAgICAnfWlmKCcsIENVVEVfQ09NUE9ORU5UUy5tYXAoZnVuY3Rpb24gKGMsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiBCSU5ESU5HICsgJy4nICsgYyArICchPT0nICsgQ09OU1RfQ09NUE9ORU5UU1tpXVxuICAgICAgICAgIH0pLmpvaW4oJ3x8JyksICcpeycsXG4gICAgICAgICAgR0wsICcudmVydGV4QXR0cmliNGYoJywgTE9DQVRJT04sICcsJywgQ09OU1RfQ09NUE9ORU5UUywgJyk7JyxcbiAgICAgICAgICBDVVRFX0NPTVBPTkVOVFMubWFwKGZ1bmN0aW9uIChjLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gQklORElORyArICcuJyArIGMgKyAnPScgKyBDT05TVF9DT01QT05FTlRTW2ldICsgJzsnXG4gICAgICAgICAgfSkuam9pbignJyksXG4gICAgICAgICAgJ30nKVxuICAgICAgfVxuXG4gICAgICBpZiAoU1RBVEUgPT09IEFUVFJJQl9TVEFURV9QT0lOVEVSKSB7XG4gICAgICAgIGVtaXRCdWZmZXIoKVxuICAgICAgfSBlbHNlIGlmIChTVEFURSA9PT0gQVRUUklCX1NUQVRFX0NPTlNUQU5UKSB7XG4gICAgICAgIGVtaXRDb25zdGFudCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY29wZSgnaWYoJywgU1RBVEUsICc9PT0nLCBBVFRSSUJfU1RBVEVfUE9JTlRFUiwgJyl7JylcbiAgICAgICAgZW1pdEJ1ZmZlcigpXG4gICAgICAgIHNjb3BlKCd9ZWxzZXsnKVxuICAgICAgICBlbWl0Q29uc3RhbnQoKVxuICAgICAgICBzY29wZSgnfScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXR0cmlidXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlLm5hbWVcbiAgICAgIHZhciBhcmcgPSBhcmdzLmF0dHJpYnV0ZXNbbmFtZV1cbiAgICAgIHZhciByZWNvcmRcbiAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIoYXJnKSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHJlY29yZCA9IGFyZy5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghZmlsdGVyKFNDT1BFX0RFQ0wpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNjb3BlQXR0cmliID0gZW52LnNjb3BlQXR0cmliKG5hbWUpXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsXG4gICAgICAgICAgICBzY29wZUF0dHJpYiArICcuc3RhdGUnLFxuICAgICAgICAgICAgJ21pc3NpbmcgYXR0cmlidXRlICcgKyBuYW1lKVxuICAgICAgICB9KVxuICAgICAgICByZWNvcmQgPSB7fVxuICAgICAgICBPYmplY3Qua2V5cyhuZXcgQXR0cmlidXRlUmVjb3JkKCkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJlY29yZFtrZXldID0gc2NvcGUuZGVmKHNjb3BlQXR0cmliLCAnLicsIGtleSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGVtaXRCaW5kQXR0cmlidXRlKFxuICAgICAgICBlbnYubGluayhhdHRyaWJ1dGUpLCB0eXBlTGVuZ3RoKGF0dHJpYnV0ZS5pbmZvLnR5cGUpLCByZWNvcmQpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXRVbmlmb3JtcyAoZW52LCBzY29wZSwgYXJncywgdW5pZm9ybXMsIGZpbHRlcikge1xuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgdmFyIEdMID0gc2hhcmVkLmdsXG5cbiAgICB2YXIgaW5maXhcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1zLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgdW5pZm9ybSA9IHVuaWZvcm1zW2ldXG4gICAgICB2YXIgbmFtZSA9IHVuaWZvcm0ubmFtZVxuICAgICAgdmFyIHR5cGUgPSB1bmlmb3JtLmluZm8udHlwZVxuICAgICAgdmFyIGFyZyA9IGFyZ3MudW5pZm9ybXNbbmFtZV1cbiAgICAgIHZhciBVTklGT1JNID0gZW52LmxpbmsodW5pZm9ybSlcbiAgICAgIHZhciBMT0NBVElPTiA9IFVOSUZPUk0gKyAnLmxvY2F0aW9uJ1xuXG4gICAgICB2YXIgVkFMVUVcbiAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIoYXJnKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3RhdGljKGFyZykpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBhcmcudmFsdWVcbiAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnLFxuICAgICAgICAgICAgJ21pc3NpbmcgdW5pZm9ybSBcIicgKyBuYW1lICsgJ1wiJywgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgaWYgKHR5cGUgPT09IEdMX1NBTVBMRVJfMkQgfHwgdHlwZSA9PT0gR0xfU0FNUExFUl9DVUJFKSB7XG4gICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgICAoKHR5cGUgPT09IEdMX1NBTVBMRVJfMkQgJiZcbiAgICAgICAgICAgICAgICAodmFsdWUuX3JlZ2xUeXBlID09PSAndGV4dHVyZTJkJyB8fFxuICAgICAgICAgICAgICAgIHZhbHVlLl9yZWdsVHlwZSA9PT0gJ2ZyYW1lYnVmZmVyJykpIHx8XG4gICAgICAgICAgICAgICh0eXBlID09PSBHTF9TQU1QTEVSX0NVQkUgJiZcbiAgICAgICAgICAgICAgICAodmFsdWUuX3JlZ2xUeXBlID09PSAndGV4dHVyZUN1YmUnIHx8XG4gICAgICAgICAgICAgICAgdmFsdWUuX3JlZ2xUeXBlID09PSAnZnJhbWVidWZmZXJDdWJlJykpKSxcbiAgICAgICAgICAgICAgJ2ludmFsaWQgdGV4dHVyZSBmb3IgdW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICB2YXIgVEVYX1ZBTFVFID0gZW52LmxpbmsodmFsdWUuX3RleHR1cmUgfHwgdmFsdWUuY29sb3JbMF0uX3RleHR1cmUpXG4gICAgICAgICAgICBzY29wZShHTCwgJy51bmlmb3JtMWkoJywgTE9DQVRJT04sICcsJywgVEVYX1ZBTFVFICsgJy5iaW5kKCkpOycpXG4gICAgICAgICAgICBzY29wZS5leGl0KFRFWF9WQUxVRSwgJy51bmJpbmQoKTsnKVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlID09PSBHTF9GTE9BVF9NQVQyIHx8XG4gICAgICAgICAgICB0eXBlID09PSBHTF9GTE9BVF9NQVQzIHx8XG4gICAgICAgICAgICB0eXBlID09PSBHTF9GTE9BVF9NQVQ0KSB7XG4gICAgICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKGlzQXJyYXlMaWtlKHZhbHVlKSxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBtYXRyaXggZm9yIHVuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgKHR5cGUgPT09IEdMX0ZMT0FUX01BVDIgJiYgdmFsdWUubGVuZ3RoID09PSA0KSB8fFxuICAgICAgICAgICAgICAgICh0eXBlID09PSBHTF9GTE9BVF9NQVQzICYmIHZhbHVlLmxlbmd0aCA9PT0gOSkgfHxcbiAgICAgICAgICAgICAgICAodHlwZSA9PT0gR0xfRkxPQVRfTUFUNCAmJiB2YWx1ZS5sZW5ndGggPT09IDE2KSxcbiAgICAgICAgICAgICAgICAnaW52YWxpZCBsZW5ndGggZm9yIG1hdHJpeCB1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YXIgTUFUX1ZBTFVFID0gZW52Lmdsb2JhbC5kZWYoJ25ldyBGbG9hdDMyQXJyYXkoWycgK1xuICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh2YWx1ZSkgKyAnXSknKVxuICAgICAgICAgICAgdmFyIGRpbSA9IDJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSBHTF9GTE9BVF9NQVQzKSB7XG4gICAgICAgICAgICAgIGRpbSA9IDNcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gR0xfRkxPQVRfTUFUNCkge1xuICAgICAgICAgICAgICBkaW0gPSA0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZShcbiAgICAgICAgICAgICAgR0wsICcudW5pZm9ybU1hdHJpeCcsIGRpbSwgJ2Z2KCcsXG4gICAgICAgICAgICAgIExPQ0FUSU9OLCAnLGZhbHNlLCcsIE1BVF9WQUxVRSwgJyk7JylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQkODpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKHZhbHVlLCAnbnVtYmVyJywgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzFmJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAyLFxuICAgICAgICAgICAgICAgICAgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzJmJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAzLFxuICAgICAgICAgICAgICAgICAgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzNmJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmQoXG4gICAgICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSA0LFxuICAgICAgICAgICAgICAgICAgJ3VuaWZvcm0gJyArIG5hbWUsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgICAgICAgIGluZml4ID0gJzRmJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDpcbiAgICAgICAgICAgICAgICBjaGVjayQxLmNvbW1hbmRUeXBlKHZhbHVlLCAnYm9vbGVhbicsICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICcxaSdcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0lOVCQzOlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZFR5cGUodmFsdWUsICdudW1iZXInLCAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnMWknXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMixcbiAgICAgICAgICAgICAgICAgICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICcyaSdcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIGlzQXJyYXlMaWtlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDIsXG4gICAgICAgICAgICAgICAgICAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnMmknXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMyxcbiAgICAgICAgICAgICAgICAgICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICczaSdcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIGlzQXJyYXlMaWtlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDMsXG4gICAgICAgICAgICAgICAgICAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnM2knXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6XG4gICAgICAgICAgICAgICAgY2hlY2skMS5jb21tYW5kKFxuICAgICAgICAgICAgICAgICAgaXNBcnJheUxpa2UodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gNCxcbiAgICAgICAgICAgICAgICAgICd1bmlmb3JtICcgKyBuYW1lLCBlbnYuY29tbWFuZFN0cilcbiAgICAgICAgICAgICAgICBpbmZpeCA9ICc0aSdcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OlxuICAgICAgICAgICAgICAgIGNoZWNrJDEuY29tbWFuZChcbiAgICAgICAgICAgICAgICAgIGlzQXJyYXlMaWtlKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDQsXG4gICAgICAgICAgICAgICAgICAndW5pZm9ybSAnICsgbmFtZSwgZW52LmNvbW1hbmRTdHIpXG4gICAgICAgICAgICAgICAgaW5maXggPSAnNGknXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlKEdMLCAnLnVuaWZvcm0nLCBpbmZpeCwgJygnLCBMT0NBVElPTiwgJywnLFxuICAgICAgICAgICAgICBpc0FycmF5TGlrZSh2YWx1ZSkgPyBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh2YWx1ZSkgOiB2YWx1ZSxcbiAgICAgICAgICAgICAgJyk7JylcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBWQUxVRSA9IGFyZy5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIoU0NPUEVfREVDTCkpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIFZBTFVFID0gc2NvcGUuZGVmKHNoYXJlZC51bmlmb3JtcywgJ1snLCBzdHJpbmdTdG9yZS5pZChuYW1lKSwgJ10nKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gR0xfU0FNUExFUl8yRCkge1xuICAgICAgICBjaGVjayQxKCFBcnJheS5pc0FycmF5KFZBTFVFKSwgJ211c3Qgc3BlY2lmeSBhIHNjYWxhciBwcm9wIGZvciB0ZXh0dXJlcycpXG4gICAgICAgIHNjb3BlKFxuICAgICAgICAgICdpZignLCBWQUxVRSwgJyYmJywgVkFMVUUsICcuX3JlZ2xUeXBlPT09XCJmcmFtZWJ1ZmZlclwiKXsnLFxuICAgICAgICAgIFZBTFVFLCAnPScsIFZBTFVFLCAnLmNvbG9yWzBdOycsXG4gICAgICAgICAgJ30nKVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBHTF9TQU1QTEVSX0NVQkUpIHtcbiAgICAgICAgY2hlY2skMSghQXJyYXkuaXNBcnJheShWQUxVRSksICdtdXN0IHNwZWNpZnkgYSBzY2FsYXIgcHJvcCBmb3IgY3ViZSBtYXBzJylcbiAgICAgICAgc2NvcGUoXG4gICAgICAgICAgJ2lmKCcsIFZBTFVFLCAnJiYnLCBWQUxVRSwgJy5fcmVnbFR5cGU9PT1cImZyYW1lYnVmZmVyQ3ViZVwiKXsnLFxuICAgICAgICAgIFZBTFVFLCAnPScsIFZBTFVFLCAnLmNvbG9yWzBdOycsXG4gICAgICAgICAgJ30nKVxuICAgICAgfVxuXG4gICAgICAvLyBwZXJmb3JtIHR5cGUgdmFsaWRhdGlvblxuICAgICAgY2hlY2skMS5vcHRpb25hbChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGVtaXRDaGVjayAocHJlZCwgbWVzc2FnZSkge1xuICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsIHByZWQsXG4gICAgICAgICAgICAnYmFkIGRhdGEgb3IgbWlzc2luZyBmb3IgdW5pZm9ybSBcIicgKyBuYW1lICsgJ1wiLiAgJyArIG1lc3NhZ2UpXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjaGVja1R5cGUgKHR5cGUpIHtcbiAgICAgICAgICBjaGVjayQxKCFBcnJheS5pc0FycmF5KFZBTFVFKSwgJ211c3Qgbm90IHNwZWNpZnkgYW4gYXJyYXkgdHlwZSBmb3IgdW5pZm9ybScpXG4gICAgICAgICAgZW1pdENoZWNrKFxuICAgICAgICAgICAgJ3R5cGVvZiAnICsgVkFMVUUgKyAnPT09XCInICsgdHlwZSArICdcIicsXG4gICAgICAgICAgICAnaW52YWxpZCB0eXBlLCBleHBlY3RlZCAnICsgdHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrVmVjdG9yIChuLCB0eXBlKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoVkFMVUUpKSB7XG4gICAgICAgICAgICBjaGVjayQxKFZBTFVFLmxlbmd0aCA9PT0gbiwgJ211c3QgaGF2ZSBsZW5ndGggJyArIG4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVtaXRDaGVjayhcbiAgICAgICAgICAgICAgc2hhcmVkLmlzQXJyYXlMaWtlICsgJygnICsgVkFMVUUgKyAnKSYmJyArIFZBTFVFICsgJy5sZW5ndGg9PT0nICsgbixcbiAgICAgICAgICAgICAgJ2ludmFsaWQgdmVjdG9yLCBzaG91bGQgaGF2ZSBsZW5ndGggJyArIG4sIGVudi5jb21tYW5kU3RyKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrVGV4dHVyZSAodGFyZ2V0KSB7XG4gICAgICAgICAgY2hlY2skMSghQXJyYXkuaXNBcnJheShWQUxVRSksICdtdXN0IG5vdCBzcGVjaWZ5IGEgdmFsdWUgdHlwZScpXG4gICAgICAgICAgZW1pdENoZWNrKFxuICAgICAgICAgICAgJ3R5cGVvZiAnICsgVkFMVUUgKyAnPT09XCJmdW5jdGlvblwiJiYnICtcbiAgICAgICAgICAgIFZBTFVFICsgJy5fcmVnbFR5cGU9PT1cInRleHR1cmUnICtcbiAgICAgICAgICAgICh0YXJnZXQgPT09IEdMX1RFWFRVUkVfMkQkMyA/ICcyZCcgOiAnQ3ViZScpICsgJ1wiJyxcbiAgICAgICAgICAgICdpbnZhbGlkIHRleHR1cmUgdHlwZScsIGVudi5jb21tYW5kU3RyKVxuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBHTF9JTlQkMzpcbiAgICAgICAgICAgIGNoZWNrVHlwZSgnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9JTlRfVkVDMjpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDIsICdudW1iZXInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoMywgJ251bWJlcicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6XG4gICAgICAgICAgICBjaGVja1ZlY3Rvcig0LCAnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9GTE9BVCQ4OlxuICAgICAgICAgICAgY2hlY2tUeXBlKCdudW1iZXInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6XG4gICAgICAgICAgICBjaGVja1ZlY3RvcigyLCAnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoMywgJ251bWJlcicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDQsICdudW1iZXInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0JPT0w6XG4gICAgICAgICAgICBjaGVja1R5cGUoJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDIsICdib29sZWFuJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6XG4gICAgICAgICAgICBjaGVja1ZlY3RvcigzLCAnYm9vbGVhbicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoNCwgJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6XG4gICAgICAgICAgICBjaGVja1ZlY3Rvcig0LCAnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOlxuICAgICAgICAgICAgY2hlY2tWZWN0b3IoOSwgJ251bWJlcicpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDpcbiAgICAgICAgICAgIGNoZWNrVmVjdG9yKDE2LCAnbnVtYmVyJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOlxuICAgICAgICAgICAgY2hlY2tUZXh0dXJlKEdMX1RFWFRVUkVfMkQkMylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6XG4gICAgICAgICAgICBjaGVja1RleHR1cmUoR0xfVEVYVFVSRV9DVUJFX01BUCQyKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgdmFyIHVucm9sbCA9IDFcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6XG4gICAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOlxuICAgICAgICAgIHZhciBURVggPSBzY29wZS5kZWYoVkFMVUUsICcuX3RleHR1cmUnKVxuICAgICAgICAgIHNjb3BlKEdMLCAnLnVuaWZvcm0xaSgnLCBMT0NBVElPTiwgJywnLCBURVgsICcuYmluZCgpKTsnKVxuICAgICAgICAgIHNjb3BlLmV4aXQoVEVYLCAnLnVuYmluZCgpOycpXG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIEdMX0lOVCQzOlxuICAgICAgICBjYXNlIEdMX0JPT0w6XG4gICAgICAgICAgaW5maXggPSAnMWknXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0lOVF9WRUMyOlxuICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjpcbiAgICAgICAgICBpbmZpeCA9ICcyaSdcbiAgICAgICAgICB1bnJvbGwgPSAyXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0lOVF9WRUMzOlxuICAgICAgICBjYXNlIEdMX0JPT0xfVkVDMzpcbiAgICAgICAgICBpbmZpeCA9ICczaSdcbiAgICAgICAgICB1bnJvbGwgPSAzXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0lOVF9WRUM0OlxuICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDpcbiAgICAgICAgICBpbmZpeCA9ICc0aSdcbiAgICAgICAgICB1bnJvbGwgPSA0XG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0ZMT0FUJDg6XG4gICAgICAgICAgaW5maXggPSAnMWYnXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6XG4gICAgICAgICAgaW5maXggPSAnMmYnXG4gICAgICAgICAgdW5yb2xsID0gMlxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOlxuICAgICAgICAgIGluZml4ID0gJzNmJ1xuICAgICAgICAgIHVucm9sbCA9IDNcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDpcbiAgICAgICAgICBpbmZpeCA9ICc0ZidcbiAgICAgICAgICB1bnJvbGwgPSA0XG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6XG4gICAgICAgICAgaW5maXggPSAnTWF0cml4MmZ2J1xuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOlxuICAgICAgICAgIGluZml4ID0gJ01hdHJpeDNmdidcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDpcbiAgICAgICAgICBpbmZpeCA9ICdNYXRyaXg0ZnYnXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgc2NvcGUoR0wsICcudW5pZm9ybScsIGluZml4LCAnKCcsIExPQ0FUSU9OLCAnLCcpXG4gICAgICBpZiAoaW5maXguY2hhckF0KDApID09PSAnTScpIHtcbiAgICAgICAgdmFyIG1hdFNpemUgPSBNYXRoLnBvdyh0eXBlIC0gR0xfRkxPQVRfTUFUMiArIDIsIDIpXG4gICAgICAgIHZhciBTVE9SQUdFID0gZW52Lmdsb2JhbC5kZWYoJ25ldyBGbG9hdDMyQXJyYXkoJywgbWF0U2l6ZSwgJyknKVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShWQUxVRSkpIHtcbiAgICAgICAgICBzY29wZShcbiAgICAgICAgICAgICdmYWxzZSwoJyxcbiAgICAgICAgICAgIGxvb3AobWF0U2l6ZSwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFNUT1JBR0UgKyAnWycgKyBpICsgJ109JyArIFZBTFVFW2ldXG4gICAgICAgICAgICB9KSwgJywnLCBTVE9SQUdFLCAnKScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NvcGUoXG4gICAgICAgICAgICAnZmFsc2UsKEFycmF5LmlzQXJyYXkoJywgVkFMVUUsICcpfHwnLCBWQUxVRSwgJyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSk/JywgVkFMVUUsICc6KCcsXG4gICAgICAgICAgICBsb29wKG1hdFNpemUsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBTVE9SQUdFICsgJ1snICsgaSArICddPScgKyBWQUxVRSArICdbJyArIGkgKyAnXSdcbiAgICAgICAgICAgIH0pLCAnLCcsIFNUT1JBR0UsICcpJylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh1bnJvbGwgPiAxKSB7XG4gICAgICAgIHNjb3BlKGxvb3AodW5yb2xsLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KFZBTFVFKSA/IFZBTFVFW2ldIDogVkFMVUUgKyAnWycgKyBpICsgJ10nXG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2skMSghQXJyYXkuaXNBcnJheShWQUxVRSksICd1bmlmb3JtIHZhbHVlIG11c3Qgbm90IGJlIGFuIGFycmF5JylcbiAgICAgICAgc2NvcGUoVkFMVUUpXG4gICAgICB9XG4gICAgICBzY29wZSgnKTsnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXREcmF3IChlbnYsIG91dGVyLCBpbm5lciwgYXJncykge1xuICAgIHZhciBzaGFyZWQgPSBlbnYuc2hhcmVkXG4gICAgdmFyIEdMID0gc2hhcmVkLmdsXG4gICAgdmFyIERSQVdfU1RBVEUgPSBzaGFyZWQuZHJhd1xuXG4gICAgdmFyIGRyYXdPcHRpb25zID0gYXJncy5kcmF3XG5cbiAgICBmdW5jdGlvbiBlbWl0RWxlbWVudHMgKCkge1xuICAgICAgdmFyIGRlZm4gPSBkcmF3T3B0aW9ucy5lbGVtZW50c1xuICAgICAgdmFyIEVMRU1FTlRTXG4gICAgICB2YXIgc2NvcGUgPSBvdXRlclxuICAgICAgaWYgKGRlZm4pIHtcbiAgICAgICAgaWYgKChkZWZuLmNvbnRleHREZXAgJiYgYXJncy5jb250ZXh0RHluYW1pYykgfHwgZGVmbi5wcm9wRGVwKSB7XG4gICAgICAgICAgc2NvcGUgPSBpbm5lclxuICAgICAgICB9XG4gICAgICAgIEVMRU1FTlRTID0gZGVmbi5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEVMRU1FTlRTID0gc2NvcGUuZGVmKERSQVdfU1RBVEUsICcuJywgU19FTEVNRU5UUylcbiAgICAgIH1cbiAgICAgIGlmIChFTEVNRU5UUykge1xuICAgICAgICBzY29wZShcbiAgICAgICAgICAnaWYoJyArIEVMRU1FTlRTICsgJyknICtcbiAgICAgICAgICBHTCArICcuYmluZEJ1ZmZlcignICsgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIkMSArICcsJyArIEVMRU1FTlRTICsgJy5idWZmZXIuYnVmZmVyKTsnKVxuICAgICAgfVxuICAgICAgcmV0dXJuIEVMRU1FTlRTXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdENvdW50ICgpIHtcbiAgICAgIHZhciBkZWZuID0gZHJhd09wdGlvbnMuY291bnRcbiAgICAgIHZhciBDT1VOVFxuICAgICAgdmFyIHNjb3BlID0gb3V0ZXJcbiAgICAgIGlmIChkZWZuKSB7XG4gICAgICAgIGlmICgoZGVmbi5jb250ZXh0RGVwICYmIGFyZ3MuY29udGV4dER5bmFtaWMpIHx8IGRlZm4ucHJvcERlcCkge1xuICAgICAgICAgIHNjb3BlID0gaW5uZXJcbiAgICAgICAgfVxuICAgICAgICBDT1VOVCA9IGRlZm4uYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChkZWZuLk1JU1NJTkcpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQob3V0ZXIsICdmYWxzZScsICdtaXNzaW5nIHZlcnRleCBjb3VudCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkZWZuLkRZTkFNSUMpIHtcbiAgICAgICAgICAgIGVudi5hc3NlcnQoc2NvcGUsIENPVU5UICsgJz49MCcsICdtaXNzaW5nIHZlcnRleCBjb3VudCcpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQ09VTlQgPSBzY29wZS5kZWYoRFJBV19TVEFURSwgJy4nLCBTX0NPVU5UKVxuICAgICAgICBjaGVjayQxLm9wdGlvbmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbnYuYXNzZXJ0KHNjb3BlLCBDT1VOVCArICc+PTAnLCAnbWlzc2luZyB2ZXJ0ZXggY291bnQnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIENPVU5UXG4gICAgfVxuXG4gICAgdmFyIEVMRU1FTlRTID0gZW1pdEVsZW1lbnRzKClcbiAgICBmdW5jdGlvbiBlbWl0VmFsdWUgKG5hbWUpIHtcbiAgICAgIHZhciBkZWZuID0gZHJhd09wdGlvbnNbbmFtZV1cbiAgICAgIGlmIChkZWZuKSB7XG4gICAgICAgIGlmICgoZGVmbi5jb250ZXh0RGVwICYmIGFyZ3MuY29udGV4dER5bmFtaWMpIHx8IGRlZm4ucHJvcERlcCkge1xuICAgICAgICAgIHJldHVybiBkZWZuLmFwcGVuZChlbnYsIGlubmVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBkZWZuLmFwcGVuZChlbnYsIG91dGVyKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb3V0ZXIuZGVmKERSQVdfU1RBVEUsICcuJywgbmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgUFJJTUlUSVZFID0gZW1pdFZhbHVlKFNfUFJJTUlUSVZFKVxuICAgIHZhciBPRkZTRVQgPSBlbWl0VmFsdWUoU19PRkZTRVQpXG5cbiAgICB2YXIgQ09VTlQgPSBlbWl0Q291bnQoKVxuICAgIGlmICh0eXBlb2YgQ09VTlQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoQ09VTlQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlubmVyKCdpZignLCBDT1VOVCwgJyl7JylcbiAgICAgIGlubmVyLmV4aXQoJ30nKVxuICAgIH1cblxuICAgIHZhciBJTlNUQU5DRVMsIEVYVF9JTlNUQU5DSU5HXG4gICAgaWYgKGV4dEluc3RhbmNpbmcpIHtcbiAgICAgIElOU1RBTkNFUyA9IGVtaXRWYWx1ZShTX0lOU1RBTkNFUylcbiAgICAgIEVYVF9JTlNUQU5DSU5HID0gZW52Lmluc3RhbmNpbmdcbiAgICB9XG5cbiAgICB2YXIgRUxFTUVOVF9UWVBFID0gRUxFTUVOVFMgKyAnLnR5cGUnXG5cbiAgICB2YXIgZWxlbWVudHNTdGF0aWMgPSBkcmF3T3B0aW9ucy5lbGVtZW50cyAmJiBpc1N0YXRpYyhkcmF3T3B0aW9ucy5lbGVtZW50cylcblxuICAgIGZ1bmN0aW9uIGVtaXRJbnN0YW5jaW5nICgpIHtcbiAgICAgIGZ1bmN0aW9uIGRyYXdFbGVtZW50cyAoKSB7XG4gICAgICAgIGlubmVyKEVYVF9JTlNUQU5DSU5HLCAnLmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKCcsIFtcbiAgICAgICAgICBQUklNSVRJVkUsXG4gICAgICAgICAgQ09VTlQsXG4gICAgICAgICAgRUxFTUVOVF9UWVBFLFxuICAgICAgICAgIE9GRlNFVCArICc8PCgoJyArIEVMRU1FTlRfVFlQRSArICctJyArIEdMX1VOU0lHTkVEX0JZVEUkOCArICcpPj4xKScsXG4gICAgICAgICAgSU5TVEFOQ0VTXG4gICAgICAgIF0sICcpOycpXG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRyYXdBcnJheXMgKCkge1xuICAgICAgICBpbm5lcihFWFRfSU5TVEFOQ0lORywgJy5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoJyxcbiAgICAgICAgICBbUFJJTUlUSVZFLCBPRkZTRVQsIENPVU5ULCBJTlNUQU5DRVNdLCAnKTsnKVxuICAgICAgfVxuXG4gICAgICBpZiAoRUxFTUVOVFMpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50c1N0YXRpYykge1xuICAgICAgICAgIGlubmVyKCdpZignLCBFTEVNRU5UUywgJyl7JylcbiAgICAgICAgICBkcmF3RWxlbWVudHMoKVxuICAgICAgICAgIGlubmVyKCd9ZWxzZXsnKVxuICAgICAgICAgIGRyYXdBcnJheXMoKVxuICAgICAgICAgIGlubmVyKCd9JylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkcmF3RWxlbWVudHMoKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkcmF3QXJyYXlzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0UmVndWxhciAoKSB7XG4gICAgICBmdW5jdGlvbiBkcmF3RWxlbWVudHMgKCkge1xuICAgICAgICBpbm5lcihHTCArICcuZHJhd0VsZW1lbnRzKCcgKyBbXG4gICAgICAgICAgUFJJTUlUSVZFLFxuICAgICAgICAgIENPVU5ULFxuICAgICAgICAgIEVMRU1FTlRfVFlQRSxcbiAgICAgICAgICBPRkZTRVQgKyAnPDwoKCcgKyBFTEVNRU5UX1RZUEUgKyAnLScgKyBHTF9VTlNJR05FRF9CWVRFJDggKyAnKT4+MSknXG4gICAgICAgIF0gKyAnKTsnKVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkcmF3QXJyYXlzICgpIHtcbiAgICAgICAgaW5uZXIoR0wgKyAnLmRyYXdBcnJheXMoJyArIFtQUklNSVRJVkUsIE9GRlNFVCwgQ09VTlRdICsgJyk7JylcbiAgICAgIH1cblxuICAgICAgaWYgKEVMRU1FTlRTKSB7XG4gICAgICAgIGlmICghZWxlbWVudHNTdGF0aWMpIHtcbiAgICAgICAgICBpbm5lcignaWYoJywgRUxFTUVOVFMsICcpeycpXG4gICAgICAgICAgZHJhd0VsZW1lbnRzKClcbiAgICAgICAgICBpbm5lcignfWVsc2V7JylcbiAgICAgICAgICBkcmF3QXJyYXlzKClcbiAgICAgICAgICBpbm5lcignfScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZHJhd0VsZW1lbnRzKClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhd0FycmF5cygpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4dEluc3RhbmNpbmcgJiYgKHR5cGVvZiBJTlNUQU5DRVMgIT09ICdudW1iZXInIHx8IElOU1RBTkNFUyA+PSAwKSkge1xuICAgICAgaWYgKHR5cGVvZiBJTlNUQU5DRVMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlubmVyKCdpZignLCBJTlNUQU5DRVMsICc+MCl7JylcbiAgICAgICAgZW1pdEluc3RhbmNpbmcoKVxuICAgICAgICBpbm5lcignfWVsc2UgaWYoJywgSU5TVEFOQ0VTLCAnPDApeycpXG4gICAgICAgIGVtaXRSZWd1bGFyKClcbiAgICAgICAgaW5uZXIoJ30nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW1pdEluc3RhbmNpbmcoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0UmVndWxhcigpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQm9keSAoZW1pdEJvZHksIHBhcmVudEVudiwgYXJncywgcHJvZ3JhbSwgY291bnQpIHtcbiAgICB2YXIgZW52ID0gY3JlYXRlUkVHTEVudmlyb25tZW50KClcbiAgICB2YXIgc2NvcGUgPSBlbnYucHJvYygnYm9keScsIGNvdW50KVxuICAgIGNoZWNrJDEub3B0aW9uYWwoZnVuY3Rpb24gKCkge1xuICAgICAgZW52LmNvbW1hbmRTdHIgPSBwYXJlbnRFbnYuY29tbWFuZFN0clxuICAgICAgZW52LmNvbW1hbmQgPSBlbnYubGluayhwYXJlbnRFbnYuY29tbWFuZFN0cilcbiAgICB9KVxuICAgIGlmIChleHRJbnN0YW5jaW5nKSB7XG4gICAgICBlbnYuaW5zdGFuY2luZyA9IHNjb3BlLmRlZihcbiAgICAgICAgZW52LnNoYXJlZC5leHRlbnNpb25zLCAnLmFuZ2xlX2luc3RhbmNlZF9hcnJheXMnKVxuICAgIH1cbiAgICBlbWl0Qm9keShlbnYsIHNjb3BlLCBhcmdzLCBwcm9ncmFtKVxuICAgIHJldHVybiBlbnYuY29tcGlsZSgpLmJvZHlcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRFJBVyBQUk9DXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZnVuY3Rpb24gZW1pdERyYXdCb2R5IChlbnYsIGRyYXcsIGFyZ3MsIHByb2dyYW0pIHtcbiAgICBpbmplY3RFeHRlbnNpb25zKGVudiwgZHJhdylcbiAgICBpZiAoYXJncy51c2VWQU8pIHtcbiAgICAgIGlmIChhcmdzLmRyYXdWQU8pIHtcbiAgICAgICAgZHJhdyhlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8oJywgYXJncy5kcmF3VkFPLmFwcGVuZChlbnYsIGRyYXcpLCAnKTsnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhdyhlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8oJywgZW52LnNoYXJlZC52YW8sICcudGFyZ2V0VkFPKTsnKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkcmF3KGVudi5zaGFyZWQudmFvLCAnLnNldFZBTyhudWxsKTsnKVxuICAgICAgZW1pdEF0dHJpYnV0ZXMoZW52LCBkcmF3LCBhcmdzLCBwcm9ncmFtLmF0dHJpYnV0ZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgfVxuICAgIGVtaXRVbmlmb3JtcyhlbnYsIGRyYXcsIGFyZ3MsIHByb2dyYW0udW5pZm9ybXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSlcbiAgICBlbWl0RHJhdyhlbnYsIGRyYXcsIGRyYXcsIGFyZ3MpXG4gIH1cblxuICBmdW5jdGlvbiBlbWl0RHJhd1Byb2MgKGVudiwgYXJncykge1xuICAgIHZhciBkcmF3ID0gZW52LnByb2MoJ2RyYXcnLCAxKVxuXG4gICAgaW5qZWN0RXh0ZW5zaW9ucyhlbnYsIGRyYXcpXG5cbiAgICBlbWl0Q29udGV4dChlbnYsIGRyYXcsIGFyZ3MuY29udGV4dClcbiAgICBlbWl0UG9sbEZyYW1lYnVmZmVyKGVudiwgZHJhdywgYXJncy5mcmFtZWJ1ZmZlcilcblxuICAgIGVtaXRQb2xsU3RhdGUoZW52LCBkcmF3LCBhcmdzKVxuICAgIGVtaXRTZXRPcHRpb25zKGVudiwgZHJhdywgYXJncy5zdGF0ZSlcblxuICAgIGVtaXRQcm9maWxlKGVudiwgZHJhdywgYXJncywgZmFsc2UsIHRydWUpXG5cbiAgICB2YXIgcHJvZ3JhbSA9IGFyZ3Muc2hhZGVyLnByb2dWYXIuYXBwZW5kKGVudiwgZHJhdylcbiAgICBkcmF3KGVudi5zaGFyZWQuZ2wsICcudXNlUHJvZ3JhbSgnLCBwcm9ncmFtLCAnLnByb2dyYW0pOycpXG5cbiAgICBpZiAoYXJncy5zaGFkZXIucHJvZ3JhbSkge1xuICAgICAgZW1pdERyYXdCb2R5KGVudiwgZHJhdywgYXJncywgYXJncy5zaGFkZXIucHJvZ3JhbSlcbiAgICB9IGVsc2Uge1xuICAgICAgZHJhdyhlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8obnVsbCk7JylcbiAgICAgIHZhciBkcmF3Q2FjaGUgPSBlbnYuZ2xvYmFsLmRlZigne30nKVxuICAgICAgdmFyIFBST0dfSUQgPSBkcmF3LmRlZihwcm9ncmFtLCAnLmlkJylcbiAgICAgIHZhciBDQUNIRURfUFJPQyA9IGRyYXcuZGVmKGRyYXdDYWNoZSwgJ1snLCBQUk9HX0lELCAnXScpXG4gICAgICBkcmF3KFxuICAgICAgICBlbnYuY29uZChDQUNIRURfUFJPQylcbiAgICAgICAgICAudGhlbihDQUNIRURfUFJPQywgJy5jYWxsKHRoaXMsYTApOycpXG4gICAgICAgICAgLmVsc2UoXG4gICAgICAgICAgICBDQUNIRURfUFJPQywgJz0nLCBkcmF3Q2FjaGUsICdbJywgUFJPR19JRCwgJ109JyxcbiAgICAgICAgICAgIGVudi5saW5rKGZ1bmN0aW9uIChwcm9ncmFtKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCb2R5KGVtaXREcmF3Qm9keSwgZW52LCBhcmdzLCBwcm9ncmFtLCAxKVxuICAgICAgICAgICAgfSksICcoJywgcHJvZ3JhbSwgJyk7JyxcbiAgICAgICAgICAgIENBQ0hFRF9QUk9DLCAnLmNhbGwodGhpcyxhMCk7JykpXG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGFyZ3Muc3RhdGUpLmxlbmd0aCA+IDApIHtcbiAgICAgIGRyYXcoZW52LnNoYXJlZC5jdXJyZW50LCAnLmRpcnR5PXRydWU7JylcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEJBVENIIFBST0NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGZ1bmN0aW9uIGVtaXRCYXRjaER5bmFtaWNTaGFkZXJCb2R5IChlbnYsIHNjb3BlLCBhcmdzLCBwcm9ncmFtKSB7XG4gICAgZW52LmJhdGNoSWQgPSAnYTEnXG5cbiAgICBpbmplY3RFeHRlbnNpb25zKGVudiwgc2NvcGUpXG5cbiAgICBmdW5jdGlvbiBhbGwgKCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBlbWl0QXR0cmlidXRlcyhlbnYsIHNjb3BlLCBhcmdzLCBwcm9ncmFtLmF0dHJpYnV0ZXMsIGFsbClcbiAgICBlbWl0VW5pZm9ybXMoZW52LCBzY29wZSwgYXJncywgcHJvZ3JhbS51bmlmb3JtcywgYWxsKVxuICAgIGVtaXREcmF3KGVudiwgc2NvcGUsIHNjb3BlLCBhcmdzKVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdEJhdGNoQm9keSAoZW52LCBzY29wZSwgYXJncywgcHJvZ3JhbSkge1xuICAgIGluamVjdEV4dGVuc2lvbnMoZW52LCBzY29wZSlcblxuICAgIHZhciBjb250ZXh0RHluYW1pYyA9IGFyZ3MuY29udGV4dERlcFxuXG4gICAgdmFyIEJBVENIX0lEID0gc2NvcGUuZGVmKClcbiAgICB2YXIgUFJPUF9MSVNUID0gJ2EwJ1xuICAgIHZhciBOVU1fUFJPUFMgPSAnYTEnXG4gICAgdmFyIFBST1BTID0gc2NvcGUuZGVmKClcbiAgICBlbnYuc2hhcmVkLnByb3BzID0gUFJPUFNcbiAgICBlbnYuYmF0Y2hJZCA9IEJBVENIX0lEXG5cbiAgICB2YXIgb3V0ZXIgPSBlbnYuc2NvcGUoKVxuICAgIHZhciBpbm5lciA9IGVudi5zY29wZSgpXG5cbiAgICBzY29wZShcbiAgICAgIG91dGVyLmVudHJ5LFxuICAgICAgJ2ZvcignLCBCQVRDSF9JRCwgJz0wOycsIEJBVENIX0lELCAnPCcsIE5VTV9QUk9QUywgJzsrKycsIEJBVENIX0lELCAnKXsnLFxuICAgICAgUFJPUFMsICc9JywgUFJPUF9MSVNULCAnWycsIEJBVENIX0lELCAnXTsnLFxuICAgICAgaW5uZXIsXG4gICAgICAnfScsXG4gICAgICBvdXRlci5leGl0KVxuXG4gICAgZnVuY3Rpb24gaXNJbm5lckRlZm4gKGRlZm4pIHtcbiAgICAgIHJldHVybiAoKGRlZm4uY29udGV4dERlcCAmJiBjb250ZXh0RHluYW1pYykgfHwgZGVmbi5wcm9wRGVwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT3V0ZXJEZWZuIChkZWZuKSB7XG4gICAgICByZXR1cm4gIWlzSW5uZXJEZWZuKGRlZm4pXG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubmVlZHNDb250ZXh0KSB7XG4gICAgICBlbWl0Q29udGV4dChlbnYsIGlubmVyLCBhcmdzLmNvbnRleHQpXG4gICAgfVxuICAgIGlmIChhcmdzLm5lZWRzRnJhbWVidWZmZXIpIHtcbiAgICAgIGVtaXRQb2xsRnJhbWVidWZmZXIoZW52LCBpbm5lciwgYXJncy5mcmFtZWJ1ZmZlcilcbiAgICB9XG4gICAgZW1pdFNldE9wdGlvbnMoZW52LCBpbm5lciwgYXJncy5zdGF0ZSwgaXNJbm5lckRlZm4pXG5cbiAgICBpZiAoYXJncy5wcm9maWxlICYmIGlzSW5uZXJEZWZuKGFyZ3MucHJvZmlsZSkpIHtcbiAgICAgIGVtaXRQcm9maWxlKGVudiwgaW5uZXIsIGFyZ3MsIGZhbHNlLCB0cnVlKVxuICAgIH1cblxuICAgIGlmICghcHJvZ3JhbSkge1xuICAgICAgdmFyIHByb2dDYWNoZSA9IGVudi5nbG9iYWwuZGVmKCd7fScpXG4gICAgICB2YXIgUFJPR1JBTSA9IGFyZ3Muc2hhZGVyLnByb2dWYXIuYXBwZW5kKGVudiwgaW5uZXIpXG4gICAgICB2YXIgUFJPR19JRCA9IGlubmVyLmRlZihQUk9HUkFNLCAnLmlkJylcbiAgICAgIHZhciBDQUNIRURfUFJPQyA9IGlubmVyLmRlZihwcm9nQ2FjaGUsICdbJywgUFJPR19JRCwgJ10nKVxuICAgICAgaW5uZXIoXG4gICAgICAgIGVudi5zaGFyZWQuZ2wsICcudXNlUHJvZ3JhbSgnLCBQUk9HUkFNLCAnLnByb2dyYW0pOycsXG4gICAgICAgICdpZighJywgQ0FDSEVEX1BST0MsICcpeycsXG4gICAgICAgIENBQ0hFRF9QUk9DLCAnPScsIHByb2dDYWNoZSwgJ1snLCBQUk9HX0lELCAnXT0nLFxuICAgICAgICBlbnYubGluayhmdW5jdGlvbiAocHJvZ3JhbSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVCb2R5KFxuICAgICAgICAgICAgZW1pdEJhdGNoRHluYW1pY1NoYWRlckJvZHksIGVudiwgYXJncywgcHJvZ3JhbSwgMilcbiAgICAgICAgfSksICcoJywgUFJPR1JBTSwgJyk7fScsXG4gICAgICAgIENBQ0hFRF9QUk9DLCAnLmNhbGwodGhpcyxhMFsnLCBCQVRDSF9JRCwgJ10sJywgQkFUQ0hfSUQsICcpOycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChhcmdzLnVzZVZBTykge1xuICAgICAgICBpZiAoYXJncy5kcmF3VkFPKSB7XG4gICAgICAgICAgaWYgKGlzSW5uZXJEZWZuKGFyZ3MuZHJhd1ZBTykpIHtcbiAgICAgICAgICAgIC8vIHZhbyBpcyBhIHByb3BcbiAgICAgICAgICAgIGlubmVyKGVudi5zaGFyZWQudmFvLCAnLnNldFZBTygnLCBhcmdzLmRyYXdWQU8uYXBwZW5kKGVudiwgaW5uZXIpLCAnKTsnKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB2YW8gaXMgaW52YXJpYW50XG4gICAgICAgICAgICBvdXRlcihlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8oJywgYXJncy5kcmF3VkFPLmFwcGVuZChlbnYsIG91dGVyKSwgJyk7JylcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gc2NvcGVkIHZhbyBiaW5kaW5nXG4gICAgICAgICAgb3V0ZXIoZW52LnNoYXJlZC52YW8sICcuc2V0VkFPKCcsIGVudi5zaGFyZWQudmFvLCAnLnRhcmdldFZBTyk7JylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ZXIoZW52LnNoYXJlZC52YW8sICcuc2V0VkFPKG51bGwpOycpXG4gICAgICAgIGVtaXRBdHRyaWJ1dGVzKGVudiwgb3V0ZXIsIGFyZ3MsIHByb2dyYW0uYXR0cmlidXRlcywgaXNPdXRlckRlZm4pXG4gICAgICAgIGVtaXRBdHRyaWJ1dGVzKGVudiwgaW5uZXIsIGFyZ3MsIHByb2dyYW0uYXR0cmlidXRlcywgaXNJbm5lckRlZm4pXG4gICAgICB9XG4gICAgICBlbWl0VW5pZm9ybXMoZW52LCBvdXRlciwgYXJncywgcHJvZ3JhbS51bmlmb3JtcywgaXNPdXRlckRlZm4pXG4gICAgICBlbWl0VW5pZm9ybXMoZW52LCBpbm5lciwgYXJncywgcHJvZ3JhbS51bmlmb3JtcywgaXNJbm5lckRlZm4pXG4gICAgICBlbWl0RHJhdyhlbnYsIG91dGVyLCBpbm5lciwgYXJncylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbWl0QmF0Y2hQcm9jIChlbnYsIGFyZ3MpIHtcbiAgICB2YXIgYmF0Y2ggPSBlbnYucHJvYygnYmF0Y2gnLCAyKVxuICAgIGVudi5iYXRjaElkID0gJzAnXG5cbiAgICBpbmplY3RFeHRlbnNpb25zKGVudiwgYmF0Y2gpXG5cbiAgICAvLyBDaGVjayBpZiBhbnkgY29udGV4dCB2YXJpYWJsZXMgZGVwZW5kIG9uIHByb3BzXG4gICAgdmFyIGNvbnRleHREeW5hbWljID0gZmFsc2VcbiAgICB2YXIgbmVlZHNDb250ZXh0ID0gdHJ1ZVxuICAgIE9iamVjdC5rZXlzKGFyZ3MuY29udGV4dCkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgY29udGV4dER5bmFtaWMgPSBjb250ZXh0RHluYW1pYyB8fCBhcmdzLmNvbnRleHRbbmFtZV0ucHJvcERlcFxuICAgIH0pXG4gICAgaWYgKCFjb250ZXh0RHluYW1pYykge1xuICAgICAgZW1pdENvbnRleHQoZW52LCBiYXRjaCwgYXJncy5jb250ZXh0KVxuICAgICAgbmVlZHNDb250ZXh0ID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBmcmFtZWJ1ZmZlciBzdGF0ZSBhZmZlY3RzIGZyYW1lYnVmZmVyV2lkdGgvaGVpZ2h0IGNvbnRleHQgdmFyc1xuICAgIHZhciBmcmFtZWJ1ZmZlciA9IGFyZ3MuZnJhbWVidWZmZXJcbiAgICB2YXIgbmVlZHNGcmFtZWJ1ZmZlciA9IGZhbHNlXG4gICAgaWYgKGZyYW1lYnVmZmVyKSB7XG4gICAgICBpZiAoZnJhbWVidWZmZXIucHJvcERlcCkge1xuICAgICAgICBjb250ZXh0RHluYW1pYyA9IG5lZWRzRnJhbWVidWZmZXIgPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGZyYW1lYnVmZmVyLmNvbnRleHREZXAgJiYgY29udGV4dER5bmFtaWMpIHtcbiAgICAgICAgbmVlZHNGcmFtZWJ1ZmZlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICghbmVlZHNGcmFtZWJ1ZmZlcikge1xuICAgICAgICBlbWl0UG9sbEZyYW1lYnVmZmVyKGVudiwgYmF0Y2gsIGZyYW1lYnVmZmVyKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0UG9sbEZyYW1lYnVmZmVyKGVudiwgYmF0Y2gsIG51bGwpXG4gICAgfVxuXG4gICAgLy8gdmlld3BvcnQgaXMgd2VpcmQgYmVjYXVzZSBpdCBjYW4gYWZmZWN0IGNvbnRleHQgdmFyc1xuICAgIGlmIChhcmdzLnN0YXRlLnZpZXdwb3J0ICYmIGFyZ3Muc3RhdGUudmlld3BvcnQucHJvcERlcCkge1xuICAgICAgY29udGV4dER5bmFtaWMgPSB0cnVlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJbm5lckRlZm4gKGRlZm4pIHtcbiAgICAgIHJldHVybiAoZGVmbi5jb250ZXh0RGVwICYmIGNvbnRleHREeW5hbWljKSB8fCBkZWZuLnByb3BEZXBcbiAgICB9XG5cbiAgICAvLyBzZXQgd2ViZ2wgb3B0aW9uc1xuICAgIGVtaXRQb2xsU3RhdGUoZW52LCBiYXRjaCwgYXJncylcbiAgICBlbWl0U2V0T3B0aW9ucyhlbnYsIGJhdGNoLCBhcmdzLnN0YXRlLCBmdW5jdGlvbiAoZGVmbikge1xuICAgICAgcmV0dXJuICFpc0lubmVyRGVmbihkZWZuKVxuICAgIH0pXG5cbiAgICBpZiAoIWFyZ3MucHJvZmlsZSB8fCAhaXNJbm5lckRlZm4oYXJncy5wcm9maWxlKSkge1xuICAgICAgZW1pdFByb2ZpbGUoZW52LCBiYXRjaCwgYXJncywgZmFsc2UsICdhMScpXG4gICAgfVxuXG4gICAgLy8gU2F2ZSB0aGVzZSB2YWx1ZXMgdG8gYXJncyBzbyB0aGF0IHRoZSBiYXRjaCBib2R5IHJvdXRpbmUgY2FuIHVzZSB0aGVtXG4gICAgYXJncy5jb250ZXh0RGVwID0gY29udGV4dER5bmFtaWNcbiAgICBhcmdzLm5lZWRzQ29udGV4dCA9IG5lZWRzQ29udGV4dFxuICAgIGFyZ3MubmVlZHNGcmFtZWJ1ZmZlciA9IG5lZWRzRnJhbWVidWZmZXJcblxuICAgIC8vIGRldGVybWluZSBpZiBzaGFkZXIgaXMgZHluYW1pY1xuICAgIHZhciBwcm9nRGVmbiA9IGFyZ3Muc2hhZGVyLnByb2dWYXJcbiAgICBpZiAoKHByb2dEZWZuLmNvbnRleHREZXAgJiYgY29udGV4dER5bmFtaWMpIHx8IHByb2dEZWZuLnByb3BEZXApIHtcbiAgICAgIGVtaXRCYXRjaEJvZHkoXG4gICAgICAgIGVudixcbiAgICAgICAgYmF0Y2gsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBQUk9HUkFNID0gcHJvZ0RlZm4uYXBwZW5kKGVudiwgYmF0Y2gpXG4gICAgICBiYXRjaChlbnYuc2hhcmVkLmdsLCAnLnVzZVByb2dyYW0oJywgUFJPR1JBTSwgJy5wcm9ncmFtKTsnKVxuICAgICAgaWYgKGFyZ3Muc2hhZGVyLnByb2dyYW0pIHtcbiAgICAgICAgZW1pdEJhdGNoQm9keShcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgYmF0Y2gsXG4gICAgICAgICAgYXJncyxcbiAgICAgICAgICBhcmdzLnNoYWRlci5wcm9ncmFtKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmF0Y2goZW52LnNoYXJlZC52YW8sICcuc2V0VkFPKG51bGwpOycpXG4gICAgICAgIHZhciBiYXRjaENhY2hlID0gZW52Lmdsb2JhbC5kZWYoJ3t9JylcbiAgICAgICAgdmFyIFBST0dfSUQgPSBiYXRjaC5kZWYoUFJPR1JBTSwgJy5pZCcpXG4gICAgICAgIHZhciBDQUNIRURfUFJPQyA9IGJhdGNoLmRlZihiYXRjaENhY2hlLCAnWycsIFBST0dfSUQsICddJylcbiAgICAgICAgYmF0Y2goXG4gICAgICAgICAgZW52LmNvbmQoQ0FDSEVEX1BST0MpXG4gICAgICAgICAgICAudGhlbihDQUNIRURfUFJPQywgJy5jYWxsKHRoaXMsYTAsYTEpOycpXG4gICAgICAgICAgICAuZWxzZShcbiAgICAgICAgICAgICAgQ0FDSEVEX1BST0MsICc9JywgYmF0Y2hDYWNoZSwgJ1snLCBQUk9HX0lELCAnXT0nLFxuICAgICAgICAgICAgICBlbnYubGluayhmdW5jdGlvbiAocHJvZ3JhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCb2R5KGVtaXRCYXRjaEJvZHksIGVudiwgYXJncywgcHJvZ3JhbSwgMilcbiAgICAgICAgICAgICAgfSksICcoJywgUFJPR1JBTSwgJyk7JyxcbiAgICAgICAgICAgICAgQ0FDSEVEX1BST0MsICcuY2FsbCh0aGlzLGEwLGExKTsnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoYXJncy5zdGF0ZSkubGVuZ3RoID4gMCkge1xuICAgICAgYmF0Y2goZW52LnNoYXJlZC5jdXJyZW50LCAnLmRpcnR5PXRydWU7JylcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNDT1BFIENPTU1BTkRcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBmdW5jdGlvbiBlbWl0U2NvcGVQcm9jIChlbnYsIGFyZ3MpIHtcbiAgICB2YXIgc2NvcGUgPSBlbnYucHJvYygnc2NvcGUnLCAzKVxuICAgIGVudi5iYXRjaElkID0gJ2EyJ1xuXG4gICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcbiAgICB2YXIgQ1VSUkVOVF9TVEFURSA9IHNoYXJlZC5jdXJyZW50XG5cbiAgICBlbWl0Q29udGV4dChlbnYsIHNjb3BlLCBhcmdzLmNvbnRleHQpXG5cbiAgICBpZiAoYXJncy5mcmFtZWJ1ZmZlcikge1xuICAgICAgYXJncy5mcmFtZWJ1ZmZlci5hcHBlbmQoZW52LCBzY29wZSlcbiAgICB9XG5cbiAgICBzb3J0U3RhdGUoT2JqZWN0LmtleXMoYXJncy5zdGF0ZSkpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBkZWZuID0gYXJncy5zdGF0ZVtuYW1lXVxuICAgICAgdmFyIHZhbHVlID0gZGVmbi5hcHBlbmQoZW52LCBzY29wZSlcbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAodiwgaSkge1xuICAgICAgICAgIHNjb3BlLnNldChlbnYubmV4dFtuYW1lXSwgJ1snICsgaSArICddJywgdilcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjb3BlLnNldChzaGFyZWQubmV4dCwgJy4nICsgbmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGVtaXRQcm9maWxlKGVudiwgc2NvcGUsIGFyZ3MsIHRydWUsIHRydWUpXG5cbiAgICA7W1NfRUxFTUVOVFMsIFNfT0ZGU0VULCBTX0NPVU5ULCBTX0lOU1RBTkNFUywgU19QUklNSVRJVkVdLmZvckVhY2goXG4gICAgICBmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgIHZhciB2YXJpYWJsZSA9IGFyZ3MuZHJhd1tvcHRdXG4gICAgICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBzY29wZS5zZXQoc2hhcmVkLmRyYXcsICcuJyArIG9wdCwgJycgKyB2YXJpYWJsZS5hcHBlbmQoZW52LCBzY29wZSkpXG4gICAgICB9KVxuXG4gICAgT2JqZWN0LmtleXMoYXJncy51bmlmb3JtcykuZm9yRWFjaChmdW5jdGlvbiAob3B0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcmdzLnVuaWZvcm1zW29wdF0uYXBwZW5kKGVudiwgc2NvcGUpXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSAnWycgKyB2YWx1ZS5qb2luKCkgKyAnXSdcbiAgICAgIH1cbiAgICAgIHNjb3BlLnNldChcbiAgICAgICAgc2hhcmVkLnVuaWZvcm1zLFxuICAgICAgICAnWycgKyBzdHJpbmdTdG9yZS5pZChvcHQpICsgJ10nLFxuICAgICAgICB2YWx1ZSlcbiAgICB9KVxuXG4gICAgT2JqZWN0LmtleXMoYXJncy5hdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgcmVjb3JkID0gYXJncy5hdHRyaWJ1dGVzW25hbWVdLmFwcGVuZChlbnYsIHNjb3BlKVxuICAgICAgdmFyIHNjb3BlQXR0cmliID0gZW52LnNjb3BlQXR0cmliKG5hbWUpXG4gICAgICBPYmplY3Qua2V5cyhuZXcgQXR0cmlidXRlUmVjb3JkKCkpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgc2NvcGUuc2V0KHNjb3BlQXR0cmliLCAnLicgKyBwcm9wLCByZWNvcmRbcHJvcF0pXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoYXJncy5zY29wZVZBTykge1xuICAgICAgc2NvcGUuc2V0KHNoYXJlZC52YW8sICcudGFyZ2V0VkFPJywgYXJncy5zY29wZVZBTy5hcHBlbmQoZW52LCBzY29wZSkpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2F2ZVNoYWRlciAobmFtZSkge1xuICAgICAgdmFyIHNoYWRlciA9IGFyZ3Muc2hhZGVyW25hbWVdXG4gICAgICBpZiAoc2hhZGVyKSB7XG4gICAgICAgIHNjb3BlLnNldChzaGFyZWQuc2hhZGVyLCAnLicgKyBuYW1lLCBzaGFkZXIuYXBwZW5kKGVudiwgc2NvcGUpKVxuICAgICAgfVxuICAgIH1cbiAgICBzYXZlU2hhZGVyKFNfVkVSVClcbiAgICBzYXZlU2hhZGVyKFNfRlJBRylcblxuICAgIGlmIChPYmplY3Qua2V5cyhhcmdzLnN0YXRlKS5sZW5ndGggPiAwKSB7XG4gICAgICBzY29wZShDVVJSRU5UX1NUQVRFLCAnLmRpcnR5PXRydWU7JylcbiAgICAgIHNjb3BlLmV4aXQoQ1VSUkVOVF9TVEFURSwgJy5kaXJ0eT10cnVlOycpXG4gICAgfVxuXG4gICAgc2NvcGUoJ2ExKCcsIGVudi5zaGFyZWQuY29udGV4dCwgJyxhMCwnLCBlbnYuYmF0Y2hJZCwgJyk7JylcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRHluYW1pY09iamVjdCAob2JqZWN0KSB7XG4gICAgaWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnIHx8IGlzQXJyYXlMaWtlKG9iamVjdCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGR5bmFtaWMuaXNEeW5hbWljKG9iamVjdFtwcm9wc1tpXV0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gc3BsYXRPYmplY3QgKGVudiwgb3B0aW9ucywgbmFtZSkge1xuICAgIHZhciBvYmplY3QgPSBvcHRpb25zLnN0YXRpY1tuYW1lXVxuICAgIGlmICghb2JqZWN0IHx8ICFpc0R5bmFtaWNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGdsb2JhbHMgPSBlbnYuZ2xvYmFsXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgdmFyIHRoaXNEZXAgPSBmYWxzZVxuICAgIHZhciBjb250ZXh0RGVwID0gZmFsc2VcbiAgICB2YXIgcHJvcERlcCA9IGZhbHNlXG4gICAgdmFyIG9iamVjdFJlZiA9IGVudi5nbG9iYWwuZGVmKCd7fScpXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldXG4gICAgICBpZiAoZHluYW1pYy5pc0R5bmFtaWModmFsdWUpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldID0gZHluYW1pYy51bmJveCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVwcyA9IGNyZWF0ZUR5bmFtaWNEZWNsKHZhbHVlLCBudWxsKVxuICAgICAgICB0aGlzRGVwID0gdGhpc0RlcCB8fCBkZXBzLnRoaXNEZXBcbiAgICAgICAgcHJvcERlcCA9IHByb3BEZXAgfHwgZGVwcy5wcm9wRGVwXG4gICAgICAgIGNvbnRleHREZXAgPSBjb250ZXh0RGVwIHx8IGRlcHMuY29udGV4dERlcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2xvYmFscyhvYmplY3RSZWYsICcuJywga2V5LCAnPScpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIGdsb2JhbHModmFsdWUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBnbG9iYWxzKCdcIicsIHZhbHVlLCAnXCInKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIGdsb2JhbHMoJ1snLCB2YWx1ZS5qb2luKCksICddJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGdsb2JhbHMoZW52LmxpbmsodmFsdWUpKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBnbG9iYWxzKCc7JylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgZnVuY3Rpb24gYXBwZW5kQmxvY2sgKGVudiwgYmxvY2spIHtcbiAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldXG4gICAgICAgIGlmICghZHluYW1pYy5pc0R5bmFtaWModmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlZiA9IGVudi5pbnZva2UoYmxvY2ssIHZhbHVlKVxuICAgICAgICBibG9jayhvYmplY3RSZWYsICcuJywga2V5LCAnPScsIHJlZiwgJzsnKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBvcHRpb25zLmR5bmFtaWNbbmFtZV0gPSBuZXcgZHluYW1pYy5EeW5hbWljVmFyaWFibGUoRFlOX1RIVU5LLCB7XG4gICAgICB0aGlzRGVwOiB0aGlzRGVwLFxuICAgICAgY29udGV4dERlcDogY29udGV4dERlcCxcbiAgICAgIHByb3BEZXA6IHByb3BEZXAsXG4gICAgICByZWY6IG9iamVjdFJlZixcbiAgICAgIGFwcGVuZDogYXBwZW5kQmxvY2tcbiAgICB9KVxuICAgIGRlbGV0ZSBvcHRpb25zLnN0YXRpY1tuYW1lXVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNQUlOIERSQVcgQ09NTUFORFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGZ1bmN0aW9uIGNvbXBpbGVDb21tYW5kIChvcHRpb25zLCBhdHRyaWJ1dGVzLCB1bmlmb3JtcywgY29udGV4dCwgc3RhdHMpIHtcbiAgICB2YXIgZW52ID0gY3JlYXRlUkVHTEVudmlyb25tZW50KClcblxuICAgIC8vIGxpbmsgc3RhdHMsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBhY2Nlc3MgaXQgaW4gdGhlIHByb2dyYW0uXG4gICAgZW52LnN0YXRzID0gZW52Lmxpbmsoc3RhdHMpXG5cbiAgICAvLyBzcGxhdCBvcHRpb25zIGFuZCBhdHRyaWJ1dGVzIHRvIGFsbG93IGZvciBkeW5hbWljIG5lc3RlZCBwcm9wZXJ0aWVzXG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcy5zdGF0aWMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgc3BsYXRPYmplY3QoZW52LCBhdHRyaWJ1dGVzLCBrZXkpXG4gICAgfSlcbiAgICBORVNURURfT1BUSU9OUy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBzcGxhdE9iamVjdChlbnYsIG9wdGlvbnMsIG5hbWUpXG4gICAgfSlcblxuICAgIHZhciBhcmdzID0gcGFyc2VBcmd1bWVudHMob3B0aW9ucywgYXR0cmlidXRlcywgdW5pZm9ybXMsIGNvbnRleHQsIGVudilcblxuICAgIGVtaXREcmF3UHJvYyhlbnYsIGFyZ3MpXG4gICAgZW1pdFNjb3BlUHJvYyhlbnYsIGFyZ3MpXG4gICAgZW1pdEJhdGNoUHJvYyhlbnYsIGFyZ3MpXG5cbiAgICByZXR1cm4gZXh0ZW5kKGVudi5jb21waWxlKCksIHtcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXJncy5zaGFkZXIucHJvZ3JhbS5kZXN0cm95KClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQT0xMIC8gUkVGUkVTSFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHJldHVybiB7XG4gICAgbmV4dDogbmV4dFN0YXRlLFxuICAgIGN1cnJlbnQ6IGN1cnJlbnRTdGF0ZSxcbiAgICBwcm9jczogKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBlbnYgPSBjcmVhdGVSRUdMRW52aXJvbm1lbnQoKVxuICAgICAgdmFyIHBvbGwgPSBlbnYucHJvYygncG9sbCcpXG4gICAgICB2YXIgcmVmcmVzaCA9IGVudi5wcm9jKCdyZWZyZXNoJylcbiAgICAgIHZhciBjb21tb24gPSBlbnYuYmxvY2soKVxuICAgICAgcG9sbChjb21tb24pXG4gICAgICByZWZyZXNoKGNvbW1vbilcblxuICAgICAgdmFyIHNoYXJlZCA9IGVudi5zaGFyZWRcbiAgICAgIHZhciBHTCA9IHNoYXJlZC5nbFxuICAgICAgdmFyIE5FWFRfU1RBVEUgPSBzaGFyZWQubmV4dFxuICAgICAgdmFyIENVUlJFTlRfU1RBVEUgPSBzaGFyZWQuY3VycmVudFxuXG4gICAgICBjb21tb24oQ1VSUkVOVF9TVEFURSwgJy5kaXJ0eT1mYWxzZTsnKVxuXG4gICAgICBlbWl0UG9sbEZyYW1lYnVmZmVyKGVudiwgcG9sbClcbiAgICAgIGVtaXRQb2xsRnJhbWVidWZmZXIoZW52LCByZWZyZXNoLCBudWxsLCB0cnVlKVxuXG4gICAgICAvLyBSZWZyZXNoIHVwZGF0ZXMgYWxsIGF0dHJpYnV0ZSBzdGF0ZSBjaGFuZ2VzXG4gICAgICB2YXIgSU5TVEFOQ0lOR1xuICAgICAgaWYgKGV4dEluc3RhbmNpbmcpIHtcbiAgICAgICAgSU5TVEFOQ0lORyA9IGVudi5saW5rKGV4dEluc3RhbmNpbmcpXG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSB2ZXJ0ZXggYXJyYXkgYmluZGluZ3NcbiAgICAgIGlmIChleHRlbnNpb25zLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0KSB7XG4gICAgICAgIHJlZnJlc2goZW52LmxpbmsoZXh0ZW5zaW9ucy5vZXNfdmVydGV4X2FycmF5X29iamVjdCksICcuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOycpXG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbWl0cy5tYXhBdHRyaWJ1dGVzOyArK2kpIHtcbiAgICAgICAgdmFyIEJJTkRJTkcgPSByZWZyZXNoLmRlZihzaGFyZWQuYXR0cmlidXRlcywgJ1snLCBpLCAnXScpXG4gICAgICAgIHZhciBpZnRlID0gZW52LmNvbmQoQklORElORywgJy5idWZmZXInKVxuICAgICAgICBpZnRlLnRoZW4oXG4gICAgICAgICAgR0wsICcuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoJywgaSwgJyk7JyxcbiAgICAgICAgICBHTCwgJy5iaW5kQnVmZmVyKCcsXG4gICAgICAgICAgR0xfQVJSQVlfQlVGRkVSJDIsICcsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLmJ1ZmZlci5idWZmZXIpOycsXG4gICAgICAgICAgR0wsICcudmVydGV4QXR0cmliUG9pbnRlcignLFxuICAgICAgICAgIGksICcsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnNpemUsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnR5cGUsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLm5vcm1hbGl6ZWQsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnN0cmlkZSwnLFxuICAgICAgICAgIEJJTkRJTkcsICcub2Zmc2V0KTsnXG4gICAgICAgICkuZWxzZShcbiAgICAgICAgICBHTCwgJy5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoJywgaSwgJyk7JyxcbiAgICAgICAgICBHTCwgJy52ZXJ0ZXhBdHRyaWI0ZignLFxuICAgICAgICAgIGksICcsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLngsJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnksJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLnosJyxcbiAgICAgICAgICBCSU5ESU5HLCAnLncpOycsXG4gICAgICAgICAgQklORElORywgJy5idWZmZXI9bnVsbDsnKVxuICAgICAgICByZWZyZXNoKGlmdGUpXG4gICAgICAgIGlmIChleHRJbnN0YW5jaW5nKSB7XG4gICAgICAgICAgcmVmcmVzaChcbiAgICAgICAgICAgIElOU1RBTkNJTkcsICcudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCcsXG4gICAgICAgICAgICBpLCAnLCcsXG4gICAgICAgICAgICBCSU5ESU5HLCAnLmRpdmlzb3IpOycpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlZnJlc2goXG4gICAgICAgIGVudi5zaGFyZWQudmFvLCAnLmN1cnJlbnRWQU89bnVsbDsnLFxuICAgICAgICBlbnYuc2hhcmVkLnZhbywgJy5zZXRWQU8oJywgZW52LnNoYXJlZC52YW8sICcudGFyZ2V0VkFPKTsnKVxuXG4gICAgICBPYmplY3Qua2V5cyhHTF9GTEFHUykuZm9yRWFjaChmdW5jdGlvbiAoZmxhZykge1xuICAgICAgICB2YXIgY2FwID0gR0xfRkxBR1NbZmxhZ11cbiAgICAgICAgdmFyIE5FWFQgPSBjb21tb24uZGVmKE5FWFRfU1RBVEUsICcuJywgZmxhZylcbiAgICAgICAgdmFyIGJsb2NrID0gZW52LmJsb2NrKClcbiAgICAgICAgYmxvY2soJ2lmKCcsIE5FWFQsICcpeycsXG4gICAgICAgICAgR0wsICcuZW5hYmxlKCcsIGNhcCwgJyl9ZWxzZXsnLFxuICAgICAgICAgIEdMLCAnLmRpc2FibGUoJywgY2FwLCAnKX0nLFxuICAgICAgICAgIENVUlJFTlRfU1RBVEUsICcuJywgZmxhZywgJz0nLCBORVhULCAnOycpXG4gICAgICAgIHJlZnJlc2goYmxvY2spXG4gICAgICAgIHBvbGwoXG4gICAgICAgICAgJ2lmKCcsIE5FWFQsICchPT0nLCBDVVJSRU5UX1NUQVRFLCAnLicsIGZsYWcsICcpeycsXG4gICAgICAgICAgYmxvY2ssXG4gICAgICAgICAgJ30nKVxuICAgICAgfSlcblxuICAgICAgT2JqZWN0LmtleXMoR0xfVkFSSUFCTEVTKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBmdW5jID0gR0xfVkFSSUFCTEVTW25hbWVdXG4gICAgICAgIHZhciBpbml0ID0gY3VycmVudFN0YXRlW25hbWVdXG4gICAgICAgIHZhciBORVhULCBDVVJSRU5UXG4gICAgICAgIHZhciBibG9jayA9IGVudi5ibG9jaygpXG4gICAgICAgIGJsb2NrKEdMLCAnLicsIGZ1bmMsICcoJylcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGluaXQpKSB7XG4gICAgICAgICAgdmFyIG4gPSBpbml0Lmxlbmd0aFxuICAgICAgICAgIE5FWFQgPSBlbnYuZ2xvYmFsLmRlZihORVhUX1NUQVRFLCAnLicsIG5hbWUpXG4gICAgICAgICAgQ1VSUkVOVCA9IGVudi5nbG9iYWwuZGVmKENVUlJFTlRfU1RBVEUsICcuJywgbmFtZSlcbiAgICAgICAgICBibG9jayhcbiAgICAgICAgICAgIGxvb3AobiwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIE5FWFQgKyAnWycgKyBpICsgJ10nXG4gICAgICAgICAgICB9KSwgJyk7JyxcbiAgICAgICAgICAgIGxvb3AobiwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIENVUlJFTlQgKyAnWycgKyBpICsgJ109JyArIE5FWFQgKyAnWycgKyBpICsgJ107J1xuICAgICAgICAgICAgfSkuam9pbignJykpXG4gICAgICAgICAgcG9sbChcbiAgICAgICAgICAgICdpZignLCBsb29wKG4sIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBORVhUICsgJ1snICsgaSArICddIT09JyArIENVUlJFTlQgKyAnWycgKyBpICsgJ10nXG4gICAgICAgICAgICB9KS5qb2luKCd8fCcpLCAnKXsnLFxuICAgICAgICAgICAgYmxvY2ssXG4gICAgICAgICAgICAnfScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgTkVYVCA9IGNvbW1vbi5kZWYoTkVYVF9TVEFURSwgJy4nLCBuYW1lKVxuICAgICAgICAgIENVUlJFTlQgPSBjb21tb24uZGVmKENVUlJFTlRfU1RBVEUsICcuJywgbmFtZSlcbiAgICAgICAgICBibG9jayhcbiAgICAgICAgICAgIE5FWFQsICcpOycsXG4gICAgICAgICAgICBDVVJSRU5UX1NUQVRFLCAnLicsIG5hbWUsICc9JywgTkVYVCwgJzsnKVxuICAgICAgICAgIHBvbGwoXG4gICAgICAgICAgICAnaWYoJywgTkVYVCwgJyE9PScsIENVUlJFTlQsICcpeycsXG4gICAgICAgICAgICBibG9jayxcbiAgICAgICAgICAgICd9JylcbiAgICAgICAgfVxuICAgICAgICByZWZyZXNoKGJsb2NrKVxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIGVudi5jb21waWxlKClcbiAgICB9KSgpLFxuICAgIGNvbXBpbGU6IGNvbXBpbGVDb21tYW5kXG4gIH1cbn1cblxuZnVuY3Rpb24gc3RhdHMgKCkge1xuICByZXR1cm4ge1xuICAgIHZhb0NvdW50OiAwLFxuICAgIGJ1ZmZlckNvdW50OiAwLFxuICAgIGVsZW1lbnRzQ291bnQ6IDAsXG4gICAgZnJhbWVidWZmZXJDb3VudDogMCxcbiAgICBzaGFkZXJDb3VudDogMCxcbiAgICB0ZXh0dXJlQ291bnQ6IDAsXG4gICAgY3ViZUNvdW50OiAwLFxuICAgIHJlbmRlcmJ1ZmZlckNvdW50OiAwLFxuICAgIG1heFRleHR1cmVVbml0czogMFxuICB9XG59XG5cbnZhciBHTF9RVUVSWV9SRVNVTFRfRVhUID0gMHg4ODY2XG52YXIgR0xfUVVFUllfUkVTVUxUX0FWQUlMQUJMRV9FWFQgPSAweDg4NjdcbnZhciBHTF9USU1FX0VMQVBTRURfRVhUID0gMHg4OEJGXG5cbnZhciBjcmVhdGVUaW1lciA9IGZ1bmN0aW9uIChnbCwgZXh0ZW5zaW9ucykge1xuICBpZiAoIWV4dGVuc2lvbnMuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIFFVRVJZIFBPT0wgQkVHSU5cbiAgdmFyIHF1ZXJ5UG9vbCA9IFtdXG4gIGZ1bmN0aW9uIGFsbG9jUXVlcnkgKCkge1xuICAgIHJldHVybiBxdWVyeVBvb2wucG9wKCkgfHwgZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuY3JlYXRlUXVlcnlFWFQoKVxuICB9XG4gIGZ1bmN0aW9uIGZyZWVRdWVyeSAocXVlcnkpIHtcbiAgICBxdWVyeVBvb2wucHVzaChxdWVyeSlcbiAgfVxuICAvLyBRVUVSWSBQT09MIEVORFxuXG4gIHZhciBwZW5kaW5nUXVlcmllcyA9IFtdXG4gIGZ1bmN0aW9uIGJlZ2luUXVlcnkgKHN0YXRzKSB7XG4gICAgdmFyIHF1ZXJ5ID0gYWxsb2NRdWVyeSgpXG4gICAgZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuYmVnaW5RdWVyeUVYVChHTF9USU1FX0VMQVBTRURfRVhULCBxdWVyeSlcbiAgICBwZW5kaW5nUXVlcmllcy5wdXNoKHF1ZXJ5KVxuICAgIHB1c2hTY29wZVN0YXRzKHBlbmRpbmdRdWVyaWVzLmxlbmd0aCAtIDEsIHBlbmRpbmdRdWVyaWVzLmxlbmd0aCwgc3RhdHMpXG4gIH1cblxuICBmdW5jdGlvbiBlbmRRdWVyeSAoKSB7XG4gICAgZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZW5kUXVlcnlFWFQoR0xfVElNRV9FTEFQU0VEX0VYVClcbiAgfVxuXG4gIC8vXG4gIC8vIFBlbmRpbmcgc3RhdHMgcG9vbC5cbiAgLy9cbiAgZnVuY3Rpb24gUGVuZGluZ1N0YXRzICgpIHtcbiAgICB0aGlzLnN0YXJ0UXVlcnlJbmRleCA9IC0xXG4gICAgdGhpcy5lbmRRdWVyeUluZGV4ID0gLTFcbiAgICB0aGlzLnN1bSA9IDBcbiAgICB0aGlzLnN0YXRzID0gbnVsbFxuICB9XG4gIHZhciBwZW5kaW5nU3RhdHNQb29sID0gW11cbiAgZnVuY3Rpb24gYWxsb2NQZW5kaW5nU3RhdHMgKCkge1xuICAgIHJldHVybiBwZW5kaW5nU3RhdHNQb29sLnBvcCgpIHx8IG5ldyBQZW5kaW5nU3RhdHMoKVxuICB9XG4gIGZ1bmN0aW9uIGZyZWVQZW5kaW5nU3RhdHMgKHBlbmRpbmdTdGF0cykge1xuICAgIHBlbmRpbmdTdGF0c1Bvb2wucHVzaChwZW5kaW5nU3RhdHMpXG4gIH1cbiAgLy8gUGVuZGluZyBzdGF0cyBwb29sIGVuZFxuXG4gIHZhciBwZW5kaW5nU3RhdHMgPSBbXVxuICBmdW5jdGlvbiBwdXNoU2NvcGVTdGF0cyAoc3RhcnQsIGVuZCwgc3RhdHMpIHtcbiAgICB2YXIgcHMgPSBhbGxvY1BlbmRpbmdTdGF0cygpXG4gICAgcHMuc3RhcnRRdWVyeUluZGV4ID0gc3RhcnRcbiAgICBwcy5lbmRRdWVyeUluZGV4ID0gZW5kXG4gICAgcHMuc3VtID0gMFxuICAgIHBzLnN0YXRzID0gc3RhdHNcbiAgICBwZW5kaW5nU3RhdHMucHVzaChwcylcbiAgfVxuXG4gIC8vIHdlIHNob3VsZCBjYWxsIHRoaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnJhbWUsXG4gIC8vIGluIG9yZGVyIHRvIHVwZGF0ZSBncHVUaW1lXG4gIHZhciB0aW1lU3VtID0gW11cbiAgdmFyIHF1ZXJ5UHRyID0gW11cbiAgZnVuY3Rpb24gdXBkYXRlICgpIHtcbiAgICB2YXIgcHRyLCBpXG5cbiAgICB2YXIgbiA9IHBlbmRpbmdRdWVyaWVzLmxlbmd0aFxuICAgIGlmIChuID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBSZXNlcnZlIHNwYWNlXG4gICAgcXVlcnlQdHIubGVuZ3RoID0gTWF0aC5tYXgocXVlcnlQdHIubGVuZ3RoLCBuICsgMSlcbiAgICB0aW1lU3VtLmxlbmd0aCA9IE1hdGgubWF4KHRpbWVTdW0ubGVuZ3RoLCBuICsgMSlcbiAgICB0aW1lU3VtWzBdID0gMFxuICAgIHF1ZXJ5UHRyWzBdID0gMFxuXG4gICAgLy8gVXBkYXRlIGFsbCBwZW5kaW5nIHRpbWVyIHF1ZXJpZXNcbiAgICB2YXIgcXVlcnlUaW1lID0gMFxuICAgIHB0ciA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ1F1ZXJpZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBxdWVyeSA9IHBlbmRpbmdRdWVyaWVzW2ldXG4gICAgICBpZiAoZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQocXVlcnksIEdMX1FVRVJZX1JFU1VMVF9BVkFJTEFCTEVfRVhUKSkge1xuICAgICAgICBxdWVyeVRpbWUgKz0gZXh0ZW5zaW9ucy5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQocXVlcnksIEdMX1FVRVJZX1JFU1VMVF9FWFQpXG4gICAgICAgIGZyZWVRdWVyeShxdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlbmRpbmdRdWVyaWVzW3B0cisrXSA9IHF1ZXJ5XG4gICAgICB9XG4gICAgICB0aW1lU3VtW2kgKyAxXSA9IHF1ZXJ5VGltZVxuICAgICAgcXVlcnlQdHJbaSArIDFdID0gcHRyXG4gICAgfVxuICAgIHBlbmRpbmdRdWVyaWVzLmxlbmd0aCA9IHB0clxuXG4gICAgLy8gVXBkYXRlIGFsbCBwZW5kaW5nIHN0YXQgcXVlcmllc1xuICAgIHB0ciA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ1N0YXRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3RhdHMgPSBwZW5kaW5nU3RhdHNbaV1cbiAgICAgIHZhciBzdGFydCA9IHN0YXRzLnN0YXJ0UXVlcnlJbmRleFxuICAgICAgdmFyIGVuZCA9IHN0YXRzLmVuZFF1ZXJ5SW5kZXhcbiAgICAgIHN0YXRzLnN1bSArPSB0aW1lU3VtW2VuZF0gLSB0aW1lU3VtW3N0YXJ0XVxuICAgICAgdmFyIHN0YXJ0UHRyID0gcXVlcnlQdHJbc3RhcnRdXG4gICAgICB2YXIgZW5kUHRyID0gcXVlcnlQdHJbZW5kXVxuICAgICAgaWYgKGVuZFB0ciA9PT0gc3RhcnRQdHIpIHtcbiAgICAgICAgc3RhdHMuc3RhdHMuZ3B1VGltZSArPSBzdGF0cy5zdW0gLyAxZTZcbiAgICAgICAgZnJlZVBlbmRpbmdTdGF0cyhzdGF0cylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRzLnN0YXJ0UXVlcnlJbmRleCA9IHN0YXJ0UHRyXG4gICAgICAgIHN0YXRzLmVuZFF1ZXJ5SW5kZXggPSBlbmRQdHJcbiAgICAgICAgcGVuZGluZ1N0YXRzW3B0cisrXSA9IHN0YXRzXG4gICAgICB9XG4gICAgfVxuICAgIHBlbmRpbmdTdGF0cy5sZW5ndGggPSBwdHJcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmVnaW5RdWVyeTogYmVnaW5RdWVyeSxcbiAgICBlbmRRdWVyeTogZW5kUXVlcnksXG4gICAgcHVzaFNjb3BlU3RhdHM6IHB1c2hTY29wZVN0YXRzLFxuICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgIGdldE51bVBlbmRpbmdRdWVyaWVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcGVuZGluZ1F1ZXJpZXMubGVuZ3RoXG4gICAgfSxcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlQb29sLnB1c2guYXBwbHkocXVlcnlQb29sLCBwZW5kaW5nUXVlcmllcylcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlcnlQb29sLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV4dGVuc2lvbnMuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmRlbGV0ZVF1ZXJ5RVhUKHF1ZXJ5UG9vbFtpXSlcbiAgICAgIH1cbiAgICAgIHBlbmRpbmdRdWVyaWVzLmxlbmd0aCA9IDBcbiAgICAgIHF1ZXJ5UG9vbC5sZW5ndGggPSAwXG4gICAgfSxcbiAgICByZXN0b3JlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBwZW5kaW5nUXVlcmllcy5sZW5ndGggPSAwXG4gICAgICBxdWVyeVBvb2wubGVuZ3RoID0gMFxuICAgIH1cbiAgfVxufVxuXG52YXIgR0xfQ09MT1JfQlVGRkVSX0JJVCA9IDE2Mzg0XG52YXIgR0xfREVQVEhfQlVGRkVSX0JJVCA9IDI1NlxudmFyIEdMX1NURU5DSUxfQlVGRkVSX0JJVCA9IDEwMjRcblxudmFyIEdMX0FSUkFZX0JVRkZFUiA9IDM0OTYyXG5cbnZhciBDT05URVhUX0xPU1RfRVZFTlQgPSAnd2ViZ2xjb250ZXh0bG9zdCdcbnZhciBDT05URVhUX1JFU1RPUkVEX0VWRU5UID0gJ3dlYmdsY29udGV4dHJlc3RvcmVkJ1xuXG52YXIgRFlOX1BST1AgPSAxXG52YXIgRFlOX0NPTlRFWFQgPSAyXG52YXIgRFlOX1NUQVRFID0gM1xuXG5mdW5jdGlvbiBmaW5kIChoYXlzdGFjaywgbmVlZGxlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaGF5c3RhY2subGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoaGF5c3RhY2tbaV0gPT09IG5lZWRsZSkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbmZ1bmN0aW9uIHdyYXBSRUdMIChhcmdzKSB7XG4gIHZhciBjb25maWcgPSBwYXJzZUFyZ3MoYXJncylcbiAgaWYgKCFjb25maWcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFyIGdsID0gY29uZmlnLmdsXG4gIHZhciBnbEF0dHJpYnV0ZXMgPSBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpXG4gIHZhciBjb250ZXh0TG9zdCA9IGdsLmlzQ29udGV4dExvc3QoKVxuXG4gIHZhciBleHRlbnNpb25TdGF0ZSA9IGNyZWF0ZUV4dGVuc2lvbkNhY2hlKGdsLCBjb25maWcpXG4gIGlmICghZXh0ZW5zaW9uU3RhdGUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFyIHN0cmluZ1N0b3JlID0gY3JlYXRlU3RyaW5nU3RvcmUoKVxuICB2YXIgc3RhdHMkJDEgPSBzdGF0cygpXG4gIHZhciBleHRlbnNpb25zID0gZXh0ZW5zaW9uU3RhdGUuZXh0ZW5zaW9uc1xuICB2YXIgdGltZXIgPSBjcmVhdGVUaW1lcihnbCwgZXh0ZW5zaW9ucylcblxuICB2YXIgU1RBUlRfVElNRSA9IGNsb2NrKClcbiAgdmFyIFdJRFRIID0gZ2wuZHJhd2luZ0J1ZmZlcldpZHRoXG4gIHZhciBIRUlHSFQgPSBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0XG5cbiAgdmFyIGNvbnRleHRTdGF0ZSA9IHtcbiAgICB0aWNrOiAwLFxuICAgIHRpbWU6IDAsXG4gICAgdmlld3BvcnRXaWR0aDogV0lEVEgsXG4gICAgdmlld3BvcnRIZWlnaHQ6IEhFSUdIVCxcbiAgICBmcmFtZWJ1ZmZlcldpZHRoOiBXSURUSCxcbiAgICBmcmFtZWJ1ZmZlckhlaWdodDogSEVJR0hULFxuICAgIGRyYXdpbmdCdWZmZXJXaWR0aDogV0lEVEgsXG4gICAgZHJhd2luZ0J1ZmZlckhlaWdodDogSEVJR0hULFxuICAgIHBpeGVsUmF0aW86IGNvbmZpZy5waXhlbFJhdGlvXG4gIH1cbiAgdmFyIHVuaWZvcm1TdGF0ZSA9IHt9XG4gIHZhciBkcmF3U3RhdGUgPSB7XG4gICAgZWxlbWVudHM6IG51bGwsXG4gICAgcHJpbWl0aXZlOiA0LCAvLyBHTF9UUklBTkdMRVNcbiAgICBjb3VudDogLTEsXG4gICAgb2Zmc2V0OiAwLFxuICAgIGluc3RhbmNlczogLTFcbiAgfVxuXG4gIHZhciBsaW1pdHMgPSB3cmFwTGltaXRzKGdsLCBleHRlbnNpb25zKVxuICB2YXIgYnVmZmVyU3RhdGUgPSB3cmFwQnVmZmVyU3RhdGUoXG4gICAgZ2wsXG4gICAgc3RhdHMkJDEsXG4gICAgY29uZmlnLFxuICAgIGRlc3Ryb3lCdWZmZXIpXG4gIHZhciBhdHRyaWJ1dGVTdGF0ZSA9IHdyYXBBdHRyaWJ1dGVTdGF0ZShcbiAgICBnbCxcbiAgICBleHRlbnNpb25zLFxuICAgIGxpbWl0cyxcbiAgICBzdGF0cyQkMSxcbiAgICBidWZmZXJTdGF0ZSlcbiAgZnVuY3Rpb24gZGVzdHJveUJ1ZmZlciAoYnVmZmVyKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZVN0YXRlLmRlc3Ryb3lCdWZmZXIoYnVmZmVyKVxuICB9XG4gIHZhciBlbGVtZW50U3RhdGUgPSB3cmFwRWxlbWVudHNTdGF0ZShnbCwgZXh0ZW5zaW9ucywgYnVmZmVyU3RhdGUsIHN0YXRzJCQxKVxuICB2YXIgc2hhZGVyU3RhdGUgPSB3cmFwU2hhZGVyU3RhdGUoZ2wsIHN0cmluZ1N0b3JlLCBzdGF0cyQkMSwgY29uZmlnKVxuICB2YXIgdGV4dHVyZVN0YXRlID0gY3JlYXRlVGV4dHVyZVNldChcbiAgICBnbCxcbiAgICBleHRlbnNpb25zLFxuICAgIGxpbWl0cyxcbiAgICBmdW5jdGlvbiAoKSB7IGNvcmUucHJvY3MucG9sbCgpIH0sXG4gICAgY29udGV4dFN0YXRlLFxuICAgIHN0YXRzJCQxLFxuICAgIGNvbmZpZylcbiAgdmFyIHJlbmRlcmJ1ZmZlclN0YXRlID0gd3JhcFJlbmRlcmJ1ZmZlcnMoZ2wsIGV4dGVuc2lvbnMsIGxpbWl0cywgc3RhdHMkJDEsIGNvbmZpZylcbiAgdmFyIGZyYW1lYnVmZmVyU3RhdGUgPSB3cmFwRkJPU3RhdGUoXG4gICAgZ2wsXG4gICAgZXh0ZW5zaW9ucyxcbiAgICBsaW1pdHMsXG4gICAgdGV4dHVyZVN0YXRlLFxuICAgIHJlbmRlcmJ1ZmZlclN0YXRlLFxuICAgIHN0YXRzJCQxKVxuICB2YXIgY29yZSA9IHJlZ2xDb3JlKFxuICAgIGdsLFxuICAgIHN0cmluZ1N0b3JlLFxuICAgIGV4dGVuc2lvbnMsXG4gICAgbGltaXRzLFxuICAgIGJ1ZmZlclN0YXRlLFxuICAgIGVsZW1lbnRTdGF0ZSxcbiAgICB0ZXh0dXJlU3RhdGUsXG4gICAgZnJhbWVidWZmZXJTdGF0ZSxcbiAgICB1bmlmb3JtU3RhdGUsXG4gICAgYXR0cmlidXRlU3RhdGUsXG4gICAgc2hhZGVyU3RhdGUsXG4gICAgZHJhd1N0YXRlLFxuICAgIGNvbnRleHRTdGF0ZSxcbiAgICB0aW1lcixcbiAgICBjb25maWcpXG4gIHZhciByZWFkUGl4ZWxzID0gd3JhcFJlYWRQaXhlbHMoXG4gICAgZ2wsXG4gICAgZnJhbWVidWZmZXJTdGF0ZSxcbiAgICBjb3JlLnByb2NzLnBvbGwsXG4gICAgY29udGV4dFN0YXRlLFxuICAgIGdsQXR0cmlidXRlcywgZXh0ZW5zaW9ucywgbGltaXRzKVxuXG4gIHZhciBuZXh0U3RhdGUgPSBjb3JlLm5leHRcbiAgdmFyIGNhbnZhcyA9IGdsLmNhbnZhc1xuXG4gIHZhciByYWZDYWxsYmFja3MgPSBbXVxuICB2YXIgbG9zc0NhbGxiYWNrcyA9IFtdXG4gIHZhciByZXN0b3JlQ2FsbGJhY2tzID0gW11cbiAgdmFyIGRlc3Ryb3lDYWxsYmFja3MgPSBbY29uZmlnLm9uRGVzdHJveV1cblxuICB2YXIgYWN0aXZlUkFGID0gbnVsbFxuICBmdW5jdGlvbiBoYW5kbGVSQUYgKCkge1xuICAgIGlmIChyYWZDYWxsYmFja3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgdGltZXIudXBkYXRlKClcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVJBRiA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHNjaGVkdWxlIG5leHQgYW5pbWF0aW9uIGZyYW1lXG4gICAgYWN0aXZlUkFGID0gcmFmLm5leHQoaGFuZGxlUkFGKVxuXG4gICAgLy8gcG9sbCBmb3IgY2hhbmdlc1xuICAgIHBvbGwoKVxuXG4gICAgLy8gZmlyZSBhIGNhbGxiYWNrIGZvciBhbGwgcGVuZGluZyByYWZzXG4gICAgZm9yICh2YXIgaSA9IHJhZkNhbGxiYWNrcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdmFyIGNiID0gcmFmQ2FsbGJhY2tzW2ldXG4gICAgICBpZiAoY2IpIHtcbiAgICAgICAgY2IoY29udGV4dFN0YXRlLCBudWxsLCAwKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZsdXNoIGFsbCBwZW5kaW5nIHdlYmdsIGNhbGxzXG4gICAgZ2wuZmx1c2goKVxuXG4gICAgLy8gcG9sbCBHUFUgdGltZXJzICphZnRlciogZ2wuZmx1c2ggc28gd2UgZG9uJ3QgZGVsYXkgY29tbWFuZCBkaXNwYXRjaFxuICAgIGlmICh0aW1lcikge1xuICAgICAgdGltZXIudXBkYXRlKClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydFJBRiAoKSB7XG4gICAgaWYgKCFhY3RpdmVSQUYgJiYgcmFmQ2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFjdGl2ZVJBRiA9IHJhZi5uZXh0KGhhbmRsZVJBRilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdG9wUkFGICgpIHtcbiAgICBpZiAoYWN0aXZlUkFGKSB7XG4gICAgICByYWYuY2FuY2VsKGhhbmRsZVJBRilcbiAgICAgIGFjdGl2ZVJBRiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVDb250ZXh0TG9zcyAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAvLyBzZXQgY29udGV4dCBsb3N0IGZsYWdcbiAgICBjb250ZXh0TG9zdCA9IHRydWVcblxuICAgIC8vIHBhdXNlIHJlcXVlc3QgYW5pbWF0aW9uIGZyYW1lXG4gICAgc3RvcFJBRigpXG5cbiAgICAvLyBsb3NlIGNvbnRleHRcbiAgICBsb3NzQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICBjYigpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNvbnRleHRSZXN0b3JlZCAoZXZlbnQpIHtcbiAgICAvLyBjbGVhciBlcnJvciBjb2RlXG4gICAgZ2wuZ2V0RXJyb3IoKVxuXG4gICAgLy8gY2xlYXIgY29udGV4dCBsb3N0IGZsYWdcbiAgICBjb250ZXh0TG9zdCA9IGZhbHNlXG5cbiAgICAvLyByZWZyZXNoIHN0YXRlXG4gICAgZXh0ZW5zaW9uU3RhdGUucmVzdG9yZSgpXG4gICAgc2hhZGVyU3RhdGUucmVzdG9yZSgpXG4gICAgYnVmZmVyU3RhdGUucmVzdG9yZSgpXG4gICAgdGV4dHVyZVN0YXRlLnJlc3RvcmUoKVxuICAgIHJlbmRlcmJ1ZmZlclN0YXRlLnJlc3RvcmUoKVxuICAgIGZyYW1lYnVmZmVyU3RhdGUucmVzdG9yZSgpXG4gICAgYXR0cmlidXRlU3RhdGUucmVzdG9yZSgpXG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICB0aW1lci5yZXN0b3JlKClcbiAgICB9XG5cbiAgICAvLyByZWZyZXNoIHN0YXRlXG4gICAgY29yZS5wcm9jcy5yZWZyZXNoKClcblxuICAgIC8vIHJlc3RhcnQgUkFGXG4gICAgc3RhcnRSQUYoKVxuXG4gICAgLy8gcmVzdG9yZSBjb250ZXh0XG4gICAgcmVzdG9yZUNhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgY2IoKVxuICAgIH0pXG4gIH1cblxuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoQ09OVEVYVF9MT1NUX0VWRU5ULCBoYW5kbGVDb250ZXh0TG9zcywgZmFsc2UpXG4gICAgY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoQ09OVEVYVF9SRVNUT1JFRF9FVkVOVCwgaGFuZGxlQ29udGV4dFJlc3RvcmVkLCBmYWxzZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3kgKCkge1xuICAgIHJhZkNhbGxiYWNrcy5sZW5ndGggPSAwXG4gICAgc3RvcFJBRigpXG5cbiAgICBpZiAoY2FudmFzKSB7XG4gICAgICBjYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihDT05URVhUX0xPU1RfRVZFTlQsIGhhbmRsZUNvbnRleHRMb3NzKVxuICAgICAgY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoQ09OVEVYVF9SRVNUT1JFRF9FVkVOVCwgaGFuZGxlQ29udGV4dFJlc3RvcmVkKVxuICAgIH1cblxuICAgIHNoYWRlclN0YXRlLmNsZWFyKClcbiAgICBmcmFtZWJ1ZmZlclN0YXRlLmNsZWFyKClcbiAgICByZW5kZXJidWZmZXJTdGF0ZS5jbGVhcigpXG4gICAgdGV4dHVyZVN0YXRlLmNsZWFyKClcbiAgICBlbGVtZW50U3RhdGUuY2xlYXIoKVxuICAgIGJ1ZmZlclN0YXRlLmNsZWFyKClcbiAgICBhdHRyaWJ1dGVTdGF0ZS5jbGVhcigpXG5cbiAgICBpZiAodGltZXIpIHtcbiAgICAgIHRpbWVyLmNsZWFyKClcbiAgICB9XG5cbiAgICBkZXN0cm95Q2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICBjYigpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBpbGVQcm9jZWR1cmUgKG9wdGlvbnMpIHtcbiAgICBjaGVjayQxKCEhb3B0aW9ucywgJ2ludmFsaWQgYXJncyB0byByZWdsKHsuLi59KScpXG4gICAgY2hlY2skMS50eXBlKG9wdGlvbnMsICdvYmplY3QnLCAnaW52YWxpZCBhcmdzIHRvIHJlZ2woey4uLn0pJylcblxuICAgIGZ1bmN0aW9uIGZsYXR0ZW5OZXN0ZWRPcHRpb25zIChvcHRpb25zKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZXh0ZW5kKHt9LCBvcHRpb25zKVxuICAgICAgZGVsZXRlIHJlc3VsdC51bmlmb3Jtc1xuICAgICAgZGVsZXRlIHJlc3VsdC5hdHRyaWJ1dGVzXG4gICAgICBkZWxldGUgcmVzdWx0LmNvbnRleHRcbiAgICAgIGRlbGV0ZSByZXN1bHQudmFvXG5cbiAgICAgIGlmICgnc3RlbmNpbCcgaW4gcmVzdWx0ICYmIHJlc3VsdC5zdGVuY2lsLm9wKSB7XG4gICAgICAgIHJlc3VsdC5zdGVuY2lsLm9wQmFjayA9IHJlc3VsdC5zdGVuY2lsLm9wRnJvbnQgPSByZXN1bHQuc3RlbmNpbC5vcFxuICAgICAgICBkZWxldGUgcmVzdWx0LnN0ZW5jaWwub3BcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbWVyZ2UgKG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgdmFyIGNoaWxkID0gcmVzdWx0W25hbWVdXG4gICAgICAgICAgZGVsZXRlIHJlc3VsdFtuYW1lXVxuICAgICAgICAgIE9iamVjdC5rZXlzKGNoaWxkKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgICByZXN1bHRbbmFtZSArICcuJyArIHByb3BdID0gY2hpbGRbcHJvcF1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtZXJnZSgnYmxlbmQnKVxuICAgICAgbWVyZ2UoJ2RlcHRoJylcbiAgICAgIG1lcmdlKCdjdWxsJylcbiAgICAgIG1lcmdlKCdzdGVuY2lsJylcbiAgICAgIG1lcmdlKCdwb2x5Z29uT2Zmc2V0JylcbiAgICAgIG1lcmdlKCdzY2lzc29yJylcbiAgICAgIG1lcmdlKCdzYW1wbGUnKVxuXG4gICAgICBpZiAoJ3ZhbycgaW4gb3B0aW9ucykge1xuICAgICAgICByZXN1bHQudmFvID0gb3B0aW9ucy52YW9cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNlcGFyYXRlRHluYW1pYyAob2JqZWN0LCB1c2VBcnJheXMpIHtcbiAgICAgIHZhciBzdGF0aWNJdGVtcyA9IHt9XG4gICAgICB2YXIgZHluYW1pY0l0ZW1zID0ge31cbiAgICAgIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtvcHRpb25dXG4gICAgICAgIGlmIChkeW5hbWljLmlzRHluYW1pYyh2YWx1ZSkpIHtcbiAgICAgICAgICBkeW5hbWljSXRlbXNbb3B0aW9uXSA9IGR5bmFtaWMudW5ib3godmFsdWUsIG9wdGlvbilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmICh1c2VBcnJheXMgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoZHluYW1pYy5pc0R5bmFtaWModmFsdWVbaV0pKSB7XG4gICAgICAgICAgICAgIGR5bmFtaWNJdGVtc1tvcHRpb25dID0gZHluYW1pYy51bmJveCh2YWx1ZSwgb3B0aW9uKVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljSXRlbXNbb3B0aW9uXSA9IHZhbHVlXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZHluYW1pYzogZHluYW1pY0l0ZW1zLFxuICAgICAgICBzdGF0aWM6IHN0YXRpY0l0ZW1zXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJlYXQgY29udGV4dCB2YXJpYWJsZXMgc2VwYXJhdGUgZnJvbSBvdGhlciBkeW5hbWljIHZhcmlhYmxlc1xuICAgIHZhciBjb250ZXh0ID0gc2VwYXJhdGVEeW5hbWljKG9wdGlvbnMuY29udGV4dCB8fCB7fSwgdHJ1ZSlcbiAgICB2YXIgdW5pZm9ybXMgPSBzZXBhcmF0ZUR5bmFtaWMob3B0aW9ucy51bmlmb3JtcyB8fCB7fSwgdHJ1ZSlcbiAgICB2YXIgYXR0cmlidXRlcyA9IHNlcGFyYXRlRHluYW1pYyhvcHRpb25zLmF0dHJpYnV0ZXMgfHwge30sIGZhbHNlKVxuICAgIHZhciBvcHRzID0gc2VwYXJhdGVEeW5hbWljKGZsYXR0ZW5OZXN0ZWRPcHRpb25zKG9wdGlvbnMpLCBmYWxzZSlcblxuICAgIHZhciBzdGF0cyQkMSA9IHtcbiAgICAgIGdwdVRpbWU6IDAuMCxcbiAgICAgIGNwdVRpbWU6IDAuMCxcbiAgICAgIGNvdW50OiAwXG4gICAgfVxuXG4gICAgdmFyIGNvbXBpbGVkID0gY29yZS5jb21waWxlKG9wdHMsIGF0dHJpYnV0ZXMsIHVuaWZvcm1zLCBjb250ZXh0LCBzdGF0cyQkMSlcblxuICAgIHZhciBkcmF3ID0gY29tcGlsZWQuZHJhd1xuICAgIHZhciBiYXRjaCA9IGNvbXBpbGVkLmJhdGNoXG4gICAgdmFyIHNjb3BlID0gY29tcGlsZWQuc2NvcGVcblxuICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgbW9kaWZ5IGNvZGUgZ2VuZXJhdGlvbiBmb3IgYmF0Y2ggY29tbWFuZHMgc28gdGhpc1xuICAgIC8vIGlzbid0IG5lY2Vzc2FyeVxuICAgIHZhciBFTVBUWV9BUlJBWSA9IFtdXG4gICAgZnVuY3Rpb24gcmVzZXJ2ZSAoY291bnQpIHtcbiAgICAgIHdoaWxlIChFTVBUWV9BUlJBWS5sZW5ndGggPCBjb3VudCkge1xuICAgICAgICBFTVBUWV9BUlJBWS5wdXNoKG51bGwpXG4gICAgICB9XG4gICAgICByZXR1cm4gRU1QVFlfQVJSQVlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBSRUdMQ29tbWFuZCAoYXJncywgYm9keSkge1xuICAgICAgdmFyIGlcbiAgICAgIGlmIChjb250ZXh0TG9zdCkge1xuICAgICAgICBjaGVjayQxLnJhaXNlKCdjb250ZXh0IGxvc3QnKVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBhcmdzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBzY29wZS5jYWxsKHRoaXMsIG51bGwsIGFyZ3MsIDApXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnczsgKytpKSB7XG4gICAgICAgICAgICBzY29wZS5jYWxsKHRoaXMsIG51bGwsIGJvZHksIGkpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJncykpIHtcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgc2NvcGUuY2FsbCh0aGlzLCBhcmdzW2ldLCBib2R5LCBpKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gc2NvcGUuY2FsbCh0aGlzLCBhcmdzLCBib2R5LCAwKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmdzID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoYXJncyA+IDApIHtcbiAgICAgICAgICByZXR1cm4gYmF0Y2guY2FsbCh0aGlzLCByZXNlcnZlKGFyZ3MgfCAwKSwgYXJncyB8IDApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmdzKSkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gYmF0Y2guY2FsbCh0aGlzLCBhcmdzLCBhcmdzLmxlbmd0aClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRyYXcuY2FsbCh0aGlzLCBhcmdzKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHRlbmQoUkVHTENvbW1hbmQsIHtcbiAgICAgIHN0YXRzOiBzdGF0cyQkMSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29tcGlsZWQuZGVzdHJveSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHZhciBzZXRGQk8gPSBmcmFtZWJ1ZmZlclN0YXRlLnNldEZCTyA9IGNvbXBpbGVQcm9jZWR1cmUoe1xuICAgIGZyYW1lYnVmZmVyOiBkeW5hbWljLmRlZmluZS5jYWxsKG51bGwsIERZTl9QUk9QLCAnZnJhbWVidWZmZXInKVxuICB9KVxuXG4gIGZ1bmN0aW9uIGNsZWFySW1wbCAoXywgb3B0aW9ucykge1xuICAgIHZhciBjbGVhckZsYWdzID0gMFxuICAgIGNvcmUucHJvY3MucG9sbCgpXG5cbiAgICB2YXIgYyA9IG9wdGlvbnMuY29sb3JcbiAgICBpZiAoYykge1xuICAgICAgZ2wuY2xlYXJDb2xvcigrY1swXSB8fCAwLCArY1sxXSB8fCAwLCArY1syXSB8fCAwLCArY1szXSB8fCAwKVxuICAgICAgY2xlYXJGbGFncyB8PSBHTF9DT0xPUl9CVUZGRVJfQklUXG4gICAgfVxuICAgIGlmICgnZGVwdGgnIGluIG9wdGlvbnMpIHtcbiAgICAgIGdsLmNsZWFyRGVwdGgoK29wdGlvbnMuZGVwdGgpXG4gICAgICBjbGVhckZsYWdzIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVRcbiAgICB9XG4gICAgaWYgKCdzdGVuY2lsJyBpbiBvcHRpb25zKSB7XG4gICAgICBnbC5jbGVhclN0ZW5jaWwob3B0aW9ucy5zdGVuY2lsIHwgMClcbiAgICAgIGNsZWFyRmxhZ3MgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUXG4gICAgfVxuXG4gICAgY2hlY2skMSghIWNsZWFyRmxhZ3MsICdjYWxsZWQgcmVnbC5jbGVhciB3aXRoIG5vIGJ1ZmZlciBzcGVjaWZpZWQnKVxuICAgIGdsLmNsZWFyKGNsZWFyRmxhZ3MpXG4gIH1cblxuICBmdW5jdGlvbiBjbGVhciAob3B0aW9ucykge1xuICAgIGNoZWNrJDEoXG4gICAgICB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucyxcbiAgICAgICdyZWdsLmNsZWFyKCkgdGFrZXMgYW4gb2JqZWN0IGFzIGlucHV0JylcbiAgICBpZiAoJ2ZyYW1lYnVmZmVyJyBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5mcmFtZWJ1ZmZlciAmJlxuICAgICAgICAgIG9wdGlvbnMuZnJhbWVidWZmZXJfcmVnbFR5cGUgPT09ICdmcmFtZWJ1ZmZlckN1YmUnKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgKytpKSB7XG4gICAgICAgICAgc2V0RkJPKGV4dGVuZCh7XG4gICAgICAgICAgICBmcmFtZWJ1ZmZlcjogb3B0aW9ucy5mcmFtZWJ1ZmZlci5mYWNlc1tpXVxuICAgICAgICAgIH0sIG9wdGlvbnMpLCBjbGVhckltcGwpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEZCTyhvcHRpb25zLCBjbGVhckltcGwpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFySW1wbChudWxsLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZyYW1lIChjYikge1xuICAgIGNoZWNrJDEudHlwZShjYiwgJ2Z1bmN0aW9uJywgJ3JlZ2wuZnJhbWUoKSBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKVxuICAgIHJhZkNhbGxiYWNrcy5wdXNoKGNiKVxuXG4gICAgZnVuY3Rpb24gY2FuY2VsICgpIHtcbiAgICAgIC8vIEZJWE1FOiAgc2hvdWxkIHdlIGNoZWNrIHNvbWV0aGluZyBvdGhlciB0aGFuIGVxdWFscyBjYiBoZXJlP1xuICAgICAgLy8gd2hhdCBpZiBhIHVzZXIgY2FsbHMgZnJhbWUgdHdpY2Ugd2l0aCB0aGUgc2FtZSBjYWxsYmFjay4uLlxuICAgICAgLy9cbiAgICAgIHZhciBpID0gZmluZChyYWZDYWxsYmFja3MsIGNiKVxuICAgICAgY2hlY2skMShpID49IDAsICdjYW5ub3QgY2FuY2VsIGEgZnJhbWUgdHdpY2UnKVxuICAgICAgZnVuY3Rpb24gcGVuZGluZ0NhbmNlbCAoKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGZpbmQocmFmQ2FsbGJhY2tzLCBwZW5kaW5nQ2FuY2VsKVxuICAgICAgICByYWZDYWxsYmFja3NbaW5kZXhdID0gcmFmQ2FsbGJhY2tzW3JhZkNhbGxiYWNrcy5sZW5ndGggLSAxXVxuICAgICAgICByYWZDYWxsYmFja3MubGVuZ3RoIC09IDFcbiAgICAgICAgaWYgKHJhZkNhbGxiYWNrcy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgIHN0b3BSQUYoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByYWZDYWxsYmFja3NbaV0gPSBwZW5kaW5nQ2FuY2VsXG4gICAgfVxuXG4gICAgc3RhcnRSQUYoKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbmNlbDogY2FuY2VsXG4gICAgfVxuICB9XG5cbiAgLy8gcG9sbCB2aWV3cG9ydFxuICBmdW5jdGlvbiBwb2xsVmlld3BvcnQgKCkge1xuICAgIHZhciB2aWV3cG9ydCA9IG5leHRTdGF0ZS52aWV3cG9ydFxuICAgIHZhciBzY2lzc29yQm94ID0gbmV4dFN0YXRlLnNjaXNzb3JfYm94XG4gICAgdmlld3BvcnRbMF0gPSB2aWV3cG9ydFsxXSA9IHNjaXNzb3JCb3hbMF0gPSBzY2lzc29yQm94WzFdID0gMFxuICAgIGNvbnRleHRTdGF0ZS52aWV3cG9ydFdpZHRoID1cbiAgICAgIGNvbnRleHRTdGF0ZS5mcmFtZWJ1ZmZlcldpZHRoID1cbiAgICAgIGNvbnRleHRTdGF0ZS5kcmF3aW5nQnVmZmVyV2lkdGggPVxuICAgICAgdmlld3BvcnRbMl0gPVxuICAgICAgc2Npc3NvckJveFsyXSA9IGdsLmRyYXdpbmdCdWZmZXJXaWR0aFxuICAgIGNvbnRleHRTdGF0ZS52aWV3cG9ydEhlaWdodCA9XG4gICAgICBjb250ZXh0U3RhdGUuZnJhbWVidWZmZXJIZWlnaHQgPVxuICAgICAgY29udGV4dFN0YXRlLmRyYXdpbmdCdWZmZXJIZWlnaHQgPVxuICAgICAgdmlld3BvcnRbM10gPVxuICAgICAgc2Npc3NvckJveFszXSA9IGdsLmRyYXdpbmdCdWZmZXJIZWlnaHRcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvbGwgKCkge1xuICAgIGNvbnRleHRTdGF0ZS50aWNrICs9IDFcbiAgICBjb250ZXh0U3RhdGUudGltZSA9IG5vdygpXG4gICAgcG9sbFZpZXdwb3J0KClcbiAgICBjb3JlLnByb2NzLnBvbGwoKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVmcmVzaCAoKSB7XG4gICAgdGV4dHVyZVN0YXRlLnJlZnJlc2goKVxuICAgIHBvbGxWaWV3cG9ydCgpXG4gICAgY29yZS5wcm9jcy5yZWZyZXNoKClcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIHRpbWVyLnVwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbm93ICgpIHtcbiAgICByZXR1cm4gKGNsb2NrKCkgLSBTVEFSVF9USU1FKSAvIDEwMDAuMFxuICB9XG5cbiAgcmVmcmVzaCgpXG5cbiAgZnVuY3Rpb24gYWRkTGlzdGVuZXIgKGV2ZW50LCBjYWxsYmFjaykge1xuICAgIGNoZWNrJDEudHlwZShjYWxsYmFjaywgJ2Z1bmN0aW9uJywgJ2xpc3RlbmVyIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbicpXG5cbiAgICB2YXIgY2FsbGJhY2tzXG4gICAgc3dpdGNoIChldmVudCkge1xuICAgICAgY2FzZSAnZnJhbWUnOlxuICAgICAgICByZXR1cm4gZnJhbWUoY2FsbGJhY2spXG4gICAgICBjYXNlICdsb3N0JzpcbiAgICAgICAgY2FsbGJhY2tzID0gbG9zc0NhbGxiYWNrc1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmVzdG9yZSc6XG4gICAgICAgIGNhbGxiYWNrcyA9IHJlc3RvcmVDYWxsYmFja3NcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2Rlc3Ryb3knOlxuICAgICAgICBjYWxsYmFja3MgPSBkZXN0cm95Q2FsbGJhY2tzXG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjaGVjayQxLnJhaXNlKCdpbnZhbGlkIGV2ZW50LCBtdXN0IGJlIG9uZSBvZiBmcmFtZSxsb3N0LHJlc3RvcmUsZGVzdHJveScpXG4gICAgfVxuXG4gICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spXG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGlmIChjYWxsYmFja3NbaV0gPT09IGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjYWxsYmFja3NbaV0gPSBjYWxsYmFja3NbY2FsbGJhY2tzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICBjYWxsYmFja3MucG9wKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciByZWdsID0gZXh0ZW5kKGNvbXBpbGVQcm9jZWR1cmUsIHtcbiAgICAvLyBDbGVhciBjdXJyZW50IEZCT1xuICAgIGNsZWFyOiBjbGVhcixcblxuICAgIC8vIFNob3J0IGN1dHMgZm9yIGR5bmFtaWMgdmFyaWFibGVzXG4gICAgcHJvcDogZHluYW1pYy5kZWZpbmUuYmluZChudWxsLCBEWU5fUFJPUCksXG4gICAgY29udGV4dDogZHluYW1pYy5kZWZpbmUuYmluZChudWxsLCBEWU5fQ09OVEVYVCksXG4gICAgdGhpczogZHluYW1pYy5kZWZpbmUuYmluZChudWxsLCBEWU5fU1RBVEUpLFxuXG4gICAgLy8gZXhlY3V0ZXMgYW4gZW1wdHkgZHJhdyBjb21tYW5kXG4gICAgZHJhdzogY29tcGlsZVByb2NlZHVyZSh7fSksXG5cbiAgICAvLyBSZXNvdXJjZXNcbiAgICBidWZmZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYnVmZmVyU3RhdGUuY3JlYXRlKG9wdGlvbnMsIEdMX0FSUkFZX0JVRkZFUiwgZmFsc2UsIGZhbHNlKVxuICAgIH0sXG4gICAgZWxlbWVudHM6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gZWxlbWVudFN0YXRlLmNyZWF0ZShvcHRpb25zLCBmYWxzZSlcbiAgICB9LFxuICAgIHRleHR1cmU6IHRleHR1cmVTdGF0ZS5jcmVhdGUyRCxcbiAgICBjdWJlOiB0ZXh0dXJlU3RhdGUuY3JlYXRlQ3ViZSxcbiAgICByZW5kZXJidWZmZXI6IHJlbmRlcmJ1ZmZlclN0YXRlLmNyZWF0ZSxcbiAgICBmcmFtZWJ1ZmZlcjogZnJhbWVidWZmZXJTdGF0ZS5jcmVhdGUsXG4gICAgZnJhbWVidWZmZXJDdWJlOiBmcmFtZWJ1ZmZlclN0YXRlLmNyZWF0ZUN1YmUsXG4gICAgdmFvOiBhdHRyaWJ1dGVTdGF0ZS5jcmVhdGVWQU8sXG5cbiAgICAvLyBFeHBvc2UgY29udGV4dCBhdHRyaWJ1dGVzXG4gICAgYXR0cmlidXRlczogZ2xBdHRyaWJ1dGVzLFxuXG4gICAgLy8gRnJhbWUgcmVuZGVyaW5nXG4gICAgZnJhbWU6IGZyYW1lLFxuICAgIG9uOiBhZGRMaXN0ZW5lcixcblxuICAgIC8vIFN5c3RlbSBsaW1pdHNcbiAgICBsaW1pdHM6IGxpbWl0cyxcbiAgICBoYXNFeHRlbnNpb246IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gbGltaXRzLmV4dGVuc2lvbnMuaW5kZXhPZihuYW1lLnRvTG93ZXJDYXNlKCkpID49IDBcbiAgICB9LFxuXG4gICAgLy8gUmVhZCBwaXhlbHNcbiAgICByZWFkOiByZWFkUGl4ZWxzLFxuXG4gICAgLy8gRGVzdHJveSByZWdsIGFuZCBhbGwgYXNzb2NpYXRlZCByZXNvdXJjZXNcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuXG4gICAgLy8gRGlyZWN0IEdMIHN0YXRlIG1hbmlwdWxhdGlvblxuICAgIF9nbDogZ2wsXG4gICAgX3JlZnJlc2g6IHJlZnJlc2gsXG5cbiAgICBwb2xsOiBmdW5jdGlvbiAoKSB7XG4gICAgICBwb2xsKClcbiAgICAgIGlmICh0aW1lcikge1xuICAgICAgICB0aW1lci51cGRhdGUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBDdXJyZW50IHRpbWVcbiAgICBub3c6IG5vdyxcblxuICAgIC8vIHJlZ2wgU3RhdGlzdGljcyBJbmZvcm1hdGlvblxuICAgIHN0YXRzOiBzdGF0cyQkMVxuICB9KVxuXG4gIGNvbmZpZy5vbkRvbmUobnVsbCwgcmVnbClcblxuICByZXR1cm4gcmVnbFxufVxuXG5yZXR1cm4gd3JhcFJFR0w7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWdsLmpzLm1hcFxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIHdpZHRoID0gMjU2Oy8vIGVhY2ggUkM0IG91dHB1dCBpcyAwIDw9IHggPCAyNTZcclxudmFyIGNodW5rcyA9IDY7Ly8gYXQgbGVhc3Qgc2l4IFJDNCBvdXRwdXRzIGZvciBlYWNoIGRvdWJsZVxyXG52YXIgZGlnaXRzID0gNTI7Ly8gdGhlcmUgYXJlIDUyIHNpZ25pZmljYW50IGRpZ2l0cyBpbiBhIGRvdWJsZVxyXG52YXIgcG9vbCA9IFtdOy8vIHBvb2w6IGVudHJvcHkgcG9vbCBzdGFydHMgZW1wdHlcclxudmFyIEdMT0JBTCA9IHR5cGVvZiBnbG9iYWwgPT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsO1xyXG5cclxuLy9cclxuLy8gVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlbGF0ZWQgdG8gSUVFRSA3NTQgbGltaXRzLlxyXG4vL1xyXG52YXIgc3RhcnRkZW5vbSA9IE1hdGgucG93KHdpZHRoLCBjaHVua3MpLFxyXG4gICAgc2lnbmlmaWNhbmNlID0gTWF0aC5wb3coMiwgZGlnaXRzKSxcclxuICAgIG92ZXJmbG93ID0gc2lnbmlmaWNhbmNlICogMixcclxuICAgIG1hc2sgPSB3aWR0aCAtIDE7XHJcblxyXG5cclxudmFyIG9sZFJhbmRvbSA9IE1hdGgucmFuZG9tO1xyXG5cclxuLy9cclxuLy8gc2VlZHJhbmRvbSgpXHJcbi8vIFRoaXMgaXMgdGhlIHNlZWRyYW5kb20gZnVuY3Rpb24gZGVzY3JpYmVkIGFib3ZlLlxyXG4vL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHNlZWQsIG9wdGlvbnMpIHtcclxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdsb2JhbCA9PT0gdHJ1ZSkge1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSBmYWxzZTtcclxuICAgIE1hdGgucmFuZG9tID0gbW9kdWxlLmV4cG9ydHMoc2VlZCwgb3B0aW9ucyk7XHJcbiAgICBvcHRpb25zLmdsb2JhbCA9IHRydWU7XHJcbiAgICByZXR1cm4gTWF0aC5yYW5kb207XHJcbiAgfVxyXG4gIHZhciB1c2VfZW50cm9weSA9IChvcHRpb25zICYmIG9wdGlvbnMuZW50cm9weSkgfHwgZmFsc2U7XHJcbiAgdmFyIGtleSA9IFtdO1xyXG5cclxuICAvLyBGbGF0dGVuIHRoZSBzZWVkIHN0cmluZyBvciBidWlsZCBvbmUgZnJvbSBsb2NhbCBlbnRyb3B5IGlmIG5lZWRlZC5cclxuICB2YXIgc2hvcnRzZWVkID0gbWl4a2V5KGZsYXR0ZW4oXHJcbiAgICB1c2VfZW50cm9weSA/IFtzZWVkLCB0b3N0cmluZyhwb29sKV0gOlxyXG4gICAgMCBpbiBhcmd1bWVudHMgPyBzZWVkIDogYXV0b3NlZWQoKSwgMyksIGtleSk7XHJcblxyXG4gIC8vIFVzZSB0aGUgc2VlZCB0byBpbml0aWFsaXplIGFuIEFSQzQgZ2VuZXJhdG9yLlxyXG4gIHZhciBhcmM0ID0gbmV3IEFSQzQoa2V5KTtcclxuXHJcbiAgLy8gTWl4IHRoZSByYW5kb21uZXNzIGludG8gYWNjdW11bGF0ZWQgZW50cm9weS5cclxuICBtaXhrZXkodG9zdHJpbmcoYXJjNC5TKSwgcG9vbCk7XHJcblxyXG4gIC8vIE92ZXJyaWRlIE1hdGgucmFuZG9tXHJcblxyXG4gIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHJhbmRvbSBkb3VibGUgaW4gWzAsIDEpIHRoYXQgY29udGFpbnNcclxuICAvLyByYW5kb21uZXNzIGluIGV2ZXJ5IGJpdCBvZiB0aGUgbWFudGlzc2Egb2YgdGhlIElFRUUgNzU0IHZhbHVlLlxyXG5cclxuICByZXR1cm4gZnVuY3Rpb24oKSB7ICAgICAgICAgLy8gQ2xvc3VyZSB0byByZXR1cm4gYSByYW5kb20gZG91YmxlOlxyXG4gICAgdmFyIG4gPSBhcmM0LmcoY2h1bmtzKSwgICAgICAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG51bWVyYXRvciBuIDwgMiBeIDQ4XHJcbiAgICAgICAgZCA9IHN0YXJ0ZGVub20sICAgICAgICAgICAgICAgICAvLyAgIGFuZCBkZW5vbWluYXRvciBkID0gMiBeIDQ4LlxyXG4gICAgICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBhbmQgbm8gJ2V4dHJhIGxhc3QgYnl0ZScuXHJcbiAgICB3aGlsZSAobiA8IHNpZ25pZmljYW5jZSkgeyAgICAgICAgICAvLyBGaWxsIHVwIGFsbCBzaWduaWZpY2FudCBkaWdpdHMgYnlcclxuICAgICAgbiA9IChuICsgeCkgKiB3aWR0aDsgICAgICAgICAgICAgIC8vICAgc2hpZnRpbmcgbnVtZXJhdG9yIGFuZFxyXG4gICAgICBkICo9IHdpZHRoOyAgICAgICAgICAgICAgICAgICAgICAgLy8gICBkZW5vbWluYXRvciBhbmQgZ2VuZXJhdGluZyBhXHJcbiAgICAgIHggPSBhcmM0LmcoMSk7ICAgICAgICAgICAgICAgICAgICAvLyAgIG5ldyBsZWFzdC1zaWduaWZpY2FudC1ieXRlLlxyXG4gICAgfVxyXG4gICAgd2hpbGUgKG4gPj0gb3ZlcmZsb3cpIHsgICAgICAgICAgICAgLy8gVG8gYXZvaWQgcm91bmRpbmcgdXAsIGJlZm9yZSBhZGRpbmdcclxuICAgICAgbiAvPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgbGFzdCBieXRlLCBzaGlmdCBldmVyeXRoaW5nXHJcbiAgICAgIGQgLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHJpZ2h0IHVzaW5nIGludGVnZXIgTWF0aCB1bnRpbFxyXG4gICAgICB4ID4+Pj0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3ZSBoYXZlIGV4YWN0bHkgdGhlIGRlc2lyZWQgYml0cy5cclxuICAgIH1cclxuICAgIHJldHVybiAobiArIHgpIC8gZDsgICAgICAgICAgICAgICAgIC8vIEZvcm0gdGhlIG51bWJlciB3aXRoaW4gWzAsIDEpLlxyXG4gIH07XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5yZXNldEdsb2JhbCA9IGZ1bmN0aW9uICgpIHtcclxuICBNYXRoLnJhbmRvbSA9IG9sZFJhbmRvbTtcclxufTtcclxuXHJcbi8vXHJcbi8vIEFSQzRcclxuLy9cclxuLy8gQW4gQVJDNCBpbXBsZW1lbnRhdGlvbi4gIFRoZSBjb25zdHJ1Y3RvciB0YWtlcyBhIGtleSBpbiB0aGUgZm9ybSBvZlxyXG4vLyBhbiBhcnJheSBvZiBhdCBtb3N0ICh3aWR0aCkgaW50ZWdlcnMgdGhhdCBzaG91bGQgYmUgMCA8PSB4IDwgKHdpZHRoKS5cclxuLy9cclxuLy8gVGhlIGcoY291bnQpIG1ldGhvZCByZXR1cm5zIGEgcHNldWRvcmFuZG9tIGludGVnZXIgdGhhdCBjb25jYXRlbmF0ZXNcclxuLy8gdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGZyb20gQVJDNC4gIEl0cyByZXR1cm4gdmFsdWUgaXMgYSBudW1iZXIgeFxyXG4vLyB0aGF0IGlzIGluIHRoZSByYW5nZSAwIDw9IHggPCAod2lkdGggXiBjb3VudCkuXHJcbi8vXHJcbi8qKiBAY29uc3RydWN0b3IgKi9cclxuZnVuY3Rpb24gQVJDNChrZXkpIHtcclxuICB2YXIgdCwga2V5bGVuID0ga2V5Lmxlbmd0aCxcclxuICAgICAgbWUgPSB0aGlzLCBpID0gMCwgaiA9IG1lLmkgPSBtZS5qID0gMCwgcyA9IG1lLlMgPSBbXTtcclxuXHJcbiAgLy8gVGhlIGVtcHR5IGtleSBbXSBpcyB0cmVhdGVkIGFzIFswXS5cclxuICBpZiAoIWtleWxlbikgeyBrZXkgPSBba2V5bGVuKytdOyB9XHJcblxyXG4gIC8vIFNldCB1cCBTIHVzaW5nIHRoZSBzdGFuZGFyZCBrZXkgc2NoZWR1bGluZyBhbGdvcml0aG0uXHJcbiAgd2hpbGUgKGkgPCB3aWR0aCkge1xyXG4gICAgc1tpXSA9IGkrKztcclxuICB9XHJcbiAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcclxuICAgIHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyBrZXlbaSAlIGtleWxlbl0gKyAodCA9IHNbaV0pKV07XHJcbiAgICBzW2pdID0gdDtcclxuICB9XHJcblxyXG4gIC8vIFRoZSBcImdcIiBtZXRob2QgcmV0dXJucyB0aGUgbmV4dCAoY291bnQpIG91dHB1dHMgYXMgb25lIG51bWJlci5cclxuICAobWUuZyA9IGZ1bmN0aW9uKGNvdW50KSB7XHJcbiAgICAvLyBVc2luZyBpbnN0YW5jZSBtZW1iZXJzIGluc3RlYWQgb2YgY2xvc3VyZSBzdGF0ZSBuZWFybHkgZG91YmxlcyBzcGVlZC5cclxuICAgIHZhciB0LCByID0gMCxcclxuICAgICAgICBpID0gbWUuaSwgaiA9IG1lLmosIHMgPSBtZS5TO1xyXG4gICAgd2hpbGUgKGNvdW50LS0pIHtcclxuICAgICAgdCA9IHNbaSA9IG1hc2sgJiAoaSArIDEpXTtcclxuICAgICAgciA9IHIgKiB3aWR0aCArIHNbbWFzayAmICgoc1tpXSA9IHNbaiA9IG1hc2sgJiAoaiArIHQpXSkgKyAoc1tqXSA9IHQpKV07XHJcbiAgICB9XHJcbiAgICBtZS5pID0gaTsgbWUuaiA9IGo7XHJcbiAgICByZXR1cm4gcjtcclxuICAgIC8vIEZvciByb2J1c3QgdW5wcmVkaWN0YWJpbGl0eSBkaXNjYXJkIGFuIGluaXRpYWwgYmF0Y2ggb2YgdmFsdWVzLlxyXG4gICAgLy8gU2VlIGh0dHA6Ly93d3cucnNhLmNvbS9yc2FsYWJzL25vZGUuYXNwP2lkPTIwMDlcclxuICB9KSh3aWR0aCk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIGZsYXR0ZW4oKVxyXG4vLyBDb252ZXJ0cyBhbiBvYmplY3QgdHJlZSB0byBuZXN0ZWQgYXJyYXlzIG9mIHN0cmluZ3MuXHJcbi8vXHJcbmZ1bmN0aW9uIGZsYXR0ZW4ob2JqLCBkZXB0aCkge1xyXG4gIHZhciByZXN1bHQgPSBbXSwgdHlwID0gKHR5cGVvZiBvYmopWzBdLCBwcm9wO1xyXG4gIGlmIChkZXB0aCAmJiB0eXAgPT0gJ28nKSB7XHJcbiAgICBmb3IgKHByb3AgaW4gb2JqKSB7XHJcbiAgICAgIHRyeSB7IHJlc3VsdC5wdXNoKGZsYXR0ZW4ob2JqW3Byb3BdLCBkZXB0aCAtIDEpKTsgfSBjYXRjaCAoZSkge31cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIChyZXN1bHQubGVuZ3RoID8gcmVzdWx0IDogdHlwID09ICdzJyA/IG9iaiA6IG9iaiArICdcXDAnKTtcclxufVxyXG5cclxuLy9cclxuLy8gbWl4a2V5KClcclxuLy8gTWl4ZXMgYSBzdHJpbmcgc2VlZCBpbnRvIGEga2V5IHRoYXQgaXMgYW4gYXJyYXkgb2YgaW50ZWdlcnMsIGFuZFxyXG4vLyByZXR1cm5zIGEgc2hvcnRlbmVkIHN0cmluZyBzZWVkIHRoYXQgaXMgZXF1aXZhbGVudCB0byB0aGUgcmVzdWx0IGtleS5cclxuLy9cclxuZnVuY3Rpb24gbWl4a2V5KHNlZWQsIGtleSkge1xyXG4gIHZhciBzdHJpbmdzZWVkID0gc2VlZCArICcnLCBzbWVhciwgaiA9IDA7XHJcbiAgd2hpbGUgKGogPCBzdHJpbmdzZWVkLmxlbmd0aCkge1xyXG4gICAga2V5W21hc2sgJiBqXSA9XHJcbiAgICAgIG1hc2sgJiAoKHNtZWFyIF49IGtleVttYXNrICYgal0gKiAxOSkgKyBzdHJpbmdzZWVkLmNoYXJDb2RlQXQoaisrKSk7XHJcbiAgfVxyXG4gIHJldHVybiB0b3N0cmluZyhrZXkpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBhdXRvc2VlZCgpXHJcbi8vIFJldHVybnMgYW4gb2JqZWN0IGZvciBhdXRvc2VlZGluZywgdXNpbmcgd2luZG93LmNyeXB0byBpZiBhdmFpbGFibGUuXHJcbi8vXHJcbi8qKiBAcGFyYW0ge1VpbnQ4QXJyYXk9fSBzZWVkICovXHJcbmZ1bmN0aW9uIGF1dG9zZWVkKHNlZWQpIHtcclxuICB0cnkge1xyXG4gICAgR0xPQkFMLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoc2VlZCA9IG5ldyBVaW50OEFycmF5KHdpZHRoKSk7XHJcbiAgICByZXR1cm4gdG9zdHJpbmcoc2VlZCk7XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgcmV0dXJuIFsrbmV3IERhdGUsIEdMT0JBTCwgR0xPQkFMLm5hdmlnYXRvciAmJiBHTE9CQUwubmF2aWdhdG9yLnBsdWdpbnMsXHJcbiAgICAgICAgICAgIEdMT0JBTC5zY3JlZW4sIHRvc3RyaW5nKHBvb2wpXTtcclxuICB9XHJcbn1cclxuXHJcbi8vXHJcbi8vIHRvc3RyaW5nKClcclxuLy8gQ29udmVydHMgYW4gYXJyYXkgb2YgY2hhcmNvZGVzIHRvIGEgc3RyaW5nXHJcbi8vXHJcbmZ1bmN0aW9uIHRvc3RyaW5nKGEpIHtcclxuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseSgwLCBhKTtcclxufVxyXG5cclxuLy9cclxuLy8gV2hlbiBzZWVkcmFuZG9tLmpzIGlzIGxvYWRlZCwgd2UgaW1tZWRpYXRlbHkgbWl4IGEgZmV3IGJpdHNcclxuLy8gZnJvbSB0aGUgYnVpbHQtaW4gUk5HIGludG8gdGhlIGVudHJvcHkgcG9vbC4gIEJlY2F1c2Ugd2UgZG9cclxuLy8gbm90IHdhbnQgdG8gaW50ZWZlcmUgd2l0aCBkZXRlcm1pbnN0aWMgUFJORyBzdGF0ZSBsYXRlcixcclxuLy8gc2VlZHJhbmRvbSB3aWxsIG5vdCBjYWxsIE1hdGgucmFuZG9tIG9uIGl0cyBvd24gYWdhaW4gYWZ0ZXJcclxuLy8gaW5pdGlhbGl6YXRpb24uXHJcbi8vXHJcbm1peGtleShNYXRoLnJhbmRvbSgpLCBwb29sKTtcclxuIiwiLypcbiAqIEEgZmFzdCBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHNpbXBsZXggbm9pc2UgYnkgSm9uYXMgV2FnbmVyXG5cbkJhc2VkIG9uIGEgc3BlZWQtaW1wcm92ZWQgc2ltcGxleCBub2lzZSBhbGdvcml0aG0gZm9yIDJELCAzRCBhbmQgNEQgaW4gSmF2YS5cbldoaWNoIGlzIGJhc2VkIG9uIGV4YW1wbGUgY29kZSBieSBTdGVmYW4gR3VzdGF2c29uIChzdGVndUBpdG4ubGl1LnNlKS5cbldpdGggT3B0aW1pc2F0aW9ucyBieSBQZXRlciBFYXN0bWFuIChwZWFzdG1hbkBkcml6emxlLnN0YW5mb3JkLmVkdSkuXG5CZXR0ZXIgcmFuayBvcmRlcmluZyBtZXRob2QgYnkgU3RlZmFuIEd1c3RhdnNvbiBpbiAyMDEyLlxuXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTggSm9uYXMgV2FnbmVyXG5cbiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiBTT0ZUV0FSRS5cbiAqL1xuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIEYyID0gMC41ICogKE1hdGguc3FydCgzLjApIC0gMS4wKTtcbiAgdmFyIEcyID0gKDMuMCAtIE1hdGguc3FydCgzLjApKSAvIDYuMDtcbiAgdmFyIEYzID0gMS4wIC8gMy4wO1xuICB2YXIgRzMgPSAxLjAgLyA2LjA7XG4gIHZhciBGNCA9IChNYXRoLnNxcnQoNS4wKSAtIDEuMCkgLyA0LjA7XG4gIHZhciBHNCA9ICg1LjAgLSBNYXRoLnNxcnQoNS4wKSkgLyAyMC4wO1xuXG4gIGZ1bmN0aW9uIFNpbXBsZXhOb2lzZShyYW5kb21PclNlZWQpIHtcbiAgICB2YXIgcmFuZG9tO1xuICAgIGlmICh0eXBlb2YgcmFuZG9tT3JTZWVkID09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJhbmRvbSA9IHJhbmRvbU9yU2VlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZG9tT3JTZWVkKSB7XG4gICAgICByYW5kb20gPSBhbGVhKHJhbmRvbU9yU2VlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmRvbSA9IE1hdGgucmFuZG9tO1xuICAgIH1cbiAgICB0aGlzLnAgPSBidWlsZFBlcm11dGF0aW9uVGFibGUocmFuZG9tKTtcbiAgICB0aGlzLnBlcm0gPSBuZXcgVWludDhBcnJheSg1MTIpO1xuICAgIHRoaXMucGVybU1vZDEyID0gbmV3IFVpbnQ4QXJyYXkoNTEyKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUxMjsgaSsrKSB7XG4gICAgICB0aGlzLnBlcm1baV0gPSB0aGlzLnBbaSAmIDI1NV07XG4gICAgICB0aGlzLnBlcm1Nb2QxMltpXSA9IHRoaXMucGVybVtpXSAlIDEyO1xuICAgIH1cblxuICB9XG4gIFNpbXBsZXhOb2lzZS5wcm90b3R5cGUgPSB7XG4gICAgZ3JhZDM6IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDEsIDAsXG4gICAgICAtMSwgMSwgMCxcbiAgICAgIDEsIC0xLCAwLFxuXG4gICAgICAtMSwgLTEsIDAsXG4gICAgICAxLCAwLCAxLFxuICAgICAgLTEsIDAsIDEsXG5cbiAgICAgIDEsIDAsIC0xLFxuICAgICAgLTEsIDAsIC0xLFxuICAgICAgMCwgMSwgMSxcblxuICAgICAgMCwgLTEsIDEsXG4gICAgICAwLCAxLCAtMSxcbiAgICAgIDAsIC0xLCAtMV0pLFxuICAgIGdyYWQ0OiBuZXcgRmxvYXQzMkFycmF5KFswLCAxLCAxLCAxLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIDEsIDAsIDEsIC0xLCAtMSxcbiAgICAgIDAsIC0xLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSxcbiAgICAgIDEsIDAsIDEsIDEsIDEsIDAsIDEsIC0xLCAxLCAwLCAtMSwgMSwgMSwgMCwgLTEsIC0xLFxuICAgICAgLTEsIDAsIDEsIDEsIC0xLCAwLCAxLCAtMSwgLTEsIDAsIC0xLCAxLCAtMSwgMCwgLTEsIC0xLFxuICAgICAgMSwgMSwgMCwgMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAxLCAxLCAtMSwgMCwgLTEsXG4gICAgICAtMSwgMSwgMCwgMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsIDAsIDEsIC0xLCAtMSwgMCwgLTEsXG4gICAgICAxLCAxLCAxLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIDEsIDAsIDEsIC0xLCAtMSwgMCxcbiAgICAgIC0xLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSwgMF0pLFxuICAgIG5vaXNlMkQ6IGZ1bmN0aW9uKHhpbiwgeWluKSB7XG4gICAgICB2YXIgcGVybU1vZDEyID0gdGhpcy5wZXJtTW9kMTI7XG4gICAgICB2YXIgcGVybSA9IHRoaXMucGVybTtcbiAgICAgIHZhciBncmFkMyA9IHRoaXMuZ3JhZDM7XG4gICAgICB2YXIgbjAgPSAwOyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIHRocmVlIGNvcm5lcnNcbiAgICAgIHZhciBuMSA9IDA7XG4gICAgICB2YXIgbjIgPSAwO1xuICAgICAgLy8gU2tldyB0aGUgaW5wdXQgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggY2VsbCB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeGluICsgeWluKSAqIEYyOyAvLyBIYWlyeSBmYWN0b3IgZm9yIDJEXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeGluICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeWluICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaikgKiBHMjtcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSkgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIHgwID0geGluIC0gWDA7IC8vIFRoZSB4LHkgZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5aW4gLSBZMDtcbiAgICAgIC8vIEZvciB0aGUgMkQgY2FzZSwgdGhlIHNpbXBsZXggc2hhcGUgaXMgYW4gZXF1aWxhdGVyYWwgdHJpYW5nbGUuXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc2ltcGxleCB3ZSBhcmUgaW4uXG4gICAgICB2YXIgaTEsIGoxOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgKG1pZGRsZSkgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaikgY29vcmRzXG4gICAgICBpZiAoeDAgPiB5MCkge1xuICAgICAgICBpMSA9IDE7XG4gICAgICAgIGoxID0gMDtcbiAgICAgIH0gLy8gbG93ZXIgdHJpYW5nbGUsIFhZIG9yZGVyOiAoMCwwKS0+KDEsMCktPigxLDEpXG4gICAgICBlbHNlIHtcbiAgICAgICAgaTEgPSAwO1xuICAgICAgICBqMSA9IDE7XG4gICAgICB9IC8vIHVwcGVyIHRyaWFuZ2xlLCBZWCBvcmRlcjogKDAsMCktPigwLDEpLT4oMSwxKVxuICAgICAgLy8gQSBzdGVwIG9mICgxLDApIGluIChpLGopIG1lYW5zIGEgc3RlcCBvZiAoMS1jLC1jKSBpbiAoeCx5KSwgYW5kXG4gICAgICAvLyBhIHN0ZXAgb2YgKDAsMSkgaW4gKGksaikgbWVhbnMgYSBzdGVwIG9mICgtYywxLWMpIGluICh4LHkpLCB3aGVyZVxuICAgICAgLy8gYyA9ICgzLXNxcnQoMykpLzZcbiAgICAgIHZhciB4MSA9IHgwIC0gaTEgKyBHMjsgLy8gT2Zmc2V0cyBmb3IgbWlkZGxlIGNvcm5lciBpbiAoeCx5KSB1bnNrZXdlZCBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHMjtcbiAgICAgIHZhciB4MiA9IHgwIC0gMS4wICsgMi4wICogRzI7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkpIHVuc2tld2VkIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSAxLjAgKyAyLjAgKiBHMjtcbiAgICAgIC8vIFdvcmsgb3V0IHRoZSBoYXNoZWQgZ3JhZGllbnQgaW5kaWNlcyBvZiB0aGUgdGhyZWUgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgY29udHJpYnV0aW9uIGZyb20gdGhlIHRocmVlIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNSAtIHgwICogeDAgLSB5MCAqIHkwO1xuICAgICAgaWYgKHQwID49IDApIHtcbiAgICAgICAgdmFyIGdpMCA9IHBlcm1Nb2QxMltpaSArIHBlcm1bampdXSAqIDM7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDNbZ2kwXSAqIHgwICsgZ3JhZDNbZ2kwICsgMV0gKiB5MCk7IC8vICh4LHkpIG9mIGdyYWQzIHVzZWQgZm9yIDJEIGdyYWRpZW50XG4gICAgICB9XG4gICAgICB2YXIgdDEgPSAwLjUgLSB4MSAqIHgxIC0geTEgKiB5MTtcbiAgICAgIGlmICh0MSA+PSAwKSB7XG4gICAgICAgIHZhciBnaTEgPSBwZXJtTW9kMTJbaWkgKyBpMSArIHBlcm1bamogKyBqMV1dICogMztcbiAgICAgICAgdDEgKj0gdDE7XG4gICAgICAgIG4xID0gdDEgKiB0MSAqIChncmFkM1tnaTFdICogeDEgKyBncmFkM1tnaTEgKyAxXSAqIHkxKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MiA9IDAuNSAtIHgyICogeDIgLSB5MiAqIHkyO1xuICAgICAgaWYgKHQyID49IDApIHtcbiAgICAgICAgdmFyIGdpMiA9IHBlcm1Nb2QxMltpaSArIDEgKyBwZXJtW2pqICsgMV1dICogMztcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkM1tnaTJdICogeDIgKyBncmFkM1tnaTIgKyAxXSAqIHkyKTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZCBjb250cmlidXRpb25zIGZyb20gZWFjaCBjb3JuZXIgdG8gZ2V0IHRoZSBmaW5hbCBub2lzZSB2YWx1ZS5cbiAgICAgIC8vIFRoZSByZXN1bHQgaXMgc2NhbGVkIHRvIHJldHVybiB2YWx1ZXMgaW4gdGhlIGludGVydmFsIFstMSwxXS5cbiAgICAgIHJldHVybiA3MC4wICogKG4wICsgbjEgKyBuMik7XG4gICAgfSxcbiAgICAvLyAzRCBzaW1wbGV4IG5vaXNlXG4gICAgbm9pc2UzRDogZnVuY3Rpb24oeGluLCB5aW4sIHppbikge1xuICAgICAgdmFyIHBlcm1Nb2QxMiA9IHRoaXMucGVybU1vZDEyO1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDMgPSB0aGlzLmdyYWQzO1xuICAgICAgdmFyIG4wLCBuMSwgbjIsIG4zOyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIGZvdXIgY29ybmVyc1xuICAgICAgLy8gU2tldyB0aGUgaW5wdXQgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggY2VsbCB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeGluICsgeWluICsgemluKSAqIEYzOyAvLyBWZXJ5IG5pY2UgYW5kIHNpbXBsZSBza2V3IGZhY3RvciBmb3IgM0RcbiAgICAgIHZhciBpID0gTWF0aC5mbG9vcih4aW4gKyBzKTtcbiAgICAgIHZhciBqID0gTWF0aC5mbG9vcih5aW4gKyBzKTtcbiAgICAgIHZhciBrID0gTWF0aC5mbG9vcih6aW4gKyBzKTtcbiAgICAgIHZhciB0ID0gKGkgKyBqICsgaykgKiBHMztcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSx6KSBzcGFjZVxuICAgICAgdmFyIFkwID0gaiAtIHQ7XG4gICAgICB2YXIgWjAgPSBrIC0gdDtcbiAgICAgIHZhciB4MCA9IHhpbiAtIFgwOyAvLyBUaGUgeCx5LHogZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5aW4gLSBZMDtcbiAgICAgIHZhciB6MCA9IHppbiAtIFowO1xuICAgICAgLy8gRm9yIHRoZSAzRCBjYXNlLCB0aGUgc2ltcGxleCBzaGFwZSBpcyBhIHNsaWdodGx5IGlycmVndWxhciB0ZXRyYWhlZHJvbi5cbiAgICAgIC8vIERldGVybWluZSB3aGljaCBzaW1wbGV4IHdlIGFyZSBpbi5cbiAgICAgIHZhciBpMSwgajEsIGsxOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaixrKSBjb29yZHNcbiAgICAgIHZhciBpMiwgajIsIGsyOyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgb2Ygc2ltcGxleCBpbiAoaSxqLGspIGNvb3Jkc1xuICAgICAgaWYgKHgwID49IHkwKSB7XG4gICAgICAgIGlmICh5MCA+PSB6MCkge1xuICAgICAgICAgIGkxID0gMTtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAwO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgazIgPSAwO1xuICAgICAgICB9IC8vIFggWSBaIG9yZGVyXG4gICAgICAgIGVsc2UgaWYgKHgwID49IHowKSB7XG4gICAgICAgICAgaTEgPSAxO1xuICAgICAgICAgIGoxID0gMDtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMDtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWCBaIFkgb3JkZXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMDtcbiAgICAgICAgICBrMSA9IDE7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMDtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWiBYIFkgb3JkZXJcbiAgICAgIH1cbiAgICAgIGVsc2UgeyAvLyB4MDx5MFxuICAgICAgICBpZiAoeTAgPCB6MCkge1xuICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAxO1xuICAgICAgICAgIGkyID0gMDtcbiAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFogWSBYIG9yZGVyXG4gICAgICAgIGVsc2UgaWYgKHgwIDwgejApIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAxO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDA7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgfSAvLyBZIFogWCBvcmRlclxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAxO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDE7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMDtcbiAgICAgICAgfSAvLyBZIFggWiBvcmRlclxuICAgICAgfVxuICAgICAgLy8gQSBzdGVwIG9mICgxLDAsMCkgaW4gKGksaixrKSBtZWFucyBhIHN0ZXAgb2YgKDEtYywtYywtYykgaW4gKHgseSx6KSxcbiAgICAgIC8vIGEgc3RlcCBvZiAoMCwxLDApIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgtYywxLWMsLWMpIGluICh4LHkseiksIGFuZFxuICAgICAgLy8gYSBzdGVwIG9mICgwLDAsMSkgaW4gKGksaixrKSBtZWFucyBhIHN0ZXAgb2YgKC1jLC1jLDEtYykgaW4gKHgseSx6KSwgd2hlcmVcbiAgICAgIC8vIGMgPSAxLzYuXG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzM7IC8vIE9mZnNldHMgZm9yIHNlY29uZCBjb3JuZXIgaW4gKHgseSx6KSBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHMztcbiAgICAgIHZhciB6MSA9IHowIC0gazEgKyBHMztcbiAgICAgIHZhciB4MiA9IHgwIC0gaTIgKyAyLjAgKiBHMzsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIGluICh4LHkseikgY29vcmRzXG4gICAgICB2YXIgeTIgPSB5MCAtIGoyICsgMi4wICogRzM7XG4gICAgICB2YXIgejIgPSB6MCAtIGsyICsgMi4wICogRzM7XG4gICAgICB2YXIgeDMgPSB4MCAtIDEuMCArIDMuMCAqIEczOyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5LHopIGNvb3Jkc1xuICAgICAgdmFyIHkzID0geTAgLSAxLjAgKyAzLjAgKiBHMztcbiAgICAgIHZhciB6MyA9IHowIC0gMS4wICsgMy4wICogRzM7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIGZvdXIgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIHZhciBrayA9IGsgJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBmb3VyIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNiAtIHgwICogeDAgLSB5MCAqIHkwIC0gejAgKiB6MDtcbiAgICAgIGlmICh0MCA8IDApIG4wID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTAgPSBwZXJtTW9kMTJbaWkgKyBwZXJtW2pqICsgcGVybVtra11dXSAqIDM7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDNbZ2kwXSAqIHgwICsgZ3JhZDNbZ2kwICsgMV0gKiB5MCArIGdyYWQzW2dpMCArIDJdICogejApO1xuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC42IC0geDEgKiB4MSAtIHkxICogeTEgLSB6MSAqIHoxO1xuICAgICAgaWYgKHQxIDwgMCkgbjEgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMSA9IHBlcm1Nb2QxMltpaSArIGkxICsgcGVybVtqaiArIGoxICsgcGVybVtrayArIGsxXV1dICogMztcbiAgICAgICAgdDEgKj0gdDE7XG4gICAgICAgIG4xID0gdDEgKiB0MSAqIChncmFkM1tnaTFdICogeDEgKyBncmFkM1tnaTEgKyAxXSAqIHkxICsgZ3JhZDNbZ2kxICsgMl0gKiB6MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjYgLSB4MiAqIHgyIC0geTIgKiB5MiAtIHoyICogejI7XG4gICAgICBpZiAodDIgPCAwKSBuMiA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kyID0gcGVybU1vZDEyW2lpICsgaTIgKyBwZXJtW2pqICsgajIgKyBwZXJtW2trICsgazJdXV0gKiAzO1xuICAgICAgICB0MiAqPSB0MjtcbiAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQzW2dpMl0gKiB4MiArIGdyYWQzW2dpMiArIDFdICogeTIgKyBncmFkM1tnaTIgKyAyXSAqIHoyKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MyA9IDAuNiAtIHgzICogeDMgLSB5MyAqIHkzIC0gejMgKiB6MztcbiAgICAgIGlmICh0MyA8IDApIG4zID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTMgPSBwZXJtTW9kMTJbaWkgKyAxICsgcGVybVtqaiArIDEgKyBwZXJtW2trICsgMV1dXSAqIDM7XG4gICAgICAgIHQzICo9IHQzO1xuICAgICAgICBuMyA9IHQzICogdDMgKiAoZ3JhZDNbZ2kzXSAqIHgzICsgZ3JhZDNbZ2kzICsgMV0gKiB5MyArIGdyYWQzW2dpMyArIDJdICogejMpO1xuICAgICAgfVxuICAgICAgLy8gQWRkIGNvbnRyaWJ1dGlvbnMgZnJvbSBlYWNoIGNvcm5lciB0byBnZXQgdGhlIGZpbmFsIG5vaXNlIHZhbHVlLlxuICAgICAgLy8gVGhlIHJlc3VsdCBpcyBzY2FsZWQgdG8gc3RheSBqdXN0IGluc2lkZSBbLTEsMV1cbiAgICAgIHJldHVybiAzMi4wICogKG4wICsgbjEgKyBuMiArIG4zKTtcbiAgICB9LFxuICAgIC8vIDREIHNpbXBsZXggbm9pc2UsIGJldHRlciBzaW1wbGV4IHJhbmsgb3JkZXJpbmcgbWV0aG9kIDIwMTItMDMtMDlcbiAgICBub2lzZTREOiBmdW5jdGlvbih4LCB5LCB6LCB3KSB7XG4gICAgICB2YXIgcGVybSA9IHRoaXMucGVybTtcbiAgICAgIHZhciBncmFkNCA9IHRoaXMuZ3JhZDQ7XG5cbiAgICAgIHZhciBuMCwgbjEsIG4yLCBuMywgbjQ7IC8vIE5vaXNlIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgZml2ZSBjb3JuZXJzXG4gICAgICAvLyBTa2V3IHRoZSAoeCx5LHosdykgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIGNlbGwgb2YgMjQgc2ltcGxpY2VzIHdlJ3JlIGluXG4gICAgICB2YXIgcyA9ICh4ICsgeSArIHogKyB3KSAqIEY0OyAvLyBGYWN0b3IgZm9yIDREIHNrZXdpbmdcbiAgICAgIHZhciBpID0gTWF0aC5mbG9vcih4ICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeSArIHMpO1xuICAgICAgdmFyIGsgPSBNYXRoLmZsb29yKHogKyBzKTtcbiAgICAgIHZhciBsID0gTWF0aC5mbG9vcih3ICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaiArIGsgKyBsKSAqIEc0OyAvLyBGYWN0b3IgZm9yIDREIHVuc2tld2luZ1xuICAgICAgdmFyIFgwID0gaSAtIHQ7IC8vIFVuc2tldyB0aGUgY2VsbCBvcmlnaW4gYmFjayB0byAoeCx5LHosdykgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIFowID0gayAtIHQ7XG4gICAgICB2YXIgVzAgPSBsIC0gdDtcbiAgICAgIHZhciB4MCA9IHggLSBYMDsgLy8gVGhlIHgseSx6LHcgZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5IC0gWTA7XG4gICAgICB2YXIgejAgPSB6IC0gWjA7XG4gICAgICB2YXIgdzAgPSB3IC0gVzA7XG4gICAgICAvLyBGb3IgdGhlIDREIGNhc2UsIHRoZSBzaW1wbGV4IGlzIGEgNEQgc2hhcGUgSSB3b24ndCBldmVuIHRyeSB0byBkZXNjcmliZS5cbiAgICAgIC8vIFRvIGZpbmQgb3V0IHdoaWNoIG9mIHRoZSAyNCBwb3NzaWJsZSBzaW1wbGljZXMgd2UncmUgaW4sIHdlIG5lZWQgdG9cbiAgICAgIC8vIGRldGVybWluZSB0aGUgbWFnbml0dWRlIG9yZGVyaW5nIG9mIHgwLCB5MCwgejAgYW5kIHcwLlxuICAgICAgLy8gU2l4IHBhaXItd2lzZSBjb21wYXJpc29ucyBhcmUgcGVyZm9ybWVkIGJldHdlZW4gZWFjaCBwb3NzaWJsZSBwYWlyXG4gICAgICAvLyBvZiB0aGUgZm91ciBjb29yZGluYXRlcywgYW5kIHRoZSByZXN1bHRzIGFyZSB1c2VkIHRvIHJhbmsgdGhlIG51bWJlcnMuXG4gICAgICB2YXIgcmFua3ggPSAwO1xuICAgICAgdmFyIHJhbmt5ID0gMDtcbiAgICAgIHZhciByYW5reiA9IDA7XG4gICAgICB2YXIgcmFua3cgPSAwO1xuICAgICAgaWYgKHgwID4geTApIHJhbmt4Kys7XG4gICAgICBlbHNlIHJhbmt5Kys7XG4gICAgICBpZiAoeDAgPiB6MCkgcmFua3grKztcbiAgICAgIGVsc2UgcmFua3orKztcbiAgICAgIGlmICh4MCA+IHcwKSByYW5reCsrO1xuICAgICAgZWxzZSByYW5rdysrO1xuICAgICAgaWYgKHkwID4gejApIHJhbmt5Kys7XG4gICAgICBlbHNlIHJhbmt6Kys7XG4gICAgICBpZiAoeTAgPiB3MCkgcmFua3krKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIGlmICh6MCA+IHcwKSByYW5reisrO1xuICAgICAgZWxzZSByYW5rdysrO1xuICAgICAgdmFyIGkxLCBqMSwgazEsIGwxOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgc2Vjb25kIHNpbXBsZXggY29ybmVyXG4gICAgICB2YXIgaTIsIGoyLCBrMiwgbDI7IC8vIFRoZSBpbnRlZ2VyIG9mZnNldHMgZm9yIHRoZSB0aGlyZCBzaW1wbGV4IGNvcm5lclxuICAgICAgdmFyIGkzLCBqMywgazMsIGwzOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgZm91cnRoIHNpbXBsZXggY29ybmVyXG4gICAgICAvLyBzaW1wbGV4W2NdIGlzIGEgNC12ZWN0b3Igd2l0aCB0aGUgbnVtYmVycyAwLCAxLCAyIGFuZCAzIGluIHNvbWUgb3JkZXIuXG4gICAgICAvLyBNYW55IHZhbHVlcyBvZiBjIHdpbGwgbmV2ZXIgb2NjdXIsIHNpbmNlIGUuZy4geD55Pno+dyBtYWtlcyB4PHosIHk8dyBhbmQgeDx3XG4gICAgICAvLyBpbXBvc3NpYmxlLiBPbmx5IHRoZSAyNCBpbmRpY2VzIHdoaWNoIGhhdmUgbm9uLXplcm8gZW50cmllcyBtYWtlIGFueSBzZW5zZS5cbiAgICAgIC8vIFdlIHVzZSBhIHRocmVzaG9sZGluZyB0byBzZXQgdGhlIGNvb3JkaW5hdGVzIGluIHR1cm4gZnJvbSB0aGUgbGFyZ2VzdCBtYWduaXR1ZGUuXG4gICAgICAvLyBSYW5rIDMgZGVub3RlcyB0aGUgbGFyZ2VzdCBjb29yZGluYXRlLlxuICAgICAgaTEgPSByYW5reCA+PSAzID8gMSA6IDA7XG4gICAgICBqMSA9IHJhbmt5ID49IDMgPyAxIDogMDtcbiAgICAgIGsxID0gcmFua3ogPj0gMyA/IDEgOiAwO1xuICAgICAgbDEgPSByYW5rdyA+PSAzID8gMSA6IDA7XG4gICAgICAvLyBSYW5rIDIgZGVub3RlcyB0aGUgc2Vjb25kIGxhcmdlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkyID0gcmFua3ggPj0gMiA/IDEgOiAwO1xuICAgICAgajIgPSByYW5reSA+PSAyID8gMSA6IDA7XG4gICAgICBrMiA9IHJhbmt6ID49IDIgPyAxIDogMDtcbiAgICAgIGwyID0gcmFua3cgPj0gMiA/IDEgOiAwO1xuICAgICAgLy8gUmFuayAxIGRlbm90ZXMgdGhlIHNlY29uZCBzbWFsbGVzdCBjb29yZGluYXRlLlxuICAgICAgaTMgPSByYW5reCA+PSAxID8gMSA6IDA7XG4gICAgICBqMyA9IHJhbmt5ID49IDEgPyAxIDogMDtcbiAgICAgIGszID0gcmFua3ogPj0gMSA/IDEgOiAwO1xuICAgICAgbDMgPSByYW5rdyA+PSAxID8gMSA6IDA7XG4gICAgICAvLyBUaGUgZmlmdGggY29ybmVyIGhhcyBhbGwgY29vcmRpbmF0ZSBvZmZzZXRzID0gMSwgc28gbm8gbmVlZCB0byBjb21wdXRlIHRoYXQuXG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzQ7IC8vIE9mZnNldHMgZm9yIHNlY29uZCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgdmFyIHkxID0geTAgLSBqMSArIEc0O1xuICAgICAgdmFyIHoxID0gejAgLSBrMSArIEc0O1xuICAgICAgdmFyIHcxID0gdzAgLSBsMSArIEc0O1xuICAgICAgdmFyIHgyID0geDAgLSBpMiArIDIuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSBqMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHoyID0gejAgLSBrMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHcyID0gdzAgLSBsMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHgzID0geDAgLSBpMyArIDMuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciBmb3VydGggY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MyA9IHkwIC0gajMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB6MyA9IHowIC0gazMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB3MyA9IHcwIC0gbDMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB4NCA9IHgwIC0gMS4wICsgNC4wICogRzQ7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5NCA9IHkwIC0gMS4wICsgNC4wICogRzQ7XG4gICAgICB2YXIgejQgPSB6MCAtIDEuMCArIDQuMCAqIEc0O1xuICAgICAgdmFyIHc0ID0gdzAgLSAxLjAgKyA0LjAgKiBHNDtcbiAgICAgIC8vIFdvcmsgb3V0IHRoZSBoYXNoZWQgZ3JhZGllbnQgaW5kaWNlcyBvZiB0aGUgZml2ZSBzaW1wbGV4IGNvcm5lcnNcbiAgICAgIHZhciBpaSA9IGkgJiAyNTU7XG4gICAgICB2YXIgamogPSBqICYgMjU1O1xuICAgICAgdmFyIGtrID0gayAmIDI1NTtcbiAgICAgIHZhciBsbCA9IGwgJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBmaXZlIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNiAtIHgwICogeDAgLSB5MCAqIHkwIC0gejAgKiB6MCAtIHcwICogdzA7XG4gICAgICBpZiAodDAgPCAwKSBuMCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kwID0gKHBlcm1baWkgKyBwZXJtW2pqICsgcGVybVtrayArIHBlcm1bbGxdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDAgKj0gdDA7XG4gICAgICAgIG4wID0gdDAgKiB0MCAqIChncmFkNFtnaTBdICogeDAgKyBncmFkNFtnaTAgKyAxXSAqIHkwICsgZ3JhZDRbZ2kwICsgMl0gKiB6MCArIGdyYWQ0W2dpMCArIDNdICogdzApO1xuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC42IC0geDEgKiB4MSAtIHkxICogeTEgLSB6MSAqIHoxIC0gdzEgKiB3MTtcbiAgICAgIGlmICh0MSA8IDApIG4xID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTEgPSAocGVybVtpaSArIGkxICsgcGVybVtqaiArIGoxICsgcGVybVtrayArIGsxICsgcGVybVtsbCArIGwxXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDRbZ2kxXSAqIHgxICsgZ3JhZDRbZ2kxICsgMV0gKiB5MSArIGdyYWQ0W2dpMSArIDJdICogejEgKyBncmFkNFtnaTEgKyAzXSAqIHcxKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MiA9IDAuNiAtIHgyICogeDIgLSB5MiAqIHkyIC0gejIgKiB6MiAtIHcyICogdzI7XG4gICAgICBpZiAodDIgPCAwKSBuMiA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kyID0gKHBlcm1baWkgKyBpMiArIHBlcm1bamogKyBqMiArIHBlcm1ba2sgKyBrMiArIHBlcm1bbGwgKyBsMl1dXV0gJSAzMikgKiA0O1xuICAgICAgICB0MiAqPSB0MjtcbiAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQ0W2dpMl0gKiB4MiArIGdyYWQ0W2dpMiArIDFdICogeTIgKyBncmFkNFtnaTIgKyAyXSAqIHoyICsgZ3JhZDRbZ2kyICsgM10gKiB3Mik7XG4gICAgICB9XG4gICAgICB2YXIgdDMgPSAwLjYgLSB4MyAqIHgzIC0geTMgKiB5MyAtIHozICogejMgLSB3MyAqIHczO1xuICAgICAgaWYgKHQzIDwgMCkgbjMgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMyA9IChwZXJtW2lpICsgaTMgKyBwZXJtW2pqICsgajMgKyBwZXJtW2trICsgazMgKyBwZXJtW2xsICsgbDNdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDMgKj0gdDM7XG4gICAgICAgIG4zID0gdDMgKiB0MyAqIChncmFkNFtnaTNdICogeDMgKyBncmFkNFtnaTMgKyAxXSAqIHkzICsgZ3JhZDRbZ2kzICsgMl0gKiB6MyArIGdyYWQ0W2dpMyArIDNdICogdzMpO1xuICAgICAgfVxuICAgICAgdmFyIHQ0ID0gMC42IC0geDQgKiB4NCAtIHk0ICogeTQgLSB6NCAqIHo0IC0gdzQgKiB3NDtcbiAgICAgIGlmICh0NCA8IDApIG40ID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTQgPSAocGVybVtpaSArIDEgKyBwZXJtW2pqICsgMSArIHBlcm1ba2sgKyAxICsgcGVybVtsbCArIDFdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDQgKj0gdDQ7XG4gICAgICAgIG40ID0gdDQgKiB0NCAqIChncmFkNFtnaTRdICogeDQgKyBncmFkNFtnaTQgKyAxXSAqIHk0ICsgZ3JhZDRbZ2k0ICsgMl0gKiB6NCArIGdyYWQ0W2dpNCArIDNdICogdzQpO1xuICAgICAgfVxuICAgICAgLy8gU3VtIHVwIGFuZCBzY2FsZSB0aGUgcmVzdWx0IHRvIGNvdmVyIHRoZSByYW5nZSBbLTEsMV1cbiAgICAgIHJldHVybiAyNy4wICogKG4wICsgbjEgKyBuMiArIG4zICsgbjQpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBidWlsZFBlcm11dGF0aW9uVGFibGUocmFuZG9tKSB7XG4gICAgdmFyIGk7XG4gICAgdmFyIHAgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgcFtpXSA9IGk7XG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykge1xuICAgICAgdmFyIHIgPSBpICsgfn4ocmFuZG9tKCkgKiAoMjU2IC0gaSkpO1xuICAgICAgdmFyIGF1eCA9IHBbaV07XG4gICAgICBwW2ldID0gcFtyXTtcbiAgICAgIHBbcl0gPSBhdXg7XG4gICAgfVxuICAgIHJldHVybiBwO1xuICB9XG4gIFNpbXBsZXhOb2lzZS5fYnVpbGRQZXJtdXRhdGlvblRhYmxlID0gYnVpbGRQZXJtdXRhdGlvblRhYmxlO1xuXG4gIGZ1bmN0aW9uIGFsZWEoKSB7XG4gICAgLy8gSm9oYW5uZXMgQmFhZ8O4ZSA8YmFhZ29lQGJhYWdvZS5jb20+LCAyMDEwXG4gICAgdmFyIHMwID0gMDtcbiAgICB2YXIgczEgPSAwO1xuICAgIHZhciBzMiA9IDA7XG4gICAgdmFyIGMgPSAxO1xuXG4gICAgdmFyIG1hc2ggPSBtYXNoZXIoKTtcbiAgICBzMCA9IG1hc2goJyAnKTtcbiAgICBzMSA9IG1hc2goJyAnKTtcbiAgICBzMiA9IG1hc2goJyAnKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzMCAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczAgPCAwKSB7XG4gICAgICAgIHMwICs9IDE7XG4gICAgICB9XG4gICAgICBzMSAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczEgPCAwKSB7XG4gICAgICAgIHMxICs9IDE7XG4gICAgICB9XG4gICAgICBzMiAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczIgPCAwKSB7XG4gICAgICAgIHMyICs9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIG1hc2ggPSBudWxsO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gMjA5MTYzOSAqIHMwICsgYyAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXG4gICAgICBzMCA9IHMxO1xuICAgICAgczEgPSBzMjtcbiAgICAgIHJldHVybiBzMiA9IHQgLSAoYyA9IHQgfCAwKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1hc2hlcigpIHtcbiAgICB2YXIgbiA9IDB4ZWZjODI0OWQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIGRhdGEgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbiArPSBkYXRhLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIHZhciBoID0gMC4wMjUxOTYwMzI4MjQxNjkzOCAqIG47XG4gICAgICAgIG4gPSBoID4+PiAwO1xuICAgICAgICBoIC09IG47XG4gICAgICAgIGggKj0gbjtcbiAgICAgICAgbiA9IGggPj4+IDA7XG4gICAgICAgIGggLT0gbjtcbiAgICAgICAgbiArPSBoICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcbiAgICAgIH1cbiAgICAgIHJldHVybiAobiA+Pj4gMCkgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxuICAgIH07XG4gIH1cblxuICAvLyBhbWRcbiAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnICYmIGRlZmluZS5hbWQpIGRlZmluZShmdW5jdGlvbigpIHtyZXR1cm4gU2ltcGxleE5vaXNlO30pO1xuICAvLyBjb21tb24ganNcbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykgZXhwb3J0cy5TaW1wbGV4Tm9pc2UgPSBTaW1wbGV4Tm9pc2U7XG4gIC8vIGJyb3dzZXJcbiAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHdpbmRvdy5TaW1wbGV4Tm9pc2UgPSBTaW1wbGV4Tm9pc2U7XG4gIC8vIG5vZGVqc1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IFNpbXBsZXhOb2lzZTtcbiAgfVxuXG59KSgpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfc2xpY2VkVG9BcnJheSA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gc2xpY2VJdGVyYXRvcihhcnIsIGkpIHsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0pIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfSByZXR1cm4gZnVuY3Rpb24gKGFyciwgaSkgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IHJldHVybiBhcnI7IH0gZWxzZSBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSB7IHJldHVybiBzbGljZUl0ZXJhdG9yKGFyciwgaSk7IH0gZWxzZSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9IH07IH0oKTtcblxudmFyIFRBVSA9IE1hdGguUEkgKiAyO1xuXG52YXIgbWFwVG9FbGxpcHNlID0gZnVuY3Rpb24gbWFwVG9FbGxpcHNlKF9yZWYsIHJ4LCByeSwgY29zcGhpLCBzaW5waGksIGNlbnRlcngsIGNlbnRlcnkpIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55O1xuXG4gIHggKj0gcng7XG4gIHkgKj0gcnk7XG5cbiAgdmFyIHhwID0gY29zcGhpICogeCAtIHNpbnBoaSAqIHk7XG4gIHZhciB5cCA9IHNpbnBoaSAqIHggKyBjb3NwaGkgKiB5O1xuXG4gIHJldHVybiB7XG4gICAgeDogeHAgKyBjZW50ZXJ4LFxuICAgIHk6IHlwICsgY2VudGVyeVxuICB9O1xufTtcblxudmFyIGFwcHJveFVuaXRBcmMgPSBmdW5jdGlvbiBhcHByb3hVbml0QXJjKGFuZzEsIGFuZzIpIHtcbiAgLy8gSWYgOTAgZGVncmVlIGNpcmN1bGFyIGFyYywgdXNlIGEgY29uc3RhbnRcbiAgLy8gYXMgZGVyaXZlZCBmcm9tIGh0dHA6Ly9zcGVuY2VybW9ydGVuc2VuLmNvbS9hcnRpY2xlcy9iZXppZXItY2lyY2xlXG4gIHZhciBhID0gYW5nMiA9PT0gMS41NzA3OTYzMjY3OTQ4OTY2ID8gMC41NTE5MTUwMjQ0OTQgOiBhbmcyID09PSAtMS41NzA3OTYzMjY3OTQ4OTY2ID8gLTAuNTUxOTE1MDI0NDk0IDogNCAvIDMgKiBNYXRoLnRhbihhbmcyIC8gNCk7XG5cbiAgdmFyIHgxID0gTWF0aC5jb3MoYW5nMSk7XG4gIHZhciB5MSA9IE1hdGguc2luKGFuZzEpO1xuICB2YXIgeDIgPSBNYXRoLmNvcyhhbmcxICsgYW5nMik7XG4gIHZhciB5MiA9IE1hdGguc2luKGFuZzEgKyBhbmcyKTtcblxuICByZXR1cm4gW3tcbiAgICB4OiB4MSAtIHkxICogYSxcbiAgICB5OiB5MSArIHgxICogYVxuICB9LCB7XG4gICAgeDogeDIgKyB5MiAqIGEsXG4gICAgeTogeTIgLSB4MiAqIGFcbiAgfSwge1xuICAgIHg6IHgyLFxuICAgIHk6IHkyXG4gIH1dO1xufTtcblxudmFyIHZlY3RvckFuZ2xlID0gZnVuY3Rpb24gdmVjdG9yQW5nbGUodXgsIHV5LCB2eCwgdnkpIHtcbiAgdmFyIHNpZ24gPSB1eCAqIHZ5IC0gdXkgKiB2eCA8IDAgPyAtMSA6IDE7XG5cbiAgdmFyIGRvdCA9IHV4ICogdnggKyB1eSAqIHZ5O1xuXG4gIGlmIChkb3QgPiAxKSB7XG4gICAgZG90ID0gMTtcbiAgfVxuXG4gIGlmIChkb3QgPCAtMSkge1xuICAgIGRvdCA9IC0xO1xuICB9XG5cbiAgcmV0dXJuIHNpZ24gKiBNYXRoLmFjb3MoZG90KTtcbn07XG5cbnZhciBnZXRBcmNDZW50ZXIgPSBmdW5jdGlvbiBnZXRBcmNDZW50ZXIocHgsIHB5LCBjeCwgY3ksIHJ4LCByeSwgbGFyZ2VBcmNGbGFnLCBzd2VlcEZsYWcsIHNpbnBoaSwgY29zcGhpLCBweHAsIHB5cCkge1xuICB2YXIgcnhzcSA9IE1hdGgucG93KHJ4LCAyKTtcbiAgdmFyIHJ5c3EgPSBNYXRoLnBvdyhyeSwgMik7XG4gIHZhciBweHBzcSA9IE1hdGgucG93KHB4cCwgMik7XG4gIHZhciBweXBzcSA9IE1hdGgucG93KHB5cCwgMik7XG5cbiAgdmFyIHJhZGljYW50ID0gcnhzcSAqIHJ5c3EgLSByeHNxICogcHlwc3EgLSByeXNxICogcHhwc3E7XG5cbiAgaWYgKHJhZGljYW50IDwgMCkge1xuICAgIHJhZGljYW50ID0gMDtcbiAgfVxuXG4gIHJhZGljYW50IC89IHJ4c3EgKiBweXBzcSArIHJ5c3EgKiBweHBzcTtcbiAgcmFkaWNhbnQgPSBNYXRoLnNxcnQocmFkaWNhbnQpICogKGxhcmdlQXJjRmxhZyA9PT0gc3dlZXBGbGFnID8gLTEgOiAxKTtcblxuICB2YXIgY2VudGVyeHAgPSByYWRpY2FudCAqIHJ4IC8gcnkgKiBweXA7XG4gIHZhciBjZW50ZXJ5cCA9IHJhZGljYW50ICogLXJ5IC8gcnggKiBweHA7XG5cbiAgdmFyIGNlbnRlcnggPSBjb3NwaGkgKiBjZW50ZXJ4cCAtIHNpbnBoaSAqIGNlbnRlcnlwICsgKHB4ICsgY3gpIC8gMjtcbiAgdmFyIGNlbnRlcnkgPSBzaW5waGkgKiBjZW50ZXJ4cCArIGNvc3BoaSAqIGNlbnRlcnlwICsgKHB5ICsgY3kpIC8gMjtcblxuICB2YXIgdngxID0gKHB4cCAtIGNlbnRlcnhwKSAvIHJ4O1xuICB2YXIgdnkxID0gKHB5cCAtIGNlbnRlcnlwKSAvIHJ5O1xuICB2YXIgdngyID0gKC1weHAgLSBjZW50ZXJ4cCkgLyByeDtcbiAgdmFyIHZ5MiA9ICgtcHlwIC0gY2VudGVyeXApIC8gcnk7XG5cbiAgdmFyIGFuZzEgPSB2ZWN0b3JBbmdsZSgxLCAwLCB2eDEsIHZ5MSk7XG4gIHZhciBhbmcyID0gdmVjdG9yQW5nbGUodngxLCB2eTEsIHZ4MiwgdnkyKTtcblxuICBpZiAoc3dlZXBGbGFnID09PSAwICYmIGFuZzIgPiAwKSB7XG4gICAgYW5nMiAtPSBUQVU7XG4gIH1cblxuICBpZiAoc3dlZXBGbGFnID09PSAxICYmIGFuZzIgPCAwKSB7XG4gICAgYW5nMiArPSBUQVU7XG4gIH1cblxuICByZXR1cm4gW2NlbnRlcngsIGNlbnRlcnksIGFuZzEsIGFuZzJdO1xufTtcblxudmFyIGFyY1RvQmV6aWVyID0gZnVuY3Rpb24gYXJjVG9CZXppZXIoX3JlZjIpIHtcbiAgdmFyIHB4ID0gX3JlZjIucHgsXG4gICAgICBweSA9IF9yZWYyLnB5LFxuICAgICAgY3ggPSBfcmVmMi5jeCxcbiAgICAgIGN5ID0gX3JlZjIuY3ksXG4gICAgICByeCA9IF9yZWYyLnJ4LFxuICAgICAgcnkgPSBfcmVmMi5yeSxcbiAgICAgIF9yZWYyJHhBeGlzUm90YXRpb24gPSBfcmVmMi54QXhpc1JvdGF0aW9uLFxuICAgICAgeEF4aXNSb3RhdGlvbiA9IF9yZWYyJHhBeGlzUm90YXRpb24gPT09IHVuZGVmaW5lZCA/IDAgOiBfcmVmMiR4QXhpc1JvdGF0aW9uLFxuICAgICAgX3JlZjIkbGFyZ2VBcmNGbGFnID0gX3JlZjIubGFyZ2VBcmNGbGFnLFxuICAgICAgbGFyZ2VBcmNGbGFnID0gX3JlZjIkbGFyZ2VBcmNGbGFnID09PSB1bmRlZmluZWQgPyAwIDogX3JlZjIkbGFyZ2VBcmNGbGFnLFxuICAgICAgX3JlZjIkc3dlZXBGbGFnID0gX3JlZjIuc3dlZXBGbGFnLFxuICAgICAgc3dlZXBGbGFnID0gX3JlZjIkc3dlZXBGbGFnID09PSB1bmRlZmluZWQgPyAwIDogX3JlZjIkc3dlZXBGbGFnO1xuXG4gIHZhciBjdXJ2ZXMgPSBbXTtcblxuICBpZiAocnggPT09IDAgfHwgcnkgPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgc2lucGhpID0gTWF0aC5zaW4oeEF4aXNSb3RhdGlvbiAqIFRBVSAvIDM2MCk7XG4gIHZhciBjb3NwaGkgPSBNYXRoLmNvcyh4QXhpc1JvdGF0aW9uICogVEFVIC8gMzYwKTtcblxuICB2YXIgcHhwID0gY29zcGhpICogKHB4IC0gY3gpIC8gMiArIHNpbnBoaSAqIChweSAtIGN5KSAvIDI7XG4gIHZhciBweXAgPSAtc2lucGhpICogKHB4IC0gY3gpIC8gMiArIGNvc3BoaSAqIChweSAtIGN5KSAvIDI7XG5cbiAgaWYgKHB4cCA9PT0gMCAmJiBweXAgPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByeCA9IE1hdGguYWJzKHJ4KTtcbiAgcnkgPSBNYXRoLmFicyhyeSk7XG5cbiAgdmFyIGxhbWJkYSA9IE1hdGgucG93KHB4cCwgMikgLyBNYXRoLnBvdyhyeCwgMikgKyBNYXRoLnBvdyhweXAsIDIpIC8gTWF0aC5wb3cocnksIDIpO1xuXG4gIGlmIChsYW1iZGEgPiAxKSB7XG4gICAgcnggKj0gTWF0aC5zcXJ0KGxhbWJkYSk7XG4gICAgcnkgKj0gTWF0aC5zcXJ0KGxhbWJkYSk7XG4gIH1cblxuICB2YXIgX2dldEFyY0NlbnRlciA9IGdldEFyY0NlbnRlcihweCwgcHksIGN4LCBjeSwgcngsIHJ5LCBsYXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZywgc2lucGhpLCBjb3NwaGksIHB4cCwgcHlwKSxcbiAgICAgIF9nZXRBcmNDZW50ZXIyID0gX3NsaWNlZFRvQXJyYXkoX2dldEFyY0NlbnRlciwgNCksXG4gICAgICBjZW50ZXJ4ID0gX2dldEFyY0NlbnRlcjJbMF0sXG4gICAgICBjZW50ZXJ5ID0gX2dldEFyY0NlbnRlcjJbMV0sXG4gICAgICBhbmcxID0gX2dldEFyY0NlbnRlcjJbMl0sXG4gICAgICBhbmcyID0gX2dldEFyY0NlbnRlcjJbM107XG5cbiAgLy8gSWYgJ2FuZzInID09IDkwLjAwMDAwMDAwMDEsIHRoZW4gYHJhdGlvYCB3aWxsIGV2YWx1YXRlIHRvXG4gIC8vIDEuMDAwMDAwMDAwMS4gVGhpcyBjYXVzZXMgYHNlZ21lbnRzYCB0byBiZSBncmVhdGVyIHRoYW4gb25lLCB3aGljaCBpcyBhblxuICAvLyB1bmVjZXNzYXJ5IHNwbGl0LCBhbmQgYWRkcyBleHRyYSBwb2ludHMgdG8gdGhlIGJlemllciBjdXJ2ZS4gVG8gYWxsZXZpYXRlXG4gIC8vIHRoaXMgaXNzdWUsIHdlIHJvdW5kIHRvIDEuMCB3aGVuIHRoZSByYXRpbyBpcyBjbG9zZSB0byAxLjAuXG5cblxuICB2YXIgcmF0aW8gPSBNYXRoLmFicyhhbmcyKSAvIChUQVUgLyA0KTtcbiAgaWYgKE1hdGguYWJzKDEuMCAtIHJhdGlvKSA8IDAuMDAwMDAwMSkge1xuICAgIHJhdGlvID0gMS4wO1xuICB9XG5cbiAgdmFyIHNlZ21lbnRzID0gTWF0aC5tYXgoTWF0aC5jZWlsKHJhdGlvKSwgMSk7XG5cbiAgYW5nMiAvPSBzZWdtZW50cztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnRzOyBpKyspIHtcbiAgICBjdXJ2ZXMucHVzaChhcHByb3hVbml0QXJjKGFuZzEsIGFuZzIpKTtcbiAgICBhbmcxICs9IGFuZzI7XG4gIH1cblxuICByZXR1cm4gY3VydmVzLm1hcChmdW5jdGlvbiAoY3VydmUpIHtcbiAgICB2YXIgX21hcFRvRWxsaXBzZSA9IG1hcFRvRWxsaXBzZShjdXJ2ZVswXSwgcngsIHJ5LCBjb3NwaGksIHNpbnBoaSwgY2VudGVyeCwgY2VudGVyeSksXG4gICAgICAgIHgxID0gX21hcFRvRWxsaXBzZS54LFxuICAgICAgICB5MSA9IF9tYXBUb0VsbGlwc2UueTtcblxuICAgIHZhciBfbWFwVG9FbGxpcHNlMiA9IG1hcFRvRWxsaXBzZShjdXJ2ZVsxXSwgcngsIHJ5LCBjb3NwaGksIHNpbnBoaSwgY2VudGVyeCwgY2VudGVyeSksXG4gICAgICAgIHgyID0gX21hcFRvRWxsaXBzZTIueCxcbiAgICAgICAgeTIgPSBfbWFwVG9FbGxpcHNlMi55O1xuXG4gICAgdmFyIF9tYXBUb0VsbGlwc2UzID0gbWFwVG9FbGxpcHNlKGN1cnZlWzJdLCByeCwgcnksIGNvc3BoaSwgc2lucGhpLCBjZW50ZXJ4LCBjZW50ZXJ5KSxcbiAgICAgICAgeCA9IF9tYXBUb0VsbGlwc2UzLngsXG4gICAgICAgIHkgPSBfbWFwVG9FbGxpcHNlMy55O1xuXG4gICAgcmV0dXJuIHsgeDE6IHgxLCB5MTogeTEsIHgyOiB4MiwgeTI6IHkyLCB4OiB4LCB5OiB5IH07XG4gIH0pO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gYXJjVG9CZXppZXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDsiLCJ2YXIgYmV6aWVyID0gcmVxdWlyZSgnYWRhcHRpdmUtYmV6aWVyLWN1cnZlJylcbnZhciBhYnMgPSByZXF1aXJlKCdhYnMtc3ZnLXBhdGgnKVxudmFyIG5vcm0gPSByZXF1aXJlKCdub3JtYWxpemUtc3ZnLXBhdGgnKVxudmFyIGNvcHkgPSByZXF1aXJlKCd2ZWMyLWNvcHknKVxuXG5mdW5jdGlvbiBzZXQob3V0LCB4LCB5KSB7XG4gICAgb3V0WzBdID0geFxuICAgIG91dFsxXSA9IHlcbiAgICByZXR1cm4gb3V0XG59XG5cbnZhciB0bXAxID0gWzAsMF0sXG4gICAgdG1wMiA9IFswLDBdLFxuICAgIHRtcDMgPSBbMCwwXVxuXG5mdW5jdGlvbiBiZXppZXJUbyhwb2ludHMsIHNjYWxlLCBzdGFydCwgc2VnKSB7XG4gICAgYmV6aWVyKHN0YXJ0LCBcbiAgICAgICAgc2V0KHRtcDEsIHNlZ1sxXSwgc2VnWzJdKSwgXG4gICAgICAgIHNldCh0bXAyLCBzZWdbM10sIHNlZ1s0XSksXG4gICAgICAgIHNldCh0bXAzLCBzZWdbNV0sIHNlZ1s2XSksIHNjYWxlLCBwb2ludHMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29udG91cnMoc3ZnLCBzY2FsZSkge1xuICAgIHZhciBwYXRocyA9IFtdXG5cbiAgICB2YXIgcG9pbnRzID0gW11cbiAgICB2YXIgcGVuID0gWzAsIDBdXG4gICAgbm9ybShhYnMoc3ZnKSkuZm9yRWFjaChmdW5jdGlvbihzZWdtZW50LCBpLCBzZWxmKSB7XG4gICAgICAgIGlmIChzZWdtZW50WzBdID09PSAnTScpIHtcbiAgICAgICAgICAgIGNvcHkocGVuLCBzZWdtZW50LnNsaWNlKDEpKVxuICAgICAgICAgICAgaWYgKHBvaW50cy5sZW5ndGg+MCkge1xuICAgICAgICAgICAgICAgIHBhdGhzLnB1c2gocG9pbnRzKVxuICAgICAgICAgICAgICAgIHBvaW50cyA9IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2VnbWVudFswXSA9PT0gJ0MnKSB7XG4gICAgICAgICAgICBiZXppZXJUbyhwb2ludHMsIHNjYWxlLCBwZW4sIHNlZ21lbnQpXG4gICAgICAgICAgICBzZXQocGVuLCBzZWdtZW50WzVdLCBzZWdtZW50WzZdKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbGxlZ2FsIHR5cGUgaW4gU1ZHOiAnK3NlZ21lbnRbMF0pXG4gICAgICAgIH1cbiAgICB9KVxuICAgIGlmIChwb2ludHMubGVuZ3RoPjApXG4gICAgICAgIHBhdGhzLnB1c2gocG9pbnRzKVxuICAgIHJldHVybiBwYXRoc1xufSIsIlxudmFyIM+AID0gTWF0aC5QSVxudmFyIF8xMjAgPSByYWRpYW5zKDEyMClcblxubW9kdWxlLmV4cG9ydHMgPSBub3JtYWxpemVcblxuLyoqXG4gKiBkZXNjcmliZSBgcGF0aGAgaW4gdGVybXMgb2YgY3ViaWMgYsOpemllciBcbiAqIGN1cnZlcyBhbmQgbW92ZSBjb21tYW5kc1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGhcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoKXtcblx0Ly8gaW5pdCBzdGF0ZVxuXHR2YXIgcHJldlxuXHR2YXIgcmVzdWx0ID0gW11cblx0dmFyIGJlemllclggPSAwXG5cdHZhciBiZXppZXJZID0gMFxuXHR2YXIgc3RhcnRYID0gMFxuXHR2YXIgc3RhcnRZID0gMFxuXHR2YXIgcXVhZFggPSBudWxsXG5cdHZhciBxdWFkWSA9IG51bGxcblx0dmFyIHggPSAwXG5cdHZhciB5ID0gMFxuXG5cdGZvciAodmFyIGkgPSAwLCBsZW4gPSBwYXRoLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0dmFyIHNlZyA9IHBhdGhbaV1cblx0XHR2YXIgY29tbWFuZCA9IHNlZ1swXVxuXHRcdHN3aXRjaCAoY29tbWFuZCkge1xuXHRcdFx0Y2FzZSAnTSc6XG5cdFx0XHRcdHN0YXJ0WCA9IHNlZ1sxXVxuXHRcdFx0XHRzdGFydFkgPSBzZWdbMl1cblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ0EnOlxuXHRcdFx0XHRzZWcgPSBhcmMoeCwgeSxzZWdbMV0sc2VnWzJdLHJhZGlhbnMoc2VnWzNdKSxzZWdbNF0sc2VnWzVdLHNlZ1s2XSxzZWdbN10pXG5cdFx0XHRcdC8vIHNwbGl0IG11bHRpIHBhcnRcblx0XHRcdFx0c2VnLnVuc2hpZnQoJ0MnKVxuXHRcdFx0XHRpZiAoc2VnLmxlbmd0aCA+IDcpIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChzZWcuc3BsaWNlKDAsIDcpKVxuXHRcdFx0XHRcdHNlZy51bnNoaWZ0KCdDJylcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnUyc6XG5cdFx0XHRcdC8vIGRlZmF1bHQgY29udHJvbCBwb2ludFxuXHRcdFx0XHR2YXIgY3ggPSB4XG5cdFx0XHRcdHZhciBjeSA9IHlcblx0XHRcdFx0aWYgKHByZXYgPT0gJ0MnIHx8IHByZXYgPT0gJ1MnKSB7XG5cdFx0XHRcdFx0Y3ggKz0gY3ggLSBiZXppZXJYIC8vIHJlZmxlY3QgdGhlIHByZXZpb3VzIGNvbW1hbmQncyBjb250cm9sXG5cdFx0XHRcdFx0Y3kgKz0gY3kgLSBiZXppZXJZIC8vIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvaW50XG5cdFx0XHRcdH1cblx0XHRcdFx0c2VnID0gWydDJywgY3gsIGN5LCBzZWdbMV0sIHNlZ1syXSwgc2VnWzNdLCBzZWdbNF1dXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdUJzpcblx0XHRcdFx0aWYgKHByZXYgPT0gJ1EnIHx8IHByZXYgPT0gJ1QnKSB7XG5cdFx0XHRcdFx0cXVhZFggPSB4ICogMiAtIHF1YWRYIC8vIGFzIHdpdGggJ1MnIHJlZmxlY3QgcHJldmlvdXMgY29udHJvbCBwb2ludFxuXHRcdFx0XHRcdHF1YWRZID0geSAqIDIgLSBxdWFkWVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1YWRYID0geFxuXHRcdFx0XHRcdHF1YWRZID0geVxuXHRcdFx0XHR9XG5cdFx0XHRcdHNlZyA9IHF1YWRyYXRpYyh4LCB5LCBxdWFkWCwgcXVhZFksIHNlZ1sxXSwgc2VnWzJdKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnUSc6XG5cdFx0XHRcdHF1YWRYID0gc2VnWzFdXG5cdFx0XHRcdHF1YWRZID0gc2VnWzJdXG5cdFx0XHRcdHNlZyA9IHF1YWRyYXRpYyh4LCB5LCBzZWdbMV0sIHNlZ1syXSwgc2VnWzNdLCBzZWdbNF0pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdMJzpcblx0XHRcdFx0c2VnID0gbGluZSh4LCB5LCBzZWdbMV0sIHNlZ1syXSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ0gnOlxuXHRcdFx0XHRzZWcgPSBsaW5lKHgsIHksIHNlZ1sxXSwgeSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ1YnOlxuXHRcdFx0XHRzZWcgPSBsaW5lKHgsIHksIHgsIHNlZ1sxXSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ1onOlxuXHRcdFx0XHRzZWcgPSBsaW5lKHgsIHksIHN0YXJ0WCwgc3RhcnRZKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdC8vIHVwZGF0ZSBzdGF0ZVxuXHRcdHByZXYgPSBjb21tYW5kXG5cdFx0eCA9IHNlZ1tzZWcubGVuZ3RoIC0gMl1cblx0XHR5ID0gc2VnW3NlZy5sZW5ndGggLSAxXVxuXHRcdGlmIChzZWcubGVuZ3RoID4gNCkge1xuXHRcdFx0YmV6aWVyWCA9IHNlZ1tzZWcubGVuZ3RoIC0gNF1cblx0XHRcdGJlemllclkgPSBzZWdbc2VnLmxlbmd0aCAtIDNdXG5cdFx0fSBlbHNlIHtcblx0XHRcdGJlemllclggPSB4XG5cdFx0XHRiZXppZXJZID0geVxuXHRcdH1cblx0XHRyZXN1bHQucHVzaChzZWcpXG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGxpbmUoeDEsIHkxLCB4MiwgeTIpe1xuXHRyZXR1cm4gWydDJywgeDEsIHkxLCB4MiwgeTIsIHgyLCB5Ml1cbn1cblxuZnVuY3Rpb24gcXVhZHJhdGljKHgxLCB5MSwgY3gsIGN5LCB4MiwgeTIpe1xuXHRyZXR1cm4gW1xuXHRcdCdDJyxcblx0XHR4MS8zICsgKDIvMykgKiBjeCxcblx0XHR5MS8zICsgKDIvMykgKiBjeSxcblx0XHR4Mi8zICsgKDIvMykgKiBjeCxcblx0XHR5Mi8zICsgKDIvMykgKiBjeSxcblx0XHR4Mixcblx0XHR5MlxuXHRdXG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgcmlwcGVkIGZyb20gXG4vLyBnaXRodWIuY29tL0RtaXRyeUJhcmFub3Zza2l5L3JhcGhhZWwvYmxvYi80ZDk3ZDQvcmFwaGFlbC5qcyNMMjIxNi1MMjMwNCBcbi8vIHdoaWNoIHJlZmVyZW5jZXMgdzMub3JnL1RSL1NWRzExL2ltcGxub3RlLmh0bWwjQXJjSW1wbGVtZW50YXRpb25Ob3Rlc1xuLy8gVE9ETzogbWFrZSBpdCBodW1hbiByZWFkYWJsZVxuXG5mdW5jdGlvbiBhcmMoeDEsIHkxLCByeCwgcnksIGFuZ2xlLCBsYXJnZV9hcmNfZmxhZywgc3dlZXBfZmxhZywgeDIsIHkyLCByZWN1cnNpdmUpIHtcblx0aWYgKCFyZWN1cnNpdmUpIHtcblx0XHR2YXIgeHkgPSByb3RhdGUoeDEsIHkxLCAtYW5nbGUpXG5cdFx0eDEgPSB4eS54XG5cdFx0eTEgPSB4eS55XG5cdFx0eHkgPSByb3RhdGUoeDIsIHkyLCAtYW5nbGUpXG5cdFx0eDIgPSB4eS54XG5cdFx0eTIgPSB4eS55XG5cdFx0dmFyIHggPSAoeDEgLSB4MikgLyAyXG5cdFx0dmFyIHkgPSAoeTEgLSB5MikgLyAyXG5cdFx0dmFyIGggPSAoeCAqIHgpIC8gKHJ4ICogcngpICsgKHkgKiB5KSAvIChyeSAqIHJ5KVxuXHRcdGlmIChoID4gMSkge1xuXHRcdFx0aCA9IE1hdGguc3FydChoKVxuXHRcdFx0cnggPSBoICogcnhcblx0XHRcdHJ5ID0gaCAqIHJ5XG5cdFx0fVxuXHRcdHZhciByeDIgPSByeCAqIHJ4XG5cdFx0dmFyIHJ5MiA9IHJ5ICogcnlcblx0XHR2YXIgayA9IChsYXJnZV9hcmNfZmxhZyA9PSBzd2VlcF9mbGFnID8gLTEgOiAxKVxuXHRcdFx0KiBNYXRoLnNxcnQoTWF0aC5hYnMoKHJ4MiAqIHJ5MiAtIHJ4MiAqIHkgKiB5IC0gcnkyICogeCAqIHgpIC8gKHJ4MiAqIHkgKiB5ICsgcnkyICogeCAqIHgpKSlcblx0XHRpZiAoayA9PSBJbmZpbml0eSkgayA9IDEgLy8gbmV1dHJhbGl6ZVxuXHRcdHZhciBjeCA9IGsgKiByeCAqIHkgLyByeSArICh4MSArIHgyKSAvIDJcblx0XHR2YXIgY3kgPSBrICogLXJ5ICogeCAvIHJ4ICsgKHkxICsgeTIpIC8gMlxuXHRcdHZhciBmMSA9IE1hdGguYXNpbigoKHkxIC0gY3kpIC8gcnkpLnRvRml4ZWQoOSkpXG5cdFx0dmFyIGYyID0gTWF0aC5hc2luKCgoeTIgLSBjeSkgLyByeSkudG9GaXhlZCg5KSlcblxuXHRcdGYxID0geDEgPCBjeCA/IM+AIC0gZjEgOiBmMVxuXHRcdGYyID0geDIgPCBjeCA/IM+AIC0gZjIgOiBmMlxuXHRcdGlmIChmMSA8IDApIGYxID0gz4AgKiAyICsgZjFcblx0XHRpZiAoZjIgPCAwKSBmMiA9IM+AICogMiArIGYyXG5cdFx0aWYgKHN3ZWVwX2ZsYWcgJiYgZjEgPiBmMikgZjEgPSBmMSAtIM+AICogMlxuXHRcdGlmICghc3dlZXBfZmxhZyAmJiBmMiA+IGYxKSBmMiA9IGYyIC0gz4AgKiAyXG5cdH0gZWxzZSB7XG5cdFx0ZjEgPSByZWN1cnNpdmVbMF1cblx0XHRmMiA9IHJlY3Vyc2l2ZVsxXVxuXHRcdGN4ID0gcmVjdXJzaXZlWzJdXG5cdFx0Y3kgPSByZWN1cnNpdmVbM11cblx0fVxuXHQvLyBncmVhdGVyIHRoYW4gMTIwIGRlZ3JlZXMgcmVxdWlyZXMgbXVsdGlwbGUgc2VnbWVudHNcblx0aWYgKE1hdGguYWJzKGYyIC0gZjEpID4gXzEyMCkge1xuXHRcdHZhciBmMm9sZCA9IGYyXG5cdFx0dmFyIHgyb2xkID0geDJcblx0XHR2YXIgeTJvbGQgPSB5MlxuXHRcdGYyID0gZjEgKyBfMTIwICogKHN3ZWVwX2ZsYWcgJiYgZjIgPiBmMSA/IDEgOiAtMSlcblx0XHR4MiA9IGN4ICsgcnggKiBNYXRoLmNvcyhmMilcblx0XHR5MiA9IGN5ICsgcnkgKiBNYXRoLnNpbihmMilcblx0XHR2YXIgcmVzID0gYXJjKHgyLCB5MiwgcngsIHJ5LCBhbmdsZSwgMCwgc3dlZXBfZmxhZywgeDJvbGQsIHkyb2xkLCBbZjIsIGYyb2xkLCBjeCwgY3ldKVxuXHR9XG5cdHZhciB0ID0gTWF0aC50YW4oKGYyIC0gZjEpIC8gNClcblx0dmFyIGh4ID0gNCAvIDMgKiByeCAqIHRcblx0dmFyIGh5ID0gNCAvIDMgKiByeSAqIHRcblx0dmFyIGN1cnZlID0gW1xuXHRcdDIgKiB4MSAtICh4MSArIGh4ICogTWF0aC5zaW4oZjEpKSxcblx0XHQyICogeTEgLSAoeTEgLSBoeSAqIE1hdGguY29zKGYxKSksXG5cdFx0eDIgKyBoeCAqIE1hdGguc2luKGYyKSxcblx0XHR5MiAtIGh5ICogTWF0aC5jb3MoZjIpLFxuXHRcdHgyLFxuXHRcdHkyXG5cdF1cblx0aWYgKHJlY3Vyc2l2ZSkgcmV0dXJuIGN1cnZlXG5cdGlmIChyZXMpIGN1cnZlID0gY3VydmUuY29uY2F0KHJlcylcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjdXJ2ZS5sZW5ndGg7KSB7XG5cdFx0dmFyIHJvdCA9IHJvdGF0ZShjdXJ2ZVtpXSwgY3VydmVbaSsxXSwgYW5nbGUpXG5cdFx0Y3VydmVbaSsrXSA9IHJvdC54XG5cdFx0Y3VydmVbaSsrXSA9IHJvdC55XG5cdH1cblx0cmV0dXJuIGN1cnZlXG59XG5cbmZ1bmN0aW9uIHJvdGF0ZSh4LCB5LCByYWQpe1xuXHRyZXR1cm4ge1xuXHRcdHg6IHggKiBNYXRoLmNvcyhyYWQpIC0geSAqIE1hdGguc2luKHJhZCksXG5cdFx0eTogeCAqIE1hdGguc2luKHJhZCkgKyB5ICogTWF0aC5jb3MocmFkKVxuXHR9XG59XG5cbmZ1bmN0aW9uIHJhZGlhbnMoZGVncmVzcyl7XG5cdHJldHVybiBkZWdyZXNzICogKM+AIC8gMTgwKVxufVxuIiwiLyohIFR3ZWFrcGFuZSAzLjAuOCAoYykgMjAxNiBjb2NvcG9uLCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAgIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsLlR3ZWFrcGFuZSA9IHt9KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqKlxuICAgICAqIEEgc2ltcGxlIHNlbWFudGljIHZlcnNpb25pbmcgcGVyc2VyLlxuICAgICAqL1xuICAgIGNsYXNzIFNlbXZlciB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBbY29yZSwgcHJlcmVsZWFzZV0gPSB0ZXh0LnNwbGl0KCctJyk7XG4gICAgICAgICAgICBjb25zdCBjb3JlQ29tcHMgPSBjb3JlLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICB0aGlzLm1ham9yID0gcGFyc2VJbnQoY29yZUNvbXBzWzBdLCAxMCk7XG4gICAgICAgICAgICB0aGlzLm1pbm9yID0gcGFyc2VJbnQoY29yZUNvbXBzWzFdLCAxMCk7XG4gICAgICAgICAgICB0aGlzLnBhdGNoID0gcGFyc2VJbnQoY29yZUNvbXBzWzJdLCAxMCk7XG4gICAgICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBwcmVyZWxlYXNlICE9PSBudWxsICYmIHByZXJlbGVhc2UgIT09IHZvaWQgMCA/IHByZXJlbGVhc2UgOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgY29uc3QgY29yZSA9IFt0aGlzLm1ham9yLCB0aGlzLm1pbm9yLCB0aGlzLnBhdGNoXS5qb2luKCcuJyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVyZWxlYXNlICE9PSBudWxsID8gW2NvcmUsIHRoaXMucHJlcmVsZWFzZV0uam9pbignLScpIDogY29yZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmlld1Byb3BzLmdldCgnZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgZGlzYWJsZWQoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmlld1Byb3BzLnNldCgnZGlzYWJsZWQnLCBkaXNhYmxlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGhpZGRlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5nZXQoJ2hpZGRlbicpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBoaWRkZW4oaGlkZGVuKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5zZXQoJ2hpZGRlbicsIGhpZGRlbik7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcG9zZSgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmlld1Byb3BzLnNldCgnZGlzcG9zZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRwRXZlbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0YXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzIFRwQ2hhbmdlRXZlbnQgZXh0ZW5kcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0LCB2YWx1ZSwgcHJlc2V0S2V5LCBsYXN0KSB7XG4gICAgICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5wcmVzZXRLZXkgPSBwcmVzZXRLZXk7XG4gICAgICAgICAgICB0aGlzLmxhc3QgPSBsYXN0ICE9PSBudWxsICYmIGxhc3QgIT09IHZvaWQgMCA/IGxhc3QgOiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzIFRwVXBkYXRlRXZlbnQgZXh0ZW5kcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0LCB2YWx1ZSwgcHJlc2V0S2V5KSB7XG4gICAgICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5wcmVzZXRLZXkgPSBwcmVzZXRLZXk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgVHBGb2xkRXZlbnQgZXh0ZW5kcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0LCBleHBhbmRlZCkge1xuICAgICAgICAgICAgc3VwZXIodGFyZ2V0KTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWQgPSBleHBhbmRlZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcmNlQ2FzdCh2KSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWVwRXF1YWxzQXJyYXkoYTEsIGEyKSB7XG4gICAgICAgIGlmIChhMS5sZW5ndGggIT09IGEyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYTEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhMVtpXSAhPT0gYTJbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgQ1JFQVRFX01FU1NBR0VfTUFQID0ge1xuICAgICAgICBhbHJlYWR5ZGlzcG9zZWQ6ICgpID0+ICdWaWV3IGhhcyBiZWVuIGFscmVhZHkgZGlzcG9zZWQnLFxuICAgICAgICBpbnZhbGlkcGFyYW1zOiAoY29udGV4dCkgPT4gYEludmFsaWQgcGFyYW1ldGVycyBmb3IgJyR7Y29udGV4dC5uYW1lfSdgLFxuICAgICAgICBub21hdGNoaW5nY29udHJvbGxlcjogKGNvbnRleHQpID0+IGBObyBtYXRjaGluZyBjb250cm9sbGVyIGZvciAnJHtjb250ZXh0LmtleX0nYCxcbiAgICAgICAgbm9tYXRjaGluZ3ZpZXc6IChjb250ZXh0KSA9PiBgTm8gbWF0Y2hpbmcgdmlldyBmb3IgJyR7SlNPTi5zdHJpbmdpZnkoY29udGV4dC5wYXJhbXMpfSdgLFxuICAgICAgICBub3RiaW5kYWJsZTogKCkgPT4gYFZhbHVlIGlzIG5vdCBiaW5kYWJsZWAsXG4gICAgICAgIHByb3BlcnR5bm90Zm91bmQ6IChjb250ZXh0KSA9PiBgUHJvcGVydHkgJyR7Y29udGV4dC5uYW1lfScgbm90IGZvdW5kYCxcbiAgICAgICAgc2hvdWxkbmV2ZXJoYXBwZW46ICgpID0+ICdUaGlzIGVycm9yIHNob3VsZCBuZXZlciBoYXBwZW4nLFxuICAgIH07XG4gICAgY2xhc3MgVHBFcnJvciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlID1cbiAgICAgICAgICAgICAgICAoX2EgPSBDUkVBVEVfTUVTU0FHRV9NQVBbY29uZmlnLnR5cGVdKGZvcmNlQ2FzdChjb25maWcuY29udGV4dCkpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnVW5leHBlY3RlZCBlcnJvcic7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgICAgICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKHRoaXMubWVzc2FnZSkuc3RhY2s7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBjb25maWcudHlwZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgYWxyZWFkeURpc3Bvc2VkKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUcEVycm9yKHsgdHlwZTogJ2FscmVhZHlkaXNwb3NlZCcgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIG5vdEJpbmRhYmxlKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbm90YmluZGFibGUnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIHByb3BlcnR5Tm90Rm91bmQobmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAncHJvcGVydHlub3Rmb3VuZCcsXG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgc2hvdWxkTmV2ZXJIYXBwZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRwRXJyb3IoeyB0eXBlOiAnc2hvdWxkbmV2ZXJoYXBwZW4nIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQmluZGluZ1RhcmdldCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG9iaiwga2V5LCBvcHRfaWQpIHtcbiAgICAgICAgICAgIHRoaXMub2JqXyA9IG9iajtcbiAgICAgICAgICAgIHRoaXMua2V5XyA9IGtleTtcbiAgICAgICAgICAgIHRoaXMucHJlc2V0S2V5XyA9IG9wdF9pZCAhPT0gbnVsbCAmJiBvcHRfaWQgIT09IHZvaWQgMCA/IG9wdF9pZCA6IGtleTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNCaW5kYWJsZShvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQga2V5KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMua2V5XztcbiAgICAgICAgfVxuICAgICAgICBnZXQgcHJlc2V0S2V5KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlc2V0S2V5XztcbiAgICAgICAgfVxuICAgICAgICByZWFkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JqX1t0aGlzLmtleV9dO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm9ial9bdGhpcy5rZXlfXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlUHJvcGVydHkobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlT2JqID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoIUJpbmRpbmdUYXJnZXQuaXNCaW5kYWJsZSh2YWx1ZU9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLm5vdEJpbmRhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShuYW1lIGluIHZhbHVlT2JqKSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3IucHJvcGVydHlOb3RGb3VuZChuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbHVlT2JqW25hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCdXR0b25BcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGl0bGUoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIucHJvcHMuZ2V0KCd0aXRsZScpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgfVxuICAgICAgICBzZXQgdGl0bGUodGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLnNldCgndGl0bGUnLCB0aXRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5lbWl0dGVyO1xuICAgICAgICAgICAgZW1pdHRlci5vbihldmVudE5hbWUsICgpID0+IHtcbiAgICAgICAgICAgICAgICBiaChuZXcgVHBFdmVudCh0aGlzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgRW1pdHRlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5vYnNlcnZlcnNfID0ge307XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV07XG4gICAgICAgICAgICBpZiAoIW9ic2VydmVycykge1xuICAgICAgICAgICAgICAgIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYnNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgb2ZmKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV07XG4gICAgICAgICAgICBpZiAob2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV0gPSBvYnNlcnZlcnMuZmlsdGVyKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuaGFuZGxlciAhPT0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGVtaXQoZXZlbnROYW1lLCBldmVudCkge1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV07XG4gICAgICAgICAgICBpZiAoIW9ic2VydmVycykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ic2VydmVycy5mb3JFYWNoKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmhhbmRsZXIoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBQUkVGSVggPSAndHAnO1xuICAgIGZ1bmN0aW9uIENsYXNzTmFtZSh2aWV3TmFtZSkge1xuICAgICAgICBjb25zdCBmbiA9IChvcHRfZWxlbWVudE5hbWUsIG9wdF9tb2RpZmllcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBQUkVGSVgsXG4gICAgICAgICAgICAgICAgJy0nLFxuICAgICAgICAgICAgICAgIHZpZXdOYW1lLFxuICAgICAgICAgICAgICAgICd2JyxcbiAgICAgICAgICAgICAgICBvcHRfZWxlbWVudE5hbWUgPyBgXyR7b3B0X2VsZW1lbnROYW1lfWAgOiAnJyxcbiAgICAgICAgICAgICAgICBvcHRfbW9kaWZpZXIgPyBgLSR7b3B0X21vZGlmaWVyfWAgOiAnJyxcbiAgICAgICAgICAgIF0uam9pbignJyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBmbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wb3NlKGgxLCBoMikge1xuICAgICAgICByZXR1cm4gKGlucHV0KSA9PiBoMihoMShpbnB1dCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBleHRyYWN0VmFsdWUoZXYpIHtcbiAgICAgICAgcmV0dXJuIGV2LnJhd1ZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBiaW5kVmFsdWUodmFsdWUsIGFwcGx5VmFsdWUpIHtcbiAgICAgICAgdmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgY29tcG9zZShleHRyYWN0VmFsdWUsIGFwcGx5VmFsdWUpKTtcbiAgICAgICAgYXBwbHlWYWx1ZSh2YWx1ZS5yYXdWYWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmRWYWx1ZU1hcCh2YWx1ZU1hcCwga2V5LCBhcHBseVZhbHVlKSB7XG4gICAgICAgIGJpbmRWYWx1ZSh2YWx1ZU1hcC52YWx1ZShrZXkpLCBhcHBseVZhbHVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBseUNsYXNzKGVsZW0sIGNsYXNzTmFtZSwgYWN0aXZlKSB7XG4gICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsdWVUb0NsYXNzTmFtZShlbGVtLCBjbGFzc05hbWUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgYXBwbHlDbGFzcyhlbGVtLCBjbGFzc05hbWUsIHZhbHVlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZFZhbHVlVG9UZXh0Q29udGVudCh2YWx1ZSwgZWxlbSkge1xuICAgICAgICBiaW5kVmFsdWUodmFsdWUsICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBlbGVtLnRleHRDb250ZW50ID0gdGV4dCAhPT0gbnVsbCAmJiB0ZXh0ICE9PSB2b2lkIDAgPyB0ZXh0IDogJyc7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRxID0gQ2xhc3NOYW1lKCdidG4nKTtcbiAgICBjbGFzcyBCdXR0b25WaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRxKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJHEoJ2InKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudCA9IGJ1dHRvbkVsZW07XG4gICAgICAgICAgICBjb25zdCB0aXRsZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aXRsZUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkcSgndCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZVRvVGV4dENvbnRlbnQoY29uZmlnLnByb3BzLnZhbHVlKCd0aXRsZScpLCB0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCdXR0b25Db250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2xpY2tfID0gdGhpcy5vbkNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBCdXR0b25WaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5idXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCb3VuZFZhbHVlIHtcbiAgICAgICAgY29uc3RydWN0b3IoaW5pdGlhbFZhbHVlLCBjb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHRoaXMuY29uc3RyYWludF8gPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuY29uc3RyYWludDtcbiAgICAgICAgICAgIHRoaXMuZXF1YWxzXyA9IChfYSA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5lcXVhbHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICgodjEsIHYyKSA9PiB2MSA9PT0gdjIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMucmF3VmFsdWVfID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjb25zdHJhaW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RyYWludF87XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHJhd1ZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmF3VmFsdWVfO1xuICAgICAgICB9XG4gICAgICAgIHNldCByYXdWYWx1ZShyYXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRSYXdWYWx1ZShyYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldFJhd1ZhbHVlKHJhd1ZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBjb25zdHJhaW5lZFZhbHVlID0gdGhpcy5jb25zdHJhaW50X1xuICAgICAgICAgICAgICAgID8gdGhpcy5jb25zdHJhaW50Xy5jb25zdHJhaW4ocmF3VmFsdWUpXG4gICAgICAgICAgICAgICAgOiByYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSAhdGhpcy5lcXVhbHNfKHRoaXMucmF3VmFsdWVfLCBjb25zdHJhaW5lZFZhbHVlKTtcbiAgICAgICAgICAgIGlmICghY2hhbmdlZCAmJiAhb3B0cy5mb3JjZUVtaXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYmVmb3JlY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYXdWYWx1ZV8gPSBjb25zdHJhaW5lZFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRzLFxuICAgICAgICAgICAgICAgIHJhd1ZhbHVlOiBjb25zdHJhaW5lZFZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUHJpbWl0aXZlVmFsdWUge1xuICAgICAgICBjb25zdHJ1Y3Rvcihpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlXyA9IGluaXRpYWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcmF3VmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZV87XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHJhd1ZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFJhd1ZhbHVlKHZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UmF3VmFsdWUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlXyA9PT0gdmFsdWUgJiYgIW9wdHMuZm9yY2VFbWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2JlZm9yZWNoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVfID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdHMsXG4gICAgICAgICAgICAgICAgcmF3VmFsdWU6IHRoaXMudmFsdWVfLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVmFsdWUoaW5pdGlhbFZhbHVlLCBjb25maWcpIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludCA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5jb25zdHJhaW50O1xuICAgICAgICBjb25zdCBlcXVhbHMgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuZXF1YWxzO1xuICAgICAgICBpZiAoIWNvbnN0cmFpbnQgJiYgIWVxdWFscykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcmltaXRpdmVWYWx1ZShpbml0aWFsVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQm91bmRWYWx1ZShpbml0aWFsVmFsdWUsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgY2xhc3MgVmFsdWVNYXAge1xuICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZU1hcCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMudmFsTWFwXyA9IHZhbHVlTWFwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy52YWxNYXBfKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMudmFsTWFwX1trZXldO1xuICAgICAgICAgICAgICAgIHYuZW1pdHRlci5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjcmVhdGVDb3JlKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4ga2V5cy5yZWR1Y2UoKG8sIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG8sIHtcbiAgICAgICAgICAgICAgICAgICAgW2tleV06IGNyZWF0ZVZhbHVlKGluaXRpYWxWYWx1ZVtrZXldKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcmUgPSB0aGlzLmNyZWF0ZUNvcmUoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsdWVNYXAoY29yZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0KGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsTWFwX1trZXldLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbE1hcF9ba2V5XS5yYXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsTWFwX1trZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VPYmplY3QodmFsdWUsIGtleVRvUGFyc2VyTWFwKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhrZXlUb1BhcnNlck1hcCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGtleXMucmVkdWNlKCh0bXAsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRtcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlciA9IGtleVRvUGFyc2VyTWFwW2tleV07XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZXIodmFsdWVba2V5XSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnN1Y2NlZWRlZFxuICAgICAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0bXApLCB7IFtrZXldOiByZXN1bHQudmFsdWUgfSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgcmV0dXJuIGZvcmNlQ2FzdChyZXN1bHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUFycmF5KHZhbHVlLCBwYXJzZUl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlZHVjZSgodG1wLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAodG1wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3VjY2VlZGVkIHx8IHJlc3VsdC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbLi4udG1wLCByZXN1bHQudmFsdWVdO1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKHBhcnNlKSB7XG4gICAgICAgIHJldHVybiAob3B0aW9uYWwpID0+ICh2KSA9PiB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbmFsICYmIHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25hbCAmJiB2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZWVkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlKHYpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcnMob3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1c3RvbTogKHBhcnNlKSA9PiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKHBhcnNlKShvcHRpb25hbCksXG4gICAgICAgICAgICBib29sZWFuOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nID8gdiA6IHVuZGVmaW5lZCkob3B0aW9uYWwpLFxuICAgICAgICAgICAgbnVtYmVyOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicgPyB2IDogdW5kZWZpbmVkKShvcHRpb25hbCksXG4gICAgICAgICAgICBzdHJpbmc6IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYgOiB1bmRlZmluZWQpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PlxuICAgICAgICAgICAgdHlwZW9mIHYgPT09ICdmdW5jdGlvbicgPyB2IDogdW5kZWZpbmVkKShvcHRpb25hbCksXG4gICAgICAgICAgICBjb25zdGFudDogKHZhbHVlKSA9PiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiAodiA9PT0gdmFsdWUgPyB2YWx1ZSA6IHVuZGVmaW5lZCkpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIHJhdzogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4gdikob3B0aW9uYWwpLFxuICAgICAgICAgICAgb2JqZWN0OiAoa2V5VG9QYXJzZXJNYXApID0+IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU9iamVjdCh2LCBrZXlUb1BhcnNlck1hcCk7XG4gICAgICAgICAgICB9KShvcHRpb25hbCksXG4gICAgICAgICAgICBhcnJheTogKGl0ZW1QYXJzZXIpID0+IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXkodiwgaXRlbVBhcnNlcik7XG4gICAgICAgICAgICB9KShvcHRpb25hbCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IFBhcmFtc1BhcnNlcnMgPSB7XG4gICAgICAgIG9wdGlvbmFsOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVycyh0cnVlKSxcbiAgICAgICAgcmVxdWlyZWQ6IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXJzKGZhbHNlKSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW1zKHZhbHVlLCBrZXlUb1BhcnNlck1hcCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBQYXJhbXNQYXJzZXJzLnJlcXVpcmVkLm9iamVjdChrZXlUb1BhcnNlck1hcCkodmFsdWUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnN1Y2NlZWRlZCA/IHJlc3VsdC52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaXNwb3NlRWxlbWVudChlbGVtKSB7XG4gICAgICAgIGlmIChlbGVtICYmIGVsZW0ucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbS5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGVsZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEFsbEJsYWRlUG9zaXRpb25zKCkge1xuICAgICAgICByZXR1cm4gWyd2ZXJ5Zmlyc3QnLCAnZmlyc3QnLCAnbGFzdCcsICd2ZXJ5bGFzdCddO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRwID0gQ2xhc3NOYW1lKCcnKTtcbiAgICBjb25zdCBQT1NfVE9fQ0xBU1NfTkFNRV9NQVAgPSB7XG4gICAgICAgIHZlcnlmaXJzdDogJ3Zmc3QnLFxuICAgICAgICBmaXJzdDogJ2ZzdCcsXG4gICAgICAgIGxhc3Q6ICdsc3QnLFxuICAgICAgICB2ZXJ5bGFzdDogJ3Zsc3QnLFxuICAgIH07XG4gICAgY2xhc3MgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudF8gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5ibGFkZSA9IGNvbmZpZy5ibGFkZTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IGNvbmZpZy52aWV3O1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMudmlldy5lbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5ibGFkZS52YWx1ZSgncG9zaXRpb25zJykuZW1pdHRlci5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdldEFsbEJsYWRlUG9zaXRpb25zKCkuZm9yRWFjaCgocG9zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkcCh1bmRlZmluZWQsIFBPU19UT19DTEFTU19OQU1FX01BUFtwb3NdKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ibGFkZS5nZXQoJ3Bvc2l0aW9ucycpLmZvckVhY2goKHBvcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJHAodW5kZWZpbmVkLCBQT1NfVE9fQ0xBU1NfTkFNRV9NQVBbcG9zXSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcy5oYW5kbGVEaXNwb3NlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkaXNwb3NlRWxlbWVudChlbGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBwYXJlbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRfO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgU1ZHX05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbiAgICBmdW5jdGlvbiBmb3JjZVJlZmxvdyhlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNhYmxlVHJhbnNpdGlvblRlbXBvcmFyaWx5KGVsZW1lbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHQgPSBlbGVtZW50LnN0eWxlLnRyYW5zaXRpb247XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uID0gdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3VwcG9ydHNUb3VjaChkb2MpIHtcbiAgICAgICAgcmV0dXJuIGRvYy5vbnRvdWNoc3RhcnQgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0R2xvYmFsT2JqZWN0KCkge1xuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFdpbmRvd0RvY3VtZW50KCkge1xuICAgICAgICBjb25zdCBnbG9iYWxPYmogPSBmb3JjZUNhc3QoZ2V0R2xvYmFsT2JqZWN0KCkpO1xuICAgICAgICByZXR1cm4gZ2xvYmFsT2JqLmRvY3VtZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDYW52YXNDb250ZXh0KGNhbnZhc0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgd2luID0gY2FudmFzRWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgICAgICBpZiAoIXdpbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNCcm93c2VyID0gJ2RvY3VtZW50JyBpbiB3aW47XG4gICAgICAgIHJldHVybiBpc0Jyb3dzZXIgPyBjYW52YXNFbGVtZW50LmdldENvbnRleHQoJzJkJykgOiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBJQ09OX0lEX1RPX0lOTkVSX0hUTUxfTUFQID0ge1xuICAgICAgICBjaGVjazogJzxwYXRoIGQ9XCJNMiA4bDQgNGw4IC04XCIvPicsXG4gICAgICAgIGRyb3Bkb3duOiAnPHBhdGggZD1cIk01IDdoNmwtMyAzIHpcIi8+JyxcbiAgICAgICAgcDJkcGFkOiAnPHBhdGggZD1cIk04IDR2OFwiLz48cGF0aCBkPVwiTTQgOGg4XCIvPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMS4yXCIvPicsXG4gICAgfTtcbiAgICBmdW5jdGlvbiBjcmVhdGVTdmdJY29uRWxlbWVudChkb2N1bWVudCwgaWNvbklkKSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnc3ZnJyk7XG4gICAgICAgIGVsZW0uaW5uZXJIVE1MID0gSUNPTl9JRF9UT19JTk5FUl9IVE1MX01BUFtpY29uSWRdO1xuICAgICAgICByZXR1cm4gZWxlbTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5zZXJ0RWxlbWVudEF0KHBhcmVudEVsZW1lbnQsIGVsZW1lbnQsIGluZGV4KSB7XG4gICAgICAgIHBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGVsZW1lbnQsIHBhcmVudEVsZW1lbnQuY2hpbGRyZW5baW5kZXhdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVDaGlsZEVsZW1lbnRzKGVsZW1lbnQpIHtcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmNoaWxkcmVuWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVDaGlsZE5vZGVzKGVsZW1lbnQpIHtcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuY2hpbGROb2Rlc1swXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZE5leHRUYXJnZXQoZXYpIHtcbiAgICAgICAgaWYgKGV2LnJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JjZUNhc3QoZXYucmVsYXRlZFRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCdleHBsaWNpdE9yaWdpbmFsVGFyZ2V0JyBpbiBldikge1xuICAgICAgICAgICAgcmV0dXJuIGV2LmV4cGxpY2l0T3JpZ2luYWxUYXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJG8gPSBDbGFzc05hbWUoJ2xibCcpO1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUxhYmVsTm9kZShkb2MsIGxhYmVsKSB7XG4gICAgICAgIGNvbnN0IGZyYWcgPSBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICBjb25zdCBsaW5lTm9kZXMgPSBsYWJlbC5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZG9jLmNyZWF0ZVRleHROb2RlKGxpbmUpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGluZU5vZGVzLmZvckVhY2goKGxpbmVOb2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZUVsZW1lbnQoJ2JyJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChsaW5lTm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnJhZztcbiAgICB9XG4gICAgY2xhc3MgTGFiZWxWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRvKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGxhYmVsRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRvKCdsJykpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKGNvbmZpZy5wcm9wcywgJ2xhYmVsJywgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRW1wdHkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRvKHVuZGVmaW5lZCwgJ25vbCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSRvKHVuZGVmaW5lZCwgJ25vbCcpKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGROb2RlcyhsYWJlbEVsZW0pO1xuICAgICAgICAgICAgICAgICAgICBsYWJlbEVsZW0uYXBwZW5kQ2hpbGQoY3JlYXRlTGFiZWxOb2RlKGRvYywgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChsYWJlbEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5sYWJlbEVsZW1lbnQgPSBsYWJlbEVsZW07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB2YWx1ZUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbygndicpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh2YWx1ZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUVsZW1lbnQgPSB2YWx1ZUVsZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBMYWJlbENvbnRyb2xsZXIgZXh0ZW5kcyBCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgY29uc3Qgdmlld1Byb3BzID0gY29uZmlnLnZhbHVlQ29udHJvbGxlci52aWV3UHJvcHM7XG4gICAgICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyksIHsgdmlldzogbmV3IExhYmVsVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB2aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSksIHZpZXdQcm9wczogdmlld1Byb3BzIH0pKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ29udHJvbGxlciA9IGNvbmZpZy52YWx1ZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICB0aGlzLnZpZXcudmFsdWVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudmFsdWVDb250cm9sbGVyLnZpZXcuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBCdXR0b25CbGFkZVBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdidXR0b24nLFxuICAgICAgICB0eXBlOiAnYmxhZGUnLFxuICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBwLnJlcXVpcmVkLnN0cmluZyxcbiAgICAgICAgICAgICAgICB2aWV3OiBwLnJlcXVpcmVkLmNvbnN0YW50KCdidXR0b24nKSxcbiAgICAgICAgICAgICAgICBsYWJlbDogcC5vcHRpb25hbC5zdHJpbmcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTGFiZWxDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogYXJncy5ibGFkZSxcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhcmdzLnBhcmFtcy5sYWJlbCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IG5ldyBCdXR0b25Db250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGFyZ3MucGFyYW1zLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhcGkoYXJncykge1xuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgTGFiZWxDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyLnZhbHVlQ29udHJvbGxlciBpbnN0YW5jZW9mIEJ1dHRvbkNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1dHRvbkFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjbGFzcyBWYWx1ZUJsYWRlQ29udHJvbGxlciBleHRlbmRzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgc3VwZXIoY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVCbGFkZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWYWx1ZU1hcCh7XG4gICAgICAgICAgICBwb3NpdGlvbnM6IGNyZWF0ZVZhbHVlKFtdLCB7XG4gICAgICAgICAgICAgICAgZXF1YWxzOiBkZWVwRXF1YWxzQXJyYXksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgRm9sZGFibGUgZXh0ZW5kcyBWYWx1ZU1hcCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlTWFwKSB7XG4gICAgICAgICAgICBzdXBlcih2YWx1ZU1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGNyZWF0ZShleHBhbmRlZCkge1xuICAgICAgICAgICAgY29uc3QgY29yZU9iaiA9IHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkSGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgIHNob3VsZEZpeEhlaWdodDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGVtcG9yYXJ5RXhwYW5kZWQ6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgY29yZSA9IFZhbHVlTWFwLmNyZWF0ZUNvcmUoY29yZU9iaik7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvbGRhYmxlKGNvcmUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBzdHlsZUV4cGFuZGVkKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuZ2V0KCd0ZW1wb3JhcnlFeHBhbmRlZCcpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLmdldCgnZXhwYW5kZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgc3R5bGVIZWlnaHQoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc3R5bGVFeHBhbmRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBleEhlaWdodCA9IHRoaXMuZ2V0KCdleHBhbmRlZEhlaWdodCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0KCdzaG91bGRGaXhIZWlnaHQnKSAmJiAhaXNFbXB0eShleEhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZXhIZWlnaHR9cHhgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdhdXRvJztcbiAgICAgICAgfVxuICAgICAgICBiaW5kRXhwYW5kZWRDbGFzcyhlbGVtLCBleHBhbmRlZENsYXNzTmFtZSkge1xuICAgICAgICAgICAgY29uc3Qgb25FeHBhbmQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSB0aGlzLnN0eWxlRXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChleHBhbmRlZENsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoZXhwYW5kZWRDbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcywgJ2V4cGFuZGVkJywgb25FeHBhbmQpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMsICd0ZW1wb3JhcnlFeHBhbmRlZCcsIG9uRXhwYW5kKTtcbiAgICAgICAgfVxuICAgICAgICBjbGVhblVwVHJhbnNpdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdzaG91bGRGaXhIZWlnaHQnLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnNldCgnZXhwYW5kZWRIZWlnaHQnLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuc2V0KCdjb21wbGV0ZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wdXRlRXhwYW5kZWRGb2xkZXJIZWlnaHQoZm9sZGVyLCBjb250YWluZXJFbGVtZW50KSB7XG4gICAgICAgIGxldCBoZWlnaHQgPSAwO1xuICAgICAgICBkaXNhYmxlVHJhbnNpdGlvblRlbXBvcmFyaWx5KGNvbnRhaW5lckVsZW1lbnQsICgpID0+IHtcbiAgICAgICAgICAgIGZvbGRlci5zZXQoJ2V4cGFuZGVkSGVpZ2h0JywgbnVsbCk7XG4gICAgICAgICAgICBmb2xkZXIuc2V0KCd0ZW1wb3JhcnlFeHBhbmRlZCcsIHRydWUpO1xuICAgICAgICAgICAgZm9yY2VSZWZsb3coY29udGFpbmVyRWxlbWVudCk7XG4gICAgICAgICAgICBoZWlnaHQgPSBjb250YWluZXJFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgIGZvbGRlci5zZXQoJ3RlbXBvcmFyeUV4cGFuZGVkJywgbnVsbCk7XG4gICAgICAgICAgICBmb3JjZVJlZmxvdyhjb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBoZWlnaHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGx5SGVpZ2h0KGZvbGRhYmxlLCBlbGVtKSB7XG4gICAgICAgIGVsZW0uc3R5bGUuaGVpZ2h0ID0gZm9sZGFibGUuc3R5bGVIZWlnaHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmRGb2xkYWJsZShmb2xkYWJsZSwgZWxlbSkge1xuICAgICAgICBmb2xkYWJsZS52YWx1ZSgnZXhwYW5kZWQnKS5lbWl0dGVyLm9uKCdiZWZvcmVjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICBmb2xkYWJsZS5zZXQoJ2NvbXBsZXRlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KGZvbGRhYmxlLmdldCgnZXhwYW5kZWRIZWlnaHQnKSkpIHtcbiAgICAgICAgICAgICAgICBmb2xkYWJsZS5zZXQoJ2V4cGFuZGVkSGVpZ2h0JywgY29tcHV0ZUV4cGFuZGVkRm9sZGVySGVpZ2h0KGZvbGRhYmxlLCBlbGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb2xkYWJsZS5zZXQoJ3Nob3VsZEZpeEhlaWdodCcsIHRydWUpO1xuICAgICAgICAgICAgZm9yY2VSZWZsb3coZWxlbSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmb2xkYWJsZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICBhcHBseUhlaWdodChmb2xkYWJsZSwgZWxlbSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhcHBseUhlaWdodChmb2xkYWJsZSwgZWxlbSk7XG4gICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIChldikgPT4ge1xuICAgICAgICAgICAgaWYgKGV2LnByb3BlcnR5TmFtZSAhPT0gJ2hlaWdodCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb2xkYWJsZS5jbGVhblVwVHJhbnNpdGlvbigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBSYWNrTGlrZUFwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlciwgcmFja0FwaSkge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfID0gcmFja0FwaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZEJ1dHRvbkFzQmxhZGUoYXBpLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGFwaS5hZGRCbGFkZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyksIHsgdmlldzogJ2J1dHRvbicgfSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRGb2xkZXJBc0JsYWRlKGFwaSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBhcGkuYWRkQmxhZGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpLCB7IHZpZXc6ICdmb2xkZXInIH0pKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkU2VwYXJhdG9yQXNCbGFkZShhcGksIG9wdF9wYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gb3B0X3BhcmFtcyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIGFwaS5hZGRCbGFkZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyksIHsgdmlldzogJ3NlcGFyYXRvcicgfSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRUYWJBc0JsYWRlKGFwaSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBhcGkuYWRkQmxhZGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpLCB7IHZpZXc6ICd0YWInIH0pKTtcbiAgICB9XG5cbiAgICBjbGFzcyBOZXN0ZWRPcmRlcmVkU2V0IHtcbiAgICAgICAgY29uc3RydWN0b3IoZXh0cmFjdCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNfID0gW107XG4gICAgICAgICAgICB0aGlzLmNhY2hlXyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHRoaXMub25TdWJMaXN0QWRkXyA9IHRoaXMub25TdWJMaXN0QWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblN1Ykxpc3RSZW1vdmVfID0gdGhpcy5vblN1Ykxpc3RSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmV4dHJhY3RfID0gZXh0cmFjdDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaXRlbXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtc187XG4gICAgICAgIH1cbiAgICAgICAgYWxsSXRlbXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNhY2hlXyk7XG4gICAgICAgIH1cbiAgICAgICAgZmluZChjYWxsYmFjaykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuYWxsSXRlbXMoKSkge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpbmNsdWRlcyhpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZV8uaGFzKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGFkZChpdGVtLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmluY2x1ZGVzKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBvcHRfaW5kZXggIT09IHVuZGVmaW5lZCA/IG9wdF9pbmRleCA6IHRoaXMuaXRlbXNfLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNfLnNwbGljZShpbmRleCwgMCwgaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlXy5hZGQoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBzdWJMaXN0ID0gdGhpcy5leHRyYWN0XyhpdGVtKTtcbiAgICAgICAgICAgIGlmIChzdWJMaXN0KSB7XG4gICAgICAgICAgICAgICAgc3ViTGlzdC5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uU3ViTGlzdEFkZF8pO1xuICAgICAgICAgICAgICAgIHN1Ykxpc3QuZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblN1Ykxpc3RSZW1vdmVfKTtcbiAgICAgICAgICAgICAgICBzdWJMaXN0LmFsbEl0ZW1zKCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlXy5hZGQoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYWRkJywge1xuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtc18uaW5kZXhPZihpdGVtKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW1zXy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5jYWNoZV8uZGVsZXRlKGl0ZW0pO1xuICAgICAgICAgICAgY29uc3Qgc3ViTGlzdCA9IHRoaXMuZXh0cmFjdF8oaXRlbSk7XG4gICAgICAgICAgICBpZiAoc3ViTGlzdCkge1xuICAgICAgICAgICAgICAgIHN1Ykxpc3QuZW1pdHRlci5vZmYoJ2FkZCcsIHRoaXMub25TdWJMaXN0QWRkXyk7XG4gICAgICAgICAgICAgICAgc3ViTGlzdC5lbWl0dGVyLm9mZigncmVtb3ZlJywgdGhpcy5vblN1Ykxpc3RSZW1vdmVfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdyZW1vdmUnLCB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgcm9vdDogdGhpcyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblN1Ykxpc3RBZGRfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlXy5hZGQoZXYuaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYWRkJywge1xuICAgICAgICAgICAgICAgIGluZGV4OiBldi5pbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtOiBldi5pdGVtLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBldi50YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblN1Ykxpc3RSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlXy5kZWxldGUoZXYuaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgncmVtb3ZlJywge1xuICAgICAgICAgICAgICAgIGluZGV4OiBldi5pbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtOiBldi5pdGVtLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBldi50YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIElucHV0QmluZGluZ0FwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLm9uQmluZGluZ0NoYW5nZV8gPSB0aGlzLm9uQmluZGluZ0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25CaW5kaW5nQ2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLnJlYWQoKTtcbiAgICAgICAgfVxuICAgICAgICBvbkJpbmRpbmdDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGV2LnNlbmRlci50YXJnZXQucmVhZCgpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KHRoaXMsIGZvcmNlQ2FzdCh2YWx1ZSksIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy50YXJnZXQucHJlc2V0S2V5LCBldi5vcHRpb25zLmxhc3QpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBJbnB1dEJpbmRpbmdDb250cm9sbGVyIGV4dGVuZHMgTGFiZWxDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKGRvYywgY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuYmluZGluZyA9IGNvbmZpZy5iaW5kaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTW9uaXRvckJpbmRpbmdBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5vbkJpbmRpbmdVcGRhdGVfID0gdGhpcy5vbkJpbmRpbmdVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy5lbWl0dGVyLm9uKCd1cGRhdGUnLCB0aGlzLm9uQmluZGluZ1VwZGF0ZV8pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy5yZWFkKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25CaW5kaW5nVXBkYXRlXyhldikge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldi5zZW5kZXIudGFyZ2V0LnJlYWQoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgndXBkYXRlJywge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBVcGRhdGVFdmVudCh0aGlzLCBmb3JjZUNhc3QodmFsdWUpLCB0aGlzLmNvbnRyb2xsZXJfLmJpbmRpbmcudGFyZ2V0LnByZXNldEtleSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlciBleHRlbmRzIExhYmVsQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihkb2MsIGNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLmJpbmRpbmcgPSBjb25maWcuYmluZGluZztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLmJpbmREaXNhYmxlZCh0aGlzLmJpbmRpbmcudGlja2VyKTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLmhhbmRsZURpc3Bvc2UoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZGluZy5kaXNwb3NlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRTdWJCbGFkZUFwaVNldChhcGkpIHtcbiAgICAgICAgaWYgKGFwaSBpbnN0YW5jZW9mIFJhY2tBcGkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcGlbJ2FwaVNldF8nXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXBpIGluc3RhbmNlb2YgUmFja0xpa2VBcGkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcGlbJ3JhY2tBcGlfJ11bJ2FwaVNldF8nXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QXBpQnlDb250cm9sbGVyKGFwaVNldCwgY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCBhcGkgPSBhcGlTZXQuZmluZCgoYXBpKSA9PiBhcGkuY29udHJvbGxlcl8gPT09IGNvbnRyb2xsZXIpO1xuICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcGk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUJpbmRpbmdUYXJnZXQob2JqLCBrZXksIG9wdF9pZCkge1xuICAgICAgICBpZiAoIUJpbmRpbmdUYXJnZXQuaXNCaW5kYWJsZShvYmopKSB7XG4gICAgICAgICAgICB0aHJvdyBUcEVycm9yLm5vdEJpbmRhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nVGFyZ2V0KG9iaiwga2V5LCBvcHRfaWQpO1xuICAgIH1cbiAgICBjbGFzcyBSYWNrQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBwb29sKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMub25SYWNrQWRkXyA9IHRoaXMub25SYWNrQWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tSZW1vdmVfID0gdGhpcy5vblJhY2tSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja0lucHV0Q2hhbmdlXyA9IHRoaXMub25SYWNrSW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja01vbml0b3JVcGRhdGVfID0gdGhpcy5vblJhY2tNb25pdG9yVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmFwaVNldF8gPSBuZXcgTmVzdGVkT3JkZXJlZFNldChmaW5kU3ViQmxhZGVBcGlTZXQpO1xuICAgICAgICAgICAgdGhpcy5wb29sXyA9IHBvb2w7XG4gICAgICAgICAgICBjb25zdCByYWNrID0gdGhpcy5jb250cm9sbGVyXy5yYWNrO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uUmFja0FkZF8pO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdyZW1vdmUnLCB0aGlzLm9uUmFja1JlbW92ZV8pO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdpbnB1dGNoYW5nZScsIHRoaXMub25SYWNrSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbignbW9uaXRvcnVwZGF0ZScsIHRoaXMub25SYWNrTW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICAgICAgcmFjay5jaGlsZHJlbi5mb3JFYWNoKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VXBBcGlfKGJjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnJhY2suY2hpbGRyZW4ubWFwKChiYykgPT4gZ2V0QXBpQnlDb250cm9sbGVyKHRoaXMuYXBpU2V0XywgYmMpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRJbnB1dChvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gb3B0X3BhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucG9vbF8uY3JlYXRlSW5wdXQoZG9jLCBjcmVhdGVCaW5kaW5nVGFyZ2V0KG9iamVjdCwga2V5LCBwYXJhbXMucHJlc2V0S2V5KSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IG5ldyBJbnB1dEJpbmRpbmdBcGkoYmMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGFwaSwgcGFyYW1zLmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBhZGRNb25pdG9yKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBvcHRfcGFyYW1zIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5jb250cm9sbGVyXy52aWV3LmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gdGhpcy5wb29sXy5jcmVhdGVNb25pdG9yKGRvYywgY3JlYXRlQmluZGluZ1RhcmdldChvYmplY3QsIGtleSksIHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSBuZXcgTW9uaXRvckJpbmRpbmdBcGkoYmMpO1xuICAgICAgICAgICAgcmV0dXJuIGZvcmNlQ2FzdCh0aGlzLmFkZChhcGksIHBhcmFtcy5pbmRleCkpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEZvbGRlcihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRGb2xkZXJBc0JsYWRlKHRoaXMsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQnV0dG9uKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIGFkZEJ1dHRvbkFzQmxhZGUodGhpcywgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRTZXBhcmF0b3Iob3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIGFkZFNlcGFyYXRvckFzQmxhZGUodGhpcywgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkVGFiKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIGFkZFRhYkFzQmxhZGUodGhpcywgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQoYXBpLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucmFjay5hZGQoYXBpLmNvbnRyb2xsZXJfLCBvcHRfaW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgZ2FwaSA9IHRoaXMuYXBpU2V0Xy5maW5kKChhKSA9PiBhLmNvbnRyb2xsZXJfID09PSBhcGkuY29udHJvbGxlcl8pO1xuICAgICAgICAgICAgaWYgKGdhcGkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwaVNldF8ucmVtb3ZlKGdhcGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcGlTZXRfLmFkZChhcGkpO1xuICAgICAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoYXBpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJhY2sucmVtb3ZlKGFwaS5jb250cm9sbGVyXyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQmxhZGUocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmNvbnRyb2xsZXJfLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBvb2xfLmNyZWF0ZUJsYWRlKGRvYywgcGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IHRoaXMucG9vbF8uY3JlYXRlQmxhZGVBcGkoYmMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGFwaSwgcGFyYW1zLmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VXBBcGlfKGJjKSB7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSB0aGlzLmFwaVNldF8uZmluZCgoYXBpKSA9PiBhcGkuY29udHJvbGxlcl8gPT09IGJjKTtcbiAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcGlTZXRfLmFkZCh0aGlzLnBvb2xfLmNyZWF0ZUJsYWRlQXBpKGJjKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrQWRkXyhldikge1xuICAgICAgICAgICAgdGhpcy5zZXRVcEFwaV8oZXYuYmxhZGVDb250cm9sbGVyKTtcbiAgICAgICAgfVxuICAgICAgICBvblJhY2tSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICBpZiAoZXYuaXNSb290KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpID0gZ2V0QXBpQnlDb250cm9sbGVyKHRoaXMuYXBpU2V0XywgZXYuYmxhZGVDb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwaVNldF8ucmVtb3ZlKGFwaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrSW5wdXRDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGV2LmJsYWRlQ29udHJvbGxlcjtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcGkgPSBnZXRBcGlCeUNvbnRyb2xsZXIodGhpcy5hcGlTZXRfLCBiYyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGJjLmJpbmRpbmc7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBDaGFuZ2VFdmVudChhcGksIGZvcmNlQ2FzdChiaW5kaW5nLnRhcmdldC5yZWFkKCkpLCBiaW5kaW5nLnRhcmdldC5wcmVzZXRLZXksIGV2Lm9wdGlvbnMubGFzdCksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiYyBpbnN0YW5jZW9mIFZhbHVlQmxhZGVDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpID0gZ2V0QXBpQnlDb250cm9sbGVyKHRoaXMuYXBpU2V0XywgYmMpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQoYXBpLCBiYy52YWx1ZS5yYXdWYWx1ZSwgdW5kZWZpbmVkLCBldi5vcHRpb25zLmxhc3QpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUmFja01vbml0b3JVcGRhdGVfKGV2KSB7XG4gICAgICAgICAgICBpZiAoIShldi5ibGFkZUNvbnRyb2xsZXIgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXBpID0gZ2V0QXBpQnlDb250cm9sbGVyKHRoaXMuYXBpU2V0XywgZXYuYmxhZGVDb250cm9sbGVyKTtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBldi5ibGFkZUNvbnRyb2xsZXIuYmluZGluZztcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgndXBkYXRlJywge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBVcGRhdGVFdmVudChhcGksIGZvcmNlQ2FzdChiaW5kaW5nLnRhcmdldC5yZWFkKCkpLCBiaW5kaW5nLnRhcmdldC5wcmVzZXRLZXkpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBGb2xkZXJBcGkgZXh0ZW5kcyBSYWNrTGlrZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIHBvb2wpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIG5ldyBSYWNrQXBpKGNvbnRyb2xsZXIucmFja0NvbnRyb2xsZXIsIHBvb2wpKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5mb2xkYWJsZVxuICAgICAgICAgICAgICAgIC52YWx1ZSgnZXhwYW5kZWQnKVxuICAgICAgICAgICAgICAgIC5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2ZvbGQnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBGb2xkRXZlbnQodGhpcywgZXYuc2VuZGVyLnJhd1ZhbHVlKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBldixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5vbigndXBkYXRlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCd1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBldixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBleHBhbmRlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLmZvbGRhYmxlLmdldCgnZXhwYW5kZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgZXhwYW5kZWQoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uZm9sZGFibGUuc2V0KCdleHBhbmRlZCcsIGV4cGFuZGVkKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGl0bGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ3RpdGxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHRpdGxlKHRpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgndGl0bGUnLCB0aXRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uY2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgICAgYWRkSW5wdXQob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZElucHV0KG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRNb25pdG9yKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRNb25pdG9yKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRGb2xkZXIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRGb2xkZXIocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRCdXR0b24ocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRCdXR0b24ocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRTZXBhcmF0b3Iob3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRhYihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZFRhYihwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZChhcGksIG9wdF9pbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkKGFwaSwgb3B0X2luZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoYXBpKSB7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLnJlbW92ZShhcGkpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEJsYWRlKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkQmxhZGUocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBSYWNrTGlrZUNvbnRyb2xsZXIgZXh0ZW5kcyBCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgICAgICBibGFkZTogY29uZmlnLmJsYWRlLFxuICAgICAgICAgICAgICAgIHZpZXc6IGNvbmZpZy52aWV3LFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnJhY2tDb250cm9sbGVyLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYWNrQ29udHJvbGxlciA9IGNvbmZpZy5yYWNrQ29udHJvbGxlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFBsYWluVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBDbGFzc05hbWUoY29uZmlnLnZpZXdOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kSW5wdXRCaW5kaW5nQ29udHJvbGxlcihiY3MsIGIpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gYmNzW2ldO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgSW5wdXRCaW5kaW5nQ29udHJvbGxlciAmJiBiYy5iaW5kaW5nID09PSBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKGJjcywgYikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJjcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBiY3NbaV07XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIgJiYgYmMuYmluZGluZyA9PT0gYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZFZhbHVlQmxhZGVDb250cm9sbGVyKGJjcywgdikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJjcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBiY3NbaV07XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBWYWx1ZUJsYWRlQ29udHJvbGxlciAmJiBiYy52YWx1ZSA9PT0gdikge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZFN1YlJhY2soYmMpIHtcbiAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgUmFja0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBiYy5yYWNrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIFJhY2tMaWtlQ29udHJvbGxlcikge1xuICAgICAgICAgICAgcmV0dXJuIGJjLnJhY2tDb250cm9sbGVyLnJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRTdWJCbGFkZUNvbnRyb2xsZXJTZXQoYmMpIHtcbiAgICAgICAgY29uc3QgcmFjayA9IGZpbmRTdWJSYWNrKGJjKTtcbiAgICAgICAgcmV0dXJuIHJhY2sgPyByYWNrWydiY1NldF8nXSA6IG51bGw7XG4gICAgfVxuICAgIGNsYXNzIEJsYWRlUmFjayB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGJsYWRlKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB0aGlzLm9uQmxhZGVQb3NpdGlvbnNDaGFuZ2VfID0gdGhpcy5vbkJsYWRlUG9zaXRpb25zQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblNldEFkZF8gPSB0aGlzLm9uU2V0QWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblNldFJlbW92ZV8gPSB0aGlzLm9uU2V0UmVtb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkNoaWxkRGlzcG9zZV8gPSB0aGlzLm9uQ2hpbGREaXNwb3NlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkNoaWxkUG9zaXRpb25zQ2hhbmdlXyA9IHRoaXMub25DaGlsZFBvc2l0aW9uc0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZElucHV0Q2hhbmdlXyA9IHRoaXMub25DaGlsZElucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkNoaWxkTW9uaXRvclVwZGF0ZV8gPSB0aGlzLm9uQ2hpbGRNb25pdG9yVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkNoaWxkVmFsdWVDaGFuZ2VfID0gdGhpcy5vbkNoaWxkVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfID0gdGhpcy5vbkNoaWxkVmlld1Byb3BzQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRMYXlvdXRfID0gdGhpcy5vbkRlc2NlbmRhbnRMYXlvdXRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyA9IHRoaXMub25EZXNjZW5kYW50SW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfID1cbiAgICAgICAgICAgICAgICB0aGlzLm9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5ibGFkZV8gPSBibGFkZSAhPT0gbnVsbCAmJiBibGFkZSAhPT0gdm9pZCAwID8gYmxhZGUgOiBudWxsO1xuICAgICAgICAgICAgKF9hID0gdGhpcy5ibGFkZV8pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSgncG9zaXRpb25zJykuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkJsYWRlUG9zaXRpb25zQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmJjU2V0XyA9IG5ldyBOZXN0ZWRPcmRlcmVkU2V0KGZpbmRTdWJCbGFkZUNvbnRyb2xsZXJTZXQpO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8uZW1pdHRlci5vbignYWRkJywgdGhpcy5vblNldEFkZF8pO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8uZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblNldFJlbW92ZV8pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJjU2V0Xy5pdGVtcztcbiAgICAgICAgfVxuICAgICAgICBhZGQoYmMsIG9wdF9pbmRleCkge1xuICAgICAgICAgICAgaWYgKGJjLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGJjLnBhcmVudC5yZW1vdmUoYmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmNbJ3BhcmVudF8nXSA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmJjU2V0Xy5hZGQoYmMsIG9wdF9pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGJjKSB7XG4gICAgICAgICAgICBiY1sncGFyZW50XyddID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuYmNTZXRfLnJlbW92ZShiYyk7XG4gICAgICAgIH1cbiAgICAgICAgZmluZChjb250cm9sbGVyQ2xhc3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JjZUNhc3QodGhpcy5iY1NldF8uYWxsSXRlbXMoKS5maWx0ZXIoKGJjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJjIGluc3RhbmNlb2YgY29udHJvbGxlckNsYXNzO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIG9uU2V0QWRkXyhldikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICBjb25zdCBpc1Jvb3QgPSBldi50YXJnZXQgPT09IGV2LnJvb3Q7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYWRkJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogZXYuaXRlbSxcbiAgICAgICAgICAgICAgICBpbmRleDogZXYuaW5kZXgsXG4gICAgICAgICAgICAgICAgaXNSb290OiBpc1Jvb3QsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWlzUm9vdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJjID0gZXYuaXRlbTtcbiAgICAgICAgICAgIGJjLnZpZXdQcm9wcy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfKTtcbiAgICAgICAgICAgIGJjLmJsYWRlXG4gICAgICAgICAgICAgICAgLnZhbHVlKCdwb3NpdGlvbnMnKVxuICAgICAgICAgICAgICAgIC5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRQb3NpdGlvbnNDaGFuZ2VfKTtcbiAgICAgICAgICAgIGJjLnZpZXdQcm9wcy5oYW5kbGVEaXNwb3NlKHRoaXMub25DaGlsZERpc3Bvc2VfKTtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy5iaW5kaW5nLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGlsZElucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiYyBpbnN0YW5jZW9mIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGJjLmJpbmRpbmcuZW1pdHRlci5vbigndXBkYXRlJywgdGhpcy5vbkNoaWxkTW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBWYWx1ZUJsYWRlQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGJjLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYWNrID0gZmluZFN1YlJhY2soYmMpO1xuICAgICAgICAgICAgICAgIGlmIChyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSByYWNrLmVtaXR0ZXI7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub24oJ2xheW91dCcsIHRoaXMub25EZXNjZW5kYW50TGF5b3V0Xyk7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub24oJ2lucHV0Y2hhbmdlJywgdGhpcy5vbkRlc2NlbmRhbnRJbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9uKCdtb25pdG9ydXBkYXRlJywgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uU2V0UmVtb3ZlXyhldikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICBjb25zdCBpc1Jvb3QgPSBldi50YXJnZXQgPT09IGV2LnJvb3Q7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgncmVtb3ZlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogZXYuaXRlbSxcbiAgICAgICAgICAgICAgICBpc1Jvb3Q6IGlzUm9vdCxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghaXNSb290KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmMgPSBldi5pdGVtO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgSW5wdXRCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGJjLmJpbmRpbmcuZW1pdHRlci5vZmYoJ2NoYW5nZScsIHRoaXMub25DaGlsZElucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiYyBpbnN0YW5jZW9mIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGJjLmJpbmRpbmcuZW1pdHRlci5vZmYoJ3VwZGF0ZScsIHRoaXMub25DaGlsZE1vbml0b3JVcGRhdGVfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJjIGluc3RhbmNlb2YgVmFsdWVCbGFkZUNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy52YWx1ZS5lbWl0dGVyLm9mZignY2hhbmdlJywgdGhpcy5vbkNoaWxkVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhY2sgPSBmaW5kU3ViUmFjayhiYyk7XG4gICAgICAgICAgICAgICAgaWYgKHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1pdHRlciA9IHJhY2suZW1pdHRlcjtcbiAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5vZmYoJ2xheW91dCcsIHRoaXMub25EZXNjZW5kYW50TGF5b3V0Xyk7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub2ZmKCdpbnB1dGNoYW5nZScsIHRoaXMub25EZXNjZW5kYW50SW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5vZmYoJ21vbml0b3J1cGRhdGUnLCB0aGlzLm9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlUG9zaXRpb25zXygpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVJdGVtcyA9IHRoaXMuYmNTZXRfLml0ZW1zLmZpbHRlcigoYmMpID0+ICFiYy52aWV3UHJvcHMuZ2V0KCdoaWRkZW4nKSk7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFZpc2libGVJdGVtID0gdmlzaWJsZUl0ZW1zWzBdO1xuICAgICAgICAgICAgY29uc3QgbGFzdFZpc2libGVJdGVtID0gdmlzaWJsZUl0ZW1zW3Zpc2libGVJdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHRoaXMuYmNTZXRfLml0ZW1zLmZvckVhY2goKGJjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoYmMgPT09IGZpcnN0VmlzaWJsZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcHMucHVzaCgnZmlyc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJsYWRlXyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ibGFkZV8uZ2V0KCdwb3NpdGlvbnMnKS5pbmNsdWRlcygndmVyeWZpcnN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzLnB1c2goJ3ZlcnlmaXJzdCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChiYyA9PT0gbGFzdFZpc2libGVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHBzLnB1c2goJ2xhc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJsYWRlXyB8fCB0aGlzLmJsYWRlXy5nZXQoJ3Bvc2l0aW9ucycpLmluY2x1ZGVzKCd2ZXJ5bGFzdCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcy5wdXNoKCd2ZXJ5bGFzdCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJjLmJsYWRlLnNldCgncG9zaXRpb25zJywgcHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZFBvc2l0aW9uc0NoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uc18oKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdsYXlvdXQnLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZFZpZXdQcm9wc0NoYW5nZV8oX2V2KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uc18oKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdsYXlvdXQnLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZERpc3Bvc2VfKCkge1xuICAgICAgICAgICAgY29uc3QgZGlzcG9zZWRVY3MgPSB0aGlzLmJjU2V0Xy5pdGVtcy5maWx0ZXIoKGJjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJjLnZpZXdQcm9wcy5nZXQoJ2Rpc3Bvc2VkJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRpc3Bvc2VkVWNzLmZvckVhY2goKGJjKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iY1NldF8ucmVtb3ZlKGJjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGRJbnB1dENoYW5nZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gZmluZElucHV0QmluZGluZ0NvbnRyb2xsZXIodGhpcy5maW5kKElucHV0QmluZGluZ0NvbnRyb2xsZXIpLCBldi5zZW5kZXIpO1xuICAgICAgICAgICAgaWYgKCFiYykge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdpbnB1dGNoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGJjLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZE1vbml0b3JVcGRhdGVfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGZpbmRNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIodGhpcy5maW5kKE1vbml0b3JCaW5kaW5nQ29udHJvbGxlciksIGV2LnNlbmRlcik7XG4gICAgICAgICAgICBpZiAoIWJjKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ21vbml0b3J1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBiYyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkVmFsdWVDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGZpbmRWYWx1ZUJsYWRlQ29udHJvbGxlcih0aGlzLmZpbmQoVmFsdWVCbGFkZUNvbnRyb2xsZXIpLCBldi5zZW5kZXIpO1xuICAgICAgICAgICAgaWYgKCFiYykge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdpbnB1dGNoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGJjLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25EZXNjZW5kYW50TGF5b3V0XyhfKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uc18oKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdsYXlvdXQnLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25EZXNjZW5kYW50SW5wdXRDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnaW5wdXRjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBldi5ibGFkZUNvbnRyb2xsZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogZXYub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXyhldikge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ21vbml0b3J1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBldi5ibGFkZUNvbnRyb2xsZXIsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25CbGFkZVBvc2l0aW9uc0NoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uc18oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFJhY2tDb250cm9sbGVyIGV4dGVuZHMgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKSwgeyB2aWV3OiBuZXcgUGxhaW5WaWV3KGRvYywge1xuICAgICAgICAgICAgICAgICAgICB2aWV3TmFtZTogJ2JyaycsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSB9KSk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja0FkZF8gPSB0aGlzLm9uUmFja0FkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25SYWNrUmVtb3ZlXyA9IHRoaXMub25SYWNrUmVtb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgcmFjayA9IG5ldyBCbGFkZVJhY2soY29uZmlnLnJvb3QgPyB1bmRlZmluZWQgOiBjb25maWcuYmxhZGUpO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uUmFja0FkZF8pO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdyZW1vdmUnLCB0aGlzLm9uUmFja1JlbW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5yYWNrID0gcmFjaztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLmhhbmRsZURpc3Bvc2UoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnJhY2suY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnJhY2suY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgICAgIGJjLnZpZXdQcm9wcy5zZXQoJ2Rpc3Bvc2VkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrQWRkXyhldikge1xuICAgICAgICAgICAgaWYgKCFldi5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnNlcnRFbGVtZW50QXQodGhpcy52aWV3LmVsZW1lbnQsIGV2LmJsYWRlQ29udHJvbGxlci52aWV3LmVsZW1lbnQsIGV2LmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBvblJhY2tSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICBpZiAoIWV2LmlzUm9vdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbW92ZUVsZW1lbnQoZXYuYmxhZGVDb250cm9sbGVyLnZpZXcuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBibGFkZUNvbnRhaW5lckNsYXNzTmFtZSA9IENsYXNzTmFtZSgnY250Jyk7XG5cbiAgICBjbGFzcyBGb2xkZXJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lXyA9IENsYXNzTmFtZShjb25maWcudmlld05hbWUgfHwgJ2ZsZCcpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVfKCksIGJsYWRlQ29udGFpbmVyQ2xhc3NOYW1lKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGVfID0gY29uZmlnLmZvbGRhYmxlO1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZV8uYmluZEV4cGFuZGVkQ2xhc3ModGhpcy5lbGVtZW50LCB0aGlzLmNsYXNzTmFtZV8odW5kZWZpbmVkLCAnZXhwYW5kZWQnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcy5mb2xkYWJsZV8sICdjb21wbGV0ZWQnLCB2YWx1ZVRvQ2xhc3NOYW1lKHRoaXMuZWxlbWVudCwgdGhpcy5jbGFzc05hbWVfKHVuZGVmaW5lZCwgJ2NwbCcpKSk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygnYicpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcChjb25maWcucHJvcHMsICd0aXRsZScsICh0aXRsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KHRpdGxlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8odW5kZWZpbmVkLCAnbm90JykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5jbGFzc05hbWVfKHVuZGVmaW5lZCwgJ25vdCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50ID0gYnV0dG9uRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRpdGxlRWxlbS5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygndCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZVRvVGV4dENvbnRlbnQoY29uZmlnLnByb3BzLnZhbHVlKCd0aXRsZScpLCB0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbWFya0VsZW0uY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8oJ20nKSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya0VsZW0pO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWxlbSA9IGNvbmZpZy5jb250YWluZXJFbGVtZW50O1xuICAgICAgICAgICAgY29udGFpbmVyRWxlbS5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygnYycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb250YWluZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lckVsZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBGb2xkZXJDb250cm9sbGVyIGV4dGVuZHMgUmFja0xpa2VDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGZvbGRhYmxlID0gRm9sZGFibGUuY3JlYXRlKChfYSA9IGNvbmZpZy5leHBhbmRlZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCByYyA9IG5ldyBSYWNrQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogY29uZmlnLmJsYWRlLFxuICAgICAgICAgICAgICAgIHJvb3Q6IGNvbmZpZy5yb290LFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb25maWcpLCB7IHJhY2tDb250cm9sbGVyOiByYywgdmlldzogbmV3IEZvbGRlclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQ6IHJjLnZpZXcuZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgZm9sZGFibGU6IGZvbGRhYmxlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgICAgICB2aWV3TmFtZTogY29uZmlnLnJvb3QgPyAncm90JyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pIH0pKTtcbiAgICAgICAgICAgIHRoaXMub25UaXRsZUNsaWNrXyA9IHRoaXMub25UaXRsZUNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGUgPSBmb2xkYWJsZTtcbiAgICAgICAgICAgIGJpbmRGb2xkYWJsZSh0aGlzLmZvbGRhYmxlLCB0aGlzLnZpZXcuY29udGFpbmVyRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnJhY2tDb250cm9sbGVyLnJhY2suZW1pdHRlci5vbignYWRkJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9sZGFibGUuY2xlYW5VcFRyYW5zaXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYWNrQ29udHJvbGxlci5yYWNrLmVtaXR0ZXIub24oJ3JlbW92ZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvbGRhYmxlLmNsZWFuVXBUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5idXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vblRpdGxlQ2xpY2tfKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZG9jdW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aWV3LmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgfVxuICAgICAgICBvblRpdGxlQ2xpY2tfKCkge1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZS5zZXQoJ2V4cGFuZGVkJywgIXRoaXMuZm9sZGFibGUuZ2V0KCdleHBhbmRlZCcpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IEZvbGRlckJsYWRlUGx1Z2luID0ge1xuICAgICAgICBpZDogJ2ZvbGRlcicsXG4gICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHAucmVxdWlyZWQuc3RyaW5nLFxuICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ2ZvbGRlcicpLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9sZGVyQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGFyZ3MucGFyYW1zLmV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGFyZ3MucGFyYW1zLnRpdGxlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIEZvbGRlckNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvbGRlckFwaShhcmdzLmNvbnRyb2xsZXIsIGFyZ3MucG9vbCk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIExhYmVsZWRWYWx1ZUNvbnRyb2xsZXIgZXh0ZW5kcyBWYWx1ZUJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3UHJvcHMgPSBjb25maWcudmFsdWVDb250cm9sbGVyLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHN1cGVyKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKSwgeyB2YWx1ZTogY29uZmlnLnZhbHVlQ29udHJvbGxlci52YWx1ZSwgdmlldzogbmV3IExhYmVsVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB2aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSksIHZpZXdQcm9wczogdmlld1Byb3BzIH0pKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ29udHJvbGxlciA9IGNvbmZpZy52YWx1ZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICB0aGlzLnZpZXcudmFsdWVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudmFsdWVDb250cm9sbGVyLnZpZXcuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTZXBhcmF0b3JBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJG4gPSBDbGFzc05hbWUoJ3NwcicpO1xuICAgIGNsYXNzIFNlcGFyYXRvclZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG4oKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaHJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2hyJyk7XG4gICAgICAgICAgICBockVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbigncicpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChockVsZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2VwYXJhdG9yQ29udHJvbGxlciBleHRlbmRzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyksIHsgdmlldzogbmV3IFNlcGFyYXRvclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBTZXBhcmF0b3JCbGFkZVBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdzZXBhcmF0b3InLFxuICAgICAgICB0eXBlOiAnYmxhZGUnLFxuICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ3NlcGFyYXRvcicpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8geyBwYXJhbXM6IHJlc3VsdCB9IDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlcGFyYXRvckNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIFNlcGFyYXRvckNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlcGFyYXRvckFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGFzc05hbWUkbSA9IENsYXNzTmFtZSgnJyk7XG4gICAgZnVuY3Rpb24gdmFsdWVUb01vZGlmaWVyKGVsZW0sIG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVRvQ2xhc3NOYW1lKGVsZW0sIGNsYXNzTmFtZSRtKHVuZGVmaW5lZCwgbW9kaWZpZXIpKTtcbiAgICB9XG4gICAgY2xhc3MgVmlld1Byb3BzIGV4dGVuZHMgVmFsdWVNYXAge1xuICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZU1hcCkge1xuICAgICAgICAgICAgc3VwZXIodmFsdWVNYXApO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjcmVhdGUob3B0X2luaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IG9wdF9pbml0aWFsVmFsdWUgIT09IG51bGwgJiYgb3B0X2luaXRpYWxWYWx1ZSAhPT0gdm9pZCAwID8gb3B0X2luaXRpYWxWYWx1ZSA6IHt9O1xuICAgICAgICAgICAgY29uc3QgY29yZU9iaiA9IHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogKF9hID0gaW5pdGlhbFZhbHVlLmRpc2FibGVkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkaXNwb3NlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiAoX2IgPSBpbml0aWFsVmFsdWUuaGlkZGVuKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBjb3JlID0gVmFsdWVNYXAuY3JlYXRlQ29yZShjb3JlT2JqKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmlld1Byb3BzKGNvcmUpO1xuICAgICAgICB9XG4gICAgICAgIGJpbmRDbGFzc01vZGlmaWVycyhlbGVtKSB7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcywgJ2Rpc2FibGVkJywgdmFsdWVUb01vZGlmaWVyKGVsZW0sICdkaXNhYmxlZCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAnaGlkZGVuJywgdmFsdWVUb01vZGlmaWVyKGVsZW0sICdoaWRkZW4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgYmluZERpc2FibGVkKHRhcmdldCkge1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMsICdkaXNhYmxlZCcsIChkaXNhYmxlZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRhcmdldC5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYmluZFRhYkluZGV4KGVsZW0pIHtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAnZGlzYWJsZWQnLCAoZGlzYWJsZWQpID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtLnRhYkluZGV4ID0gZGlzYWJsZWQgPyAtMSA6IDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVEaXNwb3NlKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlKCdkaXNwb3NlZCcpLmVtaXR0ZXIub24oJ2NoYW5nZScsIChkaXNwb3NlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkaXNwb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGwgPSBDbGFzc05hbWUoJ3RiaScpO1xuICAgIGNsYXNzIFRhYkl0ZW1WaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRsKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcChjb25maWcucHJvcHMsICdzZWxlY3RlZCcsIChzZWxlY3RlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbCh1bmRlZmluZWQsICdzZWwnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkbCh1bmRlZmluZWQsICdzZWwnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRsKCdiJykpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBidXR0b25FbGVtO1xuICAgICAgICAgICAgY29uc3QgdGl0bGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGl0bGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGwoJ3QnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVUb1RleHRDb250ZW50KGNvbmZpZy5wcm9wcy52YWx1ZSgndGl0bGUnKSwgdGl0bGVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy50aXRsZUVsZW1lbnQgPSB0aXRsZUVsZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUYWJJdGVtQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrXyA9IHRoaXMub25DbGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgVGFiSXRlbVZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5idXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUYWJQYWdlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uSXRlbUNsaWNrXyA9IHRoaXMub25JdGVtQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmljXyA9IG5ldyBUYWJJdGVtQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLml0ZW1Qcm9wcyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IFZpZXdQcm9wcy5jcmVhdGUoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pY18uZW1pdHRlci5vbignY2xpY2snLCB0aGlzLm9uSXRlbUNsaWNrXyk7XG4gICAgICAgICAgICB0aGlzLmNjXyA9IG5ldyBSYWNrQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogY3JlYXRlQmxhZGUoKSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IFZpZXdQcm9wcy5jcmVhdGUoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLnByb3BzLCAnc2VsZWN0ZWQnLCAoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1Db250cm9sbGVyLnByb3BzLnNldCgnc2VsZWN0ZWQnLCBzZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50Q29udHJvbGxlci52aWV3UHJvcHMuc2V0KCdoaWRkZW4nLCAhc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGl0ZW1Db250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWNfO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjb250ZW50Q29udHJvbGxlcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNjXztcbiAgICAgICAgfVxuICAgICAgICBvbkl0ZW1DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLnNldCgnc2VsZWN0ZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRhYlBhZ2VBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBjb250ZW50UmFja0FwaSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfID0gY29udGVudFJhY2tBcGk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRpdGxlKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuY29udHJvbGxlcl8uaXRlbUNvbnRyb2xsZXIucHJvcHMuZ2V0KCd0aXRsZScpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgfVxuICAgICAgICBzZXQgdGl0bGUodGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uaXRlbUNvbnRyb2xsZXIucHJvcHMuc2V0KCd0aXRsZScsIHRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ3NlbGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHNlbGVjdGVkKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnc2VsZWN0ZWQnLCBzZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uY2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgICAgYWRkQnV0dG9uKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkQnV0dG9uKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkRm9sZGVyKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkRm9sZGVyKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZFNlcGFyYXRvcihvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUYWIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRUYWIocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQoYXBpLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8uYWRkKGFwaSwgb3B0X2luZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoYXBpKSB7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLnJlbW92ZShhcGkpO1xuICAgICAgICB9XG4gICAgICAgIGFkZElucHV0KG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRJbnB1dChvYmplY3QsIGtleSwgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQmxhZGUocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRCbGFkZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgVGFiQXBpIGV4dGVuZHMgUmFja0xpa2VBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBwb29sKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyLCBuZXcgUmFja0FwaShjb250cm9sbGVyLnJhY2tDb250cm9sbGVyLCBwb29sKSk7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZUFkZF8gPSB0aGlzLm9uUGFnZUFkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlUmVtb3ZlXyA9IHRoaXMub25QYWdlUmVtb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VBcGlNYXBfID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBldixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5vbigndXBkYXRlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCd1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBldixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wYWdlU2V0LmVtaXR0ZXIub24oJ2FkZCcsIHRoaXMub25QYWdlQWRkXyk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnBhZ2VTZXQuZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblBhZ2VSZW1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucGFnZVNldC5pdGVtcy5mb3JFYWNoKChwYykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VXBQYWdlQXBpXyhwYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcGFnZXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wYWdlU2V0Lml0ZW1zLm1hcCgocGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcGkgPSB0aGlzLnBhZ2VBcGlNYXBfLmdldChwYyk7XG4gICAgICAgICAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXBpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkUGFnZShwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBwYyA9IG5ldyBUYWJQYWdlQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBpdGVtUHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwYXJhbXMudGl0bGUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uYWRkKHBjLCBwYXJhbXMuaW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5wYWdlQXBpTWFwXy5nZXQocGMpO1xuICAgICAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXBpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZVBhZ2UoaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucmVtb3ZlKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VXBQYWdlQXBpXyhwYykge1xuICAgICAgICAgICAgY29uc3QgcmFja0FwaSA9IHRoaXMucmFja0FwaV9bJ2FwaVNldF8nXS5maW5kKChhcGkpID0+IGFwaS5jb250cm9sbGVyXyA9PT0gcGMuY29udGVudENvbnRyb2xsZXIpO1xuICAgICAgICAgICAgaWYgKCFyYWNrQXBpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXBpID0gbmV3IFRhYlBhZ2VBcGkocGMsIHJhY2tBcGkpO1xuICAgICAgICAgICAgdGhpcy5wYWdlQXBpTWFwXy5zZXQocGMsIGFwaSk7XG4gICAgICAgIH1cbiAgICAgICAgb25QYWdlQWRkXyhldikge1xuICAgICAgICAgICAgdGhpcy5zZXRVcFBhZ2VBcGlfKGV2Lml0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFnZVJlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IHRoaXMucGFnZUFwaU1hcF8uZ2V0KGV2Lml0ZW0pO1xuICAgICAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhZ2VBcGlNYXBfLmRlbGV0ZShldi5pdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRrID0gQ2xhc3NOYW1lKCd0YWInKTtcbiAgICBjbGFzcyBUYWJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRrKCksIGJsYWRlQ29udGFpbmVyQ2xhc3NOYW1lKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZShjb25maWcuZW1wdHksIHZhbHVlVG9DbGFzc05hbWUodGhpcy5lbGVtZW50LCBjbGFzc05hbWUkayh1bmRlZmluZWQsICdub3AnKSkpO1xuICAgICAgICAgICAgY29uc3QgaXRlbXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaXRlbXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGsoJ2knKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaXRlbXNFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNFbGVtZW50ID0gaXRlbXNFbGVtO1xuICAgICAgICAgICAgY29uc3QgY29udGVudHNFbGVtID0gY29uZmlnLmNvbnRlbnRzRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnRlbnRzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRrKCdjJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNvbnRlbnRzRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRzRWxlbWVudCA9IGNvbnRlbnRzRWxlbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRhYkNvbnRyb2xsZXIgZXh0ZW5kcyBSYWNrTGlrZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgY29uc3QgY3IgPSBuZXcgUmFja0NvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVtcHR5ID0gY3JlYXRlVmFsdWUodHJ1ZSk7XG4gICAgICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICByYWNrQ29udHJvbGxlcjogY3IsXG4gICAgICAgICAgICAgICAgdmlldzogbmV3IFRhYlZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzRWxlbWVudDogY3Iudmlldy5lbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBlbXB0eTogZW1wdHksXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vblBhZ2VBZGRfID0gdGhpcy5vblBhZ2VBZGRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZVJlbW92ZV8gPSB0aGlzLm9uUGFnZVJlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlU2VsZWN0ZWRDaGFuZ2VfID0gdGhpcy5vblBhZ2VTZWxlY3RlZENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8gPSBuZXcgTmVzdGVkT3JkZXJlZFNldCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8uZW1pdHRlci5vbignYWRkJywgdGhpcy5vblBhZ2VBZGRfKTtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8uZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblBhZ2VSZW1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlfID0gZW1wdHk7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UGFnZXNfKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHBhZ2VTZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYWdlU2V0XztcbiAgICAgICAgfVxuICAgICAgICBhZGQocGMsIG9wdF9pbmRleCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlU2V0Xy5hZGQocGMsIG9wdF9pbmRleCAhPT0gbnVsbCAmJiBvcHRfaW5kZXggIT09IHZvaWQgMCA/IG9wdF9pbmRleCA6IHRoaXMucGFnZVNldF8uaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8ucmVtb3ZlKHRoaXMucGFnZVNldF8uaXRlbXNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICBhcHBseVBhZ2VzXygpIHtcbiAgICAgICAgICAgIHRoaXMua2VlcFNlbGVjdGlvbl8oKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlfLnJhd1ZhbHVlID0gdGhpcy5wYWdlU2V0Xy5pdGVtcy5sZW5ndGggPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgb25QYWdlQWRkXyhldikge1xuICAgICAgICAgICAgY29uc3QgcGMgPSBldi5pdGVtO1xuICAgICAgICAgICAgaW5zZXJ0RWxlbWVudEF0KHRoaXMudmlldy5pdGVtc0VsZW1lbnQsIHBjLml0ZW1Db250cm9sbGVyLnZpZXcuZWxlbWVudCwgZXYuaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5yYWNrQ29udHJvbGxlci5yYWNrLmFkZChwYy5jb250ZW50Q29udHJvbGxlciwgZXYuaW5kZXgpO1xuICAgICAgICAgICAgcGMucHJvcHMudmFsdWUoJ3NlbGVjdGVkJykuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblBhZ2VTZWxlY3RlZENoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5hcHBseVBhZ2VzXygpO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFnZVJlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHBjID0gZXYuaXRlbTtcbiAgICAgICAgICAgIHJlbW92ZUVsZW1lbnQocGMuaXRlbUNvbnRyb2xsZXIudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucmFja0NvbnRyb2xsZXIucmFjay5yZW1vdmUocGMuY29udGVudENvbnRyb2xsZXIpO1xuICAgICAgICAgICAgcGMucHJvcHNcbiAgICAgICAgICAgICAgICAudmFsdWUoJ3NlbGVjdGVkJylcbiAgICAgICAgICAgICAgICAuZW1pdHRlci5vZmYoJ2NoYW5nZScsIHRoaXMub25QYWdlU2VsZWN0ZWRDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlQYWdlc18oKTtcbiAgICAgICAgfVxuICAgICAgICBrZWVwU2VsZWN0aW9uXygpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2VTZXRfLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0U2VsSW5kZXggPSB0aGlzLnBhZ2VTZXRfLml0ZW1zLmZpbmRJbmRleCgocGMpID0+IHBjLnByb3BzLmdldCgnc2VsZWN0ZWQnKSk7XG4gICAgICAgICAgICBpZiAoZmlyc3RTZWxJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTZXRfLml0ZW1zLmZvckVhY2goKHBjLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBjLnByb3BzLnNldCgnc2VsZWN0ZWQnLCBpID09PSAwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZVNldF8uaXRlbXMuZm9yRWFjaCgocGMsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGMucHJvcHMuc2V0KCdzZWxlY3RlZCcsIGkgPT09IGZpcnN0U2VsSW5kZXgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUGFnZVNlbGVjdGVkQ2hhbmdlXyhldikge1xuICAgICAgICAgICAgaWYgKGV2LnJhd1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhZ2VTZXRfLml0ZW1zLmZpbmRJbmRleCgocGMpID0+IHBjLnByb3BzLnZhbHVlKCdzZWxlY3RlZCcpID09PSBldi5zZW5kZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZVNldF8uaXRlbXMuZm9yRWFjaCgocGMsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGMucHJvcHMuc2V0KCdzZWxlY3RlZCcsIGkgPT09IGluZGV4KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMua2VlcFNlbGVjdGlvbl8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFRhYkJsYWRlUGx1Z2luID0ge1xuICAgICAgICBpZDogJ3RhYicsXG4gICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgcGFnZXM6IHAucmVxdWlyZWQuYXJyYXkocC5yZXF1aXJlZC5vYmplY3QoeyB0aXRsZTogcC5yZXF1aXJlZC5zdHJpbmcgfSkpLFxuICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ3RhYicpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQucGFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBwYXJhbXM6IHJlc3VsdCB9O1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgVGFiQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXJncy5wYXJhbXMucGFnZXMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBjID0gbmV3IFRhYlBhZ2VDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbVByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjLmFkZChwYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9LFxuICAgICAgICBhcGkoYXJncykge1xuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgVGFiQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVGFiQXBpKGFyZ3MuY29udHJvbGxlciwgYXJncy5wb29sKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlQmxhZGVDb250cm9sbGVyKHBsdWdpbiwgYXJncykge1xuICAgICAgICBjb25zdCBhYyA9IHBsdWdpbi5hY2NlcHQoYXJncy5wYXJhbXMpO1xuICAgICAgICBpZiAoIWFjKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXNhYmxlZCA9IFBhcmFtc1BhcnNlcnMub3B0aW9uYWwuYm9vbGVhbihhcmdzLnBhcmFtc1snZGlzYWJsZWQnXSkudmFsdWU7XG4gICAgICAgIGNvbnN0IGhpZGRlbiA9IFBhcmFtc1BhcnNlcnMub3B0aW9uYWwuYm9vbGVhbihhcmdzLnBhcmFtc1snaGlkZGVuJ10pLnZhbHVlO1xuICAgICAgICByZXR1cm4gcGx1Z2luLmNvbnRyb2xsZXIoe1xuICAgICAgICAgICAgYmxhZGU6IGNyZWF0ZUJsYWRlKCksXG4gICAgICAgICAgICBkb2N1bWVudDogYXJncy5kb2N1bWVudCxcbiAgICAgICAgICAgIHBhcmFtczogZm9yY2VDYXN0KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYWMucGFyYW1zKSwgeyBkaXNhYmxlZDogZGlzYWJsZWQsIGhpZGRlbjogaGlkZGVuIH0pKSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogaGlkZGVuLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIE1hbnVhbFRpY2tlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBkaXNwb3NlKCkgeyB9XG4gICAgICAgIHRpY2soKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCd0aWNrJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgSW50ZXJ2YWxUaWNrZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGludGVydmFsKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkXyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50aW1lcklkXyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLm9uVGlja18gPSB0aGlzLm9uVGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZG9jXyA9IGRvYztcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmludGVydmFsXyA9IGludGVydmFsO1xuICAgICAgICAgICAgdGhpcy5zZXRUaW1lcl8oKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZF87XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGRpc2FibGVkKGluYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkXyA9IGluYWN0aXZlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWRfKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVyXygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUaW1lcl8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkaXNwb3NlKCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVyXygpO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyVGltZXJfKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZXJJZF8gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB3aW4gPSB0aGlzLmRvY18uZGVmYXVsdFZpZXc7XG4gICAgICAgICAgICBpZiAod2luKSB7XG4gICAgICAgICAgICAgICAgd2luLmNsZWFySW50ZXJ2YWwodGhpcy50aW1lcklkXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRpbWVySWRfID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lcl8oKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZXJfKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcnZhbF8gPD0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHdpbiA9IHRoaXMuZG9jXy5kZWZhdWx0VmlldztcbiAgICAgICAgICAgIGlmICh3aW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVySWRfID0gd2luLnNldEludGVydmFsKHRoaXMub25UaWNrXywgdGhpcy5pbnRlcnZhbF8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uVGlja18oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZF8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndGljaycsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIENvbXBvc2l0ZUNvbnN0cmFpbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25zdHJhaW50cykge1xuICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RyYWludHMucmVkdWNlKChyZXN1bHQsIGMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYy5jb25zdHJhaW4ocmVzdWx0KTtcbiAgICAgICAgICAgIH0sIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kQ29uc3RyYWludChjLCBjb25zdHJhaW50Q2xhc3MpIHtcbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBjb25zdHJhaW50Q2xhc3MpIHtcbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjIGluc3RhbmNlb2YgQ29tcG9zaXRlQ29uc3RyYWludCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYy5jb25zdHJhaW50cy5yZWR1Y2UoKHRtcFJlc3VsdCwgc2MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodG1wUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXBSZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzYyBpbnN0YW5jZW9mIGNvbnN0cmFpbnRDbGFzcyA/IHNjIDogbnVsbDtcbiAgICAgICAgICAgIH0sIG51bGwpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY2xhc3MgTGlzdENvbnN0cmFpbnQge1xuICAgICAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgICAgIGlmIChvcHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBvcHRzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnZhbHVlID09PSB2YWx1ZTtcbiAgICAgICAgICAgIH0pLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlZCA/IHZhbHVlIDogb3B0c1swXS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFJhbmdlQ29uc3RyYWludCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IGNvbmZpZy5tYXg7XG4gICAgICAgICAgICB0aGlzLm1pblZhbHVlID0gY29uZmlnLm1pbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJhaW4odmFsdWUpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghaXNFbXB0eSh0aGlzLm1pblZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IE1hdGgubWF4KHJlc3VsdCwgdGhpcy5taW5WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkodGhpcy5tYXhWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBNYXRoLm1pbihyZXN1bHQsIHRoaXMubWF4VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFN0ZXBDb25zdHJhaW50IHtcbiAgICAgICAgY29uc3RydWN0b3Ioc3RlcCkge1xuICAgICAgICAgICAgdGhpcy5zdGVwID0gc3RlcDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJhaW4odmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSB2YWx1ZSA8IDBcbiAgICAgICAgICAgICAgICA/IC1NYXRoLnJvdW5kKC12YWx1ZSAvIHRoaXMuc3RlcClcbiAgICAgICAgICAgICAgICA6IE1hdGgucm91bmQodmFsdWUgLyB0aGlzLnN0ZXApO1xuICAgICAgICAgICAgcmV0dXJuIHIgKiB0aGlzLnN0ZXA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkaiA9IENsYXNzTmFtZSgnbHN0Jyk7XG4gICAgY2xhc3MgTGlzdFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHNfID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGooKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICAgICAgICAgIHNlbGVjdEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaigncycpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLnByb3BzXywgJ29wdGlvbnMnLCAob3B0cykgPT4ge1xuICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkRWxlbWVudHMoc2VsZWN0RWxlbSk7XG4gICAgICAgICAgICAgICAgb3B0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtLmRhdGFzZXQuaW5kZXggPSBTdHJpbmcoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtLnRleHRDb250ZW50ID0gaXRlbS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtLnZhbHVlID0gU3RyaW5nKGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtLmFwcGVuZENoaWxkKG9wdGlvbkVsZW0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChzZWxlY3RFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzZWxlY3RFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RWxlbWVudCA9IHNlbGVjdEVsZW07XG4gICAgICAgICAgICBjb25zdCBtYXJrRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGooJ20nKSk7XG4gICAgICAgICAgICBtYXJrRWxlbS5hcHBlbmRDaGlsZChjcmVhdGVTdmdJY29uRWxlbWVudChkb2MsICdkcm9wZG93bicpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtYXJrRWxlbSk7XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlXyA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVsZW1lbnQudmFsdWUgPSBTdHJpbmcodGhpcy52YWx1ZV8ucmF3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBMaXN0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0Q2hhbmdlXyA9IHRoaXMub25TZWxlY3RDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBMaXN0Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuc2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uU2VsZWN0Q2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25TZWxlY3RDaGFuZ2VfKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdEVsZW0gPSBmb3JjZUNhc3QoZS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IG9wdEVsZW0gPSBzZWxlY3RFbGVtLnNlbGVjdGVkT3B0aW9ucy5pdGVtKDApO1xuICAgICAgICAgICAgaWYgKCFvcHRFbGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gTnVtYmVyKG9wdEVsZW0uZGF0YXNldC5pbmRleCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gdGhpcy5wcm9wcy5nZXQoJ29wdGlvbnMnKVtpdGVtSW5kZXhdLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGkgPSBDbGFzc05hbWUoJ3BvcCcpO1xuICAgIGNsYXNzIFBvcHVwVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBiaW5kVmFsdWUoY29uZmlnLnNob3dzLCB2YWx1ZVRvQ2xhc3NOYW1lKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lJGkodW5kZWZpbmVkLCAndicpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBQb3B1cENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5zaG93cyA9IGNyZWF0ZVZhbHVlKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBQb3B1cFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgc2hvd3M6IHRoaXMuc2hvd3MsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGggPSBDbGFzc05hbWUoJ3R4dCcpO1xuICAgIGNsYXNzIFRleHRWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VfID0gdGhpcy5vbkNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRoKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHJvcHNfID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18uZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaCgnaScpKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZV8gPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gdGhpcy5wcm9wc18uZ2V0KCdmb3JtYXR0ZXInKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlID0gZm9ybWF0dGVyKHRoaXMudmFsdWVfLnJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRleHRDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25JbnB1dENoYW5nZV8gPSB0aGlzLm9uSW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnBhcnNlcl8gPSBjb25maWcucGFyc2VyO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgVGV4dFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25JbnB1dENoYW5nZV8pO1xuICAgICAgICB9XG4gICAgICAgIG9uSW5wdXRDaGFuZ2VfKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbSA9IGZvcmNlQ2FzdChlLmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dEVsZW0udmFsdWU7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMucGFyc2VyXyh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkocGFyc2VkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IHBhcnNlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52aWV3LnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJvb2xUb1N0cmluZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYm9vbEZyb21Vbmtub3duKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBCb29sZWFuRm9ybWF0dGVyKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBib29sVG9TdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIGNsYXNzIE51bWJlckxpdGVyYWxOb2RlIHtcbiAgICAgICAgY29uc3RydWN0b3IodGV4dCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICBldmFsdWF0ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGhpcy50ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgQklOQVJZX09QRVJBVElPTl9NQVAgPSB7XG4gICAgICAgICcqKic6ICh2MSwgdjIpID0+IE1hdGgucG93KHYxLCB2MiksXG4gICAgICAgICcqJzogKHYxLCB2MikgPT4gdjEgKiB2MixcbiAgICAgICAgJy8nOiAodjEsIHYyKSA9PiB2MSAvIHYyLFxuICAgICAgICAnJSc6ICh2MSwgdjIpID0+IHYxICUgdjIsXG4gICAgICAgICcrJzogKHYxLCB2MikgPT4gdjEgKyB2MixcbiAgICAgICAgJy0nOiAodjEsIHYyKSA9PiB2MSAtIHYyLFxuICAgICAgICAnPDwnOiAodjEsIHYyKSA9PiB2MSA8PCB2MixcbiAgICAgICAgJz4+JzogKHYxLCB2MikgPT4gdjEgPj4gdjIsXG4gICAgICAgICc+Pj4nOiAodjEsIHYyKSA9PiB2MSA+Pj4gdjIsXG4gICAgICAgICcmJzogKHYxLCB2MikgPT4gdjEgJiB2MixcbiAgICAgICAgJ14nOiAodjEsIHYyKSA9PiB2MSBeIHYyLFxuICAgICAgICAnfCc6ICh2MSwgdjIpID0+IHYxIHwgdjIsXG4gICAgfTtcbiAgICBjbGFzcyBCaW5hcnlPcGVyYXRpb25Ob2RlIHtcbiAgICAgICAgY29uc3RydWN0b3Iob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgICAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGV2YWx1YXRlKCkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSBCSU5BUllfT1BFUkFUSU9OX01BUFt0aGlzLm9wZXJhdG9yXTtcbiAgICAgICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgYmluYXJ5IG9wZXJhdG9yOiAnJHt0aGlzLm9wZXJhdG9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9wKHRoaXMubGVmdC5ldmFsdWF0ZSgpLCB0aGlzLnJpZ2h0LmV2YWx1YXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAnYignLFxuICAgICAgICAgICAgICAgIHRoaXMubGVmdC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICcpJyxcbiAgICAgICAgICAgIF0uam9pbignICcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IFVOQVJZX09QRVJBVElPTl9NQVAgPSB7XG4gICAgICAgICcrJzogKHYpID0+IHYsXG4gICAgICAgICctJzogKHYpID0+IC12LFxuICAgICAgICAnfic6ICh2KSA9PiB+dixcbiAgICB9O1xuICAgIGNsYXNzIFVuYXJ5T3BlcmF0aW9uTm9kZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yLCBleHByKSB7XG4gICAgICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByO1xuICAgICAgICB9XG4gICAgICAgIGV2YWx1YXRlKCkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSBVTkFSWV9PUEVSQVRJT05fTUFQW3RoaXMub3BlcmF0b3JdO1xuICAgICAgICAgICAgaWYgKCFvcCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCB1bmFyeSBvcGVyYXRvcjogJyR7dGhpcy5vcGVyYXRvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcCh0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gWyd1KCcsIHRoaXMub3BlcmF0b3IsIHRoaXMuZXhwcmVzc2lvbi50b1N0cmluZygpLCAnKSddLmpvaW4oJyAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbWJpbmVSZWFkZXIocGFyc2Vycykge1xuICAgICAgICByZXR1cm4gKHRleHQsIGN1cnNvcikgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJzZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2Vyc1tpXSh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkV2hpdGVzcGFjZSh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtID0gdGV4dC5zdWJzdHIoY3Vyc29yKS5tYXRjaCgvXlxccysvKTtcbiAgICAgICAgcmV0dXJuIChfYSA9IChtICYmIG1bMF0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZE5vblplcm9EaWdpdCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgY2ggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICByZXR1cm4gY2gubWF0Y2goL15bMS05XSQvKSA/IGNoIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0LnN1YnN0cihjdXJzb3IpLm1hdGNoKC9eWzAtOV0rLyk7XG4gICAgICAgIHJldHVybiAoX2EgPSAobSAmJiBtWzBdKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRTaWduZWRJbnRlZ2VyKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBkcyA9IHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChkcyAhPT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBkcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaWduID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IDE7XG4gICAgICAgIGlmIChzaWduICE9PSAnLScgJiYgc2lnbiAhPT0gJysnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2RzID0gcmVhZERlY2ltYWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKHNkcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2lnbiArIHNkcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEV4cG9uZW50UGFydCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgZSA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSAxO1xuICAgICAgICBpZiAoZS50b0xvd2VyQ2FzZSgpICE9PSAnZScpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaSA9IHJlYWRTaWduZWRJbnRlZ2VyKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChzaSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZSArIHNpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRGVjaW1hbEludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBjaCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGlmIChjaCA9PT0gJzAnKSB7XG4gICAgICAgICAgICByZXR1cm4gY2g7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnpkID0gcmVhZE5vblplcm9EaWdpdCh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gbnpkLmxlbmd0aDtcbiAgICAgICAgaWYgKG56ZCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnpkICsgcmVhZERlY2ltYWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZERlY2ltYWxMaXRlcmFsMSh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgZGlsID0gcmVhZERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gZGlsLmxlbmd0aDtcbiAgICAgICAgaWYgKGRpbCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3QgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gZG90Lmxlbmd0aDtcbiAgICAgICAgaWYgKGRvdCAhPT0gJy4nKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGRzID0gcmVhZERlY2ltYWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IGRkcy5sZW5ndGg7XG4gICAgICAgIHJldHVybiBkaWwgKyBkb3QgKyBkZHMgKyByZWFkRXhwb25lbnRQYXJ0KHRleHQsIGN1cnNvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWREZWNpbWFsTGl0ZXJhbDIodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGRvdCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSBkb3QubGVuZ3RoO1xuICAgICAgICBpZiAoZG90ICE9PSAnLicpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZHMgPSByZWFkRGVjaW1hbERpZ2l0cyh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gZGRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGRkcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG90ICsgZGRzICsgcmVhZEV4cG9uZW50UGFydCh0ZXh0LCBjdXJzb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRGVjaW1hbExpdGVyYWwzKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBkaWwgPSByZWFkRGVjaW1hbEludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGN1cnNvciArPSBkaWwubGVuZ3RoO1xuICAgICAgICBpZiAoZGlsID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaWwgKyByZWFkRXhwb25lbnRQYXJ0KHRleHQsIGN1cnNvcik7XG4gICAgfVxuICAgIGNvbnN0IHJlYWREZWNpbWFsTGl0ZXJhbCA9IGNvbWJpbmVSZWFkZXIoW1xuICAgICAgICByZWFkRGVjaW1hbExpdGVyYWwxLFxuICAgICAgICByZWFkRGVjaW1hbExpdGVyYWwyLFxuICAgICAgICByZWFkRGVjaW1hbExpdGVyYWwzLFxuICAgIF0pO1xuICAgIGZ1bmN0aW9uIHBhcnNlQmluYXJ5RGlnaXRzKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0LnN1YnN0cihjdXJzb3IpLm1hdGNoKC9eWzAxXSsvKTtcbiAgICAgICAgcmV0dXJuIChfYSA9IChtICYmIG1bMF0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEJpbmFyeUludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBwcmVmaXggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDIpO1xuICAgICAgICBjdXJzb3IgKz0gcHJlZml4Lmxlbmd0aDtcbiAgICAgICAgaWYgKHByZWZpeC50b0xvd2VyQ2FzZSgpICE9PSAnMGInKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmRzID0gcGFyc2VCaW5hcnlEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKGJkcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJlZml4ICsgYmRzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkT2N0YWxEaWdpdHModGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgbSA9IHRleHQuc3Vic3RyKGN1cnNvcikubWF0Y2goL15bMC03XSsvKTtcbiAgICAgICAgcmV0dXJuIChfYSA9IChtICYmIG1bMF0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZE9jdGFsSW50ZWdlckxpdGVyYWwodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMik7XG4gICAgICAgIGN1cnNvciArPSBwcmVmaXgubGVuZ3RoO1xuICAgICAgICBpZiAocHJlZml4LnRvTG93ZXJDYXNlKCkgIT09ICcwbycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvZHMgPSByZWFkT2N0YWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKG9kcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJlZml4ICsgb2RzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkSGV4RGlnaXRzKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0LnN1YnN0cihjdXJzb3IpLm1hdGNoKC9eWzAtOWEtZl0rL2kpO1xuICAgICAgICByZXR1cm4gKF9hID0gKG0gJiYgbVswXSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkSGV4SW50ZWdlckxpdGVyYWwodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMik7XG4gICAgICAgIGN1cnNvciArPSBwcmVmaXgubGVuZ3RoO1xuICAgICAgICBpZiAocHJlZml4LnRvTG93ZXJDYXNlKCkgIT09ICcweCcpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZHMgPSByZWFkSGV4RGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChoZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZWZpeCArIGhkcztcbiAgICB9XG4gICAgY29uc3QgcmVhZE5vbkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbCA9IGNvbWJpbmVSZWFkZXIoW1xuICAgICAgICByZWFkQmluYXJ5SW50ZWdlckxpdGVyYWwsXG4gICAgICAgIHJlYWRPY3RhbEludGVnZXJMaXRlcmFsLFxuICAgICAgICByZWFkSGV4SW50ZWdlckxpdGVyYWwsXG4gICAgXSk7XG4gICAgY29uc3QgcmVhZE51bWVyaWNMaXRlcmFsID0gY29tYmluZVJlYWRlcihbXG4gICAgICAgIHJlYWROb25EZWNpbWFsSW50ZWdlckxpdGVyYWwsXG4gICAgICAgIHJlYWREZWNpbWFsTGl0ZXJhbCxcbiAgICBdKTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgbnVtID0gcmVhZE51bWVyaWNMaXRlcmFsKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGN1cnNvciArPSBudW0ubGVuZ3RoO1xuICAgICAgICBpZiAobnVtID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2YWx1YWJsZTogbmV3IE51bWJlckxpdGVyYWxOb2RlKG51bSksXG4gICAgICAgICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3Qgb3AgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gb3AubGVuZ3RoO1xuICAgICAgICBpZiAob3AgIT09ICcoJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhwciA9IHBhcnNlRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoIWV4cHIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGN1cnNvciA9IGV4cHIuY3Vyc29yO1xuICAgICAgICBjdXJzb3IgKz0gcmVhZFdoaXRlc3BhY2UodGV4dCwgY3Vyc29yKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNsID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IGNsLmxlbmd0aDtcbiAgICAgICAgaWYgKGNsICE9PSAnKScpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmFsdWFibGU6IGV4cHIuZXZhbHVhYmxlLFxuICAgICAgICAgICAgY3Vyc29yOiBjdXJzb3IsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlUHJpbWFyeUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIHJldHVybiAocGFyc2VMaXRlcmFsKHRleHQsIGN1cnNvcikgfHwgcGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VVbmFyeUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGV4cHIgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChleHByKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSBvcC5sZW5ndGg7XG4gICAgICAgIGlmIChvcCAhPT0gJysnICYmIG9wICE9PSAnLScgJiYgb3AgIT09ICd+Jykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnVtID0gcGFyc2VVbmFyeUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKCFudW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGN1cnNvciA9IG51bS5jdXJzb3I7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgICAgICAgIGV2YWx1YWJsZTogbmV3IFVuYXJ5T3BlcmF0aW9uTm9kZShvcCwgbnVtLmV2YWx1YWJsZSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRCaW5hcnlPcGVyYXRvcihvcHMsIHRleHQsIGN1cnNvcikge1xuICAgICAgICBjdXJzb3IgKz0gcmVhZFdoaXRlc3BhY2UodGV4dCwgY3Vyc29yKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG9wID0gb3BzLmZpbHRlcigob3ApID0+IHRleHQuc3RhcnRzV2l0aChvcCwgY3Vyc29yKSlbMF07XG4gICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGN1cnNvciArPSBvcC5sZW5ndGg7XG4gICAgICAgIGN1cnNvciArPSByZWFkV2hpdGVzcGFjZSh0ZXh0LCBjdXJzb3IpLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnNvcjogY3Vyc29yLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uUGFyc2VyKGV4cHJQYXJzZXIsIG9wcykge1xuICAgICAgICByZXR1cm4gKHRleHQsIGN1cnNvcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RFeHByID0gZXhwclBhcnNlcih0ZXh0LCBjdXJzb3IpO1xuICAgICAgICAgICAgaWYgKCFmaXJzdEV4cHIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnNvciA9IGZpcnN0RXhwci5jdXJzb3I7XG4gICAgICAgICAgICBsZXQgZXhwciA9IGZpcnN0RXhwci5ldmFsdWFibGU7XG4gICAgICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3AgPSByZWFkQmluYXJ5T3BlcmF0b3Iob3BzLCB0ZXh0LCBjdXJzb3IpO1xuICAgICAgICAgICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnNvciA9IG9wLmN1cnNvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RXhwciA9IGV4cHJQYXJzZXIodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICBpZiAoIW5leHRFeHByKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJzb3IgPSBuZXh0RXhwci5jdXJzb3I7XG4gICAgICAgICAgICAgICAgZXhwciA9IG5ldyBCaW5hcnlPcGVyYXRpb25Ob2RlKG9wLm9wZXJhdG9yLCBleHByLCBuZXh0RXhwci5ldmFsdWFibGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV4cHJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBjdXJzb3IsXG4gICAgICAgICAgICAgICAgICAgIGV2YWx1YWJsZTogZXhwcixcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBwYXJzZUJpbmFyeU9wZXJhdGlvbkV4cHJlc3Npb24gPSBbXG4gICAgICAgIFsnKionXSxcbiAgICAgICAgWycqJywgJy8nLCAnJSddLFxuICAgICAgICBbJysnLCAnLSddLFxuICAgICAgICBbJzw8JywgJz4+PicsICc+PiddLFxuICAgICAgICBbJyYnXSxcbiAgICAgICAgWydeJ10sXG4gICAgICAgIFsnfCddLFxuICAgIF0ucmVkdWNlKChwYXJzZXIsIG9wcykgPT4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvblBhcnNlcihwYXJzZXIsIG9wcyk7XG4gICAgfSwgcGFyc2VVbmFyeUV4cHJlc3Npb24pO1xuICAgIGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY3Vyc29yICs9IHJlYWRXaGl0ZXNwYWNlKHRleHQsIGN1cnNvcikubGVuZ3RoO1xuICAgICAgICByZXR1cm4gcGFyc2VCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uKHRleHQsIGN1cnNvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlRWNtYU51bWJlckV4cHJlc3Npb24odGV4dCkge1xuICAgICAgICBjb25zdCBleHByID0gcGFyc2VFeHByZXNzaW9uKHRleHQsIDApO1xuICAgICAgICBpZiAoIWV4cHIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnNvciA9IGV4cHIuY3Vyc29yICsgcmVhZFdoaXRlc3BhY2UodGV4dCwgZXhwci5jdXJzb3IpLmxlbmd0aDtcbiAgICAgICAgaWYgKGN1cnNvciAhPT0gdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHByLmV2YWx1YWJsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU51bWJlcih0ZXh0KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgciA9IHBhcnNlRWNtYU51bWJlckV4cHJlc3Npb24odGV4dCk7XG4gICAgICAgIHJldHVybiAoX2EgPSByID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuZXZhbHVhdGUoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbnVtYmVyRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgcHYgPSBwYXJzZU51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkocHYpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB2O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBudW1iZXJUb1N0cmluZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKGRpZ2l0cykge1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9GaXhlZChNYXRoLm1heChNYXRoLm1pbihkaWdpdHMsIDIwKSwgMCkpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGlubmVyRm9ybWF0dGVyID0gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDApO1xuICAgIGZ1bmN0aW9uIGZvcm1hdFBlcmNlbnRhZ2UodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlubmVyRm9ybWF0dGVyKHZhbHVlKSArICclJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdGcm9tVW5rbm93bih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZm9ybWF0U3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaWxsQnVmZmVyKGJ1ZmZlciwgYnVmZmVyU2l6ZSkge1xuICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCA8IGJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZUJ1ZmZlcihidWZmZXJTaXplKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IFtdO1xuICAgICAgICBmaWxsQnVmZmVyKGJ1ZmZlciwgYnVmZmVyU2l6ZSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVWYWx1ZShidWZmZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVUcmltbWVkQnVmZmVyKGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBpbmRleCA9IGJ1ZmZlci5pbmRleE9mKHVuZGVmaW5lZCk7XG4gICAgICAgIHJldHVybiBmb3JjZUNhc3QoaW5kZXggPCAwID8gYnVmZmVyIDogYnVmZmVyLnNsaWNlKDAsIGluZGV4KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVB1c2hlZEJ1ZmZlcihidWZmZXIsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5ld0J1ZmZlciA9IFsuLi5jcmVhdGVUcmltbWVkQnVmZmVyKGJ1ZmZlciksIG5ld1ZhbHVlXTtcbiAgICAgICAgaWYgKG5ld0J1ZmZlci5sZW5ndGggPiBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXdCdWZmZXIuc3BsaWNlKDAsIG5ld0J1ZmZlci5sZW5ndGggLSBidWZmZXIubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpbGxCdWZmZXIobmV3QnVmZmVyLCBidWZmZXIubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3QnVmZmVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbm5lY3RWYWx1ZXMoeyBwcmltYXJ5LCBzZWNvbmRhcnksIGZvcndhcmQsIGJhY2t3YXJkLCB9KSB7XG4gICAgICAgIGxldCBjaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICBmdW5jdGlvbiBwcmV2ZW50RmVlZGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2luZykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoYW5naW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBjaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHByaW1hcnkuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICBwcmV2ZW50RmVlZGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlY29uZGFyeS5zZXRSYXdWYWx1ZShmb3J3YXJkKHByaW1hcnksIHNlY29uZGFyeSksIGV2Lm9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBzZWNvbmRhcnkuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICBwcmV2ZW50RmVlZGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHByaW1hcnkuc2V0UmF3VmFsdWUoYmFja3dhcmQocHJpbWFyeSwgc2Vjb25kYXJ5KSwgZXYub3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByZXZlbnRGZWVkYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2Vjb25kYXJ5LnNldFJhd1ZhbHVlKGZvcndhcmQocHJpbWFyeSwgc2Vjb25kYXJ5KSwgZXYub3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHByZXZlbnRGZWVkYmFjaygoKSA9PiB7XG4gICAgICAgICAgICBzZWNvbmRhcnkuc2V0UmF3VmFsdWUoZm9yd2FyZChwcmltYXJ5LCBzZWNvbmRhcnkpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXAsIGtleXMpIHtcbiAgICAgICAgY29uc3Qgc3RlcCA9IGJhc2VTdGVwICogKGtleXMuYWx0S2V5ID8gMC4xIDogMSkgKiAoa2V5cy5zaGlmdEtleSA/IDEwIDogMSk7XG4gICAgICAgIGlmIChrZXlzLnVwS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gK3N0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5cy5kb3duS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gLXN0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFZlcnRpY2FsU3RlcEtleXMoZXYpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgZG93bktleTogZXYua2V5ID09PSAnQXJyb3dEb3duJyxcbiAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIHVwS2V5OiBldi5rZXkgPT09ICdBcnJvd1VwJyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgIGRvd25LZXk6IGV2LmtleSA9PT0gJ0Fycm93TGVmdCcsXG4gICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB1cEtleTogZXYua2V5ID09PSAnQXJyb3dSaWdodCcsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVmVydGljYWxBcnJvd0tleShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA9PT0gJ0Fycm93VXAnIHx8IGtleSA9PT0gJ0Fycm93RG93bic7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzQXJyb3dLZXkoa2V5KSB7XG4gICAgICAgIHJldHVybiBpc1ZlcnRpY2FsQXJyb3dLZXkoa2V5KSB8fCBrZXkgPT09ICdBcnJvd0xlZnQnIHx8IGtleSA9PT0gJ0Fycm93UmlnaHQnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXQkMShldiwgZWxlbSkge1xuICAgICAgICBjb25zdCB3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogZXYucGFnZVggLSAoKCh3aW4gJiYgd2luLnNjcm9sbFgpIHx8IDApICsgcmVjdC5sZWZ0KSxcbiAgICAgICAgICAgIHk6IGV2LnBhZ2VZIC0gKCgod2luICYmIHdpbi5zY3JvbGxZKSB8fCAwKSArIHJlY3QudG9wKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2xhc3MgUG9pbnRlckhhbmRsZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcihlbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RUb3VjaF8gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5vbkRvY3VtZW50TW91c2VNb3ZlXyA9IHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Eb2N1bWVudE1vdXNlVXBfID0gdGhpcy5vbkRvY3VtZW50TW91c2VVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Nb3VzZURvd25fID0gdGhpcy5vbk1vdXNlRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaEVuZF8gPSB0aGlzLm9uVG91Y2hFbmRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hNb3ZlXyA9IHRoaXMub25Ub3VjaE1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hTdGFydF8gPSB0aGlzLm9uVG91Y2hTdGFydF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbV8gPSBlbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25Ub3VjaFN0YXJ0Xywge1xuICAgICAgICAgICAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25Ub3VjaE1vdmVfLCB7XG4gICAgICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25Ub3VjaEVuZF8pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duXyk7XG4gICAgICAgIH1cbiAgICAgICAgY29tcHV0ZVBvc2l0aW9uXyhvZmZzZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmVsZW1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBib3VuZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwb2ludDogb2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogb2Zmc2V0LngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBvZmZzZXQueSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIG9uTW91c2VEb3duXyhldikge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIChfYSA9IGV2LmN1cnJlbnRUYXJnZXQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtXy5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8pO1xuICAgICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnZG93bicsIHtcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8oY29tcHV0ZU9mZnNldCQxKGV2LCB0aGlzLmVsZW1fKSksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRG9jdW1lbnRNb3VzZU1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbW92ZScsIHtcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8oY29tcHV0ZU9mZnNldCQxKGV2LCB0aGlzLmVsZW1fKSksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRG9jdW1lbnRNb3VzZVVwXyhldikge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtXy5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8pO1xuICAgICAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndXAnLCB7XG4gICAgICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb21wdXRlUG9zaXRpb25fKGNvbXB1dGVPZmZzZXQkMShldiwgdGhpcy5lbGVtXykpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblRvdWNoU3RhcnRfKGV2KSB7XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBldi50YXJnZXRUb3VjaGVzLml0ZW0oMCk7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdkb3duJywge1xuICAgICAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyh0b3VjaFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubGFzdFRvdWNoXyA9IHRvdWNoO1xuICAgICAgICB9XG4gICAgICAgIG9uVG91Y2hNb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBldi50YXJnZXRUb3VjaGVzLml0ZW0oMCk7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb3ZlJywge1xuICAgICAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyh0b3VjaFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubGFzdFRvdWNoXyA9IHRvdWNoO1xuICAgICAgICB9XG4gICAgICAgIG9uVG91Y2hFbmRfKGV2KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCB0b3VjaCA9IChfYSA9IGV2LnRhcmdldFRvdWNoZXMuaXRlbSgwKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5sYXN0VG91Y2hfO1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndXAnLCB7XG4gICAgICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb21wdXRlUG9zaXRpb25fKHRvdWNoXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogdG91Y2guY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRvdWNoLmNsaWVudFkgLSByZWN0LnRvcCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwUmFuZ2UodmFsdWUsIHN0YXJ0MSwgZW5kMSwgc3RhcnQyLCBlbmQyKSB7XG4gICAgICAgIGNvbnN0IHAgPSAodmFsdWUgLSBzdGFydDEpIC8gKGVuZDEgLSBzdGFydDEpO1xuICAgICAgICByZXR1cm4gc3RhcnQyICsgcCAqIChlbmQyIC0gc3RhcnQyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGVjaW1hbERpZ2l0cyh2YWx1ZSkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKHZhbHVlLnRvRml4ZWQoMTApKTtcbiAgICAgICAgY29uc3QgZnJhYyA9IHRleHQuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgcmV0dXJuIGZyYWMucmVwbGFjZSgvMCskLywgJycpLmxlbmd0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29uc3RyYWluUmFuZ2UodmFsdWUsIG1pbiwgbWF4KSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSwgbWluKSwgbWF4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbG9vcFJhbmdlKHZhbHVlLCBtYXgpIHtcbiAgICAgICAgcmV0dXJuICgodmFsdWUgJSBtYXgpICsgbWF4KSAlIG1heDtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZyA9IENsYXNzTmFtZSgndHh0Jyk7XG4gICAgY2xhc3MgTnVtYmVyVGV4dFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZV8gPSB0aGlzLm9uQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18gPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnByb3BzXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygpLCBjbGFzc05hbWUkZyh1bmRlZmluZWQsICdudW0nKSk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmFycmF5UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZyh1bmRlZmluZWQsIGNvbmZpZy5hcnJheVBvc2l0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaScpKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW07XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ2dpbmdDaGFuZ2VfID0gdGhpcy5vbkRyYWdnaW5nQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZ18gPSBjb25maWcuZHJhZ2dpbmc7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uRHJhZ2dpbmdDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRnKCkpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaScpKTtcbiAgICAgICAgICAgIGNvbnN0IGtub2JFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAga25vYkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChrbm9iRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50ID0ga25vYkVsZW07XG4gICAgICAgICAgICBjb25zdCBndWlkZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3N2ZycpO1xuICAgICAgICAgICAgZ3VpZGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoJ2cnKSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50LmFwcGVuZENoaWxkKGd1aWRlRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBib2R5RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAncGF0aCcpO1xuICAgICAgICAgICAgYm9keUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnZ2InKSk7XG4gICAgICAgICAgICBndWlkZUVsZW0uYXBwZW5kQ2hpbGQoYm9keUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5ndWlkZUJvZHlFbGVtXyA9IGJvZHlFbGVtO1xuICAgICAgICAgICAgY29uc3QgaGVhZEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3BhdGgnKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoJ2doJykpO1xuICAgICAgICAgICAgZ3VpZGVFbGVtLmFwcGVuZENoaWxkKGhlYWRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZ3VpZGVIZWFkRWxlbV8gPSBoZWFkRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWUoJ3R0JykoKSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50LmFwcGVuZENoaWxkKHRvb2x0aXBFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEVsZW1fID0gdG9vbHRpcEVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIG9uRHJhZ2dpbmdDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBpZiAoZXYucmF3VmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkZyh1bmRlZmluZWQsICdkcmcnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcodW5kZWZpbmVkLCAnZHJnJykpO1xuICAgICAgICAgICAgY29uc3QgeCA9IGV2LnJhd1ZhbHVlIC8gdGhpcy5wcm9wc18uZ2V0KCdkcmFnZ2luZ1NjYWxlJyk7XG4gICAgICAgICAgICBjb25zdCBhb3ggPSB4ICsgKHggPiAwID8gLTEgOiB4IDwgMCA/ICsxIDogMCk7XG4gICAgICAgICAgICBjb25zdCBhZHggPSBjb25zdHJhaW5SYW5nZSgtYW94LCAtNCwgKzQpO1xuICAgICAgICAgICAgdGhpcy5ndWlkZUhlYWRFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZCcsIFtgTSAke2FveCArIGFkeH0sMCBMJHthb3h9LDQgTCR7YW94ICsgYWR4fSw4YCwgYE0gJHt4fSwtMSBMJHt4fSw5YF0uam9pbignICcpKTtcbiAgICAgICAgICAgIHRoaXMuZ3VpZGVCb2R5RWxlbV8uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnLCBgTSAwLDQgTCR7eH0sNGApO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gdGhpcy5wcm9wc18uZ2V0KCdmb3JtYXR0ZXInKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEVsZW1fLnRleHRDb250ZW50ID0gZm9ybWF0dGVyKHRoaXMudmFsdWUucmF3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwRWxlbV8uc3R5bGUubGVmdCA9IGAke3h9cHhgO1xuICAgICAgICB9XG4gICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSB0aGlzLnByb3BzXy5nZXQoJ2Zvcm1hdHRlcicpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPSBmb3JtYXR0ZXIodGhpcy52YWx1ZS5yYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBOdW1iZXJUZXh0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblJhd1ZhbHVlXyA9IDA7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2VfID0gdGhpcy5vbklucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbklucHV0S2V5RG93bl8gPSB0aGlzLm9uSW5wdXRLZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbklucHV0S2V5VXBfID0gdGhpcy5vbklucHV0S2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25fID0gdGhpcy5vblBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuYmFzZVN0ZXBfID0gY29uZmlnLmJhc2VTdGVwO1xuICAgICAgICAgICAgdGhpcy5wYXJzZXJfID0gY29uZmlnLnBhcnNlcjtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZ18gPSBjcmVhdGVWYWx1ZShudWxsKTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBOdW1iZXJUZXh0Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBhcnJheVBvc2l0aW9uOiBjb25maWcuYXJyYXlQb3NpdGlvbixcbiAgICAgICAgICAgICAgICBkcmFnZ2luZzogdGhpcy5kcmFnZ2luZ18sXG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25JbnB1dEtleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uSW5wdXRLZXlVcF8pO1xuICAgICAgICAgICAgY29uc3QgcGggPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3Lmtub2JFbGVtZW50KTtcbiAgICAgICAgICAgIHBoLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHBoLmVtaXR0ZXIub24oJ21vdmUnLCB0aGlzLm9uUG9pbnRlck1vdmVfKTtcbiAgICAgICAgICAgIHBoLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICB9XG4gICAgICAgIG9uSW5wdXRDaGFuZ2VfKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbSA9IGZvcmNlQ2FzdChlLmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dEVsZW0udmFsdWU7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMucGFyc2VyXyh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkocGFyc2VkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IHBhcnNlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52aWV3LnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBvbklucHV0S2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KHRoaXMuYmFzZVN0ZXBfLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSArIHN0ZXAsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25JbnB1dEtleVVwXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkodGhpcy5iYXNlU3RlcF8sIGdldFZlcnRpY2FsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXygpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luUmF3VmFsdWVfID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmdfLnJhd1ZhbHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICBjb21wdXRlRHJhZ2dpbmdWYWx1ZV8oZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFkYXRhLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkeCA9IGRhdGEucG9pbnQueCAtIGRhdGEuYm91bmRzLndpZHRoIC8gMjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9yaWdpblJhd1ZhbHVlXyArIGR4ICogdGhpcy5wcm9wcy5nZXQoJ2RyYWdnaW5nU2NhbGUnKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJNb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuY29tcHV0ZURyYWdnaW5nVmFsdWVfKGV2LmRhdGEpO1xuICAgICAgICAgICAgaWYgKHYgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHYsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXy5yYXdWYWx1ZSA9IHRoaXMudmFsdWUucmF3VmFsdWUgLSB0aGlzLm9yaWdpblJhd1ZhbHVlXztcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLmNvbXB1dGVEcmFnZ2luZ1ZhbHVlXyhldi5kYXRhKTtcbiAgICAgICAgICAgIGlmICh2ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh2LCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmdfLnJhd1ZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRmID0gQ2xhc3NOYW1lKCdzbGQnKTtcbiAgICBjbGFzcyBTbGlkZXJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VfID0gdGhpcy5vbkNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHNfID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18uZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGYoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgdHJhY2tFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdHJhY2tFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGYoJ3QnKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRUYWJJbmRleCh0cmFja0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRyYWNrRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRyYWNrRWxlbWVudCA9IHRyYWNrRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IGtub2JFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAga25vYkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZignaycpKTtcbiAgICAgICAgICAgIHRoaXMudHJhY2tFbGVtZW50LmFwcGVuZENoaWxkKGtub2JFbGVtKTtcbiAgICAgICAgICAgIHRoaXMua25vYkVsZW1lbnQgPSBrbm9iRWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBjb25zdHJhaW5SYW5nZShtYXBSYW5nZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB0aGlzLnByb3BzXy5nZXQoJ21pblZhbHVlJyksIHRoaXMucHJvcHNfLmdldCgnbWF4VmFsdWUnKSwgMCwgMTAwKSwgMCwgMTAwKTtcbiAgICAgICAgICAgIHRoaXMua25vYkVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwfSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2xpZGVyQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5RG93bl8gPSB0aGlzLm9uS2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25LZXlVcF8gPSB0aGlzLm9uS2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25Pck1vdmVfID0gdGhpcy5vblBvaW50ZXJEb3duT3JNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5iYXNlU3RlcF8gPSBjb25maWcuYmFzZVN0ZXA7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBTbGlkZXJWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXyA9IG5ldyBQb2ludGVySGFuZGxlcih0aGlzLnZpZXcudHJhY2tFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duT3JNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyRG93bk9yTW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnRyYWNrRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy50cmFja0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uS2V5VXBfKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVQb2ludGVyRXZlbnRfKGQsIG9wdHMpIHtcbiAgICAgICAgICAgIGlmICghZC5wb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobWFwUmFuZ2UoY29uc3RyYWluUmFuZ2UoZC5wb2ludC54LCAwLCBkLmJvdW5kcy53aWR0aCksIDAsIGQuYm91bmRzLndpZHRoLCB0aGlzLnByb3BzLmdldCgnbWluVmFsdWUnKSwgdGhpcy5wcm9wcy5nZXQoJ21heFZhbHVlJykpLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duT3JNb3ZlXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyVXBfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlEb3duXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkodGhpcy5iYXNlU3RlcF8sIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUgKyBzdGVwLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleSh0aGlzLmJhc2VTdGVwXywgZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZSA9IENsYXNzTmFtZSgnc2xkdHh0Jyk7XG4gICAgY2xhc3MgU2xpZGVyVGV4dFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGUoKSk7XG4gICAgICAgICAgICBjb25zdCBzbGlkZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc2xpZGVyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRlKCdzJykpO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXJWaWV3XyA9IGNvbmZpZy5zbGlkZXJWaWV3O1xuICAgICAgICAgICAgc2xpZGVyRWxlbS5hcHBlbmRDaGlsZCh0aGlzLnNsaWRlclZpZXdfLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHNsaWRlckVsZW0pO1xuICAgICAgICAgICAgY29uc3QgdGV4dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXh0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRlKCd0JykpO1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld18gPSBjb25maWcudGV4dFZpZXc7XG4gICAgICAgICAgICB0ZXh0RWxlbS5hcHBlbmRDaGlsZCh0aGlzLnRleHRWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0RWxlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTbGlkZXJUZXh0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXJDXyA9IG5ldyBTbGlkZXJDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGJhc2VTdGVwOiBjb25maWcuYmFzZVN0ZXAsXG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5zbGlkZXJQcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogY29uZmlnLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGV4dENfID0gbmV3IE51bWJlclRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGJhc2VTdGVwOiBjb25maWcuYmFzZVN0ZXAsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcudGV4dFByb3BzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb25maWcudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgU2xpZGVyVGV4dFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgc2xpZGVyVmlldzogdGhpcy5zbGlkZXJDXy52aWV3LFxuICAgICAgICAgICAgICAgIHRleHRWaWV3OiB0aGlzLnRleHRDXy52aWV3LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHNsaWRlckNvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXJDXztcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGV4dENvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0Q187XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cml0ZVByaW1pdGl2ZSh0YXJnZXQsIHZhbHVlKSB7XG4gICAgICAgIHRhcmdldC53cml0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VMaXN0T3B0aW9ucyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcC5yZXF1aXJlZC5hcnJheShwLnJlcXVpcmVkLm9iamVjdCh7XG4gICAgICAgICAgICAgICAgdGV4dDogcC5yZXF1aXJlZC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHAucmVxdWlyZWQucmF3LFxuICAgICAgICAgICAgfSkpKHZhbHVlKS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHAucmVxdWlyZWQucmF3KHZhbHVlKVxuICAgICAgICAgICAgICAgIC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZVBpY2tlckxheW91dCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09ICdpbmxpbmUnIHx8IHZhbHVlID09PSAncG9wdXAnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgcmV0dXJuIHAucmVxdWlyZWQub2JqZWN0KHtcbiAgICAgICAgICAgIG1heDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICBtaW46IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgc3RlcDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgIH0pKHZhbHVlKS52YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTGlzdE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgaXRlbXMucHVzaCh7IHRleHQ6IHRleHQsIHZhbHVlOiBvcHRpb25zW3RleHRdIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVMaXN0Q29uc3RyYWludChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiAhaXNFbXB0eShvcHRpb25zKVxuICAgICAgICAgICAgPyBuZXcgTGlzdENvbnN0cmFpbnQobm9ybWFsaXplTGlzdE9wdGlvbnMoZm9yY2VDYXN0KG9wdGlvbnMpKSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZExpc3RJdGVtcyhjb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdHJhaW50XG4gICAgICAgICAgICA/IGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIExpc3RDb25zdHJhaW50KVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjLm9wdGlvbnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRTdGVwKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3QgYyA9IGNvbnN0cmFpbnQgPyBmaW5kQ29uc3RyYWludChjb25zdHJhaW50LCBTdGVwQ29uc3RyYWludCkgOiBudWxsO1xuICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjLnN0ZXA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjb25zdHJhaW50LCByYXdWYWx1ZSkge1xuICAgICAgICBjb25zdCBzYyA9IGNvbnN0cmFpbnQgJiYgZmluZENvbnN0cmFpbnQoY29uc3RyYWludCwgU3RlcENvbnN0cmFpbnQpO1xuICAgICAgICBpZiAoc2MpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXREZWNpbWFsRGlnaXRzKHNjLnN0ZXApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLm1heChnZXREZWNpbWFsRGlnaXRzKHJhd1ZhbHVlKSwgMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3Qgc3RlcCA9IGZpbmRTdGVwKGNvbnN0cmFpbnQpO1xuICAgICAgICByZXR1cm4gc3RlcCAhPT0gbnVsbCAmJiBzdGVwICE9PSB2b2lkIDAgPyBzdGVwIDogMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGNvbnN0cmFpbnQsIHJhd1ZhbHVlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc2MgPSBjb25zdHJhaW50ICYmIGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIFN0ZXBDb25zdHJhaW50KTtcbiAgICAgICAgY29uc3QgYmFzZSA9IE1hdGguYWJzKChfYSA9IHNjID09PSBudWxsIHx8IHNjID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzYy5zdGVwKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByYXdWYWx1ZSk7XG4gICAgICAgIHJldHVybiBiYXNlID09PSAwID8gMC4xIDogTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2cxMChiYXNlKSkgLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZCA9IENsYXNzTmFtZSgnY2tiJyk7XG4gICAgY2xhc3MgQ2hlY2tib3hWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgICAgICAgICAgIGxhYmVsRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRkKCdsJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRkKCdpJykpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLnR5cGUgPSAnY2hlY2tib3gnO1xuICAgICAgICAgICAgbGFiZWxFbGVtLmFwcGVuZENoaWxkKGlucHV0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudCA9IGlucHV0RWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKHRoaXMuaW5wdXRFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgd3JhcHBlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZCgndycpKTtcbiAgICAgICAgICAgIGxhYmVsRWxlbS5hcHBlbmRDaGlsZCh3cmFwcGVyRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBtYXJrRWxlbSA9IGNyZWF0ZVN2Z0ljb25FbGVtZW50KGRvYywgJ2NoZWNrJyk7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbS5hcHBlbmRDaGlsZChtYXJrRWxlbSk7XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmNoZWNrZWQgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBDaGVja2JveENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlXyA9IHRoaXMub25JbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ2hlY2tib3hWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbklucHV0Q2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25JbnB1dENoYW5nZV8oZSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gaW5wdXRFbGVtLmNoZWNrZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDUocGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gW107XG4gICAgICAgIGNvbnN0IGxjID0gY3JlYXRlTGlzdENvbnN0cmFpbnQocGFyYW1zLm9wdGlvbnMpO1xuICAgICAgICBpZiAobGMpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGNvbnN0IEJvb2xlYW5JbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1ib29sJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlTGlzdE9wdGlvbnMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBib29sRnJvbVVua25vd24sXG4gICAgICAgICAgICBjb25zdHJhaW50OiAoYXJncykgPT4gY3JlYXRlQ29uc3RyYWludCQ1KGFyZ3MucGFyYW1zKSxcbiAgICAgICAgICAgIHdyaXRlcjogKF9hcmdzKSA9PiB3cml0ZVByaW1pdGl2ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGFyZ3MuZG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgaWYgKGMgJiYgZmluZENvbnN0cmFpbnQoYywgTGlzdENvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXN0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogKF9hID0gZmluZExpc3RJdGVtcyhjKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrYm94Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGFzc05hbWUkYyA9IENsYXNzTmFtZSgnY29sJyk7XG4gICAgY2xhc3MgQ29sb3JWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRjKCkpO1xuICAgICAgICAgICAgY29uZmlnLmZvbGRhYmxlLmJpbmRFeHBhbmRlZENsYXNzKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lJGModW5kZWZpbmVkLCAnZXhwYW5kZWQnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAoY29uZmlnLmZvbGRhYmxlLCAnY29tcGxldGVkJywgdmFsdWVUb0NsYXNzTmFtZSh0aGlzLmVsZW1lbnQsIGNsYXNzTmFtZSRjKHVuZGVmaW5lZCwgJ2NwbCcpKSk7XG4gICAgICAgICAgICBjb25zdCBoZWFkRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGMoJ2gnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaGVhZEVsZW0pO1xuICAgICAgICAgICAgY29uc3Qgc3dhdGNoRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHN3YXRjaEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYygncycpKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmFwcGVuZENoaWxkKHN3YXRjaEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5zd2F0Y2hFbGVtZW50ID0gc3dhdGNoRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGV4dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYygndCcpKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmFwcGVuZENoaWxkKHRleHRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudGV4dEVsZW1lbnQgPSB0ZXh0RWxlbTtcbiAgICAgICAgICAgIGlmIChjb25maWcucGlja2VyTGF5b3V0ID09PSAnaW5saW5lJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpY2tlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgcGlja2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRjKCdwJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChwaWNrZXJFbGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckVsZW1lbnQgPSBwaWNrZXJFbGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJnYlRvSHNsKHIsIGcsIGIpIHtcbiAgICAgICAgY29uc3QgcnAgPSBjb25zdHJhaW5SYW5nZShyIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgZ3AgPSBjb25zdHJhaW5SYW5nZShnIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgYnAgPSBjb25zdHJhaW5SYW5nZShiIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgY21heCA9IE1hdGgubWF4KHJwLCBncCwgYnApO1xuICAgICAgICBjb25zdCBjbWluID0gTWF0aC5taW4ocnAsIGdwLCBicCk7XG4gICAgICAgIGNvbnN0IGMgPSBjbWF4IC0gY21pbjtcbiAgICAgICAgbGV0IGggPSAwO1xuICAgICAgICBsZXQgcyA9IDA7XG4gICAgICAgIGNvbnN0IGwgPSAoY21pbiArIGNtYXgpIC8gMjtcbiAgICAgICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgICAgIHMgPSBjIC8gKDEgLSBNYXRoLmFicyhjbWF4ICsgY21pbiAtIDEpKTtcbiAgICAgICAgICAgIGlmIChycCA9PT0gY21heCkge1xuICAgICAgICAgICAgICAgIGggPSAoZ3AgLSBicCkgLyBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZ3AgPT09IGNtYXgpIHtcbiAgICAgICAgICAgICAgICBoID0gMiArIChicCAtIHJwKSAvIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoID0gNCArIChycCAtIGdwKSAvIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoID0gaCAvIDYgKyAoaCA8IDAgPyAxIDogMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtoICogMzYwLCBzICogMTAwLCBsICogMTAwXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHNsVG9SZ2IoaCwgcywgbCkge1xuICAgICAgICBjb25zdCBocCA9ICgoaCAlIDM2MCkgKyAzNjApICUgMzYwO1xuICAgICAgICBjb25zdCBzcCA9IGNvbnN0cmFpblJhbmdlKHMgLyAxMDAsIDAsIDEpO1xuICAgICAgICBjb25zdCBscCA9IGNvbnN0cmFpblJhbmdlKGwgLyAxMDAsIDAsIDEpO1xuICAgICAgICBjb25zdCBjID0gKDEgLSBNYXRoLmFicygyICogbHAgLSAxKSkgKiBzcDtcbiAgICAgICAgY29uc3QgeCA9IGMgKiAoMSAtIE1hdGguYWJzKCgoaHAgLyA2MCkgJSAyKSAtIDEpKTtcbiAgICAgICAgY29uc3QgbSA9IGxwIC0gYyAvIDI7XG4gICAgICAgIGxldCBycCwgZ3AsIGJwO1xuICAgICAgICBpZiAoaHAgPj0gMCAmJiBocCA8IDYwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbYywgeCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gNjAgJiYgaHAgPCAxMjApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFt4LCBjLCAwXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAxMjAgJiYgaHAgPCAxODApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFswLCBjLCB4XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAxODAgJiYgaHAgPCAyNDApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFswLCB4LCBjXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAyNDAgJiYgaHAgPCAzMDApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFt4LCAwLCBjXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFtjLCAwLCB4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWyhycCArIG0pICogMjU1LCAoZ3AgKyBtKSAqIDI1NSwgKGJwICsgbSkgKiAyNTVdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZ2JUb0hzdihyLCBnLCBiKSB7XG4gICAgICAgIGNvbnN0IHJwID0gY29uc3RyYWluUmFuZ2UociAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGdwID0gY29uc3RyYWluUmFuZ2UoZyAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGJwID0gY29uc3RyYWluUmFuZ2UoYiAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGNtYXggPSBNYXRoLm1heChycCwgZ3AsIGJwKTtcbiAgICAgICAgY29uc3QgY21pbiA9IE1hdGgubWluKHJwLCBncCwgYnApO1xuICAgICAgICBjb25zdCBkID0gY21heCAtIGNtaW47XG4gICAgICAgIGxldCBoO1xuICAgICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICAgICAgaCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY21heCA9PT0gcnApIHtcbiAgICAgICAgICAgIGggPSA2MCAqICgoKCgoZ3AgLSBicCkgLyBkKSAlIDYpICsgNikgJSA2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjbWF4ID09PSBncCkge1xuICAgICAgICAgICAgaCA9IDYwICogKChicCAtIHJwKSAvIGQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGggPSA2MCAqICgocnAgLSBncCkgLyBkICsgNCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcyA9IGNtYXggPT09IDAgPyAwIDogZCAvIGNtYXg7XG4gICAgICAgIGNvbnN0IHYgPSBjbWF4O1xuICAgICAgICByZXR1cm4gW2gsIHMgKiAxMDAsIHYgKiAxMDBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoc3ZUb1JnYihoLCBzLCB2KSB7XG4gICAgICAgIGNvbnN0IGhwID0gbG9vcFJhbmdlKGgsIDM2MCk7XG4gICAgICAgIGNvbnN0IHNwID0gY29uc3RyYWluUmFuZ2UocyAvIDEwMCwgMCwgMSk7XG4gICAgICAgIGNvbnN0IHZwID0gY29uc3RyYWluUmFuZ2UodiAvIDEwMCwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGMgPSB2cCAqIHNwO1xuICAgICAgICBjb25zdCB4ID0gYyAqICgxIC0gTWF0aC5hYnMoKChocCAvIDYwKSAlIDIpIC0gMSkpO1xuICAgICAgICBjb25zdCBtID0gdnAgLSBjO1xuICAgICAgICBsZXQgcnAsIGdwLCBicDtcbiAgICAgICAgaWYgKGhwID49IDAgJiYgaHAgPCA2MCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gW2MsIHgsIDBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhwID49IDYwICYmIGhwIDwgMTIwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbeCwgYywgMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMTIwICYmIGhwIDwgMTgwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbMCwgYywgeF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMTgwICYmIGhwIDwgMjQwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbMCwgeCwgY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMjQwICYmIGhwIDwgMzAwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbeCwgMCwgY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbYywgMCwgeF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsocnAgKyBtKSAqIDI1NSwgKGdwICsgbSkgKiAyNTUsIChicCArIG0pICogMjU1XTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHNsVG9Ic3YoaCwgcywgbCkge1xuICAgICAgICBjb25zdCBzZCA9IGwgKyAocyAqICgxMDAgLSBNYXRoLmFicygyICogbCAtIDEwMCkpKSAvICgyICogMTAwKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGgsXG4gICAgICAgICAgICBzZCAhPT0gMCA/IChzICogKDEwMCAtIE1hdGguYWJzKDIgKiBsIC0gMTAwKSkpIC8gc2QgOiAwLFxuICAgICAgICAgICAgbCArIChzICogKDEwMCAtIE1hdGguYWJzKDIgKiBsIC0gMTAwKSkpIC8gKDIgKiAxMDApLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoc3ZUb0hzbChoLCBzLCB2KSB7XG4gICAgICAgIGNvbnN0IHNkID0gMTAwIC0gTWF0aC5hYnMoKHYgKiAoMjAwIC0gcykpIC8gMTAwIC0gMTAwKTtcbiAgICAgICAgcmV0dXJuIFtoLCBzZCAhPT0gMCA/IChzICogdikgLyBzZCA6IDAsICh2ICogKDIwMCAtIHMpKSAvICgyICogMTAwKV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFscGhhQ29tcG9uZW50KGNvbXBzKSB7XG4gICAgICAgIHJldHVybiBbY29tcHNbMF0sIGNvbXBzWzFdLCBjb21wc1syXV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGVuZEFscGhhQ29tcG9uZW50KGNvbXBzLCBhbHBoYSkge1xuICAgICAgICByZXR1cm4gW2NvbXBzWzBdLCBjb21wc1sxXSwgY29tcHNbMl0sIGFscGhhXTtcbiAgICB9XG4gICAgY29uc3QgTU9ERV9DT05WRVJURVJfTUFQID0ge1xuICAgICAgICBoc2w6IHtcbiAgICAgICAgICAgIGhzbDogKGgsIHMsIGwpID0+IFtoLCBzLCBsXSxcbiAgICAgICAgICAgIGhzdjogaHNsVG9Ic3YsXG4gICAgICAgICAgICByZ2I6IGhzbFRvUmdiLFxuICAgICAgICB9LFxuICAgICAgICBoc3Y6IHtcbiAgICAgICAgICAgIGhzbDogaHN2VG9Ic2wsXG4gICAgICAgICAgICBoc3Y6IChoLCBzLCB2KSA9PiBbaCwgcywgdl0sXG4gICAgICAgICAgICByZ2I6IGhzdlRvUmdiLFxuICAgICAgICB9LFxuICAgICAgICByZ2I6IHtcbiAgICAgICAgICAgIGhzbDogcmdiVG9Ic2wsXG4gICAgICAgICAgICBoc3Y6IHJnYlRvSHN2LFxuICAgICAgICAgICAgcmdiOiAociwgZywgYikgPT4gW3IsIGcsIGJdLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gY29udmVydENvbG9yTW9kZShjb21wb25lbnRzLCBmcm9tTW9kZSwgdG9Nb2RlKSB7XG4gICAgICAgIHJldHVybiBNT0RFX0NPTlZFUlRFUl9NQVBbZnJvbU1vZGVdW3RvTW9kZV0oLi4uY29tcG9uZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgQ09OU1RSQUlOVF9NQVAgPSB7XG4gICAgICAgIGhzbDogKGNvbXBzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGxvb3BSYW5nZShjb21wc1swXSwgMzYwKSxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW5SYW5nZShjb21wc1sxXSwgMCwgMTAwKSxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW5SYW5nZShjb21wc1syXSwgMCwgMTAwKSxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW5SYW5nZSgoX2EgPSBjb21wc1szXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMSwgMCwgMSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9LFxuICAgICAgICBoc3Y6IChjb21wcykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBsb29wUmFuZ2UoY29tcHNbMF0sIDM2MCksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMV0sIDAsIDEwMCksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMl0sIDAsIDEwMCksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoKF9hID0gY29tcHNbM10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDEsIDAsIDEpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICAgICAgcmdiOiAoY29tcHMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMF0sIDAsIDI1NSksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMV0sIDAsIDI1NSksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMl0sIDAsIDI1NSksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoKF9hID0gY29tcHNbM10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDEsIDAsIDEpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IGlzRW1wdHkob2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXkgaW4gb2JqICYmIHR5cGVvZiBvYmpba2V5XSA9PT0gJ251bWJlcic7XG4gICAgfVxuICAgIGNsYXNzIENvbG9yIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29tcHMsIG1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZV8gPSBtb2RlO1xuICAgICAgICAgICAgdGhpcy5jb21wc18gPSBDT05TVFJBSU5UX01BUFttb2RlXShjb21wcyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGJsYWNrKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbMCwgMCwgMF0sICdyZ2InKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChvYmopIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gJ2EnIGluIG9iaiA/IFtvYmouciwgb2JqLmcsIG9iai5iLCBvYmouYV0gOiBbb2JqLnIsIG9iai5nLCBvYmouYl07XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGNvbXBzLCAncmdiJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIHRvUmdiYU9iamVjdChjb2xvcikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbG9yLnRvUmdiYU9iamVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc1JnYkNvbG9yT2JqZWN0KG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIChpc1JnYkNvbG9yQ29tcG9uZW50KG9iaiwgJ3InKSAmJlxuICAgICAgICAgICAgICAgIGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCAnZycpICYmXG4gICAgICAgICAgICAgICAgaXNSZ2JDb2xvckNvbXBvbmVudChvYmosICdiJykpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc1JnYmFDb2xvck9iamVjdChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzUmdiQ29sb3JPYmplY3Qob2JqKSAmJiBpc1JnYkNvbG9yQ29tcG9uZW50KG9iaiwgJ2EnKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNDb2xvck9iamVjdChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzUmdiQ29sb3JPYmplY3Qob2JqKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZXF1YWxzKHYxLCB2Mikge1xuICAgICAgICAgICAgaWYgKHYxLm1vZGVfICE9PSB2Mi5tb2RlXykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBzMSA9IHYxLmNvbXBzXztcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzMiA9IHYyLmNvbXBzXztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcHMxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBzMVtpXSAhPT0gY29tcHMyW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbW9kZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVfO1xuICAgICAgICB9XG4gICAgICAgIGdldENvbXBvbmVudHMob3B0X21vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBlbmRBbHBoYUNvbXBvbmVudChjb252ZXJ0Q29sb3JNb2RlKHJlbW92ZUFscGhhQ29tcG9uZW50KHRoaXMuY29tcHNfKSwgdGhpcy5tb2RlXywgb3B0X21vZGUgfHwgdGhpcy5tb2RlXyksIHRoaXMuY29tcHNfWzNdKTtcbiAgICAgICAgfVxuICAgICAgICB0b1JnYmFPYmplY3QoKSB7XG4gICAgICAgICAgICBjb25zdCByZ2JDb21wcyA9IHRoaXMuZ2V0Q29tcG9uZW50cygncmdiJyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHI6IHJnYkNvbXBzWzBdLFxuICAgICAgICAgICAgICAgIGc6IHJnYkNvbXBzWzFdLFxuICAgICAgICAgICAgICAgIGI6IHJnYkNvbXBzWzJdLFxuICAgICAgICAgICAgICAgIGE6IHJnYkNvbXBzWzNdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRiID0gQ2xhc3NOYW1lKCdjb2xwJyk7XG4gICAgY2xhc3MgQ29sb3JQaWNrZXJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuYWxwaGFWaWV3c18gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoKSk7XG4gICAgICAgICAgICBjb25zdCBoc3ZFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaHN2RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCdoc3YnKSk7XG4gICAgICAgICAgICBjb25zdCBzdkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzdkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignc3YnKSk7XG4gICAgICAgICAgICB0aGlzLnN2UGFsZXR0ZVZpZXdfID0gY29uZmlnLnN2UGFsZXR0ZVZpZXc7XG4gICAgICAgICAgICBzdkVsZW0uYXBwZW5kQ2hpbGQodGhpcy5zdlBhbGV0dGVWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgICAgIGhzdkVsZW0uYXBwZW5kQ2hpbGQoc3ZFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGhFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignaCcpKTtcbiAgICAgICAgICAgIHRoaXMuaFBhbGV0dGVWaWV3XyA9IGNvbmZpZy5oUGFsZXR0ZVZpZXc7XG4gICAgICAgICAgICBoRWxlbS5hcHBlbmRDaGlsZCh0aGlzLmhQYWxldHRlVmlld18uZWxlbWVudCk7XG4gICAgICAgICAgICBoc3ZFbGVtLmFwcGVuZENoaWxkKGhFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChoc3ZFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHJnYkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICByZ2JFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoJ3JnYicpKTtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdfID0gY29uZmlnLnRleHRWaWV3O1xuICAgICAgICAgICAgcmdiRWxlbS5hcHBlbmRDaGlsZCh0aGlzLnRleHRWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChyZ2JFbGVtKTtcbiAgICAgICAgICAgIGlmIChjb25maWcuYWxwaGFWaWV3cykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWxwaGFWaWV3c18gPSB7XG4gICAgICAgICAgICAgICAgICAgIHBhbGV0dGU6IGNvbmZpZy5hbHBoYVZpZXdzLnBhbGV0dGUsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNvbmZpZy5hbHBoYVZpZXdzLnRleHQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBhRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBhRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCdhJykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBhcEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignYXAnKSk7XG4gICAgICAgICAgICAgICAgYXBFbGVtLmFwcGVuZENoaWxkKHRoaXMuYWxwaGFWaWV3c18ucGFsZXR0ZS5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBhRWxlbS5hcHBlbmRDaGlsZChhcEVsZW0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBhdEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignYXQnKSk7XG4gICAgICAgICAgICAgICAgYXRFbGVtLmFwcGVuZENoaWxkKHRoaXMuYWxwaGFWaWV3c18udGV4dC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBhRWxlbS5hcHBlbmRDaGlsZChhdEVsZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChhRWxlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGFsbEZvY3VzYWJsZUVsZW1lbnRzKCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbXMgPSBbXG4gICAgICAgICAgICAgICAgdGhpcy5zdlBhbGV0dGVWaWV3Xy5lbGVtZW50LFxuICAgICAgICAgICAgICAgIHRoaXMuaFBhbGV0dGVWaWV3Xy5lbGVtZW50LFxuICAgICAgICAgICAgICAgIHRoaXMudGV4dFZpZXdfLm1vZGVTZWxlY3RFbGVtZW50LFxuICAgICAgICAgICAgICAgIC4uLnRoaXMudGV4dFZpZXdfLnRleHRWaWV3cy5tYXAoKHYpID0+IHYuaW5wdXRFbGVtZW50KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAodGhpcy5hbHBoYVZpZXdzXykge1xuICAgICAgICAgICAgICAgIGVsZW1zLnB1c2godGhpcy5hbHBoYVZpZXdzXy5wYWxldHRlLmVsZW1lbnQsIHRoaXMuYWxwaGFWaWV3c18udGV4dC5pbnB1dEVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW1zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VDb2xvcklucHV0UGFyYW1zKHBhcmFtcykge1xuICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgYWxwaGE6IHAub3B0aW9uYWwuYm9vbGVhbixcbiAgICAgICAgICAgIGV4cGFuZGVkOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICBwaWNrZXI6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUGlja2VyTGF5b3V0KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEJhc2VTdGVwRm9yQ29sb3IoZm9yQWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIGZvckFscGhhID8gMC4xIDogMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZSh0ZXh0LCBtYXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBtID0gdGV4dC5tYXRjaCgvXiguKyklJC8pO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihwYXJzZUZsb2F0KHRleHQpLCBtYXhWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGgubWluKHBhcnNlRmxvYXQobVsxXSkgKiAwLjAxICogbWF4VmFsdWUsIG1heFZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgQU5HTEVfVE9fREVHX01BUCA9IHtcbiAgICAgICAgZGVnOiAoYW5nbGUpID0+IGFuZ2xlLFxuICAgICAgICBncmFkOiAoYW5nbGUpID0+IChhbmdsZSAqIDM2MCkgLyA0MDAsXG4gICAgICAgIHJhZDogKGFuZ2xlKSA9PiAoYW5nbGUgKiAzNjApIC8gKDIgKiBNYXRoLlBJKSxcbiAgICAgICAgdHVybjogKGFuZ2xlKSA9PiBhbmdsZSAqIDM2MCxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBhcnNlQ3NzTnVtYmVyT3JBbmdsZSh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9eKFswLTkuXSs/KShkZWd8Z3JhZHxyYWR8dHVybikkLyk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW5nbGUgPSBwYXJzZUZsb2F0KG1bMV0pO1xuICAgICAgICBjb25zdCB1bml0ID0gbVsyXTtcbiAgICAgICAgcmV0dXJuIEFOR0xFX1RPX0RFR19NQVBbdW5pdF0oYW5nbGUpO1xuICAgIH1cbiAgICBjb25zdCBOT1RBVElPTl9UT19QQVJTRVJfTUFQID0ge1xuICAgICAgICAnZnVuYy5yZ2InOiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15yZ2JcXChcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsxXSwgMjU1KSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzJdLCAyNTUpLFxuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bM10sIDI1NSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGlzTmFOKGNvbXBzWzBdKSB8fCBpc05hTihjb21wc1sxXSkgfHwgaXNOYU4oY29tcHNbMl0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGNvbXBzLCAncmdiJyk7XG4gICAgICAgIH0sXG4gICAgICAgICdmdW5jLnJnYmEnOiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15yZ2JhXFwoXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsxXSwgMjU1KSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzJdLCAyNTUpLFxuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bM10sIDI1NSksXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVs0XSwgMSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGlzTmFOKGNvbXBzWzBdKSB8fFxuICAgICAgICAgICAgICAgIGlzTmFOKGNvbXBzWzFdKSB8fFxuICAgICAgICAgICAgICAgIGlzTmFOKGNvbXBzWzJdKSB8fFxuICAgICAgICAgICAgICAgIGlzTmFOKGNvbXBzWzNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihjb21wcywgJ3JnYicpO1xuICAgICAgICB9LFxuICAgICAgICAnZnVuYy5oc2wnOiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15oc2xcXChcXHMqKFswLTlBLUZhLWYuXSsoPzpkZWd8Z3JhZHxyYWR8dHVybik/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqXFwpJC8pO1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wcyA9IFtcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yQW5nbGUobVsxXSksXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsyXSwgMTAwKSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzNdLCAxMDApLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChpc05hTihjb21wc1swXSkgfHwgaXNOYU4oY29tcHNbMV0pIHx8IGlzTmFOKGNvbXBzWzJdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihjb21wcywgJ2hzbCcpO1xuICAgICAgICB9LFxuICAgICAgICAnZnVuYy5oc2xhJzogKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9eaHNsYVxcKFxccyooWzAtOUEtRmEtZi5dKyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPckFuZ2xlKG1bMV0pLFxuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bMl0sIDEwMCksXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVszXSwgMTAwKSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzRdLCAxKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoaXNOYU4oY29tcHNbMF0pIHx8XG4gICAgICAgICAgICAgICAgaXNOYU4oY29tcHNbMV0pIHx8XG4gICAgICAgICAgICAgICAgaXNOYU4oY29tcHNbMl0pIHx8XG4gICAgICAgICAgICAgICAgaXNOYU4oY29tcHNbM10pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGNvbXBzLCAnaHNsJyk7XG4gICAgICAgIH0sXG4gICAgICAgICdoZXgucmdiJzogKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1SZ2IgPSB0ZXh0Lm1hdGNoKC9eIyhbMC05QS1GYS1mXSkoWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKSQvKTtcbiAgICAgICAgICAgIGlmIChtUmdiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMV0gKyBtUmdiWzFdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMl0gKyBtUmdiWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbM10gKyBtUmdiWzNdLCAxNiksXG4gICAgICAgICAgICAgICAgXSwgJ3JnYicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbVJyZ2diYiA9IHRleHQubWF0Y2goL14oPzojfDB4KShbMC05QS1GYS1mXXsyfSkoWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KSQvKTtcbiAgICAgICAgICAgIGlmIChtUnJnZ2JiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbMV0sIDE2KSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlsyXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzNdLCAxNiksXG4gICAgICAgICAgICAgICAgXSwgJ3JnYicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgICdoZXgucmdiYSc6ICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtUmdiID0gdGV4dC5tYXRjaCgvXiM/KFswLTlBLUZhLWZdKShbMC05QS1GYS1mXSkoWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKSQvKTtcbiAgICAgICAgICAgIGlmIChtUmdiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMV0gKyBtUmdiWzFdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMl0gKyBtUmdiWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbM10gKyBtUmdiWzNdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIG1hcFJhbmdlKHBhcnNlSW50KG1SZ2JbNF0gKyBtUmdiWzRdLCAxNiksIDAsIDI1NSwgMCwgMSksXG4gICAgICAgICAgICAgICAgXSwgJ3JnYicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbVJyZ2diYiA9IHRleHQubWF0Y2goL14oPzojfDB4KT8oWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KShbMC05QS1GYS1mXXsyfSkoWzAtOUEtRmEtZl17Mn0pJC8pO1xuICAgICAgICAgICAgaWYgKG1ScmdnYmIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKFtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlsxXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbM10sIDE2KSxcbiAgICAgICAgICAgICAgICAgICAgbWFwUmFuZ2UocGFyc2VJbnQobVJyZ2diYls0XSwgMTYpLCAwLCAyNTUsIDAsIDEpLFxuICAgICAgICAgICAgICAgIF0sICdyZ2InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0Q29sb3JOb3RhdGlvbih0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG5vdGF0aW9ucyA9IE9iamVjdC5rZXlzKE5PVEFUSU9OX1RPX1BBUlNFUl9NQVApO1xuICAgICAgICByZXR1cm4gbm90YXRpb25zLnJlZHVjZSgocmVzdWx0LCBub3RhdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdWJwYXJzZXIgPSBOT1RBVElPTl9UT19QQVJTRVJfTUFQW25vdGF0aW9uXTtcbiAgICAgICAgICAgIHJldHVybiBzdWJwYXJzZXIodGV4dCkgPyBub3RhdGlvbiA6IG51bGw7XG4gICAgICAgIH0sIG51bGwpO1xuICAgIH1cbiAgICBjb25zdCBDb21wb3NpdGVDb2xvclBhcnNlciA9ICh0ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdGF0aW9uID0gZ2V0Q29sb3JOb3RhdGlvbih0ZXh0KTtcbiAgICAgICAgcmV0dXJuIG5vdGF0aW9uID8gTk9UQVRJT05fVE9fUEFSU0VSX01BUFtub3RhdGlvbl0odGV4dCkgOiBudWxsO1xuICAgIH07XG4gICAgZnVuY3Rpb24gaGFzQWxwaGFDb21wb25lbnQobm90YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIChub3RhdGlvbiA9PT0gJ2Z1bmMuaHNsYScgfHxcbiAgICAgICAgICAgIG5vdGF0aW9uID09PSAnZnVuYy5yZ2JhJyB8fFxuICAgICAgICAgICAgbm90YXRpb24gPT09ICdoZXgucmdiYScpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvckZyb21TdHJpbmcodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IGN2ID0gQ29tcG9zaXRlQ29sb3JQYXJzZXIodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGN2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN2O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBDb2xvci5ibGFjaygpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB6ZXJvZmlsbChjb21wKSB7XG4gICAgICAgIGNvbnN0IGhleCA9IGNvbnN0cmFpblJhbmdlKE1hdGguZmxvb3IoY29tcCksIDAsIDI1NSkudG9TdHJpbmcoMTYpO1xuICAgICAgICByZXR1cm4gaGV4Lmxlbmd0aCA9PT0gMSA/IGAwJHtoZXh9YCA6IGhleDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb0hleFJnYlN0cmluZyh2YWx1ZSwgcHJlZml4ID0gJyMnKSB7XG4gICAgICAgIGNvbnN0IGhleGVzID0gcmVtb3ZlQWxwaGFDb21wb25lbnQodmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJykpXG4gICAgICAgICAgICAubWFwKHplcm9maWxsKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7aGV4ZXN9YDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb0hleFJnYmFTdHJpbmcodmFsdWUsIHByZWZpeCA9ICcjJykge1xuICAgICAgICBjb25zdCByZ2JhQ29tcHMgPSB2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKTtcbiAgICAgICAgY29uc3QgaGV4ZXMgPSBbcmdiYUNvbXBzWzBdLCByZ2JhQ29tcHNbMV0sIHJnYmFDb21wc1syXSwgcmdiYUNvbXBzWzNdICogMjU1XVxuICAgICAgICAgICAgLm1hcCh6ZXJvZmlsbClcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke2hleGVzfWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsUmdiU3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGNyZWF0ZU51bWJlckZvcm1hdHRlcigwKTtcbiAgICAgICAgY29uc3QgY29tcHMgPSByZW1vdmVBbHBoYUNvbXBvbmVudCh2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKSkubWFwKChjb21wKSA9PiBmb3JtYXR0ZXIoY29tcCkpO1xuICAgICAgICByZXR1cm4gYHJnYigke2NvbXBzLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsUmdiYVN0cmluZyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBhRm9ybWF0dGVyID0gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDIpO1xuICAgICAgICBjb25zdCByZ2JGb3JtYXR0ZXIgPSBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMCk7XG4gICAgICAgIGNvbnN0IGNvbXBzID0gdmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJykubWFwKChjb21wLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gaW5kZXggPT09IDMgPyBhRm9ybWF0dGVyIDogcmdiRm9ybWF0dGVyO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlcihjb21wKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBgcmdiYSgke2NvbXBzLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsSHNsU3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlcnMgPSBbXG4gICAgICAgICAgICBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMCksXG4gICAgICAgICAgICBmb3JtYXRQZXJjZW50YWdlLFxuICAgICAgICAgICAgZm9ybWF0UGVyY2VudGFnZSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgY29tcHMgPSByZW1vdmVBbHBoYUNvbXBvbmVudCh2YWx1ZS5nZXRDb21wb25lbnRzKCdoc2wnKSkubWFwKChjb21wLCBpbmRleCkgPT4gZm9ybWF0dGVyc1tpbmRleF0oY29tcCkpO1xuICAgICAgICByZXR1cm4gYGhzbCgke2NvbXBzLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsSHNsYVN0cmluZyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXJzID0gW1xuICAgICAgICAgICAgY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDApLFxuICAgICAgICAgICAgZm9ybWF0UGVyY2VudGFnZSxcbiAgICAgICAgICAgIGZvcm1hdFBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMiksXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGNvbXBzID0gdmFsdWVcbiAgICAgICAgICAgIC5nZXRDb21wb25lbnRzKCdoc2wnKVxuICAgICAgICAgICAgLm1hcCgoY29tcCwgaW5kZXgpID0+IGZvcm1hdHRlcnNbaW5kZXhdKGNvbXApKTtcbiAgICAgICAgcmV0dXJuIGBoc2xhKCR7Y29tcHMuam9pbignLCAnKX0pYDtcbiAgICB9XG4gICAgY29uc3QgTk9UQVRJT05fVE9fU1RSSU5HSUZJRVJfTUFQID0ge1xuICAgICAgICAnZnVuYy5oc2wnOiBjb2xvclRvRnVuY3Rpb25hbEhzbFN0cmluZyxcbiAgICAgICAgJ2Z1bmMuaHNsYSc6IGNvbG9yVG9GdW5jdGlvbmFsSHNsYVN0cmluZyxcbiAgICAgICAgJ2Z1bmMucmdiJzogY29sb3JUb0Z1bmN0aW9uYWxSZ2JTdHJpbmcsXG4gICAgICAgICdmdW5jLnJnYmEnOiBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcsXG4gICAgICAgICdoZXgucmdiJzogY29sb3JUb0hleFJnYlN0cmluZyxcbiAgICAgICAgJ2hleC5yZ2JhJzogY29sb3JUb0hleFJnYmFTdHJpbmcsXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRDb2xvclN0cmluZ2lmaWVyKG5vdGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBOT1RBVElPTl9UT19TVFJJTkdJRklFUl9NQVBbbm90YXRpb25dO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRhID0gQ2xhc3NOYW1lKCdhcGwnKTtcbiAgICBjbGFzcyBBUGFsZXR0ZVZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGEoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRUYWJJbmRleCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgYmFyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGJhckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYSgnYicpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChiYXJFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbG9yRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRhKCdjJykpO1xuICAgICAgICAgICAgYmFyRWxlbS5hcHBlbmRDaGlsZChjb2xvckVsZW0pO1xuICAgICAgICAgICAgdGhpcy5jb2xvckVsZW1fID0gY29sb3JFbGVtO1xuICAgICAgICAgICAgY29uc3QgbWFya2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYSgnbScpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8gPSBtYXJrZXJFbGVtO1xuICAgICAgICAgICAgY29uc3QgcHJldmlld0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBwcmV2aWV3RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRhKCdwJykpO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5hcHBlbmRDaGlsZChwcmV2aWV3RWxlbSk7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdFbGVtXyA9IHByZXZpZXdFbGVtO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcmdiYUNvbXBzID0gYy5nZXRDb21wb25lbnRzKCdyZ2InKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRDb2xvciA9IG5ldyBDb2xvcihbcmdiYUNvbXBzWzBdLCByZ2JhQ29tcHNbMV0sIHJnYmFDb21wc1syXSwgMF0sICdyZ2InKTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0Q29sb3IgPSBuZXcgQ29sb3IoW3JnYmFDb21wc1swXSwgcmdiYUNvbXBzWzFdLCByZ2JhQ29tcHNbMl0sIDI1NV0sICdyZ2InKTtcbiAgICAgICAgICAgIGNvbnN0IGdyYWRpZW50Q29tcHMgPSBbXG4gICAgICAgICAgICAgICAgJ3RvIHJpZ2h0JyxcbiAgICAgICAgICAgICAgICBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcobGVmdENvbG9yKSxcbiAgICAgICAgICAgICAgICBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcocmlnaHRDb2xvciksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdGhpcy5jb2xvckVsZW1fLnN0eWxlLmJhY2tncm91bmQgPSBgbGluZWFyLWdyYWRpZW50KCR7Z3JhZGllbnRDb21wcy5qb2luKCcsJyl9KWA7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcoYyk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gbWFwUmFuZ2UocmdiYUNvbXBzWzNdLCAwLCAxLCAwLCAxMDApO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5sZWZ0ID0gYCR7bGVmdH0lYDtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQVBhbGV0dGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlEb3duXyA9IHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbktleVVwXyA9IHRoaXMub25LZXlVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93bl8gPSB0aGlzLm9uUG9pbnRlckRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmVfID0gdGhpcy5vblBvaW50ZXJNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBBUGFsZXR0ZVZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyTW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25LZXlVcF8pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVBvaW50ZXJFdmVudF8oZCwgb3B0cykge1xuICAgICAgICAgICAgaWYgKCFkLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWxwaGEgPSBkLnBvaW50LnggLyBkLmJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgW2gsIHMsIHZdID0gYy5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IENvbG9yKFtoLCBzLCB2LCBhbHBoYV0sICdoc3YnKSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bl8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlck1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbktleURvd25fKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleShnZXRCYXNlU3RlcEZvckNvbG9yKHRydWUpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbaCwgcywgdiwgYV0gPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2gsIHMsIHYsIGEgKyBzdGVwXSwgJ2hzdicpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleShnZXRCYXNlU3RlcEZvckNvbG9yKHRydWUpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ5ID0gQ2xhc3NOYW1lKCdjb2x0eHQnKTtcbiAgICBmdW5jdGlvbiBjcmVhdGVNb2RlU2VsZWN0RWxlbWVudChkb2MpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXG4gICAgICAgICAgICB7IHRleHQ6ICdSR0InLCB2YWx1ZTogJ3JnYicgfSxcbiAgICAgICAgICAgIHsgdGV4dDogJ0hTTCcsIHZhbHVlOiAnaHNsJyB9LFxuICAgICAgICAgICAgeyB0ZXh0OiAnSFNWJywgdmFsdWU6ICdoc3YnIH0sXG4gICAgICAgIF07XG4gICAgICAgIHNlbGVjdEVsZW0uYXBwZW5kQ2hpbGQoaXRlbXMucmVkdWNlKChmcmFnLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcHRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgICAgICAgb3B0RWxlbS50ZXh0Q29udGVudCA9IGl0ZW0udGV4dDtcbiAgICAgICAgICAgIG9wdEVsZW0udmFsdWUgPSBpdGVtLnZhbHVlO1xuICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChvcHRFbGVtKTtcbiAgICAgICAgICAgIHJldHVybiBmcmFnO1xuICAgICAgICB9LCBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKSk7XG4gICAgICAgIHJldHVybiBzZWxlY3RFbGVtO1xuICAgIH1cbiAgICBjbGFzcyBDb2xvclRleHRWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ5KCkpO1xuICAgICAgICAgICAgY29uc3QgbW9kZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtb2RlRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ5KCdtJykpO1xuICAgICAgICAgICAgdGhpcy5tb2RlRWxlbV8gPSBjcmVhdGVNb2RlU2VsZWN0RWxlbWVudChkb2MpO1xuICAgICAgICAgICAgdGhpcy5tb2RlRWxlbV8uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgnbXMnKSk7XG4gICAgICAgICAgICBtb2RlRWxlbS5hcHBlbmRDaGlsZCh0aGlzLm1vZGVTZWxlY3RFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVNYXJrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbW9kZU1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgnbW0nKSk7XG4gICAgICAgICAgICBtb2RlTWFya2VyRWxlbS5hcHBlbmRDaGlsZChjcmVhdGVTdmdJY29uRWxlbWVudChkb2MsICdkcm9wZG93bicpKTtcbiAgICAgICAgICAgIG1vZGVFbGVtLmFwcGVuZENoaWxkKG1vZGVNYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtb2RlRWxlbSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0c0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXh0c0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgndycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0c0VsZW0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0c0VsZW1fID0gdGV4dHNFbGVtO1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld3NfID0gY29uZmlnLnRleHRWaWV3cztcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUZXh0Vmlld3NfKCk7XG4gICAgICAgICAgICBiaW5kVmFsdWUoY29uZmlnLmNvbG9yTW9kZSwgKG1vZGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVFbGVtXy52YWx1ZSA9IG1vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbW9kZVNlbGVjdEVsZW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlRWxlbV87XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRleHRWaWV3cygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRWaWV3c187XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHRleHRWaWV3cyh0ZXh0Vmlld3MpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdzXyA9IHRleHRWaWV3cztcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUZXh0Vmlld3NfKCk7XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHlUZXh0Vmlld3NfKCkge1xuICAgICAgICAgICAgcmVtb3ZlQ2hpbGRFbGVtZW50cyh0aGlzLnRleHRzRWxlbV8pO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3c18uZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGNvbXBFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDkoJ2MnKSk7XG4gICAgICAgICAgICAgICAgY29tcEVsZW0uYXBwZW5kQ2hpbGQodi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRzRWxlbV8uYXBwZW5kQ2hpbGQoY29tcEVsZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBGT1JNQVRURVIgPSBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMCk7XG4gICAgY29uc3QgTU9ERV9UT19DT05TVFJBSU5UX01BUCA9IHtcbiAgICAgICAgcmdiOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlQ29uc3RyYWludCh7IG1pbjogMCwgbWF4OiAyNTUgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhzbDogKGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXggPT09IDBcbiAgICAgICAgICAgICAgICA/IG5ldyBSYW5nZUNvbnN0cmFpbnQoeyBtaW46IDAsIG1heDogMzYwIH0pXG4gICAgICAgICAgICAgICAgOiBuZXcgUmFuZ2VDb25zdHJhaW50KHsgbWluOiAwLCBtYXg6IDEwMCB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgaHN2OiAoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpbmRleCA9PT0gMFxuICAgICAgICAgICAgICAgID8gbmV3IFJhbmdlQ29uc3RyYWludCh7IG1pbjogMCwgbWF4OiAzNjAgfSlcbiAgICAgICAgICAgICAgICA6IG5ldyBSYW5nZUNvbnN0cmFpbnQoeyBtaW46IDAsIG1heDogMTAwIH0pO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcihkb2MsIGNvbmZpZywgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgIGFycmF5UG9zaXRpb246IGluZGV4ID09PSAwID8gJ2ZzdCcgOiBpbmRleCA9PT0gMyAtIDEgPyAnbHN0JyA6ICdtaWQnLFxuICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpLFxuICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IDEsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBGT1JNQVRURVIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZSgwLCB7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludDogTU9ERV9UT19DT05TVFJBSU5UX01BUFtjb25maWcuY29sb3JNb2RlXShpbmRleCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsYXNzIENvbG9yVGV4dENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbk1vZGVTZWxlY3RDaGFuZ2VfID0gdGhpcy5vbk1vZGVTZWxlY3RDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnBhcnNlcl8gPSBjb25maWcucGFyc2VyO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuY29sb3JNb2RlID0gY3JlYXRlVmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZS5tb2RlKTtcbiAgICAgICAgICAgIHRoaXMuY2NzXyA9IHRoaXMuY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfKGRvYyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ29sb3JUZXh0Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBjb2xvck1vZGU6IHRoaXMuY29sb3JNb2RlLFxuICAgICAgICAgICAgICAgIHRleHRWaWV3czogW3RoaXMuY2NzX1swXS52aWV3LCB0aGlzLmNjc19bMV0udmlldywgdGhpcy5jY3NfWzJdLnZpZXddLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcubW9kZVNlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbk1vZGVTZWxlY3RDaGFuZ2VfKTtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVDb21wb25lbnRDb250cm9sbGVyc18oZG9jKSB7XG4gICAgICAgICAgICBjb25zdCBjYyA9IHtcbiAgICAgICAgICAgICAgICBjb2xvck1vZGU6IHRoaXMuY29sb3JNb2RlLnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogdGhpcy5wYXJzZXJfLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgY2NzID0gW1xuICAgICAgICAgICAgICAgIGNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXIoZG9jLCBjYywgMCksXG4gICAgICAgICAgICAgICAgY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcihkb2MsIGNjLCAxKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVDb21wb25lbnRDb250cm9sbGVyKGRvYywgY2MsIDIpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNjcy5mb3JFYWNoKChjcywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25uZWN0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5OiBjcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZDogKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwLnJhd1ZhbHVlLmdldENvbXBvbmVudHModGhpcy5jb2xvck1vZGUucmF3VmFsdWUpW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQ6IChwLCBzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwaWNrZWRNb2RlID0gdGhpcy5jb2xvck1vZGUucmF3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wcyA9IHAucmF3VmFsdWUuZ2V0Q29tcG9uZW50cyhwaWNrZWRNb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBzW2luZGV4XSA9IHMucmF3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGFwcGVuZEFscGhhQ29tcG9uZW50KHJlbW92ZUFscGhhQ29tcG9uZW50KGNvbXBzKSwgY29tcHNbM10pLCBwaWNrZWRNb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGNjcztcbiAgICAgICAgfVxuICAgICAgICBvbk1vZGVTZWxlY3RDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RFbGVtID0gZXYuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgIHRoaXMuY29sb3JNb2RlLnJhd1ZhbHVlID0gc2VsZWN0RWxlbS52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2NzXyA9IHRoaXMuY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfKHRoaXMudmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQpO1xuICAgICAgICAgICAgdGhpcy52aWV3LnRleHRWaWV3cyA9IFtcbiAgICAgICAgICAgICAgICB0aGlzLmNjc19bMF0udmlldyxcbiAgICAgICAgICAgICAgICB0aGlzLmNjc19bMV0udmlldyxcbiAgICAgICAgICAgICAgICB0aGlzLmNjc19bMl0udmlldyxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkOCA9IENsYXNzTmFtZSgnaHBsJyk7XG4gICAgY2xhc3MgSFBhbGV0dGVWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ4KCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kVGFiSW5kZXgodGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbG9yRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ4KCdjJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNvbG9yRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbWFya2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ4KCdtJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG1hcmtlckVsZW0pO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXyA9IG1hcmtlckVsZW07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbaF0gPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvclRvRnVuY3Rpb25hbFJnYlN0cmluZyhuZXcgQ29sb3IoW2gsIDEwMCwgMTAwXSwgJ2hzdicpKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBtYXBSYW5nZShoLCAwLCAzNjAsIDAsIDEwMCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBIUGFsZXR0ZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbktleURvd25fID0gdGhpcy5vbktleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uS2V5VXBfID0gdGhpcy5vbktleVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duXyA9IHRoaXMub25Qb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyTW92ZV8gPSB0aGlzLm9uUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlclVwXyA9IHRoaXMub25Qb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IEhQYWxldHRlVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBodWUgPSBtYXBSYW5nZShjb25zdHJhaW5SYW5nZShkLnBvaW50LngsIDAsIGQuYm91bmRzLndpZHRoKSwgMCwgZC5ib3VuZHMud2lkdGgsIDAsIDM1OSk7XG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IFssIHMsIHYsIGFdID0gYy5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IENvbG9yKFtodWUsIHMsIHYsIGFdLCAnaHN2JyksIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd25fKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJNb3ZlXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyVXBfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlEb3duXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkoZ2V0QmFzZVN0ZXBGb3JDb2xvcihmYWxzZSksIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IFtoLCBzLCB2LCBhXSA9IGMuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBDb2xvcihbaCArIHN0ZXAsIHMsIHYsIGFdLCAnaHN2JyksIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ3ID0gQ2xhc3NOYW1lKCdzdnAnKTtcbiAgICBjb25zdCBDQU5WQVNfUkVTT0wgPSA2NDtcbiAgICBjbGFzcyBTdlBhbGV0dGVWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ3KCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kVGFiSW5kZXgodGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNhbnZhc0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICBjYW52YXNFbGVtLmhlaWdodCA9IENBTlZBU19SRVNPTDtcbiAgICAgICAgICAgIGNhbnZhc0VsZW0ud2lkdGggPSBDQU5WQVNfUkVTT0w7XG4gICAgICAgICAgICBjYW52YXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDcoJ2MnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FudmFzRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmNhbnZhc0VsZW1lbnQgPSBjYW52YXNFbGVtO1xuICAgICAgICAgICAgY29uc3QgbWFya2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNygnbScpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8gPSBtYXJrZXJFbGVtO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IGdldENhbnZhc0NvbnRleHQodGhpcy5jYW52YXNFbGVtZW50KTtcbiAgICAgICAgICAgIGlmICghY3R4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBoc3ZDb21wcyA9IGMuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuY2FudmFzRWxlbWVudC53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuY2FudmFzRWxlbWVudC5oZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBpbWdEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBpbWdEYXRhLmRhdGE7XG4gICAgICAgICAgICBmb3IgKGxldCBpeSA9IDA7IGl5IDwgaGVpZ2h0OyBpeSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXggPSAwOyBpeCA8IHdpZHRoOyBpeCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBtYXBSYW5nZShpeCwgMCwgd2lkdGgsIDAsIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBtYXBSYW5nZShpeSwgMCwgaGVpZ2h0LCAxMDAsIDApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZ2JDb21wcyA9IGhzdlRvUmdiKGhzdkNvbXBzWzBdLCBzLCB2KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaSA9IChpeSAqIHdpZHRoICsgaXgpICogNDtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHJnYkNvbXBzWzBdO1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAxXSA9IHJnYkNvbXBzWzFdO1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAyXSA9IHJnYkNvbXBzWzJdO1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAzXSA9IDI1NTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGltZ0RhdGEsIDAsIDApO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IG1hcFJhbmdlKGhzdkNvbXBzWzFdLCAwLCAxMDAsIDAsIDEwMCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fSVgO1xuICAgICAgICAgICAgY29uc3QgdG9wID0gbWFwUmFuZ2UoaHN2Q29tcHNbMl0sIDAsIDEwMCwgMTAwLCAwKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8uc3R5bGUudG9wID0gYCR7dG9wfSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTdlBhbGV0dGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlEb3duXyA9IHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbktleVVwXyA9IHRoaXMub25LZXlVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93bl8gPSB0aGlzLm9uUG9pbnRlckRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmVfID0gdGhpcy5vblBvaW50ZXJNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBTdlBhbGV0dGVWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXyA9IG5ldyBQb2ludGVySGFuZGxlcih0aGlzLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignZG93bicsIHRoaXMub25Qb2ludGVyRG93bl8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ21vdmUnLCB0aGlzLm9uUG9pbnRlck1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCd1cCcsIHRoaXMub25Qb2ludGVyVXBfKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uS2V5RG93bl8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uS2V5VXBfKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVQb2ludGVyRXZlbnRfKGQsIG9wdHMpIHtcbiAgICAgICAgICAgIGlmICghZC5wb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNhdHVyYXRpb24gPSBtYXBSYW5nZShkLnBvaW50LngsIDAsIGQuYm91bmRzLndpZHRoLCAwLCAxMDApO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtYXBSYW5nZShkLnBvaW50LnksIDAsIGQuYm91bmRzLmhlaWdodCwgMTAwLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IFtoLCAsICwgYV0gPSB0aGlzLnZhbHVlLnJhd1ZhbHVlLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2gsIHNhdHVyYXRpb24sIHZhbHVlLCBhXSwgJ2hzdicpLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGlmIChpc0Fycm93S2V5KGV2LmtleSkpIHtcbiAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgW2gsIHMsIHYsIGFdID0gdGhpcy52YWx1ZS5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VTdGVwID0gZ2V0QmFzZVN0ZXBGb3JDb2xvcihmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBkcyA9IGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXAsIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgY29uc3QgZHYgPSBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoZHMgPT09IDAgJiYgZHYgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBDb2xvcihbaCwgcyArIGRzLCB2ICsgZHYsIGFdLCAnaHN2JyksIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VTdGVwID0gZ2V0QmFzZVN0ZXBGb3JDb2xvcihmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBkcyA9IGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXAsIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgY29uc3QgZHYgPSBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoZHMgPT09IDAgJiYgZHYgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQ29sb3JQaWNrZXJDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmhQYWxldHRlQ18gPSBuZXcgSFBhbGV0dGVDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc3ZQYWxldHRlQ18gPSBuZXcgU3ZQYWxldHRlQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFscGhhSWNzXyA9IGNvbmZpZy5zdXBwb3J0c0FscGhhXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHBhbGV0dGU6IG5ldyBBUGFsZXR0ZUNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBuZXcgTnVtYmVyVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVN0ZXA6IDAuMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiAwLjAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUoMCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQ6IG5ldyBSYW5nZUNvbnN0cmFpbnQoeyBtaW46IDAsIG1heDogMSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmFscGhhSWNzXykge1xuICAgICAgICAgICAgICAgIGNvbm5lY3RWYWx1ZXMoe1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5OiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IHRoaXMuYWxwaGFJY3NfLnRleHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKClbM107XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAocCwgcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcHMgPSBwLnJhd1ZhbHVlLmdldENvbXBvbmVudHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBzWzNdID0gcy5yYXdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoY29tcHMsIHAucmF3VmFsdWUubW9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRleHRDXyA9IG5ldyBDb2xvclRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IENvbG9yUGlja2VyVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBhbHBoYVZpZXdzOiB0aGlzLmFscGhhSWNzX1xuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhbGV0dGU6IHRoaXMuYWxwaGFJY3NfLnBhbGV0dGUudmlldyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMuYWxwaGFJY3NfLnRleHQudmlldyxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgaFBhbGV0dGVWaWV3OiB0aGlzLmhQYWxldHRlQ18udmlldyxcbiAgICAgICAgICAgICAgICBzdXBwb3J0c0FscGhhOiBjb25maWcuc3VwcG9ydHNBbHBoYSxcbiAgICAgICAgICAgICAgICBzdlBhbGV0dGVWaWV3OiB0aGlzLnN2UGFsZXR0ZUNfLnZpZXcsXG4gICAgICAgICAgICAgICAgdGV4dFZpZXc6IHRoaXMudGV4dENfLnZpZXcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGV4dENvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0Q187XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkNiA9IENsYXNzTmFtZSgnY29sc3cnKTtcbiAgICBjbGFzcyBDb2xvclN3YXRjaFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNigpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBzd2F0Y2hFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc3dhdGNoRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ2KCdzdycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzd2F0Y2hFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc3dhdGNoRWxlbV8gPSBzd2F0Y2hFbGVtO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNignYicpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50ID0gYnV0dG9uRWxlbTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLnN3YXRjaEVsZW1fLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yVG9IZXhSZ2JhU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQ29sb3JTd2F0Y2hDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ29sb3JTd2F0Y2hWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIENvbG9yQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uQnV0dG9uQmx1cl8gPSB0aGlzLm9uQnV0dG9uQmx1cl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25CdXR0b25DbGlja18gPSB0aGlzLm9uQnV0dG9uQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9wdXBDaGlsZEJsdXJfID0gdGhpcy5vblBvcHVwQ2hpbGRCbHVyXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvcHVwQ2hpbGRLZXlkb3duXyA9IHRoaXMub25Qb3B1cENoaWxkS2V5ZG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlXyA9IEZvbGRhYmxlLmNyZWF0ZShjb25maWcuZXhwYW5kZWQpO1xuICAgICAgICAgICAgdGhpcy5zd2F0Y2hDXyA9IG5ldyBDb2xvclN3YXRjaENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbSA9IHRoaXMuc3dhdGNoQ18udmlldy5idXR0b25FbGVtZW50O1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vbkJ1dHRvbkJsdXJfKTtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQnV0dG9uQ2xpY2tfKTtcbiAgICAgICAgICAgIHRoaXMudGV4dENfID0gbmV3IFRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIHBhcnNlcjogY29uZmlnLnBhcnNlcixcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ29sb3JWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGZvbGRhYmxlOiB0aGlzLmZvbGRhYmxlXyxcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IGNvbmZpZy5waWNrZXJMYXlvdXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5zd2F0Y2hFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc3dhdGNoQ18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMudmlldy50ZXh0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnRleHRDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wb3BDXyA9XG4gICAgICAgICAgICAgICAgY29uZmlnLnBpY2tlckxheW91dCA9PT0gJ3BvcHVwJ1xuICAgICAgICAgICAgICAgICAgICA/IG5ldyBQb3B1cENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBwaWNrZXJDID0gbmV3IENvbG9yUGlja2VyQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBzdXBwb3J0c0FscGhhOiBjb25maWcuc3VwcG9ydHNBbHBoYSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwaWNrZXJDLnZpZXcuYWxsRm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWxlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMub25Qb3B1cENoaWxkQmx1cl8pO1xuICAgICAgICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25Qb3B1cENoaWxkS2V5ZG93bl8pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnBpY2tlckNfID0gcGlja2VyQztcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5wb3BDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9wQ18udmlldy5lbGVtZW50LmFwcGVuZENoaWxkKHBpY2tlckMudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25uZWN0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdGhpcy5mb2xkYWJsZV8udmFsdWUoJ2V4cGFuZGVkJyksXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeTogdGhpcy5wb3BDXy5zaG93cyxcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZDogKHApID0+IHAucmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAoXywgcykgPT4gcy5yYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmlldy5waWNrZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LnBpY2tlckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5waWNrZXJDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGJpbmRGb2xkYWJsZSh0aGlzLmZvbGRhYmxlXywgdGhpcy52aWV3LnBpY2tlckVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCB0ZXh0Q29udHJvbGxlcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRDXztcbiAgICAgICAgfVxuICAgICAgICBvbkJ1dHRvbkJsdXJfKGUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnZpZXcuZWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUYXJnZXQgPSBmb3JjZUNhc3QoZS5yZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgICAgIGlmICghbmV4dFRhcmdldCB8fCAhZWxlbS5jb250YWlucyhuZXh0VGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wQ18uc2hvd3MucmF3VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbkJ1dHRvbkNsaWNrXygpIHtcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGVfLnNldCgnZXhwYW5kZWQnLCAhdGhpcy5mb2xkYWJsZV8uZ2V0KCdleHBhbmRlZCcpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvbGRhYmxlXy5nZXQoJ2V4cGFuZGVkJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckNfLnZpZXcuYWxsRm9jdXNhYmxlRWxlbWVudHNbMF0uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblBvcHVwQ2hpbGRCbHVyXyhldikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMucG9wQ18udmlldy5lbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbmV4dFRhcmdldCA9IGZpbmROZXh0VGFyZ2V0KGV2KTtcbiAgICAgICAgICAgIGlmIChuZXh0VGFyZ2V0ICYmIGVsZW0uY29udGFpbnMobmV4dFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dFRhcmdldCAmJlxuICAgICAgICAgICAgICAgIG5leHRUYXJnZXQgPT09IHRoaXMuc3dhdGNoQ18udmlldy5idXR0b25FbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgIXN1cHBvcnRzVG91Y2goZWxlbS5vd25lckRvY3VtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucG9wQ18uc2hvd3MucmF3VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBvblBvcHVwQ2hpbGRLZXlkb3duXyhldikge1xuICAgICAgICAgICAgaWYgKHRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXYua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52aWV3LnBpY2tlckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXYua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN3YXRjaENfLnZpZXcuYnV0dG9uRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbG9yRnJvbU9iamVjdCh2YWx1ZSkge1xuICAgICAgICBpZiAoQ29sb3IuaXNDb2xvck9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBDb2xvci5mcm9tT2JqZWN0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQ29sb3IuYmxhY2soKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb1JnYk51bWJlcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gcmVtb3ZlQWxwaGFDb21wb25lbnQodmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJykpLnJlZHVjZSgocmVzdWx0LCBjb21wKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHJlc3VsdCA8PCA4KSB8IChNYXRoLmZsb29yKGNvbXApICYgMHhmZik7XG4gICAgICAgIH0sIDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvUmdiYU51bWJlcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicpLnJlZHVjZSgocmVzdWx0LCBjb21wLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGV4ID0gTWF0aC5mbG9vcihpbmRleCA9PT0gMyA/IGNvbXAgKiAyNTUgOiBjb21wKSAmIDB4ZmY7XG4gICAgICAgICAgICByZXR1cm4gKHJlc3VsdCA8PCA4KSB8IGhleDtcbiAgICAgICAgfSwgMCkgPj4+IDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBudW1iZXJUb1JnYkNvbG9yKG51bSkge1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFsobnVtID4+IDE2KSAmIDB4ZmYsIChudW0gPj4gOCkgJiAweGZmLCBudW0gJiAweGZmXSwgJ3JnYicpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBudW1iZXJUb1JnYmFDb2xvcihudW0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbXG4gICAgICAgICAgICAobnVtID4+IDI0KSAmIDB4ZmYsXG4gICAgICAgICAgICAobnVtID4+IDE2KSAmIDB4ZmYsXG4gICAgICAgICAgICAobnVtID4+IDgpICYgMHhmZixcbiAgICAgICAgICAgIG1hcFJhbmdlKG51bSAmIDB4ZmYsIDAsIDI1NSwgMCwgMSksXG4gICAgICAgIF0sICdyZ2InKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JGcm9tUmdiTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3IuYmxhY2soKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyVG9SZ2JDb2xvcih2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yRnJvbVJnYmFOdW1iZXIodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBDb2xvci5ibGFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXJUb1JnYmFDb2xvcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sb3JTdHJpbmdXcml0ZXIobm90YXRpb24pIHtcbiAgICAgICAgY29uc3Qgc3RyaW5naWZ5ID0gZ2V0Q29sb3JTdHJpbmdpZmllcihub3RhdGlvbik7XG4gICAgICAgIHJldHVybiAodGFyZ2V0LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgd3JpdGVQcmltaXRpdmUodGFyZ2V0LCBzdHJpbmdpZnkodmFsdWUpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sb3JOdW1iZXJXcml0ZXIoc3VwcG9ydHNBbHBoYSkge1xuICAgICAgICBjb25zdCBjb2xvclRvTnVtYmVyID0gc3VwcG9ydHNBbHBoYSA/IGNvbG9yVG9SZ2JhTnVtYmVyIDogY29sb3JUb1JnYk51bWJlcjtcbiAgICAgICAgcmV0dXJuICh0YXJnZXQsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB3cml0ZVByaW1pdGl2ZSh0YXJnZXQsIGNvbG9yVG9OdW1iZXIodmFsdWUpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd3JpdGVSZ2JhQ29sb3JPYmplY3QodGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBvYmogPSB2YWx1ZS50b1JnYmFPYmplY3QoKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3InLCBvYmoucik7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdnJywgb2JqLmcpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgnYicsIG9iai5iKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ2EnLCBvYmouYSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlUmdiQ29sb3JPYmplY3QodGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBvYmogPSB2YWx1ZS50b1JnYmFPYmplY3QoKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3InLCBvYmoucik7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdnJywgb2JqLmcpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgnYicsIG9iai5iKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sb3JPYmplY3RXcml0ZXIoc3VwcG9ydHNBbHBoYSkge1xuICAgICAgICByZXR1cm4gc3VwcG9ydHNBbHBoYSA/IHdyaXRlUmdiYUNvbG9yT2JqZWN0IDogd3JpdGVSZ2JDb2xvck9iamVjdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaG91bGRTdXBwb3J0QWxwaGEkMShpbnB1dFBhcmFtcykge1xuICAgICAgICByZXR1cm4gJ2FscGhhJyBpbiBpbnB1dFBhcmFtcyAmJiBpbnB1dFBhcmFtcy5hbHBoYSA9PT0gdHJ1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRm9ybWF0dGVyJDEoc3VwcG9ydHNBbHBoYSkge1xuICAgICAgICByZXR1cm4gc3VwcG9ydHNBbHBoYVxuICAgICAgICAgICAgPyAodikgPT4gY29sb3JUb0hleFJnYmFTdHJpbmcodiwgJzB4JylcbiAgICAgICAgICAgIDogKHYpID0+IGNvbG9yVG9IZXhSZ2JTdHJpbmcodiwgJzB4Jyk7XG4gICAgfVxuICAgIGNvbnN0IE51bWJlckNvbG9ySW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtY29sb3ItbnVtYmVyJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKCd2aWV3JyBpbiBwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyYW1zLnZpZXcgIT09ICdjb2xvcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQ29sb3JJbnB1dFBhcmFtcyhwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNob3VsZFN1cHBvcnRBbHBoYSQxKGFyZ3MucGFyYW1zKVxuICAgICAgICAgICAgICAgICAgICA/IGNvbG9yRnJvbVJnYmFOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgOiBjb2xvckZyb21SZ2JOdW1iZXI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXF1YWxzOiBDb2xvci5lcXVhbHMsXG4gICAgICAgICAgICB3cml0ZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbG9yTnVtYmVyV3JpdGVyKHNob3VsZFN1cHBvcnRBbHBoYSQxKGFyZ3MucGFyYW1zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydHNBbHBoYSA9IHNob3VsZFN1cHBvcnRBbHBoYSQxKGFyZ3MucGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gJ2V4cGFuZGVkJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmV4cGFuZGVkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gJ3BpY2tlcicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5waWNrZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkICE9PSBudWxsICYmIGV4cGFuZGVkICE9PSB2b2lkIDAgPyBleHBhbmRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlRm9ybWF0dGVyJDEoc3VwcG9ydHNBbHBoYSksXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBDb21wb3NpdGVDb2xvclBhcnNlcixcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IHBpY2tlciAhPT0gbnVsbCAmJiBwaWNrZXIgIT09IHZvaWQgMCA/IHBpY2tlciA6ICdwb3B1cCcsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogc3VwcG9ydHNBbHBoYSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHNob3VsZFN1cHBvcnRBbHBoYShpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIENvbG9yLmlzUmdiYUNvbG9yT2JqZWN0KGluaXRpYWxWYWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IE9iamVjdENvbG9ySW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtY29sb3Itb2JqZWN0JyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFDb2xvci5pc0NvbG9yT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VDb2xvcklucHV0UGFyYW1zKHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBjb2xvckZyb21PYmplY3QsXG4gICAgICAgICAgICBlcXVhbHM6IENvbG9yLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKGFyZ3MpID0+IGNyZWF0ZUNvbG9yT2JqZWN0V3JpdGVyKHNob3VsZFN1cHBvcnRBbHBoYShhcmdzLmluaXRpYWxWYWx1ZSkpLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydHNBbHBoYSA9IENvbG9yLmlzUmdiYUNvbG9yT2JqZWN0KGFyZ3MuaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gJ2V4cGFuZGVkJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmV4cGFuZGVkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gJ3BpY2tlcicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5waWNrZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzdXBwb3J0c0FscGhhXG4gICAgICAgICAgICAgICAgPyBjb2xvclRvSGV4UmdiYVN0cmluZ1xuICAgICAgICAgICAgICAgIDogY29sb3JUb0hleFJnYlN0cmluZztcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3JDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogZXhwYW5kZWQgIT09IG51bGwgJiYgZXhwYW5kZWQgIT09IHZvaWQgMCA/IGV4cGFuZGVkIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBDb21wb3NpdGVDb2xvclBhcnNlcixcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IHBpY2tlciAhPT0gbnVsbCAmJiBwaWNrZXIgIT09IHZvaWQgMCA/IHBpY2tlciA6ICdwb3B1cCcsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogc3VwcG9ydHNBbHBoYSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IFN0cmluZ0NvbG9ySW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtY29sb3Itc3RyaW5nJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgndmlldycgaW4gcGFyYW1zICYmIHBhcmFtcy52aWV3ID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5vdGF0aW9uID0gZ2V0Q29sb3JOb3RhdGlvbih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIW5vdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUNvbG9ySW5wdXRQYXJhbXMocGFyYW1zKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IGNvbG9yRnJvbVN0cmluZyxcbiAgICAgICAgICAgIGVxdWFsczogQ29sb3IuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdGF0aW9uID0gZ2V0Q29sb3JOb3RhdGlvbihhcmdzLmluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFub3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb2xvclN0cmluZ1dyaXRlcihub3RhdGlvbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm90YXRpb24gPSBnZXRDb2xvck5vdGF0aW9uKGFyZ3MuaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgIGlmICghbm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdHJpbmdpZmllciA9IGdldENvbG9yU3RyaW5naWZpZXIobm90YXRpb24pO1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSAnZXhwYW5kZWQnIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMuZXhwYW5kZWQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBwaWNrZXIgPSAncGlja2VyJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLnBpY2tlciA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3JDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogZXhwYW5kZWQgIT09IG51bGwgJiYgZXhwYW5kZWQgIT09IHZvaWQgMCA/IGV4cGFuZGVkIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBzdHJpbmdpZmllcixcbiAgICAgICAgICAgICAgICBwYXJzZXI6IENvbXBvc2l0ZUNvbG9yUGFyc2VyLFxuICAgICAgICAgICAgICAgIHBpY2tlckxheW91dDogcGlja2VyICE9PSBudWxsICYmIHBpY2tlciAhPT0gdm9pZCAwID8gcGlja2VyIDogJ3BvcHVwJyxcbiAgICAgICAgICAgICAgICBzdXBwb3J0c0FscGhhOiBoYXNBbHBoYUNvbXBvbmVudChub3RhdGlvbiksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjbGFzcyBQb2ludE5kQ29uc3RyYWludCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzID0gY29uZmlnLmNvbXBvbmVudHM7XG4gICAgICAgICAgICB0aGlzLmFzbV8gPSBjb25maWcuYXNzZW1ibHk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wcyA9IHRoaXMuYXNtX1xuICAgICAgICAgICAgICAgIC50b0NvbXBvbmVudHModmFsdWUpXG4gICAgICAgICAgICAgICAgLm1hcCgoY29tcCwgaW5kZXgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuY29tcG9uZW50c1tpbmRleF0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb25zdHJhaW4oY29tcCkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGNvbXA7IH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNtXy5mcm9tQ29tcG9uZW50cyhjb21wcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkNSA9IENsYXNzTmFtZSgncG5kdHh0Jyk7XG4gICAgY2xhc3MgUG9pbnROZFRleHRWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdzID0gY29uZmlnLnRleHRWaWV3cztcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ1KCkpO1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld3MuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF4aXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGF4aXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDUoJ2EnKSk7XG4gICAgICAgICAgICAgICAgYXhpc0VsZW0uYXBwZW5kQ2hpbGQodi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYXhpc0VsZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVBeGlzQ29udHJvbGxlcihkb2MsIGNvbmZpZywgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgIGFycmF5UG9zaXRpb246IGluZGV4ID09PSAwID8gJ2ZzdCcgOiBpbmRleCA9PT0gY29uZmlnLmF4ZXMubGVuZ3RoIC0gMSA/ICdsc3QnIDogJ21pZCcsXG4gICAgICAgICAgICBiYXNlU3RlcDogY29uZmlnLmF4ZXNbaW5kZXhdLmJhc2VTdGVwLFxuICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5heGVzW2luZGV4XS50ZXh0UHJvcHMsXG4gICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUoMCwge1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNvbmZpZy5heGVzW2luZGV4XS5jb25zdHJhaW50LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjbGFzcyBQb2ludE5kVGV4dENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuYWNzXyA9IGNvbmZpZy5heGVzLm1hcCgoXywgaW5kZXgpID0+IGNyZWF0ZUF4aXNDb250cm9sbGVyKGRvYywgY29uZmlnLCBpbmRleCkpO1xuICAgICAgICAgICAgdGhpcy5hY3NfLmZvckVhY2goKGMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29ubmVjdFZhbHVlcyh7XG4gICAgICAgICAgICAgICAgICAgIHByaW1hcnk6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeTogYy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZDogKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuYXNzZW1ibHkudG9Db21wb25lbnRzKHAucmF3VmFsdWUpW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQ6IChwLCBzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wcyA9IGNvbmZpZy5hc3NlbWJseS50b0NvbXBvbmVudHMocC5yYXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wc1tpbmRleF0gPSBzLnJhd1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5hc3NlbWJseS5mcm9tQ29tcG9uZW50cyhjb21wcyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBQb2ludE5kVGV4dFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgdGV4dFZpZXdzOiB0aGlzLmFjc18ubWFwKChhYykgPT4gYWMudmlldyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVN0ZXBDb25zdHJhaW50KHBhcmFtcykge1xuICAgICAgICBpZiAoJ3N0ZXAnIGluIHBhcmFtcyAmJiAhaXNFbXB0eShwYXJhbXMuc3RlcCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RlcENvbnN0cmFpbnQocGFyYW1zLnN0ZXApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVSYW5nZUNvbnN0cmFpbnQocGFyYW1zKSB7XG4gICAgICAgIGlmICgoJ21heCcgaW4gcGFyYW1zICYmICFpc0VtcHR5KHBhcmFtcy5tYXgpKSB8fFxuICAgICAgICAgICAgKCdtaW4nIGluIHBhcmFtcyAmJiAhaXNFbXB0eShwYXJhbXMubWluKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2VDb25zdHJhaW50KHtcbiAgICAgICAgICAgICAgICBtYXg6IHBhcmFtcy5tYXgsXG4gICAgICAgICAgICAgICAgbWluOiBwYXJhbXMubWluLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQkNChwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcbiAgICAgICAgY29uc3Qgc2MgPSBjcmVhdGVTdGVwQ29uc3RyYWludChwYXJhbXMpO1xuICAgICAgICBpZiAoc2MpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goc2MpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJjID0gY3JlYXRlUmFuZ2VDb25zdHJhaW50KHBhcmFtcyk7XG4gICAgICAgIGlmIChyYykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChyYyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGMgPSBjcmVhdGVMaXN0Q29uc3RyYWludChwYXJhbXMub3B0aW9ucyk7XG4gICAgICAgIGlmIChsYykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChsYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wb3NpdGVDb25zdHJhaW50KGNvbnN0cmFpbnRzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZFJhbmdlKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3QgYyA9IGNvbnN0cmFpbnQgPyBmaW5kQ29uc3RyYWludChjb25zdHJhaW50LCBSYW5nZUNvbnN0cmFpbnQpIDogbnVsbDtcbiAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICByZXR1cm4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2MubWluVmFsdWUsIGMubWF4VmFsdWVdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlc3RpbWF0ZVN1aXRhYmxlUmFuZ2UoY29uc3RyYWludCkge1xuICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gZmluZFJhbmdlKGNvbnN0cmFpbnQpO1xuICAgICAgICByZXR1cm4gW21pbiAhPT0gbnVsbCAmJiBtaW4gIT09IHZvaWQgMCA/IG1pbiA6IDAsIG1heCAhPT0gbnVsbCAmJiBtYXggIT09IHZvaWQgMCA/IG1heCA6IDEwMF07XG4gICAgfVxuICAgIGNvbnN0IE51bWJlcklucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LW51bWJlcicsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogcC5vcHRpb25hbC5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICBtYXg6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIG1pbjogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VMaXN0T3B0aW9ucyksXG4gICAgICAgICAgICAgICAgc3RlcDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IG51bWJlckZyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQkNChhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICB3cml0ZXI6IChfYXJncykgPT4gd3JpdGVQcmltaXRpdmUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYyA9IGFyZ3MuY29uc3RyYWludDtcbiAgICAgICAgICAgIGlmIChjICYmIGZpbmRDb25zdHJhaW50KGMsIExpc3RDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiAoX2EgPSBmaW5kTGlzdEl0ZW1zKGMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IChfYiA9ICgnZm9ybWF0JyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmZvcm1hdCA6IHVuZGVmaW5lZCkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGNyZWF0ZU51bWJlckZvcm1hdHRlcihnZXRTdWl0YWJsZURlY2ltYWxEaWdpdHMoYywgdmFsdWUucmF3VmFsdWUpKTtcbiAgICAgICAgICAgIGlmIChjICYmIGZpbmRDb25zdHJhaW50KGMsIFJhbmdlQ29uc3RyYWludCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gZXN0aW1hdGVTdWl0YWJsZVJhbmdlKGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2xpZGVyVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBiYXNlU3RlcDogZ2V0QmFzZVN0ZXAoYyksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlclByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFZhbHVlOiBtYXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5WYWx1ZTogbWluLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dFByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjLCB2YWx1ZS5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgTnVtYmVyVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJhc2VTdGVwOiBnZXRCYXNlU3RlcChjKSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGMsIHZhbHVlLnJhd1ZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgUG9pbnQyZCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCkge1xuICAgICAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q29tcG9uZW50cygpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy54LCB0aGlzLnldO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc09iamVjdChvYmopIHtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KG9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB4ID0gb2JqLng7XG4gICAgICAgICAgICBjb25zdCB5ID0gb2JqLnk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHggIT09ICdudW1iZXInIHx8IHR5cGVvZiB5ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBlcXVhbHModjEsIHYyKSB7XG4gICAgICAgICAgICByZXR1cm4gdjEueCA9PT0gdjIueCAmJiB2MS55ID09PSB2Mi55O1xuICAgICAgICB9XG4gICAgICAgIHRvT2JqZWN0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICAgICAgeTogdGhpcy55LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBQb2ludDJkQXNzZW1ibHkgPSB7XG4gICAgICAgIHRvQ29tcG9uZW50czogKHApID0+IHAuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBmcm9tQ29tcG9uZW50czogKGNvbXBzKSA9PiBuZXcgUG9pbnQyZCguLi5jb21wcyksXG4gICAgfTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ0ID0gQ2xhc3NOYW1lKCdwMmQnKTtcbiAgICBjbGFzcyBQb2ludDJkVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBiaW5kVmFsdWUoY29uZmlnLmV4cGFuZGVkLCB2YWx1ZVRvQ2xhc3NOYW1lKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lJDQodW5kZWZpbmVkLCAnZXhwYW5kZWQnKSkpO1xuICAgICAgICAgICAgY29uc3QgaGVhZEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBoZWFkRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ0KCdoJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGhlYWRFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDQoJ2InKSk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmFwcGVuZENoaWxkKGNyZWF0ZVN2Z0ljb25FbGVtZW50KGRvYywgJ3AyZHBhZCcpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgaGVhZEVsZW0uYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBidXR0b25FbGVtO1xuICAgICAgICAgICAgY29uc3QgdGV4dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXh0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ0KCd0JykpO1xuICAgICAgICAgICAgaGVhZEVsZW0uYXBwZW5kQ2hpbGQodGV4dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0RWxlbWVudCA9IHRleHRFbGVtO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5waWNrZXJMYXlvdXQgPT09ICdpbmxpbmUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGlja2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBwaWNrZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDQoJ3AnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHBpY2tlckVsZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyRWxlbWVudCA9IHBpY2tlckVsZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDMgPSBDbGFzc05hbWUoJ3AyZHAnKTtcbiAgICBjbGFzcyBQb2ludDJkUGlja2VyVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRm9sZGFibGVDaGFuZ2VfID0gdGhpcy5vbkZvbGRhYmxlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuaW52ZXJ0c1lfID0gY29uZmlnLmludmVydHNZO1xuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZV8gPSBjb25maWcubWF4VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygpKTtcbiAgICAgICAgICAgIGlmIChjb25maWcubGF5b3V0ID09PSAncG9wdXAnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDModW5kZWZpbmVkLCAncCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhZEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBwYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoJ3AnKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRUYWJJbmRleChwYWRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChwYWRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMucGFkRWxlbWVudCA9IHBhZEVsZW07XG4gICAgICAgICAgICBjb25zdCBzdmdFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdzdmcnKTtcbiAgICAgICAgICAgIHN2Z0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnZycpKTtcbiAgICAgICAgICAgIHRoaXMucGFkRWxlbWVudC5hcHBlbmRDaGlsZChzdmdFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc3ZnRWxlbV8gPSBzdmdFbGVtO1xuICAgICAgICAgICAgY29uc3QgeEF4aXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdsaW5lJyk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnYXgnKSk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gxJywgJzAnKTtcbiAgICAgICAgICAgIHhBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTEnLCAnNTAlJyk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gyJywgJzEwMCUnKTtcbiAgICAgICAgICAgIHhBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTInLCAnNTAlJyk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fLmFwcGVuZENoaWxkKHhBeGlzRWxlbSk7XG4gICAgICAgICAgICBjb25zdCB5QXhpc0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ2xpbmUnKTtcbiAgICAgICAgICAgIHlBeGlzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKCdheCcpKTtcbiAgICAgICAgICAgIHlBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneDEnLCAnNTAlJyk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kxJywgJzAnKTtcbiAgICAgICAgICAgIHlBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneDInLCAnNTAlJyk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kyJywgJzEwMCUnKTtcbiAgICAgICAgICAgIHRoaXMuc3ZnRWxlbV8uYXBwZW5kQ2hpbGQoeUF4aXNFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdsaW5lJyk7XG4gICAgICAgICAgICBsaW5lRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKCdsJykpO1xuICAgICAgICAgICAgbGluZUVsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gxJywgJzUwJScpO1xuICAgICAgICAgICAgbGluZUVsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kxJywgJzUwJScpO1xuICAgICAgICAgICAgdGhpcy5zdmdFbGVtXy5hcHBlbmRDaGlsZChsaW5lRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbGVtXyA9IGxpbmVFbGVtO1xuICAgICAgICAgICAgY29uc3QgbWFya2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnbScpKTtcbiAgICAgICAgICAgIHRoaXMucGFkRWxlbWVudC5hcHBlbmRDaGlsZChtYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8gPSBtYXJrZXJFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBhbGxGb2N1c2FibGVFbGVtZW50cygpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5wYWRFbGVtZW50XTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgW3gsIHldID0gdGhpcy52YWx1ZS5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKCk7XG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heFZhbHVlXztcbiAgICAgICAgICAgIGNvbnN0IHB4ID0gbWFwUmFuZ2UoeCwgLW1heCwgK21heCwgMCwgMTAwKTtcbiAgICAgICAgICAgIGNvbnN0IHB5ID0gbWFwUmFuZ2UoeSwgLW1heCwgK21heCwgMCwgMTAwKTtcbiAgICAgICAgICAgIGNvbnN0IGlweSA9IHRoaXMuaW52ZXJ0c1lfID8gMTAwIC0gcHkgOiBweTtcbiAgICAgICAgICAgIHRoaXMubGluZUVsZW1fLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MicsIGAke3B4fSVgKTtcbiAgICAgICAgICAgIHRoaXMubGluZUVsZW1fLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MicsIGAke2lweX0lYCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLmxlZnQgPSBgJHtweH0lYDtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8uc3R5bGUudG9wID0gYCR7aXB5fSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25Gb2xkYWJsZUNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXQoZXYsIGJhc2VTdGVwcywgaW52ZXJ0c1kpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXBzWzBdLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKSxcbiAgICAgICAgICAgIGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXBzWzFdLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSkgKiAoaW52ZXJ0c1kgPyAxIDogLTEpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBjbGFzcyBQb2ludDJkUGlja2VyQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uUGFkS2V5RG93bl8gPSB0aGlzLm9uUGFkS2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYWRLZXlVcF8gPSB0aGlzLm9uUGFkS2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25fID0gdGhpcy5vblBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmJhc2VTdGVwc18gPSBjb25maWcuYmFzZVN0ZXBzO1xuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZV8gPSBjb25maWcubWF4VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmludmVydHNZXyA9IGNvbmZpZy5pbnZlcnRzWTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBQb2ludDJkUGlja2VyVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBpbnZlcnRzWTogdGhpcy5pbnZlcnRzWV8sXG4gICAgICAgICAgICAgICAgbGF5b3V0OiBjb25maWcubGF5b3V0LFxuICAgICAgICAgICAgICAgIG1heFZhbHVlOiB0aGlzLm1heFZhbHVlXyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LnBhZEVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcucGFkRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vblBhZEtleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5wYWRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vblBhZEtleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heFZhbHVlXztcbiAgICAgICAgICAgIGNvbnN0IHB4ID0gbWFwUmFuZ2UoZC5wb2ludC54LCAwLCBkLmJvdW5kcy53aWR0aCwgLW1heCwgK21heCk7XG4gICAgICAgICAgICBjb25zdCBweSA9IG1hcFJhbmdlKHRoaXMuaW52ZXJ0c1lfID8gZC5ib3VuZHMuaGVpZ2h0IC0gZC5wb2ludC55IDogZC5wb2ludC55LCAwLCBkLmJvdW5kcy5oZWlnaHQsIC1tYXgsICttYXgpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgUG9pbnQyZChweCwgcHkpLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFkS2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGlmIChpc0Fycm93S2V5KGV2LmtleSkpIHtcbiAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgW2R4LCBkeV0gPSBjb21wdXRlT2Zmc2V0KGV2LCB0aGlzLmJhc2VTdGVwc18sIHRoaXMuaW52ZXJ0c1lfKTtcbiAgICAgICAgICAgIGlmIChkeCA9PT0gMCAmJiBkeSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IFBvaW50MmQodGhpcy52YWx1ZS5yYXdWYWx1ZS54ICsgZHgsIHRoaXMudmFsdWUucmF3VmFsdWUueSArIGR5KSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBhZEtleVVwXyhldikge1xuICAgICAgICAgICAgY29uc3QgW2R4LCBkeV0gPSBjb21wdXRlT2Zmc2V0KGV2LCB0aGlzLmJhc2VTdGVwc18sIHRoaXMuaW52ZXJ0c1lfKTtcbiAgICAgICAgICAgIGlmIChkeCA9PT0gMCAmJiBkeSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBQb2ludDJkQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdGhpcy5vblBvcHVwQ2hpbGRCbHVyXyA9IHRoaXMub25Qb3B1cENoaWxkQmx1cl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb3B1cENoaWxkS2V5ZG93bl8gPSB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUGFkQnV0dG9uQmx1cl8gPSB0aGlzLm9uUGFkQnV0dG9uQmx1cl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYWRCdXR0b25DbGlja18gPSB0aGlzLm9uUGFkQnV0dG9uQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZV8gPSBGb2xkYWJsZS5jcmVhdGUoY29uZmlnLmV4cGFuZGVkKTtcbiAgICAgICAgICAgIHRoaXMucG9wQ18gPVxuICAgICAgICAgICAgICAgIGNvbmZpZy5waWNrZXJMYXlvdXQgPT09ICdwb3B1cCdcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgUG9wdXBDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgcGFkQyA9IG5ldyBQb2ludDJkUGlja2VyQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBiYXNlU3RlcHM6IFtjb25maWcuYXhlc1swXS5iYXNlU3RlcCwgY29uZmlnLmF4ZXNbMV0uYmFzZVN0ZXBdLFxuICAgICAgICAgICAgICAgIGludmVydHNZOiBjb25maWcuaW52ZXJ0c1ksXG4gICAgICAgICAgICAgICAgbGF5b3V0OiBjb25maWcucGlja2VyTGF5b3V0LFxuICAgICAgICAgICAgICAgIG1heFZhbHVlOiBjb25maWcubWF4VmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFkQy52aWV3LmFsbEZvY3VzYWJsZUVsZW1lbnRzLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uUG9wdXBDaGlsZEJsdXJfKTtcbiAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5waWNrZXJDXyA9IHBhZEM7XG4gICAgICAgICAgICB0aGlzLnRleHRDXyA9IG5ldyBQb2ludE5kVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYXNzZW1ibHk6IFBvaW50MmRBc3NlbWJseSxcbiAgICAgICAgICAgICAgICBheGVzOiBjb25maWcuYXhlcyxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IGNvbmZpZy5wYXJzZXIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFBvaW50MmRWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiB0aGlzLmZvbGRhYmxlXy52YWx1ZSgnZXhwYW5kZWQnKSxcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IGNvbmZpZy5waWNrZXJMYXlvdXQsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnRleHRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudGV4dENfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAoX2EgPSB0aGlzLnZpZXcuYnV0dG9uRWxlbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uUGFkQnV0dG9uQmx1cl8pO1xuICAgICAgICAgICAgKF9iID0gdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25QYWRCdXR0b25DbGlja18pO1xuICAgICAgICAgICAgaWYgKHRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnBvcENfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BDXy52aWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5waWNrZXJDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGNvbm5lY3RWYWx1ZXMoe1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5OiB0aGlzLmZvbGRhYmxlXy52YWx1ZSgnZXhwYW5kZWQnKSxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5OiB0aGlzLnBvcENfLnNob3dzLFxuICAgICAgICAgICAgICAgICAgICBmb3J3YXJkOiAocCkgPT4gcC5yYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQ6IChfLCBzKSA9PiBzLnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52aWV3LnBpY2tlckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXcucGlja2VyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnBpY2tlckNfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYmluZEZvbGRhYmxlKHRoaXMuZm9sZGFibGVfLCB0aGlzLnZpZXcucGlja2VyRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25QYWRCdXR0b25CbHVyXyhlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy52aWV3LmVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBuZXh0VGFyZ2V0ID0gZm9yY2VDYXN0KGUucmVsYXRlZFRhcmdldCk7XG4gICAgICAgICAgICBpZiAoIW5leHRUYXJnZXQgfHwgIWVsZW0uY29udGFpbnMobmV4dFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25QYWRCdXR0b25DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlXy5zZXQoJ2V4cGFuZGVkJywgIXRoaXMuZm9sZGFibGVfLmdldCgnZXhwYW5kZWQnKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5mb2xkYWJsZV8uZ2V0KCdleHBhbmRlZCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJDXy52aWV3LmFsbEZvY3VzYWJsZUVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25Qb3B1cENoaWxkQmx1cl8oZXYpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnBvcENfLnZpZXcuZWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUYXJnZXQgPSBmaW5kTmV4dFRhcmdldChldik7XG4gICAgICAgICAgICBpZiAobmV4dFRhcmdldCAmJiBlbGVtLmNvbnRhaW5zKG5leHRUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHRUYXJnZXQgJiZcbiAgICAgICAgICAgICAgICBuZXh0VGFyZ2V0ID09PSB0aGlzLnZpZXcuYnV0dG9uRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICFzdXBwb3J0c1RvdWNoKGVsZW0ub3duZXJEb2N1bWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb3B1cENoaWxkS2V5ZG93bl8oZXYpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BDXy5zaG93cy5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmlldy5waWNrZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb2ludDJkRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFBvaW50MmQuaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICA/IG5ldyBQb2ludDJkKHZhbHVlLngsIHZhbHVlLnkpXG4gICAgICAgICAgICA6IG5ldyBQb2ludDJkKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlUG9pbnQyZCh0YXJnZXQsIHZhbHVlKSB7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd4JywgdmFsdWUueCk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd5JywgdmFsdWUueSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCQyKHBhcmFtcykge1xuICAgICAgICBpZiAoIXBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuICAgICAgICBpZiAoIWlzRW1wdHkocGFyYW1zLnN0ZXApKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKG5ldyBTdGVwQ29uc3RyYWludChwYXJhbXMuc3RlcCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbXB0eShwYXJhbXMubWF4KSB8fCAhaXNFbXB0eShwYXJhbXMubWluKSkge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChuZXcgUmFuZ2VDb25zdHJhaW50KHtcbiAgICAgICAgICAgICAgICBtYXg6IHBhcmFtcy5tYXgsXG4gICAgICAgICAgICAgICAgbWluOiBwYXJhbXMubWluLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQkMyhwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludE5kQ29uc3RyYWludCh7XG4gICAgICAgICAgICBhc3NlbWJseTogUG9pbnQyZEFzc2VtYmx5LFxuICAgICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMigneCcgaW4gcGFyYW1zID8gcGFyYW1zLnggOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMigneScgaW4gcGFyYW1zID8gcGFyYW1zLnkgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1aXRhYmxlTWF4RGltZW5zaW9uVmFsdWUoY29uc3RyYWludCwgcmF3VmFsdWUpIHtcbiAgICAgICAgY29uc3QgcmMgPSBjb25zdHJhaW50ICYmIGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIFJhbmdlQ29uc3RyYWludCk7XG4gICAgICAgIGlmIChyYykge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHJjLm1pblZhbHVlIHx8IDApLCBNYXRoLmFicyhyYy5tYXhWYWx1ZSB8fCAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcCA9IGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpO1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoc3RlcCkgKiAxMCwgTWF0aC5hYnMocmF3VmFsdWUpICogMTApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdWl0YWJsZU1heFZhbHVlKGluaXRpYWxWYWx1ZSwgY29uc3RyYWludCkge1xuICAgICAgICBjb25zdCB4YyA9IGNvbnN0cmFpbnQgaW5zdGFuY2VvZiBQb2ludE5kQ29uc3RyYWludFxuICAgICAgICAgICAgPyBjb25zdHJhaW50LmNvbXBvbmVudHNbMF1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB5YyA9IGNvbnN0cmFpbnQgaW5zdGFuY2VvZiBQb2ludE5kQ29uc3RyYWludFxuICAgICAgICAgICAgPyBjb25zdHJhaW50LmNvbXBvbmVudHNbMV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB4ciA9IGdldFN1aXRhYmxlTWF4RGltZW5zaW9uVmFsdWUoeGMsIGluaXRpYWxWYWx1ZS54KTtcbiAgICAgICAgY29uc3QgeXIgPSBnZXRTdWl0YWJsZU1heERpbWVuc2lvblZhbHVlKHljLCBpbml0aWFsVmFsdWUueSk7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCh4ciwgeXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVBeGlzJDIoaW5pdGlhbFZhbHVlLCBjb25zdHJhaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBiYXNlU3RlcDogZ2V0QmFzZVN0ZXAoY29uc3RyYWludCksXG4gICAgICAgICAgICBjb25zdHJhaW50OiBjb25zdHJhaW50LFxuICAgICAgICAgICAgdGV4dFByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiBnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUoY29uc3RyYWludCwgaW5pdGlhbFZhbHVlKSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZU51bWJlckZvcm1hdHRlcihnZXRTdWl0YWJsZURlY2ltYWxEaWdpdHMoY29uc3RyYWludCwgaW5pdGlhbFZhbHVlKSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkSW52ZXJ0WShwYXJhbXMpIHtcbiAgICAgICAgaWYgKCEoJ3knIGluIHBhcmFtcykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5UGFyYW1zID0gcGFyYW1zLnk7XG4gICAgICAgIGlmICgheVBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnaW52ZXJ0ZWQnIGluIHlQYXJhbXMgPyAhIXlQYXJhbXMuaW52ZXJ0ZWQgOiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgUG9pbnQyZElucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LXBvaW50MmQnLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVBvaW50MmQuaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICAgICAgcGlja2VyOiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBpY2tlckxheW91dCksXG4gICAgICAgICAgICAgICAgeDogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgeTogcC5vcHRpb25hbC5vYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBpbnZlcnRlZDogcC5vcHRpb25hbC5ib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICBtYXg6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBtaW46IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBzdGVwOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gcG9pbnQyZEZyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQkMyhhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICBlcXVhbHM6IFBvaW50MmQuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUG9pbnQyZCxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGFyZ3MuZG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgaWYgKCEoYyBpbnN0YW5jZW9mIFBvaW50TmRDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gJ2V4cGFuZGVkJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmV4cGFuZGVkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gJ3BpY2tlcicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5waWNrZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvaW50MmRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGF4ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQXhpcyQyKHZhbHVlLnJhd1ZhbHVlLngsIGMuY29tcG9uZW50c1swXSksXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUF4aXMkMih2YWx1ZS5yYXdWYWx1ZS55LCBjLmNvbXBvbmVudHNbMV0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkICE9PSBudWxsICYmIGV4cGFuZGVkICE9PSB2b2lkIDAgPyBleHBhbmRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGludmVydHNZOiBzaG91bGRJbnZlcnRZKGFyZ3MucGFyYW1zKSxcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZTogZ2V0U3VpdGFibGVNYXhWYWx1ZSh2YWx1ZS5yYXdWYWx1ZSwgYyksXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IHBpY2tlciAhPT0gbnVsbCAmJiBwaWNrZXIgIT09IHZvaWQgMCA/IHBpY2tlciA6ICdwb3B1cCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgUG9pbnQzZCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCwgeiA9IDApIHtcbiAgICAgICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICAgICAgdGhpcy56ID0gejtcbiAgICAgICAgfVxuICAgICAgICBnZXRDb21wb25lbnRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLngsIHRoaXMueSwgdGhpcy56XTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNPYmplY3Qob2JqKSB7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShvYmopKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeCA9IG9iai54O1xuICAgICAgICAgICAgY29uc3QgeSA9IG9iai55O1xuICAgICAgICAgICAgY29uc3QgeiA9IG9iai56O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB5ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB6ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBlcXVhbHModjEsIHYyKSB7XG4gICAgICAgICAgICByZXR1cm4gdjEueCA9PT0gdjIueCAmJiB2MS55ID09PSB2Mi55ICYmIHYxLnogPT09IHYyLno7XG4gICAgICAgIH1cbiAgICAgICAgdG9PYmplY3QoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHg6IHRoaXMueCxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICAgICAgejogdGhpcy56LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBQb2ludDNkQXNzZW1ibHkgPSB7XG4gICAgICAgIHRvQ29tcG9uZW50czogKHApID0+IHAuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBmcm9tQ29tcG9uZW50czogKGNvbXBzKSA9PiBuZXcgUG9pbnQzZCguLi5jb21wcyksXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHBvaW50M2RGcm9tVW5rbm93bih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gUG9pbnQzZC5pc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgID8gbmV3IFBvaW50M2QodmFsdWUueCwgdmFsdWUueSwgdmFsdWUueilcbiAgICAgICAgICAgIDogbmV3IFBvaW50M2QoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd3JpdGVQb2ludDNkKHRhcmdldCwgdmFsdWUpIHtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3gnLCB2YWx1ZS54KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3knLCB2YWx1ZS55KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3onLCB2YWx1ZS56KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50JDEocGFyYW1zKSB7XG4gICAgICAgIGlmICghcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gW107XG4gICAgICAgIGlmICghaXNFbXB0eShwYXJhbXMuc3RlcCkpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobmV3IFN0ZXBDb25zdHJhaW50KHBhcmFtcy5zdGVwKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VtcHR5KHBhcmFtcy5tYXgpIHx8ICFpc0VtcHR5KHBhcmFtcy5taW4pKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKG5ldyBSYW5nZUNvbnN0cmFpbnQoe1xuICAgICAgICAgICAgICAgIG1heDogcGFyYW1zLm1heCxcbiAgICAgICAgICAgICAgICBtaW46IHBhcmFtcy5taW4sXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wb3NpdGVDb25zdHJhaW50KGNvbnN0cmFpbnRzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludCQyKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50TmRDb25zdHJhaW50KHtcbiAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDNkQXNzZW1ibHksXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCQxKCd4JyBpbiBwYXJhbXMgPyBwYXJhbXMueCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCQxKCd5JyBpbiBwYXJhbXMgPyBwYXJhbXMueSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCQxKCd6JyBpbiBwYXJhbXMgPyBwYXJhbXMueiA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQXhpcyQxKGluaXRpYWxWYWx1ZSwgY29uc3RyYWludCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpLFxuICAgICAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludCxcbiAgICAgICAgICAgIHRleHRQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSksXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IFBvaW50M2RJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1wb2ludDNkJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFQb2ludDNkLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICB4OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB5OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB6OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gcG9pbnQzZEZyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQkMihhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICBlcXVhbHM6IFBvaW50M2QuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUG9pbnQzZCxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBhcmdzLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICBpZiAoIShjIGluc3RhbmNlb2YgUG9pbnROZENvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludE5kVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDNkQXNzZW1ibHksXG4gICAgICAgICAgICAgICAgYXhlczogW1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVBeGlzJDEodmFsdWUucmF3VmFsdWUueCwgYy5jb21wb25lbnRzWzBdKSxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQXhpcyQxKHZhbHVlLnJhd1ZhbHVlLnksIGMuY29tcG9uZW50c1sxXSksXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUF4aXMkMSh2YWx1ZS5yYXdWYWx1ZS56LCBjLmNvbXBvbmVudHNbMl0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjbGFzcyBQb2ludDRkIHtcbiAgICAgICAgY29uc3RydWN0b3IoeCA9IDAsIHkgPSAwLCB6ID0gMCwgdyA9IDApIHtcbiAgICAgICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICAgICAgdGhpcy56ID0gejtcbiAgICAgICAgICAgIHRoaXMudyA9IHc7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q29tcG9uZW50cygpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy54LCB0aGlzLnksIHRoaXMueiwgdGhpcy53XTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNPYmplY3Qob2JqKSB7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShvYmopKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeCA9IG9iai54O1xuICAgICAgICAgICAgY29uc3QgeSA9IG9iai55O1xuICAgICAgICAgICAgY29uc3QgeiA9IG9iai56O1xuICAgICAgICAgICAgY29uc3QgdyA9IG9iai53O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB5ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB6ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB3ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBlcXVhbHModjEsIHYyKSB7XG4gICAgICAgICAgICByZXR1cm4gdjEueCA9PT0gdjIueCAmJiB2MS55ID09PSB2Mi55ICYmIHYxLnogPT09IHYyLnogJiYgdjEudyA9PT0gdjIudztcbiAgICAgICAgfVxuICAgICAgICB0b09iamVjdCgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgeDogdGhpcy54LFxuICAgICAgICAgICAgICAgIHk6IHRoaXMueSxcbiAgICAgICAgICAgICAgICB6OiB0aGlzLnosXG4gICAgICAgICAgICAgICAgdzogdGhpcy53LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBQb2ludDRkQXNzZW1ibHkgPSB7XG4gICAgICAgIHRvQ29tcG9uZW50czogKHApID0+IHAuZ2V0Q29tcG9uZW50cygpLFxuICAgICAgICBmcm9tQ29tcG9uZW50czogKGNvbXBzKSA9PiBuZXcgUG9pbnQ0ZCguLi5jb21wcyksXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHBvaW50NGRGcm9tVW5rbm93bih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gUG9pbnQ0ZC5pc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgID8gbmV3IFBvaW50NGQodmFsdWUueCwgdmFsdWUueSwgdmFsdWUueiwgdmFsdWUudylcbiAgICAgICAgICAgIDogbmV3IFBvaW50NGQoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd3JpdGVQb2ludDRkKHRhcmdldCwgdmFsdWUpIHtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3gnLCB2YWx1ZS54KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3knLCB2YWx1ZS55KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3onLCB2YWx1ZS56KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3cnLCB2YWx1ZS53KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KHBhcmFtcykge1xuICAgICAgICBpZiAoIXBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuICAgICAgICBpZiAoIWlzRW1wdHkocGFyYW1zLnN0ZXApKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKG5ldyBTdGVwQ29uc3RyYWludChwYXJhbXMuc3RlcCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbXB0eShwYXJhbXMubWF4KSB8fCAhaXNFbXB0eShwYXJhbXMubWluKSkge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChuZXcgUmFuZ2VDb25zdHJhaW50KHtcbiAgICAgICAgICAgICAgICBtYXg6IHBhcmFtcy5tYXgsXG4gICAgICAgICAgICAgICAgbWluOiBwYXJhbXMubWluLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQkMShwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludE5kQ29uc3RyYWludCh7XG4gICAgICAgICAgICBhc3NlbWJseTogUG9pbnQ0ZEFzc2VtYmx5LFxuICAgICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3gnIGluIHBhcmFtcyA/IHBhcmFtcy54IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd5JyBpbiBwYXJhbXMgPyBwYXJhbXMueSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCgneicgaW4gcGFyYW1zID8gcGFyYW1zLnogOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3cnIGluIHBhcmFtcyA/IHBhcmFtcy53IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVBeGlzKGluaXRpYWxWYWx1ZSwgY29uc3RyYWludCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpLFxuICAgICAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludCxcbiAgICAgICAgICAgIHRleHRQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSksXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IFBvaW50NGRJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1wb2ludDRkJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFQb2ludDRkLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICB4OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB5OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB6OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB3OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gcG9pbnQ0ZEZyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQkMShhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICBlcXVhbHM6IFBvaW50NGQuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUG9pbnQ0ZCxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBhcmdzLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICBpZiAoIShjIGluc3RhbmNlb2YgUG9pbnROZENvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludE5kVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDRkQXNzZW1ibHksXG4gICAgICAgICAgICAgICAgYXhlczogdmFsdWUucmF3VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLmdldENvbXBvbmVudHMoKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjb21wLCBpbmRleCkgPT4gY3JlYXRlQXhpcyhjb21wLCBjLmNvbXBvbmVudHNbaW5kZXhdKSksXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50KHBhcmFtcykge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuICAgICAgICBjb25zdCBsYyA9IGNyZWF0ZUxpc3RDb25zdHJhaW50KHBhcmFtcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKGxjKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKGxjKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUNvbnN0cmFpbnQoY29uc3RyYWludHMpO1xuICAgIH1cbiAgICBjb25zdCBTdHJpbmdJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1zdHJpbmcnLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZUxpc3RPcHRpb25zKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gc3RyaW5nRnJvbVVua25vd24sXG4gICAgICAgICAgICBjb25zdHJhaW50OiAoYXJncykgPT4gY3JlYXRlQ29uc3RyYWludChhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICB3cml0ZXI6IChfYXJncykgPT4gd3JpdGVQcmltaXRpdmUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhcmdzLmRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYyA9IGFyZ3MuY29uc3RyYWludDtcbiAgICAgICAgICAgIGlmIChjICYmIGZpbmRDb25zdHJhaW50KGMsIExpc3RDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IChfYSA9IGZpbmRMaXN0SXRlbXMoYykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBwYXJzZXI6ICh2KSA9PiB2LFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXRTdHJpbmcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgQ29uc3RhbnRzID0ge1xuICAgICAgICBtb25pdG9yOiB7XG4gICAgICAgICAgICBkZWZhdWx0SW50ZXJ2YWw6IDIwMCxcbiAgICAgICAgICAgIGRlZmF1bHRMaW5lQ291bnQ6IDMsXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSQyID0gQ2xhc3NOYW1lKCdtbGwnKTtcbiAgICBjbGFzcyBNdWx0aUxvZ1ZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlVXBkYXRlXyA9IHRoaXMub25WYWx1ZVVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVyXyA9IGNvbmZpZy5mb3JtYXR0ZXI7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMigpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0YXJlYUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgICAgICAgIHRleHRhcmVhRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQyKCdpJykpO1xuICAgICAgICAgICAgdGV4dGFyZWFFbGVtLnN0eWxlLmhlaWdodCA9IGBjYWxjKHZhcigtLWJsZC11cykgKiAke2NvbmZpZy5saW5lQ291bnR9KWA7XG4gICAgICAgICAgICB0ZXh0YXJlYUVsZW0ucmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQodGV4dGFyZWFFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0YXJlYUVsZW0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0YXJlYUVsZW1fID0gdGV4dGFyZWFFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZVVwZGF0ZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy50ZXh0YXJlYUVsZW1fO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2Nyb2xsID0gZWxlbS5zY3JvbGxUb3AgPT09IGVsZW0uc2Nyb2xsSGVpZ2h0IC0gZWxlbS5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZS5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2godGhpcy5mb3JtYXR0ZXJfKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbGVtLnRleHRDb250ZW50ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgZWxlbS5zY3JvbGxUb3AgPSBlbGVtLnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlVXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTXVsdGlMb2dDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgTXVsdGlMb2dWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IGNvbmZpZy5saW5lQ291bnQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDEgPSBDbGFzc05hbWUoJ3NnbCcpO1xuICAgIGNsYXNzIFNpbmdsZUxvZ1ZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlVXBkYXRlXyA9IHRoaXMub25WYWx1ZVVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVyXyA9IGNvbmZpZy5mb3JtYXR0ZXI7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQxKCdpJykpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlVXBkYXRlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBsYXN0VmFsdWUgPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPVxuICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5mb3JtYXR0ZXJfKGxhc3RWYWx1ZSkgOiAnJztcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlVXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2luZ2xlTG9nQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFNpbmdsZUxvZ1ZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjb25maWcuZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IEJvb2xlYW5Nb25pdG9yUGx1Z2luID0ge1xuICAgICAgICBpZDogJ21vbml0b3ItYm9vbCcsXG4gICAgICAgIHR5cGU6ICdtb25pdG9yJyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIGxpbmVDb3VudDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IGJvb2xGcm9tVW5rbm93bixcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmIChhcmdzLnZhbHVlLnJhd1ZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogQm9vbGVhbkZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IE11bHRpTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBCb29sZWFuRm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIGxpbmVDb3VudDogKF9hID0gYXJncy5wYXJhbXMubGluZUNvdW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBDb25zdGFudHMubW9uaXRvci5kZWZhdWx0TGluZUNvdW50LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgR3JhcGhDdXJzb3Ige1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmluZGV4XyA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGdldCBpbmRleCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4XztcbiAgICAgICAgfVxuICAgICAgICBzZXQgaW5kZXgoaW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLmluZGV4XyAhPT0gaW5kZXg7XG4gICAgICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhfID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSBDbGFzc05hbWUoJ2dybCcpO1xuICAgIGNsYXNzIEdyYXBoTG9nVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ3Vyc29yQ2hhbmdlXyA9IHRoaXMub25DdXJzb3JDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVVcGRhdGVfID0gdGhpcy5vblZhbHVlVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVyXyA9IGNvbmZpZy5mb3JtYXR0ZXI7XG4gICAgICAgICAgICB0aGlzLm1pblZhbHVlXyA9IGNvbmZpZy5taW5WYWx1ZTtcbiAgICAgICAgICAgIHRoaXMubWF4VmFsdWVfID0gY29uZmlnLm1heFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JfID0gY29uZmlnLmN1cnNvcjtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ3Vyc29yQ2hhbmdlXyk7XG4gICAgICAgICAgICBjb25zdCBzdmdFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdzdmcnKTtcbiAgICAgICAgICAgIHN2Z0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ2cnKSk7XG4gICAgICAgICAgICBzdmdFbGVtLnN0eWxlLmhlaWdodCA9IGBjYWxjKHZhcigtLWJsZC11cykgKiAke2NvbmZpZy5saW5lQ291bnR9KWA7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3ZnRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fID0gc3ZnRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdwb2x5bGluZScpO1xuICAgICAgICAgICAgdGhpcy5zdmdFbGVtXy5hcHBlbmRDaGlsZChsaW5lRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbGVtXyA9IGxpbmVFbGVtO1xuICAgICAgICAgICAgY29uc3QgdG9vbHRpcEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0b29sdGlwRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgndCcpLCBDbGFzc05hbWUoJ3R0JykoKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodG9vbHRpcEVsZW0pO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwRWxlbV8gPSB0b29sdGlwRWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVVcGRhdGVfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZ3JhcGhFbGVtZW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ZnRWxlbV87XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuc3ZnRWxlbV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMudmFsdWUucmF3VmFsdWUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMubWluVmFsdWVfO1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZV87XG4gICAgICAgICAgICBjb25zdCBwb2ludHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUuZm9yRWFjaCgodiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeCA9IG1hcFJhbmdlKGluZGV4LCAwLCBtYXhJbmRleCwgMCwgYm91bmRzLndpZHRoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gbWFwUmFuZ2UodiwgbWluLCBtYXgsIGJvdW5kcy5oZWlnaHQsIDApO1xuICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKFt4LCB5XS5qb2luKCcsJykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncG9pbnRzJywgcG9pbnRzLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICBjb25zdCB0b29sdGlwRWxlbSA9IHRoaXMudG9vbHRpcEVsZW1fO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlW3RoaXMuY3Vyc29yXy5pbmRleF07XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRvb2x0aXBFbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKCd0JywgJ2EnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdHggPSBtYXBSYW5nZSh0aGlzLmN1cnNvcl8uaW5kZXgsIDAsIG1heEluZGV4LCAwLCBib3VuZHMud2lkdGgpO1xuICAgICAgICAgICAgY29uc3QgdHkgPSBtYXBSYW5nZSh2YWx1ZSwgbWluLCBtYXgsIGJvdW5kcy5oZWlnaHQsIDApO1xuICAgICAgICAgICAgdG9vbHRpcEVsZW0uc3R5bGUubGVmdCA9IGAke3R4fXB4YDtcbiAgICAgICAgICAgIHRvb2x0aXBFbGVtLnN0eWxlLnRvcCA9IGAke3R5fXB4YDtcbiAgICAgICAgICAgIHRvb2x0aXBFbGVtLnRleHRDb250ZW50ID0gYCR7dGhpcy5mb3JtYXR0ZXJfKHZhbHVlKX1gO1xuICAgICAgICAgICAgaWYgKCF0b29sdGlwRWxlbS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKCd0JywgJ2EnKSkpIHtcbiAgICAgICAgICAgICAgICB0b29sdGlwRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgndCcsICdhJyksIGNsYXNzTmFtZSgndCcsICdpbicpKTtcbiAgICAgICAgICAgICAgICBmb3JjZVJlZmxvdyh0b29sdGlwRWxlbSk7XG4gICAgICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUoJ3QnLCAnaW4nKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZVVwZGF0ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICBvbkN1cnNvckNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEdyYXBoTG9nQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uR3JhcGhNb3VzZU1vdmVfID0gdGhpcy5vbkdyYXBoTW91c2VNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkdyYXBoTW91c2VMZWF2ZV8gPSB0aGlzLm9uR3JhcGhNb3VzZUxlYXZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkdyYXBoUG9pbnRlckRvd25fID0gdGhpcy5vbkdyYXBoUG9pbnRlckRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uR3JhcGhQb2ludGVyTW92ZV8gPSB0aGlzLm9uR3JhcGhQb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25HcmFwaFBvaW50ZXJVcF8gPSB0aGlzLm9uR3JhcGhQb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JfID0gbmV3IEdyYXBoQ3Vyc29yKCk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgR3JhcGhMb2dWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGN1cnNvcjogdGhpcy5jdXJzb3JfLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IGNvbmZpZy5saW5lQ291bnQsXG4gICAgICAgICAgICAgICAgbWF4VmFsdWU6IGNvbmZpZy5tYXhWYWx1ZSxcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZTogY29uZmlnLm1pblZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghc3VwcG9ydHNUb3VjaChkb2MpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbkdyYXBoTW91c2VNb3ZlXyk7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMub25HcmFwaE1vdXNlTGVhdmVfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBoID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBwaC5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vbkdyYXBoUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgICAgICBwaC5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vbkdyYXBoUG9pbnRlck1vdmVfKTtcbiAgICAgICAgICAgICAgICBwaC5lbWl0dGVyLm9uKCd1cCcsIHRoaXMub25HcmFwaFBvaW50ZXJVcF8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uR3JhcGhNb3VzZUxlYXZlXygpIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5pbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIG9uR3JhcGhNb3VzZU1vdmVfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBib3VuZHMgPSB0aGlzLnZpZXcuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5pbmRleCA9IE1hdGguZmxvb3IobWFwUmFuZ2UoZXYub2Zmc2V0WCwgMCwgYm91bmRzLndpZHRoLCAwLCB0aGlzLnZhbHVlLnJhd1ZhbHVlLmxlbmd0aCkpO1xuICAgICAgICB9XG4gICAgICAgIG9uR3JhcGhQb2ludGVyRG93bl8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMub25HcmFwaFBvaW50ZXJNb3ZlXyhldik7XG4gICAgICAgIH1cbiAgICAgICAgb25HcmFwaFBvaW50ZXJNb3ZlXyhldikge1xuICAgICAgICAgICAgaWYgKCFldi5kYXRhLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJzb3JfLmluZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jdXJzb3JfLmluZGV4ID0gTWF0aC5mbG9vcihtYXBSYW5nZShldi5kYXRhLnBvaW50LngsIDAsIGV2LmRhdGEuYm91bmRzLndpZHRoLCAwLCB0aGlzLnZhbHVlLnJhd1ZhbHVlLmxlbmd0aCkpO1xuICAgICAgICB9XG4gICAgICAgIG9uR3JhcGhQb2ludGVyVXBfKCkge1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JfLmluZGV4ID0gLTE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGb3JtYXR0ZXIocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiAnZm9ybWF0JyBpbiBwYXJhbXMgJiYgIWlzRW1wdHkocGFyYW1zLmZvcm1hdClcbiAgICAgICAgICAgID8gcGFyYW1zLmZvcm1hdFxuICAgICAgICAgICAgOiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVRleHRNb25pdG9yKGFyZ3MpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoYXJncy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVGb3JtYXR0ZXIoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IE11bHRpTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZUZvcm1hdHRlcihhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICBsaW5lQ291bnQ6IChfYSA9IGFyZ3MucGFyYW1zLmxpbmVDb3VudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogQ29uc3RhbnRzLm1vbml0b3IuZGVmYXVsdExpbmVDb3VudCxcbiAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUdyYXBoTW9uaXRvcihhcmdzKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICByZXR1cm4gbmV3IEdyYXBoTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZUZvcm1hdHRlcihhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICBsaW5lQ291bnQ6IChfYSA9IGFyZ3MucGFyYW1zLmxpbmVDb3VudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogQ29uc3RhbnRzLm1vbml0b3IuZGVmYXVsdExpbmVDb3VudCxcbiAgICAgICAgICAgIG1heFZhbHVlOiAoX2IgPSAoJ21heCcgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5tYXggOiBudWxsKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMTAwLFxuICAgICAgICAgICAgbWluVmFsdWU6IChfYyA9ICgnbWluJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLm1pbiA6IG51bGwpKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAwLFxuICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkU2hvd0dyYXBoKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gJ3ZpZXcnIGluIHBhcmFtcyAmJiBwYXJhbXMudmlldyA9PT0gJ2dyYXBoJztcbiAgICB9XG4gICAgY29uc3QgTnVtYmVyTW9uaXRvclBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdtb25pdG9yLW51bWJlcicsXG4gICAgICAgIHR5cGU6ICdtb25pdG9yJyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBwLm9wdGlvbmFsLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIGxpbmVDb3VudDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgbWF4OiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICBtaW46IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIHZpZXc6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIGRlZmF1bHRCdWZmZXJTaXplOiAocGFyYW1zKSA9PiAoc2hvdWxkU2hvd0dyYXBoKHBhcmFtcykgPyA2NCA6IDEpLFxuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IG51bWJlckZyb21Vbmtub3duLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgaWYgKHNob3VsZFNob3dHcmFwaChhcmdzLnBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlR3JhcGhNb25pdG9yKGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVRleHRNb25pdG9yKGFyZ3MpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBTdHJpbmdNb25pdG9yUGx1Z2luID0ge1xuICAgICAgICBpZDogJ21vbml0b3Itc3RyaW5nJyxcbiAgICAgICAgdHlwZTogJ21vbml0b3InLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIG11bHRpbGluZTogcC5vcHRpb25hbC5ib29sZWFuLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBzdHJpbmdGcm9tVW5rbm93bixcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG11bHRpbGluZSA9IHZhbHVlLnJhd1ZhbHVlLmxlbmd0aCA+IDEgfHxcbiAgICAgICAgICAgICAgICAoJ211bHRpbGluZScgaW4gYXJncy5wYXJhbXMgJiYgYXJncy5wYXJhbXMubXVsdGlsaW5lKTtcbiAgICAgICAgICAgIGlmIChtdWx0aWxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE11bHRpTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0U3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IChfYSA9IGFyZ3MucGFyYW1zLmxpbmVDb3VudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogQ29uc3RhbnRzLm1vbml0b3IuZGVmYXVsdExpbmVDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVMb2dDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdFN0cmluZyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjbGFzcyBJbnB1dEJpbmRpbmcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnJlYWRlciA9IGNvbmZpZy5yZWFkZXI7XG4gICAgICAgICAgICB0aGlzLndyaXRlciA9IGNvbmZpZy53cml0ZXI7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IGNvbmZpZy50YXJnZXQ7XG4gICAgICAgICAgICB0aGlzLnJlYWQoKTtcbiAgICAgICAgfVxuICAgICAgICByZWFkKCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSB0aGlzLnRhcmdldC5yZWFkKCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUgPSB0aGlzLnJlYWRlcih0YXJnZXRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVfKHJhd1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlcih0aGlzLnRhcmdldCwgcmF3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlXyhldi5yYXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgcmF3VmFsdWU6IGV2LnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5wdXRCaW5kaW5nQ29udHJvbGxlcihwbHVnaW4sIGFyZ3MpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGx1Z2luLmFjY2VwdChhcmdzLnRhcmdldC5yZWFkKCksIGFyZ3MucGFyYW1zKTtcbiAgICAgICAgaWYgKGlzRW1wdHkocmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgIGNvbnN0IHZhbHVlQXJncyA9IHtcbiAgICAgICAgICAgIHRhcmdldDogYXJncy50YXJnZXQsXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6IHJlc3VsdC5pbml0aWFsVmFsdWUsXG4gICAgICAgICAgICBwYXJhbXM6IHJlc3VsdC5wYXJhbXMsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHBsdWdpbi5iaW5kaW5nLnJlYWRlcih2YWx1ZUFyZ3MpO1xuICAgICAgICBjb25zdCBjb25zdHJhaW50ID0gcGx1Z2luLmJpbmRpbmcuY29uc3RyYWludFxuICAgICAgICAgICAgPyBwbHVnaW4uYmluZGluZy5jb25zdHJhaW50KHZhbHVlQXJncylcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNyZWF0ZVZhbHVlKHJlYWRlcihyZXN1bHQuaW5pdGlhbFZhbHVlKSwge1xuICAgICAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludCxcbiAgICAgICAgICAgIGVxdWFsczogcGx1Z2luLmJpbmRpbmcuZXF1YWxzLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYmluZGluZyA9IG5ldyBJbnB1dEJpbmRpbmcoe1xuICAgICAgICAgICAgcmVhZGVyOiByZWFkZXIsXG4gICAgICAgICAgICB0YXJnZXQ6IGFyZ3MudGFyZ2V0LFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgd3JpdGVyOiBwbHVnaW4uYmluZGluZy53cml0ZXIodmFsdWVBcmdzKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRpc2FibGVkID0gcC5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zLmRpc2FibGVkKS52YWx1ZTtcbiAgICAgICAgY29uc3QgaGlkZGVuID0gcC5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zLmhpZGRlbikudmFsdWU7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBwbHVnaW4uY29udHJvbGxlcih7XG4gICAgICAgICAgICBjb25zdHJhaW50OiBjb25zdHJhaW50LFxuICAgICAgICAgICAgZG9jdW1lbnQ6IGFyZ3MuZG9jdW1lbnQsXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6IHJlc3VsdC5pbml0aWFsVmFsdWUsXG4gICAgICAgICAgICBwYXJhbXM6IHJlc3VsdC5wYXJhbXMsXG4gICAgICAgICAgICB2YWx1ZTogYmluZGluZy52YWx1ZSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogaGlkZGVuLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHAub3B0aW9uYWwuc3RyaW5nKGFyZ3MucGFyYW1zLmxhYmVsKS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnB1dEJpbmRpbmdDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIGJpbmRpbmc6IGJpbmRpbmcsXG4gICAgICAgICAgICBibGFkZTogY3JlYXRlQmxhZGUoKSxcbiAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwgfHwgYXJncy50YXJnZXQua2V5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIE1vbml0b3JCaW5kaW5nIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVGlja18gPSB0aGlzLm9uVGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucmVhZGVyXyA9IGNvbmZpZy5yZWFkZXI7XG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IGNvbmZpZy50YXJnZXQ7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudGlja2VyID0gY29uZmlnLnRpY2tlcjtcbiAgICAgICAgICAgIHRoaXMudGlja2VyLmVtaXR0ZXIub24oJ3RpY2snLCB0aGlzLm9uVGlja18pO1xuICAgICAgICAgICAgdGhpcy5yZWFkKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcG9zZSgpIHtcbiAgICAgICAgICAgIHRoaXMudGlja2VyLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZWFkKCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSB0aGlzLnRhcmdldC5yZWFkKCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMucmVhZGVyXyh0YXJnZXRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gY3JlYXRlUHVzaGVkQnVmZmVyKGJ1ZmZlciwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICByYXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25UaWNrXyhfKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVRpY2tlcihkb2N1bWVudCwgaW50ZXJ2YWwpIHtcbiAgICAgICAgcmV0dXJuIGludGVydmFsID09PSAwXG4gICAgICAgICAgICA/IG5ldyBNYW51YWxUaWNrZXIoKVxuICAgICAgICAgICAgOiBuZXcgSW50ZXJ2YWxUaWNrZXIoZG9jdW1lbnQsIGludGVydmFsICE9PSBudWxsICYmIGludGVydmFsICE9PSB2b2lkIDAgPyBpbnRlcnZhbCA6IENvbnN0YW50cy5tb25pdG9yLmRlZmF1bHRJbnRlcnZhbCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU1vbml0b3JCaW5kaW5nQ29udHJvbGxlcihwbHVnaW4sIGFyZ3MpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGNvbnN0IFAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwbHVnaW4uYWNjZXB0KGFyZ3MudGFyZ2V0LnJlYWQoKSwgYXJncy5wYXJhbXMpO1xuICAgICAgICBpZiAoaXNFbXB0eShyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiaW5kaW5nQXJncyA9IHtcbiAgICAgICAgICAgIHRhcmdldDogYXJncy50YXJnZXQsXG4gICAgICAgICAgICBpbml0aWFsVmFsdWU6IHJlc3VsdC5pbml0aWFsVmFsdWUsXG4gICAgICAgICAgICBwYXJhbXM6IHJlc3VsdC5wYXJhbXMsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHBsdWdpbi5iaW5kaW5nLnJlYWRlcihiaW5kaW5nQXJncyk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlclNpemUgPSAoX2IgPSAoX2EgPSBQLm9wdGlvbmFsLm51bWJlcihhcmdzLnBhcmFtcy5idWZmZXJTaXplKS52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHBsdWdpbi5iaW5kaW5nLmRlZmF1bHRCdWZmZXJTaXplICYmXG4gICAgICAgICAgICBwbHVnaW4uYmluZGluZy5kZWZhdWx0QnVmZmVyU2l6ZShyZXN1bHQucGFyYW1zKSkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDE7XG4gICAgICAgIGNvbnN0IGludGVydmFsID0gUC5vcHRpb25hbC5udW1iZXIoYXJncy5wYXJhbXMuaW50ZXJ2YWwpLnZhbHVlO1xuICAgICAgICBjb25zdCBiaW5kaW5nID0gbmV3IE1vbml0b3JCaW5kaW5nKHtcbiAgICAgICAgICAgIHJlYWRlcjogcmVhZGVyLFxuICAgICAgICAgICAgdGFyZ2V0OiBhcmdzLnRhcmdldCxcbiAgICAgICAgICAgIHRpY2tlcjogY3JlYXRlVGlja2VyKGFyZ3MuZG9jdW1lbnQsIGludGVydmFsKSxcbiAgICAgICAgICAgIHZhbHVlOiBpbml0aWFsaXplQnVmZmVyKGJ1ZmZlclNpemUpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBQLm9wdGlvbmFsLmJvb2xlYW4oYXJncy5wYXJhbXMuZGlzYWJsZWQpLnZhbHVlO1xuICAgICAgICBjb25zdCBoaWRkZW4gPSBQLm9wdGlvbmFsLmJvb2xlYW4oYXJncy5wYXJhbXMuaGlkZGVuKS52YWx1ZTtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IHBsdWdpbi5jb250cm9sbGVyKHtcbiAgICAgICAgICAgIGRvY3VtZW50OiBhcmdzLmRvY3VtZW50LFxuICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQucGFyYW1zLFxuICAgICAgICAgICAgdmFsdWU6IGJpbmRpbmcudmFsdWUsXG4gICAgICAgICAgICB2aWV3UHJvcHM6IFZpZXdQcm9wcy5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICBoaWRkZW46IGhpZGRlbixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSAoX2MgPSBQLm9wdGlvbmFsLnN0cmluZyhhcmdzLnBhcmFtcy5sYWJlbCkudmFsdWUpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGFyZ3MudGFyZ2V0LmtleTtcbiAgICAgICAgcmV0dXJuIG5ldyBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgYmluZGluZzogYmluZGluZyxcbiAgICAgICAgICAgIGJsYWRlOiBjcmVhdGVCbGFkZSgpLFxuICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdmFsdWVDb250cm9sbGVyOiBjb250cm9sbGVyLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBQbHVnaW5Qb29sIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnNNYXBfID0ge1xuICAgICAgICAgICAgICAgIGJsYWRlczogW10sXG4gICAgICAgICAgICAgICAgaW5wdXRzOiBbXSxcbiAgICAgICAgICAgICAgICBtb25pdG9yczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGdldEFsbCgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wbHVnaW5zTWFwXy5ibGFkZXMsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wbHVnaW5zTWFwXy5pbnB1dHMsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wbHVnaW5zTWFwXy5tb25pdG9ycyxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXIocikge1xuICAgICAgICAgICAgaWYgKHIudHlwZSA9PT0gJ2JsYWRlJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc01hcF8uYmxhZGVzLnVuc2hpZnQocik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyLnR5cGUgPT09ICdpbnB1dCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnNNYXBfLmlucHV0cy51bnNoaWZ0KHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoci50eXBlID09PSAnbW9uaXRvcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnNNYXBfLm1vbml0b3JzLnVuc2hpZnQocik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlSW5wdXQoZG9jdW1lbnQsIHRhcmdldCwgcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSB0YXJnZXQucmVhZCgpO1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkoaW5pdGlhbFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0YXJnZXQua2V5LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbm9tYXRjaGluZ2NvbnRyb2xsZXInLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBsdWdpbnNNYXBfLmlucHV0cy5yZWR1Y2UoKHJlc3VsdCwgcGx1Z2luKSA9PiByZXN1bHQgfHxcbiAgICAgICAgICAgICAgICBjcmVhdGVJbnB1dEJpbmRpbmdDb250cm9sbGVyKHBsdWdpbiwge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudDogZG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICB9KSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoYmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHBFcnJvcih7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHRhcmdldC5rZXksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnbm9tYXRjaGluZ2NvbnRyb2xsZXInLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlTW9uaXRvcihkb2N1bWVudCwgdGFyZ2V0LCBwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gdGhpcy5wbHVnaW5zTWFwXy5tb25pdG9ycy5yZWR1Y2UoKHJlc3VsdCwgcGx1Z2luKSA9PiByZXN1bHQgfHxcbiAgICAgICAgICAgICAgICBjcmVhdGVNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIocGx1Z2luLCB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50OiBkb2N1bWVudCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgICAgIH0pLCBudWxsKTtcbiAgICAgICAgICAgIGlmIChiYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogdGFyZ2V0LmtleSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdub21hdGNoaW5nY29udHJvbGxlcicsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVCbGFkZShkb2N1bWVudCwgcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucGx1Z2luc01hcF8uYmxhZGVzLnJlZHVjZSgocmVzdWx0LCBwbHVnaW4pID0+IHJlc3VsdCB8fFxuICAgICAgICAgICAgICAgIGNyZWF0ZUJsYWRlQ29udHJvbGxlcihwbHVnaW4sIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQ6IGRvY3VtZW50LFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICB9KSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoIWJjKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRwRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbm9tYXRjaGluZ3ZpZXcnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVCbGFkZUFwaShiYykge1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgSW5wdXRCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW5wdXRCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTW9uaXRvckJpbmRpbmdBcGkoYmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgUmFja0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJhY2tBcGkoYmMsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5wbHVnaW5zTWFwXy5ibGFkZXMucmVkdWNlKChyZXN1bHQsIHBsdWdpbikgPT4gcmVzdWx0IHx8XG4gICAgICAgICAgICAgICAgcGx1Z2luLmFwaSh7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXI6IGJjLFxuICAgICAgICAgICAgICAgICAgICBwb29sOiB0aGlzLFxuICAgICAgICAgICAgICAgIH0pLCBudWxsKTtcbiAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRQbHVnaW5Qb29sKCkge1xuICAgICAgICBjb25zdCBwb29sID0gbmV3IFBsdWdpblBvb2woKTtcbiAgICAgICAgW1xuICAgICAgICAgICAgUG9pbnQyZElucHV0UGx1Z2luLFxuICAgICAgICAgICAgUG9pbnQzZElucHV0UGx1Z2luLFxuICAgICAgICAgICAgUG9pbnQ0ZElucHV0UGx1Z2luLFxuICAgICAgICAgICAgU3RyaW5nSW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBOdW1iZXJJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIFN0cmluZ0NvbG9ySW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBPYmplY3RDb2xvcklucHV0UGx1Z2luLFxuICAgICAgICAgICAgTnVtYmVyQ29sb3JJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIEJvb2xlYW5JbnB1dFBsdWdpbixcbiAgICAgICAgICAgIEJvb2xlYW5Nb25pdG9yUGx1Z2luLFxuICAgICAgICAgICAgU3RyaW5nTW9uaXRvclBsdWdpbixcbiAgICAgICAgICAgIE51bWJlck1vbml0b3JQbHVnaW4sXG4gICAgICAgICAgICBCdXR0b25CbGFkZVBsdWdpbixcbiAgICAgICAgICAgIEZvbGRlckJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgU2VwYXJhdG9yQmxhZGVQbHVnaW4sXG4gICAgICAgICAgICBUYWJCbGFkZVBsdWdpbixcbiAgICAgICAgXS5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICBwb29sLnJlZ2lzdGVyKHApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBvb2w7XG4gICAgfVxuXG4gICAgY2xhc3MgTGlzdEFwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQodGhpcywgZXYucmF3VmFsdWUpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLmdldCgnb3B0aW9ucycpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBvcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLnNldCgnb3B0aW9ucycsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLnJhd1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2xpZGVyQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBDaGFuZ2VFdmVudCh0aGlzLCBldi5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ2xhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGxhYmVsKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IG1heFZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnNsaWRlckNvbnRyb2xsZXIucHJvcHMuZ2V0KCdtYXhWYWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBtYXhWYWx1ZShtYXhWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIuc2xpZGVyQ29udHJvbGxlci5wcm9wcy5zZXQoJ21heFZhbHVlJywgbWF4VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBtaW5WYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5zbGlkZXJDb250cm9sbGVyLnByb3BzLmdldCgnbWluVmFsdWUnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbWluVmFsdWUobWluVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnNsaWRlckNvbnRyb2xsZXIucHJvcHMuc2V0KCdtaW5WYWx1ZScsIG1pblZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5yYXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRleHRBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KHRoaXMsIGV2LnJhd1ZhbHVlKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZm9ybWF0dGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLmdldCgnZm9ybWF0dGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGZvcm1hdHRlcihmb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLnNldCgnZm9ybWF0dGVyJywgZm9ybWF0dGVyKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5yYXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IExpc3RCbGFkZVBsdWdpbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogJ2xpc3QnLFxuICAgICAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogcC5yZXF1aXJlZC5jdXN0b20ocGFyc2VMaXN0T3B0aW9ucyksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwLnJlcXVpcmVkLnJhdyxcbiAgICAgICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgnbGlzdCcpLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogcC5vcHRpb25hbC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHsgcGFyYW1zOiByZXN1bHQgfSA6IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWMgPSBuZXcgTGlzdENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBub3JtYWxpemVMaXN0T3B0aW9ucyhhcmdzLnBhcmFtcy5vcHRpb25zKSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZShhcmdzLnBhcmFtcy52YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMYWJlbGVkVmFsdWVDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhcmdzLnBhcmFtcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogaWMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBMYWJlbGVkVmFsdWVDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyLnZhbHVlQ29udHJvbGxlciBpbnN0YW5jZW9mIExpc3RDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXN0QXBpKGFyZ3MuY29udHJvbGxlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0pKCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXhwb3J0UHJlc2V0SnNvbih0YXJnZXRzKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXRzLnJlZHVjZSgocmVzdWx0LCB0YXJnZXQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlc3VsdCwge1xuICAgICAgICAgICAgICAgIFt0YXJnZXQucHJlc2V0S2V5XTogdGFyZ2V0LnJlYWQoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbXBvcnRQcmVzZXRKc29uKHRhcmdldHMsIHByZXNldCkge1xuICAgICAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcmVzZXRbdGFyZ2V0LnByZXNldEtleV07XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC53cml0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIFJvb3RBcGkgZXh0ZW5kcyBGb2xkZXJBcGkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlciwgcG9vbCkge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlciwgcG9vbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52aWV3LmVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEltcG9ydHMgYSBwcmVzZXQgb2YgYWxsIGlucHV0cy5cbiAgICAgICAgICogQHBhcmFtIHByZXNldCBUaGUgcHJlc2V0IG9iamVjdCB0byBpbXBvcnQuXG4gICAgICAgICAqL1xuICAgICAgICBpbXBvcnRQcmVzZXQocHJlc2V0KSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy5jb250cm9sbGVyXy5yYWNrQ29udHJvbGxlci5yYWNrXG4gICAgICAgICAgICAgICAgLmZpbmQoSW5wdXRCaW5kaW5nQ29udHJvbGxlcilcbiAgICAgICAgICAgICAgICAubWFwKChpYmMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWJjLmJpbmRpbmcudGFyZ2V0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbXBvcnRQcmVzZXRKc29uKHRhcmdldHMsIHByZXNldCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogRXhwb3J0cyBhIHByZXNldCBvZiBhbGwgaW5wdXRzLlxuICAgICAgICAgKiBAcmV0dXJuIEFuIGV4cG9ydGVkIHByZXNldCBvYmplY3QuXG4gICAgICAgICAqL1xuICAgICAgICBleHBvcnRQcmVzZXQoKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy5jb250cm9sbGVyXy5yYWNrQ29udHJvbGxlci5yYWNrXG4gICAgICAgICAgICAgICAgLmZpbmQoSW5wdXRCaW5kaW5nQ29udHJvbGxlcilcbiAgICAgICAgICAgICAgICAubWFwKChpYmMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWJjLmJpbmRpbmcudGFyZ2V0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0UHJlc2V0SnNvbih0YXJnZXRzKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogUmVmcmVzaGVzIGFsbCBiaW5kaW5ncyBvZiB0aGUgcGFuZS5cbiAgICAgICAgICovXG4gICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICAvLyBGb3JjZS1yZWFkIGFsbCBpbnB1dCBiaW5kaW5nc1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yYWNrQ29udHJvbGxlci5yYWNrXG4gICAgICAgICAgICAgICAgLmZpbmQoSW5wdXRCaW5kaW5nQ29udHJvbGxlcilcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoaWJjKSA9PiB7XG4gICAgICAgICAgICAgICAgaWJjLmJpbmRpbmcucmVhZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBGb3JjZS1yZWFkIGFsbCBtb25pdG9yIGJpbmRpbmdzXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJhY2tDb250cm9sbGVyLnJhY2tcbiAgICAgICAgICAgICAgICAuZmluZChNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKG1iYykgPT4ge1xuICAgICAgICAgICAgICAgIG1iYy5iaW5kaW5nLnJlYWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUm9vdENvbnRyb2xsZXIgZXh0ZW5kcyBGb2xkZXJDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBjb25maWcuZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBTbGlkZXJCbGFkZVBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdzbGlkZXInLFxuICAgICAgICB0eXBlOiAnYmxhZGUnLFxuICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIG1heDogcC5yZXF1aXJlZC5udW1iZXIsXG4gICAgICAgICAgICAgICAgbWluOiBwLnJlcXVpcmVkLm51bWJlcixcbiAgICAgICAgICAgICAgICB2aWV3OiBwLnJlcXVpcmVkLmNvbnN0YW50KCdzbGlkZXInKSxcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHAub3B0aW9uYWwuZnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgbGFiZWw6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHsgcGFyYW1zOiByZXN1bHQgfSA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGNvbnN0IHYgPSAoX2EgPSBhcmdzLnBhcmFtcy52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcbiAgICAgICAgICAgIGNvbnN0IHZjID0gbmV3IFNsaWRlclRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBiYXNlU3RlcDogMSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHNsaWRlclByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWU6IGFyZ3MucGFyYW1zLm1heCxcbiAgICAgICAgICAgICAgICAgICAgbWluVmFsdWU6IGFyZ3MucGFyYW1zLm1pbixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0ZXh0UHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiBnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUodW5kZWZpbmVkLCB2KSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiAoX2IgPSBhcmdzLnBhcmFtcy5mb3JtYXQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bWJlclRvU3RyaW5nLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZSh2KSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IExhYmVsZWRWYWx1ZUNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGFyZ3MucGFyYW1zLmxhYmVsLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogdmMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIExhYmVsZWRWYWx1ZUNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIudmFsdWVDb250cm9sbGVyIGluc3RhbmNlb2YgU2xpZGVyVGV4dENvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNsaWRlckFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBUZXh0QmxhZGVQbHVnaW4gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6ICd0ZXh0JyxcbiAgICAgICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlOiBwLnJlcXVpcmVkLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcC5yZXF1aXJlZC5yYXcsXG4gICAgICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ3RleHQnKSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBwLm9wdGlvbmFsLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogcC5vcHRpb25hbC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHsgcGFyYW1zOiByZXN1bHQgfSA6IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IGljID0gbmV3IFRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VyOiBhcmdzLnBhcmFtcy5wYXJzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiAoX2EgPSBhcmdzLnBhcmFtcy5mb3JtYXQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICgodikgPT4gU3RyaW5nKHYpKSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZShhcmdzLnBhcmFtcy52YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMYWJlbGVkVmFsdWVDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhcmdzLnBhcmFtcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogaWMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBMYWJlbGVkVmFsdWVDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyLnZhbHVlQ29udHJvbGxlciBpbnN0YW5jZW9mIFRleHRDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0QXBpKGFyZ3MuY29udHJvbGxlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0pKCk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0V3JhcHBlckVsZW1lbnQoZG9jKSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWUoJ2RmdycpKCkpO1xuICAgICAgICBpZiAoZG9jLmJvZHkpIHtcbiAgICAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGVsZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbGVtO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbWJlZFN0eWxlKGRvYywgaWQsIGNzcykge1xuICAgICAgICBpZiAoZG9jLnF1ZXJ5U2VsZWN0b3IoYHN0eWxlW2RhdGEtdHAtc3R5bGU9JHtpZH1dYCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHlsZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgc3R5bGVFbGVtLmRhdGFzZXQudHBTdHlsZSA9IGlkO1xuICAgICAgICBzdHlsZUVsZW0udGV4dENvbnRlbnQgPSBjc3M7XG4gICAgICAgIGRvYy5oZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxlbSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByb290IHBhbmUgb2YgVHdlYWtwYW5lLlxuICAgICAqL1xuICAgIGNsYXNzIFBhbmUgZXh0ZW5kcyBSb290QXBpIHtcbiAgICAgICAgY29uc3RydWN0b3Iob3B0X2NvbmZpZykge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gb3B0X2NvbmZpZyB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IChfYSA9IGNvbmZpZy5kb2N1bWVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZ2V0V2luZG93RG9jdW1lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvb2wgPSBjcmVhdGVEZWZhdWx0UGx1Z2luUG9vbCgpO1xuICAgICAgICAgICAgY29uc3Qgcm9vdENvbnRyb2xsZXIgPSBuZXcgUm9vdENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGNvbmZpZy5leHBhbmRlZCxcbiAgICAgICAgICAgICAgICBibGFkZTogY3JlYXRlQmxhZGUoKSxcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBjb25maWcudGl0bGUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBWaWV3UHJvcHMuY3JlYXRlKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN1cGVyKHJvb3RDb250cm9sbGVyLCBwb29sKTtcbiAgICAgICAgICAgIHRoaXMucG9vbF8gPSBwb29sO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXJFbGVtXyA9IGNvbmZpZy5jb250YWluZXIgfHwgY3JlYXRlRGVmYXVsdFdyYXBwZXJFbGVtZW50KGRvYyk7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1fLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmRvY18gPSBkb2M7XG4gICAgICAgICAgICB0aGlzLnVzZXNEZWZhdWx0V3JhcHBlcl8gPSAhY29uZmlnLmNvbnRhaW5lcjtcbiAgICAgICAgICAgIHRoaXMuc2V0VXBEZWZhdWx0UGx1Z2luc18oKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZG9jdW1lbnQoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZG9jXykge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2NfO1xuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJFbGVtID0gdGhpcy5jb250YWluZXJFbGVtXztcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyRWxlbSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy51c2VzRGVmYXVsdFdyYXBwZXJfKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50RWxlbSA9IGNvbnRhaW5lckVsZW0ucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50RWxlbSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtLnJlbW92ZUNoaWxkKGNvbnRhaW5lckVsZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbV8gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kb2NfID0gbnVsbDtcbiAgICAgICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZWdpc3RlclBsdWdpbihidW5kbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbnMgPSAncGx1Z2luJyBpbiBidW5kbGVcbiAgICAgICAgICAgICAgICA/IFtidW5kbGUucGx1Z2luXVxuICAgICAgICAgICAgICAgIDogJ3BsdWdpbnMnIGluIGJ1bmRsZVxuICAgICAgICAgICAgICAgICAgICA/IGJ1bmRsZS5wbHVnaW5zXG4gICAgICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgICBwbHVnaW5zLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvb2xfLnJlZ2lzdGVyKHApO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1iZWRQbHVnaW5TdHlsZV8ocCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbWJlZFBsdWdpblN0eWxlXyhwbHVnaW4pIHtcbiAgICAgICAgICAgIGlmIChwbHVnaW4uY3NzKSB7XG4gICAgICAgICAgICAgICAgZW1iZWRTdHlsZSh0aGlzLmRvY3VtZW50LCBgcGx1Z2luLSR7cGx1Z2luLmlkfWAsIHBsdWdpbi5jc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFVwRGVmYXVsdFBsdWdpbnNfKCkge1xuICAgICAgICAgICAgLy8gTk9URTogVGhpcyBzdHJpbmcgbGl0ZXJhbCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGRlZmF1bHQgQ1NTIGJ5IFJvbGx1cCBhdCB0aGUgY29tcGlsYXRpb24gdGltZVxuICAgICAgICAgICAgZW1iZWRTdHlsZSh0aGlzLmRvY3VtZW50LCAnZGVmYXVsdCcsICcudHAtdGJpdl9iLC50cC1jb2x0eHR2X21zLC50cC1ja2J2X2ksLnRwLXJvdHZfYiwudHAtZmxkdl9iLC50cC1tbGx2X2ksLnRwLXNnbHZfaSwudHAtZ3Jsdl9nLC50cC10eHR2X2ksLnRwLXAyZHB2X3AsLnRwLWNvbHN3dl9zdywudHAtcDJkdl9iLC50cC1idG52X2IsLnRwLWxzdHZfc3std2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItd2lkdGg6MDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MH0udHAtcDJkdl9iLC50cC1idG52X2IsLnRwLWxzdHZfc3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2NvbG9yOnZhcigtLWJ0bi1mZyk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztmb250LXdlaWdodDpib2xkO2hlaWdodDp2YXIoLS1ibGQtdXMpO2xpbmUtaGVpZ2h0OnZhcigtLWJsZC11cyk7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS50cC1wMmR2X2I6aG92ZXIsLnRwLWJ0bnZfYjpob3ZlciwudHAtbHN0dl9zOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnLWgpfS50cC1wMmR2X2I6Zm9jdXMsLnRwLWJ0bnZfYjpmb2N1cywudHAtbHN0dl9zOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnLWYpfS50cC1wMmR2X2I6YWN0aXZlLC50cC1idG52X2I6YWN0aXZlLC50cC1sc3R2X3M6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnLWEpfS50cC1wMmR2X2I6ZGlzYWJsZWQsLnRwLWJ0bnZfYjpkaXNhYmxlZCwudHAtbHN0dl9zOmRpc2FibGVke29wYWNpdHk6LjV9LnRwLXR4dHZfaSwudHAtcDJkcHZfcCwudHAtY29sc3d2X3N3e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0taW4tZmcpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7aGVpZ2h0OnZhcigtLWJsZC11cyk7bGluZS1oZWlnaHQ6dmFyKC0tYmxkLXVzKTttaW4td2lkdGg6MDt3aWR0aDoxMDAlfS50cC10eHR2X2k6aG92ZXIsLnRwLXAyZHB2X3A6aG92ZXIsLnRwLWNvbHN3dl9zdzpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWgpfS50cC10eHR2X2k6Zm9jdXMsLnRwLXAyZHB2X3A6Zm9jdXMsLnRwLWNvbHN3dl9zdzpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWYpfS50cC10eHR2X2k6YWN0aXZlLC50cC1wMmRwdl9wOmFjdGl2ZSwudHAtY29sc3d2X3N3OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWEpfS50cC10eHR2X2k6ZGlzYWJsZWQsLnRwLXAyZHB2X3A6ZGlzYWJsZWQsLnRwLWNvbHN3dl9zdzpkaXNhYmxlZHtvcGFjaXR5Oi41fS50cC1tbGx2X2ksLnRwLXNnbHZfaSwudHAtZ3Jsdl9ne2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW8tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW8tZmcpO2hlaWdodDp2YXIoLS1ibGQtdXMpO3Njcm9sbGJhci1jb2xvcjpjdXJyZW50Q29sb3IgdHJhbnNwYXJlbnQ7c2Nyb2xsYmFyLXdpZHRoOnRoaW47d2lkdGg6MTAwJX0udHAtbWxsdl9pOjotd2Via2l0LXNjcm9sbGJhciwudHAtc2dsdl9pOjotd2Via2l0LXNjcm9sbGJhciwudHAtZ3Jsdl9nOjotd2Via2l0LXNjcm9sbGJhcntoZWlnaHQ6OHB4O3dpZHRoOjhweH0udHAtbWxsdl9pOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIsLnRwLXNnbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyLC50cC1ncmx2X2c6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS50cC1tbGx2X2k6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLC50cC1zZ2x2X2k6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLC50cC1ncmx2X2c6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjtib3JkZXI6dHJhbnNwYXJlbnQgc29saWQgMnB4O2JvcmRlci1yYWRpdXM6NHB4fS50cC1yb3R2ey0tZm9udC1mYW1pbHk6IHZhcigtLXRwLWZvbnQtZmFtaWx5LCBSb2JvdG8gTW9ubywgU291cmNlIENvZGUgUHJvLCBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlKTstLWJzLWJyOiB2YXIoLS10cC1iYXNlLWJvcmRlci1yYWRpdXMsIDZweCk7LS1jbnQtaC1wOiB2YXIoLS10cC1jb250YWluZXItaG9yaXpvbnRhbC1wYWRkaW5nLCA0cHgpOy0tY250LXYtcDogdmFyKC0tdHAtY29udGFpbmVyLXZlcnRpY2FsLXBhZGRpbmcsIDRweCk7LS1lbG0tYnI6IHZhcigtLXRwLWVsZW1lbnQtYm9yZGVyLXJhZGl1cywgMnB4KTstLWJsZC1zOiB2YXIoLS10cC1ibGFkZS1zcGFjaW5nLCA0cHgpOy0tYmxkLXVzOiB2YXIoLS10cC1ibGFkZS11bml0LXNpemUsIDIwcHgpOy0tYnMtYmc6IHZhcigtLXRwLWJhc2UtYmFja2dyb3VuZC1jb2xvciwgIzI4MjkyZSk7LS1icy1zaDogdmFyKC0tdHAtYmFzZS1zaGFkb3ctY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4yKSk7LS1idG4tYmc6IHZhcigtLXRwLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLCAjYWRhZmI4KTstLWJ0bi1iZy1hOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvci1hY3RpdmUsICNkNmQ3ZGIpOy0tYnRuLWJnLWY6IHZhcigtLXRwLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLWZvY3VzLCAjYzhjYWQwKTstLWJ0bi1iZy1oOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvci1ob3ZlciwgI2JiYmNjNCk7LS1idG4tZmc6IHZhcigtLXRwLWJ1dHRvbi1mb3JlZ3JvdW5kLWNvbG9yLCAjMjgyOTJlKTstLWNudC1iZzogdmFyKC0tdHAtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4xKSk7LS1jbnQtYmctYTogdmFyKC0tdHAtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3ItYWN0aXZlLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMjUpKTstLWNudC1iZy1mOiB2YXIoLS10cC1jb250YWluZXItYmFja2dyb3VuZC1jb2xvci1mb2N1cywgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjIpKTstLWNudC1iZy1oOiB2YXIoLS10cC1jb250YWluZXItYmFja2dyb3VuZC1jb2xvci1ob3ZlciwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjE1KSk7LS1jbnQtZmc6IHZhcigtLXRwLWNvbnRhaW5lci1mb3JlZ3JvdW5kLWNvbG9yLCAjYmJiY2M0KTstLWluLWJnOiB2YXIoLS10cC1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMSkpOy0taW4tYmctYTogdmFyKC0tdHAtaW5wdXQtYmFja2dyb3VuZC1jb2xvci1hY3RpdmUsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4yNSkpOy0taW4tYmctZjogdmFyKC0tdHAtaW5wdXQtYmFja2dyb3VuZC1jb2xvci1mb2N1cywgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjIpKTstLWluLWJnLWg6IHZhcigtLXRwLWlucHV0LWJhY2tncm91bmQtY29sb3ItaG92ZXIsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4xNSkpOy0taW4tZmc6IHZhcigtLXRwLWlucHV0LWZvcmVncm91bmQtY29sb3IsICNiYmJjYzQpOy0tbGJsLWZnOiB2YXIoLS10cC1sYWJlbC1mb3JlZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuNykpOy0tbW8tYmc6IHZhcigtLXRwLW1vbml0b3ItYmFja2dyb3VuZC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjIpKTstLW1vLWZnOiB2YXIoLS10cC1tb25pdG9yLWZvcmVncm91bmQtY29sb3IsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC43KSk7LS1ncnYtZmc6IHZhcigtLXRwLWdyb292ZS1mb3JlZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMSkpfS50cC1yb3R2X2M+LnRwLWNudHYudHAtdi1sc3QsLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtY250di50cC12LWxzdCwudHAtZmxkdl9jPi50cC1jbnR2LnRwLXYtbHN0e21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jbnQtdi1wKSl9LnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9jLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYywudHAtZmxkdl9jPi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2N7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYiwudHAtdGFidl9jIC50cC1icmt2Pi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2IsLnRwLWZsZHZfYz4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0udHAtcm90dl9jPio6bm90KC50cC12LWZzdCksLnRwLXRhYnZfYyAudHAtYnJrdj4qOm5vdCgudHAtdi1mc3QpLC50cC1mbGR2X2M+Kjpub3QoLnRwLXYtZnN0KXttYXJnaW4tdG9wOnZhcigtLWJsZC1zKX0udHAtcm90dl9jPi50cC1zcHJ2Om5vdCgudHAtdi1mc3QpLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLXNwcnY6bm90KC50cC12LWZzdCksLnRwLWZsZHZfYz4udHAtc3Bydjpub3QoLnRwLXYtZnN0KSwudHAtcm90dl9jPi50cC1jbnR2Om5vdCgudHAtdi1mc3QpLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWNudHY6bm90KC50cC12LWZzdCksLnRwLWZsZHZfYz4udHAtY250djpub3QoLnRwLXYtZnN0KXttYXJnaW4tdG9wOnZhcigtLWNudC12LXApfS50cC1yb3R2X2M+LnRwLXNwcnYrKjpub3QoLnRwLXYtaGlkZGVuKSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1zcHJ2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLWZsZHZfYz4udHAtc3BydisqOm5vdCgudHAtdi1oaWRkZW4pLC50cC1yb3R2X2M+LnRwLWNudHYrKjpub3QoLnRwLXYtaGlkZGVuKSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLWZsZHZfYz4udHAtY250disqOm5vdCgudHAtdi1oaWRkZW4pe21hcmdpbi10b3A6dmFyKC0tY250LXYtcCl9LnRwLXJvdHZfYz4udHAtc3Bydjpub3QoLnRwLXYtaGlkZGVuKSsudHAtc3BydiwudHAtdGFidl9jIC50cC1icmt2Pi50cC1zcHJ2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1zcHJ2LC50cC1mbGR2X2M+LnRwLXNwcnY6bm90KC50cC12LWhpZGRlbikrLnRwLXNwcnYsLnRwLXJvdHZfYz4udHAtY250djpub3QoLnRwLXYtaGlkZGVuKSsudHAtY250diwudHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1jbnR2LC50cC1mbGR2X2M+LnRwLWNudHY6bm90KC50cC12LWhpZGRlbikrLnRwLWNudHZ7bWFyZ2luLXRvcDowfS50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWNudHYsLnRwLWZsZHZfYz4udHAtY250dnttYXJnaW4tbGVmdDo0cHh9LnRwLXRhYnZfYyAudHAtYnJrdj4udHAtZmxkdj4udHAtZmxkdl9iLC50cC1mbGR2X2M+LnRwLWZsZHY+LnRwLWZsZHZfYntib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWVsbS1icik7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1lbG0tYnIpfS50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9iLC50cC1mbGR2X2M+LnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0udHAtdGFidl9jIC50cC1icmt2IC50cC1mbGR2Pi50cC1mbGR2X2MsLnRwLWZsZHZfYyAudHAtZmxkdj4udHAtZmxkdl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtdGFidl9jIC50cC1icmt2Pi50cC10YWJ2Pi50cC10YWJ2X2ksLnRwLWZsZHZfYz4udHAtdGFidj4udHAtdGFidl9pe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtdGFidl9jIC50cC1icmt2IC50cC10YWJ2Pi50cC10YWJ2X2MsLnRwLWZsZHZfYyAudHAtdGFidj4udHAtdGFidl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtcm90dl9iLC50cC1mbGR2X2J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmcpO2NvbG9yOnZhcigtLWNudC1mZyk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWJsZC11cykgKyA0cHgpO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6dmFyKC0tY250LWgtcCk7cGFkZGluZy1yaWdodDpjYWxjKDRweCArIHZhcigtLWJsZC11cykgKyB2YXIoLS1jbnQtaC1wKSk7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpsZWZ0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCU7dHJhbnNpdGlvbjpib3JkZXItcmFkaXVzIC4ycyBlYXNlLWluLW91dCAuMnN9LnRwLXJvdHZfYjpob3ZlciwudHAtZmxkdl9iOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnLWgpfS50cC1yb3R2X2I6Zm9jdXMsLnRwLWZsZHZfYjpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1mKX0udHAtcm90dl9iOmFjdGl2ZSwudHAtZmxkdl9iOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1hKX0udHAtcm90dl9iOmRpc2FibGVkLC50cC1mbGR2X2I6ZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtcm90dl9tLC50cC1mbGR2X217YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgdmFyKC0tY250LWZnKSwgdmFyKC0tY250LWZnKSAycHgsIHRyYW5zcGFyZW50IDJweCwgdHJhbnNwYXJlbnQgNHB4LCB2YXIoLS1jbnQtZmcpIDRweCk7Ym9yZGVyLXJhZGl1czoycHg7Ym90dG9tOjA7Y29udGVudDpcIlwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjZweDtyaWdodDpjYWxjKHZhcigtLWNudC1oLXApICsgKHZhcigtLWJsZC11cykgKyA0cHggLSA2cHgpLzIgLSAycHgpO21hcmdpbjphdXRvO29wYWNpdHk6LjU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3dpZHRoOjZweH0udHAtcm90di50cC1yb3R2LWV4cGFuZGVkIC50cC1yb3R2X20sLnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9iPi50cC1mbGR2X217dHJhbnNmb3JtOm5vbmV9LnRwLXJvdHZfYywudHAtZmxkdl9je2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctYm90dG9tOjA7cGFkZGluZy10b3A6MDtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOmhlaWdodCAuMnMgZWFzZS1pbi1vdXQsb3BhY2l0eSAuMnMgbGluZWFyLHBhZGRpbmcgLjJzIGVhc2UtaW4tb3V0fS50cC1yb3R2LnRwLXJvdHYtY3BsOm5vdCgudHAtcm90di1leHBhbmRlZCkgLnRwLXJvdHZfYywudHAtZmxkdi50cC1mbGR2LWNwbDpub3QoLnRwLWZsZHYtZXhwYW5kZWQpPi50cC1mbGR2X2N7ZGlzcGxheTpub25lfS50cC1yb3R2LnRwLXJvdHYtZXhwYW5kZWQgLnRwLXJvdHZfYywudHAtZmxkdi50cC1mbGR2LWV4cGFuZGVkPi50cC1mbGR2X2N7b3BhY2l0eToxO3BhZGRpbmctYm90dG9tOnZhcigtLWNudC12LXApO3BhZGRpbmctdG9wOnZhcigtLWNudC12LXApO3RyYW5zZm9ybTpub25lO292ZXJmbG93OnZpc2libGU7dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhciAuMnMscGFkZGluZyAuMnMgZWFzZS1pbi1vdXR9LnRwLWxzdHYsLnRwLWNvbHR4dHZfbXtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtbHN0dl9ze3BhZGRpbmc6MCAyMHB4IDAgNHB4O3dpZHRoOjEwMCV9LnRwLWxzdHZfbSwudHAtY29sdHh0dl9tbXtib3R0b206MDttYXJnaW46YXV0bztwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjJweDt0b3A6MH0udHAtbHN0dl9tIHN2ZywudHAtY29sdHh0dl9tbSBzdmd7Ym90dG9tOjA7aGVpZ2h0OjE2cHg7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoxNnB4fS50cC1sc3R2X20gc3ZnIHBhdGgsLnRwLWNvbHR4dHZfbW0gc3ZnIHBhdGh7ZmlsbDpjdXJyZW50Q29sb3J9LnRwLXBuZHR4dHYsLnRwLWNvbHR4dHZfd3tkaXNwbGF5OmZsZXh9LnRwLXBuZHR4dHZfYSwudHAtY29sdHh0dl9je3dpZHRoOjEwMCV9LnRwLXBuZHR4dHZfYSsudHAtcG5kdHh0dl9hLC50cC1jb2x0eHR2X2MrLnRwLXBuZHR4dHZfYSwudHAtcG5kdHh0dl9hKy50cC1jb2x0eHR2X2MsLnRwLWNvbHR4dHZfYysudHAtY29sdHh0dl9je21hcmdpbi1sZWZ0OjJweH0udHAtYnRudl9ie3dpZHRoOjEwMCV9LnRwLWJ0bnZfdHt0ZXh0LWFsaWduOmNlbnRlcn0udHAtY2tidl9se2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNrYnZfaXtsZWZ0OjA7b3BhY2l0eTowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS50cC1ja2J2X3d7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWJsZC11cyk7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6dmFyKC0tYmxkLXVzKX0udHAtY2tidl93IHN2Z3tib3R0b206MDtkaXNwbGF5OmJsb2NrO2hlaWdodDoxNnB4O2xlZnQ6MDttYXJnaW46YXV0bztvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoxNnB4fS50cC1ja2J2X3cgc3ZnIHBhdGh7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1pbi1mZyk7c3Ryb2tlLXdpZHRoOjJ9LnRwLWNrYnZfaTpob3ZlcisudHAtY2tidl93e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctaCl9LnRwLWNrYnZfaTpmb2N1cysudHAtY2tidl93e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctZil9LnRwLWNrYnZfaTphY3RpdmUrLnRwLWNrYnZfd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWEpfS50cC1ja2J2X2k6Y2hlY2tlZCsudHAtY2tidl93IHN2Z3tvcGFjaXR5OjF9LnRwLWNrYnYudHAtdi1kaXNhYmxlZCAudHAtY2tidl93e29wYWNpdHk6LjV9LnRwLWNvbHZ7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNvbHZfaHtkaXNwbGF5OmZsZXh9LnRwLWNvbHZfc3tmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO3dpZHRoOnZhcigtLWJsZC11cyl9LnRwLWNvbHZfdHtmbGV4OjE7bWFyZ2luLWxlZnQ6NHB4fS50cC1jb2x2X3B7aGVpZ2h0OjA7bWFyZ2luLXRvcDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhcixtYXJnaW4gLjJzIGVhc2UtaW4tb3V0fS50cC1jb2x2LnRwLWNvbHYtY3BsIC50cC1jb2x2X3B7b3ZlcmZsb3c6dmlzaWJsZX0udHAtY29sdi50cC1jb2x2LWV4cGFuZGVkIC50cC1jb2x2X3B7bWFyZ2luLXRvcDp2YXIoLS1ibGQtcyk7b3BhY2l0eToxfS50cC1jb2x2IC50cC1wb3B2e2xlZnQ6Y2FsYygtMSp2YXIoLS1jbnQtaC1wKSk7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jbnQtaC1wKSk7dG9wOnZhcigtLWJsZC11cyl9LnRwLWNvbHB2X2gsLnRwLWNvbHB2X2Fwe21hcmdpbi1sZWZ0OjZweDttYXJnaW4tcmlnaHQ6NnB4fS50cC1jb2xwdl9oe21hcmdpbi10b3A6dmFyKC0tYmxkLXMpfS50cC1jb2xwdl9yZ2J7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6dmFyKC0tYmxkLXMpO3dpZHRoOjEwMCV9LnRwLWNvbHB2X2F7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6dmFyKC0tY250LXYtcCk7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1jbnQtdi1wKSArIDJweCk7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNvbHB2X2E6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tZ3J2LWZnKTtjb250ZW50OlwiXCI7aGVpZ2h0OjJweDtsZWZ0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3RvcDowfS50cC1jb2xwdl9hcHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXg6M30udHAtY29scHZfYXR7ZmxleDoxO21hcmdpbi1sZWZ0OjRweH0udHAtc3Zwdntib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtc3Zwdl9je2N1cnNvcjpjcm9zc2hhaXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpKjQpO3dpZHRoOjEwMCV9LnRwLXN2cHZfbXtib3JkZXItcmFkaXVzOjEwMCU7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsLjc1KSBzb2xpZCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2ZpbHRlcjpkcm9wLXNoYWRvdygwIDAgMXB4IHJnYmEoMCwgMCwgMCwgMC4zKSk7aGVpZ2h0OjEycHg7bWFyZ2luLWxlZnQ6LTZweDttYXJnaW4tdG9wOi02cHg7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMnB4fS50cC1zdnB2OmZvY3VzIC50cC1zdnB2X217Ym9yZGVyLWNvbG9yOiNmZmZ9LnRwLWhwbHZ7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWJsZC11cyk7b3V0bGluZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1ocGx2X2N7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFFQUFBQUFCQ0FZQUFBQnViYWdYQUFBQVEwbEVRVlFvVTJQOHo4RHduMEdDZ1FFRGkyT0svUkJnWUhqQmdJcGZvdkZoOGo4WUJJZ3pGR1F4dXFFZ1BoYURPVDVnT2hQa2RDeE9aZUJnK0lERlpaaUdBZ0NhU1NNWXRjUkhMZ0FBQUFCSlJVNUVya0pnZ2c9PSk7YmFja2dyb3VuZC1wb3NpdGlvbjpsZWZ0IHRvcDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtib3JkZXItcmFkaXVzOjJweDtkaXNwbGF5OmJsb2NrO2hlaWdodDo0cHg7bGVmdDowO21hcmdpbi10b3A6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEwMCV9LnRwLWhwbHZfbXtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsLjc1KSBzb2xpZCAycHg7Ym94LXNoYWRvdzowIDAgMnB4IHJnYmEoMCwwLDAsLjEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTJweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNnB4O21hcmdpbi10b3A6LTZweDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6MTJweH0udHAtaHBsdjpmb2N1cyAudHAtaHBsdl9te2JvcmRlci1jb2xvcjojZmZmfS50cC1hcGx2e2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1ibGQtdXMpO291dGxpbmU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS50cC1hcGx2X2J7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSksbGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSk7YmFja2dyb3VuZC1zaXplOjRweCA0cHg7YmFja2dyb3VuZC1wb3NpdGlvbjowIDAsMnB4IDJweDtib3JkZXItcmFkaXVzOjJweDtkaXNwbGF5OmJsb2NrO2hlaWdodDo0cHg7bGVmdDowO21hcmdpbi10b3A6LTJweDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxMDAlfS50cC1hcGx2X2N7Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9LnRwLWFwbHZfbXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKSxsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKTtiYWNrZ3JvdW5kLXNpemU6MTJweCAxMnB4O2JhY2tncm91bmQtcG9zaXRpb246MCAwLDZweCA2cHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JveC1zaGFkb3c6MCAwIDJweCByZ2JhKDAsMCwwLC4xKTtoZWlnaHQ6MTJweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNnB4O21hcmdpbi10b3A6LTZweDtvdmVyZmxvdzpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEycHh9LnRwLWFwbHZfcHtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsLjc1KSBzb2xpZCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC1hcGx2OmZvY3VzIC50cC1hcGx2X3B7Ym9yZGVyLWNvbG9yOiNmZmZ9LnRwLWNvbHN3dntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKSxsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKTtiYWNrZ3JvdW5kLXNpemU6MTBweCAxMHB4O2JhY2tncm91bmQtcG9zaXRpb246MCAwLDVweCA1cHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO292ZXJmbG93OmhpZGRlbn0udHAtY29sc3d2LnRwLXYtZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtY29sc3d2X3N3e2JvcmRlci1yYWRpdXM6MH0udHAtY29sc3d2X2J7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tYmxkLXVzKTtsZWZ0OjA7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDp2YXIoLS1ibGQtdXMpfS50cC1jb2xzd3ZfYjpmb2N1czo6YWZ0ZXJ7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsLjc1KSBzb2xpZCAycHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC1jb2x0eHR2e2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlfS50cC1jb2x0eHR2X217bWFyZ2luLXJpZ2h0OjRweH0udHAtY29sdHh0dl9tc3tib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Y29sb3I6dmFyKC0tbGJsLWZnKTtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtsaW5lLWhlaWdodDp2YXIoLS1ibGQtdXMpO3BhZGRpbmc6MCAxOHB4IDAgNHB4fS50cC1jb2x0eHR2X21zOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctaCl9LnRwLWNvbHR4dHZfbXM6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1mKX0udHAtY29sdHh0dl9tczphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1hKX0udHAtY29sdHh0dl9tbXtjb2xvcjp2YXIoLS1sYmwtZmcpfS50cC1jb2x0eHR2X3d7ZmxleDoxfS50cC1kZnd2e3Bvc2l0aW9uOmFic29sdXRlO3RvcDo4cHg7cmlnaHQ6OHB4O3dpZHRoOjI1NnB4fS50cC1mbGR2LnRwLWZsZHYtbm90IC50cC1mbGR2X2J7ZGlzcGxheTpub25lfS50cC1mbGR2X3R7cGFkZGluZy1sZWZ0OjRweH0udHAtZmxkdl9je2JvcmRlci1sZWZ0OnZhcigtLWNudC1iZykgc29saWQgNHB4fS50cC1mbGR2X2I6aG92ZXIrLnRwLWZsZHZfY3tib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1jbnQtYmctaCl9LnRwLWZsZHZfYjpmb2N1cysudHAtZmxkdl9je2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNudC1iZy1mKX0udHAtZmxkdl9iOmFjdGl2ZSsudHAtZmxkdl9je2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNudC1iZy1hKX0udHAtZ3Jsdntwb3NpdGlvbjpyZWxhdGl2ZX0udHAtZ3Jsdl9ne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSozKX0udHAtZ3Jsdl9nIHBvbHlsaW5le2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0tbW8tZmcpO3N0cm9rZS1saW5lam9pbjpyb3VuZH0udHAtZ3Jsdl90e21hcmdpbi10b3A6LTRweDt0cmFuc2l0aW9uOmxlZnQgLjA1cyx0b3AgLjA1czt2aXNpYmlsaXR5OmhpZGRlbn0udHAtZ3Jsdl90LnRwLWdybHZfdC1he3Zpc2liaWxpdHk6dmlzaWJsZX0udHAtZ3Jsdl90LnRwLWdybHZfdC1pbnt0cmFuc2l0aW9uOm5vbmV9LnRwLWdybHYudHAtdi1kaXNhYmxlZCAudHAtZ3Jsdl9ne29wYWNpdHk6LjV9LnRwLWdybHYgLnRwLXR0dntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vLWZnKX0udHAtZ3JsdiAudHAtdHR2OjpiZWZvcmV7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1tby1mZyl9LnRwLWxibHZ7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtsaW5lLWhlaWdodDoxLjM7cGFkZGluZy1sZWZ0OnZhcigtLWNudC1oLXApO3BhZGRpbmctcmlnaHQ6dmFyKC0tY250LWgtcCl9LnRwLWxibHYudHAtbGJsdi1ub2x7ZGlzcGxheTpibG9ja30udHAtbGJsdl9se2NvbG9yOnZhcigtLWxibC1mZyk7ZmxleDoxOy13ZWJraXQtaHlwaGVuczphdXRvOy1tcy1oeXBoZW5zOmF1dG87aHlwaGVuczphdXRvO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6NHB4O3BhZGRpbmctcmlnaHQ6MTZweH0udHAtbGJsdi50cC12LWRpc2FibGVkIC50cC1sYmx2X2x7b3BhY2l0eTouNX0udHAtbGJsdi50cC1sYmx2LW5vbCAudHAtbGJsdl9se2Rpc3BsYXk6bm9uZX0udHAtbGJsdl92e2FsaWduLXNlbGY6ZmxleC1zdGFydDtmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO3dpZHRoOjE2MHB4fS50cC1sYmx2LnRwLWxibHYtbm9sIC50cC1sYmx2X3Z7d2lkdGg6MTAwJX0udHAtbHN0dl9ze3BhZGRpbmc6MCAyMHB4IDAgNHB4O3dpZHRoOjEwMCV9LnRwLWxzdHZfbXtjb2xvcjp2YXIoLS1idG4tZmcpfS50cC1zZ2x2X2l7cGFkZGluZzowIDRweH0udHAtc2dsdi50cC12LWRpc2FibGVkIC50cC1zZ2x2X2l7b3BhY2l0eTouNX0udHAtbWxsdl9pe2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSozKTtsaW5lLWhlaWdodDp2YXIoLS1ibGQtdXMpO3BhZGRpbmc6MCA0cHg7cmVzaXplOm5vbmU7d2hpdGUtc3BhY2U6cHJlfS50cC1tbGx2LnRwLXYtZGlzYWJsZWQgLnRwLW1sbHZfaXtvcGFjaXR5Oi41fS50cC1wMmR2e3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1wMmR2X2h7ZGlzcGxheTpmbGV4fS50cC1wMmR2X2J7aGVpZ2h0OnZhcigtLWJsZC11cyk7bWFyZ2luLXJpZ2h0OjRweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDp2YXIoLS1ibGQtdXMpfS50cC1wMmR2X2Igc3Zne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjE2cHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tdG9wOi04cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxNnB4fS50cC1wMmR2X2Igc3ZnIHBhdGh7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6Mn0udHAtcDJkdl9iIHN2ZyBjaXJjbGV7ZmlsbDpjdXJyZW50Q29sb3J9LnRwLXAyZHZfdHtmbGV4OjF9LnRwLXAyZHZfcHtoZWlnaHQ6MDttYXJnaW4tdG9wOjA7b3BhY2l0eTowO292ZXJmbG93OmhpZGRlbjt0cmFuc2l0aW9uOmhlaWdodCAuMnMgZWFzZS1pbi1vdXQsb3BhY2l0eSAuMnMgbGluZWFyLG1hcmdpbiAuMnMgZWFzZS1pbi1vdXR9LnRwLXAyZHYudHAtcDJkdi1leHBhbmRlZCAudHAtcDJkdl9we21hcmdpbi10b3A6dmFyKC0tYmxkLXMpO29wYWNpdHk6MX0udHAtcDJkdiAudHAtcG9wdntsZWZ0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3RvcDp2YXIoLS1ibGQtdXMpfS50cC1wMmRwdntwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KX0udHAtcDJkcHZfcHtjdXJzb3I6Y3Jvc3NoYWlyO2hlaWdodDowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWJvdHRvbToxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1wMmRwdl9ne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0udHAtcDJkcHZfYXh7b3BhY2l0eTouMTtzdHJva2U6dmFyKC0taW4tZmcpO3N0cm9rZS1kYXNoYXJyYXk6MX0udHAtcDJkcHZfbHtvcGFjaXR5Oi41O3N0cm9rZTp2YXIoLS1pbi1mZyk7c3Ryb2tlLWRhc2hhcnJheToxfS50cC1wMmRwdl9te2JvcmRlcjp2YXIoLS1pbi1mZykgc29saWQgMXB4O2JvcmRlci1yYWRpdXM6NTAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6NHB4O21hcmdpbi1sZWZ0Oi0ycHg7bWFyZ2luLXRvcDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjRweH0udHAtcDJkcHZfcDpmb2N1cyAudHAtcDJkcHZfbXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWZnKTtib3JkZXItd2lkdGg6MH0udHAtcG9wdntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJzLWJnKTtib3JkZXItcmFkaXVzOjZweDtib3gtc2hhZG93OjAgMnB4IDRweCB2YXIoLS1icy1zaCk7ZGlzcGxheTpub25lO21heC13aWR0aDoxNjhweDtwYWRkaW5nOnZhcigtLWNudC12LXApIHZhcigtLWNudC1oLXApO3Bvc2l0aW9uOmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuO3otaW5kZXg6MTAwMH0udHAtcG9wdi50cC1wb3B2LXZ7ZGlzcGxheTpibG9jazt2aXNpYmlsaXR5OnZpc2libGV9LnRwLXNwcnZfcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWdydi1mZyk7Ym9yZGVyLXdpZHRoOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MnB4O21hcmdpbjowO3dpZHRoOjEwMCV9LnRwLXNsZHYudHAtdi1kaXNhYmxlZHtvcGFjaXR5Oi41fS50cC1zbGR2X3R7Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1ibGQtdXMpO21hcmdpbjowIDZweDtvdXRsaW5lOm5vbmU7cG9zaXRpb246cmVsYXRpdmV9LnRwLXNsZHZfdDo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmcpO2JvcmRlci1yYWRpdXM6MXB4O2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoycHg7bGVmdDowO21hcmdpbjphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9LnRwLXNsZHZfa3toZWlnaHQ6MTAwJTtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9LnRwLXNsZHZfazo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tZmcpO2JvcmRlci1yYWRpdXM6MXB4O2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoycHg7bGVmdDowO21hcmdpbi1ib3R0b206YXV0bzttYXJnaW4tdG9wOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtc2xkdl9rOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMnB4O21hcmdpbi1ib3R0b206YXV0bzttYXJnaW4tdG9wOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTZweDt0b3A6MDt3aWR0aDoxMnB4fS50cC1zbGR2X3Q6aG92ZXIgLnRwLXNsZHZfazo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmctaCl9LnRwLXNsZHZfdDpmb2N1cyAudHAtc2xkdl9rOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1mKX0udHAtc2xkdl90OmFjdGl2ZSAudHAtc2xkdl9rOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1hKX0udHAtc2xkdHh0dntkaXNwbGF5OmZsZXh9LnRwLXNsZHR4dHZfc3tmbGV4OjJ9LnRwLXNsZHR4dHZfdHtmbGV4OjE7bWFyZ2luLWxlZnQ6NHB4fS50cC10YWJ2LnRwLXYtZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtdGFidl9pe2FsaWduLWl0ZW1zOmZsZXgtZW5kO2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW59LnRwLXRhYnYudHAtdGFidi1ub3AgLnRwLXRhYnZfaXtoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtdGFidi50cC10YWJ2LW5vcCAudHAtdGFidl9pOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmcpO2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtoZWlnaHQ6MnB4O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowfS50cC10YWJ2X2N7Ym9yZGVyLWxlZnQ6dmFyKC0tY250LWJnKSBzb2xpZCA0cHg7cGFkZGluZy1ib3R0b206dmFyKC0tY250LXYtcCk7cGFkZGluZy10b3A6dmFyKC0tY250LXYtcCl9LnRwLXRiaXZ7ZmxleDoxO21pbi13aWR0aDowO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC10Yml2Ky50cC10Yml2e21hcmdpbi1sZWZ0OjJweH0udHAtdGJpdisudHAtdGJpdjo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtib3R0b206MDtjb250ZW50OlwiXCI7aGVpZ2h0OjJweDtsZWZ0Oi0ycHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MnB4fS50cC10Yml2X2J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmcpO2Rpc3BsYXk6YmxvY2s7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tY250LWgtcCkgKyA0cHgpO3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1jbnQtaC1wKSArIDRweCk7d2lkdGg6MTAwJX0udHAtdGJpdl9iOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnLWgpfS50cC10Yml2X2I6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctZil9LnRwLXRiaXZfYjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctYSl9LnRwLXRiaXZfYjpkaXNhYmxlZHtvcGFjaXR5Oi41fS50cC10Yml2X3R7Y29sb3I6dmFyKC0tY250LWZnKTtoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWJsZC11cykgKyA0cHgpO29wYWNpdHk6LjU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LnRwLXRiaXYudHAtdGJpdi1zZWwgLnRwLXRiaXZfdHtvcGFjaXR5OjF9LnRwLXR4dHZ7cG9zaXRpb246cmVsYXRpdmV9LnRwLXR4dHZfaXtwYWRkaW5nOjAgNHB4fS50cC10eHR2LnRwLXR4dHYtZnN0IC50cC10eHR2X2l7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS50cC10eHR2LnRwLXR4dHYtbWlkIC50cC10eHR2X2l7Ym9yZGVyLXJhZGl1czowfS50cC10eHR2LnRwLXR4dHYtbHN0IC50cC10eHR2X2l7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MH0udHAtdHh0di50cC10eHR2LW51bSAudHAtdHh0dl9pe3RleHQtYWxpZ246cmlnaHR9LnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR4dHZfaXtvcGFjaXR5Oi4zfS50cC10eHR2X2t7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjEwMCU7bGVmdDotM3B4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEycHh9LnRwLXR4dHZfazo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tZmcpO2JvcmRlci1yYWRpdXM6MXB4O2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpIC0gNHB4KTtsZWZ0OjUwJTttYXJnaW4tYm90dG9tOmF1dG87bWFyZ2luLWxlZnQ6LTFweDttYXJnaW4tdG9wOmF1dG87b3BhY2l0eTouMTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt0cmFuc2l0aW9uOmJvcmRlci1yYWRpdXMgLjFzLGhlaWdodCAuMXMsdHJhbnNmb3JtIC4xcyx3aWR0aCAuMXM7d2lkdGg6MnB4fS50cC10eHR2X2s6aG92ZXI6OmJlZm9yZSwudHAtdHh0di50cC10eHR2LWRyZyAudHAtdHh0dl9rOjpiZWZvcmV7b3BhY2l0eToxfS50cC10eHR2LnRwLXR4dHYtZHJnIC50cC10eHR2X2s6OmJlZm9yZXtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6NHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xcHgpO3dpZHRoOjRweH0udHAtdHh0dl9ne2JvdHRvbTowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjhweDtsZWZ0OjUwJTttYXJnaW46YXV0bztvdmVyZmxvdzp2aXNpYmxlO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dmlzaWJpbGl0eTpoaWRkZW47d2lkdGg6MTAwJX0udHAtdHh0di50cC10eHR2LWRyZyAudHAtdHh0dl9ne3Zpc2liaWxpdHk6dmlzaWJsZX0udHAtdHh0dl9nYntmaWxsOm5vbmU7c3Ryb2tlOnZhcigtLWluLWZnKTtzdHJva2UtZGFzaGFycmF5OjF9LnRwLXR4dHZfZ2h7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1pbi1mZyl9LnRwLXR4dHYgLnRwLXR0dnttYXJnaW4tbGVmdDo2cHg7dmlzaWJpbGl0eTpoaWRkZW59LnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR0dnt2aXNpYmlsaXR5OnZpc2libGV9LnRwLXR0dntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWZnKTtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Y29sb3I6dmFyKC0tYnMtYmcpO3BhZGRpbmc6MnB4IDRweDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTEwMCUpfS50cC10dHY6OmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taW4tZmcpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250ZW50OlwiXCI7Zm9udC1zaXplOi45ZW07aGVpZ2h0OjRweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO3dpZHRoOjRweH0udHAtcm90dntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJzLWJnKTtib3JkZXItcmFkaXVzOnZhcigtLWJzLWJyKTtib3gtc2hhZG93OjAgMnB4IDRweCB2YXIoLS1icy1zaCk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246bGVmdH0udHAtcm90dl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tYnMtYnIpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icik7cGFkZGluZy1sZWZ0OmNhbGMoNHB4ICsgdmFyKC0tYmxkLXVzKSArIHZhcigtLWNudC1oLXApKTt0ZXh0LWFsaWduOmNlbnRlcn0udHAtcm90di50cC1yb3R2LWV4cGFuZGVkIC50cC1yb3R2X2J7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LnRwLXJvdHYudHAtcm90di1ub3QgLnRwLXJvdHZfYntkaXNwbGF5Om5vbmV9LnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWxzdD4udHAtZmxkdl9jLC50cC1yb3R2X2M+LnRwLXRhYnYudHAtdi1sc3Q+LnRwLXRhYnZfY3tib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWxzdDpub3QoLnRwLWZsZHYtZXhwYW5kZWQpPi50cC1mbGR2X2J7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2X2MgLnRwLWZsZHYudHAtdi12bHN0Om5vdCgudHAtZmxkdi1leHBhbmRlZCk+LnRwLWZsZHZfYntib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHYudHAtcm90di1ub3QgLnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWZzdHttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY250LXYtcCkpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1mc3Q+LnRwLWZsZHZfYntib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHYudHAtcm90di1ub3QgLnRwLXJvdHZfYz4udHAtdGFidi50cC12LWZzdHttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY250LXYtcCkpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLXRhYnYudHAtdi1mc3Q+LnRwLXRhYnZfaXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHYudHAtdi1kaXNhYmxlZCwudHAtcm90diAudHAtdi1kaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lfS50cC1yb3R2LnRwLXYtaGlkZGVuLC50cC1yb3R2IC50cC12LWhpZGRlbntkaXNwbGF5Om5vbmV9Jyk7XG4gICAgICAgICAgICB0aGlzLnBvb2xfLmdldEFsbCgpLmZvckVhY2goKHBsdWdpbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1iZWRQbHVnaW5TdHlsZV8ocGx1Z2luKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclBsdWdpbih7XG4gICAgICAgICAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgICAgICAgICBTbGlkZXJCbGFkZVBsdWdpbixcbiAgICAgICAgICAgICAgICAgICAgTGlzdEJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgICAgICAgICBUYWJCbGFkZVBsdWdpbixcbiAgICAgICAgICAgICAgICAgICAgVGV4dEJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFZFUlNJT04gPSBuZXcgU2VtdmVyKCczLjAuOCcpO1xuXG4gICAgZXhwb3J0cy5CbGFkZUFwaSA9IEJsYWRlQXBpO1xuICAgIGV4cG9ydHMuQnV0dG9uQXBpID0gQnV0dG9uQXBpO1xuICAgIGV4cG9ydHMuRm9sZGVyQXBpID0gRm9sZGVyQXBpO1xuICAgIGV4cG9ydHMuSW5wdXRCaW5kaW5nQXBpID0gSW5wdXRCaW5kaW5nQXBpO1xuICAgIGV4cG9ydHMuTGlzdEFwaSA9IExpc3RBcGk7XG4gICAgZXhwb3J0cy5Nb25pdG9yQmluZGluZ0FwaSA9IE1vbml0b3JCaW5kaW5nQXBpO1xuICAgIGV4cG9ydHMuUGFuZSA9IFBhbmU7XG4gICAgZXhwb3J0cy5TZXBhcmF0b3JBcGkgPSBTZXBhcmF0b3JBcGk7XG4gICAgZXhwb3J0cy5TbGlkZXJBcGkgPSBTbGlkZXJBcGk7XG4gICAgZXhwb3J0cy5UYWJBcGkgPSBUYWJBcGk7XG4gICAgZXhwb3J0cy5UYWJQYWdlQXBpID0gVGFiUGFnZUFwaTtcbiAgICBleHBvcnRzLlRleHRBcGkgPSBUZXh0QXBpO1xuICAgIGV4cG9ydHMuVHBDaGFuZ2VFdmVudCA9IFRwQ2hhbmdlRXZlbnQ7XG4gICAgZXhwb3J0cy5WRVJTSU9OID0gVkVSU0lPTjtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdmVjMkNvcHkob3V0LCBhKSB7XG4gICAgb3V0WzBdID0gYVswXVxuICAgIG91dFsxXSA9IGFbMV1cbiAgICByZXR1cm4gb3V0XG59IiwiY29uc3QgY2FudmFzU2tldGNoID0gcmVxdWlyZSgnY2FudmFzLXNrZXRjaCcpO1xuY29uc3QgeyByYW5kb20sIG1hdGggfSA9IHJlcXVpcmUoJ2NhbnZhcy1za2V0Y2gtdXRpbCcpO1xuY29uc3QgVHdlYWtwYW5lID0gcmVxdWlyZSgndHdlYWtwYW5lJyk7XG5cbmNvbnN0IHNpemUgPSB3aW5kb3cuaW5uZXJXaWR0aDtcbmNvbnN0IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuY29uc29sZS5sb2coeyBzaXplIH0pO1xuY29uc29sZS5sb2coeyBkcHIgfSk7XG5cbmNvbnN0IHNldHRpbmdzID0ge1xuICBkaW1lbnNpb25zOiBbc2l6ZSAqIGRwciwgc2l6ZSAqIGRwcl0sXG4gIGFuaW1hdGU6IHRydWUsXG4gIHBsYXliYWNrUmF0ZTogJ3Rocm90dGxlJywgLy8gdXNlIGZwcyBpbiBicm93c2VyXG4gIGZwczogMiwgLy8gc2V0IGZwcyBmb3IgY2FwdHVyZWQgb3V0cHV0XG4gIHBpeGVsYXRlZDogZmFsc2Vcbn07XG5cbmNvbnN0IHBhcmFtcyA9IHtcbiAgYW5pbWF0ZTogJ3RydWUnLFxuICBwbGF5YmFja1JhdGU6ICd0aHJvdHRsZScsIC8vIHVzZSBmcHMgaW4gYnJvd3NlclxuICBmcHM6IDUsXG59O1xuXG5jb25zdCBza2V0Y2ggPSAoKSA9PiB7XG4gIHJldHVybiAoeyBjb250ZXh0LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZSB9KSA9PiB7XG5cbiAgICBjb250ZXh0LnNjYWxlKGRwciwgZHByKTtcbiAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDI7XG5cbiAgICBjb25zdCBzdGVwID0gMTA7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcblxuICAgIC8vIENyZWF0ZSB0aGUgbGluZXNcbiAgICBmb3IgKGxldCBpID0gc3RlcDsgaSA8PSBzaXplIC0gc3RlcDsgaSArPSBzdGVwKSB7XG5cbiAgICAgIGNvbnN0IGxpbmUgPSBbXTtcbiAgICAgIGZvciAobGV0IGogPSBzdGVwOyBqIDw9IHNpemUgLSBzdGVwOyBqICs9IHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGlzdGFuY2VUb0NlbnRlciA9IE1hdGguYWJzKGogLSBzaXplIC8gMik7XG4gICAgICAgIGNvbnN0IHZhcmlhbmNlID0gTWF0aC5tYXgoc2l6ZSAvIDIgLSA1MCAtIGRpc3RhbmNlVG9DZW50ZXIsIDApO1xuICAgICAgICBjb25zdCByYW5kb20gPSBNYXRoLnJhbmRvbSgpICogdmFyaWFuY2UgLyAyICogLTE7XG4gICAgICAgIGNvbnN0IHBvaW50ID0geyB4OiBqLCB5OiBpICsgcmFuZG9tIH07XG4gICAgICAgIGxpbmUucHVzaChwb2ludCk7XG4gICAgICB9XG4gICAgICBsaW5lcy5wdXNoKGxpbmUpO1xuICAgIH1cblxuICAgIC8vIERvIHRoZSBkcmF3aW5nXG4gICAgLy8gNzIwKjAuMDE2XG4gICAgY29uc3QgdG9wTWFyZ2luID0gTWF0aC5yb3VuZChzaXplICogMC4wMik7XG4gICAgZm9yIChsZXQgaSA9IHRvcE1hcmdpbjsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICBjb250ZXh0Lm1vdmVUbyhsaW5lc1tpXVswXS54LCBsaW5lc1tpXVswXS55KTtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lc1tpXS5sZW5ndGggLSAyOyBqKyspIHtcbiAgICAgICAgY29uc3QgeGMgPSAobGluZXNbaV1bal0ueCArIGxpbmVzW2ldW2ogKyAxXS54KSAvIDI7XG4gICAgICAgIGNvbnN0IHljID0gKGxpbmVzW2ldW2pdLnkgKyBsaW5lc1tpXVtqICsgMV0ueSkgLyAyO1xuICAgICAgICBjb250ZXh0LnF1YWRyYXRpY0N1cnZlVG8obGluZXNbaV1bal0ueCwgbGluZXNbaV1bal0ueSwgeGMsIHljKTtcbiAgICAgIH1cblxuICAgICAgLy8gY29udGV4dC5xdWFkcmF0aWNDdXJ2ZVRvKGxpbmVzW2ldW2pdLngsIGxpbmVzW2ldW2pdLnksIGxpbmVzW2ldW2ogKyAxXS54LCBsaW5lc1tpXVtqICsgMV0ueSk7XG4gICAgICBjb250ZXh0LnNhdmUoKTtcblxuICAgICAgLy8gR2xvYmFsIGNvbXBvc2l0ZSBvcGVyYXRpb25zIGFsbG93IHVzIHRvIGRyYXcgdG8gdGhlIGNhbnZhcyBpbiB2ZXJ5IGludGVyZXN0aW5nIHdheXMuIEZvciBvdXIgY2FzZSwgXG4gICAgICAvLyB3ZSB3YW50IHRvIGVzc2VudGlhbGx5IOKAnGVyYXNl4oCdIG91ciBuZXcgc2hhcGUgZnJvbSB0aGUgZXhpc3RpbmcgbGluZXMgYWJvdmUgaXQuIFRoZSBkZXN0aW5hdGlvbi1vdXQgXG4gICAgICAvLyBtb2RlIHdvcmtzIGdyZWF0IGZvciBlcmFzaW5nIGZyb20gYSBjYW52YXMuXG4gICAgICBjb25zdCBjb21wb3NpdGVPcGVyYXRpb25zID0gWydzb3VyY2Utb3ZlcicsXG4gICAgICAgICdjb3B5JyxcbiAgICAgICAgJ2Rlc3RpbmF0aW9uLWluJyxcbiAgICAgICAgJ2Rlc3RpbmF0aW9uLW91dCcsXG4gICAgICAgICdkZXN0aW5hdGlvbi1vdmVyJyxcbiAgICAgICAgJ2xpZ2h0ZXInLFxuICAgICAgICAnc291cmNlLWF0b3AnLFxuICAgICAgICAnc291cmNlLWluJyxcbiAgICAgICAgJ3NvdXJjZS1vdXQnLFxuICAgICAgICAneG9yJ10gLy8gb3ZlcmxhcHBpbmcgb3Bwb3NpdGUgY29sb3VyXG4gICAgICAvLyBkZWJ1Z2dlclxuICAgICAgY29uc3QgcG9zaXRpb24gPSAzLy8gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY29tcG9zaXRlT3BlcmF0aW9ucy5sZW5ndGgpO1xuICAgICAgY29uc29sZS5sb2coeyBwb3NpdGlvbiB9KTtcbiAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gY29tcG9zaXRlT3BlcmF0aW9uc1twb3NpdGlvbl07XG5cbiAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgICAgY29udGV4dC5yZXN0b3JlKCk7XG4gICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgIH1cbiAgfTtcbn07XG5cbi8vIGNvbnN0IGNyZWF0ZVBhbmUgPSAoKSA9PiB7XG4vLyAgIGNvbnN0IHBhbmUgPSBuZXcgVHdlYWtwYW5lLlBhbmUoKTtcbi8vICAgbGV0IGZvbGRlcjtcbi8vICAgZm9sZGVyID0gcGFuZS5hZGRGb2xkZXIoeyB0aXRsZTogJ0FuaW1hdGlvbicgfSlcbi8vICAgZm9sZGVyLmFkZElucHV0KHNldHRpbmdzLCAnYW5pbWF0ZScpO1xuLy8gICBmb2xkZXIuYWRkSW5wdXQoc2V0dGluZ3MsICdwbGF5YmFja1JhdGUnLCB7IG9wdGlvbnM6IHsgdGhyb3R0bGU6ICd0aHJvdHRsZScsIGZpeGVkOiAnZml4ZWQnIH0gfSlcbi8vICAgZm9sZGVyLmFkZElucHV0KHNldHRpbmdzLCAnZnBzJywgeyBtaW46IDEsIG1heDogNjAsIHN0ZXA6IDEgfSlcbi8vIH07XG5cbi8vIGNyZWF0ZVBhbmUoKTtcbmNhbnZhc1NrZXRjaChza2V0Y2gsIHNldHRpbmdzKTsgLy9jYW52YXNTa2V0Y2goc2tldGNoLCB7c2V0dGluZ3MsIC4uLnVzZXJTZXR0aW5nc30pO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxudmFyIEtfTUFYX0xFTkdUSCA9IDB4N2ZmZmZmZmZcbmV4cG9ydHMua01heExlbmd0aCA9IEtfTUFYX0xFTkdUSFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBQcmludCB3YXJuaW5nIGFuZCByZWNvbW1lbmQgdXNpbmcgYGJ1ZmZlcmAgdjQueCB3aGljaCBoYXMgYW4gT2JqZWN0XG4gKiAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBXZSByZXBvcnQgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBpZiB0aGUgYXJlIG5vdCBzdWJjbGFzc2FibGVcbiAqIHVzaW5nIF9fcHJvdG9fXy4gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWBcbiAqIChTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOCkuIElFIDEwIGxhY2tzIHN1cHBvcnRcbiAqIGZvciBfX3Byb3RvX18gYW5kIGhhcyBhIGJ1Z2d5IHR5cGVkIGFycmF5IGltcGxlbWVudGF0aW9uLlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBjb25zb2xlLmVycm9yKFxuICAgICdUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgJyArXG4gICAgJ2BidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuJ1xuICApXG59XG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgLy8gQ2FuIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkP1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7IF9fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfSB9XG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAncGFyZW50Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ1ZmZlclxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIGxlbmd0aCArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIGJ1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBidWZcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3XG5pZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnNwZWNpZXMgIT0gbnVsbCAmJlxuICAgIEJ1ZmZlcltTeW1ib2wuc3BlY2llc10gPT09IEJ1ZmZlcikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgIHZhbHVlOiBudWxsLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSlcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbmZ1bmN0aW9uIGZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2UodmFsdWUpXG4gIH1cblxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHRocm93IFR5cGVFcnJvcihcbiAgICAgICdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICtcbiAgICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgICApXG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZSh2YWx1ZSwgQXJyYXlCdWZmZXIpIHx8XG4gICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIEFycmF5QnVmZmVyKSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgKVxuICB9XG5cbiAgdmFyIHZhbHVlT2YgPSB2YWx1ZS52YWx1ZU9mICYmIHZhbHVlLnZhbHVlT2YoKVxuICBpZiAodmFsdWVPZiAhPSBudWxsICYmIHZhbHVlT2YgIT09IHZhbHVlKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlT2YsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIHZhciBiID0gZnJvbU9iamVjdCh2YWx1ZSlcbiAgaWYgKGIpIHJldHVybiBiXG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1ByaW1pdGl2ZSAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShcbiAgICAgIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0oJ3N0cmluZycpLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGhcbiAgICApXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICtcbiAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gIClcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBOb3RlOiBDaGFuZ2UgcHJvdG90eXBlICphZnRlciogQnVmZmVyLmZyb20gaXMgZGVmaW5lZCB0byB3b3JrYXJvdW5kIENocm9tZSBidWc6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzE0OFxuQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIHNpemUgKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlIChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICB2YXIgYnVmXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBidWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJlxuICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2Vcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKSBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5J1xuICAgIClcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmIChpc0luc3RhbmNlKGJ1ZiwgVWludDhBcnJheSkpIHtcbiAgICAgIGJ1ZiA9IEJ1ZmZlci5mcm9tKGJ1ZilcbiAgICB9XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgaXNJbnN0YW5jZShzdHJpbmcsIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuICcgK1xuICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBzdHJpbmdcbiAgICApXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbXVzdE1hdGNoID0gKGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSA9PT0gdHJ1ZSlcbiAgaWYgKCFtdXN0TWF0Y2ggJiYgbGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB7XG4gICAgICAgICAgcmV0dXJuIG11c3RNYXRjaCA/IC0xIDogdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgfVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCAoYW5kIHRoZSBgaXMtYnVmZmVyYCBucG0gcGFja2FnZSlcbi8vIHRvIGRldGVjdCBhIEJ1ZmZlciBpbnN0YW5jZS4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGBpbnN0YW5jZW9mIEJ1ZmZlcmBcbi8vIHJlbGlhYmx5IGluIGEgYnJvd3NlcmlmeSBjb250ZXh0IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgZGlmZmVyZW50XG4vLyBjb3BpZXMgb2YgdGhlICdidWZmZXInIHBhY2thZ2UgaW4gdXNlLiBUaGlzIG1ldGhvZCB3b3JrcyBldmVuIGZvciBCdWZmZXJcbi8vIGluc3RhbmNlcyB0aGF0IHdlcmUgY3JlYXRlZCBmcm9tIGFub3RoZXIgY29weSBvZiB0aGUgYGJ1ZmZlcmAgcGFja2FnZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE1NFxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyA9IEJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmdcblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5yZXBsYWNlKC8oLnsyfSkvZywgJyQxICcpLnRyaW0oKVxuICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmIChpc0luc3RhbmNlKHRhcmdldCwgVWludDhBcnJheSkpIHtcbiAgICB0YXJnZXQgPSBCdWZmZXIuZnJvbSh0YXJnZXQsIHRhcmdldC5vZmZzZXQsIHRhcmdldC5ieXRlTGVuZ3RoKVxuICB9XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuICcgK1xuICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdGFyZ2V0KVxuICAgIClcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKG51bWJlcklzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgWyB2YWwgXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+PiAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgKGJ5dGVzW2kgKyAxXSAqIDI1NikpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgbmV3QnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlcicpXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVXNlIGJ1aWx0LWluIHdoZW4gYXZhaWxhYmxlLCBtaXNzaW5nIGZyb20gSUUxMVxuICAgIHRoaXMuY29weVdpdGhpbih0YXJnZXRTdGFydCwgc3RhcnQsIGVuZClcbiAgfSBlbHNlIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKChlbmNvZGluZyA9PT0gJ3V0ZjgnICYmIGNvZGUgPCAxMjgpIHx8XG4gICAgICAgICAgZW5jb2RpbmcgPT09ICdsYXRpbjEnKSB7XG4gICAgICAgIC8vIEZhc3QgcGF0aDogSWYgYHZhbGAgZml0cyBpbnRvIGEgc2luZ2xlIGJ5dGUsIHVzZSB0aGF0IG51bWVyaWMgdmFsdWUuXG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICtcbiAgICAgICAgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgdGFrZXMgZXF1YWwgc2lnbnMgYXMgZW5kIG9mIHRoZSBCYXNlNjQgZW5jb2RpbmdcbiAgc3RyID0gc3RyLnNwbGl0KCc9JylbMF1cbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG4vLyBBcnJheUJ1ZmZlciBvciBVaW50OEFycmF5IG9iamVjdHMgZnJvbSBvdGhlciBjb250ZXh0cyAoaS5lLiBpZnJhbWVzKSBkbyBub3QgcGFzc1xuLy8gdGhlIGBpbnN0YW5jZW9mYCBjaGVjayBidXQgdGhleSBzaG91bGQgYmUgdHJlYXRlZCBhcyBvZiB0aGF0IHR5cGUuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNjZcbmZ1bmN0aW9uIGlzSW5zdGFuY2UgKG9iaiwgdHlwZSkge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdHlwZSB8fFxuICAgIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSAhPSBudWxsICYmXG4gICAgICBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lKVxufVxuZnVuY3Rpb24gbnVtYmVySXNOYU4gKG9iaikge1xuICAvLyBGb3IgSUUxMSBzdXBwb3J0XG4gIHJldHVybiBvYmogIT09IG9iaiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuIiwiLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIlxuZ2xvYmFsLkNBTlZBU19TS0VUQ0hfREVGQVVMVF9TVE9SQUdFX0tFWSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuIl19