"}).join("\n");return['','','"].join("\n")}function v(e){return e.filter(Boolean).map(function(e){return e[0]+'="'+e[1]+'"'}).join(" ")}function b(e,t){var r=(t=t||{}).context;if(!r)throw new Error('Must specify "context" options');var n=t.units||"px",a=t.width,o=t.height;if(void 0===a||void 0===o)throw new Error('Must specify "width" and "height" options');var s=t.lineWidth;return void 0===s&&(s=i(h,p,n,{roundPixel:!1,pixelsPerInch:d})),r.clearRect(0,0,a,o),r.fillStyle=t.background||"white",r.fillRect(0,0,a,o),r.strokeStyle=t.foreground||t.strokeStyle||"black",r.lineWidth=s,r.lineJoin=t.lineJoin||"miter",r.lineCap=t.lineCap||"butt",x(e,function(e){r.beginPath(),"string"==typeof e?A(r,e):e.forEach(function(e){r.lineTo(e[0],e[1])}),r.stroke()}),[r.canvas,{data:y(e,t),extension:".svg"}]}function w(e,t){return _(e)?"":"string"==typeof e?e:M(e)?e.toString():E(e)?k(e,t):Array.isArray(e)?e.map(function(e){return w(e,t)}).reduce(function(e,t){return e.concat(t)},[]):""}function x(e,t){_(e)||("string"==typeof e||M(e)?t(e.toString()):E(e)?t(e):Array.isArray(e)&&e.forEach(function(e){return x(e,t)}))}function A(e,t){for(var r=u(f(s(t))),n=0;n=2&&t.every(function(e){return"number"==typeof e}));var t}t.exports.createPath=function(e){var t=a.path();"function"==typeof e&&e(t);return t.lineTo=r(t.lineTo),t.quadraticCurveTo=r(t.quadraticCurveTo),t.bezierCurveTo=r(t.bezierCurveTo),t;function r(e){return function(){var r=Array.prototype.slice.call(arguments);return null==t._x1&&null==t._y1&&t.moveTo(r[0],r[1]),e.apply(t,r)}}},t.exports.pathsToSVGPaths=m,t.exports.pathsToPolylines=g,t.exports.pathsToSVG=y,t.exports.renderPaths=b,t.exports.convertToSVGPath=w,t.exports.eachPath=x,t.exports.drawSVGPath=A,t.exports.polylineToSVGPath=k,t.exports.polylinesToSVG=function(e,t){if(!Array.isArray(e))throw new Error("Expected array of arrays for polylines");return console.warn("polylinesToSVG is deprecated, use pathsToSVG instead which has the same functionality"),y(e,t)},t.exports.renderPolylines=function(e,t){if(!Array.isArray(e))throw new Error("Expected array of arrays for polylines");return console.warn("renderPolylines is deprecated, use renderPaths instead which has the same functionality"),b(e,t)}},{"./geometry":9,"./lib/optimize-penplot-paths":17,"abs-svg-path":1,"convert-length":30,"d3-path":31,defined:32,"normalize-svg-path":36,"parse-svg-path":38,"svg-path-contours":44}],24:[function(e,t,r){var n=e("seed-random"),i=e("simplex-noise"),a=e("defined");t.exports=function e(t){t=a(t,null);var r,o,s,f=Math.random,u=null,c=!1;return l(t),{value:h,createRandom:function(t){return e(t)},setSeed:l,getSeed:function(){return r},getRandomSeed:function(){return String(Math.floor(1e6*Math.random()))},valueNonZero:function(){for(var e=0;0===e;)e=h();return e},permuteNoise:function(){s=p()},noise1D:function(e,t,r){if(!isFinite(e))throw new TypeError("x component for noise() must be finite");return t=a(t,1),(r=a(r,1))*s.noise2D(e*t,0)},noise2D:function(e,t,r,n){if(!isFinite(e))throw new TypeError("x component for noise() must be finite");if(!isFinite(t))throw new TypeError("y component for noise() must be finite");return r=a(r,1),(n=a(n,1))*s.noise2D(e*r,t*r)},noise3D:function(e,t,r,n,i){if(!isFinite(e))throw new TypeError("x component for noise() must be finite");if(!isFinite(t))throw new TypeError("y component for noise() must be finite");if(!isFinite(r))throw new TypeError("z component for noise() must be finite");return n=a(n,1),(i=a(i,1))*s.noise3D(e*n,t*n,r*n)},noise4D:function(e,t,r,n,i,o){if(!isFinite(e))throw new TypeError("x component for noise() must be finite");if(!isFinite(t))throw new TypeError("y component for noise() must be finite");if(!isFinite(r))throw new TypeError("z component for noise() must be finite");if(!isFinite(n))throw new TypeError("w component for noise() must be finite");return i=a(i,1),(o=a(o,1))*s.noise4D(e*i,t*i,r*i,n*i)},sign:function(){return d()?1:-1},boolean:d,chance:function(e){if("number"!=typeof(e=a(e,.5)))throw new TypeError("expected n to be a number");return h()=1||0===o);var s=Math.sqrt(-2*Math.log(o)/o);return u=i*s,c=!0,e+t*(n*s)}};function l(e,t){"number"==typeof e||"string"==typeof e?o=n(r=e,t):(r=void 0,o=f),s=p(),u=null,c=!1}function h(){return o()}function p(){return new i(o)}function d(){return h()>.5}function m(e,t){if(void 0===t&&(t=e,e=0),"number"!=typeof e||"number"!=typeof t)throw new TypeError("Expected all arguments to be numbers");return h()*(t-e)+e}function g(e,t){if(void 0===t&&(t=e,e=0),"number"!=typeof e||"number"!=typeof t)throw new TypeError("Expected all arguments to be numbers");return Math.floor(m(e,t))}function y(e,t){e=a(e,1),t=t||[];var r=2*h()*Math.PI;return t[0]=e*Math.cos(r),t[1]=e*Math.sin(r),t}function v(e){return 0===(e=e||[]).length?-1:b(e.map(function(e){return e.weight}))}function b(e){if(0===(e=e||[]).length)return-1;var t,r=0;for(t=0;t 0");var n=h()*r;for(t=0;t=0;s--)if(u[s]!=c[s])return!1;for(s=u.length-1;s>=0;s--)if(!r(e[f=u[s]],a[f],o))return!1;return typeof e==typeof a}(e,a,o))};function n(e){return null==e}function i(e){return!(!e||"object"!=typeof e||"number"!=typeof e.length)&&("function"==typeof e.copy&&"function"==typeof e.slice&&!(e.length>0&&"number"!=typeof e[0]))}}),y=o(function(e,t){!function(t){var r,n,i,a=(r=/d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZWN]|"[^"]*"|'[^']*'/g,n=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,i=/[^-+\dA-Z]/g,function(e,t,s,f){if(1!==arguments.length||"string"!==(null===(u=e)?"null":void 0===u?"undefined":"object"!=typeof u?typeof u:Array.isArray(u)?"array":{}.toString.call(u).slice(8,-1).toLowerCase())||/\d/.test(e)||(t=e,e=void 0),(e=e||new Date)instanceof Date||(e=new Date(e)),isNaN(e))throw TypeError("Invalid date");var u,c=(t=String(a.masks[t]||t||a.masks.default)).slice(0,4);"UTC:"!==c&&"GMT:"!==c||(t=t.slice(4),s=!0,"GMT:"===c&&(f=!0));var l=s?"getUTC":"get",h=e[l+"Date"](),p=e[l+"Day"](),d=e[l+"Month"](),m=e[l+"FullYear"](),g=e[l+"Hours"](),y=e[l+"Minutes"](),v=e[l+"Seconds"](),b=e[l+"Milliseconds"](),w=s?0:e.getTimezoneOffset(),x=function(e){var t=new Date(e.getFullYear(),e.getMonth(),e.getDate());t.setDate(t.getDate()-(t.getDay()+6)%7+3);var r=new Date(t.getFullYear(),0,4);r.setDate(r.getDate()-(r.getDay()+6)%7+3);var n=t.getTimezoneOffset()-r.getTimezoneOffset();return t.setHours(t.getHours()-n),1+Math.floor((t-r)/6048e5)}(e),A=function(e){var t=e.getDay();return 0===t&&(t=7),t}(e),k={d:h,dd:o(h),ddd:a.i18n.dayNames[p],dddd:a.i18n.dayNames[p+7],m:d+1,mm:o(d+1),mmm:a.i18n.monthNames[d],mmmm:a.i18n.monthNames[d+12],yy:String(m).slice(2),yyyy:m,h:g%12||12,hh:o(g%12||12),H:g,HH:o(g),M:y,MM:o(y),s:v,ss:o(v),l:o(b,3),L:o(Math.round(b/10)),t:g<12?a.i18n.timeNames[0]:a.i18n.timeNames[1],tt:g<12?a.i18n.timeNames[2]:a.i18n.timeNames[3],T:g<12?a.i18n.timeNames[4]:a.i18n.timeNames[5],TT:g<12?a.i18n.timeNames[6]:a.i18n.timeNames[7],Z:f?"GMT":s?"UTC":(String(e).match(n)||[""]).pop().replace(i,""),o:(w>0?"-":"+")+o(100*Math.floor(Math.abs(w)/60)+Math.abs(w)%60,4),S:["th","st","nd","rd"][h%10>3?0:(h%100-h%10!=10)*h%10],W:x,N:A};return t.replace(r,function(e){return e in k?k[e]:e.slice(1,e.length-1)})});function o(e,t){for(e=String(e),t=t||2;e.length=r)return v.substr(0,r);for(;r>v.length&&t>1;)1&t&&(v+=e),t>>=1,e+=e;return v=(v+=e).substr(0,r)};var w,x=function(e,t,r){return e=e.toString(),void 0===t?e:(r=0===r?"0":r?r.toString():" ",b(r,t-e.length)+e)},A=function(){},k={extension:"",prefix:"",suffix:""},_=["image/png","image/jpeg","image/webp"];function M(e,t){return void 0===t&&(t={}),new Promise(function(r,n){t=i({},k,t);var a=T(Object.assign({},t,{extension:"",frame:void 0})),o=e?"streamStart":"streamEnd",s=c();return s&&s.output&&"function"==typeof s[o]?s[o](i({},t,{filename:a})).then(function(e){return r(e)}):r({filename:a,client:!1})})}function E(e,t){return void 0===t&&(t={}),function(e){return new Promise(function(t){var r=e.indexOf(",");if(-1!==r){for(var n=e.slice(r+1),i=window.atob(n),a=e.slice(0,r),o=/data:([^;]+)/.exec(a),s=(o?o[1]:"")||void 0,f=new ArrayBuffer(i.length),u=new Uint8Array(f),c=0;c1?""+e.layer:"";return null!=r?[a,r].filter(Boolean).join("-")+n:[e.prefix,e.name||e.timeStamp,a,e.hash,e.suffix].filter(Boolean).join("-")+n}var O={dimension:"dimensions",animated:"animate",animating:"animate",unit:"units",P5:"p5",pixellated:"pixelated",looping:"loop",pixelPerInch:"pixels"},j=["dimensions","units","pixelsPerInch","orientation","scaleToFit","scaleToView","bleed","pixelRatio","exportPixelRatio","maxPixelRatio","scaleContext","resizeCanvas","styleCanvas","canvas","context","attributes","parent","file","name","prefix","suffix","animate","playing","loop","duration","totalFrames","fps","playbackRate","timeScale","frame","time","flush","pixelated","hotkeys","p5","id","scaleToFitPadding","data","params","encoding","encodingQuality"],C=function(e){Object.keys(e).forEach(function(e){e in O?console.warn('[canvas-sketch] Could not recognize the setting "'+e+'", did you mean "'+O[e]+'"?'):j.includes(e)||console.warn('[canvas-sketch] Could not recognize the setting "'+e+'"')})};var D=[["postcard",101.6,152.4],["poster-small",280,430],["poster",460,610],["poster-large",610,910],["business-card",50.8,88.9],["2r",64,89],["3r",89,127],["4r",102,152],["5r",127,178],["6r",152,203],["8r",203,254],["10r",254,305],["11r",279,356],["12r",305,381],["a0",841,1189],["a1",594,841],["a2",420,594],["a3",297,420],["a4",210,297],["a5",148,210],["a6",105,148],["a7",74,105],["a8",52,74],["a9",37,52],["a10",26,37],["2a0",1189,1682],["4a0",1682,2378],["b0",1e3,1414],["b1",707,1e3],["b1+",720,1020],["b2",500,707],["b2+",520,720],["b3",353,500],["b4",250,353],["b5",176,250],["b6",125,176],["b7",88,125],["b8",62,88],["b9",44,62],["b10",31,44],["b11",22,32],["b12",16,22],["c0",917,1297],["c1",648,917],["c2",458,648],["c3",324,458],["c4",229,324],["c5",162,229],["c6",114,162],["c7",81,114],["c8",57,81],["c9",40,57],["c10",28,40],["c11",22,32],["c12",16,22],["half-letter",5.5,8.5,"in"],["letter",8.5,11,"in"],["legal",8.5,14,"in"],["junior-legal",5,8,"in"],["ledger",11,17,"in"],["tabloid",11,17,"in"],["ansi-a",8.5,11,"in"],["ansi-b",11,17,"in"],["ansi-c",17,22,"in"],["ansi-d",22,34,"in"],["ansi-e",34,44,"in"],["arch-a",9,12,"in"],["arch-b",12,18,"in"],["arch-c",18,24,"in"],["arch-d",24,36,"in"],["arch-e",36,48,"in"],["arch-e1",30,42,"in"],["arch-e2",26,38,"in"],["arch-e3",27,39,"in"]].reduce(function(e,t){var r={units:t[3]||"mm",dimensions:[t[1],t[2]]};return e[t[0]]=r,e[t[0].replace(/-/g," ")]=r,e},{}),P=function(){for(var e=0;e=2))}(t),p=e.exporting,d=!!c&&!1!==t.scaleToFit,m=!(!p&&c)||t.scaleToView;f||(d=m=!1);var g,y,v=t.units,b="number"==typeof t.pixelsPerInch&&isFinite(t.pixelsPerInch)?t.pixelsPerInch:72,w=l(t.bleed,0),x=f?window.devicePixelRatio:1,A=m?x:1;"number"==typeof t.pixelRatio&&isFinite(t.pixelRatio)?y=l(t.exportPixelRatio,g=t.pixelRatio):c?(g=A,y=l(t.exportPixelRatio,1)):y=l(t.exportPixelRatio,g=x),"number"==typeof t.maxPixelRatio&&isFinite(t.maxPixelRatio)&&(g=Math.min(t.maxPixelRatio,g)),p&&(g=y);var k,_,M=function(e,t){if(!h())return[300,150];var r=t.parent||window;if(r===window||r===document||r===document.body)return[window.innerWidth,window.innerHeight];var n=r.getBoundingClientRect();return[n.width,n.height]}(0,t),E=M[0],S=M[1];if(c){var T=function(e,t,r){if(void 0===t&&(t="px"),void 0===r&&(r=72),"string"==typeof e){var n=e.toLowerCase();if(!(n in D))throw new Error('The dimension preset "'+e+'" is not supported or could not be found; try using a4, a3, postcard, letter, etc.');var i=D[n];return i.dimensions.map(function(e){return z(e,i.units,t,r)})}return e}(u,v,b),O=Math.max(T[0],T[1]),j=Math.min(T[0],T[1]);if(t.orientation){var C="landscape"===t.orientation;r=C?O:j,n=C?j:O}else r=T[0],n=T[1];k=r,_=n,r+=2*w,n+=2*w}else k=r=E,_=n=S;var P=r,F=n;if(c&&v&&(P=z(r,v,"px",b),F=z(n,v,"px",b)),i=Math.round(P),a=Math.round(F),d&&!p&&c){var R=r/n,B=E/S,I=l(t.scaleToFitPadding,40),L=Math.round(E-2*I),U=Math.round(S-2*I);(i>L||a>U)&&(B>R?(a=U,i=Math.round(a*R)):(i=L,a=Math.round(i/R)))}return{bleed:w,pixelRatio:g,width:r,height:n,dimensions:[r,n],units:v||"px",scaleX:(o=m?Math.round(g*i):Math.round(g*P))/r,scaleY:(s=m?Math.round(g*a):Math.round(g*F))/n,pixelsPerInch:b,viewportWidth:m?Math.round(i):Math.round(P),viewportHeight:m?Math.round(a):Math.round(F),canvasWidth:o,canvasHeight:s,trimWidth:k,trimHeight:_,styleWidth:i,styleHeight:a}}I.units=F;var U=function(e,t){if("string"!=typeof e)throw new TypeError("must specify type string");if(t=t||{},"undefined"==typeof document&&!t.canvas)return null;var r=t.canvas||document.createElement("canvas");"number"==typeof t.width&&(r.width=t.width);"number"==typeof t.height&&(r.height=t.height);var n,i=t;try{var a=[e];0===e.indexOf("webgl")&&a.push("experimental-"+e);for(var o=0;o tag?");if(!(t=U(o,i({},e.attributes,{canvas:a}))))throw new Error("Failed at canvas.getContext('"+o+"') - the browser may not support this context, or a different context may already be in use with this canvas.")}if(r=t.canvas,e.canvas&&r!==e.canvas)throw new Error("The { canvas } and { context } settings must point to the same underlying canvas element");e.pixelated&&(t.imageSmoothingEnabled=!1,t.mozImageSmoothingEnabled=!1,t.oImageSmoothingEnabled=!1,t.webkitImageSmoothingEnabled=!1,t.msImageSmoothingEnabled=!1,r.style["image-rendering"]="pixelated")}return{canvas:r,context:t,ownsCanvas:n}}var q=function(){var e=this;this._settings={},this._props={},this._sketch=void 0,this._raf=null,this._recordTimeout=null,this._lastRedrawResult=void 0,this._isP5Resizing=!1,this._keyboardShortcuts=function(e){void 0===e&&(e={});var t=function(t){if(e.enabled()){var r=c();83!==t.keyCode||t.altKey||!t.metaKey&&!t.ctrlKey?32===t.keyCode?e.togglePlay(t):r&&!t.altKey&&75===t.keyCode&&(t.metaKey||t.ctrlKey)&&(t.preventDefault(),e.commit(t)):(t.preventDefault(),e.save(t))}};return{attach:function(){window.addEventListener("keydown",t)},detach:function(){window.removeEventListener("keydown",t)}}}({enabled:function(){return!1!==e.settings.hotkeys},save:function(t){t.shiftKey?e.props.recording?(e.endRecord(),e.run()):e.record():e.props.recording||e.exportFrame()},togglePlay:function(){e.props.playing?e.pause():e.play()},commit:function(t){e.exportFrame({commit:!0})}}),this._animateHandler=function(){return e.animate()},this._resizeHandler=function(){e.resize()&&e.render()}},N={sketch:{configurable:!0},settings:{configurable:!0},props:{configurable:!0}};N.sketch.get=function(){return this._sketch},N.settings.get=function(){return this._settings},N.props.get=function(){return this._props},q.prototype._computePlayhead=function(e,t){return"number"==typeof t&&isFinite(t)?e/t:0},q.prototype._computeFrame=function(e,t,r,n){return isFinite(r)&&r>1?Math.floor(e*(r-1)):Math.floor(n*t)},q.prototype._computeCurrentFrame=function(){return this._computeFrame(this.props.playhead,this.props.time,this.props.totalFrames,this.props.fps)},q.prototype._getSizeProps=function(){var e=this.props;return{width:e.width,height:e.height,pixelRatio:e.pixelRatio,canvasWidth:e.canvasWidth,canvasHeight:e.canvasHeight,viewportWidth:e.viewportWidth,viewportHeight:e.viewportHeight}},q.prototype.run=function(){if(!this.sketch)throw new Error("should wait until sketch is loaded before trying to play()");return!1!==this.settings.playing&&this.play(),"function"==typeof this.sketch.dispose&&console.warn("In canvas-sketch@0.0.23 the dispose() event has been renamed to unload()"),this.props.started||(this._signalBegin(),this.props.started=!0),this.tick(),this.render(),this},q.prototype._cancelTimeouts=function(){null!=this._raf&&"undefined"!=typeof window&&"function"==typeof window.cancelAnimationFrame&&(window.cancelAnimationFrame(this._raf),this._raf=null),null!=this._recordTimeout&&(clearTimeout(this._recordTimeout),this._recordTimeout=null)},q.prototype.play=function(){var e=this.settings.animate;"animation"in this.settings&&(e=!0,console.warn("[canvas-sketch] { animation } has been renamed to { animate }")),e&&(h()?this.props.playing||(this.props.started||(this._signalBegin(),this.props.started=!0),this.props.playing=!0,this._cancelTimeouts(),this._lastTime=s(),this._raf=window.requestAnimationFrame(this._animateHandler)):console.error("[canvas-sketch] WARN: Using { animate } in Node.js is not yet supported"))},q.prototype.pause=function(){this.props.recording&&this.endRecord(),this.props.playing=!1,this._cancelTimeouts()},q.prototype.togglePlay=function(){this.props.playing?this.pause():this.play()},q.prototype.stop=function(){this.pause(),this.props.frame=0,this.props.playhead=0,this.props.time=0,this.props.deltaTime=0,this.props.started=!1,this.render()},q.prototype.record=function(){var e=this;if(!this.props.recording)if(h()){this.stop(),this.props.playing=!0,this.props.recording=!0;var t=this._createExportOptions({sequence:!0}),r=1/this.props.fps;this._cancelTimeouts();var n,i=function(){return e.props.recording?(e.props.deltaTime=r,e.tick(),e.exportFrame(t).then(function(){e.props.recording&&(e.props.deltaTime=0,e.props.frame++,e.props.frame0){var i,a=n.find(function(e){return e.outputName}),o=n.some(function(e){return e.client}),s=n.some(function(e){return e.stream});i=n.length>1?n.length:a?a.outputName+"/"+n[0].filename:""+n[0].filename;var f="";if(e.sequence)f=isFinite(t.props.totalFrames)?" (frame "+(e.frame+1)+" / "+t.props.totalFrames+")":" (frame "+e.frame+")";else n.length>1&&(f=" files");console.log("%c["+(o?"canvas-sketch-cli":"canvas-sketch")+"]%c "+(s?"Streaming into":"Exported")+" %c"+i+"%c"+f,"color: #8e8e8e;","color: initial;","font-weight: bold;","font-weight: initial;")}return"function"==typeof t.sketch.postExport&&t.sketch.postExport(),r})},q.prototype._wrapContextScale=function(e){this._preRender(),e(this.props),this._postRender()},q.prototype._preRender=function(){var e=this.props;this.props.gl||!e.context||e.p5?e.p5&&e.p5.scale(e.scaleX/e.pixelRatio,e.scaleY/e.pixelRatio):(e.context.save(),!1!==this.settings.scaleContext&&e.context.scale(e.scaleX,e.scaleY))},q.prototype._postRender=function(){var e=this.props;this.props.gl||!e.context||e.p5||e.context.restore(),e.gl&&!1!==this.settings.flush&&!e.p5&&e.gl.flush()},q.prototype.tick=function(){this.sketch&&"function"==typeof this.sketch.tick&&(this._preRender(),this.sketch.tick(this.props),this._postRender())},q.prototype.render=function(){return this.props.p5?(this._lastRedrawResult=void 0,this.props.p5.redraw(),this._lastRedrawResult):this.submitDrawCall()},q.prototype.submitDrawCall=function(){if(this.sketch){var e,t=this.props;return this._preRender(),"function"==typeof this.sketch?e=this.sketch(t):"function"==typeof this.sketch.render&&(e=this.sketch.render(t)),this._postRender(),e}},q.prototype.update=function(e){var t=this;void 0===e&&(e={});var r=["animate"];Object.keys(e).forEach(function(e){if(r.indexOf(e)>=0)throw new Error("Sorry, the { "+e+" } option is not yet supported with update().")});var n=this._settings.canvas,i=this._settings.context;for(var a in e){var o=e[a];void 0!==o&&(t._settings[a]=o)}var s=Object.assign({},this._settings,e);if("time"in e&&"frame"in e)throw new Error("You should specify { time } or { frame } but not both");if("time"in e?delete s.frame:"frame"in e&&delete s.time,"duration"in e&&"totalFrames"in e)throw new Error("You should specify { duration } or { totalFrames } but not both");"duration"in e?delete s.totalFrames:"totalFrames"in e&&delete s.duration,"data"in e&&(this._props.data=e.data);var f=this.getTimeProps(s);if(Object.assign(this._props,f),n!==this._settings.canvas||i!==this._settings.context){var u=V(this._settings),c=u.context;this.props.canvas=u.canvas,this.props.context=c,this._setupGLKey(),this._appendCanvasIfNeeded()}return e.p5&&"function"!=typeof e.p5&&(this.props.p5=e.p5,this.props.p5.draw=function(){t._isP5Resizing||(t._lastRedrawResult=t.submitDrawCall())}),"playing"in e&&(e.playing?this.play():this.pause()),C(this._settings),this.resize(),this.render(),this.props},q.prototype.resize=function(){var e=this._getSizeProps(),t=this.settings,r=this.props,n=L(r,t);Object.assign(this._props,n);var i=this.props,a=i.pixelRatio,o=i.canvasWidth,s=i.canvasHeight,f=i.styleWidth,u=i.styleHeight,c=this.props.canvas;c&&!1!==t.resizeCanvas&&(r.p5?c.width===o&&c.height===s||(this._isP5Resizing=!0,r.p5.pixelDensity(a),r.p5.resizeCanvas(o/a,s/a,!1),this._isP5Resizing=!1):(c.width!==o&&(c.width=o),c.height!==s&&(c.height=s)),h()&&!1!==t.styleCanvas&&(c.style.width=f+"px",c.style.height=u+"px"));var l=this._getSizeProps(),p=!g(e,l);return p&&this._sizeChanged(),p},q.prototype._sizeChanged=function(){this.sketch&&"function"==typeof this.sketch.resize&&this.sketch.resize(this.props)},q.prototype.animate=function(){if(this.props.playing)if(h()){this._raf=window.requestAnimationFrame(this._animateHandler);var e=s(),t=1e3/this.props.fps,r=e-this._lastTime,n=this.props.duration,i="number"==typeof n&&isFinite(n),a=!0,o=this.settings.playbackRate;"fixed"===o?r=t:"throttle"===o?r>t?this._lastTime=e-=r%t:a=!1:this._lastTime=e;var f=r/1e3,u=this.props.time+f*this.props.timeScale;u<0&&i&&(u=n+u);var c=!1,l=!1;if(i&&u>=n&&(!1!==this.settings.loop?(a=!0,u%=n,l=!0):(a=!1,u=n,c=!0),this._signalEnd()),a){this.props.deltaTime=f,this.props.time=u,this.props.playhead=this._computePlayhead(u,n);var p=this.props.frame;this.props.frame=this._computeCurrentFrame(),l&&this._signalBegin(),p!==this.props.frame&&this.tick(),this.render(),this.props.deltaTime=0}c&&this.pause()}else console.error("[canvas-sketch] WARN: Animation in Node.js is not yet supported")},q.prototype.dispatch=function(e){if("function"!=typeof e)throw new Error("must pass function into dispatch()");e(this.props),this.render()},q.prototype.mount=function(){this._appendCanvasIfNeeded()},q.prototype.unmount=function(){h()&&(window.removeEventListener("resize",this._resizeHandler),this._keyboardShortcuts.detach()),this.props.canvas.parentElement&&this.props.canvas.parentElement.removeChild(this.props.canvas)},q.prototype._appendCanvasIfNeeded=function(){h()&&(!1!==this.settings.parent&&this.props.canvas&&!this.props.canvas.parentElement&&(this.settings.parent||document.body).appendChild(this.props.canvas))},q.prototype._setupGLKey=function(){var e;this.props.context&&("function"==typeof(e=this.props.context).clear&&"function"==typeof e.clearColor&&"function"==typeof e.bufferData?this._props.gl=this.props.context:delete this._props.gl)},q.prototype.getTimeProps=function(e){void 0===e&&(e={});var t=e.duration,r=e.totalFrames,n=l(e.timeScale,1),i=l(e.fps,24),a="number"==typeof t&&isFinite(t),o="number"==typeof r&&isFinite(r),s=a?Math.floor(i*t):void 0,f=o?r/i:void 0;if(a&&o&&s!==r)throw new Error("You should specify either duration or totalFrames, but not both. Or, they must match exactly.");void 0===e.dimensions&&void 0!==e.units&&console.warn("You've specified a { units } setting but no { dimension }, so the units will be ignored."),r=l(r,s,Infinity),t=l(t,f,Infinity);var u=e.time,c=e.frame,h="number"==typeof u&&isFinite(u),p="number"==typeof c&&isFinite(c),d=0,m=0,g=0;if(h&&p)throw new Error("You should specify either start frame or time, but not both.");return h?(g=this._computePlayhead(d=u,t),m=this._computeFrame(g,d,r,i)):p&&(g=this._computePlayhead(d=(m=c)/i,t)),{playhead:g,time:d,frame:m,duration:t,totalFrames:r,fps:i,timeScale:n}},q.prototype.setup=function(e){var t=this;if(void 0===e&&(e={}),this.sketch)throw new Error("Multiple setup() calls not yet supported.");this._settings=Object.assign({},e,this._settings),C(this._settings);var r=V(this._settings),n=r.context,i=r.canvas,a=this.getTimeProps(this._settings);this._props=Object.assign({},a,{canvas:i,context:n,deltaTime:0,started:!1,exporting:!1,playing:!1,recording:!1,settings:this.settings,data:this.settings.data,render:function(){return t.render()},togglePlay:function(){return t.togglePlay()},dispatch:function(e){return t.dispatch(e)},tick:function(){return t.tick()},resize:function(){return t.resize()},update:function(e){return t.update(e)},exportFrame:function(e){return t.exportFrame(e)},record:function(){return t.record()},play:function(){return t.play()},pause:function(){return t.pause()},stop:function(){return t.stop()}}),this._setupGLKey(),this.resize()},q.prototype.loadAndRun=function(e,t){var r=this;return this.load(e,t).then(function(){return r.run(),r})},q.prototype.unload=function(){var e=this;this.pause(),this.sketch&&("function"==typeof this.sketch.unload&&this._wrapContextScale(function(t){return e.sketch.unload(t)}),this._sketch=null)},q.prototype.destroy=function(){this.unload(),this.unmount()},q.prototype.load=function(e,t){var r=this;if("function"!=typeof e)throw new Error("The function must take in a function as the first parameter. Example:\n canvasSketcher(() => { ... }, settings)");this.sketch&&this.unload(),void 0!==t&&this.update(t),this._preRender();var n=Promise.resolve();if(this.settings.p5){if(!h())throw new Error("[canvas-sketch] ERROR: Using p5.js in Node.js is not supported");n=new Promise(function(e){var t,n=r.settings.p5;n.p5&&(t=n.preload,n=n.p5);var i=function(n){t&&(n.preload=function(){return t(n)}),n.setup=function(){var t=r.props,i="webgl"===r.settings.context,a=i?n.WEBGL:n.P2D;n.noLoop(),n.pixelDensity(t.pixelRatio),n.createCanvas(t.viewportWidth,t.viewportHeight,a),i&&r.settings.attributes&&n.setAttributes(r.settings.attributes),r.update({p5:n,canvas:n.canvas,context:n._renderer.drawingContext}),e()}};if("function"==typeof n)new n(i);else{if("function"!=typeof window.createCanvas)throw new Error("{ p5 } setting is passed but can't find p5.js in global (window) scope. Maybe you did not create it globally?\nnew p5(); // <-- attaches to global scope");i(window)}})}return n.then(function(){var t=e(r.props);return f(t)||(t=Promise.resolve(t)),t}).then(function(e){return e||(e={}),r._sketch=e,h()&&(r._keyboardShortcuts.attach(),window.addEventListener("resize",r._resizeHandler)),r._postRender(),r._sizeChanged(),r}).catch(function(e){throw console.warn("Could not start sketch, the async loading function rejected with an error:\n Error: "+e.message),e})},Object.defineProperties(q.prototype,N);var H="hot-id-cache",G=[];function W(e,t){if(void 0===t&&(t={}),t.p5){if(t.canvas||t.context&&"string"!=typeof t.context)throw new Error('In { p5 } mode, you can\'t pass your own canvas or context, unless the context is a "webgl" or "2d" string');t=Object.assign({},t,{canvas:!1,context:"string"==typeof t.context&&t.context})}var r,n,i=(r=c())&&r.hot;i&&(n=l(t.id,"$__DEFAULT_CANVAS_SKETCH_ID__$"));var a=i&&"string"==typeof n;a&&G.includes(n)&&(console.warn("Warning: You have multiple calls to canvasSketch() in --hot mode. You must pass unique { id } strings in settings to enable hot reload across multiple sketches. ",n),a=!1);var o=Promise.resolve();if(a){G.push(n);var s=function(e){var t=c();if(t)return t[H]=t[H]||{},t[H][e]}(n);if(s){var f=function(){var e,r=(e=s.manager,t.animate?{time:e.props.time}:void 0);return s.manager.destroy(),r};o=s.load.then(f).catch(f)}}return o.then(function(r){var i,o,s,f,u=new q;return e?(t=Object.assign({},t,r),u.setup(t),u.mount(),i=u.loadAndRun(e)):i=Promise.resolve(u),a&&(o=n,s={load:i,manager:u},(f=c())&&(f[H]=f[H]||{},f[H][o]=s)),i})}return W.canvasSketch=W,W.PaperSizes=D,W})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],27:[function(e,t,r){(function(e){(function(){var r=function(){"use strict";function t(e,t){return null!=t&&e instanceof t}var r,n,i;try{r=Map}catch(e){r=function(){}}try{n=Set}catch(e){n=function(){}}try{i=Promise}catch(e){i=function(){}}function a(o,f,u,c,l){"object"==typeof f&&(u=f.depth,c=f.prototype,l=f.includeNonEnumerable,f=f.circular);var h=[],p=[],d=void 0!==e;return void 0===f&&(f=!0),void 0===u&&(u=Infinity),function o(u,m){if(null===u)return null;if(0===m)return u;var g,y;if("object"!=typeof u)return u;if(t(u,r))g=new r;else if(t(u,n))g=new n;else if(t(u,i))g=new i(function(e,t){u.then(function(t){e(o(t,m-1))},function(e){t(o(e,m-1))})});else if(a.__isArray(u))g=[];else if(a.__isRegExp(u))g=new RegExp(u.source,s(u)),u.lastIndex&&(g.lastIndex=u.lastIndex);else if(a.__isDate(u))g=new Date(u.getTime());else{if(d&&e.isBuffer(u))return g=e.allocUnsafe?e.allocUnsafe(u.length):new e(u.length),u.copy(g),g;t(u,Error)?g=Object.create(u):void 0===c?(y=Object.getPrototypeOf(u),g=Object.create(y)):(g=Object.create(c),y=c)}if(f){var v=h.indexOf(u);if(-1!=v)return p[v];h.push(u),p.push(g)}for(var b in t(u,r)&&u.forEach(function(e,t){var r=o(t,m-1),n=o(e,m-1);g.set(r,n)}),t(u,n)&&u.forEach(function(e){var t=o(e,m-1);g.add(t)}),u){var w;y&&(w=Object.getOwnPropertyDescriptor(y,b)),w&&null==w.set||(g[b]=o(u[b],m-1))}if(Object.getOwnPropertySymbols){var x=Object.getOwnPropertySymbols(u);for(b=0;b.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.3576*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)+.1805*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)),100*(.2126*t+.7152*r+.0722*n),100*(.0193*t+.1192*r+.9505*n)]}function c(e){var t=u(e),r=t[0],n=t[1],i=t[2];return n/=100,i/=108.883,r=(r/=95.047)>.008856?Math.pow(r,1/3):7.787*r+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(r-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]}function l(e){var t,r,n,i,a,o=e[0]/360,s=e[1]/100,f=e[2]/100;if(0==s)return[a=255*f,a,a];t=2*f-(r=f<.5?f*(1+s):f+s-f*s),i=[0,0,0];for(var u=0;u<3;u++)(n=o+1/3*-(u-1))<0&&n++,n>1&&n--,i[u]=255*(a=6*n<1?t+6*(r-t)*n:2*n<1?r:3*n<2?t+(r-t)*(2/3-n)*6:t);return i}function h(e){var t=e[0]/60,r=e[1]/100,n=e[2]/100,i=Math.floor(t)%6,a=t-Math.floor(t),o=255*n*(1-r),s=255*n*(1-r*a),f=255*n*(1-r*(1-a));n*=255;switch(i){case 0:return[n,f,o];case 1:return[s,n,o];case 2:return[o,n,f];case 3:return[o,s,n];case 4:return[f,o,n];case 5:return[n,o,s]}}function p(e){var t,n,i,a,o=e[0]/360,s=e[1]/100,f=e[2]/100,u=s+f;switch(u>1&&(s/=u,f/=u),i=6*o-(t=Math.floor(6*o)),0!=(1&t)&&(i=1-i),a=s+i*((n=1-f)-s),t){default:case 6:case 0:r=n,g=a,b=s;break;case 1:r=a,g=n,b=s;break;case 2:r=s,g=n,b=a;break;case 3:r=s,g=a,b=n;break;case 4:r=a,g=s,b=n;break;case 5:r=n,g=s,b=a}return[255*r,255*g,255*b]}function d(e){var t=e[1]/100,r=e[2]/100,n=e[3]/100;return[255*(1-Math.min(1,e[0]/100*(1-n)+n)),255*(1-Math.min(1,t*(1-n)+n)),255*(1-Math.min(1,r*(1-n)+n))]}function m(e){var t,r,n,i=e[0]/100,a=e[1]/100,o=e[2]/100;return r=-.9689*i+1.8758*a+.0415*o,n=.0557*i+-.204*a+1.057*o,t=(t=3.2406*i+-1.5372*a+-.4986*o)>.0031308?1.055*Math.pow(t,1/2.4)-.055:t*=12.92,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:r*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,[255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1)),255*(n=Math.min(Math.max(0,n),1))]}function y(e){var t=e[0],r=e[1],n=e[2];return r/=100,n/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116)-16,500*(t-r),200*(r-(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116))]}function v(e){var t,r,n,i,a=e[0],o=e[1],s=e[2];return a<=8?i=(r=100*a/903.3)/100*7.787+16/116:(r=100*Math.pow((a+16)/116,3),i=Math.pow(r/100,1/3)),[t=t/95.047<=.008856?t=95.047*(o/500+i-16/116)/7.787:95.047*Math.pow(o/500+i,3),r,n=n/108.883<=.008859?n=108.883*(i-s/200-16/116)/7.787:108.883*Math.pow(i-s/200,3)]}function w(e){var t,r=e[0],n=e[1],i=e[2];return(t=360*Math.atan2(i,n)/2/Math.PI)<0&&(t+=360),[r,Math.sqrt(n*n+i*i),t]}function x(e){return m(v(e))}function A(e){var t,r=e[1];return t=e[2]/360*2*Math.PI,[e[0],r*Math.cos(t),r*Math.sin(t)]}function k(e){return _[e]}t.exports={rgb2hsl:i,rgb2hsv:a,rgb2hwb:o,rgb2cmyk:s,rgb2keyword:f,rgb2xyz:u,rgb2lab:c,rgb2lch:function(e){return w(c(e))},hsl2rgb:l,hsl2hsv:function(e){var t=e[0],r=e[1]/100,n=e[2]/100;if(0===n)return[0,0,0];return[t,100*(2*(r*=(n*=2)<=1?n:2-n)/(n+r)),100*((n+r)/2)]},hsl2hwb:function(e){return o(l(e))},hsl2cmyk:function(e){return s(l(e))},hsl2keyword:function(e){return f(l(e))},hsv2rgb:h,hsv2hsl:function(e){var t,r,n=e[1]/100,i=e[2]/100;return t=n*i,[e[0],100*(t=(t/=(r=(2-n)*i)<=1?r:2-r)||0),100*(r/=2)]},hsv2hwb:function(e){return o(h(e))},hsv2cmyk:function(e){return s(h(e))},hsv2keyword:function(e){return f(h(e))},hwb2rgb:p,hwb2hsl:function(e){return i(p(e))},hwb2hsv:function(e){return a(p(e))},hwb2cmyk:function(e){return s(p(e))},hwb2keyword:function(e){return f(p(e))},cmyk2rgb:d,cmyk2hsl:function(e){return i(d(e))},cmyk2hsv:function(e){return a(d(e))},cmyk2hwb:function(e){return o(d(e))},cmyk2keyword:function(e){return f(d(e))},keyword2rgb:k,keyword2hsl:function(e){return i(k(e))},keyword2hsv:function(e){return a(k(e))},keyword2hwb:function(e){return o(k(e))},keyword2cmyk:function(e){return s(k(e))},keyword2lab:function(e){return c(k(e))},keyword2xyz:function(e){return u(k(e))},xyz2rgb:m,xyz2lab:y,xyz2lch:function(e){return w(y(e))},lab2xyz:v,lab2rgb:x,lab2lch:w,lch2lab:A,lch2xyz:function(e){return v(A(e))},lch2rgb:function(e){return x(A(e))}};var _={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},M={};for(var E in _)M[JSON.stringify(_[E])]=E},{}],29:[function(e,t,r){var n=e("./conversions"),i=function(){return new u};for(var a in n){i[a+"Raw"]=function(e){return function(t){return"number"==typeof t&&(t=Array.prototype.slice.call(arguments)),n[e](t)}}(a);var o=/(\w+)2(\w+)/.exec(a),s=o[1],f=o[2];(i[s]=i[s]||{})[f]=i[a]=function(e){return function(t){"number"==typeof t&&(t=Array.prototype.slice.call(arguments));var r=n[e](t);if("string"==typeof r||void 0===r)return r;for(var i=0;i1e-6)if(Math.abs(l*f-u*c)>1e-6&&a){var p=n-o,d=i-s,m=f*f+u*u,g=p*p+d*d,y=Math.sqrt(m),v=Math.sqrt(h),b=a*Math.tan((t-Math.acos((m+h-g)/(2*y*v)))/2),w=b/v,x=b/y;Math.abs(w-1)>1e-6&&(this._+="L"+(e+w*c)+","+(r+w*l)),this._+="A"+a+","+a+",0,0,"+ +(l*p>c*d)+","+(this._x1=e+x*f)+","+(this._y1=r+x*u)}else this._+="L"+(this._x1=e)+","+(this._y1=r);else;},arc:function(e,i,a,o,s,f){e=+e,i=+i,f=!!f;var u=(a=+a)*Math.cos(o),c=a*Math.sin(o),l=e+u,h=i+c,p=1^f,d=f?o-s:s-o;if(a<0)throw new Error("negative radius: "+a);null===this._x1?this._+="M"+l+","+h:(Math.abs(this._x1-l)>1e-6||Math.abs(this._y1-h)>1e-6)&&(this._+="L"+l+","+h),a&&(d<0&&(d=d%r+r),d>n?this._+="A"+a+","+a+",0,1,"+p+","+(e-u)+","+(i-c)+"A"+a+","+a+",0,1,"+p+","+(this._x1=l)+","+(this._y1=h):d>1e-6&&(this._+="A"+a+","+a+",0,"+ +(d>=t)+","+p+","+(this._x1=e+a*Math.cos(s))+","+(this._y1=i+a*Math.sin(s))))},rect:function(e,t,r,n){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},toString:function(){return this._}},e.path=a,Object.defineProperty(e,"__esModule",{value:!0})},"object"==typeof r&&void 0!==t?i(r):"function"==typeof define&&define.amd?define(["exports"],i):i((n=n||self).d3=n.d3||{})},{}],32:[function(e,t,r){t.exports=function(){for(var e=0;e1&&n--,i[u]=a=6*n<1?t+6*(r-t)*n:2*n<1?r:3*n<2?t+(r-t)*(2/3-n)*6:t;return i}},{}],34:[function(e,t,r){t.exports=function(e){var t,r,n,i=e[0],a=e[1],o=e[2],s=Math.min(i,a,o),f=Math.max(i,a,o),u=f-s;f===s?t=0:i===f?t=(a-o)/u:a===f?t=2+(o-i)/u:o===f&&(t=4+(i-a)/u);(t=Math.min(60*t,360))<0&&(t+=360);n=(s+f)/2,r=f===s?0:n<=.5?u/(f+s):u/(2-f-s);return[t/360,r,n]}},{}],35:[function(e,t,r){"use strict";function n(e,t,r){var n,o,s,f,u,c=e.length,l=a(e[0],t),h=[];for(r||(r=[]),n=1;nt[2]&&(r|=2),e[1]t[3]&&(r|=8),r}t.exports=n,n.polyline=n,n.polygon=function(e,t){var r,n,o,s,f,u,c;for(n=1;n<=8;n*=2){for(r=[],s=!(a(o=e[e.length-1],t)&n),f=0;f4?(o=g[g.length-4],s=g[g.length-3]):(o=h,s=p),r.push(g)}return r};var n=e("svg-arc-to-cubic-bezier");function i(e,t,r,n){return["C",e,t,r,n,r,n]}function a(e,t,r,n,i,a){return["C",e/3+2/3*r,t/3+2/3*n,i/3+2/3*r,a/3+2/3*n,i,a]}},{"svg-arc-to-cubic-bezier":43}],37:[function(e,t,r){var n=e("color-convert");t.exports=function(e){var t,r,i,a;if(t=/^((?:rgb|hs[lv]|cmyk|xyz|lab)a?)\s*\(([^\)]*)\)/.exec(e)){var o=t[1],s="cmyk"===(f=o.replace(/a$/,""))?4:3;r=n[f],i=t[2].replace(/^\s+|\s+$/g,"").split(/\s*,\s*/).map(function(e,t){return/%$/.test(e)&&t===s?parseFloat(e)/100:(/%$/.test(e),parseFloat(e))}),o===f&&i.push(1),a=void 0===i[s]?1:i[s],i=i.slice(0,s),r[f]=function(){return i}}else if(/^#[A-Fa-f0-9]+$/.test(e)){var f=e.replace(/^#/,"");r=n.rgb,i=(i=f.split(3===(s=f.length)?/(.)/:/(..)/)).filter(Boolean).map(function(e){return 3===s?parseInt(e+e,16):parseInt(e,16)}),a=1,r.rgb=function(){return i},i[0]||(i[0]=0),i[1]||(i[1]=0),i[2]||(i[2]=0)}else(r=n.keyword).keyword=function(){return e},i=e,a=1;var u={rgb:void 0,hsl:void 0,hsv:void 0,cmyk:void 0,keyword:void 0,hex:void 0};try{u.rgb=r.rgb(i)}catch(e){}try{u.hsl=r.hsl(i)}catch(e){}try{u.hsv=r.hsv(i)}catch(e){}try{u.cmyk=r.cmyk(i)}catch(e){}try{u.keyword=r.keyword(i)}catch(e){}return u.rgb&&(u.hex="#"+u.rgb.map(function(e){var t=e.toString(16);return 1===t.length?"0"+t:t}).join("")),u.rgb&&(u.rgba=u.rgb.concat(a)),u.hsl&&(u.hsla=u.hsl.concat(a)),u.hsv&&(u.hsva=u.hsv.concat(a)),u.cmyk&&(u.cmyka=u.cmyk.concat(a)),u}},{"color-convert":29}],38:[function(e,t,r){t.exports=function(e){var t=[];return e.replace(i,function(e,r,i){var o=r.toLowerCase();for(i=function(e){var t=e.match(a);return t?t.map(Number):[]}(i),"m"==o&&i.length>2&&(t.push([r].concat(i.splice(0,2))),o="l",r="m"==r?"l":"L");;){if(i.length==n[o])return i.unshift(r),t.push(i);if(i.length=0&&(0|e)===e||n("invalid parameter type, ("+e+")"+a(t)+". must be a nonnegative integer")},oneOf:s,shaderError:function(e,t,n,a,o){if(!e.getShaderParameter(t,e.COMPILE_STATUS)){var s=e.getShaderInfoLog(t),f=a===e.FRAGMENT_SHADER?"fragment":"vertex";v(n,"string",f+" shader source must be a string",o);var c=m(n,o),l=function(e){var t=[];return e.split("\n").forEach(function(e){if(!(e.length<5)){var r=/^ERROR:\s+(\d+):(\d+):\s*(.*)$/.exec(e);r?t.push(new h(0|r[1],0|r[2],r[3].trim())):e.length>0&&t.push(new h("unknown",0,e))}}),t}(s);!function(e,t){t.forEach(function(t){var r=e[t.file];if(r){var n=r.index[t.line];if(n)return n.errors.push(t),void(r.hasErrors=!0)}e.unknown.hasErrors=!0,e.unknown.lines[0].errors.push(t)})}(c,l),Object.keys(c).forEach(function(e){var t=c[e];if(t.hasErrors){var n=[""],i=[""];a("file number "+e+": "+t.name+"\n","color:red;text-decoration:underline;font-weight:bold"),t.lines.forEach(function(e){if(e.errors.length>0){a(u(e.number,4)+"| ","background-color:yellow; font-weight:bold"),a(e.line+r,"color:red; background-color:yellow; font-weight:bold");var t=0;e.errors.forEach(function(n){var i=n.message,o=/^\s*'(.*)'\s*:\s*(.*)$/.exec(i);if(o){var s=o[1];switch(i=o[2],s){case"assign":s="="}t=Math.max(e.line.indexOf(s,t),0)}else t=0;a(u("| ",6)),a(u("^^^",t+3)+r,"font-weight:bold"),a(u("| ",6)),a(i+r,"font-weight:bold")}),a(u("| ",6)+r)}else a(u(e.number,4)+"| "),a(e.line+r,"color:red")}),"undefined"==typeof document||window.chrome?console.log(n.join("")):(i[0]=n.join("%c"),console.log.apply(console,i))}function a(e,t){n.push(e),i.push(t||"")}}),i.raise("Error compiling "+f+" shader, "+c[0].name)}},linkError:function(e,t,n,a,o){if(!e.getProgramParameter(t,e.LINK_STATUS)){var s=e.getProgramInfoLog(t),f=m(n,o),u='Error linking program with vertex shader, "'+m(a,o)[0].name+'", and fragment shader "'+f[0].name+'"';"undefined"!=typeof document?console.log("%c"+u+r+"%c"+s,"color:red;text-decoration:underline;font-weight:bold","color:red"):console.log(u+r+s),i.raise(u)}},callSite:d,saveCommandRef:g,saveDrawInfo:function(e,t,r,n){function i(e){return e?n.id(e):0}function a(e,t){Object.keys(t).forEach(function(t){e[n.id(t)]=!0})}g(e),e._fragId=i(e.static.frag),e._vertId=i(e.static.vert);var o=e._uniformSet={};a(o,t.static),a(o,t.dynamic);var s=e._attributeSet={};a(s,r.static),a(s,r.dynamic),e._hasCount="count"in e.static||"count"in e.dynamic||"elements"in e.static||"elements"in e.dynamic},framebufferFormat:function(e,t,r){e.texture?s(e.texture._texture.internalformat,t,"unsupported texture format for attachment"):s(e.renderbuffer._renderbuffer.format,r,"unsupported renderbuffer format for attachment")},guessCommand:p,texture2D:function(e,t,r){var n,a=t.width,o=t.height,s=t.channels;i(a>0&&a<=r.maxTextureSize&&o>0&&o<=r.maxTextureSize,"invalid texture shape"),e.wrapS===b&&e.wrapT===b||i(D(a)&&D(o),"incompatible wrap mode for texture, both width and height must be power of 2"),1===t.mipmask?1!==a&&1!==o&&i(e.minFilter!==x&&e.minFilter!==k&&e.minFilter!==A&&e.minFilter!==_,"min filter requires mipmap"):(i(D(a)&&D(o),"texture must be a square power of 2 to support mipmapping"),i(t.mipmask===(a<<1)-1,"missing or incomplete mipmap data")),t.type===M&&(r.extensions.indexOf("oes_texture_float_linear")<0&&i(e.minFilter===w&&e.magFilter===w,"filter not supported, must enable oes_texture_float_linear"),i(!e.genMipmaps,"mipmap generation not supported with float textures"));var f=t.images;for(n=0;n<16;++n)if(f[n]){var u=a>>n,c=o>>n;i(t.mipmask&1<0&&a<=n.maxTextureSize&&o>0&&o<=n.maxTextureSize,"invalid texture shape"),i(a===o,"cube map must be square"),i(t.wrapS===b&&t.wrapT===b,"wrap mode not supported by cube map");for(var f=0;f>l,d=o>>l;i(u.mipmask&1<1&&r===n&&('"'===r||"'"===r))return['"'+L(t.substr(1,t.length-2))+'"'];var i=/\[(false|true|null|\d+|'[^']*'|"[^"]*")\]/.exec(t);if(i)return e(t.substr(0,i.index)).concat(e(i[1])).concat(e(t.substr(i.index+i[0].length)));var a=t.split(".");if(1===a.length)return['"'+L(t)+'"'];for(var o=[],s=0;se(t,r+"["+n+"]"))):t instanceof z?t:void P(!1,"invalid option type in uniform "+r)},accessor:U},q={next:"function"==typeof requestAnimationFrame?function(e){return requestAnimationFrame(e)}:function(e){return setTimeout(e,16)},cancel:"function"==typeof cancelAnimationFrame?function(e){return cancelAnimationFrame(e)}:clearTimeout},N="undefined"!=typeof performance&&performance.now?function(){return performance.now()}:function(){return+new Date};function H(e){return"string"==typeof e?e.split():(P(Array.isArray(e),"invalid extension array"),e)}function G(e){return"string"==typeof e?(P("undefined"!=typeof document,"not supported outside of DOM"),document.querySelector(e)):e}function W(e){var r,n,i,a,o,s=e||{},f={},u=[],c=[],l="undefined"==typeof window?1:window.devicePixelRatio,h=!1,p=function(e){e&&P.raise(e)},d=function(){};if("string"==typeof s?(P("undefined"!=typeof document,"selector queries only supported in DOM enviroments"),r=document.querySelector(s),P(r,"invalid query string for element")):"object"==typeof s?"string"==typeof(o=s).nodeName&&"function"==typeof o.appendChild&&"function"==typeof o.getBoundingClientRect?r=s:!function(e){return"function"==typeof e.drawArrays||"function"==typeof e.drawElements}(s)?(P.constructor(s),"gl"in s?a=s.gl:"canvas"in s?i=G(s.canvas):"container"in s&&(n=G(s.container)),"attributes"in s&&P.type(f=s.attributes,"object","invalid context attributes"),"extensions"in s&&(u=H(s.extensions)),"optionalExtensions"in s&&(c=H(s.optionalExtensions)),"onDone"in s&&(P.type(s.onDone,"function","invalid or missing onDone callback"),p=s.onDone),"profile"in s&&(h=!!s.profile),"pixelRatio"in s&&P((l=+s.pixelRatio)>0,"invalid pixel ratio")):i=(a=s).canvas:P.raise("invalid arguments to regl"),r&&("canvas"===r.nodeName.toLowerCase()?i=r:n=r),!a){if(!i){P("undefined"!=typeof document,"must manually specify webgl context outside of DOM environments");var m=function(e,r,n){var i,a=document.createElement("canvas");function o(){var r=window.innerWidth,i=window.innerHeight;if(e!==document.body){var o=e.getBoundingClientRect();r=o.right-o.left,i=o.bottom-o.top}a.width=n*r,a.height=n*i,t(a.style,{width:r+"px",height:i+"px"})}return t(a.style,{border:0,margin:0,padding:0,top:0,left:0}),e.appendChild(a),e===document.body&&(a.style.position="absolute",t(e.style,{margin:0,padding:0})),e!==document.body&&"function"==typeof ResizeObserver?(i=new ResizeObserver(function(){setTimeout(o)})).observe(e):window.addEventListener("resize",o,!1),o(),{canvas:a,onDestroy:function(){i?i.disconnect():window.removeEventListener("resize",o),e.removeChild(a)}}}(n||document.body,0,l);if(!m)return null;i=m.canvas,d=m.onDestroy}void 0===f.premultipliedAlpha&&(f.premultipliedAlpha=!0),a=function(e,t){function r(r){try{return e.getContext(r,t)}catch(e){return null}}return r("webgl")||r("experimental-webgl")||r("webgl-experimental")}(i,f)}return a?{gl:a,canvas:i,container:n,extensions:u,optionalExtensions:c,pixelRatio:l,profile:h,onDone:p,onDestroy:d}:(d(),p("webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org"),null)}function Y(e,t){for(var r=Array(e),n=0;n65535)<<4,t|=r=((e>>>=t)>255)<<3,t|=r=((e>>>=r)>15)<<2,(t|=r=((e>>>=r)>3)<<1)|(e>>>=r)>>1}function re(){var e=Y(8,function(){return[]});function t(t){var r=function(e){for(var t=16;t<=1<<28;t*=16)if(e<=t)return t;return 0}(t),n=e[te(r)>>2];return n.length>0?n.pop():new ArrayBuffer(r)}function r(t){e[te(t.byteLength)>>2].push(t)}return{alloc:t,free:r,allocType:function(e,r){var n=null;switch(e){case Q:n=new Int8Array(t(r),0,r);break;case X:n=new Uint8Array(t(r),0,r);break;case K:n=new Int16Array(t(2*r),0,r);break;case $:n=new Uint16Array(t(2*r),0,r);break;case J:n=new Int32Array(t(4*r),0,r);break;case Z:n=new Uint32Array(t(4*r),0,r);break;case ee:n=new Float32Array(t(4*r),0,r);break;default:return null}return n.length!==r?n.subarray(0,r):n},freeType:function(e){r(e.buffer)}}}var ne=re();ne.zero=re();var ie=function(e,t){var r=1;t.ext_texture_filter_anisotropic&&(r=e.getParameter(34047));var n=1,i=1;t.webgl_draw_buffers&&(n=e.getParameter(34852),i=e.getParameter(36063));var a=!!t.oes_texture_float;if(a){var o=e.createTexture();e.bindTexture(3553,o),e.texImage2D(3553,0,6408,1,1,0,6408,5126,null);var s=e.createFramebuffer();if(e.bindFramebuffer(36160,s),e.framebufferTexture2D(36160,36064,3553,o,0),e.bindTexture(3553,null),36053!==e.checkFramebufferStatus(36160))a=!1;else{e.viewport(0,0,1,1),e.clearColor(1,0,0,1),e.clear(16384);var f=ne.allocType(5126,4);e.readPixels(0,0,1,1,6408,5126,f),e.getError()?a=!1:(e.deleteFramebuffer(s),e.deleteTexture(o),a=1===f[0]),ne.freeType(f)}}var u=!0;if(!("undefined"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\//.test(navigator.appVersion)||/Edge/.test(navigator.userAgent)))){var c=e.createTexture(),l=ne.allocType(5121,36);e.activeTexture(33984),e.bindTexture(34067,c),e.texImage2D(34069,0,6408,3,3,0,6408,5121,l),ne.freeType(l),e.bindTexture(34067,null),e.deleteTexture(c),u=!e.getError()}return{colorBits:[e.getParameter(3410),e.getParameter(3411),e.getParameter(3412),e.getParameter(3413)],depthBits:e.getParameter(3414),stencilBits:e.getParameter(3415),subpixelBits:e.getParameter(3408),extensions:Object.keys(t).filter(function(e){return!!t[e]}),maxAnisotropic:r,maxDrawbuffers:n,maxColorAttachments:i,pointSizeDims:e.getParameter(33901),lineWidthDims:e.getParameter(33902),maxViewportDims:e.getParameter(3386),maxCombinedTextureUnits:e.getParameter(35661),maxCubeMapSize:e.getParameter(34076),maxRenderbufferSize:e.getParameter(34024),maxTextureUnits:e.getParameter(34930),maxTextureSize:e.getParameter(3379),maxAttributes:e.getParameter(34921),maxVertexUniforms:e.getParameter(36347),maxVertexTextureUnits:e.getParameter(35660),maxVaryingVectors:e.getParameter(36348),maxFragmentUniforms:e.getParameter(36349),glsl:e.getParameter(35724),renderer:e.getParameter(7937),vendor:e.getParameter(7936),version:e.getParameter(7938),readFloat:a,npotTextureCube:u}};function ae(t){return!!t&&"object"==typeof t&&Array.isArray(t.shape)&&Array.isArray(t.stride)&&"number"==typeof t.offset&&t.shape.length===t.stride.length&&(Array.isArray(t.data)||e(t.data))}var oe=function(e){return Object.keys(e).map(function(t){return e[t]})},se={shape:function(e){for(var t=[],r=e;r.length;r=r[0])t.push(r.length);return t},flatten:function(e,t,r,n){var i=1;if(t.length)for(var a=0;a>>31<<15,a=(n<<1>>>24)-127,o=n>>13&1023;if(a<-24)t[r]=i;else if(a<-14){t[r]=i+(o+1024>>-14-a)}else t[r]=a>15?i+31744:i+(a+15<<10)+o}return t}function Le(t){return Array.isArray(t)||e(t)}var Ue=function(e){return!(e&e-1||!e)},Ve=34467,qe=3553,Ne=34067,He=34069,Ge=6408,We=6406,Ye=6407,Qe=6409,Xe=6410,Ke=32854,$e=32855,Je=36194,Ze=32819,et=32820,tt=33635,rt=34042,nt=6402,it=34041,at=35904,ot=35906,st=36193,ft=33776,ut=33777,ct=33778,lt=33779,ht=35986,pt=35987,dt=34798,mt=35840,gt=35841,yt=35842,vt=35843,bt=36196,wt=5121,xt=5123,At=5125,kt=5126,_t=10242,Mt=10243,Et=10497,St=33071,Tt=33648,Ot=10240,jt=10241,Ct=9728,Dt=9729,Pt=9984,Ft=9985,Rt=9986,Bt=9987,It=33170,zt=4352,Lt=4353,Ut=4354,Vt=34046,qt=3317,Nt=37440,Ht=37441,Gt=37443,Wt=37444,Yt=33984,Qt=[Pt,Rt,Ft,Bt],Xt=[0,Qe,Xe,Ye,Ge],Kt={};function $t(e){return"[object "+e+"]"}Kt[Qe]=Kt[We]=Kt[nt]=1,Kt[it]=Kt[Xe]=2,Kt[Ye]=Kt[at]=3,Kt[Ge]=Kt[ot]=4;var Jt=$t("HTMLCanvasElement"),Zt=$t("OffscreenCanvas"),er=$t("CanvasRenderingContext2D"),tr=$t("ImageBitmap"),rr=$t("HTMLImageElement"),nr=$t("HTMLVideoElement"),ir=Object.keys(ue).concat([Jt,Zt,er,tr,rr,nr]),ar=[];ar[wt]=1,ar[kt]=4,ar[st]=2,ar[xt]=2,ar[At]=4;var or=[];function sr(e){return Array.isArray(e)&&(0===e.length||"number"==typeof e[0])}function fr(e){return!!Array.isArray(e)&&!(0===e.length||!Le(e[0]))}function ur(e){return Object.prototype.toString.call(e)}function cr(e){return ur(e)===Jt}function lr(e){return ur(e)===Zt}function hr(e){if(!e)return!1;var t=ur(e);return ir.indexOf(t)>=0||(sr(e)||fr(e)||ae(e))}function pr(e){return 0|ue[Object.prototype.toString.call(e)]}function dr(e,t){return ne.allocType(e.type===st?kt:e.type,t)}function mr(e,t){e.type===st?(e.data=ze(t),ne.freeType(t)):e.data=t}function gr(e,t,r,n,i,a){var o;if(o=void 0!==or[e]?or[e]:Kt[e]*ar[t],a&&(o*=6),i){for(var s=0,f=r;f>=1;)s+=o*f*f,f/=2;return s}return o*r*n}function yr(r,n,i,a,o,s,f){var u={"don't care":zt,"dont care":zt,nice:Ut,fast:Lt},c={repeat:Et,clamp:St,mirror:Tt},l={nearest:Ct,linear:Dt},h=t({mipmap:Bt,"nearest mipmap nearest":Pt,"linear mipmap nearest":Ft,"nearest mipmap linear":Rt,"linear mipmap linear":Bt},l),p={none:0,browser:Wt},d={uint8:wt,rgba4:Ze,rgb565:tt,"rgb5 a1":et},m={alpha:We,luminance:Qe,"luminance alpha":Xe,rgb:Ye,rgba:Ge,rgba4:Ke,"rgb5 a1":$e,rgb565:Je},g={};n.ext_srgb&&(m.srgb=at,m.srgba=ot),n.oes_texture_float&&(d.float32=d.float=kt),n.oes_texture_half_float&&(d.float16=d["half float"]=st),n.webgl_depth_texture&&(t(m,{depth:nt,"depth stencil":it}),t(d,{uint16:xt,uint32:At,"depth stencil":rt})),n.webgl_compressed_texture_s3tc&&t(g,{"rgb s3tc dxt1":ft,"rgba s3tc dxt1":ut,"rgba s3tc dxt3":ct,"rgba s3tc dxt5":lt}),n.webgl_compressed_texture_atc&&t(g,{"rgb atc":ht,"rgba atc explicit alpha":pt,"rgba atc interpolated alpha":dt}),n.webgl_compressed_texture_pvrtc&&t(g,{"rgb pvrtc 4bppv1":mt,"rgb pvrtc 2bppv1":gt,"rgba pvrtc 4bppv1":yt,"rgba pvrtc 2bppv1":vt}),n.webgl_compressed_texture_etc1&&(g["rgb etc1"]=bt);var y=Array.prototype.slice.call(r.getParameter(Ve));Object.keys(g).forEach(function(e){var t=g[e];y.indexOf(t)>=0&&(m[e]=t)});var v=Object.keys(m);i.textureFormats=v;var b=[];Object.keys(m).forEach(function(e){b[m[e]]=e});var w=[];Object.keys(d).forEach(function(e){w[d[e]]=e});var x=[];Object.keys(l).forEach(function(e){x[l[e]]=e});var A=[];Object.keys(h).forEach(function(e){A[h[e]]=e});var k=[];Object.keys(c).forEach(function(e){k[c[e]]=e});var _=v.reduce(function(e,t){var r=m[t];return e[r]=r===Qe||r===We||r===Qe||r===Xe||r===nt||r===it||n.ext_srgb&&(r===at||r===ot)?r:r===$e||t.indexOf("rgba")>=0?Ge:Ye,e},{});function M(){this.internalformat=Ge,this.format=Ge,this.type=wt,this.compressed=!1,this.premultiplyAlpha=!1,this.flipY=!1,this.unpackAlignment=1,this.colorSpace=Wt,this.width=0,this.height=0,this.channels=0}function E(e,t){e.internalformat=t.internalformat,e.format=t.format,e.type=t.type,e.compressed=t.compressed,e.premultiplyAlpha=t.premultiplyAlpha,e.flipY=t.flipY,e.unpackAlignment=t.unpackAlignment,e.colorSpace=t.colorSpace,e.width=t.width,e.height=t.height,e.channels=t.channels}function S(e,t){if("object"==typeof t&&t){if("premultiplyAlpha"in t&&(P.type(t.premultiplyAlpha,"boolean","invalid premultiplyAlpha"),e.premultiplyAlpha=t.premultiplyAlpha),"flipY"in t&&(P.type(t.flipY,"boolean","invalid texture flip"),e.flipY=t.flipY),"alignment"in t&&(P.oneOf(t.alignment,[1,2,4,8],"invalid texture unpack alignment"),e.unpackAlignment=t.alignment),"colorSpace"in t&&(P.parameter(t.colorSpace,p,"invalid colorSpace"),e.colorSpace=p[t.colorSpace]),"type"in t){var r=t.type;P(n.oes_texture_float||!("float"===r||"float32"===r),"you must enable the OES_texture_float extension in order to use floating point textures."),P(n.oes_texture_half_float||!("half float"===r||"float16"===r),"you must enable the OES_texture_half_float extension in order to use 16-bit floating point textures."),P(n.webgl_depth_texture||!("uint16"===r||"uint32"===r||"depth stencil"===r),"you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures."),P.parameter(r,d,"invalid texture type"),e.type=d[r]}var a=e.width,o=e.height,s=e.channels,f=!1;"shape"in t?(P(Array.isArray(t.shape)&&t.shape.length>=2,"shape must be an array"),a=t.shape[0],o=t.shape[1],3===t.shape.length&&(P((s=t.shape[2])>0&&s<=4,"invalid number of channels"),f=!0),P(a>=0&&a<=i.maxTextureSize,"invalid width"),P(o>=0&&o<=i.maxTextureSize,"invalid height")):("radius"in t&&(a=o=t.radius,P(a>=0&&a<=i.maxTextureSize,"invalid radius")),"width"in t&&P((a=t.width)>=0&&a<=i.maxTextureSize,"invalid width"),"height"in t&&P((o=t.height)>=0&&o<=i.maxTextureSize,"invalid height"),"channels"in t&&(P((s=t.channels)>0&&s<=4,"invalid number of channels"),f=!0)),e.width=0|a,e.height=0|o,e.channels=0|s;var u=!1;if("format"in t){var c=t.format;P(n.webgl_depth_texture||!("depth"===c||"depth stencil"===c),"you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures."),P.parameter(c,m,"invalid texture format");var l=e.internalformat=m[c];e.format=_[l],c in d&&("type"in t||(e.type=d[c])),c in g&&(e.compressed=!0),u=!0}!f&&u?e.channels=Kt[e.format]:f&&!u?e.channels!==Xt[e.format]&&(e.format=e.internalformat=Xt[e.channels]):u&&f&&P(e.channels===Kt[e.format],"number of channels inconsistent with specified format")}}function T(e){r.pixelStorei(Nt,e.flipY),r.pixelStorei(Ht,e.premultiplyAlpha),r.pixelStorei(Gt,e.colorSpace),r.pixelStorei(qt,e.unpackAlignment)}function O(){M.call(this),this.xOffset=0,this.yOffset=0,this.data=null,this.needsFree=!1,this.element=null,this.needsCopy=!1}function j(t,r){var n=null;if(hr(r)?n=r:r&&(P.type(r,"object","invalid pixel data type"),S(t,r),"x"in r&&(t.xOffset=0|r.x),"y"in r&&(t.yOffset=0|r.y),hr(r.data)&&(n=r.data)),P(!t.compressed||n instanceof Uint8Array,"compressed texture data must be stored in a uint8array"),r.copy){P(!n,"can not specify copy and data field for the same texture");var a=o.viewportWidth,s=o.viewportHeight;t.width=t.width||a-t.xOffset,t.height=t.height||s-t.yOffset,t.needsCopy=!0,P(t.xOffset>=0&&t.xOffset=0&&t.yOffset0&&t.width<=a&&t.height>0&&t.height<=s,"copy texture read out of bounds")}else if(n){if(e(n))t.channels=t.channels||4,t.data=n,"type"in r||t.type!==wt||(t.type=pr(n));else if(sr(n))t.channels=t.channels||4,function(e,t){var r=t.length;switch(e.type){case wt:case xt:case At:case kt:var n=ne.allocType(e.type,r);n.set(t),e.data=n;break;case st:e.data=ze(t);break;default:P.raise("unsupported texture type, must specify a typed array")}}(t,n),t.alignment=1,t.needsFree=!0;else if(ae(n)){var f=n.data;Array.isArray(f)||t.type!==wt||(t.type=pr(f));var u,c,l,h,p,d,m=n.shape,g=n.stride;3===m.length?(l=m[2],d=g[2]):(P(2===m.length,"invalid ndarray pixel data, must be 2 or 3D"),l=1,d=1),u=m[0],c=m[1],h=g[0],p=g[1],t.alignment=1,t.width=u,t.height=c,t.channels=l,t.format=t.internalformat=Xt[l],t.needsFree=!0,function(e,t,r,n,i,a){for(var o=e.width,s=e.height,f=e.channels,u=dr(e,o*s*f),c=0,l=0;l=0,"oes_texture_float extension not enabled"):t.type===st&&P(i.extensions.indexOf("oes_texture_half_float")>=0,"oes_texture_half_float extension not enabled")}function C(e,t,n){var i=e.element,o=e.data,s=e.internalformat,f=e.format,u=e.type,c=e.width,l=e.height;T(e),i?r.texImage2D(t,n,f,f,u,i):e.compressed?r.compressedTexImage2D(t,n,s,c,l,0,o):e.needsCopy?(a(),r.copyTexImage2D(t,n,f,e.xOffset,e.yOffset,c,l,0)):r.texImage2D(t,n,f,c,l,0,f,u,o||null)}function D(e,t,n,i,o){var s=e.element,f=e.data,u=e.internalformat,c=e.format,l=e.type,h=e.width,p=e.height;T(e),s?r.texSubImage2D(t,o,n,i,c,l,s):e.compressed?r.compressedTexSubImage2D(t,o,n,i,u,h,p,f):e.needsCopy?(a(),r.copyTexSubImage2D(t,o,n,i,e.xOffset,e.yOffset,h,p)):r.texSubImage2D(t,o,n,i,h,p,c,l,f)}var F=[];function R(){return F.pop()||new O}function B(e){e.needsFree&&ne.freeType(e.data),O.call(e),F.push(e)}function I(){M.call(this),this.genMipmaps=!1,this.mipmapHint=zt,this.mipmask=0,this.images=Array(16)}function z(e,t,r){var n=e.images[0]=R();e.mipmask=1,n.width=e.width=t,n.height=e.height=r,n.channels=e.channels=4}function L(e,t){var r=null;if(hr(t))E(r=e.images[0]=R(),e),j(r,t),e.mipmask=1;else if(S(e,t),Array.isArray(t.mipmap))for(var n=t.mipmap,i=0;i>=i,r.height>>=i,j(r,n[i]),e.mipmask|=1<=0&&!("faces"in t)&&(e.genMipmaps=!0)}if("mag"in t){var n=t.mag;P.parameter(n,l),e.magFilter=l[n]}var a=e.wrapS,o=e.wrapT;if("wrap"in t){var s=t.wrap;"string"==typeof s?(P.parameter(s,c),a=o=c[s]):Array.isArray(s)&&(P.parameter(s[0],c),P.parameter(s[1],c),a=c[s[0]],o=c[s[1]])}else{if("wrapS"in t){var f=t.wrapS;P.parameter(f,c),a=c[f]}if("wrapT"in t){var p=t.wrapT;P.parameter(p,c),o=c[p]}}if(e.wrapS=a,e.wrapT=o,"anisotropic"in t){var d=t.anisotropic;P("number"==typeof d&&d>=1&&d<=i.maxAnisotropic,"aniso samples must be between 1 and "),e.anisotropic=t.anisotropic}if("mipmap"in t){var m=!1;switch(typeof t.mipmap){case"string":P.parameter(t.mipmap,u,"invalid mipmap hint"),e.mipmapHint=u[t.mipmap],e.genMipmaps=!0,m=!0;break;case"boolean":m=e.genMipmaps=t.mipmap;break;case"object":P(Array.isArray(t.mipmap),"invalid mipmap type"),e.genMipmaps=!1,m=!0;break;default:P.raise("invalid mipmap type")}!m||"min"in t||(e.minFilter=Pt)}}function W(e,t){r.texParameteri(t,jt,e.minFilter),r.texParameteri(t,Ot,e.magFilter),r.texParameteri(t,_t,e.wrapS),r.texParameteri(t,Mt,e.wrapT),n.ext_texture_filter_anisotropic&&r.texParameteri(t,Vt,e.anisotropic),e.genMipmaps&&(r.hint(It,e.mipmapHint),r.generateMipmap(t))}var Y=0,Q={},X=i.maxTextureUnits,K=Array(X).map(function(){return null});function $(e){M.call(this),this.mipmask=0,this.internalformat=Ge,this.id=Y++,this.refCount=1,this.target=e,this.texture=r.createTexture(),this.unit=-1,this.bindCount=0,this.texInfo=new H,f.profile&&(this.stats={size:0})}function J(e){r.activeTexture(Yt),r.bindTexture(e.target,e.texture)}function Z(){var e=K[0];e?r.bindTexture(e.target,e.texture):r.bindTexture(qe,null)}function ee(e){var t=e.texture;P(t,"must not double destroy texture");var n=e.unit,i=e.target;n>=0&&(r.activeTexture(Yt+n),r.bindTexture(i,null),K[n]=null),r.deleteTexture(t),e.texture=null,e.params=null,e.pixels=null,e.refCount=0,delete Q[e.id],s.textureCount--}return t($.prototype,{bind:function(){this.bindCount+=1;var e=this.unit;if(e<0){for(var t=0;t0)continue;n.unit=-1}K[t]=this,e=t;break}e>=X&&P.raise("insufficient number of texture units"),f.profile&&s.maxTextureUnits>f)-o,u.height=u.height||(n.height>>f)-s,P(n.type===u.type&&n.format===u.format&&n.internalformat===u.internalformat,"incompatible format for texture.subimage"),P(o>=0&&s>=0&&o+u.width<=n.width&&s+u.height<=n.height,"texture.subimage write out of bounds"),P(n.mipmask&1<>s;++s){var u=i>>s,c=o>>s;if(!u||!c)break;r.texImage2D(qe,s,n.format,u,c,0,n.format,n.type,null)}return Z(),f.profile&&(n.stats.size=gr(n.internalformat,n.type,i,o,!1,!1)),a},a._reglType="texture2d",a._texture=n,f.profile&&(a.stats=n.stats),a.destroy=function(){n.decRef()},a},createCube:function(e,t,n,a,o,u){var c=new $(Ne);Q[c.id]=c,s.cubeCount++;var l=new Array(6);function h(e,t,r,n,a,o){var s,u=c.texInfo;for(H.call(u),s=0;s<6;++s)l[s]=q();if("number"!=typeof e&&e)if("object"==typeof e)if(t)L(l[0],e),L(l[1],t),L(l[2],r),L(l[3],n),L(l[4],a),L(l[5],o);else if(G(u,e),S(c,e),"faces"in e){var p=e.faces;for(P(Array.isArray(p)&&6===p.length,"cube faces must be a length 6 array"),s=0;s<6;++s)P("object"==typeof p[s]&&!!p[s],"invalid input for cube map face"),E(l[s],c),L(l[s],p[s])}else for(s=0;s<6;++s)L(l[s],e);else P.raise("invalid arguments to cube map");else{var d=0|e||1;for(s=0;s<6;++s)z(l[s],d,d)}for(E(c,l[0]),i.npotTextureCube||P(Ue(c.width)&&Ue(c.height),"your browser does not support non power or two texture dimensions"),c.mipmask=u.genMipmaps?(l[0].width<<1)-1:l[0].mipmask,P.textureCube(c,u,l,i),c.internalformat=l[0].internalformat,h.width=l[0].width,h.height=l[0].height,J(c),s=0;s<6;++s)U(l[s],He+s);for(W(u,Ne),Z(),f.profile&&(c.stats.size=gr(c.internalformat,c.type,h.width,h.height,u.genMipmaps,!0)),h.format=b[c.internalformat],h.type=w[c.type],h.mag=x[u.magFilter],h.min=A[u.minFilter],h.wrapS=k[u.wrapS],h.wrapT=k[u.wrapT],s=0;s<6;++s)N(l[s]);return h}return h(e,t,n,a,o,u),h.subimage=function(e,t,r,n,i){P(!!t,"must specify image data"),P("number"==typeof e&&e===(0|e)&&e>=0&&e<6,"invalid face");var a=0|r,o=0|n,s=0|i,f=R();return E(f,c),f.width=0,f.height=0,j(f,t),f.width=f.width||(c.width>>s)-a,f.height=f.height||(c.height>>s)-o,P(c.type===f.type&&c.format===f.format&&c.internalformat===f.internalformat,"incompatible format for texture.subimage"),P(a>=0&&o>=0&&a+f.width<=c.width&&o+f.height<=c.height,"texture.subimage write out of bounds"),P(c.mipmask&1<>i;++i)r.texImage2D(He+n,i,c.format,t>>i,t>>i,0,c.format,c.type,null);return Z(),f.profile&&(c.stats.size=gr(c.internalformat,c.type,h.width,h.height,!1,!0)),h}},h._reglType="textureCube",h._texture=c,f.profile&&(h.stats=c.stats),h.destroy=function(){c.decRef()},h},clear:function(){for(var e=0;e>t,e.height>>t,0,e.internalformat,e.type,null);else for(var n=0;n<6;++n)r.texImage2D(He+n,t,e.internalformat,e.width>>t,e.height>>t,0,e.internalformat,e.type,null);W(e.texInfo,e.target)})},refresh:function(){for(var e=0;e=2,"invalid renderbuffer shape"),s=0|p[0],f=0|p[1]}else"radius"in h&&(s=f=0|h.radius),"width"in h&&(s=0|h.width),"height"in h&&(f=0|h.height);"format"in h&&(P.parameter(h.format,a,"invalid renderbuffer format"),u=a[h.format])}else"number"==typeof t?(s=0|t,f="number"==typeof n?0|n:s):t?P.raise("invalid arguments to renderbuffer constructor"):s=f=1;if(P(s>0&&f>0&&s<=r.maxRenderbufferSize&&f<=r.maxRenderbufferSize,"invalid renderbuffer size"),s!==c.width||f!==c.height||u!==c.format)return l.width=c.width=s,l.height=c.height=f,c.format=u,e.bindRenderbuffer(vr,c.renderbuffer),e.renderbufferStorage(vr,u,s,f),P(0===e.getError(),"invalid render buffer format"),i.profile&&(c.stats.size=xr(c.format,c.width,c.height)),l.format=o[c.format],l}return f[c.id]=c,n.renderbufferCount++,l(t,s),l.resize=function(t,n){var a=0|t,o=0|n||a;return a===c.width&&o===c.height?l:(P(a>0&&o>0&&a<=r.maxRenderbufferSize&&o<=r.maxRenderbufferSize,"invalid renderbuffer size"),l.width=c.width=a,l.height=c.height=o,e.bindRenderbuffer(vr,c.renderbuffer),e.renderbufferStorage(vr,c.format,a,o),P(0===e.getError(),"invalid render buffer format"),i.profile&&(c.stats.size=xr(c.format,c.width,c.height)),l)},l._reglType="renderbuffer",l._renderbuffer=c,i.profile&&(l.stats=c.stats),l.destroy=function(){c.decRef()},l},clear:function(){oe(f).forEach(c)},restore:function(){oe(f).forEach(function(t){t.renderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(vr,t.renderbuffer),e.renderbufferStorage(vr,t.format,t.width,t.height)}),e.bindRenderbuffer(vr,null)}}},kr=36160,_r=36161,Mr=3553,Er=34069,Sr=36064,Tr=36096,Or=36128,jr=33306,Cr=36053,Dr=6402,Pr=[6407,6408],Fr=[];Fr[6408]=4,Fr[6407]=3;var Rr=[];Rr[5121]=1,Rr[5126]=4,Rr[36193]=2;var Br=33189,Ir=36168,zr=34041,Lr=[32854,32855,36194,35907,34842,34843,34836],Ur={};Ur[Cr]="complete",Ur[36054]="incomplete attachment",Ur[36057]="incomplete dimensions",Ur[36055]="incomplete, missing attachment",Ur[36061]="unsupported";var Vr=5126,qr=34962;function Nr(){this.state=0,this.x=0,this.y=0,this.z=0,this.w=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=Vr,this.offset=0,this.stride=0,this.divisor=0}var Hr=35632,Gr=35633,Wr=35718,Yr=35721,Qr=6408,Xr=5121,Kr=3333,$r=5126;function Jr(t,r,n,i,a,o,s){function f(f){var u;null===r.next?(P(a.preserveDrawingBuffer,'you must create a webgl context with "preserveDrawingBuffer":true in order to read pixels from the drawing buffer'),u=Xr):(P(null!==r.next.colorAttachments[0].texture,"You cannot read from a renderbuffer"),u=r.next.colorAttachments[0].texture._texture.type,o.oes_texture_float?(P(u===Xr||u===$r,"Reading from a framebuffer is only allowed for the types 'uint8' and 'float'"),u===$r&&P(s.readFloat,"Reading 'float' values is not permitted in your browser. For a fallback, please see: https://www.npmjs.com/package/glsl-read-float")):P(u===Xr,"Reading from a framebuffer is only allowed for the type 'uint8'"));var c=0,l=0,h=i.framebufferWidth,p=i.framebufferHeight,d=null;e(f)?d=f:f&&(P.type(f,"object","invalid arguments to regl.read()"),l=0|f.y,P((c=0|f.x)>=0&&c=0&&l0&&h+c<=i.framebufferWidth,"invalid width for read pixels"),P(p>0&&p+l<=i.framebufferHeight,"invalid height for read pixels"),n();var m=h*p*4;return d||(u===Xr?d=new Uint8Array(m):u===$r&&(d=d||new Float32Array(m))),P.isTypedArray(d,"data buffer for regl.read() must be a typedarray"),P(d.byteLength>=m,"data buffer for regl.read() too small"),t.pixelStorei(Kr,4),t.readPixels(c,l,h,p,Qr,u,d),d}return function(e){return e&&"framebuffer"in e?function(e){var t;return r.setFBO({framebuffer:e.framebuffer},function(){t=f(e)}),t}(e):f(e)}}function Zr(e){return Array.prototype.slice.call(e)}function en(e){return Zr(e).join("")}var tn="xyzw".split(""),rn=5121,nn=1,an=2,on=0,sn=1,fn=2,un=3,cn=4,ln=5,hn=6,pn="dither",dn="blend.enable",mn="blend.color",gn="blend.equation",yn="blend.func",vn="depth.enable",bn="depth.func",wn="depth.range",xn="depth.mask",An="colorMask",kn="cull.enable",_n="cull.face",Mn="frontFace",En="lineWidth",Sn="polygonOffset.enable",Tn="polygonOffset.offset",On="sample.alpha",jn="sample.enable",Cn="sample.coverage",Dn="stencil.enable",Pn="stencil.mask",Fn="stencil.func",Rn="stencil.opFront",Bn="stencil.opBack",In="scissor.enable",zn="scissor.box",Ln="viewport",Un="profile",Vn="framebuffer",qn="vert",Nn="frag",Hn="elements",Gn="primitive",Wn="count",Yn="offset",Qn="instances",Xn="vao",Kn=Vn+"Width",$n=Vn+"Height",Jn=Ln+"Width",Zn=Ln+"Height",ei="drawingBufferWidth",ti="drawingBufferHeight",ri=[yn,gn,Fn,Rn,Bn,Cn,Ln,zn,Tn],ni=34962,ii=34963,ai=3553,oi=34067,si=2884,fi=3042,ui=3024,ci=2960,li=2929,hi=3089,pi=32823,di=32926,mi=32928,gi=5126,yi=35664,vi=35665,bi=35666,wi=5124,xi=35667,Ai=35668,ki=35669,_i=35670,Mi=35671,Ei=35672,Si=35673,Ti=35674,Oi=35675,ji=35676,Ci=35678,Di=35680,Pi=4,Fi=1028,Ri=1029,Bi=2304,Ii=2305,zi=32775,Li=32776,Ui=519,Vi=7680,qi=0,Ni=1,Hi=32774,Gi=513,Wi=36160,Yi=36064,Qi={0:0,1:1,zero:0,one:1,"src color":768,"one minus src color":769,"src alpha":770,"one minus src alpha":771,"dst color":774,"one minus dst color":775,"dst alpha":772,"one minus dst alpha":773,"constant color":32769,"one minus constant color":32770,"constant alpha":32771,"one minus constant alpha":32772,"src alpha saturate":776},Xi=["constant color, constant alpha","one minus constant color, constant alpha","constant color, one minus constant alpha","one minus constant color, one minus constant alpha","constant alpha, constant color","constant alpha, one minus constant color","one minus constant alpha, constant color","one minus constant alpha, one minus constant color"],Ki={never:512,less:513,"<":513,equal:514,"=":514,"==":514,"===":514,lequal:515,"<=":515,greater:516,">":516,notequal:517,"!=":517,"!==":517,gequal:518,">=":518,always:519},$i={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,"increment wrap":34055,"decrement wrap":34056,invert:5386},Ji={frag:35632,vert:35633},Zi={cw:Bi,ccw:Ii};function ea(t){return Array.isArray(t)||e(t)||ae(t)}function ta(e){return e.sort(function(e,t){return e===Ln?-1:t===Ln?1:e=1,n>=2,t)}if(r===cn){var i=e.data;return new ra(i.thisDep,i.contextDep,i.propDep,t)}if(r===ln)return new ra(!1,!1,!1,t);if(r===hn){for(var a=!1,o=!1,s=!1,f=0;f=1&&(o=!0),c>=2&&(s=!0)}else u.type===cn&&(a=a||u.data.thisDep,o=o||u.data.contextDep,s=s||u.data.propDep)}return new ra(a,o,s,t)}return new ra(r===un,r===fn,r===sn,t)}var oa=new ra(!1,!1,!1,function(){});function sa(e,r,n,i,a,o,s,f,u,c,l,h,p,d,m){var g=c.Record,y={add:32774,subtract:32778,"reverse subtract":32779};n.ext_blend_minmax&&(y.min=zi,y.max=Li);var v=n.angle_instanced_arrays,b=n.webgl_draw_buffers,w={dirty:!0,profile:m.profile},x={},A=[],k={},_={};function M(e){return e.replace(".","_")}function E(e,t,r){var n=M(e);A.push(e),x[n]=w[n]=!!r,k[n]=t}function S(e,t,r){var n=M(e);A.push(e),Array.isArray(r)?(w[n]=r.slice(),x[n]=r.slice()):w[n]=x[n]=r,_[n]=t}E(pn,ui),E(dn,fi),S(mn,"blendColor",[0,0,0,0]),S(gn,"blendEquationSeparate",[Hi,Hi]),S(yn,"blendFuncSeparate",[Ni,qi,Ni,qi]),E(vn,li,!0),S(bn,"depthFunc",Gi),S(wn,"depthRange",[0,1]),S(xn,"depthMask",!0),S(An,An,[!0,!0,!0,!0]),E(kn,si),S(_n,"cullFace",Ri),S(Mn,Mn,Ii),S(En,En,1),E(Sn,pi),S(Tn,"polygonOffset",[0,0]),E(On,di),E(jn,mi),S(Cn,"sampleCoverage",[1,!1]),E(Dn,ci),S(Pn,"stencilMask",-1),S(Fn,"stencilFunc",[Ui,0,-1]),S(Rn,"stencilOpSeparate",[Fi,Vi,Vi,Vi]),S(Bn,"stencilOpSeparate",[Ri,Vi,Vi,Vi]),E(In,hi),S(zn,"scissor",[0,0,e.drawingBufferWidth,e.drawingBufferHeight]),S(Ln,Ln,[0,0,e.drawingBufferWidth,e.drawingBufferHeight]);var T={gl:e,context:p,strings:r,next:x,current:w,draw:h,elements:o,buffer:a,shader:l,attributes:c.state,vao:c,uniforms:u,framebuffer:f,extensions:n,timer:d,isBufferArgs:ea},O={primTypes:Ae,compareFuncs:Ki,blendFuncs:Qi,blendEquations:y,stencilOps:$i,glTypes:ce,orientationType:Zi};P.optional(function(){T.isArrayLike=Le}),b&&(O.backBuffer=[Ri],O.drawBuffer=Y(i.maxDrawbuffers,function(e){return 0===e?[0]:Y(e,function(e){return Yi+e})}));var j=0;function C(){var e=function(){var e=0,r=[],n=[];function i(){var r=[],n=[];return t(function(){r.push.apply(r,Zr(arguments))},{def:function(){var t="v"+e++;return n.push(t),arguments.length>0&&(r.push(t,"="),r.push.apply(r,Zr(arguments)),r.push(";")),t},toString:function(){return en([n.length>0?"var "+n.join(",")+";":"",en(r)])}})}function a(){var e=i(),r=i(),n=e.toString,a=r.toString;function o(t,n){r(t,n,"=",e.def(t,n),";")}return t(function(){e.apply(e,Zr(arguments))},{def:e.def,entry:e,exit:r,save:o,set:function(t,r,n){o(t,r),e(t,r,"=",n,";")},toString:function(){return n()+a()}})}var o=i(),s={};return{global:o,link:function(t){for(var i=0;i=0,'unknown parameter "'+t+'"',h.commandStr)})}t(p),t(d)});var m=function(e,t){var r=e.static;if("string"==typeof r[Nn]&&"string"==typeof r[qn]){if(Object.keys(t.dynamic).length>0)return null;var n=t.static,i=Object.keys(n);if(i.length>0&&"number"==typeof n[i[0]]){for(var a=[],o=0;o=0,"invalid "+e,r.commandStr):f=!1,"height"in a?P.command((s=0|a.height)>=0,"invalid "+e,r.commandStr):f=!1,new ra(!f&&t&&t.thisDep,!f&&t&&t.contextDep,!f&&t&&t.propDep,function(e,t){var r=e.shared.context,n=o;"width"in a||(n=t.def(r,".",Kn,"-",u));var i=s;return"height"in a||(i=t.def(r,".",$n,"-",c)),[u,c,n,i]})}if(e in i){var l=i[e],h=aa(l,function(t,r){var n=t.invoke(r,l);P.optional(function(){t.assert(r,n+"&&typeof "+n+'==="object"',"invalid "+e)});var i=t.shared.context,a=r.def(n,".x|0"),o=r.def(n,".y|0"),s=r.def('"width" in ',n,"?",n,".width|0:","(",i,".",Kn,"-",a,")"),f=r.def('"height" in ',n,"?",n,".height|0:","(",i,".",$n,"-",o,")");return P.optional(function(){t.assert(r,s+">=0&&"+f+">=0","invalid "+e)}),[a,o,s,f]});return t&&(h.thisDep=h.thisDep||t.thisDep,h.contextDep=h.contextDep||t.contextDep,h.propDep=h.propDep||t.propDep),h}return t?new ra(t.thisDep,t.contextDep,t.propDep,function(e,t){var r=e.shared.context;return[0,0,t.def(r,".",Kn),t.def(r,".",$n)]}):null}var o=a(Ln);if(o){var s=o;o=new ra(o.thisDep,o.contextDep,o.propDep,function(e,t){var r=s.append(e,t),n=e.shared.context;return t.set(n,"."+Jn,r[2]),t.set(n,"."+Zn,r[3]),r})}return{viewport:o,scissor_box:a(zn)}}(e,b,h),x=function(e,t){var r=e.static,n=e.dynamic,i=function(){if(Hn in r){var e=r[Hn];ea(e)?e=o.getElements(o.create(e,!0)):e&&(e=o.getElements(e),P.command(e,"invalid elements",t.commandStr));var i=ia(function(t,r){if(e){var n=t.link(e);return t.ELEMENTS=n,n}return t.ELEMENTS=null,null});return i.value=e,i}if(Hn in n){var a=n[Hn];return aa(a,function(e,t){var r=e.shared,n=r.isBufferArgs,i=r.elements,o=e.invoke(t,a),s=t.def("null"),f=t.def(n,"(",o,")"),u=e.cond(f).then(s,"=",i,".createStream(",o,");").else(s,"=",i,".getElements(",o,");");return P.optional(function(){e.assert(u.else,"!"+o+"||"+s,"invalid elements")}),t.entry(u),t.exit(e.cond(f).then(i,".destroyStream(",s,");")),e.ELEMENTS=s,s})}return null}();function a(e,a){if(e in r){var o=0|r[e];return P.command(!a||o>=0,"invalid "+e,t.commandStr),ia(function(e,t){return a&&(e.OFFSET=o),o})}if(e in n){var s=n[e];return aa(s,function(t,r){var n=t.invoke(r,s);return a&&(t.OFFSET=n,P.optional(function(){t.assert(r,n+">=0","invalid "+e)})),n})}return a&&i?ia(function(e,t){return e.OFFSET="0",0}):null}var s=a(Yn,!0);return{elements:i,primitive:function(){if(Gn in r){var e=r[Gn];return P.commandParameter(e,Ae,"invalid primitve",t.commandStr),ia(function(t,r){return Ae[e]})}if(Gn in n){var a=n[Gn];return aa(a,function(e,t){var r=e.constants.primTypes,n=e.invoke(t,a);return P.optional(function(){e.assert(t,n+" in "+r,"invalid primitive, must be one of "+Object.keys(Ae))}),t.def(r,"[",n,"]")})}return i?na(i)?ia(i.value?function(e,t){return t.def(e.ELEMENTS,".primType")}:function(){return Pi}):new ra(i.thisDep,i.contextDep,i.propDep,function(e,t){var r=e.ELEMENTS;return t.def(r,"?",r,".primType:",Pi)}):null}(),count:function(){if(Wn in r){var e=0|r[Wn];return P.command("number"==typeof e&&e>=0,"invalid vertex count",t.commandStr),ia(function(){return e})}if(Wn in n){var a=n[Wn];return aa(a,function(e,t){var r=e.invoke(t,a);return P.optional(function(){e.assert(t,"typeof "+r+'==="number"&&'+r+">=0&&"+r+"===("+r+"|0)","invalid vertex count")}),r})}if(i){if(na(i)){if(i)return s?new ra(s.thisDep,s.contextDep,s.propDep,function(e,t){var r=t.def(e.ELEMENTS,".vertCount-",e.OFFSET);return P.optional(function(){e.assert(t,r+">=0","invalid vertex offset/element buffer too small")}),r}):ia(function(e,t){return t.def(e.ELEMENTS,".vertCount")});var o=ia(function(){return-1});return P.optional(function(){o.MISSING=!0}),o}var f=new ra(i.thisDep||s.thisDep,i.contextDep||s.contextDep,i.propDep||s.propDep,function(e,t){var r=e.ELEMENTS;return e.OFFSET?t.def(r,"?",r,".vertCount-",e.OFFSET,":-1"):t.def(r,"?",r,".vertCount:-1")});return P.optional(function(){f.DYNAMIC=!0}),f}return null}(),instances:a(Qn,!1),offset:s}}(e,h),k=function(e,t){var r=e.static,n=e.dynamic,a={};return A.forEach(function(e){var o=M(e);function s(t,i){if(e in r){var s=t(r[e]);a[o]=ia(function(){return s})}else if(e in n){var f=n[e];a[o]=aa(f,function(e,t){return i(e,t,e.invoke(t,f))})}}switch(e){case kn:case dn:case pn:case Dn:case vn:case In:case Sn:case On:case jn:case xn:return s(function(r){return P.commandType(r,"boolean",e,t.commandStr),r},function(t,r,n){return P.optional(function(){t.assert(r,"typeof "+n+'==="boolean"',"invalid flag "+e,t.commandStr)}),n});case bn:return s(function(r){return P.commandParameter(r,Ki,"invalid "+e,t.commandStr),Ki[r]},function(t,r,n){var i=t.constants.compareFuncs;return P.optional(function(){t.assert(r,n+" in "+i,"invalid "+e+", must be one of "+Object.keys(Ki))}),r.def(i,"[",n,"]")});case wn:return s(function(e){return P.command(Le(e)&&2===e.length&&"number"==typeof e[0]&&"number"==typeof e[1]&&e[0]<=e[1],"depth range is 2d array",t.commandStr),e},function(e,t,r){return P.optional(function(){e.assert(t,e.shared.isArrayLike+"("+r+")&&"+r+".length===2&&typeof "+r+'[0]==="number"&&typeof '+r+'[1]==="number"&&'+r+"[0]<="+r+"[1]","depth range must be a 2d array")}),[t.def("+",r,"[0]"),t.def("+",r,"[1]")]});case yn:return s(function(e){P.commandType(e,"object","blend.func",t.commandStr);var r="srcRGB"in e?e.srcRGB:e.src,n="srcAlpha"in e?e.srcAlpha:e.src,i="dstRGB"in e?e.dstRGB:e.dst,a="dstAlpha"in e?e.dstAlpha:e.dst;return P.commandParameter(r,Qi,o+".srcRGB",t.commandStr),P.commandParameter(n,Qi,o+".srcAlpha",t.commandStr),P.commandParameter(i,Qi,o+".dstRGB",t.commandStr),P.commandParameter(a,Qi,o+".dstAlpha",t.commandStr),P.command(-1===Xi.indexOf(r+", "+i),"unallowed blending combination (srcRGB, dstRGB) = ("+r+", "+i+")",t.commandStr),[Qi[r],Qi[i],Qi[n],Qi[a]]},function(t,r,n){var i=t.constants.blendFuncs;function a(a,o){var s=r.def('"',a,o,'" in ',n,"?",n,".",a,o,":",n,".",a);return P.optional(function(){t.assert(r,s+" in "+i,"invalid "+e+"."+a+o+", must be one of "+Object.keys(Qi))}),s}P.optional(function(){t.assert(r,n+"&&typeof "+n+'==="object"',"invalid blend func, must be an object")});var o=a("src","RGB"),s=a("dst","RGB");P.optional(function(){t.assert(r,t.constants.invalidBlendCombinations+".indexOf("+o+'+", "+'+s+") === -1 ","unallowed blending combination for (srcRGB, dstRGB)")});var f=r.def(i,"[",o,"]"),u=r.def(i,"[",a("src","Alpha"),"]");return[f,r.def(i,"[",s,"]"),u,r.def(i,"[",a("dst","Alpha"),"]")]});case gn:return s(function(r){return"string"==typeof r?(P.commandParameter(r,y,"invalid "+e,t.commandStr),[y[r],y[r]]):"object"==typeof r?(P.commandParameter(r.rgb,y,e+".rgb",t.commandStr),P.commandParameter(r.alpha,y,e+".alpha",t.commandStr),[y[r.rgb],y[r.alpha]]):void P.commandRaise("invalid blend.equation",t.commandStr)},function(t,r,n){var i=t.constants.blendEquations,a=r.def(),o=r.def(),s=t.cond("typeof ",n,'==="string"');return P.optional(function(){function r(e,r,n){t.assert(e,n+" in "+i,"invalid "+r+", must be one of "+Object.keys(y))}r(s.then,e,n),t.assert(s.else,n+"&&typeof "+n+'==="object"',"invalid "+e),r(s.else,e+".rgb",n+".rgb"),r(s.else,e+".alpha",n+".alpha")}),s.then(a,"=",o,"=",i,"[",n,"];"),s.else(a,"=",i,"[",n,".rgb];",o,"=",i,"[",n,".alpha];"),r(s),[a,o]});case mn:return s(function(e){return P.command(Le(e)&&4===e.length,"blend.color must be a 4d array",t.commandStr),Y(4,function(t){return+e[t]})},function(e,t,r){return P.optional(function(){e.assert(t,e.shared.isArrayLike+"("+r+")&&"+r+".length===4","blend.color must be a 4d array")}),Y(4,function(e){return t.def("+",r,"[",e,"]")})});case Pn:return s(function(e){return P.commandType(e,"number",o,t.commandStr),0|e},function(e,t,r){return P.optional(function(){e.assert(t,"typeof "+r+'==="number"',"invalid stencil.mask")}),t.def(r,"|0")});case Fn:return s(function(r){P.commandType(r,"object",o,t.commandStr);var n=r.cmp||"keep",i=r.ref||0,a="mask"in r?r.mask:-1;return P.commandParameter(n,Ki,e+".cmp",t.commandStr),P.commandType(i,"number",e+".ref",t.commandStr),P.commandType(a,"number",e+".mask",t.commandStr),[Ki[n],i,a]},function(e,t,r){var n=e.constants.compareFuncs;return P.optional(function(){function i(){e.assert(t,Array.prototype.join.call(arguments,""),"invalid stencil.func")}i(r+"&&typeof ",r,'==="object"'),i('!("cmp" in ',r,")||(",r,".cmp in ",n,")")}),[t.def('"cmp" in ',r,"?",n,"[",r,".cmp]",":",Vi),t.def(r,".ref|0"),t.def('"mask" in ',r,"?",r,".mask|0:-1")]});case Rn:case Bn:return s(function(r){P.commandType(r,"object",o,t.commandStr);var n=r.fail||"keep",i=r.zfail||"keep",a=r.zpass||"keep";return P.commandParameter(n,$i,e+".fail",t.commandStr),P.commandParameter(i,$i,e+".zfail",t.commandStr),P.commandParameter(a,$i,e+".zpass",t.commandStr),[e===Bn?Ri:Fi,$i[n],$i[i],$i[a]]},function(t,r,n){var i=t.constants.stencilOps;function a(a){return P.optional(function(){t.assert(r,'!("'+a+'" in '+n+")||("+n+"."+a+" in "+i+")","invalid "+e+"."+a+", must be one of "+Object.keys($i))}),r.def('"',a,'" in ',n,"?",i,"[",n,".",a,"]:",Vi)}return P.optional(function(){t.assert(r,n+"&&typeof "+n+'==="object"',"invalid "+e)}),[e===Bn?Ri:Fi,a("fail"),a("zfail"),a("zpass")]});case Tn:return s(function(e){P.commandType(e,"object",o,t.commandStr);var r=0|e.factor,n=0|e.units;return P.commandType(r,"number",o+".factor",t.commandStr),P.commandType(n,"number",o+".units",t.commandStr),[r,n]},function(t,r,n){return P.optional(function(){t.assert(r,n+"&&typeof "+n+'==="object"',"invalid "+e)}),[r.def(n,".factor|0"),r.def(n,".units|0")]});case _n:return s(function(e){var r=0;return"front"===e?r=Fi:"back"===e&&(r=Ri),P.command(!!r,o,t.commandStr),r},function(e,t,r){return P.optional(function(){e.assert(t,r+'==="front"||'+r+'==="back"',"invalid cull.face")}),t.def(r,'==="front"?',Fi,":",Ri)});case En:return s(function(e){return P.command("number"==typeof e&&e>=i.lineWidthDims[0]&&e<=i.lineWidthDims[1],"invalid line width, must be a positive number between "+i.lineWidthDims[0]+" and "+i.lineWidthDims[1],t.commandStr),e},function(e,t,r){return P.optional(function(){e.assert(t,"typeof "+r+'==="number"&&'+r+">="+i.lineWidthDims[0]+"&&"+r+"<="+i.lineWidthDims[1],"invalid line width")}),r});case Mn:return s(function(e){return P.commandParameter(e,Zi,o,t.commandStr),Zi[e]},function(e,t,r){return P.optional(function(){e.assert(t,r+'==="cw"||'+r+'==="ccw"',"invalid frontFace, must be one of cw,ccw")}),t.def(r+'==="cw"?'+Bi+":"+Ii)});case An:return s(function(e){return P.command(Le(e)&&4===e.length,"color.mask must be length 4 array",t.commandStr),e.map(function(e){return!!e})},function(e,t,r){return P.optional(function(){e.assert(t,e.shared.isArrayLike+"("+r+")&&"+r+".length===4","invalid color.mask")}),Y(4,function(e){return"!!"+r+"["+e+"]"})});case Cn:return s(function(e){P.command("object"==typeof e&&e,o,t.commandStr);var r="value"in e?e.value:1,n=!!e.invert;return P.command("number"==typeof r&&r>=0&&r<=1,"sample.coverage.value must be a number between 0 and 1",t.commandStr),[r,n]},function(e,t,r){return P.optional(function(){e.assert(t,r+"&&typeof "+r+'==="object"',"invalid sample.coverage")}),[t.def('"value" in ',r,"?+",r,".value:1"),t.def("!!",r,".invert")]})}}),a}(e,h),_=function(e,t,n){var i=e.static,a=e.dynamic;function o(e){if(e in i){var t=r.id(i[e]);P.optional(function(){l.shader(Ji[e],t,P.guessCommand())});var n=ia(function(){return t});return n.id=t,n}if(e in a){var o=a[e];return aa(o,function(t,r){var n=t.invoke(r,o),i=r.def(t.shared.strings,".id(",n,")");return P.optional(function(){r(t.shared.shader,".shader(",Ji[e],",",i,",",t.command,");")}),i})}return null}var s,f=o(Nn),u=o(qn),c=null;return na(f)&&na(u)?(c=l.program(u.id,f.id,null,n),s=ia(function(e,t){return e.link(c)})):s=new ra(f&&f.thisDep||u&&u.thisDep,f&&f.contextDep||u&&u.contextDep,f&&f.propDep||u&&u.propDep,function(e,t){var r,n=e.shared.shader;r=f?f.append(e,t):t.def(n,".",Nn);var i=n+".program("+(u?u.append(e,t):t.def(n,".",qn))+","+r;return P.optional(function(){i+=","+e.command}),t.def(i+")")}),{frag:f,vert:u,progVar:s,program:c}}(e,0,m);function E(e){var t=w[e];t&&(k[e]=t)}E(Ln),E(M(zn));var S=Object.keys(k).length>0,T={framebuffer:b,draw:x,shader:_,state:k,dirty:S,scopeVAO:null,drawVAO:null,useVAO:!1,attributes:{}};if(T.profile=function(e){var t,r=e.static,n=e.dynamic;if(Un in r){var i=!!r[Un];(t=ia(function(e,t){return i})).enable=i}else if(Un in n){var a=n[Un];t=aa(a,function(e,t){return e.invoke(t,a)})}return t}(e),T.uniforms=function(e,t){var r=e.static,n=e.dynamic,i={};return Object.keys(r).forEach(function(e){var n,a=r[e];if("number"==typeof a||"boolean"==typeof a)n=ia(function(){return a});else if("function"==typeof a){var o=a._reglType;"texture2d"===o||"textureCube"===o?n=ia(function(e){return e.link(a)}):"framebuffer"===o||"framebufferCube"===o?(P.command(a.color.length>0,'missing color attachment for framebuffer sent to uniform "'+e+'"',t.commandStr),n=ia(function(e){return e.link(a.color[0])})):P.commandRaise('invalid data for uniform "'+e+'"',t.commandStr)}else Le(a)?n=ia(function(t){return t.global.def("[",Y(a.length,function(r){return P.command("number"==typeof a[r]||"boolean"==typeof a[r],"invalid uniform "+e,t.commandStr),a[r]}),"]")}):P.commandRaise('invalid or missing data for uniform "'+e+'"',t.commandStr);n.value=a,i[e]=n}),Object.keys(n).forEach(function(e){var t=n[e];i[e]=aa(t,function(e,r){return e.invoke(r,t)})}),i}(s,h),T.drawVAO=T.scopeVAO=function(e,t){var r=e.static,n=e.dynamic;if(Xn in r){var i=r[Xn];return null!==i&&null===c.getVAO(i)&&(i=c.createVAO(i)),ia(function(e){return e.link(c.getVAO(i))})}if(Xn in n){var a=n[Xn];return aa(a,function(e,t){var r=e.invoke(t,a);return t.def(e.shared.vao+".getVAO("+r+")")})}return null}(e),!T.drawVAO&&_.program&&!m&&n.angle_instanced_arrays){var O=!0,j=_.program.attributes.map(function(e){var r=t.static[e];return O=O&&!!r,r});if(O&&j.length>0){var C=c.getVAO(c.createVAO(j));T.drawVAO=new ra(null,null,null,function(e,t){return e.link(C)}),T.useVAO=!0}}return m?T.useVAO=!0:T.attributes=function(e,t){var n=e.static,i=e.dynamic,o={};return Object.keys(n).forEach(function(e){var i=n[e],s=r.id(e),f=new g;if(ea(i))f.state=nn,f.buffer=a.getBuffer(a.create(i,ni,!1,!0)),f.type=0;else{var u=a.getBuffer(i);if(u)f.state=nn,f.buffer=u,f.type=0;else if(P.command("object"==typeof i&&i,"invalid data for attribute "+e,t.commandStr),"constant"in i){var c=i.constant;f.buffer="null",f.state=an,"number"==typeof c?f.x=c:(P.command(Le(c)&&c.length>0&&c.length<=4,"invalid constant for attribute "+e,t.commandStr),tn.forEach(function(e,t){t=0,'invalid offset for attribute "'+e+'"',t.commandStr);var h=0|i.stride;P.command(h>=0&&h<256,'invalid stride for attribute "'+e+'", must be integer betweeen [0, 255]',t.commandStr);var p=0|i.size;P.command(!("size"in i)||p>0&&p<=4,'invalid size for attribute "'+e+'", must be 1,2,3,4',t.commandStr);var d=!!i.normalized,m=0;"type"in i&&(P.commandParameter(i.type,ce,"invalid type for attribute "+e,t.commandStr),m=ce[i.type]);var y=0|i.divisor;"divisor"in i&&(P.command(0===y||v,'cannot specify divisor for attribute "'+e+'", instancing not supported',t.commandStr),P.command(y>=0,'invalid divisor for attribute "'+e+'"',t.commandStr)),P.optional(function(){var r=t.commandStr,n=["buffer","offset","divisor","normalized","type","size","stride"];Object.keys(i).forEach(function(t){P.command(n.indexOf(t)>=0,'unknown parameter "'+t+'" for attribute pointer "'+e+'" (valid parameters are '+n+")",r)})}),f.buffer=u,f.state=nn,f.size=p,f.normalized=d,f.type=m||u.dtype,f.offset=l,f.stride=h,f.divisor=y}}o[e]=ia(function(e,t){var r=e.attribCache;if(s in r)return r[s];var n={isStream:!1};return Object.keys(f).forEach(function(e){n[e]=f[e]}),f.buffer&&(n.buffer=e.link(f.buffer),n.type=n.type||n.buffer+".dtype"),r[s]=n,n})}),Object.keys(i).forEach(function(e){var t=i[e];o[e]=aa(t,function(r,n){var i=r.invoke(n,t),a=r.shared,o=r.constants,s=a.isBufferArgs,f=a.buffer;P.optional(function(){r.assert(n,i+"&&(typeof "+i+'==="object"||typeof '+i+'==="function")&&('+s+"("+i+")||"+f+".getBuffer("+i+")||"+f+".getBuffer("+i+".buffer)||"+s+"("+i+'.buffer)||("constant" in '+i+"&&(typeof "+i+'.constant==="number"||'+a.isArrayLike+"("+i+".constant))))",'invalid dynamic attribute "'+e+'"')});var u={isStream:n.def(!1)},c=new g;c.state=nn,Object.keys(c).forEach(function(e){u[e]=n.def(""+c[e])});var l=u.buffer,h=u.type;function p(e){n(u[e],"=",i,".",e,"|0;")}return n("if(",s,"(",i,")){",u.isStream,"=true;",l,"=",f,".createStream(",ni,",",i,");",h,"=",l,".dtype;","}else{",l,"=",f,".getBuffer(",i,");","if(",l,"){",h,"=",l,".dtype;",'}else if("constant" in ',i,"){",u.state,"=",an,";","if(typeof "+i+'.constant === "number"){',u[tn[0]],"=",i,".constant;",tn.slice(1).map(function(e){return u[e]}).join("="),"=0;","}else{",tn.map(function(e,t){return u[e]+"="+i+".constant.length>"+t+"?"+i+".constant["+t+"]:0;"}).join(""),"}}else{","if(",s,"(",i,".buffer)){",l,"=",f,".createStream(",ni,",",i,".buffer);","}else{",l,"=",f,".getBuffer(",i,".buffer);","}",h,'="type" in ',i,"?",o.glTypes,"[",i,".type]:",l,".dtype;",u.normalized,"=!!",i,".normalized;"),p("size"),p("offset"),p("stride"),p("divisor"),n("}}"),n.exit("if(",u.isStream,"){",f,".destroyStream(",l,");","}"),u})}),o}(t,h),T.context=function(e){var t=e.static,r=e.dynamic,n={};return Object.keys(t).forEach(function(e){var r=t[e];n[e]=ia(function(e,t){return"number"==typeof r||"boolean"==typeof r?""+r:e.link(r)})}),Object.keys(r).forEach(function(e){var t=r[e];n[e]=aa(t,function(e,r){return e.invoke(r,t)})}),n}(u),T}function F(e,t,r){var n=e.shared.context,i=e.scope();Object.keys(r).forEach(function(a){t.save(n,"."+a);var o=r[a].append(e,t);Array.isArray(o)?i(n,".",a,"=[",o.join(),"];"):i(n,".",a,"=",o,";")}),t(i)}function R(e,t,r,n){var i,a=e.shared,o=a.gl,s=a.framebuffer;b&&(i=t.def(a.extensions,".webgl_draw_buffers"));var f,u=e.constants,c=u.drawBuffer,l=u.backBuffer;f=r?r.append(e,t):t.def(s,".next"),n||t("if(",f,"!==",s,".cur){"),t("if(",f,"){",o,".bindFramebuffer(",Wi,",",f,".framebuffer);"),b&&t(i,".drawBuffersWEBGL(",c,"[",f,".colorAttachments.length]);"),t("}else{",o,".bindFramebuffer(",Wi,",null);"),b&&t(i,".drawBuffersWEBGL(",l,");"),t("}",s,".cur=",f,";"),n||t("}")}function B(e,t,r){var n=e.shared,i=n.gl,a=e.current,o=e.next,s=n.current,f=n.next,u=e.cond(s,".dirty");A.forEach(function(t){var n,c,l=M(t);if(!(l in r.state))if(l in o){n=o[l],c=a[l];var h=Y(w[l].length,function(e){return u.def(n,"[",e,"]")});u(e.cond(h.map(function(e,t){return e+"!=="+c+"["+t+"]"}).join("||")).then(i,".",_[l],"(",h,");",h.map(function(e,t){return c+"["+t+"]="+e}).join(";"),";"))}else{n=u.def(f,".",l);var p=e.cond(n,"!==",s,".",l);u(p),l in k?p(e.cond(n).then(i,".enable(",k[l],");").else(i,".disable(",k[l],");"),s,".",l,"=",n,";"):p(i,".",_[l],"(",n,");",s,".",l,"=",n,";")}}),0===Object.keys(r.state).length&&u(s,".dirty=false;"),t(u)}function I(e,t,r,n){var i=e.shared,a=e.current,o=i.current,s=i.gl;ta(Object.keys(r)).forEach(function(i){var f=r[i];if(!n||n(f)){var u=f.append(e,t);if(k[i]){var c=k[i];na(f)?t(s,u?".enable(":".disable(",c,");"):t(e.cond(u).then(s,".enable(",c,");").else(s,".disable(",c,");")),t(o,".",i,"=",u,";")}else if(Le(u)){var l=a[i];t(s,".",_[i],"(",u,");",u.map(function(e,t){return l+"["+t+"]="+e}).join(";"),";")}else t(s,".",_[i],"(",u,");",o,".",i,"=",u,";")}})}function z(e,t){v&&(e.instancing=t.def(e.shared.extensions,".angle_instanced_arrays"))}function L(e,t,r,n,i){var a,o,s,f=e.shared,u=e.stats,c=f.current,l=f.timer,h=r.profile;function p(){return"undefined"==typeof performance?"Date.now()":"performance.now()"}function m(e){e(a=t.def(),"=",p(),";"),"string"==typeof i?e(u,".count+=",i,";"):e(u,".count++;"),d&&(n?e(o=t.def(),"=",l,".getNumPendingQueries();"):e(l,".beginQuery(",u,");"))}function g(e){e(u,".cpuTime+=",p(),"-",a,";"),d&&(n?e(l,".pushScopeStats(",o,",",l,".getNumPendingQueries(),",u,");"):e(l,".endQuery();"))}function y(e){var r=t.def(c,".profile");t(c,".profile=",e,";"),t.exit(c,".profile=",r,";")}if(h){if(na(h))return void(h.enable?(m(t),g(t.exit),y("true")):y("false"));y(s=h.append(e,t))}else s=t.def(c,".profile");var v=e.block();m(v),t("if(",s,"){",v,"}");var b=e.block();g(b),t.exit("if(",s,"){",b,"}")}function U(e,t,r,n,i){var a=e.shared;n.forEach(function(n){var o,s=n.name,f=r.attributes[s];if(f){if(!i(f))return;o=f.append(e,t)}else{if(!i(oa))return;var u=e.scopeAttrib(s);P.optional(function(){e.assert(t,u+".state","missing attribute "+s)}),o={},Object.keys(new g).forEach(function(e){o[e]=t.def(u,".",e)})}!function(r,n,i){var o=a.gl,s=t.def(r,".location"),f=t.def(a.attributes,"[",s,"]"),u=i.state,c=i.buffer,l=[i.x,i.y,i.z,i.w],h=["buffer","normalized","offset","stride"];function p(){t("if(!",f,".buffer){",o,".enableVertexAttribArray(",s,");}");var r,a=i.type;if(r=i.size?t.def(i.size,"||",n):n,t("if(",f,".type!==",a,"||",f,".size!==",r,"||",h.map(function(e){return f+"."+e+"!=="+i[e]}).join("||"),"){",o,".bindBuffer(",ni,",",c,".buffer);",o,".vertexAttribPointer(",[s,r,a,i.normalized,i.stride,i.offset],");",f,".type=",a,";",f,".size=",r,";",h.map(function(e){return f+"."+e+"="+i[e]+";"}).join(""),"}"),v){var u=i.divisor;t("if(",f,".divisor!==",u,"){",e.instancing,".vertexAttribDivisorANGLE(",[s,u],");",f,".divisor=",u,";}")}}function d(){t("if(",f,".buffer){",o,".disableVertexAttribArray(",s,");",f,".buffer=null;","}if(",tn.map(function(e,t){return f+"."+e+"!=="+l[t]}).join("||"),"){",o,".vertexAttrib4f(",s,",",l,");",tn.map(function(e,t){return f+"."+e+"="+l[t]+";"}).join(""),"}")}u===nn?p():u===an?d():(t("if(",u,"===",nn,"){"),p(),t("}else{"),d(),t("}"))}(e.link(n),function(e){switch(e){case yi:case xi:case Mi:return 2;case vi:case Ai:case Ei:return 3;case bi:case ki:case Si:return 4;default:return 1}}(n.info.type),o)})}function q(e,t,n,i,a){for(var o,s=e.shared,f=s.gl,u=0;u1?t(Y(w,function(e){return Array.isArray(c)?c[e]:c+"["+e+"]"})):(P(!Array.isArray(c),"uniform value must not be an array"),t(c));t(");")}}function N(e,t,r,n){var i=e.shared,a=i.gl,o=i.draw,s=n.draw;var f=function(){var i,f=s.elements,u=t;return f?((f.contextDep&&n.contextDynamic||f.propDep)&&(u=r),i=f.append(e,u)):i=u.def(o,".",Hn),i&&u("if("+i+")"+a+".bindBuffer("+ii+","+i+".buffer.buffer);"),i}();function u(i){var a=s[i];return a?a.append(e,a.contextDep&&n.contextDynamic||a.propDep?r:t):t.def(o,".",i)}var c,l,h=u(Gn),p=u(Yn),d=function(){var i,a=s.count,f=t;return a?((a.contextDep&&n.contextDynamic||a.propDep)&&(f=r),i=a.append(e,f),P.optional(function(){a.MISSING&&e.assert(t,"false","missing vertex count"),a.DYNAMIC&&e.assert(f,i+">=0","missing vertex count")})):(i=f.def(o,".",Wn),P.optional(function(){e.assert(f,i+">=0","missing vertex count")})),i}();if("number"==typeof d){if(0===d)return}else r("if(",d,"){"),r.exit("}");v&&(c=u(Qn),l=e.instancing);var m=f+".type",g=s.elements&&na(s.elements);function y(){function e(){r(l,".drawElementsInstancedANGLE(",[h,d,m,p+"<<(("+m+"-"+rn+")>>1)",c],");")}function t(){r(l,".drawArraysInstancedANGLE(",[h,p,d,c],");")}f?g?e():(r("if(",f,"){"),e(),r("}else{"),t(),r("}")):t()}function b(){function e(){r(a+".drawElements("+[h,d,m,p+"<<(("+m+"-"+rn+")>>1)"]+");")}function t(){r(a+".drawArrays("+[h,p,d]+");")}f?g?e():(r("if(",f,"){"),e(),r("}else{"),t(),r("}")):t()}v&&("number"!=typeof c||c>=0)?"string"==typeof c?(r("if(",c,">0){"),y(),r("}else if(",c,"<0){"),b(),r("}")):y():b()}function H(e,t,r,n,i){var a=C(),o=a.proc("body",i);return P.optional(function(){a.commandStr=t.commandStr,a.command=a.link(t.commandStr)}),v&&(a.instancing=o.def(a.shared.extensions,".angle_instanced_arrays")),e(a,o,r,n),a.compile().body}function G(e,t,r,n){z(e,t),r.useVAO?r.drawVAO?t(e.shared.vao,".setVAO(",r.drawVAO.append(e,t),");"):t(e.shared.vao,".setVAO(",e.shared.vao,".targetVAO);"):(t(e.shared.vao,".setVAO(null);"),U(e,t,r,n.attributes,function(){return!0})),q(e,t,r,n.uniforms,function(){return!0}),N(e,t,t,r)}function W(e,t,r,n){function i(){return!0}e.batchId="a1",z(e,t),U(e,t,r,n.attributes,i),q(e,t,r,n.uniforms,i),N(e,t,t,r)}function Q(e,t,r,n){z(e,t);var i=r.contextDep,a=t.def(),o=t.def();e.shared.props=o,e.batchId=a;var s=e.scope(),f=e.scope();function u(e){return e.contextDep&&i||e.propDep}function c(e){return!u(e)}if(t(s.entry,"for(",a,"=0;",a,"<","a1",";++",a,"){",o,"=","a0","[",a,"];",f,"}",s.exit),r.needsContext&&F(e,f,r.context),r.needsFramebuffer&&R(e,f,r.framebuffer),I(e,f,r.state,u),r.profile&&u(r.profile)&&L(e,f,r,!1,!0),n)r.useVAO?r.drawVAO?u(r.drawVAO)?f(e.shared.vao,".setVAO(",r.drawVAO.append(e,f),");"):s(e.shared.vao,".setVAO(",r.drawVAO.append(e,s),");"):s(e.shared.vao,".setVAO(",e.shared.vao,".targetVAO);"):(s(e.shared.vao,".setVAO(null);"),U(e,s,r,n.attributes,c),U(e,f,r,n.attributes,u)),q(e,s,r,n.uniforms,c),q(e,f,r,n.uniforms,u),N(e,s,f,r);else{var l=e.global.def("{}"),h=r.shader.progVar.append(e,f),p=f.def(h,".id"),d=f.def(l,"[",p,"]");f(e.shared.gl,".useProgram(",h,".program);","if(!",d,"){",d,"=",l,"[",p,"]=",e.link(function(t){return H(W,e,r,t,2)}),"(",h,");}",d,".call(this,a0[",a,"],",a,");")}}function X(e,t,r){var n=t.static[r];if(n&&function(e){if("object"==typeof e&&!Le(e)){for(var t=Object.keys(e),r=0;r0&&r(e.shared.current,".dirty=true;")}(s,f),function(e,t){var n=e.proc("scope",3);e.batchId="a2";var i=e.shared,a=i.current;function o(r){var a=t.shader[r];a&&n.set(i.shader,"."+r,a.append(e,n))}F(e,n,t.context),t.framebuffer&&t.framebuffer.append(e,n),ta(Object.keys(t.state)).forEach(function(r){var a=t.state[r].append(e,n);Le(a)?a.forEach(function(t,i){n.set(e.next[r],"["+i+"]",t)}):n.set(i.next,"."+r,a)}),L(e,n,t,!0,!0),[Hn,Yn,Wn,Qn,Gn].forEach(function(r){var a=t.draw[r];a&&n.set(i.draw,"."+r,""+a.append(e,n))}),Object.keys(t.uniforms).forEach(function(a){var o=t.uniforms[a].append(e,n);Array.isArray(o)&&(o="["+o.join()+"]"),n.set(i.uniforms,"["+r.id(a)+"]",o)}),Object.keys(t.attributes).forEach(function(r){var i=t.attributes[r].append(e,n),a=e.scopeAttrib(r);Object.keys(new g).forEach(function(e){n.set(a,"."+e,i[e])})}),t.scopeVAO&&n.set(i.vao,".targetVAO",t.scopeVAO.append(e,n)),o(qn),o(Nn),Object.keys(t.state).length>0&&(n(a,".dirty=true;"),n.exit(a,".dirty=true;")),n("a1(",e.shared.context,",a0,",e.batchId,");")}(s,f),function(e,t){var r=e.proc("batch",2);e.batchId="0",z(e,r);var n=!1,i=!0;Object.keys(t.context).forEach(function(e){n=n||t.context[e].propDep}),n||(F(e,r,t.context),i=!1);var a=t.framebuffer,o=!1;function s(e){return e.contextDep&&n||e.propDep}a?(a.propDep?n=o=!0:a.contextDep&&n&&(o=!0),o||R(e,r,a)):R(e,r,null),t.state.viewport&&t.state.viewport.propDep&&(n=!0),B(e,r,t),I(e,r,t.state,function(e){return!s(e)}),t.profile&&s(t.profile)||L(e,r,t,!1,"a1"),t.contextDep=n,t.needsContext=i,t.needsFramebuffer=o;var f=t.shader.progVar;if(f.contextDep&&n||f.propDep)Q(e,r,t,null);else{var u=f.append(e,r);if(r(e.shared.gl,".useProgram(",u,".program);"),t.shader.program)Q(e,r,t,t.shader.program);else{r(e.shared.vao,".setVAO(null);");var c=e.global.def("{}"),l=r.def(u,".id"),h=r.def(c,"[",l,"]");r(e.cond(h).then(h,".call(this,a0,a1);").else(h,"=",c,"[",l,"]=",e.link(function(r){return H(Q,e,t,r,2)}),"(",u,");",h,".call(this,a0,a1);"))}}Object.keys(t.state).length>0&&r(e.shared.current,".dirty=true;")}(s,f),t(s.compile(),{destroy:function(){f.shader.program.destroy()}})}}}var fa=34918,ua=34919,ca=35007,la=function(e,t){if(!t.ext_disjoint_timer_query)return null;var r=[];function n(e){r.push(e)}var i=[];function a(){this.startQueryIndex=-1,this.endQueryIndex=-1,this.sum=0,this.stats=null}var o=[];function s(e){o.push(e)}var f=[];function u(e,t,r){var n=o.pop()||new a;n.startQueryIndex=e,n.endQueryIndex=t,n.sum=0,n.stats=r,f.push(n)}var c=[],l=[];return{beginQuery:function(e){var n=r.pop()||t.ext_disjoint_timer_query.createQueryEXT();t.ext_disjoint_timer_query.beginQueryEXT(ca,n),i.push(n),u(i.length-1,i.length,e)},endQuery:function(){t.ext_disjoint_timer_query.endQueryEXT(ca)},pushScopeStats:u,update:function(){var e,r,a=i.length;if(0!==a){l.length=Math.max(l.length,a+1),c.length=Math.max(c.length,a+1),c[0]=0,l[0]=0;var o=0;for(e=0,r=0;r0)if(Array.isArray(r[0])){s=pe(r);for(var c=1,l=1;l0)if("number"==typeof t[0]){var a=ne.allocType(h.dtype,t.length);we(a,t),d(a,i),ne.freeType(a)}else if(Array.isArray(t[0])||e(t[0])){n=pe(t);var o=he(t,n,h.dtype);d(o,i),ne.freeType(o)}else P.raise("invalid buffer data")}else if(ae(t)){var s=t.stride,f=0,u=0,c=0,l=0;1===(n=t.shape).length?(f=n[0],u=1,c=s[0],l=0):2===n.length?(f=n[0],u=n[1],c=s[0],l=s[1]):P.raise("invalid shape");var m=Array.isArray(t.data)?h.dtype:be(t.data),g=ne.allocType(m,f*u);xe(g,t.data,f,u,c,l,t.offset),d(g,i),ne.freeType(g)}else P.raise("invalid data for buffer subdata");return p},n.profile&&(p.stats=h.stats),p.destroy=function(){l(h)},p},createStream:function(e,t){var r=f.pop();return r||(r=new s(e)),r.bind(),c(r,t,me,0,1,!1),r},destroyStream:function(e){f.push(e)},clear:function(){oe(o).forEach(l),f.forEach(l)},getBuffer:function(e){return e&&e._buffer instanceof s?e._buffer:null},restore:function(){oe(o).forEach(function(e){e.buffer=t.createBuffer(),t.bindBuffer(e.type,e.buffer),t.bufferData(e.type,e.persistentData||e.byteLength,e.usage)})},_initBuffer:c}}(i,l,n,function(e){return w.destroyBuffer(e)}),w=function(t,r,n,i,a){for(var o=n.maxAttributes,s=new Array(o),f=0;f0,"must specify at least one attribute");var i={},f=n.attributes;f.length=t.length;for(var u=0;u=p.byteLength?c.subdata(p):(c.destroy(),n.buffers[u]=null)),n.buffers[u]||(c=n.buffers[u]=a.create(l,qr,!1,!0)),h.buffer=a.getBuffer(c),h.size=0|h.buffer.dimension,h.normalized=!1,h.type=h.buffer.dtype,h.offset=0,h.stride=0,h.divisor=0,h.state=1,i[u]=1):a.getBuffer(l)?(h.buffer=a.getBuffer(l),h.size=0|h.buffer.dimension,h.normalized=!1,h.type=h.buffer.dtype,h.offset=0,h.stride=0,h.divisor=0,h.state=1):a.getBuffer(l.buffer)?(h.buffer=a.getBuffer(l.buffer),h.size=0|(+l.size||h.buffer.dimension),h.normalized=!!l.normalized||!1,"type"in l?(P.parameter(l.type,ce,"invalid buffer type"),h.type=ce[l.type]):h.type=h.buffer.dtype,h.offset=0|(l.offset||0),h.stride=0|(l.stride||0),h.divisor=0|(l.divisor||0),h.state=1,P(h.size>=1&&h.size<=4,"size must be between 1 and 4"),P(h.offset>=0,"invalid offset"),P(h.stride>=0&&h.stride<=255,"stride must be between 0 and 255"),P(h.divisor>=0,"divisor must be positive"),P(!h.divisor||!!r.angle_instanced_arrays,"ANGLE_instanced_arrays must be enabled to use divisor")):"x"in l?(P(u>0,"first attribute must not be a constant"),h.x=+l.x||0,h.y=+l.y||0,h.z=+l.z||0,h.w=+l.w||0,h.state=2):P(!1,"invalid attribute spec for location "+u)}for(var d=0;d>=1:l===Ce&&(p>>=2)),i.vertCount=p;var d=s;if(s<0){d=Me;var m=i.buffer.dimension;1===m&&(d=ke),2===m&&(d=_e),3===m&&(d=Me)}i.primType=d}function l(e){i.elementsCount--,P(null!==e.buffer,"must not double destroy elements"),delete a[e.id],e.buffer.destroy(),e.buffer=null}return{create:function(t,r){var a=n.create(null,De,!0),o=new f(a._buffer);function u(t){if(t)if("number"==typeof t)a(t),o.primType=Me,o.vertCount=0|t,o.type=Se;else{var r=null,n=Fe,i=-1,f=-1,l=0,h=0;Array.isArray(t)||e(t)||ae(t)?r=t:(P.type(t,"object","invalid arguments for elements"),"data"in t&&(r=t.data,P(Array.isArray(r)||e(r)||ae(r),"invalid data for element buffer")),"usage"in t&&(P.parameter(t.usage,le,"invalid element buffer usage"),n=le[t.usage]),"primitive"in t&&(P.parameter(t.primitive,Ae,"invalid element buffer primitive"),i=Ae[t.primitive]),"count"in t&&(P("number"==typeof t.count&&t.count>=0,"invalid vertex count for elements"),f=0|t.count),"type"in t&&(P.parameter(t.type,s,"invalid buffer type"),h=s[t.type]),"length"in t?l=0|t.length:(l=f,h===Oe||h===Te?l*=2:h!==Ce&&h!==je||(l*=4))),c(o,r,n,i,f,l,h)}else a(),o.primType=Me,o.vertCount=0,o.type=Se;return u}return i.elementsCount++,u(t),u._reglType="elements",u._elements=o,u.subdata=function(e,t){return a.subdata(e,t),u},u.destroy=function(){l(o)},u},createStream:function(e){var t=u.pop();return t||(t=new f(n.create(null,De,!0,!1)._buffer)),c(t,e,Pe,-1,-1,0,0),t},destroyStream:function(e){u.push(e)},getElements:function(e){return"function"==typeof e&&e._elements instanceof f?e._elements:null},clear:function(){oe(a).forEach(l)}}}(i,h,b,l),A=function(e,r,n,i){var a={},o={};function s(e,t,r,n){this.name=e,this.id=t,this.location=r,this.info=n}function f(e,t){for(var r=0;r1)for(var y=0;ye&&(e=t.stats.uniformsCount)}),e},n.getMaxAttributesCount=function(){var e=0;return l.forEach(function(t){t.stats.attributesCount>e&&(e=t.stats.attributesCount)}),e}),{clear:function(){var t=e.deleteShader.bind(e);oe(a).forEach(t),a={},oe(o).forEach(t),o={},l.forEach(function(t){e.deleteProgram(t.program)}),l.length=0,c={},n.shaderCount=0},program:function(r,i,s,f){P.command(r>=0,"missing vertex shader",s),P.command(i>=0,"missing fragment shader",s);var u=c[i];u||(u=c[i]={});var h=u[r];if(h&&(h.refCount++,!f))return h;var m=new p(i,r);return n.shaderCount++,d(m,s,f),h||(u[r]=m),l.push(m),t(m,{destroy:function(){if(m.refCount--,m.refCount<=0){e.deleteProgram(m.program);var t=l.indexOf(m);l.splice(t,1),n.shaderCount--}u[m.vertId].refCount<=0&&(e.deleteShader(o[m.vertId]),delete o[m.vertId],delete c[m.fragId][m.vertId]),Object.keys(c[m.fragId]).length||(e.deleteShader(a[m.fragId]),delete a[m.fragId],delete c[m.fragId])}})},restore:function(){a={},o={};for(var e=0;e=Er&&t=2,"invalid shape for framebuffer"),o=C[0],h=C[1]}else"radius"in j&&(o=h=j.radius),"width"in j&&(o=j.width),"height"in j&&(h=j.height);("color"in j||"colors"in j)&&(b=j.color||j.colors,Array.isArray(b)&&P(1===b.length||r.webgl_draw_buffers,"multiple render targets not supported")),b||("colorCount"in j&&P((M=0|j.colorCount)>0,"invalid color buffer count"),"colorTexture"in j&&(w=!!j.colorTexture,x="rgba4"),"colorType"in j&&(k=j.colorType,w?(P(r.oes_texture_float||!("float"===k||"float32"===k),"you must enable OES_texture_float in order to use floating point framebuffer objects"),P(r.oes_texture_half_float||!("half float"===k||"float16"===k),"you must enable OES_texture_half_float in order to use 16-bit floating point framebuffer objects")):"half float"===k||"float16"===k?(P(r.ext_color_buffer_half_float,"you must enable EXT_color_buffer_half_float to use 16-bit render buffers"),x="rgba16f"):"float"!==k&&"float32"!==k||(P(r.webgl_color_buffer_float,"you must enable WEBGL_color_buffer_float in order to use 32-bit floating point renderbuffers"),x="rgba32f"),P.oneOf(k,c,"invalid color type")),"colorFormat"in j&&(f.indexOf(x=j.colorFormat)>=0?w=!0:u.indexOf(x)>=0?w=!1:w?P.oneOf(j.colorFormat,f,"invalid color format for texture"):P.oneOf(j.colorFormat,u,"invalid color format for renderbuffer"))),("depthTexture"in j||"depthStencilTexture"in j)&&P(!(O=!(!j.depthTexture&&!j.depthStencilTexture))||r.webgl_depth_texture,"webgl_depth_texture extension not supported"),"depth"in j&&("boolean"==typeof j.depth?d=j.depth:(E=j.depth,v=!1)),"stencil"in j&&("boolean"==typeof j.stencil?v=j.stencil:(S=j.stencil,d=!1)),"depthStencil"in j&&("boolean"==typeof j.depthStencil?d=v=j.depthStencil:(T=j.depthStencil,d=!1,v=!1))}else o=h=1;var D=null,F=null,R=null,B=null;if(Array.isArray(b))D=b.map(m);else if(b)D=[m(b)];else for(D=new Array(M),i=0;i=0||D[i].renderbuffer&&Lr.indexOf(D[i].renderbuffer._renderbuffer.format)>=0,"framebuffer color attachment "+i+" is invalid"),D[i]&&D[i].texture){var z=Fr[D[i].texture._texture.format]*Rr[D[i].texture._texture.type];null===I?I=z:P(I===z,"all color attachments much have the same number of bits per pixel.")}return p(F,o,h),P(!F||F.texture&&F.texture._texture.format===Dr||F.renderbuffer&&F.renderbuffer._renderbuffer.format===Br,"invalid depth attachment for framebuffer object"),p(R,o,h),P(!R||R.renderbuffer&&R.renderbuffer._renderbuffer.format===Ir,"invalid stencil attachment for framebuffer object"),p(B,o,h),P(!B||B.texture&&B.texture._texture.format===zr||B.renderbuffer&&B.renderbuffer._renderbuffer.format===zr,"invalid depth-stencil attachment for framebuffer object"),A(a),a.width=o,a.height=h,a.colorAttachments=D,a.depthAttachment=F,a.stencilAttachment=R,a.depthStencilAttachment=B,l.color=D.map(y),l.depth=y(F),l.stencil=y(R),l.depthStencil=y(B),l.width=a.width,l.height=a.height,_(a),l}return o.framebufferCount++,l(e,i),t(l,{resize:function(e,t){P(s.next!==a,"can not resize a framebuffer which is currently in use");var r=Math.max(0|e,1),n=Math.max(0|t||r,1);if(r===a.width&&n===a.height)return l;for(var i=a.colorAttachments,o=0;o=2,"invalid shape for framebuffer"),P(v[0]===v[1],"cube framebuffer must be square"),h=v[0]}else"radius"in y&&(h=0|y.radius),"width"in y?(h=0|y.width,"height"in y&&P(y.height===h,"must be square")):"height"in y&&(h=0|y.height);("color"in y||"colors"in y)&&(p=y.color||y.colors,Array.isArray(p)&&P(1===p.length||r.webgl_draw_buffers,"multiple render targets not supported")),p||("colorCount"in y&&P((g=0|y.colorCount)>0,"invalid color buffer count"),"colorType"in y&&(P.oneOf(y.colorType,c,"invalid color type"),m=y.colorType),"colorFormat"in y&&(d=y.colorFormat,P.oneOf(y.colorFormat,f,"invalid color format for texture"))),"depth"in y&&(l.depth=y.depth),"stencil"in y&&(l.stencil=y.stencil),"depthStencil"in y&&(l.depthStencil=y.depthStencil)}else h=1;if(p)if(Array.isArray(p))for(u=[],n=0;n0&&(l.depth=a[0].depth,l.stencil=a[0].stencil,l.depthStencil=a[0].depthStencil),a[n]?a[n](l):a[n]=M(l)}return t(o,{width:h,height:h,color:u})}return o(e),t(o,{faces:a,resize:function(e){var t,r=0|e;if(P(r>0&&r<=n.maxCubeMapSize,"invalid radius for cube fbo"),r===o.width)return o;var i=o.color;for(t=0;t=0;--e){var t=j[e];t&&t(y,null,0)}i.flush(),p&&p.update()}function I(){!R&&j.length>0&&(R=q.next(B))}function z(){R&&(q.cancel(B),R=null)}function L(e){e.preventDefault(),o=!0,z(),C.forEach(function(e){e()})}function U(e){i.getError(),o=!1,s.restore(),A.restore(),b.restore(),k.restore(),_.restore(),M.restore(),w.restore(),p&&p.restore(),E.procs.refresh(),I(),D.forEach(function(e){e()})}function H(e){function r(e,t){var r={},n={};return Object.keys(e).forEach(function(i){var a=e[i];if(V.isDynamic(a))n[i]=V.unbox(a,i);else{if(t&&Array.isArray(a))for(var o=0;o0)return l.call(this,function(e){for(;p.length=0,"cannot cancel a frame twice"),j[t]=function e(){var t=xa(j,e);j[t]=j[j.length-1],j.length-=1,j.length<=0&&z()}}}}function X(){var e=T.viewport,t=T.scissor_box;e[0]=e[1]=t[0]=t[1]=0,y.viewportWidth=y.framebufferWidth=y.drawingBufferWidth=e[2]=t[2]=i.drawingBufferWidth,y.viewportHeight=y.framebufferHeight=y.drawingBufferHeight=e[3]=t[3]=i.drawingBufferHeight}function K(){y.tick+=1,y.time=J(),X(),E.procs.poll()}function $(){k.refresh(),X(),E.procs.refresh(),p&&p.update()}function J(){return(N()-d)/1e3}$();var Z=t(H,{clear:function(e){if(P("object"==typeof e&&e,"regl.clear() takes an object as input"),"framebuffer"in e)if(e.framebuffer&&"framebufferCube"===e.framebuffer_reglType)for(var r=0;r<6;++r)G(t({framebuffer:e.framebuffer.faces[r]},e),Y);else G(e,Y);else Y(0,e)},prop:V.define.bind(null,va),context:V.define.bind(null,ba),this:V.define.bind(null,wa),draw:H({}),buffer:function(e){return b.create(e,ma,!1,!1)},elements:function(e){return x.create(e,!1)},texture:k.create2D,cube:k.createCube,renderbuffer:_.create,framebuffer:M.create,framebufferCube:M.createCube,vao:w.createVAO,attributes:a,frame:Q,on:function(e,t){var r;switch(P.type(t,"function","listener callback must be a function"),e){case"frame":return Q(t);case"lost":r=C;break;case"restore":r=D;break;case"destroy":r=F;break;default:P.raise("invalid event, must be one of frame,lost,restore,destroy")}return r.push(t),{cancel:function(){for(var e=0;e=0},read:S,destroy:function(){j.length=0,z(),O&&(O.removeEventListener(ga,L),O.removeEventListener(ya,U)),A.clear(),M.clear(),_.clear(),k.clear(),x.clear(),b.clear(),w.clear(),p&&p.clear(),F.forEach(function(e){e()})},_gl:i,_refresh:$,poll:function(){K(),p&&p.update()},now:J,stats:l});return n.onDone(null,Z),Z}},"object"==typeof r&&void 0!==t?t.exports=i():"function"==typeof define&&define.amd?define(i):n.createREGL=i()},{}],41:[function(e,t,r){(function(e){(function(){"use strict";var r=256,n=[],i=void 0===e?window:e,a=Math.pow(r,6),o=Math.pow(2,52),s=2*o,f=r-1,u=Math.random;function c(e){var t,n=e.length,i=this,a=0,o=i.i=i.j=0,s=i.S=[];for(n||(e=[n++]);a=s;)e/=2,t/=2,n>>>=1;return(e+n)/t}},t.exports.resetGlobal=function(){Math.random=u},l(Math.random(),n)}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],42:[function(e,t,r){!function(){"use strict";var e=.5*(Math.sqrt(3)-1),n=(3-Math.sqrt(3))/6,i=1/6,a=(Math.sqrt(5)-1)/4,o=(5-Math.sqrt(5))/20;function s(e){var t;t="function"==typeof e?e:e?function(){var e=0,t=0,r=0,n=1,i=(a=4022871197,function(e){e=e.toString();for(var t=0;t>>0,a=(r*=a)>>>0,a+=4294967296*(r-=a)}return 2.3283064365386963e-10*(a>>>0)});var a;e=i(" "),t=i(" "),r=i(" ");for(var o=0;oy?(i=1,a=0):(i=0,a=1);var v=g-i+n,b=y-a+n,w=g-1+2*n,x=y-1+2*n,A=255&p,k=255&d,_=.5-g*g-y*y;if(_>=0){var M=3*o[A+s[k]];u=(_*=_)*_*(f[M]*g+f[M+1]*y)}var E=.5-v*v-b*b;if(E>=0){var S=3*o[A+i+s[k+a]];c=(E*=E)*E*(f[S]*v+f[S+1]*b)}var T=.5-w*w-x*x;if(T>=0){var O=3*o[A+1+s[k+1]];l=(T*=T)*T*(f[O]*w+f[O+1]*x)}return 70*(u+c+l)},noise3D:function(e,t,r){var n,a,o,s,f,u,c,l,h,p,d=this.permMod12,m=this.perm,g=this.grad3,y=(e+t+r)*(1/3),v=Math.floor(e+y),b=Math.floor(t+y),w=Math.floor(r+y),x=(v+b+w)*i,A=e-(v-x),k=t-(b-x),_=r-(w-x);A>=k?k>=_?(f=1,u=0,c=0,l=1,h=1,p=0):A>=_?(f=1,u=0,c=0,l=1,h=0,p=1):(f=0,u=0,c=1,l=1,h=0,p=1):k<_?(f=0,u=0,c=1,l=0,h=1,p=1):A<_?(f=0,u=1,c=0,l=0,h=1,p=1):(f=0,u=1,c=0,l=1,h=1,p=0);var M=A-f+i,E=k-u+i,S=_-c+i,T=A-l+2*i,O=k-h+2*i,j=_-p+2*i,C=A-1+.5,D=k-1+.5,P=_-1+.5,F=255&v,R=255&b,B=255&w,I=.6-A*A-k*k-_*_;if(I<0)n=0;else{var z=3*d[F+m[R+m[B]]];n=(I*=I)*I*(g[z]*A+g[z+1]*k+g[z+2]*_)}var L=.6-M*M-E*E-S*S;if(L<0)a=0;else{var U=3*d[F+f+m[R+u+m[B+c]]];a=(L*=L)*L*(g[U]*M+g[U+1]*E+g[U+2]*S)}var V=.6-T*T-O*O-j*j;if(V<0)o=0;else{var q=3*d[F+l+m[R+h+m[B+p]]];o=(V*=V)*V*(g[q]*T+g[q+1]*O+g[q+2]*j)}var N=.6-C*C-D*D-P*P;if(N<0)s=0;else{var H=3*d[F+1+m[R+1+m[B+1]]];s=(N*=N)*N*(g[H]*C+g[H+1]*D+g[H+2]*P)}return 32*(n+a+o+s)},noise4D:function(e,t,r,n){var i,s,f,u,c,l,h,p,d,m,g,y,v,b,w,x,A,k=this.perm,_=this.grad4,M=(e+t+r+n)*a,E=Math.floor(e+M),S=Math.floor(t+M),T=Math.floor(r+M),O=Math.floor(n+M),j=(E+S+T+O)*o,C=e-(E-j),D=t-(S-j),P=r-(T-j),F=n-(O-j),R=0,B=0,I=0,z=0;C>D?R++:B++,C>P?R++:I++,C>F?R++:z++,D>P?B++:I++,D>F?B++:z++,P>F?I++:z++;var L=C-(l=R>=3?1:0)+o,U=D-(h=B>=3?1:0)+o,V=P-(p=I>=3?1:0)+o,q=F-(d=z>=3?1:0)+o,N=C-(m=R>=2?1:0)+2*o,H=D-(g=B>=2?1:0)+2*o,G=P-(y=I>=2?1:0)+2*o,W=F-(v=z>=2?1:0)+2*o,Y=C-(b=R>=1?1:0)+3*o,Q=D-(w=B>=1?1:0)+3*o,X=P-(x=I>=1?1:0)+3*o,K=F-(A=z>=1?1:0)+3*o,$=C-1+4*o,J=D-1+4*o,Z=P-1+4*o,ee=F-1+4*o,te=255&E,re=255&S,ne=255&T,ie=255&O,ae=.6-C*C-D*D-P*P-F*F;if(ae<0)i=0;else{var oe=k[te+k[re+k[ne+k[ie]]]]%32*4;i=(ae*=ae)*ae*(_[oe]*C+_[oe+1]*D+_[oe+2]*P+_[oe+3]*F)}var se=.6-L*L-U*U-V*V-q*q;if(se<0)s=0;else{var fe=k[te+l+k[re+h+k[ne+p+k[ie+d]]]]%32*4;s=(se*=se)*se*(_[fe]*L+_[fe+1]*U+_[fe+2]*V+_[fe+3]*q)}var ue=.6-N*N-H*H-G*G-W*W;if(ue<0)f=0;else{var ce=k[te+m+k[re+g+k[ne+y+k[ie+v]]]]%32*4;f=(ue*=ue)*ue*(_[ce]*N+_[ce+1]*H+_[ce+2]*G+_[ce+3]*W)}var le=.6-Y*Y-Q*Q-X*X-K*K;if(le<0)u=0;else{var he=k[te+b+k[re+w+k[ne+x+k[ie+A]]]]%32*4;u=(le*=le)*le*(_[he]*Y+_[he+1]*Q+_[he+2]*X+_[he+3]*K)}var pe=.6-$*$-J*J-Z*Z-ee*ee;if(pe<0)c=0;else{var de=k[te+1+k[re+1+k[ne+1+k[ie+1]]]]%32*4;c=(pe*=pe)*pe*(_[de]*$+_[de+1]*J+_[de+2]*Z+_[de+3]*ee)}return 27*(i+s+f+u+c)}},s._buildPermutationTable=f,"undefined"!=typeof define&&define.amd&&define(function(){return s}),void 0!==r?r.SimplexNoise=s:"undefined"!=typeof window&&(window.SimplexNoise=s),void 0!==t&&(t.exports=s)}()},{}],43:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var r=[],n=!0,i=!1,a=void 0;try{for(var o,s=e[Symbol.iterator]();!(n=(o=s.next()).done)&&(r.push(o.value),!t||r.length!==t);n=!0);}catch(e){i=!0,a=e}finally{try{!n&&s.return&&s.return()}finally{if(i)throw a}}return r}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=2*Math.PI,a=function(e,t,r,n,i,a,o){var s=e.x,f=e.y;return{x:n*(s*=t)-i*(f*=r)+a,y:i*s+n*f+o}},o=function(e,t){var r=1.5707963267948966===t?.551915024494:-1.5707963267948966===t?-.551915024494:4/3*Math.tan(t/4),n=Math.cos(e),i=Math.sin(e),a=Math.cos(e+t),o=Math.sin(e+t);return[{x:n-i*r,y:i+n*r},{x:a+o*r,y:o-a*r},{x:a,y:o}]},s=function(e,t,r,n){var i=e*r+t*n;return i>1&&(i=1),i<-1&&(i=-1),(e*n-t*r<0?-1:1)*Math.acos(i)};r.default=function(e){var t=e.px,r=e.py,f=e.cx,u=e.cy,c=e.rx,l=e.ry,h=e.xAxisRotation,p=void 0===h?0:h,d=e.largeArcFlag,m=void 0===d?0:d,g=e.sweepFlag,y=void 0===g?0:g,v=[];if(0===c||0===l)return[];var b=Math.sin(p*i/360),w=Math.cos(p*i/360),x=w*(t-f)/2+b*(r-u)/2,A=-b*(t-f)/2+w*(r-u)/2;if(0===x&&0===A)return[];c=Math.abs(c),l=Math.abs(l);var k=Math.pow(x,2)/Math.pow(c,2)+Math.pow(A,2)/Math.pow(l,2);k>1&&(c*=Math.sqrt(k),l*=Math.sqrt(k));var _=function(e,t,r,n,a,o,f,u,c,l,h,p){var d=Math.pow(a,2),m=Math.pow(o,2),g=Math.pow(h,2),y=Math.pow(p,2),v=d*m-d*y-m*g;v<0&&(v=0),v/=d*y+m*g;var b=(v=Math.sqrt(v)*(f===u?-1:1))*a/o*p,w=v*-o/a*h,x=l*b-c*w+(e+r)/2,A=c*b+l*w+(t+n)/2,k=(h-b)/a,_=(p-w)/o,M=(-h-b)/a,E=(-p-w)/o,S=s(1,0,k,_),T=s(k,_,M,E);return 0===u&&T>0&&(T-=i),1===u&&T<0&&(T+=i),[x,A,S,T]}(t,r,f,u,c,l,m,y,b,w,x,A),M=n(_,4),E=M[0],S=M[1],T=M[2],O=M[3],j=Math.abs(O)/(i/4);Math.abs(1-j)<1e-7&&(j=1);var C=Math.max(Math.ceil(j),1);O/=C;for(var D=0;D0&&(r.push(l),l=[]);else{if("C"!==e[0])throw new Error("illegal type in SVG: "+e[0]);!function(e,t,r,i){n(r,s(f,i[1],i[2]),s(u,i[3],i[4]),s(c,i[5],i[6]),t,e)}(l,t,h,e),s(h,e[5],e[6])}}),l.length>0&&r.push(l),r}},{"abs-svg-path":1,"adaptive-bezier-curve":3,"normalize-svg-path":45,"vec2-copy":46}],45:[function(e,t,r){var n=Math.PI,i=u(120);function a(e,t,r,n){return["C",e,t,r,n,r,n]}function o(e,t,r,n,i,a){return["C",e/3+2/3*r,t/3+2/3*n,i/3+2/3*r,a/3+2/3*n,i,a]}function s(e,t,r,a,o,u,c,l,h,p){if(p)k=p[0],_=p[1],x=p[2],A=p[3];else{var d=f(e,t,-o);t=d.y;var m=((e=d.x)-(l=(d=f(l,h,-o)).x))/2,g=(t-(h=d.y))/2,y=m*m/(r*r)+g*g/(a*a);y>1&&(r*=y=Math.sqrt(y),a*=y);var v=r*r,b=a*a,w=(u==c?-1:1)*Math.sqrt(Math.abs((v*b-v*g*g-b*m*m)/(v*g*g+b*m*m)));Infinity==w&&(w=1);var x=w*r*g/a+(e+l)/2,A=w*-a*m/r+(t+h)/2,k=Math.asin(((t-A)/a).toFixed(9)),_=Math.asin(((h-A)/a).toFixed(9));(k=e_&&(k-=2*n),!c&&_>k&&(_-=2*n)}if(Math.abs(_-k)>i){var M=_,E=l,S=h;_=k+i*(c&&_>k?1:-1);var T=s(l=x+r*Math.cos(_),h=A+a*Math.sin(_),r,a,o,0,c,E,S,[_,M,x,A])}var O=Math.tan((_-k)/4),j=4/3*r*O,C=4/3*a*O,D=[2*e-(e+j*Math.sin(k)),2*t-(t-C*Math.cos(k)),l+j*Math.sin(_),h-C*Math.cos(_),l,h];if(p)return D;T&&(D=D.concat(T));for(var P=0;P7&&(r.push(y.splice(0,7)),y.unshift("C"));break;case"S":var b=p,w=d;"C"!=t&&"S"!=t||(b+=b-n,w+=w-i),y=["C",b,w,y[1],y[2],y[3],y[4]];break;case"T":"Q"==t||"T"==t?(l=2*p-l,h=2*d-h):(l=p,h=d),y=o(p,d,l,h,y[1],y[2]);break;case"Q":l=y[1],h=y[2],y=o(p,d,y[1],y[2],y[3],y[4]);break;case"L":y=a(p,d,y[1],y[2]);break;case"H":y=a(p,d,y[1],d);break;case"V":y=a(p,d,p,y[1]);break;case"Z":y=a(p,d,f,c)}t=v,p=y[y.length-2],d=y[y.length-1],y.length>4?(n=y[y.length-4],i=y[y.length-3]):(n=p,i=d),r.push(y)}return r}},{}],46:[function(e,t,r){t.exports=function(e,t){return e[0]=t[0],e[1]=t[1],e}},{}],47:[function(e,t,r){const n=e("canvas-sketch"),{random:i,math:a}=e("canvas-sketch-util");n(({width:e,height:t})=>{const r=[];for(let n=0;n<40;n++){const n=i.range(0,e),a=i.range(0,t);r.push(new s(n,a))}return({context:e,width:t,height:n})=>{e.fillStyle="white",e.fillRect(0,0,t,n);for(let t=0;t200||(e.lineWidth=a.mapRange(o,0,200,12,1),e.beginPath(),e.moveTo(n.pos.x,n.pos.y),e.lineTo(t.pos.x,t.pos.y),e.stroke())}}r.forEach(r=>{r.update(),r.draw(e),r.warp(t,n)})}},{dimensions:[1080,1080],animate:!0});class o{constructor(e,t){this.x=e,this.y=t}getDistance(e){const t=this.x-e.x,r=this.y-e.y;return Math.sqrt(t*t+r*r)}}class s{constructor(e,t){this.pos=new o(e,t),this.vel=new o(i.range(-1,4),i.range(-1,4)),this.radius=i.range(4,16)}update(){this.pos.x+=this.vel.x,this.pos.y+=this.vel.y}draw(e){e.save(),e.translate(this.pos.x,this.pos.y),e.lineWidth=4,e.beginPath(),e.arc(0,0,this.radius,0,2*Math.PI),e.fill(),e.stroke(),e.restore()}bounce(e,t){(this.pos.x<=0||this.pos.x>=e)&&(this.vel.x*=-1),(this.pos.y<=0||this.pos.y>=t)&&(this.vel.y*=-1)}warp(e,t){this.pos.x>e&&(this.pos.x=0),this.pos.x<0&&(this.pos.x=e),this.pos.y>t&&(this.pos.y=0),this.pos.y<0&&(this.pos.y=t)}}},{"canvas-sketch":26,"canvas-sketch-util":10}],48:[function(e,t,r){"use strict";r.byteLength=function(e){var t=u(e),r=t[1];return 3*(t[0]+r)/4-r},r.toByteArray=function(e){var t,r,n=u(e),o=n[0],s=n[1],f=new a(function(e,t,r){return 3*(t+r)/4-r}(0,o,s)),c=0,l=s>0?o-4:o;for(r=0;r>16&255,f[c++]=t>>8&255,f[c++]=255&t;2===s&&(t=i[e.charCodeAt(r)]<<2|i[e.charCodeAt(r+1)]>>4,f[c++]=255&t);1===s&&(t=i[e.charCodeAt(r)]<<10|i[e.charCodeAt(r+1)]<<4|i[e.charCodeAt(r+2)]>>2,f[c++]=t>>8&255,f[c++]=255&t);return f},r.fromByteArray=function(e){for(var t,r=e.length,i=r%3,a=[],o=0,s=r-i;os?s:o+16383));1===i?a.push(n[(t=e[r-1])>>2]+n[t<<4&63]+"=="):2===i&&a.push(n[(t=(e[r-2]<<8)+e[r-1])>>10]+n[t>>4&63]+n[t<<2&63]+"=");return a.join("")};for(var n=[],i=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,f=o.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function c(e,t,r){for(var i,a=[],o=t;o>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return a.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},{}],49:[function(e,t,r){(function(t){(function(){"use strict";var t=e("base64-js"),n=e("ieee754");r.Buffer=o,r.SlowBuffer=function(e){+e!=e&&(e=0);return o.alloc(+e)},r.INSPECT_MAX_BYTES=50;var i=2147483647;function a(e){if(e>i)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return t.__proto__=o.prototype,t}function o(e,t,r){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,r)}function s(e,t,r){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!o.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var r=0|h(e,t),n=a(r),i=n.write(e,t);i!==r&&(n=n.slice(0,i));return n}(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(L(e,ArrayBuffer)||e&&L(e.buffer,ArrayBuffer))return function(e,t,r){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(o.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||L(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 r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return B(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return I(e).length;default:if(i)return n?-1:B(e).length;t=(""+t).toLowerCase(),i=!0}}function p(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function d(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),U(r=+r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=o.from(t,n)),o.isBuffer(t))return 0===t.length?-1:m(e,t,r,n,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):m(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function m(e,t,r,n,i){var a,o=1,s=e.length,f=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;o=2,s/=2,f/=2,r/=2}function u(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(i){var c=-1;for(a=r;as&&(r=s-f),a=r;a>=0;a--){for(var l=!0,h=0;hi&&(n=i):n=i;var a=t.length;n>a/2&&(n=a/2);for(var o=0;o>8,i.push(r%256),i.push(n);return i}(t,e.length-r),e,r,n)}function A(e,r,n){return t.fromByteArray(0===r&&n===e.length?e:e.slice(r,n))}function k(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:u>223?3:u>191?2:1;if(i+l<=r)switch(l){case 1:u<128&&(c=u);break;case 2:128==(192&(a=e[i+1]))&&(f=(31&u)<<6|63&a)>127&&(c=f);break;case 3:o=e[i+2],128==(192&(a=e[i+1]))&&128==(192&o)&&(f=(15&u)<<12|(63&a)<<6|63&o)>2047&&(f<55296||f>57343)&&(c=f);break;case 4:o=e[i+2],s=e[i+3],128==(192&(a=e[i+1]))&&128==(192&o)&&128==(192&s)&&(f=(15&u)<<18|(63&a)<<12|(63&o)<<6|63&s)>65535&&f<1114112&&(c=f)}null===c?(c=65533,l=1):c>65535&&(n.push((c-=65536)>>>10&1023|55296),c=56320|1023&c),n.push(c),i+=l}return function(e){var t=e.length;if(t<=_)return String.fromCharCode.apply(String,e);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return S(this,t,r);case"utf8":case"utf-8":return k(this,t,r);case"ascii":return M(this,t,r);case"latin1":case"binary":return E(this,t,r);case"base64":return A(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}.apply(this,arguments)},o.prototype.equals=function(e){if(!o.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===o.compare(this,e)},o.prototype.inspect=function(){var e="",t=r.INSPECT_MAX_BYTES;return e=this.toString("hex",0,t).replace(/(.{2})/g,"$1 ").trim(),this.length>t&&(e+=" ... "),""},o.prototype.compare=function(e,t,r,n,i){if(L(e,Uint8Array)&&(e=o.from(e,e.offset,e.byteLength)),!o.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===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var a=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(t>>>=0),f=Math.min(a,s),u=this.slice(n,i),c=e.slice(t,r),l=0;l>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var a=!1;;)switch(n){case"hex":return g(this,e,t,r);case"utf8":case"utf-8":return y(this,e,t,r);case"ascii":return v(this,e,t,r);case"latin1":case"binary":return b(this,e,t,r);case"base64":return w(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,r);default:if(a)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),a=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var _=4096;function M(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;in)&&(r=n);for(var i="",a=t;ar)throw new RangeError("Trying to access beyond buffer length")}function j(e,t,r,n,i,a){if(!o.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 C(e,t,r,n,i,a){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function D(e,t,r,i,a){return t=+t,r>>>=0,a||C(e,0,r,4),n.write(e,t,r,i,23,4),r+4}function P(e,t,r,i,a){return t=+t,r>>>=0,a||C(e,0,r,8),n.write(e,t,r,i,52,8),r+8}o.prototype.slice=function(e,t){var r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||O(e,t,this.length);for(var n=this[e],i=1,a=0;++a>>=0,t>>>=0,r||O(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},o.prototype.readUInt8=function(e,t){return e>>>=0,t||O(e,1,this.length),this[e]},o.prototype.readUInt16LE=function(e,t){return e>>>=0,t||O(e,2,this.length),this[e]|this[e+1]<<8},o.prototype.readUInt16BE=function(e,t){return e>>>=0,t||O(e,2,this.length),this[e]<<8|this[e+1]},o.prototype.readUInt32LE=function(e,t){return e>>>=0,t||O(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},o.prototype.readUInt32BE=function(e,t){return e>>>=0,t||O(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},o.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||O(e,t,this.length);for(var n=this[e],i=1,a=0;++a=(i*=128)&&(n-=Math.pow(2,8*t)),n},o.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||O(e,t,this.length);for(var n=t,i=1,a=this[e+--n];n>0&&(i*=256);)a+=this[e+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*t)),a},o.prototype.readInt8=function(e,t){return e>>>=0,t||O(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},o.prototype.readInt16LE=function(e,t){e>>>=0,t||O(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt16BE=function(e,t){e>>>=0,t||O(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt32LE=function(e,t){return e>>>=0,t||O(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},o.prototype.readInt32BE=function(e,t){return e>>>=0,t||O(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},o.prototype.readFloatLE=function(e,t){return e>>>=0,t||O(e,4,this.length),n.read(this,e,!0,23,4)},o.prototype.readFloatBE=function(e,t){return e>>>=0,t||O(e,4,this.length),n.read(this,e,!1,23,4)},o.prototype.readDoubleLE=function(e,t){return e>>>=0,t||O(e,8,this.length),n.read(this,e,!0,52,8)},o.prototype.readDoubleBE=function(e,t){return e>>>=0,t||O(e,8,this.length),n.read(this,e,!1,52,8)},o.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t>>>=0,r>>>=0,n)||j(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[t]=255&e;++a>>=0,r>>>=0,n)||j(this,e,t,r,Math.pow(2,8*r)-1,0);var i=r-1,a=1;for(this[t+i]=255&e;--i>=0&&(a*=256);)this[t+i]=e/a&255;return t+r},o.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,1,255,0),this[t]=255&e,t+1},o.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},o.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},o.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||j(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},o.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||j(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},o.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);j(this,e,t,r,i-1,-i)}var a=0,o=1,s=0;for(this[t]=255&e;++a>0)-s&255;return t+r},o.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);j(this,e,t,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[t+a]=255&e;--a>=0&&(o*=256);)e<0&&0===s&&0!==this[t+a+1]&&(s=1),this[t+a]=(e/o>>0)-s&255;return t+r},o.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},o.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},o.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||j(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},o.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||j(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},o.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||j(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},o.prototype.writeFloatLE=function(e,t,r){return D(this,e,t,!0,r)},o.prototype.writeFloatBE=function(e,t,r){return D(this,e,t,!1,r)},o.prototype.writeDoubleLE=function(e,t,r){return P(this,e,t,!0,r)},o.prototype.writeDoubleBE=function(e,t,r){return P(this,e,t,!1,r)},o.prototype.copy=function(e,t,r,n){if(!o.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--a)e[a+t]=this[a+r];else Uint8Array.prototype.set.call(e,this.subarray(r,n),t);return i},o.prototype.fill=function(e,t,r,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!o.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===e.length){var i=e.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(e=i)}}else"number"==typeof e&&(e&=255);if(t<0||this.length>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(a=t;a55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;a.push(r)}else if(r<2048){if((t-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function I(e){return t.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(F,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function z(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function L(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function U(e){return e!=e}}).call(this)}).call(this,e("buffer").Buffer)},{"base64-js":48,buffer:49,ieee754:50}],50:[function(e,t,r){r.read=function(e,t,r,n,i){var a,o,s=8*i-n-1,f=(1<>1,c=-7,l=r?i-1:0,h=r?-1:1,p=e[t+l];for(l+=h,a=p&(1<<-c)-1,p>>=-c,c+=s;c>0;a=256*a+e[t+l],l+=h,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=n;c>0;o=256*o+e[t+l],l+=h,c-=8);if(0===a)a=1-u;else{if(a===f)return o?NaN:Infinity*(p?-1:1);o+=Math.pow(2,n),a-=u}return(p?-1:1)*o*Math.pow(2,a-n)},r.write=function(e,t,r,n,i,a){var o,s,f,u=8*a-i-1,c=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:a-1,d=n?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,o=c):(o=Math.floor(Math.log(t)/Math.LN2),t*(f=Math.pow(2,-o))<1&&(o--,f*=2),(t+=o+l>=1?h/f:h*Math.pow(2,1-l))*f>=2&&(o++,f/=2),o+l>=c?(s=0,o=c):o+l>=1?(s=(t*f-1)*Math.pow(2,i),o+=l):(s=t*Math.pow(2,l-1)*Math.pow(2,i),o=0));i>=8;e[r+p]=255&s,p+=d,s/=256,i-=8);for(o=o<0;e[r+p]=255&o,p+=d,o/=256,u-=8);e[r+p-d]|=128*m}},{}],51:[function(e,t,r){(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:{})},{}]},{},[47,51]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtY2xpL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYWJzLXN2Zy1wYXRoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FkYXB0aXZlLWJlemllci1jdXJ2ZS9mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9hZGFwdGl2ZS1iZXppZXItY3VydmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWxtb3N0LWVxdWFsL2FsbW9zdF9lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9hbi1hcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hcnJheS1hbG1vc3QtZXF1YWwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYXJyYXktYWxtb3N0LWVxdWFsL25vZGVfbW9kdWxlcy9hbG1vc3QtZXF1YWwvYWxtb3N0X2VxdWFsLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9jb2xvci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvZ2VvbWV0cnkuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvY2xpcC9jbGlwLWxpbmUtdG8tY2lyY2xlLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvY2xpcC9jbGlwLXNlZ21lbnQtdG8tY2lyY2xlLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvY3NzLWNvbG9yLW5hbWVzLmpzb24iLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9jc3MtY29sb3IuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9oZXgtdG8tcmdiYS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL2hzbC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL29wdGltaXplLXBlbnBsb3QtcGF0aHMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9yZWxhdGl2ZS1sdW1pbmFuY2UuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi9yZ2JhLXRvLWhleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL3ZlYzIuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi93cmFwLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9tYXRoLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9wZW5wbG90LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9yYW5kb20uanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL3NoYWRlci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9yaWdodC1ub3cvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2lzLXByb21pc2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9pcy1kb20vaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi91dGlsLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvcmVwZWF0LXN0cmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2tleXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2xpYi9pc19hcmd1bWVudHMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGF0ZWZvcm1hdC9saWIvZGF0ZWZvcm1hdC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL3BhZC1sZWZ0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvc2F2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2FjY2Vzc2liaWxpdHkuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9wYXBlci1zaXplcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZmluZWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9jb252ZXJ0LWxlbmd0aC9jb252ZXJ0LWxlbmd0aC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2Rpc3RhbmNlcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUvcmVzaXplQ2FudmFzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZ2V0LWNhbnZhcy1jb250ZXh0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY29yZS9jcmVhdGVDYW52YXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL1NrZXRjaE1hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL2tleWJvYXJkU2hvcnRjdXRzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY2FudmFzLXNrZXRjaC5qcyIsIm5vZGVfbW9kdWxlcy9jbG9uZS9jbG9uZS5qcyIsIm5vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0L2NvbnZlcnNpb25zLmpzIiwibm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29udmVydC1sZW5ndGgvY29udmVydC1sZW5ndGguanMiLCJub2RlX21vZHVsZXMvZDMtcGF0aC9kaXN0L2QzLXBhdGguanMiLCJub2RlX21vZHVsZXMvZGVmaW5lZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mbG9hdC1oc2wycmdiL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Zsb2F0LXJnYjJoc2wvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbGluZWNsaXAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbm9ybWFsaXplLXN2Zy1wYXRoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlLWNvbG9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlLXN2Zy1wYXRoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3ByaW1pdGl2ZS1xdWFkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlZ2wvZGlzdC9yZWdsLmpzIiwibm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZXgtbm9pc2Uvc2ltcGxleC1ub2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9zdmctYXJjLXRvLWN1YmljLWJlemllci9janMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3ZnLXBhdGgtY29udG91cnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3ZnLXBhdGgtY29udG91cnMvbm9kZV9tb2R1bGVzL25vcm1hbGl6ZS1zdmctcGF0aC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy92ZWMyLWNvcHkvaW5kZXguanMiLCJza2V0Y2gtMDMudHMiLCIuLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvbGliL25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLWNsaS9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2xpYi9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC1jbGkvbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtY2xpL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwiY2FudmFzLXNrZXRjaC1jbGkvaW5qZWN0ZWQvc3RvcmFnZS1rZXkuanMiXSwibmFtZXMiOlsiciIsImUiLCJuIiwidCIsIm8iLCJpIiwiZiIsImMiLCJyZXF1aXJlIiwidSIsImEiLCJFcnJvciIsImNvZGUiLCJwIiwiZXhwb3J0cyIsImNhbGwiLCJsZW5ndGgiLCIxIiwibW9kdWxlIiwicGF0aCIsInN0YXJ0WCIsInN0YXJ0WSIsIngiLCJ5IiwibWFwIiwic2VnIiwidHlwZSIsInNsaWNlIiwiY29tbWFuZCIsInRvVXBwZXJDYXNlIiwiY2xvbmUiLCJwb2ludCIsInZlYzIiLCJvcHQiLCJSRUNVUlNJT05fTElNSVQiLCJyZWN1cnNpb24iLCJGTFRfRVBTSUxPTiIsImVwc2lsb24iLCJQQVRIX0RJU1RBTkNFX0VQU0lMT04iLCJwYXRoRXBzaWxvbiIsImN1cnZlX2FuZ2xlX3RvbGVyYW5jZV9lcHNpbG9uIiwiYW5nbGVFcHNpbG9uIiwibV9hbmdsZV90b2xlcmFuY2UiLCJhbmdsZVRvbGVyYW5jZSIsIm1fY3VzcF9saW1pdCIsImN1c3BMaW1pdCIsInN0YXJ0IiwiYzEiLCJjMiIsImVuZCIsInNjYWxlIiwicG9pbnRzIiwiZGlzdGFuY2VUb2xlcmFuY2UiLCJwdXNoIiwicmVjdXJzaXZlIiwieDEiLCJ5MSIsIngyIiwieTIiLCJ4MyIsInkzIiwieDQiLCJ5NCIsImxldmVsIiwicGkiLCJNYXRoIiwiUEkiLCJ4MTIiLCJ5MTIiLCJ4MjMiLCJ5MjMiLCJ4MzQiLCJ5MzQiLCJ4MTIzIiwieTEyMyIsIngyMzQiLCJ5MjM0IiwieDEyMzQiLCJ5MTIzNCIsImRhMSIsImRhMiIsImR4IiwiZHkiLCJkMiIsImFicyIsImQzIiwiYTIzIiwiYXRhbjIiLCJiZWdpbiIsIm1pbiIsImFsbW9zdEVxdWFsIiwiYiIsImFic29sdXRlRXJyb3IiLCJyZWxhdGl2ZUVycm9yIiwiZCIsIkRCTF9FUFNJTE9OIiwic3RyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJhcnIiLCJCWVRFU19QRVJfRUxFTUVOVCIsImJ1ZmZlciIsIkFycmF5IiwiaXNBcnJheSIsImFsbW9zdCIsImFic29sdXRlVG9sZXJhbmNlIiwicmVsYXRpdmVUb2xlcmFuY2UiLCJldmVyeSIsImEwIiwiYjAiLCJjc3NDb2xvciIsIm5hbWVzIiwicmdiTHVtaW5hbmNlIiwiSFNMVXRpbCIsImhleFRvUkdCQSIsIlJHQkFUb0hleCIsInBhcnNlIiwic3R5bGUiLCJyZWxhdGl2ZUx1bWluYW5jZSIsImNvbG9yIiwicmVzdWx0IiwicmdiIiwiY29udHJhc3RSYXRpbyIsImNvbG9yQSIsImNvbG9yQiIsIm1heCIsIm9mZnNldEhTTCIsImgiLCJzIiwibCIsImhzbGEiLCJibGVuZCIsImJhY2tncm91bmQiLCJmb3JlZ3JvdW5kIiwib3BhY2l0eSIsImJnIiwiZmciLCJjMCIsInJnYmEiLCJhbHBoYSIsImlzRmluaXRlIiwiUkdCQVRvSFNMQSIsIkhTTEFUb1JHQkEiLCJsaW5lY2xpcCIsImFycmF5QWxtb3N0RXF1YWwiLCJzcXVhcmVkRGlzdGFuY2UiLCJhcmVQb2ludHNDb2xsaW5lYXIiLCJwb2ludDAiLCJwb2ludDEiLCJwb2ludDIiLCJ4MCIsInkwIiwicmVtb3ZlRHVwbGljYXRlUG9pbnRzIiwibGFzdFBvaW50IiwibmV3UGF0aCIsImN1clBvaW50IiwicmVtb3ZlQ29sbGluZWFyUG9pbnRzIiwicmVtYWluaW5nUG9pbnRzIiwicDAiLCJwMSIsInAyIiwiY29sbGluZWFyIiwic3BsaWNlIiwic2hpZnQiLCJjbGlwU2VnbWVudFRvQ2lyY2xlIiwiY2xpcExpbmVUb0NpcmNsZSIsImNsaXBQb2x5bGluZXNUb0JveCIsInBvbHlsaW5lcyIsImJib3giLCJib3JkZXIiLCJjbG9zZUxpbmVzIiwiQm9vbGVhbiIsImxpbmUiLCJwb2x5Z29uIiwiZmlsdGVyIiwibGluZXMiLCJwb2x5bGluZSIsInJlZHVjZSIsImNvbmNhdCIsImNyZWF0ZUhhdGNoTGluZXMiLCJib3VuZHMiLCJhbmdsZSIsInNwYWNpbmciLCJvdXQiLCJ4bWluIiwieW1pbiIsInhtYXgiLCJ5bWF4IiwidyIsInNxcnQiLCJyb3RBbmdsZSIsImNhIiwiY29zIiwic2EiLCJzaW4iLCJjeCIsImN5IiwiZ2V0Qm91bmRzIiwibG8iLCJoaSIsImoiLCJyYW5kb20iLCJtYXRoIiwicGVucGxvdCIsImdlb21ldHJ5Iiwic2hhZGVyIiwic3FyIiwiY2lyY2xlIiwiY2lyY2xlUmFkaXVzIiwiaGl0cyIsImRlbHRhIiwiZGV0Iiwic3FydERldCIsInBvaW50SW5DaXJjbGUiLCJweCIsInB5IiwicmFkaXVzIiwiZGlzdGFuY2UiLCJwcm9qZWN0UG9pbnQiLCJzcmN4Iiwic3JjeSIsImRlc3R4IiwiZGVzdHkiLCJkaXN0IiwiY2xvc2VzdFBvaW50IiwicDFJbkNpcmNsZSIsInAySW5DaXJjbGUiLCJ2eCIsInZ5IiwicmF0aW8iLCJjbG9zZXN0UG9pbnRPbkxpbmVGcm9tUG9pbnQiLCJoaXRBIiwiaGl0QiIsImNsb3Nlc3RQb2ludE9uU2VnbWVudEZyb21Qb2ludCIsImludGVyc2VjdCIsImFsaWNlYmx1ZSIsImFudGlxdWV3aGl0ZSIsImFxdWEiLCJhcXVhbWFyaW5lIiwiYXp1cmUiLCJiZWlnZSIsImJpc3F1ZSIsImJsYWNrIiwiYmxhbmNoZWRhbG1vbmQiLCJibHVlIiwiYmx1ZXZpb2xldCIsImJyb3duIiwiYnVybHl3b29kIiwiY2FkZXRibHVlIiwiY2hhcnRyZXVzZSIsImNob2NvbGF0ZSIsImNvcmFsIiwiY29ybmZsb3dlcmJsdWUiLCJjb3Juc2lsayIsImNyaW1zb24iLCJjeWFuIiwiZGFya2JsdWUiLCJkYXJrY3lhbiIsImRhcmtnb2xkZW5yb2QiLCJkYXJrZ3JheSIsImRhcmtncmVlbiIsImRhcmtncmV5IiwiZGFya2toYWtpIiwiZGFya21hZ2VudGEiLCJkYXJrb2xpdmVncmVlbiIsImRhcmtvcmFuZ2UiLCJkYXJrb3JjaGlkIiwiZGFya3JlZCIsImRhcmtzYWxtb24iLCJkYXJrc2VhZ3JlZW4iLCJkYXJrc2xhdGVibHVlIiwiZGFya3NsYXRlZ3JheSIsImRhcmtzbGF0ZWdyZXkiLCJkYXJrdHVycXVvaXNlIiwiZGFya3Zpb2xldCIsImRlZXBwaW5rIiwiZGVlcHNreWJsdWUiLCJkaW1ncmF5IiwiZGltZ3JleSIsImRvZGdlcmJsdWUiLCJmaXJlYnJpY2siLCJmbG9yYWx3aGl0ZSIsImZvcmVzdGdyZWVuIiwiZnVjaHNpYSIsImdhaW5zYm9ybyIsImdob3N0d2hpdGUiLCJnb2xkIiwiZ29sZGVucm9kIiwiZ3JheSIsImdyZWVuIiwiZ3JlZW55ZWxsb3ciLCJncmV5IiwiaG9uZXlkZXciLCJob3RwaW5rIiwiaW5kaWFucmVkIiwiaW5kaWdvIiwiaXZvcnkiLCJraGFraSIsImxhdmVuZGVyIiwibGF2ZW5kZXJibHVzaCIsImxhd25ncmVlbiIsImxlbW9uY2hpZmZvbiIsImxpZ2h0Ymx1ZSIsImxpZ2h0Y29yYWwiLCJsaWdodGN5YW4iLCJsaWdodGdvbGRlbnJvZHllbGxvdyIsImxpZ2h0Z3JheSIsImxpZ2h0Z3JlZW4iLCJsaWdodGdyZXkiLCJsaWdodHBpbmsiLCJsaWdodHNhbG1vbiIsImxpZ2h0c2VhZ3JlZW4iLCJsaWdodHNreWJsdWUiLCJsaWdodHNsYXRlZ3JheSIsImxpZ2h0c2xhdGVncmV5IiwibGlnaHRzdGVlbGJsdWUiLCJsaWdodHllbGxvdyIsImxpbWUiLCJsaW1lZ3JlZW4iLCJsaW5lbiIsIm1hZ2VudGEiLCJtYXJvb24iLCJtZWRpdW1hcXVhbWFyaW5lIiwibWVkaXVtYmx1ZSIsIm1lZGl1bW9yY2hpZCIsIm1lZGl1bXB1cnBsZSIsIm1lZGl1bXNlYWdyZWVuIiwibWVkaXVtc2xhdGVibHVlIiwibWVkaXVtc3ByaW5nZ3JlZW4iLCJtZWRpdW10dXJxdW9pc2UiLCJtZWRpdW12aW9sZXRyZWQiLCJtaWRuaWdodGJsdWUiLCJtaW50Y3JlYW0iLCJtaXN0eXJvc2UiLCJtb2NjYXNpbiIsIm5hdmFqb3doaXRlIiwibmF2eSIsIm9sZGxhY2UiLCJvbGl2ZSIsIm9saXZlZHJhYiIsIm9yYW5nZSIsIm9yYW5nZXJlZCIsIm9yY2hpZCIsInBhbGVnb2xkZW5yb2QiLCJwYWxlZ3JlZW4iLCJwYWxldHVycXVvaXNlIiwicGFsZXZpb2xldHJlZCIsInBhcGF5YXdoaXAiLCJwZWFjaHB1ZmYiLCJwZXJ1IiwicGluayIsInBsdW0iLCJwb3dkZXJibHVlIiwicHVycGxlIiwicmViZWNjYXB1cnBsZSIsInJlZCIsInJvc3licm93biIsInJveWFsYmx1ZSIsInNhZGRsZWJyb3duIiwic2FsbW9uIiwic2FuZHlicm93biIsInNlYWdyZWVuIiwic2Vhc2hlbGwiLCJzaWVubmEiLCJzaWx2ZXIiLCJza3libHVlIiwic2xhdGVibHVlIiwic2xhdGVncmF5Iiwic2xhdGVncmV5Iiwic25vdyIsInNwcmluZ2dyZWVuIiwic3RlZWxibHVlIiwidGFuIiwidGVhbCIsInRoaXN0bGUiLCJ0b21hdG8iLCJ0dXJxdW9pc2UiLCJ2aW9sZXQiLCJ3aGVhdCIsIndoaXRlIiwid2hpdGVzbW9rZSIsInllbGxvdyIsInllbGxvd2dyZWVuIiwid3JhcCIsInBhcnNlU3R5bGUiLCJUeXBlRXJyb3IiLCJoZXgiLCJ0b0xvd2VyQ2FzZSIsInRlc3QiLCJtYXRjaCIsImV4ZWMiLCJyZXBsYWNlIiwicGFydHMiLCJzcGxpdCIsInJvdW5kIiwicGFyc2VGbG9hdCIsImhzbCIsInJnYlN0eWxlIiwiZyIsImpvaW4iLCJoc2xTdHlsZSIsInJnYlN0ciIsInBhcnNlSW50IiwicmVwZWF0IiwibnVtIiwiZmxvYXRIU0wyUkdCIiwiZmxvYXRSR0IySFNMIiwiZmxvYXRIU0wiLCJodWUiLCJmbG9hdFJHQiIsIm1lcmdlUGF0aHMiLCJwYXRocyIsInBhdGgxSWR4IiwicGF0aDJJZHgiLCJtaW5JZHgiLCJtYXhJZHgiLCJtZXJnZWRQYXRoIiwic29ydCIsIm5ld1BhdGhzIiwibGFzdFBhdGgiLCJjdXJQdCIsImNsb3Nlc3QiLCJsYXN0UHQiLCJkaXN0YW5jZVRvRmlyc3QiLCJkaXN0YW5jZVRvTGFzdCIsImlkeCIsInJldmVyc2UiLCJjbG9zZXN0UGF0aCIsIm1lcmdlIiwibWVyZ2VUaHJlaHNvbGQiLCJtZXJnZVRocmVoc29sZFNxIiwicmMiLCJnYyIsImJjIiwibG93YyIsImFkanVzdEdhbW1hIiwicG93IiwicnNyZ2IiLCJnc3JnYiIsImJzcmdiIiwiYWxwaGFQYXJhbSIsInB0MSIsInB0MiIsInZhbHVlIiwiZnJvbSIsInRvIiwiY3ljbGUiLCJmbG9vciIsImRlZmluZWQiLCJFUFNJTE9OIiwiTnVtYmVyIiwiY2xhbXAiLCJsZXJwIiwiaW52ZXJzZUxlcnAiLCJ0b0Zpbml0ZSIsImRlZmF1bHRWYWx1ZSIsImV4cGFuZFZlY3RvciIsImRpbXMiLCJzY2FsYXIiLCJsZXJwQXJyYXkiLCJuZXdBcnJheSIsImluaXRpYWxWYWx1ZSIsIm1vZCIsImRhbXAiLCJsYW1iZGEiLCJkdCIsImV4cCIsImZyYWN0Iiwic2lnbiIsImRlZ1RvUmFkIiwicmFkVG9EZWciLCJwaW5nUG9uZyIsImxpbnNwYWNlIiwib3B0cyIsImVuZHBvaW50Iiwib2Zmc2V0IiwiXyIsImxlcnBGcmFtZXMiLCJ2YWx1ZXMiLCJsZW4iLCJ3aG9sZSIsImZyYW1lIiwibmV4dEZyYW1lIiwiY2xhbXAwMSIsInYiLCJzbW9vdGhzdGVwIiwiZGFtcEFycmF5IiwibWFwUmFuZ2UiLCJpbnB1dE1pbiIsImlucHV0TWF4Iiwib3V0cHV0TWluIiwib3V0cHV0TWF4Iiwib3V0VmFsIiwiZXhwYW5kMkQiLCJleHBhbmQzRCIsImV4cGFuZDREIiwiY29udmVydCIsInN2Z1BhdGhDb250b3VycyIsInN2Z1BhdGhQYXJzZSIsInN2Z1BhdGhBYnMiLCJzdmdQYXRoQXJjcyIsIm9wdGltaXplciIsIkRFRkFVTFRfUEVOX1RISUNLTkVTUyIsIkRFRkFVTFRfUEVOX1RISUNLTkVTU19VTklUIiwiREVGQVVMVF9QSVhFTFNfUEVSX0lOQ0giLCJwYXRoc1RvU1ZHUGF0aHMiLCJpbnB1dHMiLCJzdmdQYXRoIiwiY29udmVydFRvU1ZHUGF0aCIsInBhdGhzVG9Qb2x5bGluZXMiLCJjdXJ2ZVJlc29sdXRpb24iLCJ1bml0cyIsImNvbnRvdXJzIiwiZWFjaFBhdGgiLCJmZWF0dXJlIiwiY29tbWFuZHMiLCJmb3JFYWNoIiwic3ViQ29udG91ciIsInBhdGhzVG9TVkciLCJ3aWR0aCIsImhlaWdodCIsImNvbnZlcnRPcHRpb25zIiwidmlld1VuaXRzIiwicm91bmRQaXhlbCIsInByZWNpc2lvbiIsInBpeGVsc1BlckluY2giLCJhc3NpZ24iLCJ1bmRlZmluZWQiLCJvcHRpbWl6ZSIsIm9wdGltaXplT3B0cyIsInJlbW92ZUR1cGxpY2F0ZXMiLCJyZW1vdmVDb2xsaW5lYXIiLCJzaG91bGRTb3J0Iiwic2hvdWxkTWVyZ2UiLCJzaG91bGRSZW1vdmVDb2xsaW5lYXIiLCJtZXJnZVRocmVzaG9sZCIsInN2Z1BhdGhzIiwidmlld1dpZHRoIiwidmlld0hlaWdodCIsImZpbGxTdHlsZSIsInN0cm9rZVN0eWxlIiwibGluZVdpZHRoIiwibGluZUpvaW4iLCJsaW5lQ2FwIiwicGF0aEVsZW1lbnRzIiwidG9BdHRyTGlzdCIsImFyZ3MiLCJhdHRyIiwicmVuZGVyUGF0aHMiLCJjb250ZXh0IiwiY2xlYXJSZWN0IiwiZmlsbFJlY3QiLCJiZWdpblBhdGgiLCJkcmF3U1ZHUGF0aCIsImxpbmVUbyIsInN0cm9rZSIsImNhbnZhcyIsImRhdGEiLCJleHRlbnNpb24iLCJpbnB1dCIsImlzRW1wdHkiLCJpc1BhdGgiLCJpc1BvbHlsaW5lIiwicG9seWxpbmVUb1NWR1BhdGgiLCJjYiIsIm1vdmVUbyIsImJlemllckN1cnZlVG8iLCJjcmVhdGVQYXRoIiwiZm4iLCJxdWFkcmF0aWNDdXJ2ZVRvIiwiYXJndW1lbnRzIiwiX3gxIiwiX3kxIiwiYXBwbHkiLCJwb2x5bGluZXNUb1NWRyIsImNvbnNvbGUiLCJ3YXJuIiwicmVuZGVyUG9seWxpbmVzIiwic2VlZFJhbmRvbSIsIlNpbXBsZXhOb2lzZSIsImNyZWF0ZVJhbmRvbSIsImRlZmF1bHRTZWVkIiwiY3VycmVudFNlZWQiLCJjdXJyZW50UmFuZG9tIiwibm9pc2VHZW5lcmF0b3IiLCJkZWZhdWx0UmFuZG9tIiwiX25leHRHYXVzc2lhbiIsIl9oYXNOZXh0R2F1c3NpYW4iLCJzZXRTZWVkIiwiZ2V0U2VlZCIsImdldFJhbmRvbVNlZWQiLCJTdHJpbmciLCJ2YWx1ZU5vblplcm8iLCJwZXJtdXRlTm9pc2UiLCJjcmVhdGVOb2lzZSIsIm5vaXNlMUQiLCJmcmVxdWVuY3kiLCJhbXBsaXR1ZGUiLCJub2lzZTJEIiwibm9pc2UzRCIsInoiLCJub2lzZTREIiwiYm9vbGVhbiIsImNoYW5jZSIsInJhbmdlIiwicmFuZ2VGbG9vciIsInBpY2siLCJhcnJheSIsInNodWZmbGUiLCJyYW5kIiwidG1wIiwicmV0Iiwib25DaXJjbGUiLCJpbnNpZGVDaXJjbGUiLCJvblNwaGVyZSIsInBoaSIsInRoZXRhIiwiYWNvcyIsImluc2lkZVNwaGVyZSIsImsiLCJjYnJ0IiwicXVhdGVybmlvbiIsInUxIiwidTIiLCJ1MyIsInNxMSIsInNxMiIsInRoZXRhMSIsInRoZXRhMiIsIndlaWdodGVkIiwid2VpZ2h0ZWRTZXQiLCJzZXQiLCJ3ZWlnaHRlZFNldEluZGV4IiwiZ2F1c3NpYW4iLCJtZWFuIiwic3RhbmRhcmREZXJpdmF0aW9uIiwidjEiLCJ2MiIsIm11bHRpcGxpZXIiLCJsb2ciLCJzZWVkIiwid2VpZ2h0Iiwid2VpZ2h0cyIsInRvdGFsV2VpZ2h0IiwiY3JlYXRlUmVnbCIsImNyZWF0ZVF1YWQiLCJwYXJzZUNvbG9yIiwiaXNUZXh0dXJlTGlrZSIsImdsIiwicmVnbE9wdHMiLCJleHRlbnNpb25zIiwib3B0aW9uYWxFeHRlbnNpb25zIiwicHJvZmlsZSIsIm9uRG9uZSIsImRyYXdRdWFkQ29tbWFuZCIsInJlZ2wiLCJxdWFkIiwidGV4dHVyZU1hcCIsIk1hcCIsInVuaWZvcm1zTWFwIiwidW5pZm9ybXMiLCJrZXlzIiwia2V5Iiwic3RhdGUiLCJwcm9wcyIsImJhdGNoSUQiLCJoYXMiLCJwcmV2VGV4IiwiZ2V0IiwidGV4dHVyZSIsInNjaXNzb3IiLCJlbmFibGUiLCJib3giLCJwcm9wIiwiZnJhZyIsInZlcnQiLCJmdW5jIiwic3JjUkdCIiwic3JjQWxwaGEiLCJkc3RSR0IiLCJkc3RBbHBoYSIsImF0dHJpYnV0ZXMiLCJwb3NpdGlvbiIsInBvc2l0aW9ucyIsImVsZW1lbnRzIiwiY2VsbHMiLCJlcnIiLCJoYW5kbGVFcnJvciIsImNsZWFyQ29sb3IiLCJwYXJzZWQiLCJjbGVhckFscGhhIiwiY2xlYXIiLCJyZW5kZXIiLCJwb2xsIiwiZGVwdGgiLCJzdGVuY2lsIiwiZHJhd1F1YWQiLCJmbHVzaCIsInVubG9hZCIsImRlc3Ryb3kiLCJtZXNzYWdlIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaGFzT3duUHJvcGVydHkiLCJwcm9wSXNFbnVtZXJhYmxlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJvYmplY3RBc3NpZ24iLCJ0ZXN0MSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0ZXN0MiIsImZyb21DaGFyQ29kZSIsInRlc3QzIiwibGV0dGVyIiwic2hvdWxkVXNlTmF0aXZlIiwidGFyZ2V0Iiwic291cmNlIiwic3ltYm9scyIsInZhbCIsInRvT2JqZWN0IiwiYnJvd3NlciIsImNvbW1vbmpzR2xvYmFsIiwicGVyZm9ybWFuY2UiLCJub3ciLCJEYXRlIiwiaXNQcm9taXNlXzEiLCJvYmoiLCJ0aGVuIiwiaXNEb20iLCJ3aW5kb3ciLCJOb2RlIiwibm9kZVR5cGUiLCJub2RlTmFtZSIsImdldENsaWVudEFQSSIsImFyZ3VtZW50cyQxIiwiaXNCcm93c2VyIiwiZG9jdW1lbnQiLCJjYWNoZSIsInNoaW0iLCJzdXBwb3J0c0FyZ3VtZW50c0NsYXNzIiwic3VwcG9ydGVkIiwib2JqZWN0IiwidW5zdXBwb3J0ZWQiLCJwU2xpY2UiLCJkZWVwRXF1YWwiLCJhY3R1YWwiLCJleHBlY3RlZCIsImdldFRpbWUiLCJzdHJpY3QiLCJpc1VuZGVmaW5lZE9yTnVsbCIsImlzX2FyZ3VtZW50cyIsImlzQnVmZmVyIiwia2EiLCJrYiIsIm9iakVxdWl2IiwiY29weSIsImdsb2JhbCIsInRva2VuIiwidGltZXpvbmUiLCJ0aW1lem9uZUNsaXAiLCJkYXRlRm9ybWF0IiwiZGF0ZSIsIm1hc2siLCJ1dGMiLCJnbXQiLCJpc05hTiIsIm1hc2tTbGljZSIsIm1hc2tzIiwiRCIsIm0iLCJIIiwiTSIsIkwiLCJnZXRUaW1lem9uZU9mZnNldCIsIlciLCJ0YXJnZXRUaHVyc2RheSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwic2V0RGF0ZSIsImdldERheSIsImZpcnN0VGh1cnNkYXkiLCJkcyIsInNldEhvdXJzIiwiZ2V0SG91cnMiLCJnZXRXZWVrIiwiTiIsImRvdyIsImdldERheU9mV2VlayIsImZsYWdzIiwiZGQiLCJwYWQiLCJkZGQiLCJpMThuIiwiZGF5TmFtZXMiLCJkZGRkIiwibW0iLCJtbW0iLCJtb250aE5hbWVzIiwibW1tbSIsInl5IiwieXl5eSIsImhoIiwiSEgiLCJNTSIsInNzIiwidGltZU5hbWVzIiwidHQiLCJUIiwiVFQiLCJaIiwicG9wIiwiUyIsImRlZmF1bHQiLCJzaG9ydERhdGUiLCJtZWRpdW1EYXRlIiwibG9uZ0RhdGUiLCJmdWxsRGF0ZSIsInNob3J0VGltZSIsIm1lZGl1bVRpbWUiLCJsb25nVGltZSIsImlzb0RhdGUiLCJpc29UaW1lIiwiaXNvRGF0ZVRpbWUiLCJpc29VdGNEYXRlVGltZSIsImV4cGlyZXNIZWFkZXJGb3JtYXQiLCJyZXMiLCJyZXBlYXRTdHJpbmciLCJzdWJzdHIiLCJsaW5rIiwicGFkTGVmdCIsImNoIiwibm9vcCIsImRlZmF1bHRFeHRzIiwicHJlZml4Iiwic3VmZml4Iiwic3VwcG9ydGVkRW5jb2RpbmdzIiwic3RyZWFtIiwiaXNTdGFydCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmlsZW5hbWUiLCJyZXNvbHZlRmlsZW5hbWUiLCJjbGllbnQiLCJvdXRwdXQiLCJldiIsInNhdmVEYXRhVVJMIiwiZGF0YVVSTCIsInNwbGl0SW5kZXgiLCJpbmRleE9mIiwiYmFzZTY0IiwiYnl0ZVN0cmluZyIsImF0b2IiLCJtaW1lTWF0Y2giLCJtaW1lIiwiYWIiLCJBcnJheUJ1ZmZlciIsImlhIiwiVWludDhBcnJheSIsImNoYXJDb2RlQXQiLCJCbG9iIiwiY3JlYXRlQmxvYkZyb21EYXRhVVJMIiwiYmxvYiIsInNhdmVCbG9iIiwiY3JlYXRlRWxlbWVudCIsInZpc2liaWxpdHkiLCJkb3dubG9hZCIsImhyZWYiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJvbmNsaWNrIiwic2V0VGltZW91dCIsInJldm9rZU9iamVjdFVSTCIsInBhcmVudEVsZW1lbnQiLCJyZW1vdmVDaGlsZCIsInJlbW92ZUF0dHJpYnV0ZSIsImNsaWNrIiwiZmlsZSIsInRvdGFsRnJhbWVzIiwibGF5ZXJTdHIiLCJ0b3RhbExheWVycyIsImxheWVyIiwibmFtZSIsInRpbWVTdGFtcCIsImhhc2giLCJjb21tb25UeXBvcyIsImRpbWVuc2lvbiIsImFuaW1hdGVkIiwiYW5pbWF0aW5nIiwidW5pdCIsIlA1IiwicGl4ZWxsYXRlZCIsImxvb3BpbmciLCJwaXhlbFBlckluY2giLCJhbGxLZXlzIiwiY2hlY2tTZXR0aW5ncyIsInNldHRpbmdzIiwiaW5jbHVkZXMiLCJwYXBlclNpemVzIiwiZGljdCIsInByZXNldCIsIml0ZW0iLCJkaW1lbnNpb25zIiwiZGVmaW5lZCQxIiwiY29udmVyc2lvbnMiLCJzeXN0ZW0iLCJmYWN0b3IiLCJjbSIsInB0IiwicGMiLCJpbiIsImZ0IiwiYW5jaG9ycyIsIm1ldHJpYyIsImltcGVyaWFsIiwiY29udmVydExlbmd0aCIsImZyb21Vbml0IiwidG9Vbml0IiwidG9GYWN0b3IiLCJmcm9tRmFjdG9yIiwiaXNUb1BpeGVsIiwiZnJvbVVuaXREYXRhIiwidG9Vbml0RGF0YSIsImFuY2hvciIsImRlY2ltYWxzIiwiY29udmVydERpc3RhbmNlJDEiLCJ1bml0c0Zyb20iLCJ1bml0c1RvIiwicmVzaXplQ2FudmFzIiwic3R5bGVXaWR0aCIsInN0eWxlSGVpZ2h0IiwiY2FudmFzV2lkdGgiLCJjYW52YXNIZWlnaHQiLCJoYXNEaW1lbnNpb25zIiwiY2hlY2tJZkhhc0RpbWVuc2lvbnMiLCJleHBvcnRpbmciLCJzY2FsZVRvRml0Iiwic2NhbGVUb1ZpZXciLCJwaXhlbFJhdGlvIiwiZXhwb3J0UGl4ZWxSYXRpbyIsImJsZWVkIiwiZGV2aWNlUGl4ZWxSYXRpbyIsImJhc2VQaXhlbFJhdGlvIiwibWF4UGl4ZWxSYXRpbyIsInRyaW1XaWR0aCIsInRyaW1IZWlnaHQiLCJyZWYiLCJlbGVtZW50IiwicGFyZW50IiwiaW5uZXJXaWR0aCIsImlubmVySGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0UGFyZW50U2l6ZSIsInBhcmVudFdpZHRoIiwicGFyZW50SGVpZ2h0IiwiZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQiLCJoaWdoZXN0IiwibG93ZXN0Iiwib3JpZW50YXRpb24iLCJsYW5kc2NhcGUiLCJyZWFsV2lkdGgiLCJyZWFsSGVpZ2h0IiwiYXNwZWN0Iiwid2luZG93QXNwZWN0Iiwic2NhbGVUb0ZpdFBhZGRpbmciLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImdldENhbnZhc0NvbnRleHRfMSIsImF0dHJpYnMiLCJnZXRDb250ZXh0IiwiY3JlYXRlQ2FudmFzIiwib3duc0NhbnZhcyIsIm5ld0NhbnZhcyIsImNyZWF0ZUNhbnZhc0VsZW1lbnQiLCJwaXhlbGF0ZWQiLCJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCJtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQiLCJvSW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwid2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwibXNJbWFnZVNtb290aGluZ0VuYWJsZWQiLCJTa2V0Y2hNYW5hZ2VyIiwiX3NldHRpbmdzIiwiX3Byb3BzIiwiX3NrZXRjaCIsIl9yYWYiLCJfcmVjb3JkVGltZW91dCIsIl9sYXN0UmVkcmF3UmVzdWx0IiwiX2lzUDVSZXNpemluZyIsIl9rZXlib2FyZFNob3J0Y3V0cyIsImhhbmRsZXIiLCJlbmFibGVkIiwia2V5Q29kZSIsImFsdEtleSIsIm1ldGFLZXkiLCJjdHJsS2V5IiwidG9nZ2xlUGxheSIsInByZXZlbnREZWZhdWx0IiwiY29tbWl0Iiwic2F2ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwia2V5Ym9hcmRTaG9ydGN1dHMiLCJ0aGlzJDEiLCJob3RrZXlzIiwic2hpZnRLZXkiLCJyZWNvcmRpbmciLCJlbmRSZWNvcmQiLCJydW4iLCJyZWNvcmQiLCJleHBvcnRGcmFtZSIsInBsYXlpbmciLCJwYXVzZSIsInBsYXkiLCJfYW5pbWF0ZUhhbmRsZXIiLCJhbmltYXRlIiwiX3Jlc2l6ZUhhbmRsZXIiLCJyZXNpemUiLCJza2V0Y2giLCJ0aGlzIiwiX2NvbXB1dGVQbGF5aGVhZCIsImN1cnJlbnRUaW1lIiwiZHVyYXRpb24iLCJfY29tcHV0ZUZyYW1lIiwicGxheWhlYWQiLCJ0aW1lIiwiZnBzIiwiX2NvbXB1dGVDdXJyZW50RnJhbWUiLCJfZ2V0U2l6ZVByb3BzIiwidmlld3BvcnRXaWR0aCIsInZpZXdwb3J0SGVpZ2h0IiwiZGlzcG9zZSIsInN0YXJ0ZWQiLCJfc2lnbmFsQmVnaW4iLCJ0aWNrIiwiX2NhbmNlbFRpbWVvdXRzIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJfbGFzdFRpbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJlcnJvciIsInN0b3AiLCJkZWx0YVRpbWUiLCJleHBvcnRPcHRzIiwiX2NyZWF0ZUV4cG9ydE9wdGlvbnMiLCJmcmFtZUludGVydmFsIiwiX3NpZ25hbEVuZCIsImJlZ2luUmVjb3JkIiwiX3dyYXBDb250ZXh0U2NhbGUiLCJjYXRjaCIsInJlc3BvbnNlIiwid2FzUmVjb3JkaW5nIiwic2VxdWVuY2UiLCJlbmNvZGluZyIsImVuY29kaW5nUXVhbGl0eSIsImRhdGVmb3JtYXQiLCJhbGwiLCJwcmVFeHBvcnQiLCJjb21taXRPcHRzIiwiX2RvRXhwb3J0RnJhbWUiLCJkcmF3UmVzdWx0IiwiaGFzRGF0YU9iamVjdCIsInRvRGF0YVVSTCIsImV4cG9ydENhbnZhcyIsImxheWVyTGlzdCIsImN1ck9wdCIsInNhdmVQYXJhbSIsInNhdmVQcm9taXNlIiwic2F2ZUZpbGUiLCJzYXZlUmVzdWx0Iiwic2F2ZWRFdmVudHMiLCJldmVudFdpdGhPdXRwdXQiLCJmaW5kIiwib3V0cHV0TmFtZSIsImlzQ2xpZW50Iiwic29tZSIsImlzU3RyZWFtaW5nIiwib2ZTZXEiLCJwb3N0RXhwb3J0IiwiX3ByZVJlbmRlciIsIl9wb3N0UmVuZGVyIiwicDUiLCJzY2FsZVgiLCJzY2FsZVkiLCJzY2FsZUNvbnRleHQiLCJyZXN0b3JlIiwicmVkcmF3Iiwic3VibWl0RHJhd0NhbGwiLCJ1cGRhdGUiLCJub3RZZXRTdXBwb3J0ZWQiLCJvbGRDYW52YXMiLCJvbGRDb250ZXh0IiwidGltZU9wdHMiLCJ0aW1lUHJvcHMiLCJnZXRUaW1lUHJvcHMiLCJfc2V0dXBHTEtleSIsIl9hcHBlbmRDYW52YXNJZk5lZWRlZCIsImRyYXciLCJvbGRTaXplcyIsIm5ld1Byb3BzIiwicGl4ZWxEZW5zaXR5Iiwic3R5bGVDYW52YXMiLCJuZXdTaXplcyIsImNoYW5nZWQiLCJkZWVwRXF1YWxfMSIsIl9zaXplQ2hhbmdlZCIsImZyYW1lSW50ZXJ2YWxNUyIsImRlbHRhVGltZU1TIiwiaGFzRHVyYXRpb24iLCJpc05ld0ZyYW1lIiwicGxheWJhY2tSYXRlIiwibmV3VGltZSIsInRpbWVTY2FsZSIsImlzRmluaXNoZWQiLCJpc0xvb3BTdGFydCIsImxvb3AiLCJsYXN0RnJhbWUiLCJkaXNwYXRjaCIsIm1vdW50IiwidW5tb3VudCIsImRldGFjaCIsImN0eCIsImJ1ZmZlckRhdGEiLCJoYXNUb3RhbEZyYW1lcyIsInRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uIiwiZHVyYXRpb25Gcm9tVG90YWxGcmFtZXMiLCJJbmZpbml0eSIsInN0YXJ0VGltZSIsInN0YXJ0RnJhbWUiLCJoYXNTdGFydFRpbWUiLCJoYXNTdGFydEZyYW1lIiwic2V0dXAiLCJsb2FkQW5kUnVuIiwiY2FudmFzU2tldGNoIiwibmV3U2V0dGluZ3MiLCJsb2FkIiwiY3JlYXRlU2tldGNoIiwicHJlbG9hZCIsIlA1Q29uc3RydWN0b3IiLCJwNVNrZXRjaCIsImlzR0wiLCJyZW5kZXJlciIsIldFQkdMIiwiUDJEIiwibm9Mb29wIiwic2V0QXR0cmlidXRlcyIsIl9yZW5kZXJlciIsImRyYXdpbmdDb250ZXh0IiwibG9hZGVyIiwiYXR0YWNoIiwiQ0FDSEUiLCJydW50aW1lQ29sbGlzaW9ucyIsImhvdElEIiwiaXNIb3QiLCJob3QiLCJpZCIsImlzSW5qZWN0aW5nIiwicHJldmlvdXNEYXRhIiwiY2FjaGVHZXQiLCJuZXh0Iiwib2xkTWFuYWdlciIsIm1hbmFnZXIiLCJQYXBlclNpemVzIiwiX2luc3RhbmNlb2YiLCJuYXRpdmVNYXAiLCJuYXRpdmVTZXQiLCJuYXRpdmVQcm9taXNlIiwiU2V0IiwiY2lyY3VsYXIiLCJpbmNsdWRlTm9uRW51bWVyYWJsZSIsImFsbFBhcmVudHMiLCJhbGxDaGlsZHJlbiIsInVzZUJ1ZmZlciIsIkJ1ZmZlciIsIl9jbG9uZSIsImNoaWxkIiwicHJvdG8iLCJfX2lzQXJyYXkiLCJfX2lzUmVnRXhwIiwiUmVnRXhwIiwiX19nZXRSZWdFeHBGbGFncyIsImxhc3RJbmRleCIsIl9faXNEYXRlIiwiYWxsb2NVbnNhZmUiLCJjcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsImluZGV4Iiwia2V5Q2hpbGQiLCJ2YWx1ZUNoaWxkIiwiZW50cnlDaGlsZCIsImFkZCIsImF0dHJzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwic3ltYm9sIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJkZWZpbmVQcm9wZXJ0eSIsImFsbFByb3BlcnR5TmFtZXMiLCJwcm9wZXJ0eU5hbWUiLCJfX29ialRvU3RyIiwicmUiLCJpZ25vcmVDYXNlIiwibXVsdGlsaW5lIiwiY2xvbmVQcm90b3R5cGUiLCJyZ2IyaHNsIiwicmdiMmhzdiIsInJnYjJod2IiLCJyZ2IyY215ayIsInJnYjJrZXl3b3JkIiwicmV2ZXJzZUtleXdvcmRzIiwiSlNPTiIsInN0cmluZ2lmeSIsInJnYjJ4eXoiLCJyZ2IybGFiIiwieHl6IiwiaHNsMnJnYiIsInQxIiwidDIiLCJ0MyIsImhzdjJyZ2IiLCJoc3YiLCJxIiwiaHdiMnJnYiIsImh3YiIsIndoIiwiYmwiLCJjbXlrMnJnYiIsImNteWsiLCJ4eXoycmdiIiwieHl6MmxhYiIsImxhYjJ4eXoiLCJsYWIiLCJsYWIybGNoIiwibGFiMnJnYiIsImxjaDJsYWIiLCJsY2giLCJociIsImtleXdvcmQycmdiIiwia2V5d29yZCIsImNzc0tleXdvcmRzIiwicmdiMmxjaCIsImhzbDJoc3YiLCJoc2wyaHdiIiwiaHNsMmNteWsiLCJoc2wya2V5d29yZCIsImhzdjJoc2wiLCJzbCIsImhzdjJod2IiLCJoc3YyY215ayIsImhzdjJrZXl3b3JkIiwiaHdiMmhzbCIsImh3YjJoc3YiLCJod2IyY215ayIsImh3YjJrZXl3b3JkIiwiY215azJoc2wiLCJjbXlrMmhzdiIsImNteWsyaHdiIiwiY215azJrZXl3b3JkIiwia2V5d29yZDJoc2wiLCJrZXl3b3JkMmhzdiIsImtleXdvcmQyaHdiIiwia2V5d29yZDJjbXlrIiwia2V5d29yZDJsYWIiLCJrZXl3b3JkMnh5eiIsInh5ejJsY2giLCJsY2gyeHl6IiwibGNoMnJnYiIsIkNvbnZlcnRlciIsImFyZyIsInBhaXIiLCJjb252cyIsInJvdXRlU3BhY2UiLCJzcGFjZSIsImdldFZhbHVlcyIsInNldFZhbHVlcyIsInZhbHMiLCJmc3BhY2UiLCJmYWN0b3J5IiwidGF1IiwidGF1RXBzaWxvbiIsIlBhdGgiLCJfeDAiLCJfeTAiLCJjb25zdHJ1Y3RvciIsImNsb3NlUGF0aCIsImFyY1RvIiwieDIxIiwieTIxIiwieDAxIiwieTAxIiwibDAxXzIiLCJ4MjAiLCJ5MjAiLCJsMjFfMiIsImwyMF8yIiwibDIxIiwibDAxIiwidDAxIiwidDIxIiwiYXJjIiwiYTEiLCJjY3ciLCJjdyIsImRhIiwicmVjdCIsImRlZmluZSIsImFtZCIsInNlbGYiLCJjb2RlQiIsImxhc3RDb2RlIiwiY29kZUEiLCJiaXRDb2RlIiwicGFydCIsImVkZ2UiLCJwcmV2IiwicHJldkluc2lkZSIsImluc2lkZSIsImJlemllclgiLCJiZXppZXJZIiwicXVhZFgiLCJxdWFkWSIsImN1cnZlcyIsImFyY1RvQ3VydmUiLCJyeCIsInJ5IiwieEF4aXNSb3RhdGlvbiIsImxhcmdlQXJjRmxhZyIsInN3ZWVwRmxhZyIsInF1YWRyYXRpYyIsImNzdHIiLCJjb252Iiwic2l6ZSIsImJhc2UiLCJoc3ZhIiwiY215a2EiLCJzZWdtZW50IiwibnVtYmVycyIsIm51bWJlciIsInBhcnNlVmFsdWVzIiwidW5zaGlmdCIsIm5vcm1hbHMiLCJ1dnMiLCJpc1R5cGVkQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsImV4dGVuZCIsImVuZGwiLCJyYWlzZSIsImNoZWNrIiwicHJlZCIsImVuY29sb24iLCJzdGFuZGFyZFR5cGVFaCIsImNoZWNrT25lT2YiLCJsaXN0IiwiY29uc3RydWN0b3JLZXlzIiwibGVmdFBhZCIsIlNoYWRlckZpbGUiLCJoYXNFcnJvcnMiLCJTaGFkZXJMaW5lIiwiZXJyb3JzIiwiU2hhZGVyRXJyb3IiLCJmaWxlTnVtYmVyIiwibGluZU51bWJlciIsImd1ZXNzQ29tbWFuZCIsInN0YWNrIiwicGF0IiwicGF0MiIsImd1ZXNzQ2FsbFNpdGUiLCJwYXJzZVNvdXJjZSIsImZpbGVzIiwidW5rbm93biIsIjAiLCJsaW5lTnVtYmVySW5mbyIsIm5hbWVJbmZvIiwic2F2ZUNvbW1hbmRSZWYiLCJfY29tbWFuZFJlZiIsImNvbW1hbmRSYWlzZSIsImNhbGxTaXRlIiwiY2hlY2tDb21tYW5kVHlwZSIsIkdMX0NMQU1QX1RPX0VER0UiLCJHTF9ORUFSRVNUIiwiR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCIsIkdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVCIsIkdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiIsIkdMX0xJTkVBUl9NSVBNQVBfTElORUFSIiwiR0xfRkxPQVQiLCJHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80IiwiR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSIsIkdMX1VOU0lHTkVEX1NIT1JUXzVfNl81IiwiR0xfVU5TSUdORURfSU5UXzI0XzhfV0VCR0wiLCJUWVBFX1NJWkUiLCJwaXhlbFNpemUiLCJjaGFubmVscyIsImlzUG93MiIsImNoZWNrJDEiLCJvcHRpb25hbCIsImJsb2NrIiwicGFyYW1ldGVyIiwicGFyYW0iLCJwb3NzaWJpbGl0aWVzIiwiY29tbWFuZFBhcmFtZXRlciIsImNvbW1hbmRUeXBlIiwibm5pIiwib25lT2YiLCJzaGFkZXJFcnJvciIsImdldFNoYWRlclBhcmFtZXRlciIsIkNPTVBJTEVfU1RBVFVTIiwiZXJyTG9nIiwiZ2V0U2hhZGVySW5mb0xvZyIsInR5cGVOYW1lIiwiRlJBR01FTlRfU0hBREVSIiwiZXJyTXNnIiwidHJpbSIsInBhcnNlRXJyb3JMb2ciLCJhbm5vdGF0ZUZpbGVzIiwic3RyaW5ncyIsInN0eWxlcyIsInRva2VuUGF0IiwiY2hyb21lIiwibGlua0Vycm9yIiwicHJvZ3JhbSIsImZyYWdTaGFkZXIiLCJ2ZXJ0U2hhZGVyIiwiZ2V0UHJvZ3JhbVBhcmFtZXRlciIsIkxJTktfU1RBVFVTIiwiZ2V0UHJvZ3JhbUluZm9Mb2ciLCJmcmFnUGFyc2UiLCJoZWFkZXIiLCJzYXZlRHJhd0luZm8iLCJzdHJpbmdTdG9yZSIsImFkZFByb3BzIiwiX2ZyYWdJZCIsInN0YXRpYyIsIl92ZXJ0SWQiLCJ1bmlmb3JtU2V0IiwiX3VuaWZvcm1TZXQiLCJkeW5hbWljIiwiYXR0cmlidXRlU2V0IiwiX2F0dHJpYnV0ZVNldCIsIl9oYXNDb3VudCIsImZyYW1lYnVmZmVyRm9ybWF0IiwiYXR0YWNobWVudCIsInRleEZvcm1hdHMiLCJyYkZvcm1hdHMiLCJfdGV4dHVyZSIsImludGVybmFsZm9ybWF0IiwicmVuZGVyYnVmZmVyIiwiX3JlbmRlcmJ1ZmZlciIsImZvcm1hdCIsInRleHR1cmUyRCIsImluZm8iLCJtaXBEYXRhIiwibGltaXRzIiwibWF4VGV4dHVyZVNpemUiLCJ3cmFwUyIsIndyYXBUIiwibWlwbWFzayIsIm1pbkZpbHRlciIsIm1hZ0ZpbHRlciIsImdlbk1pcG1hcHMiLCJtaXBpbWFnZXMiLCJpbWFnZXMiLCJtdyIsIm1oIiwiaW1nIiwiY29tcHJlc3NlZCIsInJvd1NpemUiLCJjZWlsIiwidW5wYWNrQWxpZ25tZW50IiwiYnl0ZUxlbmd0aCIsInRleHR1cmVDdWJlIiwiZmFjZXMiLCJmYWNlIiwibWlwbWFwcyIsIlZBUklBQkxFX0NPVU5URVIiLCJEWU5fRlVOQyIsIkRZTl9DT05TVEFOVCIsIkRZTl9BUlJBWSIsIkR5bmFtaWNWYXJpYWJsZSIsImVzY2FwZVN0ciIsInRvQWNjZXNzb3JTdHJpbmciLCJzcGxpdFBhcnRzIiwiZmlyc3RDaGFyIiwiY2hhckF0IiwibGFzdENoYXIiLCJzdWJwYXJ0cyIsImlzRHluYW1pYyIsIl9yZWdsVHlwZSIsInVuYm94IiwiYWNjZXNzb3IiLCJyYWYiLCJjYW5jZWwiLCJjbGVhclRpbWVvdXQiLCJjbG9jayIsInBhcnNlRXh0ZW5zaW9ucyIsImdldEVsZW1lbnQiLCJkZXNjIiwicXVlcnlTZWxlY3RvciIsInBhcnNlQXJncyIsImFyZ3NfIiwiY29udGFpbmVyIiwiY29udGV4dEF0dHJpYnV0ZXMiLCJvbkRlc3Ryb3kiLCJkcmF3QXJyYXlzIiwiZHJhd0VsZW1lbnRzIiwiaXNXZWJHTENvbnRleHQiLCJyZXNpemVPYnNlcnZlciIsInJpZ2h0IiwibGVmdCIsImJvdHRvbSIsInRvcCIsIm1hcmdpbiIsInBhZGRpbmciLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJkaXNjb25uZWN0IiwicHJlbXVsdGlwbGllZEFscGhhIiwiY3JlYXRlQ29udGV4dCIsIkdMX0JZVEUkMSIsIkdMX1VOU0lHTkVEX0JZVEUkMiIsIkdMX1NIT1JUJDEiLCJHTF9VTlNJR05FRF9TSE9SVCQxIiwiR0xfSU5UJDEiLCJHTF9VTlNJR05FRF9JTlQkMSIsIkdMX0ZMT0FUJDIiLCJsb2cyIiwiY3JlYXRlUG9vbCIsImJ1ZmZlclBvb2wiLCJhbGxvYyIsInN6IiwibmV4dFBvdzE2IiwiYmluIiwiZnJlZSIsImJ1ZiIsImFsbG9jVHlwZSIsInN1YmFycmF5IiwiZnJlZVR5cGUiLCJwb29sIiwiemVybyIsIndyYXBMaW1pdHMiLCJtYXhBbmlzb3Ryb3BpYyIsImV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIsImdldFBhcmFtZXRlciIsIm1heERyYXdidWZmZXJzIiwibWF4Q29sb3JBdHRhY2htZW50cyIsIndlYmdsX2RyYXdfYnVmZmVycyIsInJlYWRGbG9hdCIsIm9lc190ZXh0dXJlX2Zsb2F0IiwicmVhZEZsb2F0VGV4dHVyZSIsImNyZWF0ZVRleHR1cmUiLCJiaW5kVGV4dHVyZSIsInRleEltYWdlMkQiLCJmYm8iLCJjcmVhdGVGcmFtZWJ1ZmZlciIsImJpbmRGcmFtZWJ1ZmZlciIsImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyIsInZpZXdwb3J0IiwicGl4ZWxzIiwicmVhZFBpeGVscyIsImdldEVycm9yIiwiZGVsZXRlRnJhbWVidWZmZXIiLCJkZWxldGVUZXh0dXJlIiwibnBvdFRleHR1cmVDdWJlIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYXBwVmVyc2lvbiIsImN1YmVUZXh0dXJlIiwiYWN0aXZlVGV4dHVyZSIsImNvbG9yQml0cyIsImRlcHRoQml0cyIsInN0ZW5jaWxCaXRzIiwic3VicGl4ZWxCaXRzIiwiZXh0IiwicG9pbnRTaXplRGltcyIsImxpbmVXaWR0aERpbXMiLCJtYXhWaWV3cG9ydERpbXMiLCJtYXhDb21iaW5lZFRleHR1cmVVbml0cyIsIm1heEN1YmVNYXBTaXplIiwibWF4UmVuZGVyYnVmZmVyU2l6ZSIsIm1heFRleHR1cmVVbml0cyIsIm1heEF0dHJpYnV0ZXMiLCJtYXhWZXJ0ZXhVbmlmb3JtcyIsIm1heFZlcnRleFRleHR1cmVVbml0cyIsIm1heFZhcnlpbmdWZWN0b3JzIiwibWF4RnJhZ21lbnRVbmlmb3JtcyIsImdsc2wiLCJ2ZW5kb3IiLCJ2ZXJzaW9uIiwiaXNOREFycmF5TGlrZSIsInNoYXBlIiwic3RyaWRlIiwiZmxhdHRlblV0aWxzIiwiYXJyYXlfIiwiZmxhdHRlbiIsIm91dF8iLCJueCIsImZsYXR0ZW4xRCIsIm55IiwicHRyIiwicm93IiwiZmxhdHRlbjJEIiwiZmxhdHRlbjNEIiwiZmxhdHRlblJlYyIsIm56IiwicHRyXyIsImNvbCIsImFycmF5VHlwZXMiLCJbb2JqZWN0IEludDhBcnJheV0iLCJbb2JqZWN0IEludDE2QXJyYXldIiwiW29iamVjdCBJbnQzMkFycmF5XSIsIltvYmplY3QgVWludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsIltvYmplY3QgVWludDE2QXJyYXldIiwiW29iamVjdCBVaW50MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLCJbb2JqZWN0IEFycmF5QnVmZmVyXSIsImdsVHlwZXMiLCJpbnQ4IiwiaW50MTYiLCJpbnQzMiIsInVpbnQ4IiwidWludDE2IiwidWludDMyIiwiZmxvYXQiLCJmbG9hdDMyIiwidXNhZ2VUeXBlcyIsImFycmF5RmxhdHRlbiIsImFycmF5U2hhcGUiLCJHTF9TVEFUSUNfRFJBVyIsIkdMX1NUUkVBTV9EUkFXIiwiR0xfVU5TSUdORURfQllURSQzIiwiR0xfRkxPQVQkMyIsIkRUWVBFU19TSVpFUyIsInR5cGVkQXJyYXlDb2RlIiwiY29weUFycmF5IiwiaW5wIiwidHJhbnNwb3NlIiwic2hhcGVYIiwic2hhcGVZIiwic3RyaWRlWCIsInN0cmlkZVkiLCJwcmltVHlwZXMiLCJ0cmlhbmdsZXMiLCJ0cmlhbmdsZSIsImxpbmUgbG9vcCIsImxpbmUgc3RyaXAiLCJ0cmlhbmdsZSBzdHJpcCIsInRyaWFuZ2xlIGZhbiIsIkdMX1BPSU5UUyIsIkdMX0xJTkVTIiwiR0xfVFJJQU5HTEVTIiwiR0xfQllURSQyIiwiR0xfVU5TSUdORURfQllURSQ0IiwiR0xfU0hPUlQkMiIsIkdMX1VOU0lHTkVEX1NIT1JUJDIiLCJHTF9JTlQkMiIsIkdMX1VOU0lHTkVEX0lOVCQyIiwiR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIiLCJHTF9TVFJFQU1fRFJBVyQxIiwiR0xfU1RBVElDX0RSQVckMSIsIkZMT0FUIiwiSU5UIiwiR0xfVU5TSUdORURfU0hPUlQkNCIsImNvbnZlcnRUb0hhbGZGbG9hdCIsInVzaG9ydHMiLCJzZ24iLCJmcmFjIiwiaXNBcnJheUxpa2UiLCJpc1BvdzIkMSIsIkdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTIiwiR0xfVEVYVFVSRV8yRCQxIiwiR0xfVEVYVFVSRV9DVUJFX01BUCQxIiwiR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YJDEiLCJHTF9SR0JBJDEiLCJHTF9BTFBIQSIsIkdMX1JHQiIsIkdMX0xVTUlOQU5DRSIsIkdMX0xVTUlOQU5DRV9BTFBIQSIsIkdMX1JHQkE0IiwiR0xfUkdCNV9BMSIsIkdMX1JHQjU2NSIsIkdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQkMSIsIkdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEkMSIsIkdMX1VOU0lHTkVEX1NIT1JUXzVfNl81JDEiLCJHTF9VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCQxIiwiR0xfREVQVEhfQ09NUE9ORU5UIiwiR0xfREVQVEhfU1RFTkNJTCIsIkdMX1NSR0JfRVhUIiwiR0xfU1JHQl9BTFBIQV9FWFQiLCJHTF9IQUxGX0ZMT0FUX09FUyQxIiwiR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCIsIkdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUIiwiR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQiLCJHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCIsIkdMX0NPTVBSRVNTRURfUkdCX0FUQ19XRUJHTCIsIkdMX0NPTVBSRVNTRURfUkdCQV9BVENfRVhQTElDSVRfQUxQSEFfV0VCR0wiLCJHTF9DT01QUkVTU0VEX1JHQkFfQVRDX0lOVEVSUE9MQVRFRF9BTFBIQV9XRUJHTCIsIkdMX0NPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUciLCJHTF9DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HIiwiR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUciLCJHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRyIsIkdMX0NPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0wiLCJHTF9VTlNJR05FRF9CWVRFJDUiLCJHTF9VTlNJR05FRF9TSE9SVCQzIiwiR0xfVU5TSUdORURfSU5UJDMiLCJHTF9GTE9BVCQ0IiwiR0xfVEVYVFVSRV9XUkFQX1MiLCJHTF9URVhUVVJFX1dSQVBfVCIsIkdMX1JFUEVBVCIsIkdMX0NMQU1QX1RPX0VER0UkMSIsIkdMX01JUlJPUkVEX1JFUEVBVCIsIkdMX1RFWFRVUkVfTUFHX0ZJTFRFUiIsIkdMX1RFWFRVUkVfTUlOX0ZJTFRFUiIsIkdMX05FQVJFU1QkMSIsIkdMX0xJTkVBUiIsIkdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QkMSIsIkdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVCQxIiwiR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSJDEiLCJHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiQxIiwiR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQiLCJHTF9ET05UX0NBUkUiLCJHTF9GQVNURVNUIiwiR0xfTklDRVNUIiwiR0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQiLCJHTF9VTlBBQ0tfQUxJR05NRU5UIiwiR0xfVU5QQUNLX0ZMSVBfWV9XRUJHTCIsIkdMX1VOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCIsIkdMX1VOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiLCJHTF9CUk9XU0VSX0RFRkFVTFRfV0VCR0wiLCJHTF9URVhUVVJFMCQxIiwiTUlQTUFQX0ZJTFRFUlMiLCJDSEFOTkVMU19GT1JNQVQiLCJGT1JNQVRfQ0hBTk5FTFMiLCJvYmplY3ROYW1lIiwiQ0FOVkFTX0NMQVNTIiwiT0ZGU0NSRUVOQ0FOVkFTX0NMQVNTIiwiQ09OVEVYVDJEX0NMQVNTIiwiQklUTUFQX0NMQVNTIiwiSU1BR0VfQ0xBU1MiLCJWSURFT19DTEFTUyIsIlBJWEVMX0NMQVNTRVMiLCJUWVBFX1NJWkVTIiwiRk9STUFUX1NJWkVTX1NQRUNJQUwiLCJpc051bWVyaWNBcnJheSIsImlzUmVjdEFycmF5IiwiY2xhc3NTdHJpbmciLCJpc0NhbnZhc0VsZW1lbnQiLCJpc09mZnNjcmVlbkNhbnZhcyIsImlzUGl4ZWxEYXRhIiwiY2xhc3NOYW1lIiwidHlwZWRBcnJheUNvZGUkMSIsInByZUNvbnZlcnQiLCJpbWFnZSIsInBvc3RDb252ZXJ0IiwiZ2V0VGV4dHVyZVNpemUiLCJpc01pcG1hcCIsImlzQ3ViZSIsInRvdGFsIiwiY3JlYXRlVGV4dHVyZVNldCIsInJlZ2xQb2xsIiwiY29udGV4dFN0YXRlIiwic3RhdHMiLCJjb25maWciLCJtaXBtYXBIaW50IiwiZG9uJ3QgY2FyZSIsImRvbnQgY2FyZSIsIm5pY2UiLCJmYXN0Iiwid3JhcE1vZGVzIiwibWlycm9yIiwibWFnRmlsdGVycyIsIm5lYXJlc3QiLCJsaW5lYXIiLCJtaW5GaWx0ZXJzIiwibWlwbWFwIiwibmVhcmVzdCBtaXBtYXAgbmVhcmVzdCIsImxpbmVhciBtaXBtYXAgbmVhcmVzdCIsIm5lYXJlc3QgbWlwbWFwIGxpbmVhciIsImxpbmVhciBtaXBtYXAgbGluZWFyIiwiY29sb3JTcGFjZSIsIm5vbmUiLCJ0ZXh0dXJlVHlwZXMiLCJyZ2JhNCIsInJnYjU2NSIsInJnYjUgYTEiLCJ0ZXh0dXJlRm9ybWF0cyIsImx1bWluYW5jZSIsImx1bWluYW5jZSBhbHBoYSIsImNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyIsImV4dF9zcmdiIiwic3JnYiIsInNyZ2JhIiwib2VzX3RleHR1cmVfaGFsZl9mbG9hdCIsIndlYmdsX2RlcHRoX3RleHR1cmUiLCJkZXB0aCBzdGVuY2lsIiwid2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiLCJyZ2IgczN0YyBkeHQxIiwicmdiYSBzM3RjIGR4dDEiLCJyZ2JhIHMzdGMgZHh0MyIsInJnYmEgczN0YyBkeHQ1Iiwid2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIsInJnYiBhdGMiLCJyZ2JhIGF0YyBleHBsaWNpdCBhbHBoYSIsInJnYmEgYXRjIGludGVycG9sYXRlZCBhbHBoYSIsIndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIsInJnYiBwdnJ0YyA0YnBwdjEiLCJyZ2IgcHZydGMgMmJwcHYxIiwicmdiYSBwdnJ0YyA0YnBwdjEiLCJyZ2JhIHB2cnRjIDJicHB2MSIsIndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIiwic3VwcG9ydGVkQ29tcHJlc3NlZEZvcm1hdHMiLCJzdXBwb3J0ZWRGb3JtYXRzIiwidGV4dHVyZUZvcm1hdHNJbnZlcnQiLCJ0ZXh0dXJlVHlwZXNJbnZlcnQiLCJtYWdGaWx0ZXJzSW52ZXJ0IiwibWluRmlsdGVyc0ludmVydCIsIndyYXBNb2Rlc0ludmVydCIsImNvbG9yRm9ybWF0cyIsImdsZW51bSIsIlRleEZsYWdzIiwicHJlbXVsdGlwbHlBbHBoYSIsImZsaXBZIiwiY29weUZsYWdzIiwib3RoZXIiLCJwYXJzZUZsYWdzIiwib3B0aW9ucyIsImFsaWdubWVudCIsImhhc0NoYW5uZWxzIiwiaGFzRm9ybWF0IiwiZm9ybWF0U3RyIiwic2V0RmxhZ3MiLCJwaXhlbFN0b3JlaSIsIlRleEltYWdlIiwieE9mZnNldCIsInlPZmZzZXQiLCJuZWVkc0ZyZWUiLCJuZWVkc0NvcHkiLCJwYXJzZUltYWdlIiwidmlld1ciLCJ2aWV3SCIsImNvbnZlcnRlZCIsImNvbnZlcnREYXRhIiwic2hhcGVDIiwic3RyaWRlQyIsInRyYW5zcG9zZURhdGEiLCJpc0JpdG1hcCIsImlzSW1hZ2VFbGVtZW50IiwibmF0dXJhbFdpZHRoIiwibmF0dXJhbEhlaWdodCIsImlzVmlkZW9FbGVtZW50IiwidmlkZW9XaWR0aCIsInZpZGVvSGVpZ2h0IiwiYWxsb2NEYXRhIiwic2V0SW1hZ2UiLCJtaXBsZXZlbCIsImNvbXByZXNzZWRUZXhJbWFnZTJEIiwiY29weVRleEltYWdlMkQiLCJzZXRTdWJJbWFnZSIsInRleFN1YkltYWdlMkQiLCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsImNvcHlUZXhTdWJJbWFnZTJEIiwiaW1hZ2VQb29sIiwiYWxsb2NJbWFnZSIsImZyZWVJbWFnZSIsIk1pcE1hcCIsInBhcnNlTWlwTWFwRnJvbVNoYXBlIiwicGFyc2VNaXBNYXBGcm9tT2JqZWN0IiwiaW1nRGF0YSIsInNldE1pcE1hcCIsIm1pcFBvb2wiLCJhbGxvY01pcE1hcCIsImZyZWVNaXBNYXAiLCJUZXhJbmZvIiwiYW5pc290cm9waWMiLCJwYXJzZVRleEluZm8iLCJtYWciLCJvcHRXcmFwUyIsIm9wdFdyYXBUIiwiaGFzTWlwTWFwIiwic2V0VGV4SW5mbyIsInRleFBhcmFtZXRlcmkiLCJoaW50IiwiZ2VuZXJhdGVNaXBtYXAiLCJ0ZXh0dXJlQ291bnQiLCJ0ZXh0dXJlU2V0IiwibnVtVGV4VW5pdHMiLCJ0ZXh0dXJlVW5pdHMiLCJSRUdMVGV4dHVyZSIsInJlZkNvdW50IiwiYmluZENvdW50IiwidGV4SW5mbyIsInRlbXBCaW5kIiwidGVtcFJlc3RvcmUiLCJoYW5kbGUiLCJwYXJhbXMiLCJiaW5kIiwidW5iaW5kIiwiZGVjUmVmIiwiZ2V0VG90YWxUZXh0dXJlU2l6ZSIsImNyZWF0ZTJEIiwicmVnbFRleHR1cmUyRCIsInN1YmltYWdlIiwieF8iLCJ5XyIsImxldmVsXyIsImltYWdlRGF0YSIsIndfIiwiaF8iLCJfdyIsIl9oIiwiY3JlYXRlQ3ViZSIsImEyIiwiYTMiLCJhNCIsImE1IiwiY3ViZUNvdW50IiwicmVnbFRleHR1cmVDdWJlIiwiZmFjZUlucHV0IiwicmFkaXVzXyIsImdldFRleHR1cmUiLCJ3cmFwcGVyIiwidGV4IiwicmVmcmVzaCIsIkdMX1JFTkRFUkJVRkZFUiIsIkdMX1JHQkE0JDEiLCJGT1JNQVRfU0laRVMiLCJnZXRSZW5kZXJidWZmZXJTaXplIiwid3JhcFJlbmRlcmJ1ZmZlcnMiLCJmb3JtYXRUeXBlcyIsImV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIsIndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCIsImZvcm1hdFR5cGVzSW52ZXJ0IiwicmVuZGVyYnVmZmVyQ291bnQiLCJyZW5kZXJidWZmZXJTZXQiLCJSRUdMUmVuZGVyYnVmZmVyIiwicmIiLCJiaW5kUmVuZGVyYnVmZmVyIiwiZGVsZXRlUmVuZGVyYnVmZmVyIiwiZ2V0VG90YWxSZW5kZXJidWZmZXJTaXplIiwiY3JlYXRlUmVuZGVyYnVmZmVyIiwicmVnbFJlbmRlcmJ1ZmZlciIsInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCJHTF9GUkFNRUJVRkZFUiQxIiwiR0xfUkVOREVSQlVGRkVSJDEiLCJHTF9URVhUVVJFXzJEJDIiLCJHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gkMiIsIkdMX0NPTE9SX0FUVEFDSE1FTlQwJDEiLCJHTF9ERVBUSF9BVFRBQ0hNRU5UIiwiR0xfU1RFTkNJTF9BVFRBQ0hNRU5UIiwiR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UIiwiR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUkMSIsIkdMX0RFUFRIX0NPTVBPTkVOVCQxIiwiY29sb3JUZXh0dXJlRm9ybWF0RW51bXMiLCJ0ZXh0dXJlRm9ybWF0Q2hhbm5lbHMiLCJ0ZXh0dXJlVHlwZVNpemVzIiwiR0xfREVQVEhfQ09NUE9ORU5UMTYkMSIsIkdMX1NURU5DSUxfSU5ERVg4JDEiLCJHTF9ERVBUSF9TVEVOQ0lMJDIiLCJjb2xvclJlbmRlcmJ1ZmZlckZvcm1hdEVudW1zIiwic3RhdHVzQ29kZSIsIkdMX0ZMT0FUJDYiLCJHTF9BUlJBWV9CVUZGRVIkMSIsIkF0dHJpYnV0ZVJlY29yZCIsIm5vcm1hbGl6ZWQiLCJkaXZpc29yIiwiR0xfRlJBR01FTlRfU0hBREVSIiwiR0xfVkVSVEVYX1NIQURFUiIsIkdMX0FDVElWRV9VTklGT1JNUyIsIkdMX0FDVElWRV9BVFRSSUJVVEVTIiwiR0xfUkdCQSQzIiwiR0xfVU5TSUdORURfQllURSQ3IiwiR0xfUEFDS19BTElHTk1FTlQiLCJHTF9GTE9BVCQ3Iiwid3JhcFJlYWRQaXhlbHMiLCJmcmFtZWJ1ZmZlclN0YXRlIiwiZ2xBdHRyaWJ1dGVzIiwicmVhZFBpeGVsc0ltcGwiLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiLCJjb2xvckF0dGFjaG1lbnRzIiwiZnJhbWVidWZmZXJXaWR0aCIsImZyYW1lYnVmZmVySGVpZ2h0Iiwic2V0RkJPIiwiZnJhbWVidWZmZXIiLCJyZWFkUGl4ZWxzRkJPIiwiQ1VURV9DT01QT05FTlRTIiwiR0xfVU5TSUdORURfQllURSQ4IiwiQVRUUklCX1NUQVRFX1BPSU5URVIiLCJBVFRSSUJfU1RBVEVfQ09OU1RBTlQiLCJEWU5fRlVOQyQxIiwiRFlOX1BST1AkMSIsIkRZTl9DT05URVhUJDEiLCJEWU5fU1RBVEUkMSIsIkRZTl9USFVOSyIsIkRZTl9DT05TVEFOVCQxIiwiRFlOX0FSUkFZJDEiLCJTX0RJVEhFUiIsIlNfQkxFTkRfRU5BQkxFIiwiU19CTEVORF9DT0xPUiIsIlNfQkxFTkRfRVFVQVRJT04iLCJTX0JMRU5EX0ZVTkMiLCJTX0RFUFRIX0VOQUJMRSIsIlNfREVQVEhfRlVOQyIsIlNfREVQVEhfUkFOR0UiLCJTX0RFUFRIX01BU0siLCJTX0NPTE9SX01BU0siLCJTX0NVTExfRU5BQkxFIiwiU19DVUxMX0ZBQ0UiLCJTX0ZST05UX0ZBQ0UiLCJTX0xJTkVfV0lEVEgiLCJTX1BPTFlHT05fT0ZGU0VUX0VOQUJMRSIsIlNfUE9MWUdPTl9PRkZTRVRfT0ZGU0VUIiwiU19TQU1QTEVfQUxQSEEiLCJTX1NBTVBMRV9FTkFCTEUiLCJTX1NBTVBMRV9DT1ZFUkFHRSIsIlNfU1RFTkNJTF9FTkFCTEUiLCJTX1NURU5DSUxfTUFTSyIsIlNfU1RFTkNJTF9GVU5DIiwiU19TVEVOQ0lMX09QRlJPTlQiLCJTX1NURU5DSUxfT1BCQUNLIiwiU19TQ0lTU09SX0VOQUJMRSIsIlNfU0NJU1NPUl9CT1giLCJTX1ZJRVdQT1JUIiwiU19QUk9GSUxFIiwiU19GUkFNRUJVRkZFUiIsIlNfVkVSVCIsIlNfRlJBRyIsIlNfRUxFTUVOVFMiLCJTX1BSSU1JVElWRSIsIlNfQ09VTlQiLCJTX09GRlNFVCIsIlNfSU5TVEFOQ0VTIiwiU19WQU8iLCJTX0ZSQU1FQlVGRkVSX1dJRFRIIiwiU19GUkFNRUJVRkZFUl9IRUlHSFQiLCJTX1ZJRVdQT1JUX1dJRFRIIiwiU19WSUVXUE9SVF9IRUlHSFQiLCJTX0RSQVdJTkdCVUZGRVJfV0lEVEgiLCJTX0RSQVdJTkdCVUZGRVIiLCJTX0RSQVdJTkdCVUZGRVJfSEVJR0hUIiwiTkVTVEVEX09QVElPTlMiLCJHTF9BUlJBWV9CVUZGRVIkMiIsIkdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSJDEiLCJHTF9URVhUVVJFXzJEJDMiLCJHTF9URVhUVVJFX0NVQkVfTUFQJDIiLCJHTF9DVUxMX0ZBQ0UiLCJHTF9CTEVORCIsIkdMX0RJVEhFUiIsIkdMX1NURU5DSUxfVEVTVCIsIkdMX0RFUFRIX1RFU1QiLCJHTF9TQ0lTU09SX1RFU1QiLCJHTF9QT0xZR09OX09GRlNFVF9GSUxMIiwiR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFIiwiR0xfU0FNUExFX0NPVkVSQUdFIiwiR0xfRkxPQVQkOCIsIkdMX0ZMT0FUX1ZFQzIiLCJHTF9GTE9BVF9WRUMzIiwiR0xfRkxPQVRfVkVDNCIsIkdMX0lOVCQzIiwiR0xfSU5UX1ZFQzIiLCJHTF9JTlRfVkVDMyIsIkdMX0lOVF9WRUM0IiwiR0xfQk9PTCIsIkdMX0JPT0xfVkVDMiIsIkdMX0JPT0xfVkVDMyIsIkdMX0JPT0xfVkVDNCIsIkdMX0ZMT0FUX01BVDIiLCJHTF9GTE9BVF9NQVQzIiwiR0xfRkxPQVRfTUFUNCIsIkdMX1NBTVBMRVJfMkQiLCJHTF9TQU1QTEVSX0NVQkUiLCJHTF9UUklBTkdMRVMkMSIsIkdMX0ZST05UIiwiR0xfQkFDSyIsIkdMX0NXIiwiR0xfQ0NXIiwiR0xfTUlOX0VYVCIsIkdMX01BWF9FWFQiLCJHTF9BTFdBWVMiLCJHTF9LRUVQIiwiR0xfWkVSTyIsIkdMX09ORSIsIkdMX0ZVTkNfQUREIiwiR0xfTEVTUyIsIkdMX0ZSQU1FQlVGRkVSJDIiLCJHTF9DT0xPUl9BVFRBQ0hNRU5UMCQyIiwiYmxlbmRGdW5jcyIsIm9uZSIsInNyYyBjb2xvciIsIm9uZSBtaW51cyBzcmMgY29sb3IiLCJzcmMgYWxwaGEiLCJvbmUgbWludXMgc3JjIGFscGhhIiwiZHN0IGNvbG9yIiwib25lIG1pbnVzIGRzdCBjb2xvciIsImRzdCBhbHBoYSIsIm9uZSBtaW51cyBkc3QgYWxwaGEiLCJjb25zdGFudCBjb2xvciIsIm9uZSBtaW51cyBjb25zdGFudCBjb2xvciIsImNvbnN0YW50IGFscGhhIiwib25lIG1pbnVzIGNvbnN0YW50IGFscGhhIiwic3JjIGFscGhhIHNhdHVyYXRlIiwiaW52YWxpZEJsZW5kQ29tYmluYXRpb25zIiwiY29tcGFyZUZ1bmNzIiwibmV2ZXIiLCJsZXNzIiwiPCIsImVxdWFsIiwiPSIsIj09IiwiPT09IiwibGVxdWFsIiwiPD0iLCJncmVhdGVyIiwiPiIsIm5vdGVxdWFsIiwiIT0iLCIhPT0iLCJnZXF1YWwiLCI+PSIsImFsd2F5cyIsInN0ZW5jaWxPcHMiLCJrZWVwIiwiaW5jcmVtZW50IiwiZGVjcmVtZW50IiwiaW5jcmVtZW50IHdyYXAiLCJkZWNyZW1lbnQgd3JhcCIsImludmVydCIsInNoYWRlclR5cGUiLCJvcmllbnRhdGlvblR5cGUiLCJpc0J1ZmZlckFyZ3MiLCJzb3J0U3RhdGUiLCJEZWNsYXJhdGlvbiIsInRoaXNEZXAiLCJjb250ZXh0RGVwIiwicHJvcERlcCIsImFwcGVuZCIsImlzU3RhdGljIiwiZGVjbCIsImNyZWF0ZVN0YXRpY0RlY2wiLCJjcmVhdGVEeW5hbWljRGVjbCIsImR5biIsIm51bUFyZ3MiLCJzdWJEeW4iLCJzdWJBcmdzIiwiU0NPUEVfREVDTCIsInJlZ2xDb3JlIiwiYnVmZmVyU3RhdGUiLCJlbGVtZW50U3RhdGUiLCJ0ZXh0dXJlU3RhdGUiLCJ1bmlmb3JtU3RhdGUiLCJhdHRyaWJ1dGVTdGF0ZSIsInNoYWRlclN0YXRlIiwiZHJhd1N0YXRlIiwidGltZXIiLCJSZWNvcmQiLCJibGVuZEVxdWF0aW9ucyIsInN1YnRyYWN0IiwicmV2ZXJzZSBzdWJ0cmFjdCIsImV4dF9ibGVuZF9taW5tYXgiLCJleHRJbnN0YW5jaW5nIiwiYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIsImV4dERyYXdCdWZmZXJzIiwiY3VycmVudFN0YXRlIiwiZGlydHkiLCJuZXh0U3RhdGUiLCJHTF9TVEFURV9OQU1FUyIsIkdMX0ZMQUdTIiwiR0xfVkFSSUFCTEVTIiwicHJvcE5hbWUiLCJzdGF0ZUZsYWciLCJzbmFtZSIsImNhcCIsImluaXQiLCJzdGF0ZVZhcmlhYmxlIiwiZHJhd2luZ0J1ZmZlcldpZHRoIiwiZHJhd2luZ0J1ZmZlckhlaWdodCIsInNoYXJlZFN0YXRlIiwiY3VycmVudCIsInZhbyIsInNoYXJlZENvbnN0YW50cyIsImJhY2tCdWZmZXIiLCJkcmF3QnVmZmVyIiwiZHJhd0NhbGxDb3VudGVyIiwiY3JlYXRlUkVHTEVudmlyb25tZW50IiwiZW52IiwidmFyQ291bnRlciIsImxpbmtlZE5hbWVzIiwibGlua2VkVmFsdWVzIiwidmFycyIsImRlZiIsInNjb3BlIiwiZW50cnkiLCJleGl0IiwiZW50cnlUb1N0cmluZyIsImV4aXRUb1N0cmluZyIsImdsb2JhbEJsb2NrIiwicHJvY2VkdXJlcyIsInByb2MiLCJjb3VudCIsImJvZHlUb1N0cmluZyIsImNvbmQiLCJ0aGVuQmxvY2siLCJlbHNlQmxvY2siLCJ0aGVuVG9TdHJpbmciLCJlbHNlVG9TdHJpbmciLCJlbHNlIiwiZWxzZUNsYXVzZSIsImNvbXBpbGUiLCJzcmMiLCJGdW5jdGlvbiIsImNyZWF0ZUVudmlyb25tZW50IiwiYmF0Y2hJZCIsIlNIQVJFRCIsInNoYXJlZCIsIkNIRUNLIiwiY29tbWFuZFN0ciIsImFzc2VydCIsIm5leHRWYXJzIiwiY3VycmVudFZhcnMiLCJ2YXJpYWJsZSIsImNvbnN0YW50cyIsImludm9rZSIsImFyZ0xpc3QiLCJhdHRyaWJDYWNoZSIsInNjb3BlQXR0cmlicyIsInNjb3BlQXR0cmliIiwiYmluZGluZyIsInBhcnNlQXJndW1lbnRzIiwic3RhdGljT3B0aW9ucyIsImR5bmFtaWNPcHRpb25zIiwiS0VZX05BTUVTIiwiY2hlY2tLZXlzIiwiYXR0cmliTG9jYXRpb25zIiwic3RhdGljQXR0cmlidXRlcyIsInNBdHRyaWJ1dGVzIiwiYmluZGluZ3MiLCJwYXJzZUF0dHJpYkxvY2F0aW9ucyIsImdldEZyYW1lYnVmZmVyIiwiRlJBTUVCVUZGRVIiLCJDT05URVhUIiwiRlJBTUVCVUZGRVJfRlVOQyIsIkZSQU1FQlVGRkVSX1NUQVRFIiwicGFyc2VGcmFtZWJ1ZmZlciIsInZpZXdwb3J0QW5kU2Npc3NvciIsInBhcnNlQm94IiwiQk9YX1ciLCJCT1hfSCIsImR5bkJveCIsIkJPWCIsIkJPWF9YIiwiQk9YX1kiLCJwcmV2Vmlld3BvcnQiLCJWSUVXUE9SVCIsInNjaXNzb3JfYm94IiwicGFyc2VWaWV3cG9ydFNjaXNzb3IiLCJnZXRFbGVtZW50cyIsIkVMRU1FTlRTIiwiSVNfQlVGRkVSX0FSR1MiLCJFTEVNRU5UX1NUQVRFIiwiZWxlbWVudERlZm4iLCJlbGVtZW50U3RyZWFtIiwiaWZ0ZSIsInBhcnNlRWxlbWVudHMiLCJwYXJzZVBhcmFtIiwiaXNPZmZzZXQiLCJPRkZTRVQiLCJkeW5WYWx1ZSIsInByaW1pdGl2ZSIsImR5blByaW1pdGl2ZSIsIlBSSU1fVFlQRVMiLCJwcmltIiwicGFyc2VQcmltaXRpdmUiLCJkeW5Db3VudCIsIk1JU1NJTkciLCJEWU5BTUlDIiwicGFyc2VWZXJ0Q291bnQiLCJpbnN0YW5jZXMiLCJwYXJzZURyYXciLCJTVEFURSIsInBhcnNlU3RhdGljIiwicGFyc2VEeW5hbWljIiwiQ09NUEFSRV9GVU5DUyIsImRzdCIsIkJMRU5EX0ZVTkNTIiwicmVhZCIsIlNSQ19SR0IiLCJTUkNfQUxQSEEiLCJCTEVORF9FUVVBVElPTlMiLCJSR0IiLCJBTFBIQSIsImNoZWNrUHJvcCIsImNtcCIsImZhaWwiLCJ6ZmFpbCIsInpwYXNzIiwiU1RFTkNJTF9PUFMiLCJzYW1wbGVWYWx1ZSIsInNhbXBsZUludmVydCIsInBhcnNlR0xTdGF0ZSIsInBhcnNlU2hhZGVyIiwicHJvZ1ZhciIsImZyYWdJZCIsIlNIQURFUl9TVEFURSIsInByb2dEZWYiLCJwYXJzZVByb2dyYW0iLCJjb3B5Qm94IiwiZGVmbiIsInNjb3BlVkFPIiwiZHJhd1ZBTyIsInVzZVZBTyIsInByb2ZpbGVFbmFibGUiLCJwYXJzZVByb2ZpbGUiLCJzdGF0aWNVbmlmb3JtcyIsImR5bmFtaWNVbmlmb3JtcyIsIlVOSUZPUk1TIiwicmVnbFR5cGUiLCJwYXJzZVVuaWZvcm1zIiwiZ2V0VkFPIiwiY3JlYXRlVkFPIiwidmFvUmVmIiwicGFyc2VWQU8iLCJzdGF0aWNCaW5kaW5ncyIsImR5bmFtaWNBdHRyaWJ1dGVzIiwiYXR0cmlidXRlRGVmcyIsImF0dHJpYnV0ZSIsImdldEJ1ZmZlciIsImNvbnN0YW50IiwiVkFMSURfS0VZUyIsImR0eXBlIiwiaXNTdHJlYW0iLCJWQUxVRSIsIkJVRkZFUl9TVEFURSIsImRlZmF1bHRSZWNvcmQiLCJCVUZGRVIiLCJUWVBFIiwiZW1pdFJlYWRSZWNvcmQiLCJwYXJzZUF0dHJpYnV0ZXMiLCJzdGF0aWNDb250ZXh0IiwiZHluYW1pY0NvbnRleHQiLCJwYXJzZUNvbnRleHQiLCJlbWl0Q29udGV4dCIsImNvbnRleHRFbnRlciIsImVtaXRQb2xsRnJhbWVidWZmZXIiLCJza2lwQ2hlY2siLCJFWFRfRFJBV19CVUZGRVJTIiwiR0wiLCJORVhUIiwiRFJBV19CVUZGRVJTIiwiQkFDS19CVUZGRVIiLCJlbWl0UG9sbFN0YXRlIiwiQ1VSUkVOVF9WQVJTIiwiTkVYVF9WQVJTIiwiQ1VSUkVOVF9TVEFURSIsIk5FWFRfU1RBVEUiLCJDVVJSRU5UIiwiZW1pdFNldE9wdGlvbnMiLCJmbGFnIiwiaW5qZWN0RXh0ZW5zaW9ucyIsImluc3RhbmNpbmciLCJlbWl0UHJvZmlsZSIsInVzZVNjb3BlIiwiaW5jcmVtZW50Q291bnRlciIsIkNQVV9TVEFSVCIsIlFVRVJZX0NPVU5URVIiLCJVU0VfUFJPRklMRSIsIlNUQVRTIiwiVElNRVIiLCJwcm9maWxlQXJnIiwicGVyZkNvdW50ZXIiLCJlbWl0UHJvZmlsZVN0YXJ0IiwiZW1pdFByb2ZpbGVFbmQiLCJzY29wZVByb2ZpbGUiLCJlbWl0QXR0cmlidXRlcyIsIkFUVFJJQlVURSIsIkxPQ0FUSU9OIiwiQklORElORyIsIkNPTlNUX0NPTVBPTkVOVFMiLCJDT01NT05fS0VZUyIsImVtaXRCdWZmZXIiLCJTSVpFIiwiRElWSVNPUiIsImVtaXRDb25zdGFudCIsImVtaXRCaW5kQXR0cmlidXRlIiwidHlwZUxlbmd0aCIsImVtaXRVbmlmb3JtcyIsImluZml4IiwidW5pZm9ybSIsIlRFWF9WQUxVRSIsIk1BVF9WQUxVRSIsImRpbSIsImVtaXRDaGVjayIsImNoZWNrVHlwZSIsImNoZWNrVmVjdG9yIiwiY2hlY2tUZXh0dXJlIiwidW5yb2xsIiwiVEVYIiwibWF0U2l6ZSIsIlNUT1JBR0UiLCJlbWl0RHJhdyIsIm91dGVyIiwiaW5uZXIiLCJEUkFXX1NUQVRFIiwiZHJhd09wdGlvbnMiLCJjb250ZXh0RHluYW1pYyIsImVtaXRFbGVtZW50cyIsImVtaXRWYWx1ZSIsIklOU1RBTkNFUyIsIkVYVF9JTlNUQU5DSU5HIiwiUFJJTUlUSVZFIiwiQ09VTlQiLCJlbWl0Q291bnQiLCJFTEVNRU5UX1RZUEUiLCJlbGVtZW50c1N0YXRpYyIsImVtaXRJbnN0YW5jaW5nIiwiZW1pdFJlZ3VsYXIiLCJjcmVhdGVCb2R5IiwiZW1pdEJvZHkiLCJwYXJlbnRFbnYiLCJlbWl0RHJhd0JvZHkiLCJlbWl0QmF0Y2hEeW5hbWljU2hhZGVyQm9keSIsImVtaXRCYXRjaEJvZHkiLCJCQVRDSF9JRCIsIlBST1BTIiwiaXNJbm5lckRlZm4iLCJpc091dGVyRGVmbiIsIm5lZWRzQ29udGV4dCIsIm5lZWRzRnJhbWVidWZmZXIiLCJwcm9nQ2FjaGUiLCJQUk9HUkFNIiwiUFJPR19JRCIsIkNBQ0hFRF9QUk9DIiwic3BsYXRPYmplY3QiLCJpc0R5bmFtaWNPYmplY3QiLCJnbG9iYWxzIiwib2JqZWN0UmVmIiwiZGVwcyIsInByb2NzIiwiY29tbW9uIiwiSU5TVEFOQ0lORyIsIm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiwiZHJhd0NhY2hlIiwiZW1pdERyYXdQcm9jIiwic2F2ZVNoYWRlciIsImVtaXRTY29wZVByb2MiLCJiYXRjaCIsInByb2dEZWZuIiwiYmF0Y2hDYWNoZSIsImVtaXRCYXRjaFByb2MiLCJHTF9RVUVSWV9SRVNVTFRfRVhUIiwiR0xfUVVFUllfUkVTVUxUX0FWQUlMQUJMRV9FWFQiLCJHTF9USU1FX0VMQVBTRURfRVhUIiwiY3JlYXRlVGltZXIiLCJleHRfZGlzam9pbnRfdGltZXJfcXVlcnkiLCJxdWVyeVBvb2wiLCJmcmVlUXVlcnkiLCJxdWVyeSIsInBlbmRpbmdRdWVyaWVzIiwiUGVuZGluZ1N0YXRzIiwic3RhcnRRdWVyeUluZGV4IiwiZW5kUXVlcnlJbmRleCIsInN1bSIsInBlbmRpbmdTdGF0c1Bvb2wiLCJmcmVlUGVuZGluZ1N0YXRzIiwicGVuZGluZ1N0YXRzIiwicHVzaFNjb3BlU3RhdHMiLCJwcyIsInRpbWVTdW0iLCJxdWVyeVB0ciIsImJlZ2luUXVlcnkiLCJjcmVhdGVRdWVyeUVYVCIsImJlZ2luUXVlcnlFWFQiLCJlbmRRdWVyeSIsImVuZFF1ZXJ5RVhUIiwicXVlcnlUaW1lIiwiZ2V0UXVlcnlPYmplY3RFWFQiLCJzdGFydFB0ciIsImVuZFB0ciIsImdwdVRpbWUiLCJnZXROdW1QZW5kaW5nUXVlcmllcyIsImRlbGV0ZVF1ZXJ5RVhUIiwiR0xfQ09MT1JfQlVGRkVSX0JJVCIsIkdMX0RFUFRIX0JVRkZFUl9CSVQiLCJHTF9TVEVOQ0lMX0JVRkZFUl9CSVQiLCJHTF9BUlJBWV9CVUZGRVIiLCJDT05URVhUX0xPU1RfRVZFTlQiLCJDT05URVhUX1JFU1RPUkVEX0VWRU5UIiwiRFlOX1BST1AiLCJEWU5fQ09OVEVYVCIsIkRZTl9TVEFURSIsImhheXN0YWNrIiwibmVlZGxlIiwiZ2V0Q29udGV4dEF0dHJpYnV0ZXMiLCJjb250ZXh0TG9zdCIsImlzQ29udGV4dExvc3QiLCJleHRlbnNpb25TdGF0ZSIsInRyeUxvYWRFeHRlbnNpb24iLCJuYW1lXyIsImdldEV4dGVuc2lvbiIsImNyZWF0ZUV4dGVuc2lvbkNhY2hlIiwic3RyaW5nSWRzIiwic3RyaW5nVmFsdWVzIiwiIiwic3RhdHMkJDEiLCJ2YW9Db3VudCIsImJ1ZmZlckNvdW50IiwiZWxlbWVudHNDb3VudCIsImZyYW1lYnVmZmVyQ291bnQiLCJzaGFkZXJDb3VudCIsIlNUQVJUX1RJTUUiLCJXSURUSCIsIkhFSUdIVCIsImRlc3Ryb3lCdWZmZXIiLCJidWZmZXJTZXQiLCJSRUdMQnVmZmVyIiwiY3JlYXRlQnVmZmVyIiwidXNhZ2UiLCJwZXJzaXN0ZW50RGF0YSIsImJpbmRCdWZmZXIiLCJzdHJlYW1Qb29sIiwiaW5pdEJ1ZmZlckZyb21UeXBlZEFycmF5IiwiaW5pdEJ1ZmZlckZyb21EYXRhIiwicGVyc2lzdCIsImZsYXREYXRhIiwidHlwZWREYXRhIiwiZGVsZXRlQnVmZmVyIiwiZ2V0VG90YWxCdWZmZXJTaXplIiwiZGVmZXJJbml0IiwicGVyc2lzdGVudCIsInJlZ2xCdWZmZXIiLCJzZXRTdWJEYXRhIiwiYnVmZmVyU3ViRGF0YSIsIl9idWZmZXIiLCJzdWJkYXRhIiwib2Zmc2V0XyIsImNyZWF0ZVN0cmVhbSIsImRlc3Ryb3lTdHJlYW0iLCJzdHJlYW0kJDEiLCJfaW5pdEJ1ZmZlciIsIndyYXBCdWZmZXJTdGF0ZSIsIk5VTV9BVFRSSUJVVEVTIiwiYXR0cmlidXRlQmluZGluZ3MiLCJ2YW9TZXQiLCJjdXJyZW50VkFPIiwidGFyZ2V0VkFPIiwiZXh0VkFPIiwiX2F0dHIiLCJSRUdMVkFPIiwidXBkYXRlVkFPIiwiYnVmVXBkYXRlZCIsIm5hdHRyaWJ1dGVzIiwic3BlYyIsInJlYyIsImJ1ZmZlcnMiLCJfdmFvIiwiZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5Iiwic2V0VkFPIiwiYmluZFZlcnRleEFycmF5T0VTIiwiYmluZEF0dHJzIiwiZXh0aSIsImV4dEluc3RhbmNlZCIsImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwidmVydGV4QXR0cmliUG9pbnRlciIsIm9mZmZzZXQiLCJ2ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiLCJ2ZXJ0ZXhBdHRyaWI0ZiIsImNyZWF0ZVZlcnRleEFycmF5T0VTIiwiZGVsZXRlVmVydGV4QXJyYXlPRVMiLCJ3cmFwQXR0cmlidXRlU3RhdGUiLCJlbGVtZW50U2V0IiwiZWxlbWVudENvdW50IiwiZWxlbWVudFR5cGVzIiwiUkVHTEVsZW1lbnRCdWZmZXIiLCJwcmltVHlwZSIsInZlcnRDb3VudCIsIm9lc19lbGVtZW50X2luZGV4X3VpbnQiLCJpbml0RWxlbWVudHMiLCJwcmVkaWN0ZWRUeXBlIiwiZGVzdHJveUVsZW1lbnRzIiwicmVnbEVsZW1lbnRzIiwiX2VsZW1lbnRzIiwid3JhcEVsZW1lbnRzU3RhdGUiLCJmcmFnU2hhZGVycyIsInZlcnRTaGFkZXJzIiwiQWN0aXZlSW5mbyIsImxvY2F0aW9uIiwiaW5zZXJ0QWN0aXZlSW5mbyIsImdldFNoYWRlciIsImNyZWF0ZVNoYWRlciIsInNoYWRlclNvdXJjZSIsImNvbXBpbGVTaGFkZXIiLCJwcm9ncmFtQ2FjaGUiLCJwcm9ncmFtTGlzdCIsIlBST0dSQU1fQ09VTlRFUiIsIlJFR0xQcm9ncmFtIiwidmVydElkIiwidW5pZm9ybXNDb3VudCIsImF0dHJpYnV0ZXNDb3VudCIsImxpbmtQcm9ncmFtIiwiYXR0cmlidXRlTG9jYXRpb25zIiwiY3JlYXRlUHJvZ3JhbSIsImF0dGFjaFNoYWRlciIsImJpbmRBdHRyaWJMb2NhdGlvbiIsIm51bVVuaWZvcm1zIiwiZ2V0QWN0aXZlVW5pZm9ybSIsImdldFVuaWZvcm1Mb2NhdGlvbiIsIm51bUF0dHJpYnV0ZXMiLCJnZXRBY3RpdmVBdHRyaWIiLCJnZXRBdHRyaWJMb2NhdGlvbiIsImdldE1heFVuaWZvcm1zQ291bnQiLCJnZXRNYXhBdHRyaWJ1dGVzQ291bnQiLCJkZWxldGVTaGFkZXIiLCJkZWxldGVQcm9ncmFtIiwicHJldlByb2dyYW0iLCJ3cmFwU2hhZGVyU3RhdGUiLCJjb3JlIiwicmVuZGVyYnVmZmVyU3RhdGUiLCJjdXIiLCJjb2xvclRleHR1cmVGb3JtYXRzIiwiY29sb3JSZW5kZXJidWZmZXJGb3JtYXRzIiwiY29sb3JUeXBlcyIsIkZyYW1lYnVmZmVyQXR0YWNobWVudCIsImluY1JlZkFuZENoZWNrU2hhcGUiLCJ0dyIsInRoIiwiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCJwYXJzZUF0dGFjaG1lbnQiLCJhbGxvY0F0dGFjaG1lbnQiLCJpc1RleHR1cmUiLCJ1bndyYXBBdHRhY2htZW50IiwicmVzaXplQXR0YWNobWVudCIsImZyYW1lYnVmZmVyU2V0IiwiUkVHTEZyYW1lYnVmZmVyIiwiZGVwdGhBdHRhY2htZW50Iiwic3RlbmNpbEF0dGFjaG1lbnQiLCJkZXB0aFN0ZW5jaWxBdHRhY2htZW50IiwiZGVjRkJPUmVmcyIsInVwZGF0ZUZyYW1lYnVmZmVyIiwic3RhdHVzIiwiY3JlYXRlRkJPIiwicmVnbEZyYW1lYnVmZmVyIiwibmVlZHNEZXB0aCIsIm5lZWRzU3RlbmNpbCIsImNvbG9yQnVmZmVyIiwiY29sb3JUZXh0dXJlIiwiY29sb3JGb3JtYXQiLCJjb2xvclR5cGUiLCJjb2xvckNvdW50IiwiZGVwdGhCdWZmZXIiLCJzdGVuY2lsQnVmZmVyIiwiZGVwdGhTdGVuY2lsQnVmZmVyIiwiZGVwdGhTdGVuY2lsVGV4dHVyZSIsImNvbG9ycyIsImRlcHRoVGV4dHVyZSIsImRlcHRoU3RlbmNpbCIsImNvbW1vbkNvbG9yQXR0YWNobWVudFNpemUiLCJjb2xvckF0dGFjaG1lbnRTaXplIiwiX2ZyYW1lYnVmZmVyIiwidXNlIiwicmVnbEZyYW1lYnVmZmVyQ3ViZSIsImNvbG9yQ3ViZXMiLCJjdWJlTWFwUGFyYW1zIiwiY3ViZSIsImZiIiwid3JhcEZCT1N0YXRlIiwicmFmQ2FsbGJhY2tzIiwibG9zc0NhbGxiYWNrcyIsInJlc3RvcmVDYWxsYmFja3MiLCJkZXN0cm95Q2FsbGJhY2tzIiwiYWN0aXZlUkFGIiwiaGFuZGxlUkFGIiwic3RhcnRSQUYiLCJzdG9wUkFGIiwiaGFuZGxlQ29udGV4dExvc3MiLCJldmVudCIsImhhbmRsZUNvbnRleHRSZXN0b3JlZCIsImNvbXBpbGVQcm9jZWR1cmUiLCJzZXBhcmF0ZUR5bmFtaWMiLCJ1c2VBcnJheXMiLCJzdGF0aWNJdGVtcyIsImR5bmFtaWNJdGVtcyIsIm9wdGlvbiIsIm9wIiwib3BCYWNrIiwib3BGcm9udCIsImZsYXR0ZW5OZXN0ZWRPcHRpb25zIiwiY3B1VGltZSIsImNvbXBpbGVkIiwiRU1QVFlfQVJSQVkiLCJyZXNlcnZlIiwiY2xlYXJJbXBsIiwiY2xlYXJGbGFncyIsImNsZWFyRGVwdGgiLCJjbGVhclN0ZW5jaWwiLCJwZW5kaW5nQ2FuY2VsIiwicG9sbFZpZXdwb3J0Iiwic2Npc3NvckJveCIsImZyYW1lYnVmZmVyX3JlZ2xUeXBlIiwiZnJhbWVidWZmZXJDdWJlIiwib24iLCJjYWxsYmFjayIsImNhbGxiYWNrcyIsImhhc0V4dGVuc2lvbiIsIl9nbCIsIl9yZWZyZXNoIiwiY3JlYXRlUkVHTCIsIkdMT0JBTCIsInN0YXJ0ZGVub20iLCJzaWduaWZpY2FuY2UiLCJvdmVyZmxvdyIsIm9sZFJhbmRvbSIsIkFSQzQiLCJrZXlsZW4iLCJtZSIsIm1peGtleSIsInNtZWFyIiwic3RyaW5nc2VlZCIsInRvc3RyaW5nIiwiYXJjNCIsInR5cCIsImVudHJvcHkiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJwbHVnaW5zIiwic2NyZWVuIiwiYXV0b3NlZWQiLCJyZXNldEdsb2JhbCIsIkYyIiwiRzIiLCJHMyIsIkY0IiwiRzQiLCJyYW5kb21PclNlZWQiLCJzMCIsInMxIiwiczIiLCJtYXNoIiwiYWxlYSIsImJ1aWxkUGVybXV0YXRpb25UYWJsZSIsInBlcm0iLCJwZXJtTW9kMTIiLCJhdXgiLCJncmFkMyIsImdyYWQ0IiwieGluIiwieWluIiwiaTEiLCJqMSIsIm4wIiwibjEiLCJuMiIsImlpIiwiamoiLCJ0MCIsImdpMCIsImdpMSIsImdpMiIsInppbiIsIm4zIiwiazEiLCJpMiIsImoyIiwiazIiLCJ6MCIsInoxIiwiejIiLCJ6MyIsImtrIiwiZ2kzIiwibjQiLCJsMSIsImwyIiwiaTMiLCJqMyIsImszIiwibDMiLCJ3MCIsInJhbmt4IiwicmFua3kiLCJyYW5reiIsInJhbmt3IiwidzEiLCJ3MiIsInczIiwiejQiLCJ3NCIsImxsIiwidDQiLCJnaTQiLCJfYnVpbGRQZXJtdXRhdGlvblRhYmxlIiwiX3NsaWNlZFRvQXJyYXkiLCJTeW1ib2wiLCJpdGVyYXRvciIsIl9hcnIiLCJfbiIsIl9kIiwiX2UiLCJfcyIsIl9pIiwiZG9uZSIsInNsaWNlSXRlcmF0b3IiLCJUQVUiLCJtYXBUb0VsbGlwc2UiLCJfcmVmIiwiY29zcGhpIiwic2lucGhpIiwiY2VudGVyeCIsImNlbnRlcnkiLCJhcHByb3hVbml0QXJjIiwiYW5nMSIsImFuZzIiLCJ2ZWN0b3JBbmdsZSIsInV4IiwidXkiLCJkb3QiLCJfcmVmMiIsIl9yZWYyJHhBeGlzUm90YXRpb24iLCJfcmVmMiRsYXJnZUFyY0ZsYWciLCJfcmVmMiRzd2VlcEZsYWciLCJweHAiLCJweXAiLCJfZ2V0QXJjQ2VudGVyIiwicnhzcSIsInJ5c3EiLCJweHBzcSIsInB5cHNxIiwicmFkaWNhbnQiLCJjZW50ZXJ4cCIsImNlbnRlcnlwIiwidngxIiwidnkxIiwidngyIiwidnkyIiwiZ2V0QXJjQ2VudGVyIiwiX2dldEFyY0NlbnRlcjIiLCJzZWdtZW50cyIsImN1cnZlIiwiX21hcFRvRWxsaXBzZSIsIl9tYXBUb0VsbGlwc2UyIiwiX21hcFRvRWxsaXBzZTMiLCJiZXppZXIiLCJub3JtIiwidG1wMSIsInRtcDIiLCJ0bXAzIiwic3ZnIiwicGVuIiwiYmV6aWVyVG8iLCLPgCIsIl8xMjAiLCJyYWRpYW5zIiwibGFyZ2VfYXJjX2ZsYWciLCJzd2VlcF9mbGFnIiwiZjEiLCJmMiIsInh5Iiwicm90YXRlIiwicngyIiwicnkyIiwiYXNpbiIsInRvRml4ZWQiLCJmMm9sZCIsIngyb2xkIiwieTJvbGQiLCJoeCIsImh5Iiwicm90IiwicmFkIiwiZGVncmVzcyIsImFnZW50cyIsIkFnZW50IiwiYWdlbnQiLCJwb3MiLCJnZXREaXN0YW5jZSIsIndhcnAiLCJWZWN0b3IiLCJbb2JqZWN0IE9iamVjdF0iLCJ2ZWwiLCJ0cmFuc2xhdGUiLCJmaWxsIiwiYjY0IiwibGVucyIsImdldExlbnMiLCJwbGFjZUhvbGRlcnNMZW4iLCJ0b0J5dGVBcnJheSIsInZhbGlkTGVuIiwiQXJyIiwiX2J5dGVMZW5ndGgiLCJjdXJCeXRlIiwicmV2TG9va3VwIiwiZnJvbUJ5dGVBcnJheSIsImV4dHJhQnl0ZXMiLCJsZW4yIiwiZW5jb2RlQ2h1bmsiLCJsb29rdXAiLCJpZWVlNzU0IiwiU2xvd0J1ZmZlciIsIklOU1BFQ1RfTUFYX0JZVEVTIiwiS19NQVhfTEVOR1RIIiwiUmFuZ2VFcnJvciIsIl9fcHJvdG9fXyIsImVuY29kaW5nT3JPZmZzZXQiLCJzdHJpbmciLCJpc0VuY29kaW5nIiwid3JpdGUiLCJmcm9tU3RyaW5nIiwiaXNWaWV3IiwiZnJvbUFycmF5TGlrZSIsImlzSW5zdGFuY2UiLCJieXRlT2Zmc2V0IiwiZnJvbUFycmF5QnVmZmVyIiwidmFsdWVPZiIsImNoZWNrZWQiLCJudW1iZXJJc05hTiIsImZyb21PYmplY3QiLCJ0b1ByaW1pdGl2ZSIsImFzc2VydFNpemUiLCJtdXN0TWF0Y2giLCJsb3dlcmVkQ2FzZSIsInV0ZjhUb0J5dGVzIiwiYmFzZTY0VG9CeXRlcyIsInN3YXAiLCJiaWRpcmVjdGlvbmFsSW5kZXhPZiIsImRpciIsImFycmF5SW5kZXhPZiIsImxhc3RJbmRleE9mIiwiaW5kZXhTaXplIiwiYXJyTGVuZ3RoIiwidmFsTGVuZ3RoIiwicmVhZFVJbnQxNkJFIiwiZm91bmRJbmRleCIsImZvdW5kIiwiaGV4V3JpdGUiLCJyZW1haW5pbmciLCJzdHJMZW4iLCJ1dGY4V3JpdGUiLCJibGl0QnVmZmVyIiwiYXNjaWlXcml0ZSIsImJ5dGVBcnJheSIsImFzY2lpVG9CeXRlcyIsImxhdGluMVdyaXRlIiwiYmFzZTY0V3JpdGUiLCJ1Y3MyV3JpdGUiLCJ1dGYxNmxlVG9CeXRlcyIsImJhc2U2NFNsaWNlIiwidXRmOFNsaWNlIiwic2Vjb25kQnl0ZSIsInRoaXJkQnl0ZSIsImZvdXJ0aEJ5dGUiLCJ0ZW1wQ29kZVBvaW50IiwiZmlyc3RCeXRlIiwiY29kZVBvaW50IiwiYnl0ZXNQZXJTZXF1ZW5jZSIsImNvZGVQb2ludHMiLCJNQVhfQVJHVU1FTlRTX0xFTkdUSCIsImRlY29kZUNvZGVQb2ludHNBcnJheSIsImtNYXhMZW5ndGgiLCJUWVBFRF9BUlJBWV9TVVBQT1JUIiwiZm9vIiwidHlwZWRBcnJheVN1cHBvcnQiLCJzcGVjaWVzIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJwb29sU2l6ZSIsImFsbG9jVW5zYWZlU2xvdyIsIl9pc0J1ZmZlciIsImNvbXBhcmUiLCJzd2FwMTYiLCJzd2FwMzIiLCJzd2FwNjQiLCJ0b0xvY2FsZVN0cmluZyIsImhleFNsaWNlIiwiYXNjaWlTbGljZSIsImxhdGluMVNsaWNlIiwidXRmMTZsZVNsaWNlIiwiZXF1YWxzIiwiaW5zcGVjdCIsInRoaXNTdGFydCIsInRoaXNFbmQiLCJ0aGlzQ29weSIsInRhcmdldENvcHkiLCJ0b0pTT04iLCJ0b0hleCIsImJ5dGVzIiwiY2hlY2tPZmZzZXQiLCJjaGVja0ludCIsImNoZWNrSUVFRTc1NCIsIndyaXRlRmxvYXQiLCJsaXR0bGVFbmRpYW4iLCJub0Fzc2VydCIsIndyaXRlRG91YmxlIiwibmV3QnVmIiwicmVhZFVJbnRMRSIsIm11bCIsInJlYWRVSW50QkUiLCJyZWFkVUludDgiLCJyZWFkVUludDE2TEUiLCJyZWFkVUludDMyTEUiLCJyZWFkVUludDMyQkUiLCJyZWFkSW50TEUiLCJyZWFkSW50QkUiLCJyZWFkSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZEZsb2F0TEUiLCJyZWFkRmxvYXRCRSIsInJlYWREb3VibGVMRSIsInJlYWREb3VibGVCRSIsIndyaXRlVUludExFIiwid3JpdGVVSW50QkUiLCJ3cml0ZVVJbnQ4Iiwid3JpdGVVSW50MTZMRSIsIndyaXRlVUludDE2QkUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVSW50MzJCRSIsIndyaXRlSW50TEUiLCJsaW1pdCIsInN1YiIsIndyaXRlSW50QkUiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZUZsb2F0QkUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVEb3VibGVCRSIsInRhcmdldFN0YXJ0IiwiY29weVdpdGhpbiIsIklOVkFMSURfQkFTRTY0X1JFIiwibGVhZFN1cnJvZ2F0ZSIsImJhc2U2NGNsZWFuIiwiaXNMRSIsIm1MZW4iLCJuQnl0ZXMiLCJlTGVuIiwiZU1heCIsImVCaWFzIiwibkJpdHMiLCJOYU4iLCJydCIsIkxOMiIsIkNBTlZBU19TS0VUQ0hfREVGQVVMVF9TVE9SQUdFX0tFWSJdLCJtYXBwaW5ncyI6IkNBQUEsV0FBQSxPQUFBLFNBQUFBLEVBQUFDLEVBQUFDLEVBQUFDLEdBQUEsU0FBQUMsRUFBQUMsRUFBQUMsR0FBQSxJQUFBSixFQUFBRyxHQUFBLENBQUEsSUFBQUosRUFBQUksR0FBQSxDQUFBLElBQUFFLEVBQUEsbUJBQUFDLFNBQUFBLFFBQUEsSUFBQUYsR0FBQUMsRUFBQSxPQUFBQSxFQUFBRixHQUFBLEdBQUEsR0FBQUksRUFBQSxPQUFBQSxFQUFBSixHQUFBLEdBQUEsSUFBQUssRUFBQSxJQUFBQyxNQUFBLHVCQUFBTixFQUFBLEtBQUEsTUFBQUssRUFBQUUsS0FBQSxtQkFBQUYsRUFBQSxJQUFBRyxFQUFBWCxFQUFBRyxHQUFBLENBQUFTLFFBQUEsSUFBQWIsRUFBQUksR0FBQSxHQUFBVSxLQUFBRixFQUFBQyxRQUFBLFNBQUFkLEdBQUEsT0FBQUksRUFBQUgsRUFBQUksR0FBQSxHQUFBTCxJQUFBQSxJQUFBYSxFQUFBQSxFQUFBQyxRQUFBZCxFQUFBQyxFQUFB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LFVBQ0FDLFdBQUEsVUFDQUMsUUFBQSxVQUNBQyxXQUFBLFVBQ0FDLGFBQUEsVUFDQUMsY0FBQSxVQUNBQyxjQUFBLFVBQ0FDLGNBQUEsVUFDQUMsY0FBQSxVQUNBQyxXQUFBLFVBQ0FDLFNBQUEsVUFDQUMsWUFBQSxVQUNBQyxRQUFBLFVBQ0FDLFFBQUEsVUFDQUMsV0FBQSxVQUNBQyxVQUFBLFVBQ0FDLFlBQUEsVUFDQUMsWUFBQSxVQUNBQyxRQUFBLFVBQ0FDLFVBQUEsVUFDQUMsV0FBQSxVQUNBQyxLQUFBLFVBQ0FDLFVBQUEsVUFDQUMsS0FBQSxVQUNBQyxNQUFBLFVBQ0FDLFlBQUEsVUFDQUMsS0FBQSxVQUNBQyxTQUFBLFVBQ0FDLFFBQUEsVUFDQUMsVUFBQSxVQUNBQyxPQUFBLFVBQ0FDLE1BQUEsVUFDQUMsTUFBQSxVQUNBQyxTQUFBLFVBQ0FDLGNBQUEsVUFDQUMsVUFBQSxVQUNBQyxhQUFBLFVBQ0FDLFVBQUEsVUFDQUMsV0FBQSxVQUNBQyxVQUFBLFVBQ0FDLHFCQUFBLFVBQ0FDLFVBQUEsVUFDQUMsV0FBQSxVQUNBQyxVQUFBLFVBQ0FDLFVBQUEsVUFDQUMsWUFBQSxVQUNBQyxjQUFBLFVBQ0FDLGFBQUEsVUFDQUMsZUFBQSxVQUNBQyxlQUFBLFVBQ0FDLGVBQUEsVUFDQUMsWUFBQSxVQUNBQyxLQUFBLFVBQ0FDLFVBQUEsVUFDQUMsTUFBQSxVQUNBQyxRQUFBLFVBQ0FDLE9BQUEsVUFDQUMsaUJBQUEsVUFDQUMsV0FBQSxVQUNBQyxhQUFBLFVBQ0FDLGFBQUEsVUFDQUMsZUFBQSxVQUNBQyxnQkFBQSxVQUNBQyxrQkFBQSxVQUNBQyxnQkFBQSxVQUNBQyxnQkFBQSxVQUNBQyxhQUFBLFVBQ0FDLFVBQUEsVUFDQUMsVUFBQSxVQUNBQyxTQUFBLFVBQ0FDLFlBQUEsVUFDQUMsS0FBQSxVQUNBQyxRQUFBLFVBQ0FDLE1BQUEsVUFDQUMsVUFBQSxVQUNBQyxPQUFBLFVBQ0FDLFVBQUEsVUFDQUMsT0FBQSxVQUNBQyxjQUFBLFVBQ0FDLFVBQUEsVUFDQUMsY0FBQSxVQUNBQyxjQUFBLFVB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QUNBQyxjQUFBLENBQUEsSUFBQSxJQUFBLElBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLEVBQUEsSUFBQSxHQUNBQyxTQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsWUFBQSxDQUFBLElBQUEsRUFBQSxLQUNBQyxlQUFBLENBQUEsR0FBQSxJQUFBLElBQ0FDLFdBQUEsQ0FBQSxJQUFBLElBQUEsR0FDQUMsV0FBQSxDQUFBLElBQUEsR0FBQSxLQUNBQyxRQUFBLENBQUEsSUFBQSxFQUFBLEdBQ0FDLFdBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsYUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxjQUFBLENBQUEsR0FBQSxHQUFBLEtBQ0FDLGNBQUEsQ0FBQSxHQUFBLEdBQUEsSUFDQUMsY0FBQSxDQUFBLEdBQUEsR0FBQSxJQUNBQyxjQUFBLENBQUEsRUFBQSxJQUFBLEtBQ0FDLFdBQUEsQ0FBQSxJQUFBLEVBQUEsS0FDQUMsU0FBQSxDQUFBLElBQUEsR0FBQSxLQUNBQyxZQUFBLENBQUEsRUFBQSxJQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsUUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsR0FBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLEdBQUEsSUFDQUMsWUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxZQUFBLENBQUEsR0FBQSxJQUFBLElBQ0FDLFFBQUEsQ0FBQSxJQUFBLEVBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLEtBQUEsQ0FBQSxJQUFBLElBQUEsR0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxJQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLE1BQUEsQ0FBQSxFQUFBLElBQUEsR0FDQUMsWUFBQSxDQUFBLElBQUEsSUFBQSxJQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsUUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxHQUFBLElBQ0FDLE9BQUEsQ0FBQSxHQUFBLEVBQUEsS0FDQUMsTUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxNQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsY0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEdBQ0FDLGFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMscUJBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxZQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGNBQUEsQ0FBQSxHQUFBLElBQUEsS0FDQUMsYUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxlQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGVBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsZUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxZQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLEtBQUEsQ0FBQSxFQUFBLElBQUEsR0FDQUMsVUFBQSxDQUFBLEdBQUEsSUFBQSxJQUNBQyxNQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLEVBQUEsS0FDQUMsT0FBQSxDQUFBLElBQUEsRUFBQSxHQUNBQyxpQkFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsRUFBQSxFQUFBLEtBQ0FDLGFBQUEsQ0FBQSxJQUFBLEdBQUEsS0FDQUMsYUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxlQUFBLENBQUEsR0FBQSxJQUFBLEtBQ0FDLGdCQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGtCQUFBLENBQUEsRUFBQSxJQUFBLEtBQ0FDLGdCQUFBLENBQUEsR0FBQSxJQUFBLEtBQ0FDLGdCQUFBLENBQUEsSUFBQSxHQUFBLEtBQ0FDLGFBQUEsQ0FBQSxHQUFBLEdBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsWUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsRUFBQSxFQUFBLEtBQ0FDLFFBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsTUFBQSxDQUFBLElBQUEsSUFBQSxHQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLElBQ0FDLE9BQUEsQ0FBQSxJQUFBLElBQUEsR0FDQUMsVUFBQSxDQUFBLElBQUEsR0FBQSxHQUNBQyxPQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxjQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLGNBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsV0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLEtBQUEsQ0FBQSxJQUFBLElBQUEsSUFDQUMsS0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxLQUFBLENBQUEsSUFBQSxJQUFBLEtBQ0FDLFdBQUEsQ0FBQSxJQUFBLElBQUEsS0FDQUMsT0FBQSxDQUFBLElBQUEsRUFBQSxLQUNBQyxjQUFBLENBQUEsSUFBQSxHQUFBLEtBQ0FDLElBQUEsQ0FBQSxJQUFBLEVBQUEsR0FDQUMsVUFBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxVQUFBLENBQUEsR0FBQSxJQUFBLEtBQ0FDLFlBQUEsQ0FBQSxJQUFBLEdBQUEsSUFDQUMsT0FBQSxDQUFBLElBQUEsSUFBQSxLQUNBQyxXQUFBLENBQUEsSUFBQSxJQUFBLElBQ0FDLFNBQUEsQ0FBQSxH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YixFQUFBLEdBQUEwRCxLQUFBb1gsSUFBQSxFQUFBNmlGLEdBQ0FqK0YsR0FBQXErRixJQUVBdHVFLEVBQUFwVSxFQUFBM1gsS0FBQW9YLElBQUEsRUFBQWlqRixFQUFBLEdBQUFyNkYsS0FBQW9YLElBQUEsRUFBQTZpRixHQUNBaitGLEVBQUEsSUFJQWkrRixHQUFBLEVBQUE1M0YsRUFBQXNYLEVBQUF2ZCxHQUFBLElBQUEydkIsRUFBQTN2QixHQUFBeUYsRUFBQWtxQixHQUFBLElBQUFrdUUsR0FBQSxHQUlBLElBRkFqK0YsRUFBQUEsR0FBQWkrRixFQUFBbHVFLEVBQ0FvdUUsR0FBQUYsRUFDQUUsRUFBQSxFQUFBOTNGLEVBQUFzWCxFQUFBdmQsR0FBQSxJQUFBSixFQUFBSSxHQUFBeUYsRUFBQTdGLEdBQUEsSUFBQW0rRixHQUFBLEdBRUE5M0YsRUFBQXNYLEVBQUF2ZCxFQUFBeUYsSUFBQSxJQUFBbUMscURDbEZBa25CLEVBQUF3dkUsa0NBQUFueEUsT0FBQXUwRCxTQUFBNXJEIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIlxubW9kdWxlLmV4cG9ydHMgPSBhYnNvbHV0aXplXG5cbi8qKlxuICogcmVkZWZpbmUgYHBhdGhgIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuXG5mdW5jdGlvbiBhYnNvbHV0aXplKHBhdGgpe1xuXHR2YXIgc3RhcnRYID0gMFxuXHR2YXIgc3RhcnRZID0gMFxuXHR2YXIgeCA9IDBcblx0dmFyIHkgPSAwXG5cblx0cmV0dXJuIHBhdGgubWFwKGZ1bmN0aW9uKHNlZyl7XG5cdFx0c2VnID0gc2VnLnNsaWNlKClcblx0XHR2YXIgdHlwZSA9IHNlZ1swXVxuXHRcdHZhciBjb21tYW5kID0gdHlwZS50b1VwcGVyQ2FzZSgpXG5cblx0XHQvLyBpcyByZWxhdGl2ZVxuXHRcdGlmICh0eXBlICE9IGNvbW1hbmQpIHtcblx0XHRcdHNlZ1swXSA9IGNvbW1hbmRcblx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRjYXNlICdhJzpcblx0XHRcdFx0XHRzZWdbNl0gKz0geFxuXHRcdFx0XHRcdHNlZ1s3XSArPSB5XG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0Y2FzZSAndic6XG5cdFx0XHRcdFx0c2VnWzFdICs9IHlcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRjYXNlICdoJzpcblx0XHRcdFx0XHRzZWdbMV0gKz0geFxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDE7IGkgPCBzZWcubGVuZ3RoOykge1xuXHRcdFx0XHRcdFx0c2VnW2krK10gKz0geFxuXHRcdFx0XHRcdFx0c2VnW2krK10gKz0geVxuXHRcdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyB1cGRhdGUgY3Vyc29yIHN0YXRlXG5cdFx0c3dpdGNoIChjb21tYW5kKSB7XG5cdFx0XHRjYXNlICdaJzpcblx0XHRcdFx0eCA9IHN0YXJ0WFxuXHRcdFx0XHR5ID0gc3RhcnRZXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICdIJzpcblx0XHRcdFx0eCA9IHNlZ1sxXVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnVic6XG5cdFx0XHRcdHkgPSBzZWdbMV1cblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ00nOlxuXHRcdFx0XHR4ID0gc3RhcnRYID0gc2VnWzFdXG5cdFx0XHRcdHkgPSBzdGFydFkgPSBzZWdbMl1cblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHggPSBzZWdbc2VnLmxlbmd0aCAtIDJdXG5cdFx0XHRcdHkgPSBzZWdbc2VnLmxlbmd0aCAtIDFdXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNlZ1xuXHR9KVxufVxuIiwiZnVuY3Rpb24gY2xvbmUocG9pbnQpIHsgLy9UT0RPOiB1c2UgZ2wtdmVjMiBmb3IgdGhpc1xuICAgIHJldHVybiBbcG9pbnRbMF0sIHBvaW50WzFdXVxufVxuXG5mdW5jdGlvbiB2ZWMyKHgsIHkpIHtcbiAgICByZXR1cm4gW3gsIHldXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlQmV6aWVyQnVpbGRlcihvcHQpIHtcbiAgICBvcHQgPSBvcHR8fHt9XG5cbiAgICB2YXIgUkVDVVJTSU9OX0xJTUlUID0gdHlwZW9mIG9wdC5yZWN1cnNpb24gPT09ICdudW1iZXInID8gb3B0LnJlY3Vyc2lvbiA6IDhcbiAgICB2YXIgRkxUX0VQU0lMT04gPSB0eXBlb2Ygb3B0LmVwc2lsb24gPT09ICdudW1iZXInID8gb3B0LmVwc2lsb24gOiAxLjE5MjA5MjkwZS03XG4gICAgdmFyIFBBVEhfRElTVEFOQ0VfRVBTSUxPTiA9IHR5cGVvZiBvcHQucGF0aEVwc2lsb24gPT09ICdudW1iZXInID8gb3B0LnBhdGhFcHNpbG9uIDogMS4wXG5cbiAgICB2YXIgY3VydmVfYW5nbGVfdG9sZXJhbmNlX2Vwc2lsb24gPSB0eXBlb2Ygb3B0LmFuZ2xlRXBzaWxvbiA9PT0gJ251bWJlcicgPyBvcHQuYW5nbGVFcHNpbG9uIDogMC4wMVxuICAgIHZhciBtX2FuZ2xlX3RvbGVyYW5jZSA9IG9wdC5hbmdsZVRvbGVyYW5jZSB8fCAwXG4gICAgdmFyIG1fY3VzcF9saW1pdCA9IG9wdC5jdXNwTGltaXQgfHwgMFxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGJlemllckN1cnZlKHN0YXJ0LCBjMSwgYzIsIGVuZCwgc2NhbGUsIHBvaW50cykge1xuICAgICAgICBpZiAoIXBvaW50cylcbiAgICAgICAgICAgIHBvaW50cyA9IFtdXG5cbiAgICAgICAgc2NhbGUgPSB0eXBlb2Ygc2NhbGUgPT09ICdudW1iZXInID8gc2NhbGUgOiAxLjBcbiAgICAgICAgdmFyIGRpc3RhbmNlVG9sZXJhbmNlID0gUEFUSF9ESVNUQU5DRV9FUFNJTE9OIC8gc2NhbGVcbiAgICAgICAgZGlzdGFuY2VUb2xlcmFuY2UgKj0gZGlzdGFuY2VUb2xlcmFuY2VcbiAgICAgICAgYmVnaW4oc3RhcnQsIGMxLCBjMiwgZW5kLCBwb2ludHMsIGRpc3RhbmNlVG9sZXJhbmNlKVxuICAgICAgICByZXR1cm4gcG9pbnRzXG4gICAgfVxuXG5cbiAgICAvLy8vLy8gQmFzZWQgb246XG4gICAgLy8vLy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wZWxzb24vYW50aWdyYWluL2Jsb2IvbWFzdGVyL2FnZy0yLjQvc3JjL2FnZ19jdXJ2ZXMuY3BwXG5cbiAgICBmdW5jdGlvbiBiZWdpbihzdGFydCwgYzEsIGMyLCBlbmQsIHBvaW50cywgZGlzdGFuY2VUb2xlcmFuY2UpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goY2xvbmUoc3RhcnQpKVxuICAgICAgICB2YXIgeDEgPSBzdGFydFswXSxcbiAgICAgICAgICAgIHkxID0gc3RhcnRbMV0sXG4gICAgICAgICAgICB4MiA9IGMxWzBdLFxuICAgICAgICAgICAgeTIgPSBjMVsxXSxcbiAgICAgICAgICAgIHgzID0gYzJbMF0sXG4gICAgICAgICAgICB5MyA9IGMyWzFdLFxuICAgICAgICAgICAgeDQgPSBlbmRbMF0sXG4gICAgICAgICAgICB5NCA9IGVuZFsxXVxuICAgICAgICByZWN1cnNpdmUoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0LCBwb2ludHMsIGRpc3RhbmNlVG9sZXJhbmNlLCAwKVxuICAgICAgICBwb2ludHMucHVzaChjbG9uZShlbmQpKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZSh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQsIHBvaW50cywgZGlzdGFuY2VUb2xlcmFuY2UsIGxldmVsKSB7XG4gICAgICAgIGlmKGxldmVsID4gUkVDVVJTSU9OX0xJTUlUKSBcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIHZhciBwaSA9IE1hdGguUElcblxuICAgICAgICAvLyBDYWxjdWxhdGUgYWxsIHRoZSBtaWQtcG9pbnRzIG9mIHRoZSBsaW5lIHNlZ21lbnRzXG4gICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICB2YXIgeDEyICAgPSAoeDEgKyB4MikgLyAyXG4gICAgICAgIHZhciB5MTIgICA9ICh5MSArIHkyKSAvIDJcbiAgICAgICAgdmFyIHgyMyAgID0gKHgyICsgeDMpIC8gMlxuICAgICAgICB2YXIgeTIzICAgPSAoeTIgKyB5MykgLyAyXG4gICAgICAgIHZhciB4MzQgICA9ICh4MyArIHg0KSAvIDJcbiAgICAgICAgdmFyIHkzNCAgID0gKHkzICsgeTQpIC8gMlxuICAgICAgICB2YXIgeDEyMyAgPSAoeDEyICsgeDIzKSAvIDJcbiAgICAgICAgdmFyIHkxMjMgID0gKHkxMiArIHkyMykgLyAyXG4gICAgICAgIHZhciB4MjM0ICA9ICh4MjMgKyB4MzQpIC8gMlxuICAgICAgICB2YXIgeTIzNCAgPSAoeTIzICsgeTM0KSAvIDJcbiAgICAgICAgdmFyIHgxMjM0ID0gKHgxMjMgKyB4MjM0KSAvIDJcbiAgICAgICAgdmFyIHkxMjM0ID0gKHkxMjMgKyB5MjM0KSAvIDJcblxuICAgICAgICBpZihsZXZlbCA+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+AIC8gMTgwKVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB2ZWMyQ29weShvdXQsIGEpIHtcbiAgICBvdXRbMF0gPSBhWzBdXG4gICAgb3V0WzFdID0gYVsxXVxuICAgIHJldHVybiBvdXRcbn0iLCJjb25zdCBjYW52YXNTa2V0Y2ggPSByZXF1aXJlKCdjYW52YXMtc2tldGNoJyk7XG5jb25zdCB7IHJhbmRvbSwgbWF0aCB9ID0gcmVxdWlyZSgnY2FudmFzLXNrZXRjaC11dGlsJyk7XG5cbi8vIGNhbnZhcy1za2V0Y2ggc2tldGNoLTAzLnRzIC0tb3V0cHV0PW91dHB1dC8wMyAtLXN0cmVhbVxuLy8gc2F2ZSBhcyBhIHZpZGVvIHdpdGggXG4vLyBDTUQrU0hJRlQrUyB0byBzdGFydCB0aGUgc3RyZWFtXG4vLyBDTUQrU0hJRlQrUyBhZ2FpbiB0byBlbmQgdGhlIHN0cmVhbSBhbmQgc2F2ZVxuXG5jb25zdCBzZXR0aW5ncyA9IHtcbiAgZGltZW5zaW9uczogWzEwODAsIDEwODBdLFxuICBhbmltYXRlOiB0cnVlXG59O1xuXG4vLyBNYW51YWwgZXhhbXBsZSBvZiB3aGVuIHRoZSBicm93c2VyIGlzIHJlYWR5IHRvIHBhaW50XG4vLyBicm93c2VyIHRyaWdnZXJzIHdoZW4gaXQncyByZWFkeSB0byBwYWludCBhbm90aGVyIGZyYW1lXG4vLyB3ZSBjYW4gcGFzcyBhIGZ1bmN0aW9uIHRvIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpIHRoYXQgd2UgXG4vLyAgd2FudCB0byBiZSBjYWxsZWQgb24gZXZlcnkgZnJhbWVFbGVtZW50LCBpbiB0aGlzIGNhc2UgaXQncyB0aGUgXG4vLyBhbmltYXRlIGZ1bmN0aW9uXG4vLyBcbi8vIGNvbnN0IGFuaW1hdGUgPSAoKSA9PiB7XG4vLyAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcbi8vIH1cblxuLy8gYW5pbWF0ZSgpXG5cbmNvbnN0IHNrZXRjaCA9ICh7IGNvbnRleHQsIHdpZHRoLCBoZWlnaHQgfSkgPT4ge1xuICBjb25zdCBhZ2VudHMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IDQwOyBpKyspIHtcbiAgICBjb25zdCB4ID0gcmFuZG9tLnJhbmdlKDAsIHdpZHRoKTtcbiAgICBjb25zdCB5ID0gcmFuZG9tLnJhbmdlKDAsIGhlaWdodCk7XG5cbiAgICBhZ2VudHMucHVzaChuZXcgQWdlbnQoeCwgeSkpO1xuICB9XG5cbiAgLy8gV2hlbmV2ZXIgdGhlIGJyb3dzZXIgbmVlZHMgdG8gYW5pbWF0ZSBpdCBjYWxscyB0aGlzIGJlbG93XG4gIHJldHVybiAoeyBjb250ZXh0LCB3aWR0aCwgaGVpZ2h0IH0pID0+IHtcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICd3aGl0ZSc7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWdlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBhZ2VudCA9IGFnZW50c1tpXVxuXG4gICAgICAvLyBEb24ndCBib3RoZXIgY2hlY2tpbmcgdGhlIHNhbWUgYWdlbnQgY29vcmRzIGEgMm5kIHRpbWUuIGxldCBqID0gaSArIDE7XG4gICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBhZ2VudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3Qgb3RoZXIgPSBhZ2VudHNbal07XG5cbiAgICAgICAgY29uc3QgZGlzdCA9IGFnZW50LnBvcy5nZXREaXN0YW5jZShvdGhlci5wb3MpO1xuXG4gICAgICAgIGlmIChkaXN0ID4gMjAwKSBjb250aW51ZTtcblxuICAgICAgICAvLyB3aGVuIGRpc3RhbmNlIGlzIDAgdGhlIGxpbmUgaXMgMTIgYW5kIHdoZW4gaXQncyAyMDAgaXQgd2lsbCBiZSAxXG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gbWF0aC5tYXBSYW5nZShkaXN0LCAwLCAyMDAsIDEyLCAxKTtcblxuICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICBjb250ZXh0Lm1vdmVUbyhhZ2VudC5wb3MueCwgYWdlbnQucG9zLnkpO1xuICAgICAgICBjb250ZXh0LmxpbmVUbyhvdGhlci5wb3MueCwgb3RoZXIucG9zLnkpO1xuICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFnZW50cy5mb3JFYWNoKGFnZW50ID0+IHtcbiAgICAgIGFnZW50LnVwZGF0ZSgpXG4gICAgICBhZ2VudC5kcmF3KGNvbnRleHQpO1xuICAgICAgLy8gYWdlbnQuYm91bmNlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgYWdlbnQud2FycCh3aWR0aCwgaGVpZ2h0KTtcbiAgICB9KVxuICB9O1xufTtcblxuY2FudmFzU2tldGNoKHNrZXRjaCwgc2V0dGluZ3MpO1xuXG5jbGFzcyBWZWN0b3Ige1xuICBjb25zdHJ1Y3Rvcih4LCB5KSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICB9XG5cbiAgZ2V0RGlzdGFuY2Uodikge1xuICAgIGNvbnN0IGR4ID0gdGhpcy54IC0gdi54O1xuICAgIGNvbnN0IGR5ID0gdGhpcy55IC0gdi55O1xuXG4gICAgcmV0dXJuIE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gIH1cbn1cblxuY2xhc3MgQWdlbnQge1xuICBjb25zdHJ1Y3Rvcih4LCB5KSB7XG4gICAgdGhpcy5wb3MgPSBuZXcgVmVjdG9yKHgsIHkpO1xuICAgIHRoaXMudmVsID0gbmV3IFZlY3RvcihyYW5kb20ucmFuZ2UoLTEsIDQpLCByYW5kb20ucmFuZ2UoLTEsIDQpKVxuICAgIHRoaXMucmFkaXVzID0gcmFuZG9tLnJhbmdlKDQsIDE2KTtcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnBvcy54ICs9IHRoaXMudmVsLng7XG4gICAgdGhpcy5wb3MueSArPSB0aGlzLnZlbC55O1xuICB9XG5cbiAgZHJhdyhjb250ZXh0KSB7XG4gICAgY29udGV4dC5zYXZlKCk7XG4gICAgY29udGV4dC50cmFuc2xhdGUodGhpcy5wb3MueCwgdGhpcy5wb3MueSk7XG5cbiAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDQ7XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGNvbnRleHQuYXJjKDAsIDAsIHRoaXMucmFkaXVzLCAwLCBNYXRoLlBJICogMilcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgICBjb250ZXh0LnN0cm9rZSgpO1xuXG4gICAgY29udGV4dC5yZXN0b3JlKCk7XG4gIH1cblxuICBib3VuY2Uod2lkdGgsIGhlaWdodCkge1xuICAgIGlmICh0aGlzLnBvcy54IDw9IDAgfHwgdGhpcy5wb3MueCA+PSB3aWR0aCkgdGhpcy52ZWwueCAqPSAtMTtcbiAgICBpZiAodGhpcy5wb3MueSA8PSAwIHx8IHRoaXMucG9zLnkgPj0gaGVpZ2h0KSB0aGlzLnZlbC55ICo9IC0xO1xuICB9XG5cbiAgd2FycCh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgaWYgKHRoaXMucG9zLnggPiB3aWR0aCkgdGhpcy5wb3MueCA9IDA7XG4gICAgaWYgKHRoaXMucG9zLnggPCAwKSB0aGlzLnBvcy54ID0gd2lkdGg7XG5cbiAgICBpZiAodGhpcy5wb3MueSA+IGhlaWdodCkgdGhpcy5wb3MueSA9IDA7XG4gICAgaWYgKHRoaXMucG9zLnkgPCAwKSB0aGlzLnBvcy55ID0gaGVpZ2h0O1xuICB9XG59IiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/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