!function(e){function t(t){for(var i,s,a=t[0],l=t[1],c=t[2],f=0,d=[];f<a.length;f++)s=a[f],r[s]&&d.push(r[s][0]),r[s]=0;for(i in l)Object.prototype.hasOwnProperty.call(l,i)&&(e[i]=l[i]);for(u&&u(t);d.length;)d.shift()();return o.push.apply(o,c||[]),n()}function n(){for(var e,t=0;t<o.length;t++){for(var n=o[t],i=!0,a=1;a<n.length;a++){var l=n[a];0!==r[l]&&(i=!1)}i&&(o.splice(t--,1),e=s(s.s=n[0]))}return e}var i={},r={infrastructure:0},o=[];function s(t){if(i[t])return i[t].exports;var n=i[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,s),n.l=!0,n.exports}s.e=function(e){var t=[],n=r[e];if(0!==n)if(n)t.push(n[2]);else{var i=new Promise((function(t,i){n=r[e]=[t,i]}));t.push(n[2]=i);var o,a=document.createElement("script");a.charset="utf-8",a.timeout=120,s.nc&&a.setAttribute("nonce",s.nc),a.src=function(e){return s.p+""+({}[e]||e)+".bundle.6.24.0.js"}(e);var l=new Error;o=function(t){a.onerror=a.onload=null,clearTimeout(c);var n=r[e];if(0!==n){if(n){var i=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+i+": "+o+")",l.name="ChunkLoadError",l.type=i,l.request=o,n[1](l)}r[e]=void 0}};var c=setTimeout((function(){o({type:"timeout",target:a})}),12e4);a.onerror=a.onload=o,document.head.appendChild(a)}return Promise.all(t)},s.m=e,s.c=i,s.d=function(e,t,n){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)s.d(n,i,function(t){return e[t]}.bind(null,i));return n},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="/app/",s.oe=function(e){throw console.error(e),e};var a=window.webpackJsonp=window.webpackJsonp||[],l=a.push.bind(a);a.push=t,a=a.slice();for(var c=0;c<a.length;c++)t(a[c]);var u=l;o.push([0]),n()}({"./js/app/piwik.js":function(module,exports,__webpack_require__){(function(module,global){var __WEBPACK_AMD_DEFINE_RESULT__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}"object"!=("undefined"==typeof JSON2?"undefined":_typeof(JSON2))&&"object"==_typeof(window.JSON)&&window.JSON.stringify&&window.JSON.parse?JSON2=window.JSON:function(){var e={};(function(){function t(e,n){function r(e){if(r[e]!==m)return r[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=r("json-stringify")&&r("json-parse");else{var i,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var l=n.stringify,u="function"==typeof l&&b;if(u){(i=function(){return 1}).toJSON=i;try{u="0"===l(0)&&"0"===l(new s)&&'""'==l(new a)&&l(y)===m&&l(m)===m&&l()===m&&"1"===l(i)&&"[1]"==l([i])&&"[null]"==l([m])&&"null"==l(null)&&"[null,null,null]"==l([m,y,null])&&l({a:[i,!0,!1,null,"\0\b\n\f\r\t"]})==o&&"1"===l(null,i)&&"[\n 1,\n 2\n]"==l([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==l(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==l(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==l(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==l(new c(-1))}catch(e){u=!1}}t=u}if("json-parse"==e){var f=n.parse;if("function"==typeof f)try{if(0===f("0")&&!f(!1)){var d=5==(i=f(o)).a.length&&1===i.a[0];if(d){try{d=!f('"\t"')}catch(e){}if(d)try{d=1!==f("01")}catch(e){}if(d)try{d=1!==f("1.")}catch(e){}}}}catch(e){d=!1}t=d}}return r[e]=!!t}e||(e=o.Object()),n||(n=o.Object());var s=e.Number||o.Number,a=e.String||o.String,l=e.Object||o.Object,c=e.Date||o.Date,u=e.SyntaxError||o.SyntaxError,f=e.TypeError||o.TypeError,d=e.Math||o.Math,h=e.JSON||o.JSON;"object"==_typeof(h)&&h&&(n.stringify=h.stringify,n.parse=h.parse);var p,g,m,v=l.prototype,y=v.toString,b=new c(-0xc782b5b800cec);try{b=-109252==b.getUTCFullYear()&&0===b.getUTCMonth()&&1===b.getUTCDate()&&10==b.getUTCHours()&&37==b.getUTCMinutes()&&6==b.getUTCSeconds()&&708==b.getUTCMilliseconds()}catch(e){}if(!r("json")){var w="[object Function]",T="[object Number]",k="[object String]",C="[object Array]",x=r("bug-string-char-index");if(!b)var A=d.floor,E=[0,31,59,90,120,151,181,212,243,273,304,334],N=function(e,t){return E[t]+365*(e-1970)+A((e-1969+(t=+(t>1)))/4)-A((e-1901+t)/100)+A((e-1601+t)/400)};if((p=v.hasOwnProperty)||(p=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?p=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,p=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,p.call(this,e)}),g=function(e,t){var n,r,o,s=0;for(o in(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n)p.call(r,o)&&s++;return n=r=null,s?g=2==s?function(e,t){var n,i={},r=y.call(e)==w;for(n in e)r&&"prototype"==n||p.call(i,n)||!(i[n]=1)||!p.call(e,n)||t(n)}:function(e,t){var n,i,r=y.call(e)==w;for(n in e)r&&"prototype"==n||!p.call(e,n)||(i="constructor"===n)||t(n);(i||p.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],g=function(e,t){var n,o,s=y.call(e)==w,a=!s&&"function"!=typeof e.constructor&&i[_typeof(e.hasOwnProperty)]&&e.hasOwnProperty||p;for(n in e)s&&"prototype"==n||!a.call(e,n)||t(n);for(o=r.length;n=r[--o];a.call(e,n)&&t(n));}),g(e,t)},!r("json-stringify")){var _={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},S=function(e,t){return("000000"+(t||0)).slice(-e)},D=function(e){for(var t='"',n=0,i=e.length,r=!x||i>10,o=r&&(x?e.split(""):e);n<i;n++){var s=e.charCodeAt(n);switch(s){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=_[s];break;default:if(s<32){t+="\\u00"+S(2,s.toString(16));break}t+=r?o[n]:e.charAt(n)}}return t+'"'},I=function e(t,n,i,r,o,s,a){var l,c,u,d,h,v,b,w,x,E,_,I,O,R,j,q;try{l=n[t]}catch(t){}if("object"==_typeof(l)&&l)if("[object Date]"!=(c=y.call(l))||p.call(l,"toJSON"))"function"==typeof l.toJSON&&(c!=T&&c!=k&&c!=C||p.call(l,"toJSON"))&&(l=l.toJSON(t));else if(l>-1/0&&l<1/0){if(N){for(h=A(l/864e5),u=A(h/365.2425)+1970-1;N(u+1,0)<=h;u++);for(d=A((h-N(u,0))/30.42);N(u,d+1)<=h;d++);h=1+h-N(u,d),b=A((v=(l%864e5+864e5)%864e5)/36e5)%24,w=A(v/6e4)%60,x=A(v/1e3)%60,E=v%1e3}else u=l.getUTCFullYear(),d=l.getUTCMonth(),h=l.getUTCDate(),b=l.getUTCHours(),w=l.getUTCMinutes(),x=l.getUTCSeconds(),E=l.getUTCMilliseconds();l=(u<=0||u>=1e4?(u<0?"-":"+")+S(6,u<0?-u:u):S(4,u))+"-"+S(2,d+1)+"-"+S(2,h)+"T"+S(2,b)+":"+S(2,w)+":"+S(2,x)+"."+S(3,E)+"Z"}else l=null;if(i&&(l=i.call(n,t,l)),null===l)return"null";if("[object Boolean]"==(c=y.call(l)))return""+l;if(c==T)return l>-1/0&&l<1/0?""+l:"null";if(c==k)return D(""+l);if("object"==_typeof(l)){for(R=a.length;R--;)if(a[R]===l)throw f();if(a.push(l),_=[],j=s,s+=o,c==C){for(O=0,R=l.length;O<R;O++)I=e(O,l,i,r,o,s,a),_.push(I===m?"null":I);q=_.length?o?"[\n"+s+_.join(",\n"+s)+"\n"+j+"]":"["+_.join(",")+"]":"[]"}else g(r||l,(function(t){var n=e(t,l,i,r,o,s,a);n!==m&&_.push(D(t)+":"+(o?" ":"")+n)})),q=_.length?o?"{\n"+s+_.join(",\n"+s)+"\n"+j+"}":"{"+_.join(",")+"}":"{}";return a.pop(),q}};n.stringify=function(e,t,n){var r,o,s,a;if(i[_typeof(t)]&&t)if((a=y.call(t))==w)o=t;else if(a==C){s={};for(var l,c=0,u=t.length;c<u;l=t[c++],((a=y.call(l))==k||a==T)&&(s[l]=1));}if(n)if((a=y.call(n))==T){if((n-=n%1)>0)for(r="",n>10&&(n=10);r.length<n;r+=" ");}else a==k&&(r=n.length<=10?n:n.slice(0,10));return I("",((l={})[""]=e,l),o,s,r,"",[])}}if(!r("json-parse")){var O,R,j=a.fromCharCode,q={92:"\\",34:'"',47:"/",98:"\b",116:"\t",110:"\n",102:"\f",114:"\r"},P=function(){throw O=R=null,u()},L=function(){for(var e,t,n,i,r,o=R,s=o.length;O<s;)switch(r=o.charCodeAt(O)){case 9:case 10:case 13:case 32:O++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=x?o.charAt(O):o[O],O++,e;case 34:for(e="@",O++;O<s;)if((r=o.charCodeAt(O))<32)P();else if(92==r)switch(r=o.charCodeAt(++O)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=q[r],O++;break;case 117:for(t=++O,n=O+4;O<n;O++)(r=o.charCodeAt(O))>=48&&r<=57||r>=97&&r<=102||r>=65&&r<=70||P();e+=j("0x"+o.slice(t,O));break;default:P()}else{if(34==r)break;for(r=o.charCodeAt(O),t=O;r>=32&&92!=r&&34!=r;)r=o.charCodeAt(++O);e+=o.slice(t,O)}if(34==o.charCodeAt(O))return O++,e;P();default:if(t=O,45==r&&(i=!0,r=o.charCodeAt(++O)),r>=48&&r<=57){for(48==r&&((r=o.charCodeAt(O+1))>=48&&r<=57)&&P(),i=!1;O<s&&((r=o.charCodeAt(O))>=48&&r<=57);O++);if(46==o.charCodeAt(O)){for(n=++O;n<s&&((r=o.charCodeAt(n))>=48&&r<=57);n++);n==O&&P(),O=n}if(101==(r=o.charCodeAt(O))||69==r){for(43!=(r=o.charCodeAt(++O))&&45!=r||O++,n=O;n<s&&((r=o.charCodeAt(n))>=48&&r<=57);n++);n==O&&P(),O=n}return+o.slice(t,O)}if(i&&P(),"true"==o.slice(O,O+4))return O+=4,!0;if("false"==o.slice(O,O+5))return O+=5,!1;if("null"==o.slice(O,O+4))return O+=4,null;P()}return"$"},$=function(e,t,n){var i=F(e,t,n);i===m?delete e[t]:e[t]=i},F=function(e,t,n){var i,r=e[t];if("object"==_typeof(r)&&r)if(y.call(r)==C)for(i=r.length;i--;)$(r,i,n);else g(r,(function(e){$(r,e,n)}));return n.call(e,t,r)};n.parse=function(e,t){var n,i;return O=0,R=""+e,n=function e(t){var n,i;if("$"==t&&P(),"string"==typeof t){if("@"==(x?t.charAt(0):t[0]))return t.slice(1);if("["==t){for(n=[];"]"!=(t=L());i||(i=!0))i&&(","==t?"]"==(t=L())&&P():P()),","==t&&P(),n.push(e(t));return n}if("{"==t){for(n={};"}"!=(t=L());i||(i=!0))i&&(","==t?"}"==(t=L())&&P():P()),","!=t&&"string"==typeof t&&"@"==(x?t.charAt(0):t[0])&&":"==L()||P(),n[t.slice(1)]=e(L());return n}P()}return t}(L()),"$"!=L()&&P(),O=R=null,t&&y.call(t)==w?F(((i={})[""]=n,i),"",t):n}}}return n.runInContext=t,n}var n=__webpack_require__("./node_modules/webpack/buildin/amd-options.js"),i={function:!0,object:!0},r=i[_typeof(e)]&&e&&!e.nodeType&&e,o=i["undefined"==typeof window?"undefined":_typeof(window)]&&window||this,s=r&&i[_typeof(module)]&&module&&!module.nodeType&&"object"==(void 0===global?"undefined":_typeof(global))&&global;if(!s||s.global!==s&&s.window!==s&&s.self!==s||(o=s),r&&!n)t(o,r);else{var a=o.JSON,l=o.JSON3,c=!1,u=t(o,o.JSON3={noConflict:function(){return c||(c=!0,o.JSON=a,o.JSON3=l,a=l=null),u}});o.JSON={parse:u.parse,stringify:u.stringify}}n&&(void 0===(__WEBPACK_AMD_DEFINE_RESULT__=function(){return u}.call(exports,__webpack_require__,exports,module))||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}).call(this),JSON2=e}(),"object"!=("undefined"==typeof _paq?"undefined":_typeof(_paq))&&(_paq=[]),"object"!=("undefined"==typeof Piwik?"undefined":_typeof(Piwik))&&(Piwik=function(){"use strict";function safeDecodeWrapper(e){try{return decodeWrapper(e)}catch(t){return unescape(e)}}function isDefined(e){return"undefined"!==_typeof(e)}function isFunction(e){return"function"==typeof e}function isObject(e){return"object"==_typeof(e)}function isString(e){return"string"==typeof e||e instanceof String}function apply(){var e,t,n;for(e=0;e<arguments.length;e+=1)isString(t=(n=arguments[e]).shift())?asyncTracker[t].apply(asyncTracker,n):t.apply(asyncTracker,n)}function addEventListener(e,t,n,i){return e.addEventListener?(e.addEventListener(t,n,i),!0):e.attachEvent?e.attachEvent("on"+t,n):void(e["on"+t]=n)}function executePluginMethod(e,t){var n,i,r="";for(n in plugins)Object.prototype.hasOwnProperty.call(plugins,n)&&(isFunction(i=plugins[n][e])&&(r+=i(t)));return r}function beforeUnloadHandler(){var e;if(executePluginMethod("unload"),expireDateTime)do{e=new Date}while(e.getTimeAlias()<expireDateTime)}function loadHandler(){var e;if(!hasLoaded)for(hasLoaded=!0,executePluginMethod("load"),e=0;e<registeredOnLoadHandlers.length;e++)registeredOnLoadHandlers[e]();return!0}function addReadyListener(){var e;documentAlias.addEventListener?addEventListener(documentAlias,"DOMContentLoaded",(function e(){documentAlias.removeEventListener("DOMContentLoaded",e,!1),loadHandler()})):documentAlias.attachEvent&&(documentAlias.attachEvent("onreadystatechange",(function e(){"complete"===documentAlias.readyState&&(documentAlias.detachEvent("onreadystatechange",e),loadHandler())})),documentAlias.documentElement.doScroll&&windowAlias===windowAlias.top&&function e(){if(!hasLoaded){try{documentAlias.documentElement.doScroll("left")}catch(t){return void setTimeout(e,0)}loadHandler()}}()),new RegExp("WebKit").test(navigatorAlias.userAgent)&&(e=setInterval((function(){(hasLoaded||/loaded|complete/.test(documentAlias.readyState))&&(clearInterval(e),loadHandler())}),10)),addEventListener(windowAlias,"load",loadHandler,!1)}function loadScript(e,t){var n=documentAlias.createElement("script");n.type="text/javascript",n.src=e,n.readyState?n.onreadystatechange=function(){var e=this.readyState;"loaded"!==e&&"complete"!==e||(n.onreadystatechange=null,t())}:n.onload=t,documentAlias.getElementsByTagName("head")[0].appendChild(n)}function getReferrer(){var e="";try{e=windowAlias.top.document.referrer}catch(t){if(windowAlias.parent)try{e=windowAlias.parent.document.referrer}catch(t){e=""}}return""===e&&(e=documentAlias.referrer),e}function getProtocolScheme(e){var t=new RegExp("^([a-z]+):").exec(e);return t?t[1]:null}function getHostName(e){var t=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)").exec(e);return t?t[1]:e}function getParameter(e,t){var n=new RegExp("[\\?&#]"+t+"=([^&#]*)").exec(e);return n?decodeWrapper(n[1]):""}function utf8_encode(e){return unescape(encodeWrapper(e))}function sha1(e){var t,n,i,r,o,s,a,l,c,u,f=function(e,t){return e<<t|e>>>32-t},d=function(e){var t,n="";for(t=7;t>=0;t--)n+=(e>>>4*t&15).toString(16);return n},h=[],p=1732584193,g=4023233417,m=2562383102,v=271733878,y=3285377520,b=[];for(u=(e=utf8_encode(e)).length,n=0;n<u-3;n+=4)i=e.charCodeAt(n)<<24|e.charCodeAt(n+1)<<16|e.charCodeAt(n+2)<<8|e.charCodeAt(n+3),b.push(i);switch(3&u){case 0:n=2147483648;break;case 1:n=e.charCodeAt(u-1)<<24|8388608;break;case 2:n=e.charCodeAt(u-2)<<24|e.charCodeAt(u-1)<<16|32768;break;case 3:n=e.charCodeAt(u-3)<<24|e.charCodeAt(u-2)<<16|e.charCodeAt(u-1)<<8|128}for(b.push(n);14!=(15&b.length);)b.push(0);for(b.push(u>>>29),b.push(u<<3&4294967295),t=0;t<b.length;t+=16){for(n=0;n<16;n++)h[n]=b[t+n];for(n=16;n<=79;n++)h[n]=f(h[n-3]^h[n-8]^h[n-14]^h[n-16],1);for(r=p,o=g,s=m,a=v,l=y,n=0;n<=19;n++)c=f(r,5)+(o&s|~o&a)+l+h[n]+1518500249&4294967295,l=a,a=s,s=f(o,30),o=r,r=c;for(n=20;n<=39;n++)c=f(r,5)+(o^s^a)+l+h[n]+1859775393&4294967295,l=a,a=s,s=f(o,30),o=r,r=c;for(n=40;n<=59;n++)c=f(r,5)+(o&s|o&a|s&a)+l+h[n]+2400959708&4294967295,l=a,a=s,s=f(o,30),o=r,r=c;for(n=60;n<=79;n++)c=f(r,5)+(o^s^a)+l+h[n]+3395469782&4294967295,l=a,a=s,s=f(o,30),o=r,r=c;p=p+r&4294967295,g=g+o&4294967295,m=m+s&4294967295,v=v+a&4294967295,y=y+l&4294967295}return(c=d(p)+d(g)+d(m)+d(v)+d(y)).toLowerCase()}function urlFixup(e,t,n){return"translate.googleusercontent.com"===e?(""===n&&(n=t),e=getHostName(t=getParameter(t,"u"))):"cc.bingj.com"!==e&&"webcache.googleusercontent.com"!==e&&"74.6."!==e.slice(0,5)||(e=getHostName(t=documentAlias.links[0].href)),[e,t,n]}function domainFixup(e){var t=e.length;return"."===e.charAt(--t)&&(e=e.slice(0,t)),"*."===e.slice(0,2)&&(e=e.slice(1)),e}function titleFixup(e){if(!isString(e=e&&e.text?e.text:e)){var t=documentAlias.getElementsByTagName("title");t&&isDefined(t[0])&&(e=t[0].text)}return e}function getChildrenFromNode(e){return e&&(!isDefined(e.children)&&isDefined(e.childNodes)||isDefined(e.children))?e.children:[]}function containsNodeElement(e,t){return!(!e||!t)&&(e.contains?e.contains(t):e===t||!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t)))}function indexOfArray(e,t){if(e&&e.indexOf)return e.indexOf(t);if(!isDefined(e)||null===e)return-1;if(!e.length)return-1;var n=e.length;if(0===n)return-1;for(var i=0;i<n;){if(e[i]===t)return i;i++}return-1}function isVisible(e){function t(e,t){return windowAlias.getComputedStyle?documentAlias.defaultView.getComputedStyle(e,null)[t]:e.currentStyle?e.currentStyle[t]:void 0}return!!e&&function n(i,r,o,s,a,l,c){var u=i.parentNode;return!!function(e){for(e=e.parentNode;e;){if(e===documentAlias)return!0;e=e.parentNode}return!1}(i)&&(9===u.nodeType||"0"!==t(i,"opacity")&&"none"!==t(i,"display")&&"hidden"!==t(i,"visibility")&&(isDefined(r)&&isDefined(o)&&isDefined(s)&&isDefined(a)&&isDefined(l)&&isDefined(c)||(r=i.offsetTop,a=i.offsetLeft,s=r+i.offsetHeight,o=a+i.offsetWidth,l=i.offsetWidth,c=i.offsetHeight),(e!==i||0!==c&&0!==l||"hidden"!==t(i,"overflow"))&&(!u||("hidden"!==t(u,"overflow")&&"scroll"!==t(u,"overflow")||!(a+1>u.offsetWidth+u.scrollLeft||a+l-1<u.scrollLeft||r+1>u.offsetHeight+u.scrollTop||r+c-1<u.scrollTop))&&(i.offsetParent===u&&(a+=u.offsetLeft,r+=u.offsetTop),n(u,r,o,s,a,l,c)))))}(e)}function getPiwikUrlForOverlay(e,t){return t||("piwik.php"===e.slice(-9)&&(e=e.slice(0,e.length-9)),e)}function isOverlaySession(e){var t="Piwik_Overlay",n=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)$").exec(documentAlias.referrer);if(n){if(n[1]!==String(e))return!1;var i=n[2],r=n[3];windowAlias.name=t+"###"+i+"###"+r}var o=windowAlias.name.split("###");return 3===o.length&&o[0]===t}function injectOverlayScripts(e,t,n){var i=windowAlias.name.split("###"),r=i[1],o=i[2],s=getPiwikUrlForOverlay(e,t);loadScript(s+"plugins/Overlay/client/client.js?v=1",(function(){Piwik_Overlay_Client.initialize(s,n,r,o)}))}function Tracker(trackerUrl,siteId){function setCookie(e,t,n,i,r,o){var s;configCookiesDisabled||(n&&(s=new Date).setTime(s.getTime()+n),documentAlias.cookie=e+"="+encodeWrapper(t)+(n?";expires="+s.toGMTString():"")+";path="+(i||"/")+(r?";domain="+r:"")+(o?";secure":""))}function getCookie(e){if(configCookiesDisabled)return 0;var t=new RegExp("(^|;)[ ]*"+e+"=([^;]*)").exec(documentAlias.cookie);return t?decodeWrapper(t[2]):0}function purify(e){var t;return configDiscardHashTag?(t=new RegExp("#.*"),e.replace(t,"")):e}function resolveRelativeReference(e,t){var n;return getProtocolScheme(t)?t:"/"===t.slice(0,1)?getProtocolScheme(e)+"://"+getHostName(e)+t:((n=(e=purify(e)).indexOf("?"))>=0&&(e=e.slice(0,n)),(n=e.lastIndexOf("/"))!==e.length-1&&(e=e.slice(0,n+1)),e+t)}function isSiteHostName(e){var t,n,i;for(t=0;t<configHostsAlias.length;t++){if(e===(n=domainFixup(configHostsAlias[t].toLowerCase())))return!0;if("."===n.slice(0,1)){if(e===n.slice(1))return!0;if((i=e.length-n.length)>0&&e.slice(i)===n)return!0}}return!1}function getImage(e,t){var n=new Image(1,1);n.onload=function(){iterator=0,"function"==typeof t&&t()},n.src=configTrackerUrl+(configTrackerUrl.indexOf("?")<0?"?":"&")+e}function sendXmlHttpRequest(e,t,n){isDefined(n)&&null!==n||(n=!0);try{var i=windowAlias.XMLHttpRequest?new windowAlias.XMLHttpRequest:windowAlias.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;i.open("POST",configTrackerUrl,!0),i.onreadystatechange=function(){4!==this.readyState||this.status>=200&&this.status<300||!n?"function"==typeof t&&t():getImage(e,t)},i.setRequestHeader("Content-Type",configRequestContentType),i.send(e)}catch(i){n&&getImage(e,t)}}function setExpireDateTime(e){var t=(new Date).getTime()+e;(!expireDateTime||t>expireDateTime)&&(expireDateTime=t)}function heartBeatUp(e){!heartBeatTimeout&&configHeartBeatDelay&&(heartBeatTimeout=setTimeout((function(){if(heartBeatTimeout=null,!heartBeatPingIfActivityAlias()){var e=new Date,t=configHeartBeatDelay-(e.getTime()-lastTrackerRequestTime);heartBeatUp(t=Math.min(configHeartBeatDelay,t))}}),e||configHeartBeatDelay))}function heartBeatDown(){heartBeatTimeout&&(clearTimeout(heartBeatTimeout),heartBeatTimeout=null)}function heartBeatOnFocus(){heartBeatPingIfActivityAlias()||heartBeatUp()}function heartBeatOnBlur(){heartBeatDown()}function setUpHeartBeat(){!heartBeatSetUp&&configHeartBeatDelay&&(heartBeatSetUp=!0,addEventListener(windowAlias,"focus",heartBeatOnFocus),addEventListener(windowAlias,"blur",heartBeatOnBlur),heartBeatUp())}function makeSureThereIsAGapAfterFirstTrackingRequestToPreventMultipleVisitorCreation(e){var t=(new Date).getTime();if(lastTrackerRequestTime=t,timeNextTrackingRequestCanBeExecutedImmediately&&t<timeNextTrackingRequestCanBeExecutedImmediately){var n=timeNextTrackingRequestCanBeExecutedImmediately-t;return setTimeout(e,n),setExpireDateTime(n+50),void(timeNextTrackingRequestCanBeExecutedImmediately+=50)}if(!1===timeNextTrackingRequestCanBeExecutedImmediately){timeNextTrackingRequestCanBeExecutedImmediately=t+800}e()}function sendRequest(e,t,n){!configDoNotTrack&&e&&makeSureThereIsAGapAfterFirstTrackingRequestToPreventMultipleVisitorCreation((function(){"POST"===configRequestMethod?sendXmlHttpRequest(e,n):getImage(e,n),setExpireDateTime(t)})),heartBeatSetUp?heartBeatUp():setUpHeartBeat()}function canSendBulkRequest(e){return!configDoNotTrack&&e&&e.length}function sendBulkRequest(e,t){if(canSendBulkRequest(e)){var n='{"requests":["?'+e.join('","?')+'"]}';makeSureThereIsAGapAfterFirstTrackingRequestToPreventMultipleVisitorCreation((function(){sendXmlHttpRequest(n,null,!1),setExpireDateTime(t)}))}}function getCookieName(e){return configCookieNamePrefix+e+"."+configTrackerSiteId+"."+domainHash}function hasCookies(){if(configCookiesDisabled)return"0";if(!isDefined(navigatorAlias.cookieEnabled)){var e=getCookieName("testcookie");return setCookie(e,"1"),"1"===getCookie(e)?"1":"0"}return navigatorAlias.cookieEnabled?"1":"0"}function updateDomainHash(){domainHash=hash((configCookieDomain||domainAlias)+(configCookiePath||"/")).slice(0,4)}function getCustomVariablesFromCookie(){var e=getCookie(getCookieName("cvar"));return e.length&&isObject(e=JSON2.parse(e))?e:{}}function loadCustomVariables(){!1===customVariables&&(customVariables=getCustomVariablesFromCookie())}function generateRandomUuid(){return hash((navigatorAlias.userAgent||"")+(navigatorAlias.platform||"")+JSON2.stringify(browserFeatures)+(new Date).getTime()+Math.random()).slice(0,16)}function loadVisitorIdCookie(){var e,t=new Date,n=Math.round(t.getTime()/1e3),i=getCookie(getCookieName("id"));return i?((e=i.split(".")).unshift("0"),visitorUUID.length&&(e[1]=visitorUUID),e):e=["1",visitorUUID.length?visitorUUID:"0"===hasCookies()?"":generateRandomUuid(),n,0,n,"",""]}function getValuesFromVisitorIdCookie(){var e=loadVisitorIdCookie(),t=e[0],n=e[1],i=e[2],r=e[3],o=e[4],s=e[5];return isDefined(e[6])||(e[6]=""),{newVisitor:t,uuid:n,createTs:i,visitCount:r,currentVisitTs:o,lastVisitTs:s,lastEcommerceOrderTs:e[6]}}function getRemainingVisitorCookieTimeout(){var e=(new Date).getTime(),t=getValuesFromVisitorIdCookie().createTs;return 1e3*parseInt(t,10)+configVisitorCookieTimeout-e}function setVisitorIdCookie(e){if(configTrackerSiteId){var t=new Date,n=Math.round(t.getTime()/1e3);isDefined(e)||(e=getValuesFromVisitorIdCookie());var i=e.uuid+"."+e.createTs+"."+e.visitCount+"."+n+"."+e.lastVisitTs+"."+e.lastEcommerceOrderTs;setCookie(getCookieName("id"),i,getRemainingVisitorCookieTimeout(),configCookiePath,configCookieDomain)}}function loadReferrerAttributionCookie(){var e=getCookie(getCookieName("ref"));if(e.length)try{if(isObject(e=JSON2.parse(e)))return e}catch(e){}return["","",0,""]}function deleteCookie(e,t,n){setCookie(e,"",-86400,t,n)}function isPossibleToSetCookieOnDomain(e){var t="testvalue";return setCookie("test",t,1e4,null,e),getCookie("test")===t&&(deleteCookie("test",null,e),!0)}function _deleteCookies(){var e=configCookiesDisabled;configCookiesDisabled=!1;var t,n,i=["id","ses","cvar","ref"];for(t=0;t<i.length;t++)0!==getCookie(n=getCookieName(i[t]))&&deleteCookie(n,configCookiePath,configCookieDomain);configCookiesDisabled=e}function _setSiteId(e){configTrackerSiteId=e,setVisitorIdCookie()}function sortObjectByKeys(e){if(e&&isObject(e)){var t,n=[];for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.push(t);var i={};n.sort();var r,o=n.length;for(r=0;r<o;r++)i[n[r]]=e[n[r]];return i}}function setSessionCookie(){setCookie(getCookieName("ses"),"*",configSessionCookieTimeout,configCookiePath,configCookieDomain)}function _getRequest(e,t,n,i){function r(e,t){var n=JSON2.stringify(e);return n.length>2?"&"+t+"="+encodeWrapper(n):""}var o,s,a,l,c,u,f,d=new Date,h=Math.round(d.getTime()/1e3),p=customVariables,g=getCookieName("ses"),m=getCookieName("ref"),v=getCookieName("cvar"),y=getCookie(g),b=loadReferrerAttributionCookie(),w=configCustomUrl||locationHrefAlias;if(configCookiesDisabled&&_deleteCookies(),configDoNotTrack)return"";var T=getValuesFromVisitorIdCookie();isDefined(i)||(i="");var k=documentAlias.characterSet||documentAlias.charset;if(k&&"utf-8"!==k.toLowerCase()||(k=null),u=b[0],f=b[1],s=b[2],a=b[3],!y){var C=configSessionCookieTimeout/1e3;if((!T.lastVisitTs||h-T.lastVisitTs>C)&&(T.visitCount++,T.lastVisitTs=T.currentVisitTs),!configConversionAttributionFirstReferrer||!u.length){for(o in configCampaignNameParameters)if(Object.prototype.hasOwnProperty.call(configCampaignNameParameters,o)&&(u=getParameter(w,configCampaignNameParameters[o])).length)break;for(o in configCampaignKeywordParameters)if(Object.prototype.hasOwnProperty.call(configCampaignKeywordParameters,o)&&(f=getParameter(w,configCampaignKeywordParameters[o])).length)break}l=getHostName(configReferrerUrl),c=a.length?getHostName(a):"",!l.length||isSiteHostName(l)||configConversionAttributionFirstReferrer&&c.length&&!isSiteHostName(c)||(a=configReferrerUrl),(a.length||u.length)&&(b=[u,f,s=h,purify(a.slice(0,1024))],setCookie(m,JSON2.stringify(b),configReferralCookieTimeout,configCookiePath,configCookieDomain))}for(o in e+="&idsite="+configTrackerSiteId+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+d.getHours()+"&m="+d.getMinutes()+"&s="+d.getSeconds()+"&url="+encodeWrapper(purify(w))+(configReferrerUrl.length?"&urlref="+encodeWrapper(purify(configReferrerUrl)):"")+(configUserId&&configUserId.length?"&uid="+encodeWrapper(configUserId):"")+"&_id="+T.uuid+"&_idts="+T.createTs+"&_idvc="+T.visitCount+"&_idn="+T.newVisitor+(u.length?"&_rcn="+encodeWrapper(u):"")+(f.length?"&_rck="+encodeWrapper(f):"")+"&_refts="+s+"&_viewts="+T.lastVisitTs+(String(T.lastEcommerceOrderTs).length?"&_ects="+T.lastEcommerceOrderTs:"")+(String(a).length?"&_ref="+encodeWrapper(purify(a.slice(0,1024))):"")+(k?"&cs="+encodeWrapper(k):"")+"&send_image=0",browserFeatures)Object.prototype.hasOwnProperty.call(browserFeatures,o)&&(e+="&"+o+"="+browserFeatures[o]);t?e+="&data="+encodeWrapper(JSON2.stringify(t)):configCustomData&&(e+="&data="+encodeWrapper(JSON2.stringify(configCustomData)));var x=sortObjectByKeys(customVariablesPage),A=sortObjectByKeys(customVariablesEvent);if(e+=r(x,"cvar"),e+=r(A,"e_cvar"),customVariables){for(o in e+=r(customVariables,"_cvar"),p)Object.prototype.hasOwnProperty.call(p,o)&&(""!==customVariables[o][0]&&""!==customVariables[o][1]||delete customVariables[o]);configStoreCustomVariablesInCookie&&setCookie(v,JSON2.stringify(customVariables),configSessionCookieTimeout,configCookiePath,configCookieDomain)}return configPerformanceTrackingEnabled&&(configPerformanceGenerationTime?e+=">_ms="+configPerformanceGenerationTime:performanceAlias&&performanceAlias.timing&&performanceAlias.timing.requestStart&&performanceAlias.timing.responseEnd&&(e+=">_ms="+(performanceAlias.timing.responseEnd-performanceAlias.timing.requestStart))),T.lastEcommerceOrderTs=isDefined(i)&&String(i).length?i:T.lastEcommerceOrderTs,setVisitorIdCookie(T),setSessionCookie(),e+=executePluginMethod(n),configAppendToTrackingUrl.length&&(e+="&"+configAppendToTrackingUrl),isFunction(configCustomRequestContentProcessing)&&(e=configCustomRequestContentProcessing(e)),e}function logEcommerce(e,t,n,i,r,o){var s,a,l="idgoal=0",c=new Date,u=[];if(String(e).length&&(l+="&ec_id="+encodeWrapper(e),s=Math.round(c.getTime()/1e3)),l+="&revenue="+t,String(n).length&&(l+="&ec_st="+n),String(i).length&&(l+="&ec_tx="+i),String(r).length&&(l+="&ec_sh="+r),String(o).length&&(l+="&ec_dt="+o),ecommerceItems){for(a in ecommerceItems)Object.prototype.hasOwnProperty.call(ecommerceItems,a)&&(isDefined(ecommerceItems[a][1])||(ecommerceItems[a][1]=""),isDefined(ecommerceItems[a][2])||(ecommerceItems[a][2]=""),isDefined(ecommerceItems[a][3])&&0!==String(ecommerceItems[a][3]).length||(ecommerceItems[a][3]=0),isDefined(ecommerceItems[a][4])&&0!==String(ecommerceItems[a][4]).length||(ecommerceItems[a][4]=1),u.push(ecommerceItems[a]));l+="&ec_items="+encodeWrapper(JSON2.stringify(u))}sendRequest(l=_getRequest(l,configCustomData,"ecommerce",s),configTrackerPause)}function logEcommerceOrder(e,t,n,i,r,o){String(e).length&&isDefined(t)&&logEcommerce(e,t,n,i,r,o)}function logEcommerceCartUpdate(e){isDefined(e)&&logEcommerce("",e,"","","","")}function logPageView(e,t){sendRequest((new Date,_getRequest("action_name="+encodeWrapper(titleFixup(e||configTitle)),t,"log")),configTrackerPause)}function getClassesRegExp(e,t){var n,i="(^| )(piwik[_-]"+t;if(e)for(n=0;n<e.length;n++)i+="|"+e[n];return i+=")( |$)",new RegExp(i)}function startsUrlWithTrackerUrl(e){return configTrackerUrl&&e&&0===String(e).indexOf(configTrackerUrl)}function getLinkType(e,t,n,i){if(startsUrlWithTrackerUrl(t))return 0;var r=getClassesRegExp(configDownloadClasses,"download"),o=getClassesRegExp(configLinkClasses,"link"),s=new RegExp("\\.("+configDownloadExtensions.join("|")+")([?&#]|$)","i");return o.test(e)?"link":i||r.test(e)||s.test(t)?"download":n?0:"link"}function getSourceElement(e){var t;for(t=e.parentNode;null!==t&&isDefined(t)&&!query.isLinkElement(e);)t=(e=t).parentNode;return e}function getLinkIfShouldBeProcessed(e){if((e=getSourceElement(e),query.hasNodeAttribute(e,"href")&&isDefined(e.href))&&!startsUrlWithTrackerUrl(query.getAttributeValueFromNode(e,"href"))){var t=e.hostname||getHostName(e.href),n=t.toLowerCase(),i=e.href.replace(t,n);if(!new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto):","i").test(i)){var r=getLinkType(e.className,i,isSiteHostName(n),query.hasNodeAttribute(e,"download"));if(r)return{type:r,href:i}}}}function buildContentInteractionRequest(e,t,n,i){var r=content.buildInteractionRequestParams(e,t,n,i);if(r)return _getRequest(r,null,"contentInteraction")}function buildContentInteractionTrackingRedirectUrl(e,t,n,i,r){if(isDefined(e)){if(startsUrlWithTrackerUrl(e))return e;var o=content.toAbsoluteUrl(e),s="redirecturl="+encodeWrapper(o)+"&";s+=buildContentInteractionRequest(t,n,i,r||e);var a="&";return configTrackerUrl.indexOf("?")<0&&(a="?"),configTrackerUrl+a+s}}function isNodeAuthorizedToTriggerInteraction(e,t){if(!e||!t)return!1;var n=content.findTargetNode(e);return!(content.shouldIgnoreInteraction(n)||(n=content.findTargetNodeNoDefault(e),n&&!containsNodeElement(n,t)))}function getContentInteractionToRequestIfPossible(e,t,n){if(e){var i=content.findParentContentNode(e);if(i&&isNodeAuthorizedToTriggerInteraction(i,e)){var r=content.buildContentBlock(i);if(r)return!r.target&&n&&(r.target=n),content.buildInteractionRequestParams(t,r.name,r.piece,r.target)}}}function wasContentImpressionAlreadyTracked(e){if(!trackedContentImpressions||!trackedContentImpressions.length)return!1;var t,n;for(t=0;t<trackedContentImpressions.length;t++)if((n=trackedContentImpressions[t])&&n.name===e.name&&n.piece===e.piece&&n.target===e.target)return!0;return!1}function replaceHrefIfInternalLink(e){if(!e)return!1;var t=content.findTargetNode(e);if(!t||content.shouldIgnoreInteraction(t))return!1;var n=getLinkIfShouldBeProcessed(t);if(linkTrackingEnabled&&n&&n.type)return!1;if(query.isLinkElement(t)&&query.hasNodeAttributeWithValue(t,"href")){var i=String(query.getAttributeValueFromNode(t,"href"));if(0===i.indexOf("#"))return!1;if(startsUrlWithTrackerUrl(i))return!0;if(!content.isUrlToCurrentDomain(i))return!1;var r=content.buildContentBlock(e);if(!r)return;var o=r.name,s=r.piece,a=r.target;query.hasNodeAttributeWithValue(t,content.CONTENT_TARGET_ATTR)&&!t.wasContentTargetAttrReplaced||(t.wasContentTargetAttrReplaced=!0,a=content.toAbsoluteUrl(i),query.setAnyAttribute(t,content.CONTENT_TARGET_ATTR,a));var l=buildContentInteractionTrackingRedirectUrl(i,"click",o,s,a);return content.setHrefAttribute(t,l),!0}return!1}function replaceHrefsIfInternalLink(e){var t;if(e&&e.length)for(t=0;t<e.length;t++)replaceHrefIfInternalLink(e[t])}function trackContentImpressionClickInteraction(e){return function(t){if(e){var n,i=content.findParentContentNode(e);if(t&&(n=t.target||t.srcElement),n||(n=e),isNodeAuthorizedToTriggerInteraction(i,n)){if(setExpireDateTime(configTrackerPause),query.isLinkElement(e)&&query.hasNodeAttributeWithValue(e,"href")&&query.hasNodeAttributeWithValue(e,content.CONTENT_TARGET_ATTR))!startsUrlWithTrackerUrl(query.getAttributeValueFromNode(e,"href"))&&e.wasContentTargetAttrReplaced&&query.setAnyAttribute(e,content.CONTENT_TARGET_ATTR,"");var r=getLinkIfShouldBeProcessed(e);if(linkTrackingInstalled&&r&&r.type)return r.type;if(replaceHrefIfInternalLink(i))return"href";var o=content.buildContentBlock(i);if(o){var s=buildContentInteractionRequest("click",o.name,o.piece,o.target);return sendRequest(s,configTrackerPause),s}}}}}function setupInteractionsTracking(e){var t,n;if(e&&e.length)for(t=0;t<e.length;t++)(n=content.findTargetNode(e[t]))&&!n.contentInteractionTrackingSetupDone&&(n.contentInteractionTrackingSetupDone=!0,addEventListener(n,"click",trackContentImpressionClickInteraction(n)))}function buildContentImpressionsRequests(e,t){if(!e||!e.length)return[];var n,i;for(n=0;n<e.length;n++)wasContentImpressionAlreadyTracked(e[n])?(e.splice(n,1),n--):trackedContentImpressions.push(e[n]);if(!e||!e.length)return[];replaceHrefsIfInternalLink(t),setupInteractionsTracking(t);var r=[];for(n=0;n<e.length;n++)i=_getRequest(content.buildImpressionRequestParams(e[n].name,e[n].piece,e[n].target),void 0,"contentImpressions"),r.push(i);return r}function getContentImpressionsRequestsFromNodes(e){return buildContentImpressionsRequests(content.collectContent(e),e)}function getCurrentlyVisibleContentImpressionsRequestsIfNotTrackedYet(e){if(!e||!e.length)return[];var t;for(t=0;t<e.length;t++)content.isNodeVisible(e[t])||(e.splice(t,1),t--);return e&&e.length?getContentImpressionsRequestsFromNodes(e):[]}function buildContentImpressionRequest(e,t,n){return _getRequest(content.buildImpressionRequestParams(e,t,n),null,"contentImpression")}function buildContentInteractionRequestNode(e,t){if(e){var n=content.findParentContentNode(e),i=content.buildContentBlock(n);if(i)return t||(t="Unknown"),buildContentInteractionRequest(t,i.name,i.piece,i.target)}}function buildEventRequest(e,t,n,i){return"e_c="+encodeWrapper(e)+"&e_a="+encodeWrapper(t)+(isDefined(n)?"&e_n="+encodeWrapper(n):"")+(isDefined(i)?"&e_v="+encodeWrapper(i):"")}function logEvent(e,t,n,i,r){if(0===String(e).length||0===String(t).length)return!1;sendRequest(_getRequest(buildEventRequest(e,t,n,i),r,"event"),configTrackerPause)}function logSiteSearch(e,t,n,i){sendRequest(_getRequest("search="+encodeWrapper(e)+(t?"&search_cat="+encodeWrapper(t):"")+(isDefined(n)?"&search_count="+n:""),i,"sitesearch"),configTrackerPause)}function logGoal(e,t,n){sendRequest(_getRequest("idgoal="+e+(t?"&revenue="+t:""),n,"goal"),configTrackerPause)}function logLink(e,t,n,i,r){var o=t+"="+encodeWrapper(purify(e)),s=getContentInteractionToRequestIfPossible(r,"click",e);s&&(o+="&"+s),sendRequest(_getRequest(o,n,"link"),i?0:configTrackerPause,i)}function prefixPropertyName(e,t){return""!==e?e+t.charAt(0).toUpperCase()+t.slice(1):t}function trackCallback(e){var t,n,i,r=["","webkit","ms","moz"];if(!configCountPreRendered)for(n=0;n<r.length;n++)if(i=r[n],Object.prototype.hasOwnProperty.call(documentAlias,prefixPropertyName(i,"hidden"))){"prerender"===documentAlias[prefixPropertyName(i,"visibilityState")]&&(t=!0);break}return t?void addEventListener(documentAlias,i+"visibilitychange",(function t(){documentAlias.removeEventListener(i+"visibilitychange",t,!1),e()})):void e()}function trackCallbackOnLoad(e){"complete"===documentAlias.readyState?e():windowAlias.addEventListener?windowAlias.addEventListener("load",e):windowAlias.attachEvent&&windowAlias.attachEvent("onLoad",e)}function trackCallbackOnReady(e){(documentAlias.attachEvent?"complete"===documentAlias.readyState:"loading"!==documentAlias.readyState)?e():documentAlias.addEventListener?documentAlias.addEventListener("DOMContentLoaded",e):documentAlias.attachEvent&&documentAlias.attachEvent("onreadystatechange",e)}function processClick(e){var t=getLinkIfShouldBeProcessed(e);t&&t.type&&(t.href=safeDecodeWrapper(t.href),logLink(t.href,t.type,void 0,null,e))}function isIE8orOlder(){return documentAlias.all&&!documentAlias.addEventListener}function getKeyCodeFromEvent(e){var t=e.which,n=_typeof(e.button);return t||"undefined"===n||(isIE8orOlder()?1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2):0===e.button||"0"===e.button?t=1:1&e.button?t=2:2&e.button&&(t=3)),t}function getNameOfClickedButton(e){switch(getKeyCodeFromEvent(e)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function getTargetElementFromEvent(e){return e.target||e.srcElement}function clickHandler(e){return function(t){var n=getNameOfClickedButton(t=t||windowAlias.event),i=getTargetElementFromEvent(t);if("click"===t.type){var r=!1;e&&"middle"===n&&(r=!0),i&&!r&&processClick(i)}else"mousedown"===t.type?"middle"===n&&i?(lastButton=n,lastTarget=i):lastButton=lastTarget=null:"mouseup"===t.type?(n===lastButton&&i===lastTarget&&processClick(i),lastButton=lastTarget=null):"contextmenu"===t.type&&processClick(i)}}function addClickListener(e,t){addEventListener(e,"click",clickHandler(t),!1),t&&(addEventListener(e,"mouseup",clickHandler(t),!1),addEventListener(e,"mousedown",clickHandler(t),!1),addEventListener(e,"contextmenu",clickHandler(t),!1))}function addClickListeners(e){if(!linkTrackingInstalled){linkTrackingInstalled=!0;var t,n=getClassesRegExp(configIgnoreClasses,"ignore"),i=documentAlias.links;if(i)for(t=0;t<i.length;t++)n.test(i[t].className)||addClickListener(i[t],e)}}function _enableTrackOnlyVisibleContent(e,t,n){function i(){s=!0}if(isTrackOnlyVisibleContentEnabled)return!0;isTrackOnlyVisibleContentEnabled=!0;var r,o,s=!1;trackCallbackOnLoad((function(){if(e){for(r=["scroll","resize"],o=0;o<r.length;o++)documentAlias.addEventListener?documentAlias.addEventListener(r[o],i):windowAlias.attachEvent("on"+r[o],i);!function e(t){setTimeout((function(){isTrackOnlyVisibleContentEnabled&&(s&&(s=!1,n.trackVisibleContentImpressions()),e(t))}),t)}(100)}t&&t>0&&function e(t){setTimeout((function(){isTrackOnlyVisibleContentEnabled&&(s=!1,n.trackVisibleContentImpressions(),e(t))}),t)}(t=parseInt(t,10))}))}function detectBrowserFeatures(){var e,t,n={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"},i=windowAlias.devicePixelRatio||1;if(!new RegExp("MSIE").test(navigatorAlias.userAgent)){if(navigatorAlias.mimeTypes&&navigatorAlias.mimeTypes.length)for(e in n)Object.prototype.hasOwnProperty.call(n,e)&&(t=navigatorAlias.mimeTypes[n[e]],browserFeatures[e]=t&&t.enabledPlugin?"1":"0");"unknown"!=typeof navigator.javaEnabled&&isDefined(navigatorAlias.javaEnabled)&&navigatorAlias.javaEnabled()&&(browserFeatures.java="1"),isFunction(windowAlias.GearsFactory)&&(browserFeatures.gears="1"),browserFeatures.cookie=hasCookies()}browserFeatures.res=screenAlias.width*i+"x"+screenAlias.height*i}function registerHook(hookName,userHook){var hookObj=null;if(isString(hookName)&&!isDefined(registeredHooks[hookName])&&userHook){if(isObject(userHook))hookObj=userHook;else if(isString(userHook))try{eval("hookObj ="+userHook)}catch(e){}registeredHooks[hookName]=hookObj}return hookObj}var registeredHooks={},locationArray=urlFixup(documentAlias.domain,windowAlias.location.href,getReferrer()),domainAlias=domainFixup(locationArray[0]),locationHrefAlias=safeDecodeWrapper(locationArray[1]),configReferrerUrl=safeDecodeWrapper(locationArray[2]),_enableJSErrorTracking=!1,defaultRequestMethod="GET",configRequestMethod=defaultRequestMethod,defaultRequestContentType="application/x-www-form-urlencoded; charset=UTF-8",configRequestContentType=defaultRequestContentType,configTrackerUrl=trackerUrl||"",configApiUrl="",configAppendToTrackingUrl="",configTrackerSiteId=siteId||"",configUserId="",visitorUUID="",configCustomUrl,configTitle=documentAlias.title,configDownloadExtensions=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],configHostsAlias=[domainAlias],configIgnoreClasses=[],configDownloadClasses=[],configLinkClasses=[],configTrackerPause=500,configMinimumVisitTime,configHeartBeatDelay,heartBeatPingIfActivityAlias,configDiscardHashTag,configCustomData,configCampaignNameParameters=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],configCampaignKeywordParameters=["pk_kwd","piwik_kwd","utm_term"],configCookieNamePrefix="_pk_",configCookieDomain,configCookiePath,configCookiesDisabled=!1,configDoNotTrack,configCountPreRendered,configConversionAttributionFirstReferrer,configVisitorCookieTimeout=339552e5,configSessionCookieTimeout=18e5,configReferralCookieTimeout=15768e6,configPerformanceTrackingEnabled=!0,configPerformanceGenerationTime=0,configStoreCustomVariablesInCookie=!1,customVariables=!1,configCustomRequestContentProcessing,customVariablesPage={},customVariablesEvent={},customVariableMaximumLength=200,ecommerceItems={},browserFeatures={},trackedContentImpressions=[],isTrackOnlyVisibleContentEnabled=!1,timeNextTrackingRequestCanBeExecutedImmediately=!1,linkTrackingInstalled=!1,linkTrackingEnabled=!1,heartBeatSetUp=!1,lastTrackerRequestTime=null,heartBeatTimeout,lastButton,lastTarget,hash=sha1,domainHash;return heartBeatPingIfActivityAlias=function(){var e=new Date;return lastTrackerRequestTime+configHeartBeatDelay<=e.getTime()&&(sendRequest(_getRequest("ping=1",null,"ping"),configTrackerPause),!0)},detectBrowserFeatures(),updateDomainHash(),setVisitorIdCookie(),executePluginMethod("run",registerHook),{hook:registeredHooks,getHook:function(e){return registeredHooks[e]},getQuery:function(){return query},getContent:function(){return content},buildContentImpressionRequest:buildContentImpressionRequest,buildContentInteractionRequest:buildContentInteractionRequest,buildContentInteractionRequestNode:buildContentInteractionRequestNode,buildContentInteractionTrackingRedirectUrl:buildContentInteractionTrackingRedirectUrl,getContentImpressionsRequestsFromNodes:getContentImpressionsRequestsFromNodes,getCurrentlyVisibleContentImpressionsRequestsIfNotTrackedYet:getCurrentlyVisibleContentImpressionsRequestsIfNotTrackedYet,trackCallbackOnLoad:trackCallbackOnLoad,trackCallbackOnReady:trackCallbackOnReady,buildContentImpressionsRequests:buildContentImpressionsRequests,wasContentImpressionAlreadyTracked:wasContentImpressionAlreadyTracked,appendContentInteractionToRequestIfPossible:getContentInteractionToRequestIfPossible,setupInteractionsTracking:setupInteractionsTracking,trackContentImpressionClickInteraction:trackContentImpressionClickInteraction,internalIsNodeVisible:isVisible,isNodeAuthorizedToTriggerInteraction:isNodeAuthorizedToTriggerInteraction,replaceHrefIfInternalLink:replaceHrefIfInternalLink,getConfigDownloadExtensions:function(){return configDownloadExtensions},enableTrackOnlyVisibleContent:function(e,t){return _enableTrackOnlyVisibleContent(e,t,this)},clearTrackedContentImpressions:function(){trackedContentImpressions=[]},getTrackedContentImpressions:function(){return trackedContentImpressions},clearEnableTrackOnlyVisibleContent:function(){isTrackOnlyVisibleContentEnabled=!1},disableLinkTracking:function(){linkTrackingInstalled=!1,linkTrackingEnabled=!1},getConfigVisitorCookieTimeout:function(){return configVisitorCookieTimeout},getRemainingVisitorCookieTimeout:getRemainingVisitorCookieTimeout,getVisitorId:function(){return getValuesFromVisitorIdCookie().uuid},getVisitorInfo:function(){return loadVisitorIdCookie()},getAttributionInfo:function(){return loadReferrerAttributionCookie()},getAttributionCampaignName:function(){return loadReferrerAttributionCookie()[0]},getAttributionCampaignKeyword:function(){return loadReferrerAttributionCookie()[1]},getAttributionReferrerTimestamp:function(){return loadReferrerAttributionCookie()[2]},getAttributionReferrerUrl:function(){return loadReferrerAttributionCookie()[3]},setTrackerUrl:function(e){configTrackerUrl=e},getTrackerUrl:function(){return configTrackerUrl},getSiteId:function(){return configTrackerSiteId},setSiteId:function(e){_setSiteId(e)},setUserId:function(e){isDefined(e)&&e.length&&(visitorUUID=hash(configUserId=e).substr(0,16))},getUserId:function(){return configUserId},setCustomData:function(e,t){isObject(e)?configCustomData=e:(configCustomData||(configCustomData={}),configCustomData[e]=t)},getCustomData:function(){return configCustomData},setCustomRequestProcessing:function(e){configCustomRequestContentProcessing=e},appendToTrackingUrl:function(e){configAppendToTrackingUrl=e},getRequest:function(e){return _getRequest(e)},addPlugin:function(e,t){plugins[e]=t},setCustomVariable:function(e,t,n,i){var r;isDefined(i)||(i="visit"),isDefined(t)&&(isDefined(n)||(n=""),e>0&&(t=isString(t)?t:String(t),n=isString(n)?n:String(n),r=[t.slice(0,customVariableMaximumLength),n.slice(0,customVariableMaximumLength)],"visit"===i||2===i?(loadCustomVariables(),customVariables[e]=r):"page"===i||3===i?customVariablesPage[e]=r:"event"===i&&(customVariablesEvent[e]=r)))},getCustomVariable:function(e,t){var n;return isDefined(t)||(t="visit"),"page"===t||3===t?n=customVariablesPage[e]:"event"===t?n=customVariablesEvent[e]:"visit"!==t&&2!==t||(loadCustomVariables(),n=customVariables[e]),!(!isDefined(n)||n&&""===n[0])&&n},deleteCustomVariable:function(e,t){this.getCustomVariable(e,t)&&this.setCustomVariable(e,"","",t)},storeCustomVariablesInCookie:function(){configStoreCustomVariablesInCookie=!0},setLinkTrackingTimer:function(e){configTrackerPause=e},setDownloadExtensions:function(e){isString(e)&&(e=e.split("|")),configDownloadExtensions=e},addDownloadExtensions:function(e){var t;for(isString(e)&&(e=e.split("|")),t=0;t<e.length;t++)configDownloadExtensions.push(e[t])},removeDownloadExtensions:function(e){var t,n=[];for(isString(e)&&(e=e.split("|")),t=0;t<configDownloadExtensions.length;t++)-1===indexOfArray(e,configDownloadExtensions[t])&&n.push(configDownloadExtensions[t]);configDownloadExtensions=n},setDomains:function(e){(configHostsAlias=isString(e)?[e]:e).push(domainAlias)},setIgnoreClasses:function(e){configIgnoreClasses=isString(e)?[e]:e},setRequestMethod:function(e){configRequestMethod=e||defaultRequestMethod},setRequestContentType:function(e){configRequestContentType=e||defaultRequestContentType},setReferrerUrl:function(e){configReferrerUrl=e},setCustomUrl:function(e){configCustomUrl=resolveRelativeReference(locationHrefAlias,e)},setDocumentTitle:function(e){configTitle=e},setAPIUrl:function(e){configApiUrl=e},setDownloadClasses:function(e){configDownloadClasses=isString(e)?[e]:e},setLinkClasses:function(e){configLinkClasses=isString(e)?[e]:e},setCampaignNameKey:function(e){configCampaignNameParameters=isString(e)?[e]:e},setCampaignKeywordKey:function(e){configCampaignKeywordParameters=isString(e)?[e]:e},discardHashTag:function(e){configDiscardHashTag=e},setCookieNamePrefix:function(e){configCookieNamePrefix=e,customVariables=getCustomVariablesFromCookie()},setCookieDomain:function(e){var t=domainFixup(e);isPossibleToSetCookieOnDomain(t)&&(configCookieDomain=t,updateDomainHash())},setCookiePath:function(e){configCookiePath=e,updateDomainHash()},setVisitorCookieTimeout:function(e){configVisitorCookieTimeout=1e3*e},setSessionCookieTimeout:function(e){configSessionCookieTimeout=1e3*e},setReferralCookieTimeout:function(e){configReferralCookieTimeout=1e3*e},setConversionAttributionFirstReferrer:function(e){configConversionAttributionFirstReferrer=e},disableCookies:function(){configCookiesDisabled=!0,browserFeatures.cookie="0",configTrackerSiteId&&_deleteCookies()},deleteCookies:function(){_deleteCookies()},setDoNotTrack:function(e){var t=navigatorAlias.doNotTrack||navigatorAlias.msDoNotTrack;(configDoNotTrack=e&&("yes"===t||"1"===t))&&this.disableCookies()},addListener:function(e,t){addClickListener(e,t)},enableLinkTracking:function(e){linkTrackingEnabled=!0,hasLoaded?addClickListeners(e):registeredOnLoadHandlers.push((function(){addClickListeners(e)}))},enableJSErrorTracking:function(){if(!_enableJSErrorTracking){_enableJSErrorTracking=!0;var e=windowAlias.onerror;windowAlias.onerror=function(t,n,i,r,o){return trackCallback((function(){var e=n+":"+i;r&&(e+=":"+r),logEvent("JavaScript Errors",e,t)})),!!e&&e(t,n,i,r,o)}}},disablePerformanceTracking:function(){configPerformanceTrackingEnabled=!1},setGenerationTimeMs:function(e){configPerformanceGenerationTime=parseInt(e,10)},enableHeartBeatTimer:function(e){e=Math.max(e,1),configHeartBeatDelay=1e3*(e||15),null!==lastTrackerRequestTime&&setUpHeartBeat()},disableHeartBeatTimer:function(){heartBeatDown(),configHeartBeatDelay=null,window.removeEventListener("focus",heartBeatOnFocus),window.removeEventListener("blur",heartBeatOnBlur)},killFrame:function(){windowAlias.location!==windowAlias.top.location&&(windowAlias.top.location=windowAlias.location)},redirectFile:function(e){"file:"===windowAlias.location.protocol&&(windowAlias.location=e)},setCountPreRendered:function(e){configCountPreRendered=e},trackGoal:function(e,t,n){trackCallback((function(){logGoal(e,t,n)}))},trackLink:function(e,t,n,i){trackCallback((function(){logLink(e,t,n,i)}))},trackPageView:function(e,t){trackedContentImpressions=[],trackCallback(isOverlaySession(configTrackerSiteId)?function(){injectOverlayScripts(configTrackerUrl,configApiUrl,configTrackerSiteId)}:function(){logPageView(e,t)})},trackAllContentImpressions:function(){isOverlaySession(configTrackerSiteId)||trackCallback((function(){trackCallbackOnReady((function(){sendBulkRequest(getContentImpressionsRequestsFromNodes(content.findContentNodes()),configTrackerPause)}))}))},trackVisibleContentImpressions:function(e,t){isOverlaySession(configTrackerSiteId)||(isDefined(e)||(e=!0),isDefined(t)||(t=750),_enableTrackOnlyVisibleContent(e,t,this),trackCallback((function(){trackCallbackOnLoad((function(){sendBulkRequest(getCurrentlyVisibleContentImpressionsRequestsIfNotTrackedYet(content.findContentNodes()),configTrackerPause)}))})))},trackContentImpression:function(e,t,n){isOverlaySession(configTrackerSiteId)||e&&(t=t||"Unknown",trackCallback((function(){sendRequest(buildContentImpressionRequest(e,t,n),configTrackerPause)})))},trackContentImpressionsWithinNode:function(e){!isOverlaySession(configTrackerSiteId)&&e&&trackCallback((function(){isTrackOnlyVisibleContentEnabled?trackCallbackOnLoad((function(){sendBulkRequest(getCurrentlyVisibleContentImpressionsRequestsIfNotTrackedYet(content.findContentNodesWithinNode(e)),configTrackerPause)})):trackCallbackOnReady((function(){sendBulkRequest(getContentImpressionsRequestsFromNodes(content.findContentNodesWithinNode(e)),configTrackerPause)}))}))},trackContentInteraction:function(e,t,n,i){isOverlaySession(configTrackerSiteId)||e&&t&&(n=n||"Unknown",trackCallback((function(){sendRequest(buildContentInteractionRequest(e,t,n,i),configTrackerPause)})))},trackContentInteractionNode:function(e,t){!isOverlaySession(configTrackerSiteId)&&e&&trackCallback((function(){sendRequest(buildContentInteractionRequestNode(e,t),configTrackerPause)}))},logAllContentBlocksOnPage:function(){var e=content.findContentNodes(),t=content.collectContent(e);void 0!==console&&console&&console.log&&console.log(t)},trackEvent:function(e,t,n,i){trackCallback((function(){logEvent(e,t,n,i)}))},trackSiteSearch:function(e,t,n){trackCallback((function(){logSiteSearch(e,t,n)}))},setEcommerceView:function(e,t,n,i){isDefined(n)&&n.length?n instanceof Array&&(n=JSON2.stringify(n)):n="",customVariablesPage[5]=["_pkc",n],isDefined(i)&&String(i).length&&(customVariablesPage[2]=["_pkp",i]),(isDefined(e)&&e.length||isDefined(t)&&t.length)&&(isDefined(e)&&e.length&&(customVariablesPage[3]=["_pks",e]),isDefined(t)&&t.length||(t=""),customVariablesPage[4]=["_pkn",t])},addEcommerceItem:function(e,t,n,i,r){e.length&&(ecommerceItems[e]=[e,t,n,i,r])},trackEcommerceOrder:function(e,t,n,i,r,o){logEcommerceOrder(e,t,n,i,r,o)},trackEcommerceCartUpdate:function(e){logEcommerceCartUpdate(e)}}}function TrackerProxy(){return{push:apply}}function applyMethodsInOrder(e,t){var n,i,r={};for(n=0;n<t.length;n++){var o=t[n];for(r[o]=1,i=0;i<e.length;i++)if(e[i]&&e[i][0]){var s=e[i][0];o===s&&(apply(e[i]),delete e[i],r[s]>1&&void 0!==console&&console&&console.error&&console.error("The method "+s+' is registered more than once in "paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers'),r[s]++)}}return e}var expireDateTime,plugins={},documentAlias=document,navigatorAlias=navigator,screenAlias=screen,windowAlias=window,performanceAlias=windowAlias.performance||windowAlias.mozPerformance||windowAlias.msPerformance||windowAlias.webkitPerformance,hasLoaded=!1,registeredOnLoadHandlers=[],encodeWrapper=windowAlias.encodeURIComponent,decodeWrapper=windowAlias.decodeURIComponent,urldecode=unescape,asyncTracker,iterator,Piwik,query={htmlCollectionToArray:function(e){var t,n=[];if(!e||!e.length)return n;for(t=0;t<e.length;t++)n.push(e[t]);return n},find:function(e){if(!document.querySelectorAll||!e)return[];var t=document.querySelectorAll(e);return this.htmlCollectionToArray(t)},findMultiple:function(e){if(!e||!e.length)return[];var t,n,i=[];for(t=0;t<e.length;t++)n=this.find(e[t]),i=i.concat(n);return this.makeNodesUnique(i)},findNodesByTagName:function(e,t){if(!e||!t||!e.getElementsByTagName)return[];var n=e.getElementsByTagName(t);return this.htmlCollectionToArray(n)},makeNodesUnique:function(e){var t=[].concat(e);if(e.sort((function(e,n){if(e===n)return 0;var i=indexOfArray(t,e),r=indexOfArray(t,n);return i===r?0:i>r?-1:1})),e.length<=1)return e;var n,i=0,r=0,o=[];for(n=e[i++];n;)n===e[i]&&(r=o.push(i)),n=e[i++]||null;for(;r--;)e.splice(o[r],1);return e},getAttributeValueFromNode:function(e,t){if(this.hasNodeAttribute(e,t)){if(e&&e.getAttribute)return e.getAttribute(t);if(e&&e.attributes)if("undefined"!==_typeof(e.attributes[t])){if(e.attributes[t].value)return e.attributes[t].value;if(e.attributes[t].nodeValue)return e.attributes[t].nodeValue;var n,i=e.attributes;if(i){for(n=0;n<i.length;n++)if(i[n].nodeName===t)return i[n].nodeValue;return null}}}},hasNodeAttributeWithValue:function(e,t){return!!this.getAttributeValueFromNode(e,t)},hasNodeAttribute:function(e,t){return e&&e.hasAttribute?e.hasAttribute(t):!(!e||!e.attributes)&&"undefined"!==_typeof(e.attributes[t])},hasNodeCssClass:function(e,t){if(e&&t&&e.className&&-1!==indexOfArray("string"==typeof e.className?e.className.split(" "):[],t))return!0;return!1},findNodesHavingAttribute:function(e,t,n){if(n||(n=[]),!e||!t)return n;var i,r,o=getChildrenFromNode(e);if(!o||!o.length)return n;for(i=0;i<o.length;i++)r=o[i],this.hasNodeAttribute(r,t)&&n.push(r),n=this.findNodesHavingAttribute(r,t,n);return n},findFirstNodeHavingAttribute:function(e,t){if(e&&t){if(this.hasNodeAttribute(e,t))return e;var n=this.findNodesHavingAttribute(e,t);return n&&n.length?n[0]:void 0}},findFirstNodeHavingAttributeWithValue:function(e,t){if(e&&t){if(this.hasNodeAttributeWithValue(e,t))return e;var n,i=this.findNodesHavingAttribute(e,t);if(i&&i.length)for(n=0;n<i.length;n++)if(this.getAttributeValueFromNode(i[n],t))return i[n]}},findNodesHavingCssClass:function(e,t,n){if(n||(n=[]),!e||!t)return n;if(e.getElementsByClassName){var i=e.getElementsByClassName(t);return this.htmlCollectionToArray(i)}var r,o,s=getChildrenFromNode(e);if(!s||!s.length)return[];for(r=0;r<s.length;r++)o=s[r],this.hasNodeCssClass(o,t)&&n.push(o),n=this.findNodesHavingCssClass(o,t,n);return n},findFirstNodeHavingClass:function(e,t){if(e&&t){if(this.hasNodeCssClass(e,t))return e;var n=this.findNodesHavingCssClass(e,t);return n&&n.length?n[0]:void 0}},isLinkElement:function(e){if(!e)return!1;return-1!==indexOfArray(["a","area"],String(e.nodeName).toLowerCase())},setAnyAttribute:function(e,t,n){e&&t&&(e.setAttribute?e.setAttribute(t,n):e[t]=n)}},content={CONTENT_ATTR:"data-track-content",CONTENT_CLASS:"piwikTrackContent",CONTENT_NAME_ATTR:"data-content-name",CONTENT_PIECE_ATTR:"data-content-piece",CONTENT_PIECE_CLASS:"piwikContentPiece",CONTENT_TARGET_ATTR:"data-content-target",CONTENT_TARGET_CLASS:"piwikContentTarget",CONTENT_IGNOREINTERACTION_ATTR:"data-content-ignoreinteraction",CONTENT_IGNOREINTERACTION_CLASS:"piwikContentIgnoreInteraction",location:void 0,findContentNodes:function(){var e="."+this.CONTENT_CLASS,t="["+this.CONTENT_ATTR+"]";return query.findMultiple([e,t])},findContentNodesWithinNode:function(e){if(!e)return[];var t,n=query.findNodesHavingCssClass(e,this.CONTENT_CLASS),i=query.findNodesHavingAttribute(e,this.CONTENT_ATTR);if(i&&i.length)for(t=0;t<i.length;t++)n.push(i[t]);return(query.hasNodeAttribute(e,this.CONTENT_ATTR)||query.hasNodeCssClass(e,this.CONTENT_CLASS))&&n.push(e),query.makeNodesUnique(n)},findParentContentNode:function(e){if(e)for(var t=e,n=0;t&&t!==documentAlias&&t.parentNode;){if(query.hasNodeAttribute(t,this.CONTENT_ATTR))return t;if(query.hasNodeCssClass(t,this.CONTENT_CLASS))return t;if(t=t.parentNode,n>1e3)break;n++}},findPieceNode:function(e){var t;return(t=query.findFirstNodeHavingAttribute(e,this.CONTENT_PIECE_ATTR))||(t=query.findFirstNodeHavingClass(e,this.CONTENT_PIECE_CLASS)),t||e},findTargetNodeNoDefault:function(e){if(e){var t=query.findFirstNodeHavingAttributeWithValue(e,this.CONTENT_TARGET_ATTR);return t||((t=query.findFirstNodeHavingAttribute(e,this.CONTENT_TARGET_ATTR))?t:(t=query.findFirstNodeHavingClass(e,this.CONTENT_TARGET_CLASS))||void 0)}},findTargetNode:function(e){var t=this.findTargetNodeNoDefault(e);return t||e},findContentName:function(e){if(e){var t=query.findFirstNodeHavingAttributeWithValue(e,this.CONTENT_NAME_ATTR);if(t)return query.getAttributeValueFromNode(t,this.CONTENT_NAME_ATTR);var n=this.findContentPiece(e);if(n)return this.removeDomainIfIsInLink(n);if(query.hasNodeAttributeWithValue(e,"title"))return query.getAttributeValueFromNode(e,"title");var i=this.findPieceNode(e);if(query.hasNodeAttributeWithValue(i,"title"))return query.getAttributeValueFromNode(i,"title");var r=this.findTargetNode(e);return query.hasNodeAttributeWithValue(r,"title")?query.getAttributeValueFromNode(r,"title"):void 0}},findContentPiece:function(e){if(e){var t=query.findFirstNodeHavingAttributeWithValue(e,this.CONTENT_PIECE_ATTR);if(t)return query.getAttributeValueFromNode(t,this.CONTENT_PIECE_ATTR);var n=this.findPieceNode(e),i=this.findMediaUrlInNode(n);return i?this.toAbsoluteUrl(i):void 0}},findContentTarget:function(e){if(e){var t,n=this.findTargetNode(e);if(query.hasNodeAttributeWithValue(n,this.CONTENT_TARGET_ATTR))return query.getAttributeValueFromNode(n,this.CONTENT_TARGET_ATTR);if(query.hasNodeAttributeWithValue(n,"href"))return t=query.getAttributeValueFromNode(n,"href"),this.toAbsoluteUrl(t);var i=this.findPieceNode(e);return query.hasNodeAttributeWithValue(i,"href")?(t=query.getAttributeValueFromNode(i,"href"),this.toAbsoluteUrl(t)):void 0}},isSameDomain:function(e){if(!e||!e.indexOf)return!1;if(0===e.indexOf(this.getLocation().origin))return!0;var t=e.indexOf(this.getLocation().host);return 8>=t&&0<=t},removeDomainIfIsInLink:function(e){return e&&e.search&&-1!==e.search(new RegExp("^https?://[^/]+"))&&this.isSameDomain(e)&&((e=e.replace(new RegExp("^.*//[^/]+"),""))||(e="/")),e},findMediaUrlInNode:function(e){if(e){var t=e.nodeName.toLowerCase();if(-1!==indexOfArray(["img","embed","video","audio"],t)&&query.findFirstNodeHavingAttributeWithValue(e,"src")){var n=query.findFirstNodeHavingAttributeWithValue(e,"src");return query.getAttributeValueFromNode(n,"src")}if("object"===t&&query.hasNodeAttributeWithValue(e,"data"))return query.getAttributeValueFromNode(e,"data");if("object"===t){var i,r=query.findNodesByTagName(e,"param");if(r&&r.length)for(i=0;i<r.length;i++)if("movie"===query.getAttributeValueFromNode(r[i],"name")&&query.hasNodeAttributeWithValue(r[i],"value"))return query.getAttributeValueFromNode(r[i],"value");var o=query.findNodesByTagName(e,"embed");if(o&&o.length)return this.findMediaUrlInNode(o[0])}}},trim:function(e){return e&&String(e)===e?e.replace(/^\s+|\s+$/g,""):e},isOrWasNodeInViewport:function(e){if(!e||!e.getBoundingClientRect||1!==e.nodeType)return!0;var t=e.getBoundingClientRect(),n=documentAlias.documentElement||{},i=t.top<0;i&&e.offsetTop&&(i=e.offsetTop+t.height>0);var r=n.clientWidth;windowAlias.innerWidth&&r>windowAlias.innerWidth&&(r=windowAlias.innerWidth);var o=n.clientHeight;return windowAlias.innerHeight&&o>windowAlias.innerHeight&&(o=windowAlias.innerHeight),(t.bottom>0||i)&&t.right>0&&t.left<r&&(t.top<o||i)},isNodeVisible:function(e){var t=isVisible(e),n=this.isOrWasNodeInViewport(e);return t&&n},buildInteractionRequestParams:function(e,t,n,i){var r="";return e&&(r+="c_i="+encodeWrapper(e)),t&&(r&&(r+="&"),r+="c_n="+encodeWrapper(t)),n&&(r&&(r+="&"),r+="c_p="+encodeWrapper(n)),i&&(r&&(r+="&"),r+="c_t="+encodeWrapper(i)),r},buildImpressionRequestParams:function(e,t,n){var i="c_n="+encodeWrapper(e)+"&c_p="+encodeWrapper(t);return n&&(i+="&c_t="+encodeWrapper(n)),i},buildContentBlock:function(e){if(e){var t=this.findContentName(e),n=this.findContentPiece(e),i=this.findContentTarget(e);return{name:(t=this.trim(t))||"Unknown",piece:(n=this.trim(n))||"Unknown",target:(i=this.trim(i))||""}}},collectContent:function(e){if(!e||!e.length)return[];var t,n,i=[];for(t=0;t<e.length;t++)isDefined(n=this.buildContentBlock(e[t]))&&i.push(n);return i},setLocation:function(e){this.location=e},getLocation:function(){var e=this.location||windowAlias.location;return e.origin||(e.origin=e.protocol+"//"+e.hostname+(e.port?":"+e.port:"")),e},toAbsoluteUrl:function(e){if((!e||String(e)!==e)&&""!==e)return e;if(""===e)return this.getLocation().href;if(-1!==e.search(/^\/\//))return this.getLocation().protocol+e;if(-1!==e.search(/:\/\//))return e;if(0===e.indexOf("#"))return this.getLocation().origin+this.getLocation().pathname+e;if(0===e.indexOf("?"))return this.getLocation().origin+this.getLocation().pathname+e;if(0===e.search("^[a-zA-Z]{2,11}:"))return e;if(-1!==e.search(/^\//))return this.getLocation().origin+e;return this.getLocation().origin+this.getLocation().pathname.match(new RegExp("(.*/)"))[0]+e},isUrlToCurrentDomain:function(e){var t=this.toAbsoluteUrl(e);if(!t)return!1;var n=this.getLocation().origin;return n===t||0===String(t).indexOf(n)&&":"!==String(t).substr(n.length,1)},setHrefAttribute:function(e,t){e&&t&&query.setAnyAttribute(e,"href",t)},shouldIgnoreInteraction:function(e){var t=query.hasNodeAttribute(e,this.CONTENT_IGNOREINTERACTION_ATTR),n=query.hasNodeCssClass(e,this.CONTENT_IGNOREINTERACTION_CLASS);return t||n}};addEventListener(windowAlias,"beforeunload",beforeUnloadHandler,!1),addReadyListener(),Date.prototype.getTimeAlias=Date.prototype.getTime,asyncTracker=new Tracker;var applyFirst=["disableCookies","setTrackerUrl","setAPIUrl","setCookiePath","setCookieDomain","setUserId","setSiteId","enableLinkTracking"];for(_paq=applyMethodsInOrder(_paq,applyFirst),iterator=0;iterator<_paq.length;iterator++)_paq[iterator]&&apply(_paq[iterator]);return _paq=new TrackerProxy,Piwik={addPlugin:function(e,t){plugins[e]=t},getTracker:function(e,t){return isDefined(t)||(t=this.getAsyncTracker().getSiteId()),isDefined(e)||(e=this.getAsyncTracker().getTrackerUrl()),new Tracker(e,t)},getAsyncTracker:function(){return asyncTracker}},__WEBPACK_AMD_DEFINE_ARRAY__=[],__WEBPACK_AMD_DEFINE_RESULT__=function(){return Piwik}.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__),void 0!==__WEBPACK_AMD_DEFINE_RESULT__&&(module.exports=__WEBPACK_AMD_DEFINE_RESULT__),Piwik}()),window&&window.piwikAsyncInit&&window.piwikAsyncInit(),"undefined"===("undefined"==typeof AnalyticsTracker?"undefined":_typeof(AnalyticsTracker))&&(AnalyticsTracker=Piwik),"function"!=typeof piwik_log&&(piwik_log=function(e,t,n,i){"use strict";function r(e){try{if(window["piwik_"+e])return window["piwik_"+e]}catch(e){}}var o,s=Piwik.getTracker(n,t);s.setDocumentTitle(e),s.setCustomData(i),(o=r("tracker_pause"))&&s.setLinkTrackingTimer(o),(o=r("download_extensions"))&&s.setDownloadExtensions(o),(o=r("hosts_alias"))&&s.setDomains(o),(o=r("ignore_classes"))&&s.setIgnoreClasses(o),s.trackPageView(),r("install_tracker")&&(piwik_track=function(e,t,n,i){s.setSiteId(t),s.setTrackerUrl(n),s.trackLink(e,i)},s.enableLinkTracking())})}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module),__webpack_require__("./node_modules/webpack/buildin/global.js"))},"./js/app/tracking.js":function(e,t,n){var i,r;i=[n("./js/app/piwik.js"),n("./node_modules/jquery/dist/jquery.js")],void 0===(r=function(e,t){"use strict";return _paq.push(["setTrackerUrl",tracking_server]),_paq.push(["setSiteId",+tracking_id_site]),_paq.push(["disableCookies"]),_paq.push(["trackPageView"]),t((function(){t("body").on("click","#searchButton",(function(){t("#searchString").val()&&_paq.push(["trackSiteSearch",t("#searchString").val()])}));var e=function(e){var t=document.createElement("a");return t.href=e,t.href},n=new RegExp("(pdf|xls|txt|zip|xml)$");t("body").on("click","a",(function(i){t(this).attr("href")&&(n.test(t(this).attr("href"))?_paq.push(["trackLink",e(t(this).attr("href")),"download"]):_paq.push(["trackLink",e(t(this).attr("href")),"link"]))}))})),_paq}.apply(t,i))||(e.exports=r)},"./node_modules/bootstrap-datepicker/dist/bootstrap-datepicker.js":function(e,t,n){(function(e){!function(e){var t=function(t,i){if(this.element=e(t),this.format=n.parseFormat(i.format||this.element.data("date-format")||"mm/dd/yyyy"),this.picker=e(n.template).appendTo("body").on({click:e.proxy(this.click,this)}),this.isInput=this.element.is("input"),this.component=!!this.element.is(".date")&&this.element.find(".add-on"),this.isInput?this.element.on({focus:e.proxy(this.show,this),keyup:e.proxy(this.update,this)}):this.component?this.component.on("click",e.proxy(this.show,this)):this.element.on("click",e.proxy(this.show,this)),this.minViewMode=i.minViewMode||this.element.data("date-minviewmode")||0,"string"==typeof this.minViewMode)switch(this.minViewMode){case"months":this.minViewMode=1;break;case"years":this.minViewMode=2;break;default:this.minViewMode=0}if(this.viewMode=i.viewMode||this.element.data("date-viewmode")||0,"string"==typeof this.viewMode)switch(this.viewMode){case"months":this.viewMode=1;break;case"years":this.viewMode=2;break;default:this.viewMode=0}this.startViewMode=this.viewMode,this.weekStart=i.weekStart||this.element.data("date-weekstart")||0,this.weekEnd=0===this.weekStart?6:this.weekStart-1,this.onRender=i.onRender,this.fillDow(),this.fillMonths(),this.update(),this.showMode()};t.prototype={constructor:t,show:function(t){this.picker.show(),this.height=this.component?this.component.outerHeight():this.element.outerHeight(),this.place(),e(window).on("resize",e.proxy(this.place,this)),t&&(t.stopPropagation(),t.preventDefault()),this.isInput;var n=this;e(document).on("mousedown",(function(t){0==e(t.target).closest(".datepicker").length&&n.hide()})),this.element.trigger({type:"show",date:this.date})},hide:function(){this.picker.hide(),e(window).off("resize",this.place),this.viewMode=this.startViewMode,this.showMode(),this.isInput||e(document).off("mousedown",this.hide),this.element.trigger({type:"hide",date:this.date})},set:function(){var e=n.formatDate(this.date,this.format);this.isInput?this.element.prop("value",e):(this.component&&this.element.find("input").prop("value",e),this.element.data("date",e))},setValue:function(e){this.date="string"==typeof e?n.parseDate(e,this.format):new Date(e),this.set(),this.viewDate=new Date(this.date.getFullYear(),this.date.getMonth(),1,0,0,0,0),this.fill()},place:function(){var e=this.component?this.component.offset():this.element.offset();this.picker.css({top:e.top+this.height,left:e.left})},update:function(e){this.date=n.parseDate("string"==typeof e?e:this.isInput?this.element.prop("value"):this.element.data("date"),this.format),this.viewDate=new Date(this.date.getFullYear(),this.date.getMonth(),1,0,0,0,0),this.fill()},fillDow:function(){for(var e=this.weekStart,t="<tr>";e<this.weekStart+7;)t+='<th class="dow">'+n.dates.daysMin[e++%7]+"</th>";t+="</tr>",this.picker.find(".datepicker-days thead").append(t)},fillMonths:function(){for(var e="",t=0;t<12;)e+='<span class="month">'+n.dates.monthsShort[t++]+"</span>";this.picker.find(".datepicker-months td").append(e)},fill:function(){var e=new Date(this.viewDate),t=e.getFullYear(),i=e.getMonth(),r=this.date.valueOf();this.picker.find(".datepicker-days th:eq(1)").text(n.dates.months[i]+" "+t);var o=new Date(t,i-1,28,0,0,0,0),s=n.getDaysInMonth(o.getFullYear(),o.getMonth());o.setDate(s),o.setDate(s-(o.getDay()-this.weekStart+7)%7);var a=new Date(o);a.setDate(a.getDate()+42),a=a.valueOf();for(var l,c,u,f=[];o.valueOf()<a;)o.getDay()===this.weekStart&&f.push("<tr>"),l=this.onRender(o),c=o.getFullYear(),(u=o.getMonth())<i&&c===t||c<t?l+=" old":(u>i&&c===t||c>t)&&(l+=" new"),o.valueOf()===r&&(l+=" active"),f.push('<td class="day '+l+'">'+o.getDate()+"</td>"),o.getDay()===this.weekEnd&&f.push("</tr>"),o.setDate(o.getDate()+1);this.picker.find(".datepicker-days tbody").empty().append(f.join(""));var d=this.date.getFullYear(),h=this.picker.find(".datepicker-months").find("th:eq(1)").text(t).end().find("span").removeClass("active");d===t&&h.eq(this.date.getMonth()).addClass("active"),f="",t=10*parseInt(t/10,10);var p=this.picker.find(".datepicker-years").find("th:eq(1)").text(t+"-"+(t+9)).end().find("td");t-=1;for(var g=-1;g<11;g++)f+='<span class="year'+(-1===g||10===g?" old":"")+(d===t?" active":"")+'">'+t+"</span>",t+=1;p.html(f)},click:function(t){t.stopPropagation(),t.preventDefault();var i=e(t.target).closest("span, td, th");if(1===i.length)switch(i[0].nodeName.toLowerCase()){case"th":switch(i[0].className){case"switch":this.showMode(1);break;case"prev":case"next":this.viewDate["set"+n.modes[this.viewMode].navFnc].call(this.viewDate,this.viewDate["get"+n.modes[this.viewMode].navFnc].call(this.viewDate)+n.modes[this.viewMode].navStep*("prev"===i[0].className?-1:1)),this.fill(),this.set()}break;case"span":if(i.is(".month")){var r=i.parent().find("span").index(i);this.viewDate.setMonth(r)}else{var o=parseInt(i.text(),10)||0;this.viewDate.setFullYear(o)}0!==this.viewMode&&(this.date=new Date(this.viewDate),this.element.trigger({type:"changeDate",date:this.date,viewMode:n.modes[this.viewMode].clsName})),this.showMode(-1),this.fill(),this.set();break;case"td":if(i.is(".day")&&!i.is(".disabled")){var s=parseInt(i.text(),10)||1;r=this.viewDate.getMonth();i.is(".old")?r-=1:i.is(".new")&&(r+=1);o=this.viewDate.getFullYear();this.date=new Date(o,r,s,0,0,0,0),this.viewDate=new Date(o,r,Math.min(28,s),0,0,0,0),this.fill(),this.set(),this.element.trigger({type:"changeDate",date:this.date,viewMode:n.modes[this.viewMode].clsName})}}},mousedown:function(e){e.stopPropagation(),e.preventDefault()},showMode:function(e){e&&(this.viewMode=Math.max(this.minViewMode,Math.min(2,this.viewMode+e))),this.picker.find(">div").hide().filter(".datepicker-"+n.modes[this.viewMode].clsName).show()}},e.fn.datepicker=function(n,i){return this.each((function(){var r=e(this),o=r.data("datepicker"),s="object"==typeof n&&n;o||r.data("datepicker",o=new t(this,e.extend({},e.fn.datepicker.defaults,s))),"string"==typeof n&&o[n](i)}))},e.fn.datepicker.defaults={onRender:function(e){return""}},e.fn.datepicker.Constructor=t;var n={modes:[{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],dates:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]},isLeapYear:function(e){return e%4==0&&e%100!=0||e%400==0},getDaysInMonth:function(e,t){return[31,n.isLeapYear(e)?29:28,31,30,31,30,31,31,30,31,30,31][t]},parseFormat:function(e){var t=e.match(/[.\/\-\s].*?/),n=e.split(/\W+/);if(!t||!n||0===n.length)throw new Error("Invalid date format.");return{separator:t,parts:n}},parseDate:function(e,t){var n,i=e.split(t.separator);if((e=new Date).setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0),i.length===t.parts.length){for(var r=e.getFullYear(),o=e.getDate(),s=e.getMonth(),a=0,l=t.parts.length;a<l;a++)switch(n=parseInt(i[a],10)||1,t.parts[a]){case"dd":case"d":o=n,e.setDate(n);break;case"mm":case"m":s=n-1,e.setMonth(n-1);break;case"yy":r=2e3+n,e.setFullYear(2e3+n);break;case"yyyy":r=n,e.setFullYear(n)}e=new Date(r,s,o,0,0,0)}return e},formatDate:function(e,t){var n={d:e.getDate(),m:e.getMonth()+1,yy:e.getFullYear().toString().substring(2),yyyy:e.getFullYear()};n.dd=(n.d<10?"0":"")+n.d,n.mm=(n.m<10?"0":"")+n.m;e=[];for(var i=0,r=t.parts.length;i<r;i++)e.push(n[t.parts[i]]);return e.join(t.separator)},headTemplate:'<thead><tr><th class="prev">‹</th><th colspan="5" class="switch"></th><th class="next">›</th></tr></thead>',contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>'};n.template='<div class="datepicker dropdown-menu"><div class="datepicker-days"><table class="table">'+n.headTemplate+'<tbody></tbody></table></div><div class="datepicker-months"><table class="table">'+n.headTemplate+n.contTemplate+'</table></div><div class="datepicker-years"><table class="table">'+n.headTemplate+n.contTemplate+"</table></div></div>"}(e)}).call(this,n("./node_modules/jquery/dist/jquery.js"))},"./node_modules/bootstrap/dist/js/bootstrap.js":function(e,t,n){(function(e){if(void 0===e)throw new Error("Bootstrap's JavaScript requires jQuery");!function(e){"use strict";var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1==t[0]&&9==t[1]&&t[2]<1||t[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(e),function(e){"use strict";e.fn.emulateTransitionEnd=function(t){var n=!1,i=this;e(this).one("bsTransitionEnd",(function(){n=!0}));return setTimeout((function(){n||e(i).trigger(e.support.transition.end)}),t),this},e((function(){e.support.transition=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in t)if(void 0!==e.style[n])return{end:t[n]};return!1}(),e.support.transition&&(e.event.special.bsTransitionEnd={bindType:e.support.transition.end,delegateType:e.support.transition.end,handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}})}))}(e),function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.VERSION="3.4.1",n.TRANSITION_DURATION=150,n.prototype.close=function(t){var i=e(this),r=i.attr("data-target");r||(r=(r=i.attr("href"))&&r.replace(/.*(?=#[^\s]*$)/,"")),r="#"===r?[]:r;var o=e(document).find(r);function s(){o.detach().trigger("closed.bs.alert").remove()}t&&t.preventDefault(),o.length||(o=i.closest(".alert")),o.trigger(t=e.Event("close.bs.alert")),t.isDefaultPrevented()||(o.removeClass("in"),e.support.transition&&o.hasClass("fade")?o.one("bsTransitionEnd",s).emulateTransitionEnd(n.TRANSITION_DURATION):s())};var i=e.fn.alert;e.fn.alert=function(t){return this.each((function(){var i=e(this),r=i.data("bs.alert");r||i.data("bs.alert",r=new n(this)),"string"==typeof t&&r[t].call(i)}))},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=i,this},e(document).on("click.bs.alert.data-api",t,n.prototype.close)}(e),function(e){"use strict";var t=function(n,i){this.$element=e(n),this.options=e.extend({},t.DEFAULTS,i),this.isLoading=!1};function n(n){return this.each((function(){var i=e(this),r=i.data("bs.button"),o="object"==typeof n&&n;r||i.data("bs.button",r=new t(this,o)),"toggle"==n?r.toggle():n&&r.setState(n)}))}t.VERSION="3.4.1",t.DEFAULTS={loadingText:"loading..."},t.prototype.setState=function(t){var n="disabled",i=this.$element,r=i.is("input")?"val":"html",o=i.data();t+="Text",null==o.resetText&&i.data("resetText",i[r]()),setTimeout(e.proxy((function(){i[r](null==o[t]?this.options[t]:o[t]),"loadingText"==t?(this.isLoading=!0,i.addClass(n).attr(n,n).prop(n,!0)):this.isLoading&&(this.isLoading=!1,i.removeClass(n).removeAttr(n).prop(n,!1))}),this),0)},t.prototype.toggle=function(){var e=!0,t=this.$element.closest('[data-toggle="buttons"]');if(t.length){var n=this.$element.find("input");"radio"==n.prop("type")?(n.prop("checked")&&(e=!1),t.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==n.prop("type")&&(n.prop("checked")!==this.$element.hasClass("active")&&(e=!1),this.$element.toggleClass("active")),n.prop("checked",this.$element.hasClass("active")),e&&n.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var i=e.fn.button;e.fn.button=n,e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=i,this},e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var i=e(t.target).closest(".btn");n.call(i,"toggle"),e(t.target).is('input[type="radio"], input[type="checkbox"]')||(t.preventDefault(),i.is("input,button")?i.trigger("focus"):i.find("input:visible,button:visible").first().trigger("focus"))})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){e(t.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(t.type))}))}(e),function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",e.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",e.proxy(this.pause,this)).on("mouseleave.bs.carousel",e.proxy(this.cycle,this))};function n(n){return this.each((function(){var i=e(this),r=i.data("bs.carousel"),o=e.extend({},t.DEFAULTS,i.data(),"object"==typeof n&&n),s="string"==typeof n?n:o.slide;r||i.data("bs.carousel",r=new t(this,o)),"number"==typeof n?r.to(n):s?r[s]():o.interval&&r.pause().cycle()}))}t.VERSION="3.4.1",t.TRANSITION_DURATION=600,t.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},t.prototype.keydown=function(e){if(!/input|textarea/i.test(e.target.tagName)){switch(e.which){case 37:this.prev();break;case 39:this.next();break;default:return}e.preventDefault()}},t.prototype.cycle=function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},t.prototype.getItemIndex=function(e){return this.$items=e.parent().children(".item"),this.$items.index(e||this.$active)},t.prototype.getItemForDirection=function(e,t){var n=this.getItemIndex(t);if(("prev"==e&&0===n||"next"==e&&n==this.$items.length-1)&&!this.options.wrap)return t;var i=(n+("prev"==e?-1:1))%this.$items.length;return this.$items.eq(i)},t.prototype.to=function(e){var t=this,n=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(e>this.$items.length-1||e<0))return this.sliding?this.$element.one("slid.bs.carousel",(function(){t.to(e)})):n==e?this.pause().cycle():this.slide(e>n?"next":"prev",this.$items.eq(e))},t.prototype.pause=function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},t.prototype.next=function(){if(!this.sliding)return this.slide("next")},t.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},t.prototype.slide=function(n,i){var r=this.$element.find(".item.active"),o=i||this.getItemForDirection(n,r),s=this.interval,a="next"==n?"left":"right",l=this;if(o.hasClass("active"))return this.sliding=!1;var c=o[0],u=e.Event("slide.bs.carousel",{relatedTarget:c,direction:a});if(this.$element.trigger(u),!u.isDefaultPrevented()){if(this.sliding=!0,s&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var f=e(this.$indicators.children()[this.getItemIndex(o)]);f&&f.addClass("active")}var d=e.Event("slid.bs.carousel",{relatedTarget:c,direction:a});return e.support.transition&&this.$element.hasClass("slide")?(o.addClass(n),"object"==typeof o&&o.length&&o[0].offsetWidth,r.addClass(a),o.addClass(a),r.one("bsTransitionEnd",(function(){o.removeClass([n,a].join(" ")).addClass("active"),r.removeClass(["active",a].join(" ")),l.sliding=!1,setTimeout((function(){l.$element.trigger(d)}),0)})).emulateTransitionEnd(t.TRANSITION_DURATION)):(r.removeClass("active"),o.addClass("active"),this.sliding=!1,this.$element.trigger(d)),s&&this.cycle(),this}};var i=e.fn.carousel;e.fn.carousel=n,e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=i,this};var r=function(t){var i=e(this),r=i.attr("href");r&&(r=r.replace(/.*(?=#[^\s]+$)/,""));var o=i.attr("data-target")||r,s=e(document).find(o);if(s.hasClass("carousel")){var a=e.extend({},s.data(),i.data()),l=i.attr("data-slide-to");l&&(a.interval=!1),n.call(s,a),l&&s.data("bs.carousel").to(l),t.preventDefault()}};e(document).on("click.bs.carousel.data-api","[data-slide]",r).on("click.bs.carousel.data-api","[data-slide-to]",r),e(window).on("load",(function(){e('[data-ride="carousel"]').each((function(){var t=e(this);n.call(t,t.data())}))}))}(e),function(e){"use strict";var t=function(n,i){this.$element=e(n),this.options=e.extend({},t.DEFAULTS,i),this.$trigger=e('[data-toggle="collapse"][href="#'+n.id+'"],[data-toggle="collapse"][data-target="#'+n.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function n(t){var n,i=t.attr("data-target")||(n=t.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return e(document).find(i)}function i(n){return this.each((function(){var i=e(this),r=i.data("bs.collapse"),o=e.extend({},t.DEFAULTS,i.data(),"object"==typeof n&&n);!r&&o.toggle&&/show|hide/.test(n)&&(o.toggle=!1),r||i.data("bs.collapse",r=new t(this,o)),"string"==typeof n&&r[n]()}))}t.VERSION="3.4.1",t.TRANSITION_DURATION=350,t.DEFAULTS={toggle:!0},t.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},t.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var n,r=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(r&&r.length&&(n=r.data("bs.collapse"))&&n.transitioning)){var o=e.Event("show.bs.collapse");if(this.$element.trigger(o),!o.isDefaultPrevented()){r&&r.length&&(i.call(r,"hide"),n||r.data("bs.collapse",null));var s=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[s](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var a=function(){this.$element.removeClass("collapsing").addClass("collapse in")[s](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!e.support.transition)return a.call(this);var l=e.camelCase(["scroll",s].join("-"));this.$element.one("bsTransitionEnd",e.proxy(a,this)).emulateTransitionEnd(t.TRANSITION_DURATION)[s](this.$element[0][l])}}}},t.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var n=e.Event("hide.bs.collapse");if(this.$element.trigger(n),!n.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var r=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!e.support.transition)return r.call(this);this.$element[i](0).one("bsTransitionEnd",e.proxy(r,this)).emulateTransitionEnd(t.TRANSITION_DURATION)}}},t.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},t.prototype.getParent=function(){return e(document).find(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(e.proxy((function(t,i){var r=e(i);this.addAriaAndCollapsedClass(n(r),r)}),this)).end()},t.prototype.addAriaAndCollapsedClass=function(e,t){var n=e.hasClass("in");e.attr("aria-expanded",n),t.toggleClass("collapsed",!n).attr("aria-expanded",n)};var r=e.fn.collapse;e.fn.collapse=i,e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=r,this},e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){var r=e(this);r.attr("data-target")||t.preventDefault();var o=n(r),s=o.data("bs.collapse")?"toggle":r.data();i.call(o,s)}))}(e),function(e){"use strict";var t='[data-toggle="dropdown"]',n=function(t){e(t).on("click.bs.dropdown",this.toggle)};function i(t){var n=t.attr("data-target");n||(n=(n=t.attr("href"))&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var i="#"!==n?e(document).find(n):null;return i&&i.length?i:t.parent()}function r(n){n&&3===n.which||(e(".dropdown-backdrop").remove(),e(t).each((function(){var t=e(this),r=i(t),o={relatedTarget:this};r.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&e.contains(r[0],n.target)||(r.trigger(n=e.Event("hide.bs.dropdown",o)),n.isDefaultPrevented()||(t.attr("aria-expanded","false"),r.removeClass("open").trigger(e.Event("hidden.bs.dropdown",o)))))})))}n.VERSION="3.4.1",n.prototype.toggle=function(t){var n=e(this);if(!n.is(".disabled, :disabled")){var o=i(n),s=o.hasClass("open");if(r(),!s){"ontouchstart"in document.documentElement&&!o.closest(".navbar-nav").length&&e(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(e(this)).on("click",r);var a={relatedTarget:this};if(o.trigger(t=e.Event("show.bs.dropdown",a)),t.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),o.toggleClass("open").trigger(e.Event("shown.bs.dropdown",a))}return!1}},n.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var r=e(this);if(n.preventDefault(),n.stopPropagation(),!r.is(".disabled, :disabled")){var o=i(r),s=o.hasClass("open");if(!s&&27!=n.which||s&&27==n.which)return 27==n.which&&o.find(t).trigger("focus"),r.trigger("click");var a=o.find(".dropdown-menu li:not(.disabled):visible a");if(a.length){var l=a.index(n.target);38==n.which&&l>0&&l--,40==n.which&&l<a.length-1&&l++,~l||(l=0),a.eq(l).trigger("focus")}}}};var o=e.fn.dropdown;e.fn.dropdown=function(t){return this.each((function(){var i=e(this),r=i.data("bs.dropdown");r||i.data("bs.dropdown",r=new n(this)),"string"==typeof t&&r[t].call(i)}))},e.fn.dropdown.Constructor=n,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=o,this},e(document).on("click.bs.dropdown.data-api",r).on("click.bs.dropdown.data-api",".dropdown form",(function(e){e.stopPropagation()})).on("click.bs.dropdown.data-api",t,n.prototype.toggle).on("keydown.bs.dropdown.data-api",t,n.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",n.prototype.keydown)}(e),function(e){"use strict";var t=function(t,n){this.options=n,this.$body=e(document.body),this.$element=e(t),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.fixedContent=".navbar-fixed-top, .navbar-fixed-bottom",this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,e.proxy((function(){this.$element.trigger("loaded.bs.modal")}),this))};function n(n,i){return this.each((function(){var r=e(this),o=r.data("bs.modal"),s=e.extend({},t.DEFAULTS,r.data(),"object"==typeof n&&n);o||r.data("bs.modal",o=new t(this,s)),"string"==typeof n?o[n](i):s.show&&o.show(i)}))}t.VERSION="3.4.1",t.TRANSITION_DURATION=300,t.BACKDROP_TRANSITION_DURATION=150,t.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},t.prototype.toggle=function(e){return this.isShown?this.hide():this.show(e)},t.prototype.show=function(n){var i=this,r=e.Event("show.bs.modal",{relatedTarget:n});this.$element.trigger(r),this.isShown||r.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',e.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",(function(){i.$element.one("mouseup.dismiss.bs.modal",(function(t){e(t.target).is(i.$element)&&(i.ignoreBackdropClick=!0)}))})),this.backdrop((function(){var r=e.support.transition&&i.$element.hasClass("fade");i.$element.parent().length||i.$element.appendTo(i.$body),i.$element.show().scrollTop(0),i.adjustDialog(),r&&i.$element[0].offsetWidth,i.$element.addClass("in"),i.enforceFocus();var o=e.Event("shown.bs.modal",{relatedTarget:n});r?i.$dialog.one("bsTransitionEnd",(function(){i.$element.trigger("focus").trigger(o)})).emulateTransitionEnd(t.TRANSITION_DURATION):i.$element.trigger("focus").trigger(o)})))},t.prototype.hide=function(n){n&&n.preventDefault(),n=e.Event("hide.bs.modal"),this.$element.trigger(n),this.isShown&&!n.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),e(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),e.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",e.proxy(this.hideModal,this)).emulateTransitionEnd(t.TRANSITION_DURATION):this.hideModal())},t.prototype.enforceFocus=function(){e(document).off("focusin.bs.modal").on("focusin.bs.modal",e.proxy((function(e){document===e.target||this.$element[0]===e.target||this.$element.has(e.target).length||this.$element.trigger("focus")}),this))},t.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",e.proxy((function(e){27==e.which&&this.hide()}),this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},t.prototype.resize=function(){this.isShown?e(window).on("resize.bs.modal",e.proxy(this.handleUpdate,this)):e(window).off("resize.bs.modal")},t.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop((function(){e.$body.removeClass("modal-open"),e.resetAdjustments(),e.resetScrollbar(),e.$element.trigger("hidden.bs.modal")}))},t.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},t.prototype.backdrop=function(n){var i=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var o=e.support.transition&&r;if(this.$backdrop=e(document.createElement("div")).addClass("modal-backdrop "+r).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",e.proxy((function(e){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:e.target===e.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide())}),this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!n)return;o?this.$backdrop.one("bsTransitionEnd",n).emulateTransitionEnd(t.BACKDROP_TRANSITION_DURATION):n()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var s=function(){i.removeBackdrop(),n&&n()};e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",s).emulateTransitionEnd(t.BACKDROP_TRANSITION_DURATION):s()}else n&&n()},t.prototype.handleUpdate=function(){this.adjustDialog()},t.prototype.adjustDialog=function(){var e=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&e?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!e?this.scrollbarWidth:""})},t.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},t.prototype.checkScrollbar=function(){var e=window.innerWidth;if(!e){var t=document.documentElement.getBoundingClientRect();e=t.right-Math.abs(t.left)}this.bodyIsOverflowing=document.body.clientWidth<e,this.scrollbarWidth=this.measureScrollbar()},t.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"";var n=this.scrollbarWidth;this.bodyIsOverflowing&&(this.$body.css("padding-right",t+n),e(this.fixedContent).each((function(t,i){var r=i.style.paddingRight,o=e(i).css("padding-right");e(i).data("padding-right",r).css("padding-right",parseFloat(o)+n+"px")})))},t.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad),e(this.fixedContent).each((function(t,n){var i=e(n).data("padding-right");e(n).removeData("padding-right"),n.style.paddingRight=i||""}))},t.prototype.measureScrollbar=function(){var e=document.createElement("div");e.className="modal-scrollbar-measure",this.$body.append(e);var t=e.offsetWidth-e.clientWidth;return this.$body[0].removeChild(e),t};var i=e.fn.modal;e.fn.modal=n,e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=i,this},e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var i=e(this),r=i.attr("href"),o=i.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(document).find(o),a=s.data("bs.modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},s.data(),i.data());i.is("a")&&t.preventDefault(),s.one("show.bs.modal",(function(e){e.isDefaultPrevented()||s.one("hidden.bs.modal",(function(){i.is(":visible")&&i.trigger("focus")}))})),n.call(s,a,this)}))}(e),function(e){"use strict";var t=["sanitize","whiteList","sanitizeFn"],n=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],i={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},r=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,o=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function s(t,i){var s=t.nodeName.toLowerCase();if(-1!==e.inArray(s,i))return-1===e.inArray(s,n)||Boolean(t.nodeValue.match(r)||t.nodeValue.match(o));for(var a=e(i).filter((function(e,t){return t instanceof RegExp})),l=0,c=a.length;l<c;l++)if(s.match(a[l]))return!0;return!1}function a(t,n,i){if(0===t.length)return t;if(i&&"function"==typeof i)return i(t);if(!document.implementation||!document.implementation.createHTMLDocument)return t;var r=document.implementation.createHTMLDocument("sanitization");r.body.innerHTML=t;for(var o=e.map(n,(function(e,t){return t})),a=e(r.body).find("*"),l=0,c=a.length;l<c;l++){var u=a[l],f=u.nodeName.toLowerCase();if(-1!==e.inArray(f,o))for(var d=e.map(u.attributes,(function(e){return e})),h=[].concat(n["*"]||[],n[f]||[]),p=0,g=d.length;p<g;p++)s(d[p],h)||u.removeAttribute(d[p].nodeName);else u.parentNode.removeChild(u)}return r.body.innerHTML}var l=function(e,t){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",e,t)};l.VERSION="3.4.1",l.TRANSITION_DURATION=150,l.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:i},l.prototype.init=function(t,n,i){if(this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&e(document).find(e.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var r=this.options.trigger.split(" "),o=r.length;o--;){var s=r[o];if("click"==s)this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",l="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},l.prototype.getDefaults=function(){return l.DEFAULTS},l.prototype.getOptions=function(n){var i=this.$element.data();for(var r in i)i.hasOwnProperty(r)&&-1!==e.inArray(r,t)&&delete i[r];return(n=e.extend({},this.getDefaults(),i,n)).delay&&"number"==typeof n.delay&&(n.delay={show:n.delay,hide:n.delay}),n.sanitize&&(n.template=a(n.template,n.whiteList,n.sanitizeFn)),n},l.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,(function(e,i){n[e]!=i&&(t[e]=i)})),t},l.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusin"==t.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState)n.hoverState="in";else{if(clearTimeout(n.timeout),n.hoverState="in",!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout((function(){"in"==n.hoverState&&n.show()}),n.options.delay.show)}},l.prototype.isInStateTrue=function(){for(var e in this.inState)if(this.inState[e])return!0;return!1},l.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusout"==t.type?"focus":"hover"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState="out",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout((function(){"out"==n.hoverState&&n.hide()}),n.options.delay.hide)}},l.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var n=e.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!n)return;var i=this,r=this.tip(),o=this.getUID(this.type);this.setContent(),r.attr("id",o),this.$element.attr("aria-describedby",o),this.options.animation&&r.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,r[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,c=a.test(s);c&&(s=s.replace(a,"")||"top"),r.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?r.appendTo(e(document).find(this.options.container)):r.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var u=this.getPosition(),f=r[0].offsetWidth,d=r[0].offsetHeight;if(c){var h=s,p=this.getPosition(this.$viewport);s="bottom"==s&&u.bottom+d>p.bottom?"top":"top"==s&&u.top-d<p.top?"bottom":"right"==s&&u.right+f>p.width?"left":"left"==s&&u.left-f<p.left?"right":s,r.removeClass(h).addClass(s)}var g=this.getCalculatedOffset(s,u,f,d);this.applyPlacement(g,s);var m=function(){var e=i.hoverState;i.$element.trigger("shown.bs."+i.type),i.hoverState=null,"out"==e&&i.leave(i)};e.support.transition&&this.$tip.hasClass("fade")?r.one("bsTransitionEnd",m).emulateTransitionEnd(l.TRANSITION_DURATION):m()}},l.prototype.applyPlacement=function(t,n){var i=this.tip(),r=i[0].offsetWidth,o=i[0].offsetHeight,s=parseInt(i.css("margin-top"),10),a=parseInt(i.css("margin-left"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),t.top+=s,t.left+=a,e.offset.setOffset(i[0],e.extend({using:function(e){i.css({top:Math.round(e.top),left:Math.round(e.left)})}},t),0),i.addClass("in");var l=i[0].offsetWidth,c=i[0].offsetHeight;"top"==n&&c!=o&&(t.top=t.top+o-c);var u=this.getViewportAdjustedDelta(n,t,l,c);u.left?t.left+=u.left:t.top+=u.top;var f=/top|bottom/.test(n),d=f?2*u.left-r+l:2*u.top-o+c,h=f?"offsetWidth":"offsetHeight";i.offset(t),this.replaceArrow(d,i[0][h],f)},l.prototype.replaceArrow=function(e,t,n){this.arrow().css(n?"left":"top",50*(1-e/t)+"%").css(n?"top":"left","")},l.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();this.options.html?(this.options.sanitize&&(t=a(t,this.options.whiteList,this.options.sanitizeFn)),e.find(".tooltip-inner").html(t)):e.find(".tooltip-inner").text(t),e.removeClass("fade in top bottom left right")},l.prototype.hide=function(t){var n=this,i=e(this.$tip),r=e.Event("hide.bs."+this.type);function o(){"in"!=n.hoverState&&i.detach(),n.$element&&n.$element.removeAttr("aria-describedby").trigger("hidden.bs."+n.type),t&&t()}if(this.$element.trigger(r),!r.isDefaultPrevented())return i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.one("bsTransitionEnd",o).emulateTransitionEnd(l.TRANSITION_DURATION):o(),this.hoverState=null,this},l.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||"string"!=typeof e.attr("data-original-title"))&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},l.prototype.hasContent=function(){return this.getTitle()},l.prototype.getPosition=function(t){var n=(t=t||this.$element)[0],i="BODY"==n.tagName,r=n.getBoundingClientRect();null==r.width&&(r=e.extend({},r,{width:r.right-r.left,height:r.bottom-r.top}));var o=window.SVGElement&&n instanceof window.SVGElement,s=i?{top:0,left:0}:o?null:t.offset(),a={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},l=i?{width:e(window).width(),height:e(window).height()}:null;return e.extend({},r,a,l,s)},l.prototype.getCalculatedOffset=function(e,t,n,i){return"bottom"==e?{top:t.top+t.height,left:t.left+t.width/2-n/2}:"top"==e?{top:t.top-i,left:t.left+t.width/2-n/2}:"left"==e?{top:t.top+t.height/2-i/2,left:t.left-n}:{top:t.top+t.height/2-i/2,left:t.left+t.width}},l.prototype.getViewportAdjustedDelta=function(e,t,n,i){var r={top:0,left:0};if(!this.$viewport)return r;var o=this.options.viewport&&this.options.viewport.padding||0,s=this.getPosition(this.$viewport);if(/right|left/.test(e)){var a=t.top-o-s.scroll,l=t.top+o-s.scroll+i;a<s.top?r.top=s.top-a:l>s.top+s.height&&(r.top=s.top+s.height-l)}else{var c=t.left-o,u=t.left+o+n;c<s.left?r.left=s.left-c:u>s.right&&(r.left=s.left+s.width-u)}return r},l.prototype.getTitle=function(){var e=this.$element,t=this.options;return e.attr("data-original-title")||("function"==typeof t.title?t.title.call(e[0]):t.title)},l.prototype.getUID=function(e){do{e+=~~(1e6*Math.random())}while(document.getElementById(e));return e},l.prototype.tip=function(){if(!this.$tip&&(this.$tip=e(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},l.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},l.prototype.enable=function(){this.enabled=!0},l.prototype.disable=function(){this.enabled=!1},l.prototype.toggleEnabled=function(){this.enabled=!this.enabled},l.prototype.toggle=function(t){var n=this;t&&((n=e(t.currentTarget).data("bs."+this.type))||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n))),t?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},l.prototype.destroy=function(){var e=this;clearTimeout(this.timeout),this.hide((function(){e.$element.off("."+e.type).removeData("bs."+e.type),e.$tip&&e.$tip.detach(),e.$tip=null,e.$arrow=null,e.$viewport=null,e.$element=null}))},l.prototype.sanitizeHtml=function(e){return a(e,this.options.whiteList,this.options.sanitizeFn)};var c=e.fn.tooltip;e.fn.tooltip=function(t){return this.each((function(){var n=e(this),i=n.data("bs.tooltip"),r="object"==typeof t&&t;!i&&/destroy|hide/.test(t)||(i||n.data("bs.tooltip",i=new l(this,r)),"string"==typeof t&&i[t]())}))},e.fn.tooltip.Constructor=l,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=c,this}}(e),function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");t.VERSION="3.4.1",t.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),(t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype)).constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();if(this.options.html){var i=typeof n;this.options.sanitize&&(t=this.sanitizeHtml(t),"string"===i&&(n=this.sanitizeHtml(n))),e.find(".popover-title").html(t),e.find(".popover-content").children().detach().end()["string"===i?"html":"append"](n)}else e.find(".popover-title").text(t),e.find(".popover-content").children().detach().end().text(n);e.removeClass("fade top bottom left right in"),e.find(".popover-title").html()||e.find(".popover-title").hide()},t.prototype.hasContent=function(){return this.getTitle()||this.getContent()},t.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr("data-content")||("function"==typeof t.content?t.content.call(e[0]):t.content)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var n=e.fn.popover;e.fn.popover=function(n){return this.each((function(){var i=e(this),r=i.data("bs.popover"),o="object"==typeof n&&n;!r&&/destroy|hide/.test(n)||(r||i.data("bs.popover",r=new t(this,o)),"string"==typeof n&&r[n]())}))},e.fn.popover.Constructor=t,e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(e),function(e){"use strict";function t(n,i){this.$body=e(document.body),this.$scrollElement=e(n).is(document.body)?e(window):e(n),this.options=e.extend({},t.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each((function(){var i=e(this),r=i.data("bs.scrollspy"),o="object"==typeof n&&n;r||i.data("bs.scrollspy",r=new t(this,o)),"string"==typeof n&&r[n]()}))}t.VERSION="3.4.1",t.DEFAULTS={offset:10},t.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},t.prototype.refresh=function(){var t=this,n="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),e.isWindow(this.$scrollElement[0])||(n="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map((function(){var t=e(this),r=t.data("target")||t.attr("href"),o=/^#./.test(r)&&e(r);return o&&o.length&&o.is(":visible")&&[[o[n]().top+i,r]]||null})).sort((function(e,t){return e[0]-t[0]})).each((function(){t.offsets.push(this[0]),t.targets.push(this[1])}))},t.prototype.process=function(){var e,t=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),i=this.options.offset+n-this.$scrollElement.height(),r=this.offsets,o=this.targets,s=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),t>=i)return s!=(e=o[o.length-1])&&this.activate(e);if(s&&t<r[0])return this.activeTarget=null,this.clear();for(e=r.length;e--;)s!=o[e]&&t>=r[e]&&(void 0===r[e+1]||t<r[e+1])&&this.activate(o[e])},t.prototype.activate=function(t){this.activeTarget=t,this.clear();var n=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',i=e(n).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},t.prototype.clear=function(){e(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var i=e.fn.scrollspy;e.fn.scrollspy=n,e.fn.scrollspy.Constructor=t,e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=i,this},e(window).on("load.bs.scrollspy.data-api",(function(){e('[data-spy="scroll"]').each((function(){var t=e(this);n.call(t,t.data())}))}))}(e),function(e){"use strict";var t=function(t){this.element=e(t)};function n(n){return this.each((function(){var i=e(this),r=i.data("bs.tab");r||i.data("bs.tab",r=new t(this)),"string"==typeof n&&r[n]()}))}t.VERSION="3.4.1",t.TRANSITION_DURATION=150,t.prototype.show=function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),i=t.data("target");if(i||(i=(i=t.attr("href"))&&i.replace(/.*(?=#[^\s]*$)/,"")),!t.parent("li").hasClass("active")){var r=n.find(".active:last a"),o=e.Event("hide.bs.tab",{relatedTarget:t[0]}),s=e.Event("show.bs.tab",{relatedTarget:r[0]});if(r.trigger(o),t.trigger(s),!s.isDefaultPrevented()&&!o.isDefaultPrevented()){var a=e(document).find(i);this.activate(t.closest("li"),n),this.activate(a,a.parent(),(function(){r.trigger({type:"hidden.bs.tab",relatedTarget:t[0]}),t.trigger({type:"shown.bs.tab",relatedTarget:r[0]})}))}}},t.prototype.activate=function(n,i,r){var o=i.find("> .active"),s=r&&e.support.transition&&(o.length&&o.hasClass("fade")||!!i.find("> .fade").length);function a(){o.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),n.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),s?(n[0].offsetWidth,n.addClass("in")):n.removeClass("fade"),n.parent(".dropdown-menu").length&&n.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),r&&r()}o.length&&s?o.one("bsTransitionEnd",a).emulateTransitionEnd(t.TRANSITION_DURATION):a(),o.removeClass("in")};var i=e.fn.tab;e.fn.tab=n,e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=i,this};var r=function(t){t.preventDefault(),n.call(e(this),"show")};e(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',r).on("click.bs.tab.data-api",'[data-toggle="pill"]',r)}(e),function(e){"use strict";var t=function(n,i){this.options=e.extend({},t.DEFAULTS,i);var r=this.options.target===t.DEFAULTS.target?e(this.options.target):e(document).find(this.options.target);this.$target=r.on("scroll.bs.affix.data-api",e.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",e.proxy(this.checkPositionWithEventLoop,this)),this.$element=e(n),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function n(n){return this.each((function(){var i=e(this),r=i.data("bs.affix"),o="object"==typeof n&&n;r||i.data("bs.affix",r=new t(this,o)),"string"==typeof n&&r[n]()}))}t.VERSION="3.4.1",t.RESET="affix affix-top affix-bottom",t.DEFAULTS={offset:0,target:window},t.prototype.getState=function(e,t,n,i){var r=this.$target.scrollTop(),o=this.$element.offset(),s=this.$target.height();if(null!=n&&"top"==this.affixed)return r<n&&"top";if("bottom"==this.affixed)return null!=n?!(r+this.unpin<=o.top)&&"bottom":!(r+s<=e-i)&&"bottom";var a=null==this.affixed,l=a?r:o.top;return null!=n&&r<=n?"top":null!=i&&l+(a?s:t)>=e-i&&"bottom"},t.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(t.RESET).addClass("affix");var e=this.$target.scrollTop(),n=this.$element.offset();return this.pinnedOffset=n.top-e},t.prototype.checkPositionWithEventLoop=function(){setTimeout(e.proxy(this.checkPosition,this),1)},t.prototype.checkPosition=function(){if(this.$element.is(":visible")){var n=this.$element.height(),i=this.options.offset,r=i.top,o=i.bottom,s=Math.max(e(document).height(),e(document.body).height());"object"!=typeof i&&(o=r=i),"function"==typeof r&&(r=i.top(this.$element)),"function"==typeof o&&(o=i.bottom(this.$element));var a=this.getState(s,n,r,o);if(this.affixed!=a){null!=this.unpin&&this.$element.css("top","");var l="affix"+(a?"-"+a:""),c=e.Event(l+".bs.affix");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=a,this.unpin="bottom"==a?this.getPinnedOffset():null,this.$element.removeClass(t.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==a&&this.$element.offset({top:s-n-o})}};var i=e.fn.affix;e.fn.affix=n,e.fn.affix.Constructor=t,e.fn.affix.noConflict=function(){return e.fn.affix=i,this},e(window).on("load",(function(){e('[data-spy="affix"]').each((function(){var t=e(this),i=t.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),n.call(t,i)}))}))}(e)}).call(this,n("./node_modules/jquery/dist/jquery.js"))},"./node_modules/custom-backbone/backbone-min.js":function(e,t,n){(function(){var e,i=this,r=i.Backbone,o=[],s=o.push,a=o.slice,l=o.splice;(e=t).VERSION="1.0.0";var c=i._;c||(c=n("./node_modules/underscore/underscore.js")),e.$=n("./node_modules/jquery/dist/jquery.js"),e.noConflict=function(){return i.Backbone=r,this},e.emulateHTTP=!1,e.emulateJSON=!1;var u=e.Events={on:function(e,t,n){return d(this,"on",e,[t,n])&&t?(this._events||(this._events={}),(this._events[e]||(this._events[e]=[])).push({callback:t,context:n,ctx:n||this}),this):this},once:function(e,t,n){if(!d(this,"once",e,[t,n])||!t)return this;var i=this,r=c.once((function(){i.off(e,r),t.apply(this,arguments)}));return r._callback=t,this.on(e,r,n)},off:function(e,t,n){var i,r,o,s,a,l,u,f;if(!this._events||!d(this,"off",e,[t,n]))return this;if(!e&&!t&&!n)return this._events={},this;for(a=0,l=(s=e?[e]:c.keys(this._events)).length;a<l;a++)if(e=s[a],o=this._events[e]){if(this._events[e]=i=[],t||n)for(u=0,f=o.length;u<f;u++)r=o[u],(t&&t!==r.callback&&t!==r.callback._callback||n&&n!==r.context)&&i.push(r);i.length||delete this._events[e]}return this},trigger:function(e){if(!this._events)return this;var t=a.call(arguments,1);if(!d(this,"trigger",e,t))return this;var n=this._events[e],i=this._events.all;return n&&h(n,t),i&&h(i,arguments),this},stopListening:function(e,t,n){var i=this._listeners;if(!i)return this;var r=!t&&!n;for(var o in"object"==typeof t&&(n=this),e&&((i={})[e._listenerId]=e),i)i[o].off(t,n,this),r&&delete this._listeners[o];return this}},f=/\s+/,d=function(e,t,n,i){if(!n)return!0;if("object"==typeof n){for(var r in n)e[t].apply(e,[r,n[r]].concat(i));return!1}if(f.test(n)){for(var o=n.split(f),s=0,a=o.length;s<a;s++)e[t].apply(e,[o[s]].concat(i));return!1}return!0},h=function(e,t){var n,i=-1,r=e.length,o=t[0],s=t[1],a=t[2];switch(t.length){case 0:for(;++i<r;)(n=e[i]).callback.call(n.ctx);return;case 1:for(;++i<r;)(n=e[i]).callback.call(n.ctx,o);return;case 2:for(;++i<r;)(n=e[i]).callback.call(n.ctx,o,s);return;case 3:for(;++i<r;)(n=e[i]).callback.call(n.ctx,o,s,a);return;default:for(;++i<r;)(n=e[i]).callback.apply(n.ctx,t)}};c.each({listenTo:"on",listenToOnce:"once"},(function(e,t){u[t]=function(t,n,i){return(this._listeners||(this._listeners={}))[t._listenerId||(t._listenerId=c.uniqueId("l"))]=t,"object"==typeof n&&(i=this),t[e](n,i,this),this}})),u.bind=u.on,u.unbind=u.off,c.extend(e,u);var p=e.Model=function(e,t){var n,i=e||{};t||(t={}),this.cid=c.uniqueId("c"),this.attributes={},c.extend(this,c.pick(t,g)),t.parse&&(i=this.parse(i,t)||{}),(n=c.result(this,"defaults"))&&(i=c.defaults({},i,n)),this.set(i,t),this.changed={},this.initialize.apply(this,arguments)},g=["url","urlRoot","collection"];c.extend(p.prototype,u,{changed:null,validationError:null,idAttribute:"id",initialize:function(){},toJSON:function(e){return c.clone(this.attributes)},sync:function(){return e.sync.apply(this,arguments)},get:function(e){return this.attributes[e]},escape:function(e){return c.escape(this.get(e))},has:function(e){return null!=this.get(e)},set:function(e,t,n){var i,r,o,s,a,l,u,f;if(null==e)return this;if("object"==typeof e?(r=e,n=t):(r={})[e]=t,n||(n={}),!this._validate(r,n))return!1;for(i in o=n.unset,a=n.silent,s=[],l=this._changing,this._changing=!0,l||(this._previousAttributes=c.clone(this.attributes),this.changed={}),f=this.attributes,u=this._previousAttributes,this.idAttribute in r&&(this.id=r[this.idAttribute]),r)t=r[i],c.isEqual(f[i],t)||s.push(i),c.isEqual(u[i],t)?delete this.changed[i]:this.changed[i]=t,o?delete f[i]:f[i]=t;if(!a){s.length&&(this._pending=!0);for(var d=0,h=s.length;d<h;d++)this.trigger("change:"+s[d],this,f[s[d]],n)}if(l)return this;if(!a)for(;this._pending;)this._pending=!1,this.trigger("change",this,n);return this._pending=!1,this._changing=!1,this},unset:function(e,t){return this.set(e,void 0,c.extend({},t,{unset:!0}))},clear:function(e){var t={};for(var n in this.attributes)t[n]=void 0;return this.set(t,c.extend({},e,{unset:!0}))},hasChanged:function(e){return null==e?!c.isEmpty(this.changed):c.has(this.changed,e)},changedAttributes:function(e){if(!e)return!!this.hasChanged()&&c.clone(this.changed);var t,n=!1,i=this._changing?this._previousAttributes:this.attributes;for(var r in e)c.isEqual(i[r],t=e[r])||((n||(n={}))[r]=t);return n},previous:function(e){return null!=e&&this._previousAttributes?this._previousAttributes[e]:null},previousAttributes:function(){return c.clone(this._previousAttributes)},fetch:function(e){void 0===(e=e?c.clone(e):{}).parse&&(e.parse=!0);var t=this,n=e.success;return e.success=function(i){if(!t.set(t.parse(i,e),e))return!1;n&&n(t,i,e),t.trigger("sync",t,i,e)},j(this,e),this.sync("read",this,e)},save:function(e,t,n){var i,r,o,s=this.attributes;if(null==e||"object"==typeof e?(i=e,n=t):(i={})[e]=t,i&&(!n||!n.wait)&&!this.set(i,n))return!1;if(n=c.extend({validate:!0},n),!this._validate(i,n))return!1;i&&n.wait&&(this.attributes=c.extend({},s,i)),void 0===n.parse&&(n.parse=!0);var a=this,l=n.success;return n.success=function(e){a.attributes=s;var t=a.parse(e,n);if(n.wait&&(t=c.extend(i||{},t)),c.isObject(t)&&!a.set(t,n))return!1;l&&l(a,e,n),a.trigger("sync",a,e,n)},j(this,n),"patch"===(r=this.isNew()?"create":n.patch?"patch":"update")&&(n.attrs=i),o=this.sync(r,this,n),i&&n.wait&&(this.attributes=s),o},destroy:function(e){e=e?c.clone(e):{};var t=this,n=e.success,i=function(){t.trigger("destroy",t,t.collection,e)};if(e.success=function(r){(e.wait||t.isNew())&&i(),n&&n(t,r,e),t.isNew()||t.trigger("sync",t,r,e)},this.isNew())return e.success(),!1;j(this,e);var r=this.sync("delete",this,e);return e.wait||i(),r},url:function(){var e=c.result(this,"urlRoot")||c.result(this.collection,"url")||R();return this.isNew()?e:e+("/"===e.charAt(e.length-1)?"":"/")+encodeURIComponent(this.id)},parse:function(e,t){return e},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return null==this.id},isValid:function(e){return this._validate({},c.extend(e||{},{validate:!0}))},_validate:function(e,t){if(!t.validate||!this.validate)return!0;e=c.extend({},this.attributes,e);var n=this.validationError=this.validate(e,t)||null;return!n||(this.trigger("invalid",this,n,c.extend(t||{},{validationError:n})),!1)}});c.each(["keys","values","pairs","invert","pick","omit"],(function(e){p.prototype[e]=function(){var t=a.call(arguments);return t.unshift(this.attributes),c[e].apply(c,t)}}));var m=e.Collection=function(e,t){t||(t={}),t.url&&(this.url=t.url),t.model&&(this.model=t.model),void 0!==t.comparator&&(this.comparator=t.comparator),this._reset(),this.initialize.apply(this,arguments),e&&this.reset(e,c.extend({silent:!0},t))},v={add:!0,remove:!0,merge:!0},y={add:!0,merge:!1,remove:!1};c.extend(m.prototype,u,{model:p,initialize:function(){},toJSON:function(e){return this.map((function(t){return t.toJSON(e)}))},sync:function(){return e.sync.apply(this,arguments)},add:function(e,t){return this.set(e,c.defaults(t||{},y))},remove:function(e,t){var n,i,r,o;for(t||(t={}),n=0,i=(e=c.isArray(e)?e.slice():[e]).length;n<i;n++)(o=this.get(e[n]))&&(delete this._byId[o.id],delete this._byId[o.cid],r=this.indexOf(o),this.models.splice(r,1),this.length--,t.silent||(t.index=r,o.trigger("remove",o,this,t)),this._removeReference(o));return this},set:function(e,t){var n,i,r,o,a;(t=c.defaults(t||{},v)).parse&&(e=this.parse(e,t)),c.isArray(e)||(e=e?[e]:[]);var u=t.at,f=this.comparator&&null==u&&!1!==t.sort,d=c.isString(this.comparator)?this.comparator:null,h=[],p=[],g={};for(n=0,i=e.length;n<i;n++)(r=this._prepareModel(e[n],t))&&((o=this.get(r))?(t.remove&&(g[o.cid]=!0),t.merge&&(o.set(r.attributes,t),f&&!a&&o.hasChanged(d)&&(a=!0))):t.add&&(h.push(r),r.on("all",this._onModelEvent,this),this._byId[r.cid]=r,null!=r.id&&(this._byId[r.id]=r)));if(t.remove){for(n=0,i=this.length;n<i;++n)g[(r=this.models[n]).cid]||p.push(r);p.length&&this.remove(p,t)}if(h.length&&(f&&(a=!0),this.length+=h.length,null!=u?l.apply(this.models,[u,0].concat(h)):s.apply(this.models,h)),a&&this.sort({silent:!0}),t.silent)return this;for(n=0,i=h.length;n<i;n++)(r=h[n]).trigger("add",r,this,t);return a&&this.trigger("sort",this,t),this},reset:function(e,t){t||(t={});for(var n=0,i=this.models.length;n<i;n++)this._removeReference(this.models[n]);return t.previousModels=this.models,this._reset(),this.add(e,c.extend({silent:!0},t)),t.silent||this.trigger("reset",this,t),this},push:function(e,t){return e=this._prepareModel(e,t),this.add(e,c.extend({at:this.length},t)),e},pop:function(e){var t=this.at(this.length-1);return this.remove(t,e),t},unshift:function(e,t){return e=this._prepareModel(e,t),this.add(e,c.extend({at:0},t)),e},shift:function(e){var t=this.at(0);return this.remove(t,e),t},slice:function(e,t){return this.models.slice(e,t)},get:function(e){if(null!=e)return this._byId[null!=e.id?e.id:e.cid||e]},at:function(e){return this.models[e]},where:function(e,t){return c.isEmpty(e)?t?void 0:[]:this[t?"find":"filter"]((function(t){for(var n in e)if(e[n]!==t.get(n))return!1;return!0}))},findWhere:function(e){return this.where(e,!0)},sort:function(e){if(!this.comparator)throw new Error("Cannot sort a set without a comparator");return e||(e={}),c.isString(this.comparator)||1===this.comparator.length?this.models=this.sortBy(this.comparator,this):this.models.sort(c.bind(this.comparator,this)),e.silent||this.trigger("sort",this,e),this},sortedIndex:function(e,t,n){t||(t=this.comparator);var i=c.isFunction(t)?t:function(e){return e.get(t)};return c.sortedIndex(this.models,e,i,n)},pluck:function(e){return c.invoke(this.models,"get",e)},fetch:function(e){void 0===(e=e?c.clone(e):{}).parse&&(e.parse=!0);var t=e.success,n=this;return e.success=function(i){var r=e.reset?"reset":"set";n[r](i,e),t&&t(n,i,e),n.trigger("sync",n,i,e)},j(this,e),this.sync("read",this,e)},create:function(e,t){if(t=t?c.clone(t):{},!(e=this._prepareModel(e,t)))return!1;t.wait||this.add(e,t);var n=this,i=t.success;return t.success=function(r){t.wait&&n.add(e,t),i&&i(e,r,t)},e.save(null,t),e},parse:function(e,t){return e},clone:function(){return new this.constructor(this.models)},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(e,t){if(e instanceof p)return e.collection||(e.collection=this),e;t||(t={}),t.collection=this;var n=new this.model(e,t);return n._validate(e,t)?n:(this.trigger("invalid",this,e,t),!1)},_removeReference:function(e){this===e.collection&&delete e.collection,e.off("all",this._onModelEvent,this)},_onModelEvent:function(e,t,n,i){("add"!==e&&"remove"!==e||n===this)&&("destroy"===e&&this.remove(t,i),t&&e==="change:"+t.idAttribute&&(delete this._byId[t.previous(t.idAttribute)],null!=t.id&&(this._byId[t.id]=t)),this.trigger.apply(this,arguments))}});c.each(["forEach","each","map","collect","reduce","foldl","inject","reduceRight","foldr","find","detect","filter","select","reject","every","all","some","any","include","contains","invoke","max","min","toArray","size","first","head","take","initial","rest","tail","drop","last","without","indexOf","shuffle","lastIndexOf","isEmpty","chain"],(function(e){m.prototype[e]=function(){var t=a.call(arguments);return t.unshift(this.models),c[e].apply(c,t)}}));c.each(["groupBy","countBy","sortBy"],(function(e){m.prototype[e]=function(t,n){var i=c.isFunction(t)?t:function(e){return e.get(t)};return c[e](this.models,i,n)}}));var b=e.View=function(e){this.cid=c.uniqueId("view"),this._configure(e||{}),this._ensureElement(),this.initialize.apply(this,arguments),this.delegateEvents()},w=/^(\S+)\s*(.*)$/,T=["model","collection","el","id","attributes","className","tagName","events"];c.extend(b.prototype,u,{tagName:"div",$:function(e){return this.$el.find(e)},initialize:function(){},render:function(){return this},remove:function(){return this.$el.remove(),this.stopListening(),this},setElement:function(t,n){return this.$el&&this.undelegateEvents(),this.$el=t instanceof e.$?t:e.$(t),this.el=this.$el[0],!1!==n&&this.delegateEvents(),this},delegateEvents:function(e){if(!e&&!(e=c.result(this,"events")))return this;for(var t in this.undelegateEvents(),e){var n=e[t];if(c.isFunction(n)||(n=this[e[t]]),n){var i=t.match(w),r=i[1],o=i[2];n=c.bind(n,this),r+=".delegateEvents"+this.cid,""===o?this.$el.on(r,n):this.$el.on(r,o,n)}}return this},undelegateEvents:function(){return this.$el.off(".delegateEvents"+this.cid),this},_configure:function(e){this.options&&(e=c.extend({},c.result(this,"options"),e)),c.extend(this,c.pick(e,T)),this.options=e},_ensureElement:function(){if(this.el)this.setElement(c.result(this,"el"),!1);else{var t=c.extend({},c.result(this,"attributes"));this.id&&(t.id=c.result(this,"id")),this.className&&(t.class=c.result(this,"className"));var n=e.$("<"+c.result(this,"tagName")+">").attr(t);this.setElement(n,!1)}}}),e.sync=function(t,n,i){var r=k[t];c.defaults(i||(i={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var o={type:r,dataType:"json"};if(i.url||(o.url=c.result(n,"url")||R()),null!=i.data||!n||"create"!==t&&"update"!==t&&"patch"!==t||(o.contentType="application/json",o.data=JSON.stringify(i.attrs||n.toJSON(i))),i.emulateJSON&&(o.contentType="application/x-www-form-urlencoded",o.data=o.data?{model:o.data}:{}),i.emulateHTTP&&("PUT"===r||"DELETE"===r||"PATCH"===r)){o.type="POST",i.emulateJSON&&(o.data._method=r);var s=i.beforeSend;i.beforeSend=function(e){if(e.setRequestHeader("X-HTTP-Method-Override",r),s)return s.apply(this,arguments)}}"GET"===o.type||i.emulateJSON||(o.processData=!1),"PATCH"!==o.type||!window.ActiveXObject||window.external&&window.external.msActiveXFilteringEnabled||(o.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")});var a=i.xhr=e.ajax(c.extend(o,i));return n.trigger("request",n,a,i),a};var k={create:"POST",update:"PUT",patch:"PATCH",delete:"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var C=e.Router=function(e){e||(e={}),e.routes&&(this.routes=e.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},x=/\((.*?)\)/g,A=/(\(\?)?:\w+/g,E=/\*\w+/g,N=/[\-{}\[\]+?.,\\\^$|#\s]/g;c.extend(C.prototype,u,{initialize:function(){},route:function(t,n,i){c.isRegExp(t)||(t=this._routeToRegExp(t)),c.isFunction(n)&&(i=n,n=""),i||(i=this[n]);var r=this;return e.history.route(t,(function(o){var s=r._extractParameters(t,o);i&&i.apply(r,s),r.trigger.apply(r,["route:"+n].concat(s)),r.trigger("route",n,s),e.history.trigger("route",r,n,s)})),this},navigate:function(t,n){return e.history.navigate(t,n),this},_bindRoutes:function(){if(this.routes){this.routes=c.result(this,"routes");for(var e,t=c.keys(this.routes);null!=(e=t.pop());)this.route(e,this.routes[e])}},_routeToRegExp:function(e){return e=e.replace(N,"\\$&").replace(x,"(?:$1)?").replace(A,(function(e,t){return t?e:"([^/]+)"})).replace(E,"(.*?)"),new RegExp("^"+e+"$")},_extractParameters:function(e,t){var n=e.exec(t).slice(1);return c.map(n,(function(e){return e?decodeURIComponent(e):null}))}});var _=e.History=function(){this.handlers=[],c.bindAll(this,"checkUrl"),"undefined"!=typeof window&&(this.location=window.location,this.history=window.history)},S=/^[#\/]|\s+$/g,D=/^\/+|\/+$/g,I=/msie [\w.]+/,O=/\/$/;_.started=!1,c.extend(_.prototype,u,{interval:50,getHash:function(e){var t=(e||this).location.href.match(/#(.*)$/);return t?t[1]:""},getFragment:function(e,t){if(null==e)if(this._hasPushState||!this._wantsHashChange||t){e=this.location.pathname;var n=this.root.replace(O,"");e.indexOf(n)||(e=e.substr(n.length))}else e=this.getHash();return e.replace(S,"")},start:function(t){if(_.started)throw new Error("Backbone.history has already been started");_.started=!0,this.options=c.extend({},{root:"/"},this.options,t),this.root=this.options.root,this._wantsHashChange=!1!==this.options.hashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var n=this.getFragment(),i=document.documentMode,r=I.exec(navigator.userAgent.toLowerCase())&&(!i||i<=7);this.root=("/"+this.root+"/").replace(D,"/"),r&&this._wantsHashChange&&(this.iframe=e.$('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo("body")[0].contentWindow,this.navigate(n)),this._hasPushState?e.$(window).on("popstate",this.checkUrl):this._wantsHashChange&&"onhashchange"in window&&!r?e.$(window).on("hashchange",this.checkUrl):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),this.fragment=n;var o=this.location,s=o.pathname.replace(/[^\/]$/,"$&/")===this.root;return this._wantsHashChange&&this._wantsPushState&&!this._hasPushState&&!s?(this.fragment=this.getFragment(null,!0),this.location.replace(this.root+this.location.search+"#"+this.fragment),!0):(this._wantsPushState&&this._hasPushState&&s&&o.hash&&(this.fragment=this.getHash().replace(S,""),this.history.replaceState({},document.title,this.root+this.fragment+o.search)),this.options.silent?void 0:this.loadUrl())},stop:function(){e.$(window).off("popstate",this.checkUrl).off("hashchange",this.checkUrl),clearInterval(this._checkUrlInterval),_.started=!1},route:function(e,t){this.handlers.unshift({route:e,callback:t})},checkUrl:function(e){var t=this.getFragment();if(t===this.fragment&&this.iframe&&(t=this.getFragment(this.getHash(this.iframe))),t===this.fragment)return!1;this.iframe&&this.navigate(t),this.loadUrl()||this.loadUrl(this.getHash())},loadUrl:function(e){var t=this.fragment=this.getFragment(e);return c.any(this.handlers,(function(e){if(e.route.test(t))return e.callback(t),!0}))},navigate:function(e,t){if(!_.started)return!1;if(t&&!0!==t||(t={trigger:t}),e=this.getFragment(e||""),this.fragment!==e){this.fragment=e;var n=this.root+e;if(this._hasPushState)this.history[t.replace?"replaceState":"pushState"]({},document.title,n);else{if(!this._wantsHashChange)return this.location.assign(n);this._updateHash(this.location,e,t.replace),this.iframe&&e!==this.getFragment(this.getHash(this.iframe))&&(t.replace||this.iframe.document.open().close(),this._updateHash(this.iframe.location,e,t.replace))}t.trigger&&this.loadUrl(e)}},_updateHash:function(e,t,n){if(n){var i=e.href.replace(/(javascript:|#).*$/,"");e.replace(i+"#"+t)}else e.hash="#"+t}}),e.history=new _;p.extend=m.extend=C.extend=b.extend=_.extend=function(e,t){var n,i=this;n=e&&c.has(e,"constructor")?e.constructor:function(){return i.apply(this,arguments)},c.extend(n,i,t);var r=function(){this.constructor=n};return r.prototype=i.prototype,n.prototype=new r,e&&c.extend(n.prototype,e),n.__super__=i.prototype,n};var R=function(){throw new Error('A "url" property or function must be specified')},j=function(e,t){var n=t.error;t.error=function(i){n&&n(e,i,t),e.trigger("error",e,i,t)}}}).call(this)},"./node_modules/es6-promise-promise/index.js":function(e,t,n){e.exports=n("./node_modules/es6-promise/dist/es6-promise.js").Promise},"./node_modules/es6-promise/dist/es6-promise.js":function(e,t,n){(function(t,i){var r;r=function(){"use strict";function e(e){return"function"==typeof e}var r=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},o=0,s=void 0,a=void 0,l=function(e,t){g[o]=e,g[o+1]=t,2===(o+=2)&&(a?a(m):T())},c="undefined"!=typeof window?window:void 0,u=c||{},f=u.MutationObserver||u.WebKitMutationObserver,d="undefined"==typeof self&&void 0!==t&&"[object process]"==={}.toString.call(t),h="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function p(){var e=setTimeout;return function(){return e(m,1)}}var g=new Array(1e3);function m(){for(var e=0;e<o;e+=2)(0,g[e])(g[e+1]),g[e]=void 0,g[e+1]=void 0;o=0}var v,y,b,w,T=void 0;function k(e,t){var n=arguments,i=this,r=new this.constructor(A);void 0===r[x]&&F(r);var o,s=i._state;return s?(o=n[s-1],l((function(){return L(s,r,o,i._result)}))):R(i,r,e,t),r}function C(e){if(e&&"object"==typeof e&&e.constructor===this)return e;var t=new this(A);return S(t,e),t}d?T=function(){return t.nextTick(m)}:f?(y=0,b=new f(m),w=document.createTextNode(""),b.observe(w,{characterData:!0}),T=function(){w.data=y=++y%2}):h?((v=new MessageChannel).port1.onmessage=m,T=function(){return v.port2.postMessage(0)}):T=void 0===c?function(){try{var e=n(1);return s=e.runOnLoop||e.runOnContext,function(){s(m)}}catch(e){return p()}}():p();var x=Math.random().toString(36).substring(16);function A(){}var E=new q;function N(e){try{return e.then}catch(e){return E.error=e,E}}function _(t,n,i){n.constructor===t.constructor&&i===k&&n.constructor.resolve===C?function(e,t){1===t._state?I(e,t._result):2===t._state?O(e,t._result):R(t,void 0,(function(t){return S(e,t)}),(function(t){return O(e,t)}))}(t,n):i===E?O(t,E.error):void 0===i?I(t,n):e(i)?function(e,t,n){l((function(e){var i=!1,r=function(e,t,n,i){try{e.call(t,n,i)}catch(e){return e}}(n,t,(function(n){i||(i=!0,t!==n?S(e,n):I(e,n))}),(function(t){i||(i=!0,O(e,t))}),e._label);!i&&r&&(i=!0,O(e,r))}),e)}(t,n,i):I(t,n)}function S(e,t){var n;e===t?O(e,new TypeError("You cannot resolve a promise with itself")):"function"==typeof(n=t)||"object"==typeof n&&null!==n?_(e,t,N(t)):I(e,t)}function D(e){e._onerror&&e._onerror(e._result),j(e)}function I(e,t){void 0===e._state&&(e._result=t,e._state=1,0!==e._subscribers.length&&l(j,e))}function O(e,t){void 0===e._state&&(e._state=2,e._result=t,l(D,e))}function R(e,t,n,i){var r=e._subscribers,o=r.length;e._onerror=null,r[o]=t,r[o+1]=n,r[o+2]=i,0===o&&e._state&&l(j,e)}function j(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var i=void 0,r=void 0,o=e._result,s=0;s<t.length;s+=3)i=t[s],r=t[s+n],i?L(n,i,r,o):r(o);e._subscribers.length=0}}function q(){this.error=null}var P=new q;function L(t,n,i,r){var o=e(i),s=void 0,a=void 0,l=void 0,c=void 0;if(o){if((s=function(e,t){try{return e(t)}catch(e){return P.error=e,P}}(i,r))===P?(c=!0,a=s.error,s=null):l=!0,n===s)return void O(n,new TypeError("A promises callback cannot return that same promise."))}else s=r,l=!0;void 0!==n._state||(o&&l?S(n,s):c?O(n,a):1===t?I(n,s):2===t&&O(n,s))}var $=0;function F(e){e[x]=$++,e._state=void 0,e._result=void 0,e._subscribers=[]}function H(e,t){this._instanceConstructor=e,this.promise=new e(A),this.promise[x]||F(this.promise),r(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?I(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&I(this.promise,this._result))):O(this.promise,new Error("Array Methods must be provided an Array"))}function M(e){this[x]=$++,this._result=this._state=void 0,this._subscribers=[],A!==e&&("function"!=typeof e&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof M?function(e,t){try{t((function(t){S(e,t)}),(function(t){O(e,t)}))}catch(t){O(e,t)}}(this,e):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}function U(){var e=void 0;if(void 0!==i)e=i;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var t=e.Promise;if(t){var n=null;try{n=Object.prototype.toString.call(t.resolve())}catch(e){}if("[object Promise]"===n&&!t.cast)return}e.Promise=M}return H.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;void 0===this._state&&n<e;n++)this._eachEntry(t[n],n)},H.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,i=n.resolve;if(i===C){var r=N(e);if(r===k&&void 0!==e._state)this._settledAt(e._state,t,e._result);else if("function"!=typeof r)this._remaining--,this._result[t]=e;else if(n===M){var o=new n(A);_(o,e,r),this._willSettleAt(o,t)}else this._willSettleAt(new n((function(t){return t(e)})),t)}else this._willSettleAt(i(e),t)},H.prototype._settledAt=function(e,t,n){var i=this.promise;void 0===i._state&&(this._remaining--,2===e?O(i,n):this._result[t]=n),0===this._remaining&&I(i,this._result)},H.prototype._willSettleAt=function(e,t){var n=this;R(e,void 0,(function(e){return n._settledAt(1,t,e)}),(function(e){return n._settledAt(2,t,e)}))},M.all=function(e){return new H(this,e).promise},M.race=function(e){var t=this;return r(e)?new t((function(n,i){for(var r=e.length,o=0;o<r;o++)t.resolve(e[o]).then(n,i)})):new t((function(e,t){return t(new TypeError("You must pass an array to race."))}))},M.resolve=C,M.reject=function(e){var t=new this(A);return O(t,e),t},M._setScheduler=function(e){a=e},M._setAsap=function(e){l=e},M._asap=l,M.prototype={constructor:M,then:k,catch:function(e){return this.then(null,e)}},U(),M.polyfill=U,M.Promise=M,M},e.exports=r()}).call(this,n("./node_modules/process/browser.js"),n("./node_modules/webpack/buildin/global.js"))},"./node_modules/jquery/dist/jquery.js":function(e,t,n){var i,r,o;r="undefined"!=typeof window?window:this,o=function(n,r){var o=[],s=n.document,a=o.slice,l=o.concat,c=o.push,u=o.indexOf,f={},d=f.toString,h=f.hasOwnProperty,p={},g=function(e,t){return new g.fn.init(e,t)},m=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,v=/^-ms-/,y=/-([\da-z])/gi,b=function(e,t){return t.toUpperCase()};function w(e){var t=!!e&&"length"in e&&e.length,n=g.type(e);return"function"!==n&&!g.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}g.fn=g.prototype={jquery:"2.2.4",constructor:g,selector:"",length:0,toArray:function(){return a.call(this)},get:function(e){return null!=e?e<0?this[e+this.length]:this[e]:a.call(this)},pushStack:function(e){var t=g.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e){return g.each(this,e)},map:function(e){return this.pushStack(g.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(a.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:c,sort:o.sort,splice:o.splice},g.extend=g.fn.extend=function(){var e,t,n,i,r,o,s=arguments[0]||{},a=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[a]||{},a++),"object"==typeof s||g.isFunction(s)||(s={}),a===l&&(s=this,a--);a<l;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],s!==(i=e[t])&&(c&&i&&(g.isPlainObject(i)||(r=g.isArray(i)))?(r?(r=!1,o=n&&g.isArray(n)?n:[]):o=n&&g.isPlainObject(n)?n:{},s[t]=g.extend(c,o,i)):void 0!==i&&(s[t]=i));return s},g.extend({expando:"jQuery"+("2.2.4"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===g.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){var t=e&&e.toString();return!g.isArray(e)&&t-parseFloat(t)+1>=0},isPlainObject:function(e){var t;if("object"!==g.type(e)||e.nodeType||g.isWindow(e))return!1;if(e.constructor&&!h.call(e,"constructor")&&!h.call(e.constructor.prototype||{},"isPrototypeOf"))return!1;for(t in e);return void 0===t||h.call(e,t)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?f[d.call(e)]||"object":typeof e},globalEval:function(e){var t,n=eval;(e=g.trim(e))&&(1===e.indexOf("use strict")?((t=s.createElement("script")).text=e,s.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(v,"ms-").replace(y,b)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var n,i=0;if(w(e))for(n=e.length;i<n&&!1!==t.call(e[i],i,e[i]);i++);else for(i in e)if(!1===t.call(e[i],i,e[i]))break;return e},trim:function(e){return null==e?"":(e+"").replace(m,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(w(Object(e))?g.merge(n,"string"==typeof e?[e]:e):c.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,i=0,r=e.length;i<n;i++)e[r++]=t[i];return e.length=r,e},grep:function(e,t,n){for(var i=[],r=0,o=e.length,s=!n;r<o;r++)!t(e[r],r)!==s&&i.push(e[r]);return i},map:function(e,t,n){var i,r,o=0,s=[];if(w(e))for(i=e.length;o<i;o++)null!=(r=t(e[o],o,n))&&s.push(r);else for(o in e)null!=(r=t(e[o],o,n))&&s.push(r);return l.apply([],s)},guid:1,proxy:function(e,t){var n,i,r;if("string"==typeof t&&(n=e[t],t=e,e=n),g.isFunction(e))return i=a.call(arguments,2),(r=function(){return e.apply(t||this,i.concat(a.call(arguments)))}).guid=e.guid=e.guid||g.guid++,r},now:Date.now,support:p}),"function"==typeof Symbol&&(g.fn[Symbol.iterator]=o[Symbol.iterator]),g.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),(function(e,t){f["[object "+t+"]"]=t.toLowerCase()}));var T=function(e){var t,n,i,r,o,s,a,l,c,u,f,d,h,p,g,m,v,y,b,w="sizzle"+1*new Date,T=e.document,k=0,C=0,x=re(),A=re(),E=re(),N=function(e,t){return e===t&&(f=!0),0},_={}.hasOwnProperty,S=[],D=S.pop,I=S.push,O=S.push,R=S.slice,j=function(e,t){for(var n=0,i=e.length;n<i;n++)if(e[n]===t)return n;return-1},q="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",$="\\["+P+"*("+L+")(?:"+P+"*([*^$|!~]?=)"+P+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+P+"*\\]",F=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+$+")*)|.*)\\)|)",H=new RegExp(P+"+","g"),M=new RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),U=new RegExp("^"+P+"*,"+P+"*"),V=new RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),B=new RegExp("="+P+"*([^\\]'\"]*?)"+P+"*\\]","g"),W=new RegExp(F),z=new RegExp("^"+L+"$"),J={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+$),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:new RegExp("^(?:"+q+")$","i"),needsContext:new RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,G=/^h\d$/i,X=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Q=/[+~]/,Z=/'|\\/g,ee=new RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),te=function(e,t,n){var i="0x"+t-65536;return i!=i||n?t:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},ne=function(){d()};try{O.apply(S=R.call(T.childNodes),T.childNodes),S[T.childNodes.length].nodeType}catch(e){O={apply:S.length?function(e,t){I.apply(e,R.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}function ie(e,t,i,r){var o,a,c,u,f,p,v,y,k=t&&t.ownerDocument,C=t?t.nodeType:9;if(i=i||[],"string"!=typeof e||!e||1!==C&&9!==C&&11!==C)return i;if(!r&&((t?t.ownerDocument||t:T)!==h&&d(t),t=t||h,g)){if(11!==C&&(p=K.exec(e)))if(o=p[1]){if(9===C){if(!(c=t.getElementById(o)))return i;if(c.id===o)return i.push(c),i}else if(k&&(c=k.getElementById(o))&&b(t,c)&&c.id===o)return i.push(c),i}else{if(p[2])return O.apply(i,t.getElementsByTagName(e)),i;if((o=p[3])&&n.getElementsByClassName&&t.getElementsByClassName)return O.apply(i,t.getElementsByClassName(o)),i}if(n.qsa&&!E[e+" "]&&(!m||!m.test(e))){if(1!==C)k=t,y=e;else if("object"!==t.nodeName.toLowerCase()){for((u=t.getAttribute("id"))?u=u.replace(Z,"\\$&"):t.setAttribute("id",u=w),a=(v=s(e)).length,f=z.test(u)?"#"+u:"[id='"+u+"']";a--;)v[a]=f+" "+pe(v[a]);y=v.join(","),k=Q.test(e)&&de(t.parentNode)||t}if(y)try{return O.apply(i,k.querySelectorAll(y)),i}catch(e){}finally{u===w&&t.removeAttribute("id")}}}return l(e.replace(M,"$1"),t,i,r)}function re(){var e=[];return function t(n,r){return e.push(n+" ")>i.cacheLength&&delete t[e.shift()],t[n+" "]=r}}function oe(e){return e[w]=!0,e}function se(e){var t=h.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ae(e,t){for(var n=e.split("|"),r=n.length;r--;)i.attrHandle[n[r]]=t}function le(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||1<<31)-(~e.sourceIndex||1<<31);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function ce(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function ue(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function fe(e){return oe((function(t){return t=+t,oe((function(n,i){for(var r,o=e([],n.length,t),s=o.length;s--;)n[r=o[s]]&&(n[r]=!(i[r]=n[r]))}))}))}function de(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=ie.support={},o=ie.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},d=ie.setDocument=function(e){var t,r,s=e?e.ownerDocument||e:T;return s!==h&&9===s.nodeType&&s.documentElement?(p=(h=s).documentElement,g=!o(h),(r=h.defaultView)&&r.top!==r&&(r.addEventListener?r.addEventListener("unload",ne,!1):r.attachEvent&&r.attachEvent("onunload",ne)),n.attributes=se((function(e){return e.className="i",!e.getAttribute("className")})),n.getElementsByTagName=se((function(e){return e.appendChild(h.createComment("")),!e.getElementsByTagName("*").length})),n.getElementsByClassName=X.test(h.getElementsByClassName),n.getById=se((function(e){return p.appendChild(e).id=w,!h.getElementsByName||!h.getElementsByName(w).length})),n.getById?(i.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}},i.filter.ID=function(e){var t=e.replace(ee,te);return function(e){return e.getAttribute("id")===t}}):(delete i.find.ID,i.filter.ID=function(e){var t=e.replace(ee,te);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[r++];)1===n.nodeType&&i.push(n);return i}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],m=[],(n.qsa=X.test(h.querySelectorAll))&&(se((function(e){p.appendChild(e).innerHTML="<a id='"+w+"'></a><select id='"+w+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&m.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||m.push("\\["+P+"*(?:value|"+q+")"),e.querySelectorAll("[id~="+w+"-]").length||m.push("~="),e.querySelectorAll(":checked").length||m.push(":checked"),e.querySelectorAll("a#"+w+"+*").length||m.push(".#.+[+~]")})),se((function(e){var t=h.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&m.push("name"+P+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||m.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),m.push(",.*:")}))),(n.matchesSelector=X.test(y=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&se((function(e){n.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),v.push("!=",F)})),m=m.length&&new RegExp(m.join("|")),v=v.length&&new RegExp(v.join("|")),t=X.test(p.compareDocumentPosition),b=t||X.test(p.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},N=t?function(e,t){if(e===t)return f=!0,0;var i=!e.compareDocumentPosition-!t.compareDocumentPosition;return i||(1&(i=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===i?e===h||e.ownerDocument===T&&b(T,e)?-1:t===h||t.ownerDocument===T&&b(T,t)?1:u?j(u,e)-j(u,t):0:4&i?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,i=0,r=e.parentNode,o=t.parentNode,s=[e],a=[t];if(!r||!o)return e===h?-1:t===h?1:r?-1:o?1:u?j(u,e)-j(u,t):0;if(r===o)return le(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;s[i]===a[i];)i++;return i?le(s[i],a[i]):s[i]===T?-1:a[i]===T?1:0},h):h},ie.matches=function(e,t){return ie(e,null,null,t)},ie.matchesSelector=function(e,t){if((e.ownerDocument||e)!==h&&d(e),t=t.replace(B,"='$1']"),n.matchesSelector&&g&&!E[t+" "]&&(!v||!v.test(t))&&(!m||!m.test(t)))try{var i=y.call(e,t);if(i||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){}return ie(t,h,null,[e]).length>0},ie.contains=function(e,t){return(e.ownerDocument||e)!==h&&d(e),b(e,t)},ie.attr=function(e,t){(e.ownerDocument||e)!==h&&d(e);var r=i.attrHandle[t.toLowerCase()],o=r&&_.call(i.attrHandle,t.toLowerCase())?r(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},ie.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ie.uniqueSort=function(e){var t,i=[],r=0,o=0;if(f=!n.detectDuplicates,u=!n.sortStable&&e.slice(0),e.sort(N),f){for(;t=e[o++];)t===e[o]&&(r=i.push(o));for(;r--;)e.splice(i[r],1)}return u=null,e},r=ie.getText=function(e){var t,n="",i=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=r(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[i++];)n+=r(t);return n},(i=ie.selectors={cacheLength:50,createPseudo:oe,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(ee,te),e[3]=(e[3]||e[4]||e[5]||"").replace(ee,te),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ie.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ie.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return J.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&W.test(n)&&(t=s(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(ee,te).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=x[e+" "];return t||(t=new RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&x(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(i){var r=ie.attr(i,e);return null==r?"!="===t:!t||(r+="","="===t?r===n:"!="===t?r!==n:"^="===t?n&&0===r.indexOf(n):"*="===t?n&&r.indexOf(n)>-1:"$="===t?n&&r.slice(-n.length)===n:"~="===t?(" "+r.replace(H," ")+" ").indexOf(n)>-1:"|="===t&&(r===n||r.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,i,r){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===i&&0===r?function(e){return!!e.parentNode}:function(t,n,l){var c,u,f,d,h,p,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,v=a&&t.nodeName.toLowerCase(),y=!l&&!a,b=!1;if(m){if(o){for(;g;){for(d=t;d=d[g];)if(a?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=g="only"===e&&!p&&"nextSibling"}return!0}if(p=[s?m.firstChild:m.lastChild],s&&y){for(b=(h=(c=(u=(f=(d=m)[w]||(d[w]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===k&&c[1])&&c[2],d=h&&m.childNodes[h];d=++h&&d&&d[g]||(b=h=0)||p.pop();)if(1===d.nodeType&&++b&&d===t){u[e]=[k,h,b];break}}else if(y&&(b=h=(c=(u=(f=(d=t)[w]||(d[w]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===k&&c[1]),!1===b)for(;(d=++h&&d&&d[g]||(b=h=0)||p.pop())&&((a?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++b||(y&&((u=(f=d[w]||(d[w]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]=[k,b]),d!==t)););return(b-=r)===i||b%i==0&&b/i>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||ie.error("unsupported pseudo: "+e);return r[w]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?oe((function(e,n){for(var i,o=r(e,t),s=o.length;s--;)e[i=j(e,o[s])]=!(n[i]=o[s])})):function(e){return r(e,0,n)}):r}},pseudos:{not:oe((function(e){var t=[],n=[],i=a(e.replace(M,"$1"));return i[w]?oe((function(e,t,n,r){for(var o,s=i(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))})):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}})),has:oe((function(e){return function(t){return ie(e,t).length>0}})),contains:oe((function(e){return e=e.replace(ee,te),function(t){return(t.textContent||t.innerText||r(t)).indexOf(e)>-1}})),lang:oe((function(e){return z.test(e||"")||ie.error("unsupported lang: "+e),e=e.replace(ee,te).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===p},focus:function(e){return e===h.activeElement&&(!h.hasFocus||h.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return!1===e.disabled},disabled:function(e){return!0===e.disabled},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return G.test(e.nodeName)},input:function(e){return Y.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:fe((function(){return[0]})),last:fe((function(e,t){return[t-1]})),eq:fe((function(e,t,n){return[n<0?n+t:n]})),even:fe((function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e})),odd:fe((function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e})),lt:fe((function(e,t,n){for(var i=n<0?n+t:n;--i>=0;)e.push(i);return e})),gt:fe((function(e,t,n){for(var i=n<0?n+t:n;++i<t;)e.push(i);return e}))}}).pseudos.nth=i.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[t]=ce(t);for(t in{submit:!0,reset:!0})i.pseudos[t]=ue(t);function he(){}function pe(e){for(var t=0,n=e.length,i="";t<n;t++)i+=e[t].value;return i}function ge(e,t,n){var i=t.dir,r=n&&"parentNode"===i,o=C++;return t.first?function(t,n,o){for(;t=t[i];)if(1===t.nodeType||r)return e(t,n,o)}:function(t,n,s){var a,l,c,u=[k,o];if(s){for(;t=t[i];)if((1===t.nodeType||r)&&e(t,n,s))return!0}else for(;t=t[i];)if(1===t.nodeType||r){if((a=(l=(c=t[w]||(t[w]={}))[t.uniqueID]||(c[t.uniqueID]={}))[i])&&a[0]===k&&a[1]===o)return u[2]=a[2];if(l[i]=u,u[2]=e(t,n,s))return!0}}}function me(e){return e.length>1?function(t,n,i){for(var r=e.length;r--;)if(!e[r](t,n,i))return!1;return!0}:e[0]}function ve(e,t,n,i,r){for(var o,s=[],a=0,l=e.length,c=null!=t;a<l;a++)(o=e[a])&&(n&&!n(o,i,r)||(s.push(o),c&&t.push(a)));return s}function ye(e,t,n,i,r,o){return i&&!i[w]&&(i=ye(i)),r&&!r[w]&&(r=ye(r,o)),oe((function(o,s,a,l){var c,u,f,d=[],h=[],p=s.length,g=o||function(e,t,n){for(var i=0,r=t.length;i<r;i++)ie(e,t[i],n);return n}(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:ve(g,d,e,a,l),v=n?r||(o?e:p||i)?[]:s:m;if(n&&n(m,v,a,l),i)for(c=ve(v,h),i(c,[],a,l),u=c.length;u--;)(f=c[u])&&(v[h[u]]=!(m[h[u]]=f));if(o){if(r||e){if(r){for(c=[],u=v.length;u--;)(f=v[u])&&c.push(m[u]=f);r(null,v=[],c,l)}for(u=v.length;u--;)(f=v[u])&&(c=r?j(o,f):d[u])>-1&&(o[c]=!(s[c]=f))}}else v=ve(v===s?v.splice(p,v.length):v),r?r(null,s,v,l):O.apply(s,v)}))}function be(e){for(var t,n,r,o=e.length,s=i.relative[e[0].type],a=s||i.relative[" "],l=s?1:0,u=ge((function(e){return e===t}),a,!0),f=ge((function(e){return j(t,e)>-1}),a,!0),d=[function(e,n,i){var r=!s&&(i||n!==c)||((t=n).nodeType?u(e,n,i):f(e,n,i));return t=null,r}];l<o;l++)if(n=i.relative[e[l].type])d=[ge(me(d),n)];else{if((n=i.filter[e[l].type].apply(null,e[l].matches))[w]){for(r=++l;r<o&&!i.relative[e[r].type];r++);return ye(l>1&&me(d),l>1&&pe(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(M,"$1"),n,l<r&&be(e.slice(l,r)),r<o&&be(e=e.slice(r)),r<o&&pe(e))}d.push(n)}return me(d)}return he.prototype=i.filters=i.pseudos,i.setFilters=new he,s=ie.tokenize=function(e,t){var n,r,o,s,a,l,c,u=A[e+" "];if(u)return t?0:u.slice(0);for(a=e,l=[],c=i.preFilter;a;){for(s in n&&!(r=U.exec(a))||(r&&(a=a.slice(r[0].length)||a),l.push(o=[])),n=!1,(r=V.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(M," ")}),a=a.slice(n.length)),i.filter)!(r=J[s].exec(a))||c[s]&&!(r=c[s](r))||(n=r.shift(),o.push({value:n,type:s,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ie.error(e):A(e,l).slice(0)},a=ie.compile=function(e,t){var n,r=[],o=[],a=E[e+" "];if(!a){for(t||(t=s(e)),n=t.length;n--;)(a=be(t[n]))[w]?r.push(a):o.push(a);(a=E(e,function(e,t){var n=t.length>0,r=e.length>0,o=function(o,s,a,l,u){var f,p,m,v=0,y="0",b=o&&[],w=[],T=c,C=o||r&&i.find.TAG("*",u),x=k+=null==T?1:Math.random()||.1,A=C.length;for(u&&(c=s===h||s||u);y!==A&&null!=(f=C[y]);y++){if(r&&f){for(p=0,s||f.ownerDocument===h||(d(f),a=!g);m=e[p++];)if(m(f,s||h,a)){l.push(f);break}u&&(k=x)}n&&((f=!m&&f)&&v--,o&&b.push(f))}if(v+=y,n&&y!==v){for(p=0;m=t[p++];)m(b,w,s,a);if(o){if(v>0)for(;y--;)b[y]||w[y]||(w[y]=D.call(l));w=ve(w)}O.apply(l,w),u&&!o&&w.length>0&&v+t.length>1&&ie.uniqueSort(l)}return u&&(k=x,c=T),b};return n?oe(o):o}(o,r))).selector=e}return a},l=ie.select=function(e,t,r,o){var l,c,u,f,d,h="function"==typeof e&&e,p=!o&&s(e=h.selector||e);if(r=r||[],1===p.length){if((c=p[0]=p[0].slice(0)).length>2&&"ID"===(u=c[0]).type&&n.getById&&9===t.nodeType&&g&&i.relative[c[1].type]){if(!(t=(i.find.ID(u.matches[0].replace(ee,te),t)||[])[0]))return r;h&&(t=t.parentNode),e=e.slice(c.shift().value.length)}for(l=J.needsContext.test(e)?0:c.length;l--&&(u=c[l],!i.relative[f=u.type]);)if((d=i.find[f])&&(o=d(u.matches[0].replace(ee,te),Q.test(c[0].type)&&de(t.parentNode)||t))){if(c.splice(l,1),!(e=o.length&&pe(c)))return O.apply(r,o),r;break}}return(h||a(e,p))(o,t,!g,r,!t||Q.test(e)&&de(t.parentNode)||t),r},n.sortStable=w.split("").sort(N).join("")===w,n.detectDuplicates=!!f,d(),n.sortDetached=se((function(e){return 1&e.compareDocumentPosition(h.createElement("div"))})),se((function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")}))||ae("type|href|height|width",(function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),n.attributes&&se((function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||ae("value",(function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),se((function(e){return null==e.getAttribute("disabled")}))||ae(q,(function(e,t,n){var i;if(!n)return!0===e[t]?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null})),ie}(n);g.find=T,g.expr=T.selectors,g.expr[":"]=g.expr.pseudos,g.uniqueSort=g.unique=T.uniqueSort,g.text=T.getText,g.isXMLDoc=T.isXML,g.contains=T.contains;var k=function(e,t,n){for(var i=[],r=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(r&&g(e).is(n))break;i.push(e)}return i},C=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},x=g.expr.match.needsContext,A=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,E=/^.[^:#\[\.,]*$/;function N(e,t,n){if(g.isFunction(t))return g.grep(e,(function(e,i){return!!t.call(e,i,e)!==n}));if(t.nodeType)return g.grep(e,(function(e){return e===t!==n}));if("string"==typeof t){if(E.test(t))return g.filter(t,e,n);t=g.filter(t,e)}return g.grep(e,(function(e){return u.call(t,e)>-1!==n}))}g.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?g.find.matchesSelector(i,e)?[i]:[]:g.find.matches(e,g.grep(t,(function(e){return 1===e.nodeType})))},g.fn.extend({find:function(e){var t,n=this.length,i=[],r=this;if("string"!=typeof e)return this.pushStack(g(e).filter((function(){for(t=0;t<n;t++)if(g.contains(r[t],this))return!0})));for(t=0;t<n;t++)g.find(e,r[t],i);return(i=this.pushStack(n>1?g.unique(i):i)).selector=this.selector?this.selector+" "+e:e,i},filter:function(e){return this.pushStack(N(this,e||[],!1))},not:function(e){return this.pushStack(N(this,e||[],!0))},is:function(e){return!!N(this,"string"==typeof e&&x.test(e)?g(e):e||[],!1).length}});var _,S=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;(g.fn.init=function(e,t,n){var i,r;if(!e)return this;if(n=n||_,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:S.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof g?t[0]:t,g.merge(this,g.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:s,!0)),A.test(i[1])&&g.isPlainObject(t))for(i in t)g.isFunction(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(r=s.getElementById(i[2]))&&r.parentNode&&(this.length=1,this[0]=r),this.context=s,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):g.isFunction(e)?void 0!==n.ready?n.ready(e):e(g):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),g.makeArray(e,this))}).prototype=g.fn,_=g(s);var D=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}g.fn.extend({has:function(e){var t=g(e,this),n=t.length;return this.filter((function(){for(var e=0;e<n;e++)if(g.contains(this,t[e]))return!0}))},closest:function(e,t){for(var n,i=0,r=this.length,o=[],s=x.test(e)||"string"!=typeof e?g(e,t||this.context):0;i<r;i++)for(n=this[i];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(s?s.index(n)>-1:1===n.nodeType&&g.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?g.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(g(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(g.uniqueSort(g.merge(this.get(),g(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),g.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return C((e.parentNode||{}).firstChild,e)},children:function(e){return C(e.firstChild)},contents:function(e){return e.contentDocument||g.merge([],e.childNodes)}},(function(e,t){g.fn[e]=function(n,i){var r=g.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(r=g.filter(i,r)),this.length>1&&(I[e]||g.uniqueSort(r),D.test(e)&&r.reverse()),this.pushStack(r)}}));var R,j=/\S+/g;function q(){s.removeEventListener("DOMContentLoaded",q),n.removeEventListener("load",q),g.ready()}g.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return g.each(e.match(j)||[],(function(e,n){t[n]=!0})),t}(e):g.extend({},e);var t,n,i,r,o=[],s=[],a=-1,l=function(){for(r=e.once,i=t=!0;s.length;a=-1)for(n=s.shift();++a<o.length;)!1===o[a].apply(n[0],n[1])&&e.stopOnFalse&&(a=o.length,n=!1);e.memory||(n=!1),t=!1,r&&(o=n?[]:"")},c={add:function(){return o&&(n&&!t&&(a=o.length-1,s.push(n)),function t(n){g.each(n,(function(n,i){g.isFunction(i)?e.unique&&c.has(i)||o.push(i):i&&i.length&&"string"!==g.type(i)&&t(i)}))}(arguments),n&&!t&&l()),this},remove:function(){return g.each(arguments,(function(e,t){for(var n;(n=g.inArray(t,o,n))>-1;)o.splice(n,1),n<=a&&a--})),this},has:function(e){return e?g.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return r=s=[],o=n="",this},disabled:function(){return!o},lock:function(){return r=s=[],n||(o=n=""),this},locked:function(){return!!r},fireWith:function(e,n){return r||(n=[e,(n=n||[]).slice?n.slice():n],s.push(n),t||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!i}};return c},g.extend({Deferred:function(e){var t=[["resolve","done",g.Callbacks("once memory"),"resolved"],["reject","fail",g.Callbacks("once memory"),"rejected"],["notify","progress",g.Callbacks("memory")]],n="pending",i={state:function(){return n},always:function(){return r.done(arguments).fail(arguments),this},then:function(){var e=arguments;return g.Deferred((function(n){g.each(t,(function(t,o){var s=g.isFunction(e[t])&&e[t];r[o[1]]((function(){var e=s&&s.apply(this,arguments);e&&g.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+"With"](this===i?n.promise():this,s?[e]:arguments)}))})),e=null})).promise()},promise:function(e){return null!=e?g.extend(e,i):i}},r={};return i.pipe=i.then,g.each(t,(function(e,o){var s=o[2],a=o[3];i[o[1]]=s.add,a&&s.add((function(){n=a}),t[1^e][2].disable,t[2][2].lock),r[o[0]]=function(){return r[o[0]+"With"](this===r?i:this,arguments),this},r[o[0]+"With"]=s.fireWith})),i.promise(r),e&&e.call(r,r),r},when:function(e){var t,n,i,r=0,o=a.call(arguments),s=o.length,l=1!==s||e&&g.isFunction(e.promise)?s:0,c=1===l?e:g.Deferred(),u=function(e,n,i){return function(r){n[e]=this,i[e]=arguments.length>1?a.call(arguments):r,i===t?c.notifyWith(n,i):--l||c.resolveWith(n,i)}};if(s>1)for(t=new Array(s),n=new Array(s),i=new Array(s);r<s;r++)o[r]&&g.isFunction(o[r].promise)?o[r].promise().progress(u(r,n,t)).done(u(r,i,o)).fail(c.reject):--l;return l||c.resolveWith(i,o),c.promise()}}),g.fn.ready=function(e){return g.ready.promise().done(e),this},g.extend({isReady:!1,readyWait:1,holdReady:function(e){e?g.readyWait++:g.ready(!0)},ready:function(e){(!0===e?--g.readyWait:g.isReady)||(g.isReady=!0,!0!==e&&--g.readyWait>0||(R.resolveWith(s,[g]),g.fn.triggerHandler&&(g(s).triggerHandler("ready"),g(s).off("ready"))))}}),g.ready.promise=function(e){return R||(R=g.Deferred(),"complete"===s.readyState||"loading"!==s.readyState&&!s.documentElement.doScroll?n.setTimeout(g.ready):(s.addEventListener("DOMContentLoaded",q),n.addEventListener("load",q))),R.promise(e)},g.ready.promise();var P=function(e,t,n,i,r,o,s){var a=0,l=e.length,c=null==n;if("object"===g.type(n))for(a in r=!0,n)P(e,t,a,n[a],!0,o,s);else if(void 0!==i&&(r=!0,g.isFunction(i)||(s=!0),c&&(s?(t.call(e,i),t=null):(c=t,t=function(e,t,n){return c.call(g(e),n)})),t))for(;a<l;a++)t(e[a],n,s?i:i.call(e[a],a,t(e[a],n)));return r?e:c?t.call(e):l?t(e[0],n):o},L=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function $(){this.expando=g.expando+$.uid++}$.uid=1,$.prototype={register:function(e,t){var n=t||{};return e.nodeType?e[this.expando]=n:Object.defineProperty(e,this.expando,{value:n,writable:!0,configurable:!0}),e[this.expando]},cache:function(e){if(!L(e))return{};var t=e[this.expando];return t||(t={},L(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var i,r=this.cache(e);if("string"==typeof t)r[t]=n;else for(i in t)r[i]=t[i];return r},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][t]},access:function(e,t,n){var i;return void 0===t||t&&"string"==typeof t&&void 0===n?void 0!==(i=this.get(e,t))?i:this.get(e,g.camelCase(t)):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,i,r,o=e[this.expando];if(void 0!==o){if(void 0===t)this.register(e);else{g.isArray(t)?i=t.concat(t.map(g.camelCase)):(r=g.camelCase(t),i=t in o?[t,r]:(i=r)in o?[i]:i.match(j)||[]),n=i.length;for(;n--;)delete o[i[n]]}(void 0===t||g.isEmptyObject(o))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!g.isEmptyObject(t)}};var F=new $,H=new $,M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,U=/[A-Z]/g;function V(e,t,n){var i;if(void 0===n&&1===e.nodeType)if(i="data-"+t.replace(U,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(i))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:M.test(n)?g.parseJSON(n):n)}catch(e){}H.set(e,t,n)}else n=void 0;return n}g.extend({hasData:function(e){return H.hasData(e)||F.hasData(e)},data:function(e,t,n){return H.access(e,t,n)},removeData:function(e,t){H.remove(e,t)},_data:function(e,t,n){return F.access(e,t,n)},_removeData:function(e,t){F.remove(e,t)}}),g.fn.extend({data:function(e,t){var n,i,r,o=this[0],s=o&&o.attributes;if(void 0===e){if(this.length&&(r=H.get(o),1===o.nodeType&&!F.get(o,"hasDataAttrs"))){for(n=s.length;n--;)s[n]&&0===(i=s[n].name).indexOf("data-")&&(i=g.camelCase(i.slice(5)),V(o,i,r[i]));F.set(o,"hasDataAttrs",!0)}return r}return"object"==typeof e?this.each((function(){H.set(this,e)})):P(this,(function(t){var n,i;if(o&&void 0===t)return void 0!==(n=H.get(o,e)||H.get(o,e.replace(U,"-$&").toLowerCase()))?n:(i=g.camelCase(e),void 0!==(n=H.get(o,i))||void 0!==(n=V(o,i,void 0))?n:void 0);i=g.camelCase(e),this.each((function(){var n=H.get(this,i);H.set(this,i,t),e.indexOf("-")>-1&&void 0!==n&&H.set(this,e,t)}))}),null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each((function(){H.remove(this,e)}))}}),g.extend({queue:function(e,t,n){var i;if(e)return t=(t||"fx")+"queue",i=F.get(e,t),n&&(!i||g.isArray(n)?i=F.access(e,t,g.makeArray(n)):i.push(n)),i||[]},dequeue:function(e,t){t=t||"fx";var n=g.queue(e,t),i=n.length,r=n.shift(),o=g._queueHooks(e,t);"inprogress"===r&&(r=n.shift(),i--),r&&("fx"===t&&n.unshift("inprogress"),delete o.stop,r.call(e,(function(){g.dequeue(e,t)}),o)),!i&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return F.get(e,n)||F.access(e,n,{empty:g.Callbacks("once memory").add((function(){F.remove(e,[t+"queue",n])}))})}}),g.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?g.queue(this[0],e):void 0===t?this:this.each((function(){var n=g.queue(this,e,t);g._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&g.dequeue(this,e)}))},dequeue:function(e){return this.each((function(){g.dequeue(this,e)}))},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,i=1,r=g.Deferred(),o=this,s=this.length,a=function(){--i||r.resolveWith(o,[o])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";s--;)(n=F.get(o[s],e+"queueHooks"))&&n.empty&&(i++,n.empty.add(a));return a(),r.promise(t)}});var B=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,W=new RegExp("^(?:([+-])=|)("+B+")([a-z%]*)$","i"),z=["Top","Right","Bottom","Left"],J=function(e,t){return e=t||e,"none"===g.css(e,"display")||!g.contains(e.ownerDocument,e)};function Y(e,t,n,i){var r,o=1,s=20,a=i?function(){return i.cur()}:function(){return g.css(e,t,"")},l=a(),c=n&&n[3]||(g.cssNumber[t]?"":"px"),u=(g.cssNumber[t]||"px"!==c&&+l)&&W.exec(g.css(e,t));if(u&&u[3]!==c){c=c||u[3],n=n||[],u=+l||1;do{u/=o=o||".5",g.style(e,t,u+c)}while(o!==(o=a()/l)&&1!==o&&--s)}return n&&(u=+u||+l||0,r=n[1]?u+(n[1]+1)*n[2]:+n[2],i&&(i.unit=c,i.start=u,i.end=r)),r}var G=/^(?:checkbox|radio)$/i,X=/<([\w:-]+)/,K=/^$|\/(?:java|ecma)script/i,Q={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function Z(e,t){var n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&g.nodeName(e,t)?g.merge([e],n):n}function ee(e,t){for(var n=0,i=e.length;n<i;n++)F.set(e[n],"globalEval",!t||F.get(t[n],"globalEval"))}Q.optgroup=Q.option,Q.tbody=Q.tfoot=Q.colgroup=Q.caption=Q.thead,Q.th=Q.td;var te,ne,ie=/<|&#?\w+;/;function re(e,t,n,i,r){for(var o,s,a,l,c,u,f=t.createDocumentFragment(),d=[],h=0,p=e.length;h<p;h++)if((o=e[h])||0===o)if("object"===g.type(o))g.merge(d,o.nodeType?[o]:o);else if(ie.test(o)){for(s=s||f.appendChild(t.createElement("div")),a=(X.exec(o)||["",""])[1].toLowerCase(),l=Q[a]||Q._default,s.innerHTML=l[1]+g.htmlPrefilter(o)+l[2],u=l[0];u--;)s=s.lastChild;g.merge(d,s.childNodes),(s=f.firstChild).textContent=""}else d.push(t.createTextNode(o));for(f.textContent="",h=0;o=d[h++];)if(i&&g.inArray(o,i)>-1)r&&r.push(o);else if(c=g.contains(o.ownerDocument,o),s=Z(f.appendChild(o),"script"),c&&ee(s),n)for(u=0;o=s[u++];)K.test(o.type||"")&&n.push(o);return f}te=s.createDocumentFragment().appendChild(s.createElement("div")),(ne=s.createElement("input")).setAttribute("type","radio"),ne.setAttribute("checked","checked"),ne.setAttribute("name","t"),te.appendChild(ne),p.checkClone=te.cloneNode(!0).cloneNode(!0).lastChild.checked,te.innerHTML="<textarea>x</textarea>",p.noCloneChecked=!!te.cloneNode(!0).lastChild.defaultValue;var oe=/^key/,se=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ae=/^([^.]*)(?:\.(.+)|)/;function le(){return!0}function ce(){return!1}function ue(){try{return s.activeElement}catch(e){}}function fe(e,t,n,i,r,o){var s,a;if("object"==typeof t){for(a in"string"!=typeof n&&(i=i||n,n=void 0),t)fe(e,a,n,i,t[a],o);return e}if(null==i&&null==r?(r=n,i=n=void 0):null==r&&("string"==typeof n?(r=i,i=void 0):(r=i,i=n,n=void 0)),!1===r)r=ce;else if(!r)return e;return 1===o&&(s=r,(r=function(e){return g().off(e),s.apply(this,arguments)}).guid=s.guid||(s.guid=g.guid++)),e.each((function(){g.event.add(this,t,r,i,n)}))}g.event={global:{},add:function(e,t,n,i,r){var o,s,a,l,c,u,f,d,h,p,m,v=F.get(e);if(v)for(n.handler&&(n=(o=n).handler,r=o.selector),n.guid||(n.guid=g.guid++),(l=v.events)||(l=v.events={}),(s=v.handle)||(s=v.handle=function(t){return void 0!==g&&g.event.triggered!==t.type?g.event.dispatch.apply(e,arguments):void 0}),c=(t=(t||"").match(j)||[""]).length;c--;)h=m=(a=ae.exec(t[c])||[])[1],p=(a[2]||"").split(".").sort(),h&&(f=g.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,f=g.event.special[h]||{},u=g.extend({type:h,origType:m,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&g.expr.match.needsContext.test(r),namespace:p.join(".")},o),(d=l[h])||((d=l[h]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,i,p,s)||e.addEventListener&&e.addEventListener(h,s)),f.add&&(f.add.call(e,u),u.handler.guid||(u.handler.guid=n.guid)),r?d.splice(d.delegateCount++,0,u):d.push(u),g.event.global[h]=!0)},remove:function(e,t,n,i,r){var o,s,a,l,c,u,f,d,h,p,m,v=F.hasData(e)&&F.get(e);if(v&&(l=v.events)){for(c=(t=(t||"").match(j)||[""]).length;c--;)if(h=m=(a=ae.exec(t[c])||[])[1],p=(a[2]||"").split(".").sort(),h){for(f=g.event.special[h]||{},d=l[h=(i?f.delegateType:f.bindType)||h]||[],a=a[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=d.length;o--;)u=d[o],!r&&m!==u.origType||n&&n.guid!==u.guid||a&&!a.test(u.namespace)||i&&i!==u.selector&&("**"!==i||!u.selector)||(d.splice(o,1),u.selector&&d.delegateCount--,f.remove&&f.remove.call(e,u));s&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,p,v.handle)||g.removeEvent(e,h,v.handle),delete l[h])}else for(h in l)g.event.remove(e,h+t[c],n,i,!0);g.isEmptyObject(l)&&F.remove(e,"handle events")}},dispatch:function(e){e=g.event.fix(e);var t,n,i,r,o,s=[],l=a.call(arguments),c=(F.get(this,"events")||{})[e.type]||[],u=g.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!u.preDispatch||!1!==u.preDispatch.call(this,e)){for(s=g.event.handlers.call(this,e,c),t=0;(r=s[t++])&&!e.isPropagationStopped();)for(e.currentTarget=r.elem,n=0;(o=r.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,void 0!==(i=((g.event.special[o.origType]||{}).handle||o.handler).apply(r.elem,l))&&!1===(e.result=i)&&(e.preventDefault(),e.stopPropagation()));return u.postDispatch&&u.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,i,r,o,s=[],a=t.delegateCount,l=e.target;if(a&&l.nodeType&&("click"!==e.type||isNaN(e.button)||e.button<1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(!0!==l.disabled||"click"!==e.type)){for(i=[],n=0;n<a;n++)void 0===i[r=(o=t[n]).selector+" "]&&(i[r]=o.needsContext?g(r,this).index(l)>-1:g.find(r,this,null,[l]).length),i[r]&&i.push(o);i.length&&s.push({elem:l,handlers:i})}return a<t.length&&s.push({elem:this,handlers:t.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,i,r,o=t.button;return null==e.pageX&&null!=t.clientX&&(i=(n=e.target.ownerDocument||s).documentElement,r=n.body,e.pageX=t.clientX+(i&&i.scrollLeft||r&&r.scrollLeft||0)-(i&&i.clientLeft||r&&r.clientLeft||0),e.pageY=t.clientY+(i&&i.scrollTop||r&&r.scrollTop||0)-(i&&i.clientTop||r&&r.clientTop||0)),e.which||void 0===o||(e.which=1&o?1:2&o?3:4&o?2:0),e}},fix:function(e){if(e[g.expando])return e;var t,n,i,r=e.type,o=e,a=this.fixHooks[r];for(a||(this.fixHooks[r]=a=se.test(r)?this.mouseHooks:oe.test(r)?this.keyHooks:{}),i=a.props?this.props.concat(a.props):this.props,e=new g.Event(o),t=i.length;t--;)e[n=i[t]]=o[n];return e.target||(e.target=s),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,o):e},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ue()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===ue()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&g.nodeName(this,"input"))return this.click(),!1},_default:function(e){return g.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},g.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},g.Event=function(e,t){if(!(this instanceof g.Event))return new g.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?le:ce):this.type=e,t&&g.extend(this,t),this.timeStamp=e&&e.timeStamp||g.now(),this[g.expando]=!0},g.Event.prototype={constructor:g.Event,isDefaultPrevented:ce,isPropagationStopped:ce,isImmediatePropagationStopped:ce,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=le,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=le,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=le,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},g.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},(function(e,t){g.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,i=this,r=e.relatedTarget,o=e.handleObj;return r&&(r===i||g.contains(i,r))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}})),g.fn.extend({on:function(e,t,n,i){return fe(this,e,t,n,i)},one:function(e,t,n,i){return fe(this,e,t,n,i,1)},off:function(e,t,n){var i,r;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,g(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(r in e)this.off(r,t,e[r]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=ce),this.each((function(){g.event.remove(this,e,n,t)}))}});var de=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,he=/<script|<style|<link/i,pe=/checked\s*(?:[^=]|=\s*.checked.)/i,ge=/^true\/(.*)/,me=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function ve(e,t){return g.nodeName(e,"table")&&g.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ye(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function be(e){var t=ge.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function we(e,t){var n,i,r,o,s,a,l,c;if(1===t.nodeType){if(F.hasData(e)&&(o=F.access(e),s=F.set(t,o),c=o.events))for(r in delete s.handle,s.events={},c)for(n=0,i=c[r].length;n<i;n++)g.event.add(t,r,c[r][n]);H.hasData(e)&&(a=H.access(e),l=g.extend({},a),H.set(t,l))}}function Te(e,t,n,i){t=l.apply([],t);var r,o,s,a,c,u,f=0,d=e.length,h=d-1,m=t[0],v=g.isFunction(m);if(v||d>1&&"string"==typeof m&&!p.checkClone&&pe.test(m))return e.each((function(r){var o=e.eq(r);v&&(t[0]=m.call(this,r,o.html())),Te(o,t,n,i)}));if(d&&(o=(r=re(t,e[0].ownerDocument,!1,e,i)).firstChild,1===r.childNodes.length&&(r=o),o||i)){for(a=(s=g.map(Z(r,"script"),ye)).length;f<d;f++)c=r,f!==h&&(c=g.clone(c,!0,!0),a&&g.merge(s,Z(c,"script"))),n.call(e[f],c,f);if(a)for(u=s[s.length-1].ownerDocument,g.map(s,be),f=0;f<a;f++)c=s[f],K.test(c.type||"")&&!F.access(c,"globalEval")&&g.contains(u,c)&&(c.src?g._evalUrl&&g._evalUrl(c.src):g.globalEval(c.textContent.replace(me,"")))}return e}function ke(e,t,n){for(var i,r=t?g.filter(t,e):e,o=0;null!=(i=r[o]);o++)n||1!==i.nodeType||g.cleanData(Z(i)),i.parentNode&&(n&&g.contains(i.ownerDocument,i)&&ee(Z(i,"script")),i.parentNode.removeChild(i));return e}g.extend({htmlPrefilter:function(e){return e.replace(de,"<$1></$2>")},clone:function(e,t,n){var i,r,o,s,a,l,c,u=e.cloneNode(!0),f=g.contains(e.ownerDocument,e);if(!(p.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||g.isXMLDoc(e)))for(s=Z(u),i=0,r=(o=Z(e)).length;i<r;i++)a=o[i],l=s[i],c=void 0,"input"===(c=l.nodeName.toLowerCase())&&G.test(a.type)?l.checked=a.checked:"input"!==c&&"textarea"!==c||(l.defaultValue=a.defaultValue);if(t)if(n)for(o=o||Z(e),s=s||Z(u),i=0,r=o.length;i<r;i++)we(o[i],s[i]);else we(e,u);return(s=Z(u,"script")).length>0&&ee(s,!f&&Z(e,"script")),u},cleanData:function(e){for(var t,n,i,r=g.event.special,o=0;void 0!==(n=e[o]);o++)if(L(n)){if(t=n[F.expando]){if(t.events)for(i in t.events)r[i]?g.event.remove(n,i):g.removeEvent(n,i,t.handle);n[F.expando]=void 0}n[H.expando]&&(n[H.expando]=void 0)}}}),g.fn.extend({domManip:Te,detach:function(e){return ke(this,e,!0)},remove:function(e){return ke(this,e)},text:function(e){return P(this,(function(e){return void 0===e?g.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return Te(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||ve(this,e).appendChild(e)}))},prepend:function(){return Te(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=ve(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return Te(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return Te(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(g.cleanData(Z(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return g.clone(this,e,t)}))},html:function(e){return P(this,(function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!he.test(e)&&!Q[(X.exec(e)||["",""])[1].toLowerCase()]){e=g.htmlPrefilter(e);try{for(;n<i;n++)1===(t=this[n]||{}).nodeType&&(g.cleanData(Z(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)}),null,e,arguments.length)},replaceWith:function(){var e=[];return Te(this,arguments,(function(t){var n=this.parentNode;g.inArray(this,e)<0&&(g.cleanData(Z(this)),n&&n.replaceChild(t,this))}),e)}}),g.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},(function(e,t){g.fn[e]=function(e){for(var n,i=[],r=g(e),o=r.length-1,s=0;s<=o;s++)n=s===o?this:this.clone(!0),g(r[s])[t](n),c.apply(i,n.get());return this.pushStack(i)}}));var Ce,xe={HTML:"block",BODY:"block"};function Ae(e,t){var n=g(t.createElement(e)).appendTo(t.body),i=g.css(n[0],"display");return n.detach(),i}function Ee(e){var t=s,n=xe[e];return n||("none"!==(n=Ae(e,t))&&n||((t=(Ce=(Ce||g("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement))[0].contentDocument).write(),t.close(),n=Ae(e,t),Ce.detach()),xe[e]=n),n}var Ne=/^margin/,_e=new RegExp("^("+B+")(?!px)[a-z%]+$","i"),Se=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=n),t.getComputedStyle(e)},De=function(e,t,n,i){var r,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];for(o in r=n.apply(e,i||[]),t)e.style[o]=s[o];return r},Ie=s.documentElement;function Oe(e,t,n){var i,r,o,s,a=e.style;return""!==(s=(n=n||Se(e))?n.getPropertyValue(t)||n[t]:void 0)&&void 0!==s||g.contains(e.ownerDocument,e)||(s=g.style(e,t)),n&&!p.pixelMarginRight()&&_e.test(s)&&Ne.test(t)&&(i=a.width,r=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=i,a.minWidth=r,a.maxWidth=o),void 0!==s?s+"":s}function Re(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){var e,t,i,r,o=s.createElement("div"),a=s.createElement("div");function l(){a.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",a.innerHTML="",Ie.appendChild(o);var s=n.getComputedStyle(a);e="1%"!==s.top,r="2px"===s.marginLeft,t="4px"===s.width,a.style.marginRight="50%",i="4px"===s.marginRight,Ie.removeChild(o)}a.style&&(a.style.backgroundClip="content-box",a.cloneNode(!0).style.backgroundClip="",p.clearCloneStyle="content-box"===a.style.backgroundClip,o.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",o.appendChild(a),g.extend(p,{pixelPosition:function(){return l(),e},boxSizingReliable:function(){return null==t&&l(),t},pixelMarginRight:function(){return null==t&&l(),i},reliableMarginLeft:function(){return null==t&&l(),r},reliableMarginRight:function(){var e,t=a.appendChild(s.createElement("div"));return t.style.cssText=a.style.cssText="-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",t.style.marginRight=t.style.width="0",a.style.width="1px",Ie.appendChild(o),e=!parseFloat(n.getComputedStyle(t).marginRight),Ie.removeChild(o),a.removeChild(t),e}}))}();var je=/^(none|table(?!-c[ea]).+)/,qe={position:"absolute",visibility:"hidden",display:"block"},Pe={letterSpacing:"0",fontWeight:"400"},Le=["Webkit","O","Moz","ms"],$e=s.createElement("div").style;function Fe(e){if(e in $e)return e;for(var t=e[0].toUpperCase()+e.slice(1),n=Le.length;n--;)if((e=Le[n]+t)in $e)return e}function He(e,t,n){var i=W.exec(t);return i?Math.max(0,i[2]-(n||0))+(i[3]||"px"):t}function Me(e,t,n,i,r){for(var o=n===(i?"border":"content")?4:"width"===t?1:0,s=0;o<4;o+=2)"margin"===n&&(s+=g.css(e,n+z[o],!0,r)),i?("content"===n&&(s-=g.css(e,"padding"+z[o],!0,r)),"margin"!==n&&(s-=g.css(e,"border"+z[o]+"Width",!0,r))):(s+=g.css(e,"padding"+z[o],!0,r),"padding"!==n&&(s+=g.css(e,"border"+z[o]+"Width",!0,r)));return s}function Ue(e,t,n){var i=!0,r="width"===t?e.offsetWidth:e.offsetHeight,o=Se(e),s="border-box"===g.css(e,"boxSizing",!1,o);if(r<=0||null==r){if(((r=Oe(e,t,o))<0||null==r)&&(r=e.style[t]),_e.test(r))return r;i=s&&(p.boxSizingReliable()||r===e.style[t]),r=parseFloat(r)||0}return r+Me(e,t,n||(s?"border":"content"),i,o)+"px"}function Ve(e,t){for(var n,i,r,o=[],s=0,a=e.length;s<a;s++)(i=e[s]).style&&(o[s]=F.get(i,"olddisplay"),n=i.style.display,t?(o[s]||"none"!==n||(i.style.display=""),""===i.style.display&&J(i)&&(o[s]=F.access(i,"olddisplay",Ee(i.nodeName)))):(r=J(i),"none"===n&&r||F.set(i,"olddisplay",r?n:g.css(i,"display"))));for(s=0;s<a;s++)(i=e[s]).style&&(t&&"none"!==i.style.display&&""!==i.style.display||(i.style.display=t?o[s]||"":"none"));return e}function Be(e,t,n,i,r){return new Be.prototype.init(e,t,n,i,r)}g.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Oe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:"cssFloat"},style:function(e,t,n,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var r,o,s,a=g.camelCase(t),l=e.style;if(t=g.cssProps[a]||(g.cssProps[a]=Fe(a)||a),s=g.cssHooks[t]||g.cssHooks[a],void 0===n)return s&&"get"in s&&void 0!==(r=s.get(e,!1,i))?r:l[t];"string"==(o=typeof n)&&(r=W.exec(n))&&r[1]&&(n=Y(e,t,r),o="number"),null!=n&&n==n&&("number"===o&&(n+=r&&r[3]||(g.cssNumber[a]?"":"px")),p.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),s&&"set"in s&&void 0===(n=s.set(e,n,i))||(l[t]=n))}},css:function(e,t,n,i){var r,o,s,a=g.camelCase(t);return t=g.cssProps[a]||(g.cssProps[a]=Fe(a)||a),(s=g.cssHooks[t]||g.cssHooks[a])&&"get"in s&&(r=s.get(e,!0,n)),void 0===r&&(r=Oe(e,t,i)),"normal"===r&&t in Pe&&(r=Pe[t]),""===n||n?(o=parseFloat(r),!0===n||isFinite(o)?o||0:r):r}}),g.each(["height","width"],(function(e,t){g.cssHooks[t]={get:function(e,n,i){if(n)return je.test(g.css(e,"display"))&&0===e.offsetWidth?De(e,qe,(function(){return Ue(e,t,i)})):Ue(e,t,i)},set:function(e,n,i){var r,o=i&&Se(e),s=i&&Me(e,t,i,"border-box"===g.css(e,"boxSizing",!1,o),o);return s&&(r=W.exec(n))&&"px"!==(r[3]||"px")&&(e.style[t]=n,n=g.css(e,t)),He(0,n,s)}}})),g.cssHooks.marginLeft=Re(p.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(Oe(e,"marginLeft"))||e.getBoundingClientRect().left-De(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+"px"})),g.cssHooks.marginRight=Re(p.reliableMarginRight,(function(e,t){if(t)return De(e,{display:"inline-block"},Oe,[e,"marginRight"])})),g.each({margin:"",padding:"",border:"Width"},(function(e,t){g.cssHooks[e+t]={expand:function(n){for(var i=0,r={},o="string"==typeof n?n.split(" "):[n];i<4;i++)r[e+z[i]+t]=o[i]||o[i-2]||o[0];return r}},Ne.test(e)||(g.cssHooks[e+t].set=He)})),g.fn.extend({css:function(e,t){return P(this,(function(e,t,n){var i,r,o={},s=0;if(g.isArray(t)){for(i=Se(e),r=t.length;s<r;s++)o[t[s]]=g.css(e,t[s],!1,i);return o}return void 0!==n?g.style(e,t,n):g.css(e,t)}),e,t,arguments.length>1)},show:function(){return Ve(this,!0)},hide:function(){return Ve(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each((function(){J(this)?g(this).show():g(this).hide()}))}}),g.Tween=Be,Be.prototype={constructor:Be,init:function(e,t,n,i,r,o){this.elem=e,this.prop=n,this.easing=r||g.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=i,this.unit=o||(g.cssNumber[n]?"":"px")},cur:function(){var e=Be.propHooks[this.prop];return e&&e.get?e.get(this):Be.propHooks._default.get(this)},run:function(e){var t,n=Be.propHooks[this.prop];return this.options.duration?this.pos=t=g.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Be.propHooks._default.set(this),this}},Be.prototype.init.prototype=Be.prototype,Be.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=g.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){g.fx.step[e.prop]?g.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[g.cssProps[e.prop]]&&!g.cssHooks[e.prop]?e.elem[e.prop]=e.now:g.style(e.elem,e.prop,e.now+e.unit)}}},Be.propHooks.scrollTop=Be.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},g.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},g.fx=Be.prototype.init,g.fx.step={};var We,ze,Je=/^(?:toggle|show|hide)$/,Ye=/queueHooks$/;function Ge(){return n.setTimeout((function(){We=void 0})),We=g.now()}function Xe(e,t){var n,i=0,r={height:e};for(t=t?1:0;i<4;i+=2-t)r["margin"+(n=z[i])]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function Ke(e,t,n){for(var i,r=(Qe.tweeners[t]||[]).concat(Qe.tweeners["*"]),o=0,s=r.length;o<s;o++)if(i=r[o].call(n,t,e))return i}function Qe(e,t,n){var i,r,o=0,s=Qe.prefilters.length,a=g.Deferred().always((function(){delete l.elem})),l=function(){if(r)return!1;for(var t=We||Ge(),n=Math.max(0,c.startTime+c.duration-t),i=1-(n/c.duration||0),o=0,s=c.tweens.length;o<s;o++)c.tweens[o].run(i);return a.notifyWith(e,[c,i,n]),i<1&&s?n:(a.resolveWith(e,[c]),!1)},c=a.promise({elem:e,props:g.extend({},t),opts:g.extend(!0,{specialEasing:{},easing:g.easing._default},n),originalProperties:t,originalOptions:n,startTime:We||Ge(),duration:n.duration,tweens:[],createTween:function(t,n){var i=g.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(i),i},stop:function(t){var n=0,i=t?c.tweens.length:0;if(r)return this;for(r=!0;n<i;n++)c.tweens[n].run(1);return t?(a.notifyWith(e,[c,1,0]),a.resolveWith(e,[c,t])):a.rejectWith(e,[c,t]),this}}),u=c.props;for(function(e,t){var n,i,r,o,s;for(n in e)if(r=t[i=g.camelCase(n)],o=e[n],g.isArray(o)&&(r=o[1],o=e[n]=o[0]),n!==i&&(e[i]=o,delete e[n]),(s=g.cssHooks[i])&&"expand"in s)for(n in o=s.expand(o),delete e[i],o)n in e||(e[n]=o[n],t[n]=r);else t[i]=r}(u,c.opts.specialEasing);o<s;o++)if(i=Qe.prefilters[o].call(c,e,u,c.opts))return g.isFunction(i.stop)&&(g._queueHooks(c.elem,c.opts.queue).stop=g.proxy(i.stop,i)),i;return g.map(u,Ke,c),g.isFunction(c.opts.start)&&c.opts.start.call(e,c),g.fx.timer(g.extend(l,{elem:e,anim:c,queue:c.opts.queue})),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always)}g.Animation=g.extend(Qe,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return Y(n.elem,e,W.exec(t),n),n}]},tweener:function(e,t){g.isFunction(e)?(t=e,e=["*"]):e=e.match(j);for(var n,i=0,r=e.length;i<r;i++)n=e[i],Qe.tweeners[n]=Qe.tweeners[n]||[],Qe.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var i,r,o,s,a,l,c,u=this,f={},d=e.style,h=e.nodeType&&J(e),p=F.get(e,"fxshow");for(i in n.queue||(null==(a=g._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,l=a.empty.fire,a.empty.fire=function(){a.unqueued||l()}),a.unqueued++,u.always((function(){u.always((function(){a.unqueued--,g.queue(e,"fx").length||a.empty.fire()}))}))),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===("none"===(c=g.css(e,"display"))?F.get(e,"olddisplay")||Ee(e.nodeName):c)&&"none"===g.css(e,"float")&&(d.display="inline-block")),n.overflow&&(d.overflow="hidden",u.always((function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}))),t)if(r=t[i],Je.exec(r)){if(delete t[i],o=o||"toggle"===r,r===(h?"hide":"show")){if("show"!==r||!p||void 0===p[i])continue;h=!0}f[i]=p&&p[i]||g.style(e,i)}else c=void 0;if(g.isEmptyObject(f))"inline"===("none"===c?Ee(e.nodeName):c)&&(d.display=c);else for(i in p?"hidden"in p&&(h=p.hidden):p=F.access(e,"fxshow",{}),o&&(p.hidden=!h),h?g(e).show():u.done((function(){g(e).hide()})),u.done((function(){var t;for(t in F.remove(e,"fxshow"),f)g.style(e,t,f[t])})),f)s=Ke(h?p[i]:0,i,u),i in p||(p[i]=s.start,h&&(s.end=s.start,s.start="width"===i||"height"===i?1:0))}],prefilter:function(e,t){t?Qe.prefilters.unshift(e):Qe.prefilters.push(e)}}),g.speed=function(e,t,n){var i=e&&"object"==typeof e?g.extend({},e):{complete:n||!n&&t||g.isFunction(e)&&e,duration:e,easing:n&&t||t&&!g.isFunction(t)&&t};return i.duration=g.fx.off?0:"number"==typeof i.duration?i.duration:i.duration in g.fx.speeds?g.fx.speeds[i.duration]:g.fx.speeds._default,null!=i.queue&&!0!==i.queue||(i.queue="fx"),i.old=i.complete,i.complete=function(){g.isFunction(i.old)&&i.old.call(this),i.queue&&g.dequeue(this,i.queue)},i},g.fn.extend({fadeTo:function(e,t,n,i){return this.filter(J).css("opacity",0).show().end().animate({opacity:t},e,n,i)},animate:function(e,t,n,i){var r=g.isEmptyObject(e),o=g.speed(t,n,i),s=function(){var t=Qe(this,g.extend({},e),o);(r||F.get(this,"finish"))&&t.stop(!0)};return s.finish=s,r||!1===o.queue?this.each(s):this.queue(o.queue,s)},stop:function(e,t,n){var i=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each((function(){var t=!0,r=null!=e&&e+"queueHooks",o=g.timers,s=F.get(this);if(r)s[r]&&s[r].stop&&i(s[r]);else for(r in s)s[r]&&s[r].stop&&Ye.test(r)&&i(s[r]);for(r=o.length;r--;)o[r].elem!==this||null!=e&&o[r].queue!==e||(o[r].anim.stop(n),t=!1,o.splice(r,1));!t&&n||g.dequeue(this,e)}))},finish:function(e){return!1!==e&&(e=e||"fx"),this.each((function(){var t,n=F.get(this),i=n[e+"queue"],r=n[e+"queueHooks"],o=g.timers,s=i?i.length:0;for(n.finish=!0,g.queue(this,e,[]),r&&r.stop&&r.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<s;t++)i[t]&&i[t].finish&&i[t].finish.call(this);delete n.finish}))}}),g.each(["toggle","show","hide"],(function(e,t){var n=g.fn[t];g.fn[t]=function(e,i,r){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(Xe(t,!0),e,i,r)}})),g.each({slideDown:Xe("show"),slideUp:Xe("hide"),slideToggle:Xe("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},(function(e,t){g.fn[e]=function(e,n,i){return this.animate(t,e,n,i)}})),g.timers=[],g.fx.tick=function(){var e,t=0,n=g.timers;for(We=g.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||g.fx.stop(),We=void 0},g.fx.timer=function(e){g.timers.push(e),e()?g.fx.start():g.timers.pop()},g.fx.interval=13,g.fx.start=function(){ze||(ze=n.setInterval(g.fx.tick,g.fx.interval))},g.fx.stop=function(){n.clearInterval(ze),ze=null},g.fx.speeds={slow:600,fast:200,_default:400},g.fn.delay=function(e,t){return e=g.fx&&g.fx.speeds[e]||e,t=t||"fx",this.queue(t,(function(t,i){var r=n.setTimeout(t,e);i.stop=function(){n.clearTimeout(r)}}))},function(){var e=s.createElement("input"),t=s.createElement("select"),n=t.appendChild(s.createElement("option"));e.type="checkbox",p.checkOn=""!==e.value,p.optSelected=n.selected,t.disabled=!0,p.optDisabled=!n.disabled,(e=s.createElement("input")).value="t",e.type="radio",p.radioValue="t"===e.value}();var Ze,et=g.expr.attrHandle;g.fn.extend({attr:function(e,t){return P(this,g.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each((function(){g.removeAttr(this,e)}))}}),g.extend({attr:function(e,t,n){var i,r,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?g.prop(e,t,n):(1===o&&g.isXMLDoc(e)||(t=t.toLowerCase(),r=g.attrHooks[t]||(g.expr.match.bool.test(t)?Ze:void 0)),void 0!==n?null===n?void g.removeAttr(e,t):r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:(e.setAttribute(t,n+""),n):r&&"get"in r&&null!==(i=r.get(e,t))?i:null==(i=g.find.attr(e,t))?void 0:i)},attrHooks:{type:{set:function(e,t){if(!p.radioValue&&"radio"===t&&g.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,i,r=0,o=t&&t.match(j);if(o&&1===e.nodeType)for(;n=o[r++];)i=g.propFix[n]||n,g.expr.match.bool.test(n)&&(e[i]=!1),e.removeAttribute(n)}}),Ze={set:function(e,t,n){return!1===t?g.removeAttr(e,n):e.setAttribute(n,n),n}},g.each(g.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=et[t]||g.find.attr;et[t]=function(e,t,i){var r,o;return i||(o=et[t],et[t]=r,r=null!=n(e,t,i)?t.toLowerCase():null,et[t]=o),r}}));var tt=/^(?:input|select|textarea|button)$/i,nt=/^(?:a|area)$/i;g.fn.extend({prop:function(e,t){return P(this,g.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[g.propFix[e]||e]}))}}),g.extend({prop:function(e,t,n){var i,r,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&g.isXMLDoc(e)||(t=g.propFix[t]||t,r=g.propHooks[t]),void 0!==n?r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:e[t]=n:r&&"get"in r&&null!==(i=r.get(e,t))?i:e[t]},propHooks:{tabIndex:{get:function(e){var t=g.find.attr(e,"tabindex");return t?parseInt(t,10):tt.test(e.nodeName)||nt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),p.optSelected||(g.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),g.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){g.propFix[this.toLowerCase()]=this}));var it=/[\t\r\n\f]/g;function rt(e){return e.getAttribute&&e.getAttribute("class")||""}g.fn.extend({addClass:function(e){var t,n,i,r,o,s,a,l=0;if(g.isFunction(e))return this.each((function(t){g(this).addClass(e.call(this,t,rt(this)))}));if("string"==typeof e&&e)for(t=e.match(j)||[];n=this[l++];)if(r=rt(n),i=1===n.nodeType&&(" "+r+" ").replace(it," ")){for(s=0;o=t[s++];)i.indexOf(" "+o+" ")<0&&(i+=o+" ");r!==(a=g.trim(i))&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,i,r,o,s,a,l=0;if(g.isFunction(e))return this.each((function(t){g(this).removeClass(e.call(this,t,rt(this)))}));if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(j)||[];n=this[l++];)if(r=rt(n),i=1===n.nodeType&&(" "+r+" ").replace(it," ")){for(s=0;o=t[s++];)for(;i.indexOf(" "+o+" ")>-1;)i=i.replace(" "+o+" "," ");r!==(a=g.trim(i))&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):g.isFunction(e)?this.each((function(n){g(this).toggleClass(e.call(this,n,rt(this),t),t)})):this.each((function(){var t,i,r,o;if("string"===n)for(i=0,r=g(this),o=e.match(j)||[];t=o[i++];)r.hasClass(t)?r.removeClass(t):r.addClass(t);else void 0!==e&&"boolean"!==n||((t=rt(this))&&F.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":F.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,i=0;for(t=" "+e+" ";n=this[i++];)if(1===n.nodeType&&(" "+rt(n)+" ").replace(it," ").indexOf(t)>-1)return!0;return!1}});var ot=/\r/g,st=/[\x20\t\r\n\f]+/g;g.fn.extend({val:function(e){var t,n,i,r=this[0];return arguments.length?(i=g.isFunction(e),this.each((function(n){var r;1===this.nodeType&&(null==(r=i?e.call(this,n,g(this).val()):e)?r="":"number"==typeof r?r+="":g.isArray(r)&&(r=g.map(r,(function(e){return null==e?"":e+""}))),(t=g.valHooks[this.type]||g.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,r,"value")||(this.value=r))}))):r?(t=g.valHooks[r.type]||g.valHooks[r.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(r,"value"))?n:"string"==typeof(n=r.value)?n.replace(ot,""):null==n?"":n:void 0}}),g.extend({valHooks:{option:{get:function(e){var t=g.find.attr(e,"value");return null!=t?t:g.trim(g.text(e)).replace(st," ")}},select:{get:function(e){for(var t,n,i=e.options,r=e.selectedIndex,o="select-one"===e.type||r<0,s=o?null:[],a=o?r+1:i.length,l=r<0?a:o?r:0;l<a;l++)if(((n=i[l]).selected||l===r)&&(p.optDisabled?!n.disabled:null===n.getAttribute("disabled"))&&(!n.parentNode.disabled||!g.nodeName(n.parentNode,"optgroup"))){if(t=g(n).val(),o)return t;s.push(t)}return s},set:function(e,t){for(var n,i,r=e.options,o=g.makeArray(t),s=r.length;s--;)((i=r[s]).selected=g.inArray(g.valHooks.option.get(i),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),g.each(["radio","checkbox"],(function(){g.valHooks[this]={set:function(e,t){if(g.isArray(t))return e.checked=g.inArray(g(e).val(),t)>-1}},p.checkOn||(g.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}));var at=/^(?:focusinfocus|focusoutblur)$/;g.extend(g.event,{trigger:function(e,t,i,r){var o,a,l,c,u,f,d,p=[i||s],m=h.call(e,"type")?e.type:e,v=h.call(e,"namespace")?e.namespace.split("."):[];if(a=l=i=i||s,3!==i.nodeType&&8!==i.nodeType&&!at.test(m+g.event.triggered)&&(m.indexOf(".")>-1&&(v=m.split("."),m=v.shift(),v.sort()),u=m.indexOf(":")<0&&"on"+m,(e=e[g.expando]?e:new g.Event(m,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=v.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+v.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),t=null==t?[e]:g.makeArray(t,[e]),d=g.event.special[m]||{},r||!d.trigger||!1!==d.trigger.apply(i,t))){if(!r&&!d.noBubble&&!g.isWindow(i)){for(c=d.delegateType||m,at.test(c+m)||(a=a.parentNode);a;a=a.parentNode)p.push(a),l=a;l===(i.ownerDocument||s)&&p.push(l.defaultView||l.parentWindow||n)}for(o=0;(a=p[o++])&&!e.isPropagationStopped();)e.type=o>1?c:d.bindType||m,(f=(F.get(a,"events")||{})[e.type]&&F.get(a,"handle"))&&f.apply(a,t),(f=u&&a[u])&&f.apply&&L(a)&&(e.result=f.apply(a,t),!1===e.result&&e.preventDefault());return e.type=m,r||e.isDefaultPrevented()||d._default&&!1!==d._default.apply(p.pop(),t)||!L(i)||u&&g.isFunction(i[m])&&!g.isWindow(i)&&((l=i[u])&&(i[u]=null),g.event.triggered=m,i[m](),g.event.triggered=void 0,l&&(i[u]=l)),e.result}},simulate:function(e,t,n){var i=g.extend(new g.Event,n,{type:e,isSimulated:!0});g.event.trigger(i,null,t)}}),g.fn.extend({trigger:function(e,t){return this.each((function(){g.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return g.event.trigger(e,t,n,!0)}}),g.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),(function(e,t){g.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}})),g.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),p.focusin="onfocusin"in n,p.focusin||g.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){g.event.simulate(t,e.target,g.event.fix(e))};g.event.special[t]={setup:function(){var i=this.ownerDocument||this,r=F.access(i,t);r||i.addEventListener(e,n,!0),F.access(i,t,(r||0)+1)},teardown:function(){var i=this.ownerDocument||this,r=F.access(i,t)-1;r?F.access(i,t,r):(i.removeEventListener(e,n,!0),F.remove(i,t))}}}));var lt=n.location,ct=g.now(),ut=/\?/;g.parseJSON=function(e){return JSON.parse(e+"")},g.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||g.error("Invalid XML: "+e),t};var ft=/#.*$/,dt=/([?&])_=[^&]*/,ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,pt=/^(?:GET|HEAD)$/,gt=/^\/\//,mt={},vt={},yt="*/".concat("*"),bt=s.createElement("a");function wt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var i,r=0,o=t.toLowerCase().match(j)||[];if(g.isFunction(n))for(;i=o[r++];)"+"===i[0]?(i=i.slice(1)||"*",(e[i]=e[i]||[]).unshift(n)):(e[i]=e[i]||[]).push(n)}}function Tt(e,t,n,i){var r={},o=e===vt;function s(a){var l;return r[a]=!0,g.each(e[a]||[],(function(e,a){var c=a(t,n,i);return"string"!=typeof c||o||r[c]?o?!(l=c):void 0:(t.dataTypes.unshift(c),s(c),!1)})),l}return s(t.dataTypes[0])||!r["*"]&&s("*")}function kt(e,t){var n,i,r=g.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((r[n]?e:i||(i={}))[n]=t[n]);return i&&g.extend(!0,e,i),e}bt.href=lt.href,g.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:lt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(lt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":yt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":g.parseJSON,"text xml":g.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?kt(kt(e,g.ajaxSettings),t):kt(g.ajaxSettings,e)},ajaxPrefilter:wt(mt),ajaxTransport:wt(vt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var i,r,o,a,l,c,u,f,d=g.ajaxSetup({},t),h=d.context||d,p=d.context&&(h.nodeType||h.jquery)?g(h):g.event,m=g.Deferred(),v=g.Callbacks("once memory"),y=d.statusCode||{},b={},w={},T=0,k="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===T){if(!a)for(a={};t=ht.exec(o);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===T?o:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return T||(e=w[n]=w[n]||e,b[e]=t),this},overrideMimeType:function(e){return T||(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(T<2)for(t in e)y[t]=[y[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||k;return i&&i.abort(t),x(0,t),this}};if(m.promise(C).complete=v.add,C.success=C.done,C.error=C.fail,d.url=((e||d.url||lt.href)+"").replace(ft,"").replace(gt,lt.protocol+"//"),d.type=t.method||t.type||d.method||d.type,d.dataTypes=g.trim(d.dataType||"*").toLowerCase().match(j)||[""],null==d.crossDomain){c=s.createElement("a");try{c.href=d.url,c.href=c.href,d.crossDomain=bt.protocol+"//"+bt.host!=c.protocol+"//"+c.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=g.param(d.data,d.traditional)),Tt(mt,d,t,C),2===T)return C;for(f in(u=g.event&&d.global)&&0==g.active++&&g.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!pt.test(d.type),r=d.url,d.hasContent||(d.data&&(r=d.url+=(ut.test(r)?"&":"?")+d.data,delete d.data),!1===d.cache&&(d.url=dt.test(r)?r.replace(dt,"$1_="+ct++):r+(ut.test(r)?"&":"?")+"_="+ct++)),d.ifModified&&(g.lastModified[r]&&C.setRequestHeader("If-Modified-Since",g.lastModified[r]),g.etag[r]&&C.setRequestHeader("If-None-Match",g.etag[r])),(d.data&&d.hasContent&&!1!==d.contentType||t.contentType)&&C.setRequestHeader("Content-Type",d.contentType),C.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+yt+"; q=0.01":""):d.accepts["*"]),d.headers)C.setRequestHeader(f,d.headers[f]);if(d.beforeSend&&(!1===d.beforeSend.call(h,C,d)||2===T))return C.abort();for(f in k="abort",{success:1,error:1,complete:1})C[f](d[f]);if(i=Tt(vt,d,t,C)){if(C.readyState=1,u&&p.trigger("ajaxSend",[C,d]),2===T)return C;d.async&&d.timeout>0&&(l=n.setTimeout((function(){C.abort("timeout")}),d.timeout));try{T=1,i.send(b,x)}catch(e){if(!(T<2))throw e;x(-1,e)}}else x(-1,"No Transport");function x(e,t,s,a){var c,f,b,w,k,x=t;2!==T&&(T=2,l&&n.clearTimeout(l),i=void 0,o=a||"",C.readyState=e>0?4:0,c=e>=200&&e<300||304===e,s&&(w=function(e,t,n){for(var i,r,o,s,a=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===i&&(i=e.mimeType||t.getResponseHeader("Content-Type"));if(i)for(r in a)if(a[r]&&a[r].test(i)){l.unshift(r);break}if(l[0]in n)o=l[0];else{for(r in n){if(!l[0]||e.converters[r+" "+l[0]]){o=r;break}s||(s=r)}o=o||s}if(o)return o!==l[0]&&l.unshift(o),n[o]}(d,C,s)),w=function(e,t,n,i){var r,o,s,a,l,c={},u=e.dataTypes.slice();if(u[1])for(s in e.converters)c[s.toLowerCase()]=e.converters[s];for(o=u.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&i&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=u.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(!(s=c[l+" "+o]||c["* "+o]))for(r in c)if((a=r.split(" "))[1]===o&&(s=c[l+" "+a[0]]||c["* "+a[0]])){!0===s?s=c[r]:!0!==c[r]&&(o=a[0],u.unshift(a[1]));break}if(!0!==s)if(s&&e.throws)t=s(t);else try{t=s(t)}catch(e){return{state:"parsererror",error:s?e:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}(d,w,C,c),c?(d.ifModified&&((k=C.getResponseHeader("Last-Modified"))&&(g.lastModified[r]=k),(k=C.getResponseHeader("etag"))&&(g.etag[r]=k)),204===e||"HEAD"===d.type?x="nocontent":304===e?x="notmodified":(x=w.state,f=w.data,c=!(b=w.error))):(b=x,!e&&x||(x="error",e<0&&(e=0))),C.status=e,C.statusText=(t||x)+"",c?m.resolveWith(h,[f,x,C]):m.rejectWith(h,[C,x,b]),C.statusCode(y),y=void 0,u&&p.trigger(c?"ajaxSuccess":"ajaxError",[C,d,c?f:b]),v.fireWith(h,[C,x]),u&&(p.trigger("ajaxComplete",[C,d]),--g.active||g.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return g.get(e,t,n,"json")},getScript:function(e,t){return g.get(e,void 0,t,"script")}}),g.each(["get","post"],(function(e,t){g[t]=function(e,n,i,r){return g.isFunction(n)&&(r=r||i,i=n,n=void 0),g.ajax(g.extend({url:e,type:t,dataType:r,data:n,success:i},g.isPlainObject(e)&&e))}})),g._evalUrl=function(e){return g.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},g.fn.extend({wrapAll:function(e){var t;return g.isFunction(e)?this.each((function(t){g(this).wrapAll(e.call(this,t))})):(this[0]&&(t=g(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this)},wrapInner:function(e){return g.isFunction(e)?this.each((function(t){g(this).wrapInner(e.call(this,t))})):this.each((function(){var t=g(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=g.isFunction(e);return this.each((function(n){g(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(){return this.parent().each((function(){g.nodeName(this,"body")||g(this).replaceWith(this.childNodes)})).end()}}),g.expr.filters.hidden=function(e){return!g.expr.filters.visible(e)},g.expr.filters.visible=function(e){return e.offsetWidth>0||e.offsetHeight>0||e.getClientRects().length>0};var Ct=/%20/g,xt=/\[\]$/,At=/\r?\n/g,Et=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function _t(e,t,n,i){var r;if(g.isArray(t))g.each(t,(function(t,r){n||xt.test(e)?i(e,r):_t(e+"["+("object"==typeof r&&null!=r?t:"")+"]",r,n,i)}));else if(n||"object"!==g.type(t))i(e,t);else for(r in t)_t(e+"["+r+"]",t[r],n,i)}g.param=function(e,t){var n,i=[],r=function(e,t){t=g.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=g.ajaxSettings&&g.ajaxSettings.traditional),g.isArray(e)||e.jquery&&!g.isPlainObject(e))g.each(e,(function(){r(this.name,this.value)}));else for(n in e)_t(n,e[n],t,r);return i.join("&").replace(Ct,"+")},g.fn.extend({serialize:function(){return g.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=g.prop(this,"elements");return e?g.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!g(this).is(":disabled")&&Nt.test(this.nodeName)&&!Et.test(e)&&(this.checked||!G.test(e))})).map((function(e,t){var n=g(this).val();return null==n?null:g.isArray(n)?g.map(n,(function(e){return{name:t.name,value:e.replace(At,"\r\n")}})):{name:t.name,value:n.replace(At,"\r\n")}})).get()}}),g.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var St={0:200,1223:204},Dt=g.ajaxSettings.xhr();p.cors=!!Dt&&"withCredentials"in Dt,p.ajax=Dt=!!Dt,g.ajaxTransport((function(e){var t,i;if(p.cors||Dt&&!e.crossDomain)return{send:function(r,o){var s,a=e.xhr();if(a.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(s in e.xhrFields)a[s]=e.xhrFields[s];for(s in e.mimeType&&a.overrideMimeType&&a.overrideMimeType(e.mimeType),e.crossDomain||r["X-Requested-With"]||(r["X-Requested-With"]="XMLHttpRequest"),r)a.setRequestHeader(s,r[s]);t=function(e){return function(){t&&(t=i=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?o(0,"error"):o(a.status,a.statusText):o(St[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=t(),i=a.onerror=t("error"),void 0!==a.onabort?a.onabort=i:a.onreadystatechange=function(){4===a.readyState&&n.setTimeout((function(){t&&i()}))},t=t("abort");try{a.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}})),g.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return g.globalEval(e),e}}}),g.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),g.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain)return{send:function(i,r){t=g("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&r("error"===e.type?404:200,e.type)}),s.head.appendChild(t[0])},abort:function(){n&&n()}}}));var It=[],Ot=/(=)\?(?=&|$)|\?\?/;g.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=It.pop()||g.expando+"_"+ct++;return this[e]=!0,e}}),g.ajaxPrefilter("json jsonp",(function(e,t,i){var r,o,s,a=!1!==e.jsonp&&(Ot.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ot.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=g.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ot,"$1"+r):!1!==e.jsonp&&(e.url+=(ut.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return s||g.error(r+" was not called"),s[0]},e.dataTypes[0]="json",o=n[r],n[r]=function(){s=arguments},i.always((function(){void 0===o?g(n).removeProp(r):n[r]=o,e[r]&&(e.jsonpCallback=t.jsonpCallback,It.push(r)),s&&g.isFunction(o)&&o(s[0]),s=o=void 0})),"script"})),g.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||s;var i=A.exec(e),r=!n&&[];return i?[t.createElement(i[1])]:(i=re([e],t,r),r&&r.length&&g(r).remove(),g.merge([],i.childNodes))};var Rt=g.fn.load;function jt(e){return g.isWindow(e)?e:9===e.nodeType&&e.defaultView}g.fn.load=function(e,t,n){if("string"!=typeof e&&Rt)return Rt.apply(this,arguments);var i,r,o,s=this,a=e.indexOf(" ");return a>-1&&(i=g.trim(e.slice(a)),e=e.slice(0,a)),g.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(r="POST"),s.length>0&&g.ajax({url:e,type:r||"GET",dataType:"html",data:t}).done((function(e){o=arguments,s.html(i?g("<div>").append(g.parseHTML(e)).find(i):e)})).always(n&&function(e,t){s.each((function(){n.apply(this,o||[e.responseText,t,e])}))}),this},g.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],(function(e,t){g.fn[t]=function(e){return this.on(t,e)}})),g.expr.filters.animated=function(e){return g.grep(g.timers,(function(t){return e===t.elem})).length},g.offset={setOffset:function(e,t,n){var i,r,o,s,a,l,c=g.css(e,"position"),u=g(e),f={};"static"===c&&(e.style.position="relative"),a=u.offset(),o=g.css(e,"top"),l=g.css(e,"left"),("absolute"===c||"fixed"===c)&&(o+l).indexOf("auto")>-1?(s=(i=u.position()).top,r=i.left):(s=parseFloat(o)||0,r=parseFloat(l)||0),g.isFunction(t)&&(t=t.call(e,n,g.extend({},a))),null!=t.top&&(f.top=t.top-a.top+s),null!=t.left&&(f.left=t.left-a.left+r),"using"in t?t.using.call(e,f):u.css(f)}},g.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){g.offset.setOffset(this,e,t)}));var t,n,i=this[0],r={top:0,left:0},o=i&&i.ownerDocument;return o?(t=o.documentElement,g.contains(t,i)?(r=i.getBoundingClientRect(),n=jt(o),{top:r.top+n.pageYOffset-t.clientTop,left:r.left+n.pageXOffset-t.clientLeft}):r):void 0},position:function(){if(this[0]){var e,t,n=this[0],i={top:0,left:0};return"fixed"===g.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),g.nodeName(e[0],"html")||(i=e.offset()),i.top+=g.css(e[0],"borderTopWidth",!0),i.left+=g.css(e[0],"borderLeftWidth",!0)),{top:t.top-i.top-g.css(n,"marginTop",!0),left:t.left-i.left-g.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent;e&&"static"===g.css(e,"position");)e=e.offsetParent;return e||Ie}))}}),g.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},(function(e,t){var n="pageYOffset"===t;g.fn[e]=function(i){return P(this,(function(e,i,r){var o=jt(e);if(void 0===r)return o?o[t]:e[i];o?o.scrollTo(n?o.pageXOffset:r,n?r:o.pageYOffset):e[i]=r}),e,i,arguments.length)}})),g.each(["top","left"],(function(e,t){g.cssHooks[t]=Re(p.pixelPosition,(function(e,n){if(n)return n=Oe(e,t),_e.test(n)?g(e).position()[t]+"px":n}))})),g.each({Height:"height",Width:"width"},(function(e,t){g.each({padding:"inner"+e,content:t,"":"outer"+e},(function(n,i){g.fn[i]=function(i,r){var o=arguments.length&&(n||"boolean"!=typeof i),s=n||(!0===i||!0===r?"margin":"border");return P(this,(function(t,n,i){var r;return g.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(r=t.documentElement,Math.max(t.body["scroll"+e],r["scroll"+e],t.body["offset"+e],r["offset"+e],r["client"+e])):void 0===i?g.css(t,n,s):g.style(t,n,i,s)}),t,o?i:void 0,o,null)}}))})),g.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,i){return this.on(t,e,n,i)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},size:function(){return this.length}}),g.fn.andSelf=g.fn.addBack,void 0===(i=function(){return g}.apply(t,[]))||(e.exports=i);var qt=n.jQuery,Pt=n.$;return g.noConflict=function(e){return n.$===g&&(n.$=Pt),e&&n.jQuery===g&&(n.jQuery=qt),g},r||(n.jQuery=n.$=g),g},"object"==typeof e.exports?e.exports=r.document?o(r,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return o(e)}:o(r)},"./node_modules/process/browser.js":function(e,t){var n,i,r=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(e){if(n===setTimeout)return setTimeout(e,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(e){n=o}try{i="function"==typeof clearTimeout?clearTimeout:s}catch(e){i=s}}();var l,c=[],u=!1,f=-1;function d(){u&&l&&(u=!1,l.length?c=l.concat(c):f=-1,c.length&&h())}function h(){if(!u){var e=a(d);u=!0;for(var t=c.length;t;){for(l=c,c=[];++f<t;)l&&l[f].run();f=-1,t=c.length}l=null,u=!1,function(e){if(i===clearTimeout)return clearTimeout(e);if((i===s||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(e);try{i(e)}catch(t){try{return i.call(null,e)}catch(t){return i.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function g(){}r.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];c.push(new p(e,t)),1!==c.length||u||a(h)},p.prototype.run=function(){this.fun.apply(null,this.array)},r.title="browser",r.browser=!0,r.env={},r.argv=[],r.version="",r.versions={},r.on=g,r.addListener=g,r.once=g,r.off=g,r.removeListener=g,r.removeAllListeners=g,r.emit=g,r.prependListener=g,r.prependOnceListener=g,r.listeners=function(e){return[]},r.binding=function(e){throw new Error("process.binding is not supported")},r.cwd=function(){return"/"},r.chdir=function(e){throw new Error("process.chdir is not supported")},r.umask=function(){return 0}},"./node_modules/underscore/underscore.js":function(e,t,n){(function(){var n=this,i=n._,r={},o=Array.prototype,s=Object.prototype,a=Function.prototype,l=o.push,c=o.slice,u=o.concat,f=s.toString,d=s.hasOwnProperty,h=o.forEach,p=o.map,g=o.reduce,m=o.reduceRight,v=o.filter,y=o.every,b=o.some,w=o.indexOf,T=o.lastIndexOf,k=Array.isArray,C=Object.keys,x=a.bind,A=function(e){return e instanceof A?e:this instanceof A?void(this._wrapped=e):new A(e)};e.exports&&(t=e.exports=A),t._=A,A.VERSION="1.5.1";var E=A.each=A.forEach=function(e,t,n){if(null!=e)if(h&&e.forEach===h)e.forEach(t,n);else if(e.length===+e.length){for(var i=0,o=e.length;i<o;i++)if(t.call(n,e[i],i,e)===r)return}else for(var s in e)if(A.has(e,s)&&t.call(n,e[s],s,e)===r)return};A.map=A.collect=function(e,t,n){var i=[];return null==e?i:p&&e.map===p?e.map(t,n):(E(e,(function(e,r,o){i.push(t.call(n,e,r,o))})),i)};var N="Reduce of empty array with no initial value";A.reduce=A.foldl=A.inject=function(e,t,n,i){var r=arguments.length>2;if(null==e&&(e=[]),g&&e.reduce===g)return i&&(t=A.bind(t,i)),r?e.reduce(t,n):e.reduce(t);if(E(e,(function(e,o,s){r?n=t.call(i,n,e,o,s):(n=e,r=!0)})),!r)throw new TypeError(N);return n},A.reduceRight=A.foldr=function(e,t,n,i){var r=arguments.length>2;if(null==e&&(e=[]),m&&e.reduceRight===m)return i&&(t=A.bind(t,i)),r?e.reduceRight(t,n):e.reduceRight(t);var o=e.length;if(o!==+o){var s=A.keys(e);o=s.length}if(E(e,(function(a,l,c){l=s?s[--o]:--o,r?n=t.call(i,n,e[l],l,c):(n=e[l],r=!0)})),!r)throw new TypeError(N);return n},A.find=A.detect=function(e,t,n){var i;return _(e,(function(e,r,o){if(t.call(n,e,r,o))return i=e,!0})),i},A.filter=A.select=function(e,t,n){var i=[];return null==e?i:v&&e.filter===v?e.filter(t,n):(E(e,(function(e,r,o){t.call(n,e,r,o)&&i.push(e)})),i)},A.reject=function(e,t,n){return A.filter(e,(function(e,i,r){return!t.call(n,e,i,r)}),n)},A.every=A.all=function(e,t,n){t||(t=A.identity);var i=!0;return null==e?i:y&&e.every===y?e.every(t,n):(E(e,(function(e,o,s){if(!(i=i&&t.call(n,e,o,s)))return r})),!!i)};var _=A.some=A.any=function(e,t,n){t||(t=A.identity);var i=!1;return null==e?i:b&&e.some===b?e.some(t,n):(E(e,(function(e,o,s){if(i||(i=t.call(n,e,o,s)))return r})),!!i)};A.contains=A.include=function(e,t){return null!=e&&(w&&e.indexOf===w?-1!=e.indexOf(t):_(e,(function(e){return e===t})))},A.invoke=function(e,t){var n=c.call(arguments,2),i=A.isFunction(t);return A.map(e,(function(e){return(i?t:e[t]).apply(e,n)}))},A.pluck=function(e,t){return A.map(e,(function(e){return e[t]}))},A.where=function(e,t,n){return A.isEmpty(t)?n?void 0:[]:A[n?"find":"filter"](e,(function(e){for(var n in t)if(t[n]!==e[n])return!1;return!0}))},A.findWhere=function(e,t){return A.where(e,t,!0)},A.max=function(e,t,n){if(!t&&A.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.max.apply(Math,e);if(!t&&A.isEmpty(e))return-1/0;var i={computed:-1/0,value:-1/0};return E(e,(function(e,r,o){var s=t?t.call(n,e,r,o):e;s>i.computed&&(i={value:e,computed:s})})),i.value},A.min=function(e,t,n){if(!t&&A.isArray(e)&&e[0]===+e[0]&&e.length<65535)return Math.min.apply(Math,e);if(!t&&A.isEmpty(e))return 1/0;var i={computed:1/0,value:1/0};return E(e,(function(e,r,o){var s=t?t.call(n,e,r,o):e;s<i.computed&&(i={value:e,computed:s})})),i.value},A.shuffle=function(e){var t,n=0,i=[];return E(e,(function(e){t=A.random(n++),i[n-1]=i[t],i[t]=e})),i};var S=function(e){return A.isFunction(e)?e:function(t){return t[e]}};A.sortBy=function(e,t,n){var i=S(t);return A.pluck(A.map(e,(function(e,t,r){return{value:e,index:t,criteria:i.call(n,e,t,r)}})).sort((function(e,t){var n=e.criteria,i=t.criteria;if(n!==i){if(n>i||void 0===n)return 1;if(n<i||void 0===i)return-1}return e.index<t.index?-1:1})),"value")};var D=function(e,t,n,i){var r={},o=S(null==t?A.identity:t);return E(e,(function(t,s){var a=o.call(n,t,s,e);i(r,a,t)})),r};A.groupBy=function(e,t,n){return D(e,t,n,(function(e,t,n){(A.has(e,t)?e[t]:e[t]=[]).push(n)}))},A.countBy=function(e,t,n){return D(e,t,n,(function(e,t){A.has(e,t)||(e[t]=0),e[t]++}))},A.sortedIndex=function(e,t,n,i){for(var r=(n=null==n?A.identity:S(n)).call(i,t),o=0,s=e.length;o<s;){var a=o+s>>>1;n.call(i,e[a])<r?o=a+1:s=a}return o},A.toArray=function(e){return e?A.isArray(e)?c.call(e):e.length===+e.length?A.map(e,A.identity):A.values(e):[]},A.size=function(e){return null==e?0:e.length===+e.length?e.length:A.keys(e).length},A.first=A.head=A.take=function(e,t,n){if(null!=e)return null==t||n?e[0]:c.call(e,0,t)},A.initial=function(e,t,n){return c.call(e,0,e.length-(null==t||n?1:t))},A.last=function(e,t,n){if(null!=e)return null==t||n?e[e.length-1]:c.call(e,Math.max(e.length-t,0))},A.rest=A.tail=A.drop=function(e,t,n){return c.call(e,null==t||n?1:t)},A.compact=function(e){return A.filter(e,A.identity)};var I=function(e,t,n){return t&&A.every(e,A.isArray)?u.apply(n,e):(E(e,(function(e){A.isArray(e)||A.isArguments(e)?t?l.apply(n,e):I(e,t,n):n.push(e)})),n)};A.flatten=function(e,t){return I(e,t,[])},A.without=function(e){return A.difference(e,c.call(arguments,1))},A.uniq=A.unique=function(e,t,n,i){A.isFunction(t)&&(i=n,n=t,t=!1);var r=n?A.map(e,n,i):e,o=[],s=[];return E(r,(function(n,i){(t?i&&s[s.length-1]===n:A.contains(s,n))||(s.push(n),o.push(e[i]))})),o},A.union=function(){return A.uniq(A.flatten(arguments,!0))},A.intersection=function(e){var t=c.call(arguments,1);return A.filter(A.uniq(e),(function(e){return A.every(t,(function(t){return A.indexOf(t,e)>=0}))}))},A.difference=function(e){var t=u.apply(o,c.call(arguments,1));return A.filter(e,(function(e){return!A.contains(t,e)}))},A.zip=function(){for(var e=A.max(A.pluck(arguments,"length").concat(0)),t=new Array(e),n=0;n<e;n++)t[n]=A.pluck(arguments,""+n);return t},A.object=function(e,t){if(null==e)return{};for(var n={},i=0,r=e.length;i<r;i++)t?n[e[i]]=t[i]:n[e[i][0]]=e[i][1];return n},A.indexOf=function(e,t,n){if(null==e)return-1;var i=0,r=e.length;if(n){if("number"!=typeof n)return e[i=A.sortedIndex(e,t)]===t?i:-1;i=n<0?Math.max(0,r+n):n}if(w&&e.indexOf===w)return e.indexOf(t,n);for(;i<r;i++)if(e[i]===t)return i;return-1},A.lastIndexOf=function(e,t,n){if(null==e)return-1;var i=null!=n;if(T&&e.lastIndexOf===T)return i?e.lastIndexOf(t,n):e.lastIndexOf(t);for(var r=i?n:e.length;r--;)if(e[r]===t)return r;return-1},A.range=function(e,t,n){arguments.length<=1&&(t=e||0,e=0),n=arguments[2]||1;for(var i=Math.max(Math.ceil((t-e)/n),0),r=0,o=new Array(i);r<i;)o[r++]=e,e+=n;return o};var O=function(){};A.bind=function(e,t){var n,i;if(x&&e.bind===x)return x.apply(e,c.call(arguments,1));if(!A.isFunction(e))throw new TypeError;return n=c.call(arguments,2),i=function(){if(!(this instanceof i))return e.apply(t,n.concat(c.call(arguments)));O.prototype=e.prototype;var r=new O;O.prototype=null;var o=e.apply(r,n.concat(c.call(arguments)));return Object(o)===o?o:r}},A.partial=function(e){var t=c.call(arguments,1);return function(){return e.apply(this,t.concat(c.call(arguments)))}},A.bindAll=function(e){var t=c.call(arguments,1);if(0===t.length)throw new Error("bindAll must be passed function names");return E(t,(function(t){e[t]=A.bind(e[t],e)})),e},A.memoize=function(e,t){var n={};return t||(t=A.identity),function(){var i=t.apply(this,arguments);return A.has(n,i)?n[i]:n[i]=e.apply(this,arguments)}},A.delay=function(e,t){var n=c.call(arguments,2);return setTimeout((function(){return e.apply(null,n)}),t)},A.defer=function(e){return A.delay.apply(A,[e,1].concat(c.call(arguments,1)))},A.throttle=function(e,t,n){var i,r,o,s=null,a=0;n||(n={});var l=function(){a=!1===n.leading?0:new Date,s=null,o=e.apply(i,r)};return function(){var c=new Date;a||!1!==n.leading||(a=c);var u=t-(c-a);return i=this,r=arguments,u<=0?(clearTimeout(s),s=null,a=c,o=e.apply(i,r)):s||!1===n.trailing||(s=setTimeout(l,u)),o}},A.debounce=function(e,t,n){var i,r=null;return function(){var o=this,s=arguments,a=function(){r=null,n||(i=e.apply(o,s))},l=n&&!r;return clearTimeout(r),r=setTimeout(a,t),l&&(i=e.apply(o,s)),i}},A.once=function(e){var t,n=!1;return function(){return n||(n=!0,t=e.apply(this,arguments),e=null),t}},A.wrap=function(e,t){return function(){var n=[e];return l.apply(n,arguments),t.apply(this,n)}},A.compose=function(){var e=arguments;return function(){for(var t=arguments,n=e.length-1;n>=0;n--)t=[e[n].apply(this,t)];return t[0]}},A.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},A.keys=C||function(e){if(e!==Object(e))throw new TypeError("Invalid object");var t=[];for(var n in e)A.has(e,n)&&t.push(n);return t},A.values=function(e){var t=[];for(var n in e)A.has(e,n)&&t.push(e[n]);return t},A.pairs=function(e){var t=[];for(var n in e)A.has(e,n)&&t.push([n,e[n]]);return t},A.invert=function(e){var t={};for(var n in e)A.has(e,n)&&(t[e[n]]=n);return t},A.functions=A.methods=function(e){var t=[];for(var n in e)A.isFunction(e[n])&&t.push(n);return t.sort()},A.extend=function(e){return E(c.call(arguments,1),(function(t){if(t)for(var n in t)e[n]=t[n]})),e},A.pick=function(e){var t={},n=u.apply(o,c.call(arguments,1));return E(n,(function(n){n in e&&(t[n]=e[n])})),t},A.omit=function(e){var t={},n=u.apply(o,c.call(arguments,1));for(var i in e)A.contains(n,i)||(t[i]=e[i]);return t},A.defaults=function(e){return E(c.call(arguments,1),(function(t){if(t)for(var n in t)void 0===e[n]&&(e[n]=t[n])})),e},A.clone=function(e){return A.isObject(e)?A.isArray(e)?e.slice():A.extend({},e):e},A.tap=function(e,t){return t(e),e};var R=function(e,t,n,i){if(e===t)return 0!==e||1/e==1/t;if(null==e||null==t)return e===t;e instanceof A&&(e=e._wrapped),t instanceof A&&(t=t._wrapped);var r=f.call(e);if(r!=f.call(t))return!1;switch(r){case"[object String]":return e==String(t);case"[object Number]":return e!=+e?t!=+t:0==e?1/e==1/t:e==+t;case"[object Date]":case"[object Boolean]":return+e==+t;case"[object RegExp]":return e.source==t.source&&e.global==t.global&&e.multiline==t.multiline&&e.ignoreCase==t.ignoreCase}if("object"!=typeof e||"object"!=typeof t)return!1;for(var o=n.length;o--;)if(n[o]==e)return i[o]==t;var s=e.constructor,a=t.constructor;if(s!==a&&!(A.isFunction(s)&&s instanceof s&&A.isFunction(a)&&a instanceof a))return!1;n.push(e),i.push(t);var l=0,c=!0;if("[object Array]"==r){if(c=(l=e.length)==t.length)for(;l--&&(c=R(e[l],t[l],n,i)););}else{for(var u in e)if(A.has(e,u)&&(l++,!(c=A.has(t,u)&&R(e[u],t[u],n,i))))break;if(c){for(u in t)if(A.has(t,u)&&!l--)break;c=!l}}return n.pop(),i.pop(),c};A.isEqual=function(e,t){return R(e,t,[],[])},A.isEmpty=function(e){if(null==e)return!0;if(A.isArray(e)||A.isString(e))return 0===e.length;for(var t in e)if(A.has(e,t))return!1;return!0},A.isElement=function(e){return!(!e||1!==e.nodeType)},A.isArray=k||function(e){return"[object Array]"==f.call(e)},A.isObject=function(e){return e===Object(e)},E(["Arguments","Function","String","Number","Date","RegExp"],(function(e){A["is"+e]=function(t){return f.call(t)=="[object "+e+"]"}})),A.isArguments(arguments)||(A.isArguments=function(e){return!(!e||!A.has(e,"callee"))}),A.isFunction=function(e){return"function"==typeof e},A.isFinite=function(e){return isFinite(e)&&!isNaN(parseFloat(e))},A.isNaN=function(e){return A.isNumber(e)&&e!=+e},A.isBoolean=function(e){return!0===e||!1===e||"[object Boolean]"==f.call(e)},A.isNull=function(e){return null===e},A.isUndefined=function(e){return void 0===e},A.has=function(e,t){return d.call(e,t)},A.noConflict=function(){return n._=i,this},A.identity=function(e){return e},A.times=function(e,t,n){for(var i=Array(Math.max(0,e)),r=0;r<e;r++)i[r]=t.call(n,r);return i},A.random=function(e,t){return null==t&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))};var j={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};j.unescape=A.invert(j.escape);var q={escape:new RegExp("["+A.keys(j.escape).join("")+"]","g"),unescape:new RegExp("("+A.keys(j.unescape).join("|")+")","g")};A.each(["escape","unescape"],(function(e){A[e]=function(t){return null==t?"":(""+t).replace(q[e],(function(t){return j[e][t]}))}})),A.result=function(e,t){if(null!=e){var n=e[t];return A.isFunction(n)?n.call(e):n}},A.mixin=function(e){E(A.functions(e),(function(t){var n=A[t]=e[t];A.prototype[t]=function(){var e=[this._wrapped];return l.apply(e,arguments),H.call(this,n.apply(A,e))}}))};var P=0;A.uniqueId=function(e){var t=++P+"";return e?e+t:t},A.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var L=/(.)^/,$={"'":"'","\\":"\\","\r":"r","\n":"n","\t":"t","\u2028":"u2028","\u2029":"u2029"},F=/\\|'|\r|\n|\t|\u2028|\u2029/g;A.template=function(e,t,n){var i;n=A.defaults({},n,A.templateSettings);var r=new RegExp([(n.escape||L).source,(n.interpolate||L).source,(n.evaluate||L).source].join("|")+"|$","g"),o=0,s="__p+='";e.replace(r,(function(t,n,i,r,a){return s+=e.slice(o,a).replace(F,(function(e){return"\\"+$[e]})),n&&(s+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'"),i&&(s+="'+\n((__t=("+i+"))==null?'':__t)+\n'"),r&&(s+="';\n"+r+"\n__p+='"),o=a+t.length,t})),s+="';\n",n.variable||(s="with(obj||{}){\n"+s+"}\n"),s="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+s+"return __p;\n";try{i=new Function(n.variable||"obj","_",s)}catch(e){throw e.source=s,e}if(t)return i(t,A);var a=function(e){return i.call(this,e,A)};return a.source="function("+(n.variable||"obj")+"){\n"+s+"}",a},A.chain=function(e){return A(e).chain()};var H=function(e){return this._chain?A(e).chain():e};A.mixin(A),E(["pop","push","reverse","shift","sort","splice","unshift"],(function(e){var t=o[e];A.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),"shift"!=e&&"splice"!=e||0!==n.length||delete n[0],H.call(this,n)}})),E(["concat","join","slice"],(function(e){var t=o[e];A.prototype[e]=function(){return H.call(this,t.apply(this._wrapped,arguments))}})),A.extend(A.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this)},"./node_modules/webpack/buildin/amd-options.js":function(e,t){(function(t){e.exports=t}).call(this,{})},"./node_modules/webpack/buildin/global.js":function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},"./node_modules/webpack/buildin/module.js":function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},0:function(e,t,n){n("./node_modules/jquery/dist/jquery.js"),n("./node_modules/custom-backbone/backbone-min.js"),n("./node_modules/underscore/underscore.js"),n("./js/app/tracking.js"),n("./node_modules/bootstrap/dist/js/bootstrap.js"),n("./node_modules/bootstrap-datepicker/dist/bootstrap-datepicker.js"),e.exports=n("./node_modules/es6-promise-promise/index.js")},1:function(e,t){}}); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vanMvYXBwL3Bpd2lrLmpzIiwid2VicGFjazovLy8uL2pzL2FwcC90cmFja2luZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwLWRhdGVwaWNrZXIvZGlzdC9ib290c3RyYXAtZGF0ZXBpY2tlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jdXN0b20tYmFja2JvbmUvYmFja2JvbmUtbWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS1wcm9taXNlL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdW5kZXJzY29yZS91bmRlcnNjb3JlLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiXSwibmFtZXMiOlsid2VicGFja0pzb25wQ2FsbGJhY2siLCJkYXRhIiwibW9kdWxlSWQiLCJjaHVua0lkIiwiY2h1bmtJZHMiLCJtb3JlTW9kdWxlcyIsImV4ZWN1dGVNb2R1bGVzIiwiaSIsInJlc29sdmVzIiwibGVuZ3RoIiwiaW5zdGFsbGVkQ2h1bmtzIiwicHVzaCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIm1vZHVsZXMiLCJwYXJlbnRKc29ucEZ1bmN0aW9uIiwic2hpZnQiLCJkZWZlcnJlZE1vZHVsZXMiLCJhcHBseSIsImNoZWNrRGVmZXJyZWRNb2R1bGVzIiwicmVzdWx0IiwiZGVmZXJyZWRNb2R1bGUiLCJmdWxmaWxsZWQiLCJqIiwiZGVwSWQiLCJzcGxpY2UiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwicyIsImluc3RhbGxlZE1vZHVsZXMiLCJleHBvcnRzIiwibW9kdWxlIiwibCIsImUiLCJwcm9taXNlcyIsImluc3RhbGxlZENodW5rRGF0YSIsInByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uU2NyaXB0Q29tcGxldGUiLCJzY3JpcHQiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjaGFyc2V0IiwidGltZW91dCIsIm5jIiwic2V0QXR0cmlidXRlIiwic3JjIiwicCIsImpzb25wU2NyaXB0U3JjIiwiZXJyb3IiLCJFcnJvciIsImV2ZW50Iiwib25lcnJvciIsIm9ubG9hZCIsImNsZWFyVGltZW91dCIsImNodW5rIiwiZXJyb3JUeXBlIiwidHlwZSIsInJlYWxTcmMiLCJ0YXJnZXQiLCJtZXNzYWdlIiwibmFtZSIsInJlcXVlc3QiLCJ1bmRlZmluZWQiLCJzZXRUaW1lb3V0IiwiaGVhZCIsImFwcGVuZENoaWxkIiwiYWxsIiwibSIsImMiLCJkIiwiZ2V0dGVyIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5Iiwib2UiLCJlcnIiLCJjb25zb2xlIiwianNvbnBBcnJheSIsIndpbmRvdyIsIm9sZEpzb25wRnVuY3Rpb24iLCJzbGljZSIsIkpTT04yIiwiX3R5cGVvZiIsIkpTT04iLCJzdHJpbmdpZnkiLCJwYXJzZSIsImEiLCJnIiwiYiIsImgiLCJ0b0pTT04iLCJmIiwiayIsIk51bWJlciIsIlN0cmluZyIsIkRhdGUiLCJTeW50YXhFcnJvciIsIlR5cGVFcnJvciIsIk1hdGgiLCJxIiwidG9TdHJpbmciLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJ1IiwidyIsIngiLCJ5IiwiQSIsIkIiLCJmbG9vciIsIkMiLCJEIiwiX19wcm90b19fIiwidGhpcyIsImNvbnN0cnVjdG9yIiwidmFsdWVPZiIsIkUiLCI5MiIsIjM0IiwiOCIsIjEyIiwiMTAiLCIxMyIsIjkiLCJHIiwiSSIsInNwbGl0IiwiY2hhckNvZGVBdCIsImNoYXJBdCIsIkoiLCJGIiwiSCIsIksiLCJMIiwiam9pbiIsInBvcCIsIk0iLCJOIiwiZnJvbUNoYXJDb2RlIiwiNDciLCI5OCIsIjExNiIsIjExMCIsIjEwMiIsIjExNCIsIk8iLCJQIiwiUiIsIlMiLCJRIiwicnVuSW5Db250ZXh0IiwiZGVmaW5lIiwiZnVuY3Rpb24iLCJub2RlVHlwZSIsImdsb2JhbCIsInNlbGYiLCJKU09OMyIsIm5vQ29uZmxpY3QiLCJfcGFxIiwiUGl3aWsiLCJzYWZlRGVjb2RlV3JhcHBlciIsImRlY29kZVdyYXBwZXIiLCJ1bmVzY2FwZSIsImlzRGVmaW5lZCIsImlzRnVuY3Rpb24iLCJpc09iamVjdCIsImlzU3RyaW5nIiwiYXJndW1lbnRzIiwiYXN5bmNUcmFja2VyIiwiYWRkRXZlbnRMaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiZXhlY3V0ZVBsdWdpbk1ldGhvZCIsInBsdWdpbnMiLCJiZWZvcmVVbmxvYWRIYW5kbGVyIiwiZXhwaXJlRGF0ZVRpbWUiLCJnZXRUaW1lQWxpYXMiLCJsb2FkSGFuZGxlciIsImhhc0xvYWRlZCIsInJlZ2lzdGVyZWRPbkxvYWRIYW5kbGVycyIsImFkZFJlYWR5TGlzdGVuZXIiLCJkb2N1bWVudEFsaWFzIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlYWR5U3RhdGUiLCJkZXRhY2hFdmVudCIsImRvY3VtZW50RWxlbWVudCIsImRvU2Nyb2xsIiwid2luZG93QWxpYXMiLCJ0b3AiLCJSZWdFeHAiLCJ0ZXN0IiwibmF2aWdhdG9yQWxpYXMiLCJ1c2VyQWdlbnQiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJsb2FkU2NyaXB0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXRSZWZlcnJlciIsInJlZmVycmVyIiwicGFyZW50IiwiZ2V0UHJvdG9jb2xTY2hlbWUiLCJleGVjIiwiZ2V0SG9zdE5hbWUiLCJnZXRQYXJhbWV0ZXIiLCJ1dGY4X2VuY29kZSIsImVuY29kZVdyYXBwZXIiLCJzaGExIiwidG9Mb3dlckNhc2UiLCJ1cmxGaXh1cCIsImxpbmtzIiwiaHJlZiIsImRvbWFpbkZpeHVwIiwidGl0bGVGaXh1cCIsInRleHQiLCJnZXRDaGlsZHJlbkZyb21Ob2RlIiwiY2hpbGRyZW4iLCJjaGlsZE5vZGVzIiwiY29udGFpbnNOb2RlRWxlbWVudCIsImNvbnRhaW5zIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJpbmRleE9mQXJyYXkiLCJpbmRleE9mIiwiaXNWaXNpYmxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRlZmF1bHRWaWV3IiwiY3VycmVudFN0eWxlIiwicGFyZW50Tm9kZSIsIm9mZnNldFRvcCIsIm9mZnNldExlZnQiLCJvZmZzZXRIZWlnaHQiLCJvZmZzZXRXaWR0aCIsInNjcm9sbExlZnQiLCJzY3JvbGxUb3AiLCJvZmZzZXRQYXJlbnQiLCJnZXRQaXdpa1VybEZvck92ZXJsYXkiLCJpc092ZXJsYXlTZXNzaW9uIiwiaW5qZWN0T3ZlcmxheVNjcmlwdHMiLCJQaXdpa19PdmVybGF5X0NsaWVudCIsImluaXRpYWxpemUiLCJUcmFja2VyIiwidHJhY2tlclVybCIsInNpdGVJZCIsInNldENvb2tpZSIsImNvbmZpZ0Nvb2tpZXNEaXNhYmxlZCIsInNldFRpbWUiLCJnZXRUaW1lIiwiY29va2llIiwidG9HTVRTdHJpbmciLCJnZXRDb29raWUiLCJwdXJpZnkiLCJjb25maWdEaXNjYXJkSGFzaFRhZyIsInJlcGxhY2UiLCJyZXNvbHZlUmVsYXRpdmVSZWZlcmVuY2UiLCJsYXN0SW5kZXhPZiIsImlzU2l0ZUhvc3ROYW1lIiwiY29uZmlnSG9zdHNBbGlhcyIsImdldEltYWdlIiwiSW1hZ2UiLCJpdGVyYXRvciIsImNvbmZpZ1RyYWNrZXJVcmwiLCJzZW5kWG1sSHR0cFJlcXVlc3QiLCJYTUxIdHRwUmVxdWVzdCIsIkFjdGl2ZVhPYmplY3QiLCJvcGVuIiwic3RhdHVzIiwic2V0UmVxdWVzdEhlYWRlciIsImNvbmZpZ1JlcXVlc3RDb250ZW50VHlwZSIsInNlbmQiLCJzZXRFeHBpcmVEYXRlVGltZSIsImhlYXJ0QmVhdFVwIiwiaGVhcnRCZWF0VGltZW91dCIsImNvbmZpZ0hlYXJ0QmVhdERlbGF5IiwiaGVhcnRCZWF0UGluZ0lmQWN0aXZpdHlBbGlhcyIsImxhc3RUcmFja2VyUmVxdWVzdFRpbWUiLCJtaW4iLCJoZWFydEJlYXREb3duIiwiaGVhcnRCZWF0T25Gb2N1cyIsImhlYXJ0QmVhdE9uQmx1ciIsInNldFVwSGVhcnRCZWF0IiwiaGVhcnRCZWF0U2V0VXAiLCJtYWtlU3VyZVRoZXJlSXNBR2FwQWZ0ZXJGaXJzdFRyYWNraW5nUmVxdWVzdFRvUHJldmVudE11bHRpcGxlVmlzaXRvckNyZWF0aW9uIiwidGltZU5leHRUcmFja2luZ1JlcXVlc3RDYW5CZUV4ZWN1dGVkSW1tZWRpYXRlbHkiLCJzZW5kUmVxdWVzdCIsImNvbmZpZ0RvTm90VHJhY2siLCJjb25maWdSZXF1ZXN0TWV0aG9kIiwiY2FuU2VuZEJ1bGtSZXF1ZXN0Iiwic2VuZEJ1bGtSZXF1ZXN0IiwiZ2V0Q29va2llTmFtZSIsImNvbmZpZ0Nvb2tpZU5hbWVQcmVmaXgiLCJjb25maWdUcmFja2VyU2l0ZUlkIiwiZG9tYWluSGFzaCIsImhhc0Nvb2tpZXMiLCJjb29raWVFbmFibGVkIiwidXBkYXRlRG9tYWluSGFzaCIsImhhc2giLCJjb25maWdDb29raWVEb21haW4iLCJkb21haW5BbGlhcyIsImNvbmZpZ0Nvb2tpZVBhdGgiLCJnZXRDdXN0b21WYXJpYWJsZXNGcm9tQ29va2llIiwibG9hZEN1c3RvbVZhcmlhYmxlcyIsImN1c3RvbVZhcmlhYmxlcyIsImdlbmVyYXRlUmFuZG9tVXVpZCIsInBsYXRmb3JtIiwiYnJvd3NlckZlYXR1cmVzIiwicmFuZG9tIiwibG9hZFZpc2l0b3JJZENvb2tpZSIsInJvdW5kIiwidW5zaGlmdCIsInZpc2l0b3JVVUlEIiwiZ2V0VmFsdWVzRnJvbVZpc2l0b3JJZENvb2tpZSIsIm5ld1Zpc2l0b3IiLCJ1dWlkIiwiY3JlYXRlVHMiLCJ2aXNpdENvdW50IiwiY3VycmVudFZpc2l0VHMiLCJsYXN0VmlzaXRUcyIsImxhc3RFY29tbWVyY2VPcmRlclRzIiwiZ2V0UmVtYWluaW5nVmlzaXRvckNvb2tpZVRpbWVvdXQiLCJwYXJzZUludCIsImNvbmZpZ1Zpc2l0b3JDb29raWVUaW1lb3V0Iiwic2V0VmlzaXRvcklkQ29va2llIiwibG9hZFJlZmVycmVyQXR0cmlidXRpb25Db29raWUiLCJkZWxldGVDb29raWUiLCJpc1Bvc3NpYmxlVG9TZXRDb29raWVPbkRvbWFpbiIsImRlbGV0ZUNvb2tpZXMiLCJzZXRTaXRlSWQiLCJzb3J0T2JqZWN0QnlLZXlzIiwic29ydCIsInNldFNlc3Npb25Db29raWUiLCJjb25maWdTZXNzaW9uQ29va2llVGltZW91dCIsImdldFJlcXVlc3QiLCJjb25maWdDdXN0b21VcmwiLCJsb2NhdGlvbkhyZWZBbGlhcyIsInYiLCJjaGFyYWN0ZXJTZXQiLCJjb25maWdDb252ZXJzaW9uQXR0cmlidXRpb25GaXJzdFJlZmVycmVyIiwiY29uZmlnQ2FtcGFpZ25OYW1lUGFyYW1ldGVycyIsImNvbmZpZ0NhbXBhaWduS2V5d29yZFBhcmFtZXRlcnMiLCJjb25maWdSZWZlcnJlclVybCIsImNvbmZpZ1JlZmVycmFsQ29va2llVGltZW91dCIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJjb25maWdVc2VySWQiLCJjb25maWdDdXN0b21EYXRhIiwieiIsImN1c3RvbVZhcmlhYmxlc1BhZ2UiLCJjdXN0b21WYXJpYWJsZXNFdmVudCIsImNvbmZpZ1N0b3JlQ3VzdG9tVmFyaWFibGVzSW5Db29raWUiLCJjb25maWdQZXJmb3JtYW5jZVRyYWNraW5nRW5hYmxlZCIsImNvbmZpZ1BlcmZvcm1hbmNlR2VuZXJhdGlvblRpbWUiLCJwZXJmb3JtYW5jZUFsaWFzIiwidGltaW5nIiwicmVxdWVzdFN0YXJ0IiwicmVzcG9uc2VFbmQiLCJjb25maWdBcHBlbmRUb1RyYWNraW5nVXJsIiwiY29uZmlnQ3VzdG9tUmVxdWVzdENvbnRlbnRQcm9jZXNzaW5nIiwibG9nRWNvbW1lcmNlIiwiZWNvbW1lcmNlSXRlbXMiLCJjb25maWdUcmFja2VyUGF1c2UiLCJsb2dFY29tbWVyY2VPcmRlciIsImxvZ0Vjb21tZXJjZUNhcnRVcGRhdGUiLCJsb2dQYWdlVmlldyIsImNvbmZpZ1RpdGxlIiwiZ2V0Q2xhc3Nlc1JlZ0V4cCIsInN0YXJ0c1VybFdpdGhUcmFja2VyVXJsIiwiZ2V0TGlua1R5cGUiLCJjb25maWdEb3dubG9hZENsYXNzZXMiLCJjb25maWdMaW5rQ2xhc3NlcyIsImNvbmZpZ0Rvd25sb2FkRXh0ZW5zaW9ucyIsImdldFNvdXJjZUVsZW1lbnQiLCJxdWVyeSIsImlzTGlua0VsZW1lbnQiLCJnZXRMaW5rSWZTaG91bGRCZVByb2Nlc3NlZCIsImhhc05vZGVBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGVWYWx1ZUZyb21Ob2RlIiwiaG9zdG5hbWUiLCJjbGFzc05hbWUiLCJidWlsZENvbnRlbnRJbnRlcmFjdGlvblJlcXVlc3QiLCJjb250ZW50IiwiYnVpbGRJbnRlcmFjdGlvblJlcXVlc3RQYXJhbXMiLCJidWlsZENvbnRlbnRJbnRlcmFjdGlvblRyYWNraW5nUmVkaXJlY3RVcmwiLCJ0b0Fic29sdXRlVXJsIiwiaXNOb2RlQXV0aG9yaXplZFRvVHJpZ2dlckludGVyYWN0aW9uIiwiZmluZFRhcmdldE5vZGUiLCJzaG91bGRJZ25vcmVJbnRlcmFjdGlvbiIsImZpbmRUYXJnZXROb2RlTm9EZWZhdWx0IiwiZ2V0Q29udGVudEludGVyYWN0aW9uVG9SZXF1ZXN0SWZQb3NzaWJsZSIsImZpbmRQYXJlbnRDb250ZW50Tm9kZSIsImJ1aWxkQ29udGVudEJsb2NrIiwicGllY2UiLCJ3YXNDb250ZW50SW1wcmVzc2lvbkFscmVhZHlUcmFja2VkIiwidHJhY2tlZENvbnRlbnRJbXByZXNzaW9ucyIsInJlcGxhY2VIcmVmSWZJbnRlcm5hbExpbmsiLCJsaW5rVHJhY2tpbmdFbmFibGVkIiwiaGFzTm9kZUF0dHJpYnV0ZVdpdGhWYWx1ZSIsImlzVXJsVG9DdXJyZW50RG9tYWluIiwiQ09OVEVOVF9UQVJHRVRfQVRUUiIsIndhc0NvbnRlbnRUYXJnZXRBdHRyUmVwbGFjZWQiLCJzZXRBbnlBdHRyaWJ1dGUiLCJzZXRIcmVmQXR0cmlidXRlIiwicmVwbGFjZUhyZWZzSWZJbnRlcm5hbExpbmsiLCJ0cmFja0NvbnRlbnRJbXByZXNzaW9uQ2xpY2tJbnRlcmFjdGlvbiIsInNyY0VsZW1lbnQiLCJsaW5rVHJhY2tpbmdJbnN0YWxsZWQiLCJzZXR1cEludGVyYWN0aW9uc1RyYWNraW5nIiwiY29udGVudEludGVyYWN0aW9uVHJhY2tpbmdTZXR1cERvbmUiLCJidWlsZENvbnRlbnRJbXByZXNzaW9uc1JlcXVlc3RzIiwiYnVpbGRJbXByZXNzaW9uUmVxdWVzdFBhcmFtcyIsImdldENvbnRlbnRJbXByZXNzaW9uc1JlcXVlc3RzRnJvbU5vZGVzIiwiY29sbGVjdENvbnRlbnQiLCJnZXRDdXJyZW50bHlWaXNpYmxlQ29udGVudEltcHJlc3Npb25zUmVxdWVzdHNJZk5vdFRyYWNrZWRZZXQiLCJpc05vZGVWaXNpYmxlIiwiYnVpbGRDb250ZW50SW1wcmVzc2lvblJlcXVlc3QiLCJidWlsZENvbnRlbnRJbnRlcmFjdGlvblJlcXVlc3ROb2RlIiwiYnVpbGRFdmVudFJlcXVlc3QiLCJsb2dFdmVudCIsImxvZ1NpdGVTZWFyY2giLCJsb2dHb2FsIiwibG9nTGluayIsInByZWZpeFByb3BlcnR5TmFtZSIsInRvVXBwZXJDYXNlIiwidHJhY2tDYWxsYmFjayIsImNvbmZpZ0NvdW50UHJlUmVuZGVyZWQiLCJ0cmFja0NhbGxiYWNrT25Mb2FkIiwidHJhY2tDYWxsYmFja09uUmVhZHkiLCJwcm9jZXNzQ2xpY2siLCJpc0lFOG9yT2xkZXIiLCJnZXRLZXlDb2RlRnJvbUV2ZW50Iiwid2hpY2giLCJidXR0b24iLCJnZXROYW1lT2ZDbGlja2VkQnV0dG9uIiwiZ2V0VGFyZ2V0RWxlbWVudEZyb21FdmVudCIsImNsaWNrSGFuZGxlciIsImxhc3RCdXR0b24iLCJsYXN0VGFyZ2V0IiwiYWRkQ2xpY2tMaXN0ZW5lciIsImFkZENsaWNrTGlzdGVuZXJzIiwiY29uZmlnSWdub3JlQ2xhc3NlcyIsImVuYWJsZVRyYWNrT25seVZpc2libGVDb250ZW50IiwiaXNUcmFja09ubHlWaXNpYmxlQ29udGVudEVuYWJsZWQiLCJ0cmFja1Zpc2libGVDb250ZW50SW1wcmVzc2lvbnMiLCJkZXRlY3RCcm93c2VyRmVhdHVyZXMiLCJwZGYiLCJxdCIsInJlYWxwIiwid21hIiwiZGlyIiwiZmxhIiwiamF2YSIsImdlYXJzIiwiYWciLCJkZXZpY2VQaXhlbFJhdGlvIiwibWltZVR5cGVzIiwiZW5hYmxlZFBsdWdpbiIsIm5hdmlnYXRvciIsImphdmFFbmFibGVkIiwiR2VhcnNGYWN0b3J5IiwicmVzIiwic2NyZWVuQWxpYXMiLCJ3aWR0aCIsImhlaWdodCIsInJlZ2lzdGVySG9vayIsImhvb2tOYW1lIiwidXNlckhvb2siLCJob29rT2JqIiwicmVnaXN0ZXJlZEhvb2tzIiwiZXZhbCIsImxvY2F0aW9uQXJyYXkiLCJkb21haW4iLCJsb2NhdGlvbiIsImVuYWJsZUpTRXJyb3JUcmFja2luZyIsImRlZmF1bHRSZXF1ZXN0TWV0aG9kIiwiZGVmYXVsdFJlcXVlc3RDb250ZW50VHlwZSIsImNvbmZpZ0FwaVVybCIsInRpdGxlIiwiY29uZmlnTWluaW11bVZpc2l0VGltZSIsImN1c3RvbVZhcmlhYmxlTWF4aW11bUxlbmd0aCIsImhvb2siLCJnZXRIb29rIiwiZ2V0UXVlcnkiLCJnZXRDb250ZW50IiwiYXBwZW5kQ29udGVudEludGVyYWN0aW9uVG9SZXF1ZXN0SWZQb3NzaWJsZSIsImludGVybmFsSXNOb2RlVmlzaWJsZSIsImdldENvbmZpZ0Rvd25sb2FkRXh0ZW5zaW9ucyIsImNsZWFyVHJhY2tlZENvbnRlbnRJbXByZXNzaW9ucyIsImdldFRyYWNrZWRDb250ZW50SW1wcmVzc2lvbnMiLCJjbGVhckVuYWJsZVRyYWNrT25seVZpc2libGVDb250ZW50IiwiZGlzYWJsZUxpbmtUcmFja2luZyIsImdldENvbmZpZ1Zpc2l0b3JDb29raWVUaW1lb3V0IiwiZ2V0VmlzaXRvcklkIiwiZ2V0VmlzaXRvckluZm8iLCJnZXRBdHRyaWJ1dGlvbkluZm8iLCJnZXRBdHRyaWJ1dGlvbkNhbXBhaWduTmFtZSIsImdldEF0dHJpYnV0aW9uQ2FtcGFpZ25LZXl3b3JkIiwiZ2V0QXR0cmlidXRpb25SZWZlcnJlclRpbWVzdGFtcCIsImdldEF0dHJpYnV0aW9uUmVmZXJyZXJVcmwiLCJzZXRUcmFja2VyVXJsIiwiZ2V0VHJhY2tlclVybCIsImdldFNpdGVJZCIsInNldFVzZXJJZCIsInN1YnN0ciIsImdldFVzZXJJZCIsInNldEN1c3RvbURhdGEiLCJnZXRDdXN0b21EYXRhIiwic2V0Q3VzdG9tUmVxdWVzdFByb2Nlc3NpbmciLCJhcHBlbmRUb1RyYWNraW5nVXJsIiwiYWRkUGx1Z2luIiwic2V0Q3VzdG9tVmFyaWFibGUiLCJnZXRDdXN0b21WYXJpYWJsZSIsImRlbGV0ZUN1c3RvbVZhcmlhYmxlIiwic3RvcmVDdXN0b21WYXJpYWJsZXNJbkNvb2tpZSIsInNldExpbmtUcmFja2luZ1RpbWVyIiwic2V0RG93bmxvYWRFeHRlbnNpb25zIiwiYWRkRG93bmxvYWRFeHRlbnNpb25zIiwicmVtb3ZlRG93bmxvYWRFeHRlbnNpb25zIiwic2V0RG9tYWlucyIsInNldElnbm9yZUNsYXNzZXMiLCJzZXRSZXF1ZXN0TWV0aG9kIiwic2V0UmVxdWVzdENvbnRlbnRUeXBlIiwic2V0UmVmZXJyZXJVcmwiLCJzZXRDdXN0b21VcmwiLCJzZXREb2N1bWVudFRpdGxlIiwic2V0QVBJVXJsIiwic2V0RG93bmxvYWRDbGFzc2VzIiwic2V0TGlua0NsYXNzZXMiLCJzZXRDYW1wYWlnbk5hbWVLZXkiLCJzZXRDYW1wYWlnbktleXdvcmRLZXkiLCJkaXNjYXJkSGFzaFRhZyIsInNldENvb2tpZU5hbWVQcmVmaXgiLCJzZXRDb29raWVEb21haW4iLCJzZXRDb29raWVQYXRoIiwic2V0VmlzaXRvckNvb2tpZVRpbWVvdXQiLCJzZXRTZXNzaW9uQ29va2llVGltZW91dCIsInNldFJlZmVycmFsQ29va2llVGltZW91dCIsInNldENvbnZlcnNpb25BdHRyaWJ1dGlvbkZpcnN0UmVmZXJyZXIiLCJkaXNhYmxlQ29va2llcyIsInNldERvTm90VHJhY2siLCJkb05vdFRyYWNrIiwibXNEb05vdFRyYWNrIiwiYWRkTGlzdGVuZXIiLCJlbmFibGVMaW5rVHJhY2tpbmciLCJkaXNhYmxlUGVyZm9ybWFuY2VUcmFja2luZyIsInNldEdlbmVyYXRpb25UaW1lTXMiLCJlbmFibGVIZWFydEJlYXRUaW1lciIsIm1heCIsImRpc2FibGVIZWFydEJlYXRUaW1lciIsImtpbGxGcmFtZSIsInJlZGlyZWN0RmlsZSIsInByb3RvY29sIiwic2V0Q291bnRQcmVSZW5kZXJlZCIsInRyYWNrR29hbCIsInRyYWNrTGluayIsInRyYWNrUGFnZVZpZXciLCJ0cmFja0FsbENvbnRlbnRJbXByZXNzaW9ucyIsImZpbmRDb250ZW50Tm9kZXMiLCJ0cmFja0NvbnRlbnRJbXByZXNzaW9uIiwidHJhY2tDb250ZW50SW1wcmVzc2lvbnNXaXRoaW5Ob2RlIiwiZmluZENvbnRlbnROb2Rlc1dpdGhpbk5vZGUiLCJ0cmFja0NvbnRlbnRJbnRlcmFjdGlvbiIsInRyYWNrQ29udGVudEludGVyYWN0aW9uTm9kZSIsImxvZ0FsbENvbnRlbnRCbG9ja3NPblBhZ2UiLCJsb2ciLCJ0cmFja0V2ZW50IiwidHJhY2tTaXRlU2VhcmNoIiwic2V0RWNvbW1lcmNlVmlldyIsIkFycmF5IiwiYWRkRWNvbW1lcmNlSXRlbSIsInRyYWNrRWNvbW1lcmNlT3JkZXIiLCJ0cmFja0Vjb21tZXJjZUNhcnRVcGRhdGUiLCJUcmFja2VyUHJveHkiLCJhcHBseU1ldGhvZHNJbk9yZGVyIiwic2NyZWVuIiwicGVyZm9ybWFuY2UiLCJtb3pQZXJmb3JtYW5jZSIsIm1zUGVyZm9ybWFuY2UiLCJ3ZWJraXRQZXJmb3JtYW5jZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImRlY29kZVVSSUNvbXBvbmVudCIsInVybGRlY29kZSIsImh0bWxDb2xsZWN0aW9uVG9BcnJheSIsImZpbmQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZmluZE11bHRpcGxlIiwiY29uY2F0IiwibWFrZU5vZGVzVW5pcXVlIiwiZmluZE5vZGVzQnlUYWdOYW1lIiwiZ2V0QXR0cmlidXRlIiwiYXR0cmlidXRlcyIsIm5vZGVWYWx1ZSIsIm5vZGVOYW1lIiwiaGFzQXR0cmlidXRlIiwiaGFzTm9kZUNzc0NsYXNzIiwiZmluZE5vZGVzSGF2aW5nQXR0cmlidXRlIiwiZmluZEZpcnN0Tm9kZUhhdmluZ0F0dHJpYnV0ZSIsImZpbmRGaXJzdE5vZGVIYXZpbmdBdHRyaWJ1dGVXaXRoVmFsdWUiLCJmaW5kTm9kZXNIYXZpbmdDc3NDbGFzcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJmaW5kRmlyc3ROb2RlSGF2aW5nQ2xhc3MiLCJDT05URU5UX0FUVFIiLCJDT05URU5UX0NMQVNTIiwiQ09OVEVOVF9OQU1FX0FUVFIiLCJDT05URU5UX1BJRUNFX0FUVFIiLCJDT05URU5UX1BJRUNFX0NMQVNTIiwiQ09OVEVOVF9UQVJHRVRfQ0xBU1MiLCJDT05URU5UX0lHTk9SRUlOVEVSQUNUSU9OX0FUVFIiLCJDT05URU5UX0lHTk9SRUlOVEVSQUNUSU9OX0NMQVNTIiwiZmluZFBpZWNlTm9kZSIsImZpbmRDb250ZW50TmFtZSIsImZpbmRDb250ZW50UGllY2UiLCJyZW1vdmVEb21haW5JZklzSW5MaW5rIiwiZmluZE1lZGlhVXJsSW5Ob2RlIiwiZmluZENvbnRlbnRUYXJnZXQiLCJpc1NhbWVEb21haW4iLCJnZXRMb2NhdGlvbiIsIm9yaWdpbiIsImhvc3QiLCJzZWFyY2giLCJ0cmltIiwiaXNPcldhc05vZGVJblZpZXdwb3J0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiY2xpZW50V2lkdGgiLCJpbm5lcldpZHRoIiwiY2xpZW50SGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJib3R0b20iLCJyaWdodCIsImxlZnQiLCJzZXRMb2NhdGlvbiIsInBvcnQiLCJwYXRobmFtZSIsIm1hdGNoIiwiYXBwbHlGaXJzdCIsImdldFRyYWNrZXIiLCJnZXRBc3luY1RyYWNrZXIiLCJwaXdpa0FzeW5jSW5pdCIsIkFuYWx5dGljc1RyYWNrZXIiLCJwaXdpa19sb2ciLCJwaXdpa190cmFjayIsInBpd2lrIiwiJCIsInRyYWNraW5nX3NlcnZlciIsInRyYWNraW5nX2lkX3NpdGUiLCJvbiIsInZhbCIsImFic29sdXRlUGF0aCIsImxpbmsiLCJkbF9yZXgiLCIkZXZlbnQiLCJhdHRyIiwiRGF0ZXBpY2tlciIsImVsZW1lbnQiLCJvcHRpb25zIiwiZm9ybWF0IiwiRFBHbG9iYWwiLCJwYXJzZUZvcm1hdCIsInBpY2tlciIsInRlbXBsYXRlIiwiYXBwZW5kVG8iLCJjbGljayIsInByb3h5IiwiaXNJbnB1dCIsImlzIiwiY29tcG9uZW50IiwiZm9jdXMiLCJzaG93Iiwia2V5dXAiLCJ1cGRhdGUiLCJtaW5WaWV3TW9kZSIsInZpZXdNb2RlIiwic3RhcnRWaWV3TW9kZSIsIndlZWtTdGFydCIsIndlZWtFbmQiLCJvblJlbmRlciIsImZpbGxEb3ciLCJmaWxsTW9udGhzIiwic2hvd01vZGUiLCJvdXRlckhlaWdodCIsInBsYWNlIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJ0aGF0IiwiZXYiLCJjbG9zZXN0IiwiaGlkZSIsInRyaWdnZXIiLCJkYXRlIiwib2ZmIiwic2V0IiwiZm9ybWF0ZWQiLCJmb3JtYXREYXRlIiwicHJvcCIsInNldFZhbHVlIiwibmV3RGF0ZSIsInBhcnNlRGF0ZSIsInZpZXdEYXRlIiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImZpbGwiLCJvZmZzZXQiLCJjc3MiLCJkb3dDbnQiLCJodG1sIiwiZGF0ZXMiLCJkYXlzTWluIiwiYXBwZW5kIiwibW9udGhzU2hvcnQiLCJ5ZWFyIiwibW9udGgiLCJjdXJyZW50RGF0ZSIsIm1vbnRocyIsInByZXZNb250aCIsImRheSIsImdldERheXNJbk1vbnRoIiwic2V0RGF0ZSIsImdldERheSIsIm5leHRNb250aCIsImdldERhdGUiLCJjbHNOYW1lIiwicHJldlkiLCJwcmV2TSIsImVtcHR5IiwiY3VycmVudFllYXIiLCJlbmQiLCJyZW1vdmVDbGFzcyIsImVxIiwiYWRkQ2xhc3MiLCJ5ZWFyQ29udCIsIm1vZGVzIiwibmF2Rm5jIiwibmF2U3RlcCIsImluZGV4Iiwic2V0TW9udGgiLCJzZXRGdWxsWWVhciIsIm1vdXNlZG93biIsImZpbHRlciIsImZuIiwiZGF0ZXBpY2tlciIsIm9wdGlvbiIsImVhY2giLCIkdGhpcyIsImV4dGVuZCIsImRlZmF1bHRzIiwiQ29uc3RydWN0b3IiLCJkYXlzIiwiZGF5c1Nob3J0IiwiaXNMZWFwWWVhciIsInNlcGFyYXRvciIsInBhcnRzIiwic2V0SG91cnMiLCJzZXRNaW51dGVzIiwic2V0U2Vjb25kcyIsInNldE1pbGxpc2Vjb25kcyIsImNudCIsInl5Iiwic3Vic3RyaW5nIiwieXl5eSIsImRkIiwibW0iLCJoZWFkVGVtcGxhdGUiLCJjb250VGVtcGxhdGUiLCJqUXVlcnkiLCJ2ZXJzaW9uIiwianF1ZXJ5IiwiZW11bGF0ZVRyYW5zaXRpb25FbmQiLCJkdXJhdGlvbiIsImNhbGxlZCIsIiRlbCIsIm9uZSIsInN1cHBvcnQiLCJ0cmFuc2l0aW9uIiwiZWwiLCJ0cmFuc0VuZEV2ZW50TmFtZXMiLCJXZWJraXRUcmFuc2l0aW9uIiwiTW96VHJhbnNpdGlvbiIsIk9UcmFuc2l0aW9uIiwic3R5bGUiLCJ0cmFuc2l0aW9uRW5kIiwic3BlY2lhbCIsImJzVHJhbnNpdGlvbkVuZCIsImJpbmRUeXBlIiwiZGVsZWdhdGVUeXBlIiwiaGFuZGxlIiwiaGFuZGxlT2JqIiwiaGFuZGxlciIsImRpc21pc3MiLCJBbGVydCIsImNsb3NlIiwiVkVSU0lPTiIsIlRSQU5TSVRJT05fRFVSQVRJT04iLCJzZWxlY3RvciIsIiRwYXJlbnQiLCJyZW1vdmVFbGVtZW50IiwiZGV0YWNoIiwicmVtb3ZlIiwiRXZlbnQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJoYXNDbGFzcyIsIm9sZCIsImFsZXJ0IiwiQnV0dG9uIiwiJGVsZW1lbnQiLCJERUZBVUxUUyIsImlzTG9hZGluZyIsIlBsdWdpbiIsInRvZ2dsZSIsInNldFN0YXRlIiwibG9hZGluZ1RleHQiLCJzdGF0ZSIsInJlc2V0VGV4dCIsInJlbW92ZUF0dHIiLCJjaGFuZ2VkIiwiJGlucHV0IiwidG9nZ2xlQ2xhc3MiLCIkYnRuIiwiZmlyc3QiLCJDYXJvdXNlbCIsIiRpbmRpY2F0b3JzIiwicGF1c2VkIiwic2xpZGluZyIsImludGVydmFsIiwiJGFjdGl2ZSIsIiRpdGVtcyIsImtleWJvYXJkIiwia2V5ZG93biIsInBhdXNlIiwiY3ljbGUiLCJhY3Rpb24iLCJzbGlkZSIsInRvIiwid3JhcCIsInRhZ05hbWUiLCJwcmV2IiwibmV4dCIsImdldEl0ZW1JbmRleCIsIml0ZW0iLCJnZXRJdGVtRm9yRGlyZWN0aW9uIiwiZGlyZWN0aW9uIiwiYWN0aXZlIiwiYWN0aXZlSW5kZXgiLCJpdGVtSW5kZXgiLCJwb3MiLCIkbmV4dCIsImlzQ3ljbGluZyIsInJlbGF0ZWRUYXJnZXQiLCJzbGlkZUV2ZW50IiwiJG5leHRJbmRpY2F0b3IiLCJzbGlkRXZlbnQiLCJjYXJvdXNlbCIsIiR0YXJnZXQiLCJzbGlkZUluZGV4IiwiJGNhcm91c2VsIiwiQ29sbGFwc2UiLCIkdHJpZ2dlciIsImlkIiwidHJhbnNpdGlvbmluZyIsImdldFBhcmVudCIsImFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyIsImdldFRhcmdldEZyb21UcmlnZ2VyIiwiZGltZW5zaW9uIiwiYWN0aXZlc0RhdGEiLCJhY3RpdmVzIiwic3RhcnRFdmVudCIsImNvbXBsZXRlIiwic2Nyb2xsU2l6ZSIsImNhbWVsQ2FzZSIsImlzT3BlbiIsImNvbGxhcHNlIiwiRHJvcGRvd24iLCJjbGVhck1lbnVzIiwiaXNBY3RpdmUiLCJpbnNlcnRBZnRlciIsImRyb3Bkb3duIiwiTW9kYWwiLCIkYm9keSIsImJvZHkiLCIkZGlhbG9nIiwiJGJhY2tkcm9wIiwiaXNTaG93biIsIm9yaWdpbmFsQm9keVBhZCIsInNjcm9sbGJhcldpZHRoIiwiaWdub3JlQmFja2Ryb3BDbGljayIsImZpeGVkQ29udGVudCIsInJlbW90ZSIsImxvYWQiLCJfcmVsYXRlZFRhcmdldCIsIkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04iLCJiYWNrZHJvcCIsImNoZWNrU2Nyb2xsYmFyIiwic2V0U2Nyb2xsYmFyIiwiZXNjYXBlIiwicmVzaXplIiwiYWRqdXN0RGlhbG9nIiwiZW5mb3JjZUZvY3VzIiwiaGlkZU1vZGFsIiwiaGFzIiwiaGFuZGxlVXBkYXRlIiwicmVzZXRBZGp1c3RtZW50cyIsInJlc2V0U2Nyb2xsYmFyIiwicmVtb3ZlQmFja2Ryb3AiLCJjYWxsYmFjayIsImFuaW1hdGUiLCJkb0FuaW1hdGUiLCJjdXJyZW50VGFyZ2V0IiwiY2FsbGJhY2tSZW1vdmUiLCJtb2RhbElzT3ZlcmZsb3dpbmciLCJzY3JvbGxIZWlnaHQiLCJwYWRkaW5nTGVmdCIsImJvZHlJc092ZXJmbG93aW5nIiwicGFkZGluZ1JpZ2h0IiwiZnVsbFdpbmRvd1dpZHRoIiwiZG9jdW1lbnRFbGVtZW50UmVjdCIsImFicyIsIm1lYXN1cmVTY3JvbGxiYXIiLCJib2R5UGFkIiwiYWN0dWFsUGFkZGluZyIsImNhbGN1bGF0ZWRQYWRkaW5nIiwicGFyc2VGbG9hdCIsInBhZGRpbmciLCJyZW1vdmVEYXRhIiwic2Nyb2xsRGl2IiwicmVtb3ZlQ2hpbGQiLCJtb2RhbCIsInNob3dFdmVudCIsIkRJU0FMTE9XRURfQVRUUklCVVRFUyIsInVyaUF0dHJzIiwiRGVmYXVsdFdoaXRlbGlzdCIsImFyZWEiLCJiciIsImNvbCIsImNvZGUiLCJkaXYiLCJlbSIsImhyIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaW1nIiwibGkiLCJvbCIsInByZSIsInNtYWxsIiwic3BhbiIsInN1YiIsInN1cCIsInN0cm9uZyIsInVsIiwiU0FGRV9VUkxfUEFUVEVSTiIsIkRBVEFfVVJMX1BBVFRFUk4iLCJhbGxvd2VkQXR0cmlidXRlIiwiYWxsb3dlZEF0dHJpYnV0ZUxpc3QiLCJhdHRyTmFtZSIsImluQXJyYXkiLCJCb29sZWFuIiwicmVnRXhwIiwic2FuaXRpemVIdG1sIiwidW5zYWZlSHRtbCIsIndoaXRlTGlzdCIsInNhbml0aXplRm4iLCJpbXBsZW1lbnRhdGlvbiIsImNyZWF0ZUhUTUxEb2N1bWVudCIsImNyZWF0ZWREb2N1bWVudCIsImlubmVySFRNTCIsIndoaXRlbGlzdEtleXMiLCJtYXAiLCJlbGVtZW50cyIsImxlbiIsImVsTmFtZSIsImF0dHJpYnV0ZUxpc3QiLCJ3aGl0ZWxpc3RlZEF0dHJpYnV0ZXMiLCJsZW4yIiwicmVtb3ZlQXR0cmlidXRlIiwiVG9vbHRpcCIsImVuYWJsZWQiLCJob3ZlclN0YXRlIiwiaW5TdGF0ZSIsImluaXQiLCJhbmltYXRpb24iLCJwbGFjZW1lbnQiLCJkZWxheSIsImNvbnRhaW5lciIsInZpZXdwb3J0Iiwic2FuaXRpemUiLCJnZXRPcHRpb25zIiwiJHZpZXdwb3J0IiwiaG92ZXIiLCJ0cmlnZ2VycyIsImV2ZW50SW4iLCJldmVudE91dCIsImVudGVyIiwibGVhdmUiLCJfb3B0aW9ucyIsImZpeFRpdGxlIiwiZ2V0RGVmYXVsdHMiLCJkYXRhQXR0cmlidXRlcyIsImRhdGFBdHRyIiwiZ2V0RGVsZWdhdGVPcHRpb25zIiwib2JqIiwidGlwIiwiaXNJblN0YXRlVHJ1ZSIsImhhc0NvbnRlbnQiLCJpbkRvbSIsIm93bmVyRG9jdW1lbnQiLCIkdGlwIiwidGlwSWQiLCJnZXRVSUQiLCJzZXRDb250ZW50IiwiYXV0b1Rva2VuIiwiYXV0b1BsYWNlIiwiZGlzcGxheSIsImdldFBvc2l0aW9uIiwiYWN0dWFsV2lkdGgiLCJhY3R1YWxIZWlnaHQiLCJvcmdQbGFjZW1lbnQiLCJ2aWV3cG9ydERpbSIsImNhbGN1bGF0ZWRPZmZzZXQiLCJnZXRDYWxjdWxhdGVkT2Zmc2V0IiwiYXBwbHlQbGFjZW1lbnQiLCJwcmV2SG92ZXJTdGF0ZSIsIm1hcmdpblRvcCIsIm1hcmdpbkxlZnQiLCJpc05hTiIsInNldE9mZnNldCIsInVzaW5nIiwicHJvcHMiLCJkZWx0YSIsImdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YSIsImlzVmVydGljYWwiLCJhcnJvd0RlbHRhIiwiYXJyb3dPZmZzZXRQb3NpdGlvbiIsInJlcGxhY2VBcnJvdyIsImFycm93IiwiZ2V0VGl0bGUiLCIkZSIsImlzQm9keSIsImVsUmVjdCIsImlzU3ZnIiwiU1ZHRWxlbWVudCIsImVsT2Zmc2V0Iiwic2Nyb2xsIiwib3V0ZXJEaW1zIiwidmlld3BvcnRQYWRkaW5nIiwidmlld3BvcnREaW1lbnNpb25zIiwidG9wRWRnZU9mZnNldCIsImJvdHRvbUVkZ2VPZmZzZXQiLCJsZWZ0RWRnZU9mZnNldCIsInJpZ2h0RWRnZU9mZnNldCIsInByZWZpeCIsImdldEVsZW1lbnRCeUlkIiwiJGFycm93IiwiZW5hYmxlIiwiZGlzYWJsZSIsInRvZ2dsZUVuYWJsZWQiLCJkZXN0cm95IiwidG9vbHRpcCIsIlBvcG92ZXIiLCJ0eXBlQ29udGVudCIsInBvcG92ZXIiLCJTY3JvbGxTcHkiLCIkc2Nyb2xsRWxlbWVudCIsIm9mZnNldHMiLCJ0YXJnZXRzIiwiYWN0aXZlVGFyZ2V0IiwicHJvY2VzcyIsInJlZnJlc2giLCJnZXRTY3JvbGxIZWlnaHQiLCJvZmZzZXRNZXRob2QiLCJvZmZzZXRCYXNlIiwiaXNXaW5kb3ciLCIkaHJlZiIsIm1heFNjcm9sbCIsImFjdGl2YXRlIiwiY2xlYXIiLCJwYXJlbnRzIiwicGFyZW50c1VudGlsIiwic2Nyb2xsc3B5IiwiJHNweSIsIlRhYiIsIiR1bCIsIiRwcmV2aW91cyIsImhpZGVFdmVudCIsInRhYiIsIkFmZml4IiwiY2hlY2tQb3NpdGlvbiIsImNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wIiwiYWZmaXhlZCIsInVucGluIiwicGlubmVkT2Zmc2V0IiwiUkVTRVQiLCJnZXRTdGF0ZSIsIm9mZnNldEJvdHRvbSIsInBvc2l0aW9uIiwidGFyZ2V0SGVpZ2h0IiwiaW5pdGlhbGl6aW5nIiwiY29sbGlkZXJUb3AiLCJnZXRQaW5uZWRPZmZzZXQiLCJhZmZpeCIsImFmZml4VHlwZSIsIkJhY2tib25lIiwicm9vdCIsInByZXZpb3VzQmFja2JvbmUiLCJhcnJheSIsIl8iLCJlbXVsYXRlSFRUUCIsImVtdWxhdGVKU09OIiwiRXZlbnRzIiwiY29udGV4dCIsImV2ZW50c0FwaSIsIl9ldmVudHMiLCJjdHgiLCJvbmNlIiwiX2NhbGxiYWNrIiwicmV0YWluIiwiZXZlbnRzIiwibmFtZXMiLCJrZXlzIiwiYXJncyIsImFsbEV2ZW50cyIsInRyaWdnZXJFdmVudHMiLCJzdG9wTGlzdGVuaW5nIiwibGlzdGVuZXJzIiwiX2xpc3RlbmVycyIsImRlbGV0ZUxpc3RlbmVyIiwiX2xpc3RlbmVySWQiLCJldmVudFNwbGl0dGVyIiwicmVzdCIsImExIiwiYTIiLCJhMyIsImxpc3RlblRvIiwibGlzdGVuVG9PbmNlIiwibWV0aG9kIiwidW5pcXVlSWQiLCJ1bmJpbmQiLCJNb2RlbCIsImF0dHJzIiwiY2lkIiwicGljayIsIm1vZGVsT3B0aW9ucyIsInZhbGlkYXRpb25FcnJvciIsImlkQXR0cmlidXRlIiwiY2xvbmUiLCJzeW5jIiwidW5zZXQiLCJjaGFuZ2VzIiwic2lsZW50IiwiY2hhbmdpbmciLCJjdXJyZW50IiwiX3ZhbGlkYXRlIiwiX2NoYW5naW5nIiwiX3ByZXZpb3VzQXR0cmlidXRlcyIsImlzRXF1YWwiLCJfcGVuZGluZyIsImhhc0NoYW5nZWQiLCJpc0VtcHR5IiwiY2hhbmdlZEF0dHJpYnV0ZXMiLCJkaWZmIiwicHJldmlvdXMiLCJwcmV2aW91c0F0dHJpYnV0ZXMiLCJmZXRjaCIsIm1vZGVsIiwic3VjY2VzcyIsInJlc3AiLCJ3cmFwRXJyb3IiLCJzYXZlIiwieGhyIiwid2FpdCIsInZhbGlkYXRlIiwic2VydmVyQXR0cnMiLCJpc05ldyIsInBhdGNoIiwiY29sbGVjdGlvbiIsInVybCIsImJhc2UiLCJ1cmxFcnJvciIsImlzVmFsaWQiLCJDb2xsZWN0aW9uIiwibW9kZWxzIiwiY29tcGFyYXRvciIsIl9yZXNldCIsInJlc2V0Iiwic2V0T3B0aW9ucyIsImFkZCIsIm1lcmdlIiwiYWRkT3B0aW9ucyIsImlzQXJyYXkiLCJfYnlJZCIsIl9yZW1vdmVSZWZlcmVuY2UiLCJleGlzdGluZyIsImF0Iiwic29ydGFibGUiLCJzb3J0QXR0ciIsInRvQWRkIiwidG9SZW1vdmUiLCJtb2RlbE1hcCIsIl9wcmVwYXJlTW9kZWwiLCJfb25Nb2RlbEV2ZW50IiwicHJldmlvdXNNb2RlbHMiLCJiZWdpbiIsIndoZXJlIiwiZmluZFdoZXJlIiwic29ydEJ5Iiwic29ydGVkSW5kZXgiLCJwbHVjayIsImludm9rZSIsIlZpZXciLCJfY29uZmlndXJlIiwiX2Vuc3VyZUVsZW1lbnQiLCJkZWxlZ2F0ZUV2ZW50cyIsImRlbGVnYXRlRXZlbnRTcGxpdHRlciIsInZpZXdPcHRpb25zIiwicmVuZGVyIiwic2V0RWxlbWVudCIsImRlbGVnYXRlIiwidW5kZWxlZ2F0ZUV2ZW50cyIsImV2ZW50TmFtZSIsIm1ldGhvZE1hcCIsInBhcmFtcyIsImRhdGFUeXBlIiwiY29udGVudFR5cGUiLCJfbWV0aG9kIiwiYmVmb3JlU2VuZCIsInByb2Nlc3NEYXRhIiwiZXh0ZXJuYWwiLCJtc0FjdGl2ZVhGaWx0ZXJpbmdFbmFibGVkIiwiYWpheCIsInJlYWQiLCJSb3V0ZXIiLCJyb3V0ZXMiLCJfYmluZFJvdXRlcyIsIm9wdGlvbmFsUGFyYW0iLCJuYW1lZFBhcmFtIiwic3BsYXRQYXJhbSIsImVzY2FwZVJlZ0V4cCIsInJvdXRlIiwiaXNSZWdFeHAiLCJfcm91dGVUb1JlZ0V4cCIsInJvdXRlciIsImhpc3RvcnkiLCJmcmFnbWVudCIsIl9leHRyYWN0UGFyYW1ldGVycyIsIm5hdmlnYXRlIiwib3B0aW9uYWwiLCJwYXJhbSIsIkhpc3RvcnkiLCJoYW5kbGVycyIsImJpbmRBbGwiLCJyb3V0ZVN0cmlwcGVyIiwicm9vdFN0cmlwcGVyIiwiaXNFeHBsb3JlciIsInRyYWlsaW5nU2xhc2giLCJzdGFydGVkIiwiZ2V0SGFzaCIsImdldEZyYWdtZW50IiwiZm9yY2VQdXNoU3RhdGUiLCJfaGFzUHVzaFN0YXRlIiwiX3dhbnRzSGFzaENoYW5nZSIsInN0YXJ0IiwiaGFzaENoYW5nZSIsIl93YW50c1B1c2hTdGF0ZSIsInB1c2hTdGF0ZSIsImRvY01vZGUiLCJkb2N1bWVudE1vZGUiLCJvbGRJRSIsImlmcmFtZSIsImNvbnRlbnRXaW5kb3ciLCJjaGVja1VybCIsIl9jaGVja1VybEludGVydmFsIiwibG9jIiwiYXRSb290IiwicmVwbGFjZVN0YXRlIiwibG9hZFVybCIsInN0b3AiLCJmcmFnbWVudE92ZXJyaWRlIiwiYW55IiwiYXNzaWduIiwiX3VwZGF0ZUhhc2giLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJjaGlsZCIsIlN1cnJvZ2F0ZSIsIl9fc3VwZXJfXyIsImZhY3RvcnkiLCJ2ZXJ0eE5leHQiLCJjdXN0b21TY2hlZHVsZXJGbiIsImFzYXAiLCJhcmciLCJxdWV1ZSIsImZsdXNoIiwic2NoZWR1bGVGbHVzaCIsImJyb3dzZXJXaW5kb3ciLCJicm93c2VyR2xvYmFsIiwiQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIsImlzTm9kZSIsImlzV29ya2VyIiwiVWludDhDbGFtcGVkQXJyYXkiLCJpbXBvcnRTY3JpcHRzIiwiTWVzc2FnZUNoYW5uZWwiLCJ1c2VTZXRUaW1lb3V0IiwiZ2xvYmFsU2V0VGltZW91dCIsImNoYW5uZWwiLCJpdGVyYXRpb25zIiwib2JzZXJ2ZXIiLCJub2RlIiwidGhlbiIsIm9uRnVsZmlsbG1lbnQiLCJvblJlamVjdGlvbiIsIl9hcmd1bWVudHMiLCJub29wIiwiUFJPTUlTRV9JRCIsIm1ha2VQcm9taXNlIiwiX3N0YXRlIiwiaW52b2tlQ2FsbGJhY2siLCJfcmVzdWx0Iiwic3Vic2NyaWJlIiwiX3Jlc29sdmUiLCJuZXh0VGljayIsImNyZWF0ZVRleHROb2RlIiwib2JzZXJ2ZSIsImNoYXJhY3RlckRhdGEiLCJwb3J0MSIsIm9ubWVzc2FnZSIsInBvcnQyIiwicG9zdE1lc3NhZ2UiLCJ2ZXJ0eCIsInJ1bk9uTG9vcCIsInJ1bk9uQ29udGV4dCIsImF0dGVtcHRWZXJ0eCIsIkdFVF9USEVOX0VSUk9SIiwiRXJyb3JPYmplY3QiLCJnZXRUaGVuIiwiaGFuZGxlTWF5YmVUaGVuYWJsZSIsIm1heWJlVGhlbmFibGUiLCJ0aGVuJCQiLCJ0aGVuYWJsZSIsImZ1bGZpbGwiLCJfcmVqZWN0IiwicmVhc29uIiwiaGFuZGxlT3duVGhlbmFibGUiLCJzZWFsZWQiLCJmdWxmaWxsbWVudEhhbmRsZXIiLCJyZWplY3Rpb25IYW5kbGVyIiwidHJ5VGhlbiIsIl9sYWJlbCIsImhhbmRsZUZvcmVpZ25UaGVuYWJsZSIsInB1Ymxpc2hSZWplY3Rpb24iLCJfb25lcnJvciIsInB1Ymxpc2giLCJfc3Vic2NyaWJlcnMiLCJzdWJzY3JpYmVycyIsInNldHRsZWQiLCJkZXRhaWwiLCJUUllfQ0FUQ0hfRVJST1IiLCJoYXNDYWxsYmFjayIsInN1Y2NlZWRlZCIsImZhaWxlZCIsInRyeUNhdGNoIiwiRW51bWVyYXRvciIsImlucHV0IiwiX2luc3RhbmNlQ29uc3RydWN0b3IiLCJfaW5wdXQiLCJfcmVtYWluaW5nIiwiX2VudW1lcmF0ZSIsInJlc29sdmVyIiwibmVlZHNSZXNvbHZlciIsImluaXRpYWxpemVQcm9taXNlIiwibmVlZHNOZXciLCJwb2x5ZmlsbCIsImxvY2FsIiwiRnVuY3Rpb24iLCJwcm9taXNlVG9TdHJpbmciLCJjYXN0IiwiX2VhY2hFbnRyeSIsImVudHJ5IiwicmVzb2x2ZSQkIiwiX3RoZW4iLCJfc2V0dGxlZEF0IiwiX3dpbGxTZXR0bGVBdCIsImVudW1lcmF0b3IiLCJlbnRyaWVzIiwicmFjZSIsIl9zZXRTY2hlZHVsZXIiLCJzY2hlZHVsZUZuIiwiX3NldEFzYXAiLCJhc2FwRm4iLCJfYXNhcCIsIm5vR2xvYmFsIiwiYXJyIiwiY2xhc3MydHlwZSIsImhhc093biIsInJ0cmltIiwicm1zUHJlZml4IiwicmRhc2hBbHBoYSIsImZjYW1lbENhc2UiLCJsZXR0ZXIiLCJpc0FycmF5TGlrZSIsInRvQXJyYXkiLCJudW0iLCJwdXNoU3RhY2siLCJlbGVtcyIsInJldCIsInByZXZPYmplY3QiLCJlbGVtIiwibGFzdCIsImNvcHkiLCJjb3B5SXNBcnJheSIsImRlZXAiLCJpc1BsYWluT2JqZWN0IiwiZXhwYW5kbyIsImlzUmVhZHkiLCJtc2ciLCJpc051bWVyaWMiLCJyZWFsU3RyaW5nT2JqIiwiaXNFbXB0eU9iamVjdCIsImdsb2JhbEV2YWwiLCJpbmRpcmVjdCIsInN0cmluZyIsIm1ha2VBcnJheSIsInJlc3VsdHMiLCJzZWNvbmQiLCJncmVwIiwiaW52ZXJ0IiwibWF0Y2hlcyIsImNhbGxiYWNrRXhwZWN0IiwiZ3VpZCIsInRtcCIsIm5vdyIsIlNpenpsZSIsIkV4cHIiLCJnZXRUZXh0IiwiaXNYTUwiLCJ0b2tlbml6ZSIsImNvbXBpbGUiLCJzZWxlY3QiLCJvdXRlcm1vc3RDb250ZXh0Iiwic29ydElucHV0IiwiaGFzRHVwbGljYXRlIiwic2V0RG9jdW1lbnQiLCJkb2NFbGVtIiwiZG9jdW1lbnRJc0hUTUwiLCJyYnVnZ3lRU0EiLCJyYnVnZ3lNYXRjaGVzIiwicHJlZmVycmVkRG9jIiwiZGlycnVucyIsImRvbmUiLCJjbGFzc0NhY2hlIiwiY3JlYXRlQ2FjaGUiLCJ0b2tlbkNhY2hlIiwiY29tcGlsZXJDYWNoZSIsInNvcnRPcmRlciIsInB1c2hfbmF0aXZlIiwibGlzdCIsImJvb2xlYW5zIiwid2hpdGVzcGFjZSIsImlkZW50aWZpZXIiLCJwc2V1ZG9zIiwicndoaXRlc3BhY2UiLCJyY29tbWEiLCJyY29tYmluYXRvcnMiLCJyYXR0cmlidXRlUXVvdGVzIiwicnBzZXVkbyIsInJpZGVudGlmaWVyIiwibWF0Y2hFeHByIiwicmlucHV0cyIsInJoZWFkZXIiLCJybmF0aXZlIiwicnF1aWNrRXhwciIsInJzaWJsaW5nIiwicmVzY2FwZSIsInJ1bmVzY2FwZSIsImZ1bmVzY2FwZSIsImVzY2FwZWQiLCJlc2NhcGVkV2hpdGVzcGFjZSIsImhpZ2giLCJ1bmxvYWRIYW5kbGVyIiwiZWxzIiwic2VlZCIsIm5pZCIsIm5pZHNlbGVjdCIsImdyb3VwcyIsIm5ld1NlbGVjdG9yIiwibmV3Q29udGV4dCIsInFzYSIsInRvU2VsZWN0b3IiLCJ0ZXN0Q29udGV4dCIsInFzYUVycm9yIiwiY2FjaGUiLCJjYWNoZUxlbmd0aCIsIm1hcmtGdW5jdGlvbiIsImFzc2VydCIsImFkZEhhbmRsZSIsImF0dHJIYW5kbGUiLCJzaWJsaW5nQ2hlY2siLCJjdXIiLCJzb3VyY2VJbmRleCIsIm5leHRTaWJsaW5nIiwiY3JlYXRlSW5wdXRQc2V1ZG8iLCJjcmVhdGVCdXR0b25Qc2V1ZG8iLCJjcmVhdGVQb3NpdGlvbmFsUHNldWRvIiwiYXJndW1lbnQiLCJtYXRjaEluZGV4ZXMiLCJoYXNDb21wYXJlIiwiZG9jIiwiY3JlYXRlQ29tbWVudCIsImdldEJ5SWQiLCJnZXRFbGVtZW50c0J5TmFtZSIsImF0dHJJZCIsImdldEF0dHJpYnV0ZU5vZGUiLCJ0YWciLCJtYXRjaGVzU2VsZWN0b3IiLCJ3ZWJraXRNYXRjaGVzU2VsZWN0b3IiLCJtb3pNYXRjaGVzU2VsZWN0b3IiLCJvTWF0Y2hlc1NlbGVjdG9yIiwibXNNYXRjaGVzU2VsZWN0b3IiLCJkaXNjb25uZWN0ZWRNYXRjaCIsImFkb3duIiwiYnVwIiwiY29tcGFyZSIsInNvcnREZXRhY2hlZCIsImF1cCIsImFwIiwiYnAiLCJleHByIiwic3BlY2lmaWVkIiwidW5pcXVlU29ydCIsImR1cGxpY2F0ZXMiLCJkZXRlY3REdXBsaWNhdGVzIiwic29ydFN0YWJsZSIsInRleHRDb250ZW50IiwiZmlyc3RDaGlsZCIsInNlbGVjdG9ycyIsImNyZWF0ZVBzZXVkbyIsInJlbGF0aXZlIiwicHJlRmlsdGVyIiwiZXhjZXNzIiwidW5xdW90ZWQiLCJub2RlTmFtZVNlbGVjdG9yIiwicGF0dGVybiIsIm9wZXJhdG9yIiwiY2hlY2siLCJ3aGF0Iiwic2ltcGxlIiwiZm9yd2FyZCIsIm9mVHlwZSIsInhtbCIsInVuaXF1ZUNhY2hlIiwib3V0ZXJDYWNoZSIsIm5vZGVJbmRleCIsInVzZUNhY2hlIiwibGFzdENoaWxkIiwidW5pcXVlSUQiLCJwc2V1ZG8iLCJzZXRGaWx0ZXJzIiwiaWR4IiwibWF0Y2hlZCIsIm1hdGNoZXIiLCJ1bm1hdGNoZWQiLCJpbm5lclRleHQiLCJsYW5nIiwiZWxlbUxhbmciLCJhY3RpdmVFbGVtZW50IiwiaGFzRm9jdXMiLCJ0YWJJbmRleCIsImRpc2FibGVkIiwiY2hlY2tlZCIsInNlbGVjdGVkIiwic2VsZWN0ZWRJbmRleCIsInJhZGlvIiwiY2hlY2tib3giLCJmaWxlIiwicGFzc3dvcmQiLCJpbWFnZSIsInN1Ym1pdCIsInRva2VucyIsImFkZENvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY2hlY2tOb25FbGVtZW50cyIsImRvbmVOYW1lIiwib2xkQ2FjaGUiLCJuZXdDYWNoZSIsImVsZW1lbnRNYXRjaGVyIiwibWF0Y2hlcnMiLCJjb25kZW5zZSIsIm5ld1VubWF0Y2hlZCIsIm1hcHBlZCIsInNldE1hdGNoZXIiLCJwb3N0RmlsdGVyIiwicG9zdEZpbmRlciIsInBvc3RTZWxlY3RvciIsInRlbXAiLCJwcmVNYXAiLCJwb3N0TWFwIiwicHJlZXhpc3RpbmciLCJjb250ZXh0cyIsIm11bHRpcGxlQ29udGV4dHMiLCJtYXRjaGVySW4iLCJtYXRjaGVyT3V0IiwibWF0Y2hlckZyb21Ub2tlbnMiLCJjaGVja0NvbnRleHQiLCJsZWFkaW5nUmVsYXRpdmUiLCJpbXBsaWNpdFJlbGF0aXZlIiwibWF0Y2hDb250ZXh0IiwibWF0Y2hBbnlDb250ZXh0IiwiZmlsdGVycyIsInBhcnNlT25seSIsInNvRmFyIiwicHJlRmlsdGVycyIsImNhY2hlZCIsInNldE1hdGNoZXJzIiwiZWxlbWVudE1hdGNoZXJzIiwiYnlTZXQiLCJieUVsZW1lbnQiLCJzdXBlck1hdGNoZXIiLCJvdXRlcm1vc3QiLCJtYXRjaGVkQ291bnQiLCJzZXRNYXRjaGVkIiwiY29udGV4dEJhY2t1cCIsImRpcnJ1bnNVbmlxdWUiLCJtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMiLCJ0b2tlbiIsImNvbXBpbGVkIiwiZGl2MSIsImRlZmF1bHRWYWx1ZSIsInVuaXF1ZSIsImlzWE1MRG9jIiwidW50aWwiLCJ0cnVuY2F0ZSIsInNpYmxpbmdzIiwicm5lZWRzQ29udGV4dCIsIm5lZWRzQ29udGV4dCIsInJzaW5nbGVUYWciLCJyaXNTaW1wbGUiLCJ3aW5ub3ciLCJxdWFsaWZpZXIiLCJub3QiLCJyb290alF1ZXJ5IiwicGFyc2VIVE1MIiwicmVhZHkiLCJycGFyZW50c3ByZXYiLCJndWFyYW50ZWVkVW5pcXVlIiwiY29udGVudHMiLCJzaWJsaW5nIiwicHJldkFsbCIsImFkZEJhY2siLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldlVudGlsIiwiY29udGVudERvY3VtZW50IiwicmV2ZXJzZSIsInJlYWR5TGlzdCIsInJub3R3aGl0ZSIsImNvbXBsZXRlZCIsIkNhbGxiYWNrcyIsImZsYWciLCJjcmVhdGVPcHRpb25zIiwiZmlyaW5nIiwibWVtb3J5IiwiZmlyZWQiLCJsb2NrZWQiLCJmaXJpbmdJbmRleCIsImZpcmUiLCJzdG9wT25GYWxzZSIsImxvY2siLCJmaXJlV2l0aCIsIkRlZmVycmVkIiwiZnVuYyIsInR1cGxlcyIsImFsd2F5cyIsImRlZmVycmVkIiwiZmFpbCIsImZucyIsIm5ld0RlZmVyIiwidHVwbGUiLCJyZXR1cm5lZCIsInByb2dyZXNzIiwibm90aWZ5IiwicGlwZSIsInN0YXRlU3RyaW5nIiwid2hlbiIsInN1Ym9yZGluYXRlIiwicHJvZ3Jlc3NWYWx1ZXMiLCJwcm9ncmVzc0NvbnRleHRzIiwicmVzb2x2ZUNvbnRleHRzIiwicmVzb2x2ZVZhbHVlcyIsInJlbWFpbmluZyIsInVwZGF0ZUZ1bmMiLCJ2YWx1ZXMiLCJub3RpZnlXaXRoIiwicmVzb2x2ZVdpdGgiLCJyZWFkeVdhaXQiLCJob2xkUmVhZHkiLCJob2xkIiwidHJpZ2dlckhhbmRsZXIiLCJhY2Nlc3MiLCJjaGFpbmFibGUiLCJlbXB0eUdldCIsInJhdyIsImJ1bGsiLCJhY2NlcHREYXRhIiwib3duZXIiLCJEYXRhIiwidWlkIiwicmVnaXN0ZXIiLCJpbml0aWFsIiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJzdG9yZWQiLCJjYW1lbCIsImhhc0RhdGEiLCJkYXRhUHJpdiIsImRhdGFVc2VyIiwicmJyYWNlIiwicm11bHRpRGFzaCIsInBhcnNlSlNPTiIsIl9kYXRhIiwiX3JlbW92ZURhdGEiLCJjYW1lbEtleSIsImRlcXVldWUiLCJzdGFydExlbmd0aCIsImhvb2tzIiwiX3F1ZXVlSG9va3MiLCJzZXR0ZXIiLCJjbGVhclF1ZXVlIiwiY291bnQiLCJkZWZlciIsInBudW0iLCJzb3VyY2UiLCJyY3NzTnVtIiwiY3NzRXhwYW5kIiwiaXNIaWRkZW4iLCJhZGp1c3RDU1MiLCJ2YWx1ZVBhcnRzIiwidHdlZW4iLCJhZGp1c3RlZCIsInNjYWxlIiwibWF4SXRlcmF0aW9ucyIsImN1cnJlbnRWYWx1ZSIsInVuaXQiLCJjc3NOdW1iZXIiLCJpbml0aWFsSW5Vbml0IiwicmNoZWNrYWJsZVR5cGUiLCJydGFnTmFtZSIsInJzY3JpcHRUeXBlIiwid3JhcE1hcCIsInRoZWFkIiwidHIiLCJ0ZCIsIl9kZWZhdWx0IiwiZ2V0QWxsIiwic2V0R2xvYmFsRXZhbCIsInJlZkVsZW1lbnRzIiwib3B0Z3JvdXAiLCJ0Ym9keSIsInRmb290IiwiY29sZ3JvdXAiLCJjYXB0aW9uIiwidGgiLCJyaHRtbCIsImJ1aWxkRnJhZ21lbnQiLCJzY3JpcHRzIiwic2VsZWN0aW9uIiwiaWdub3JlZCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJub2RlcyIsImh0bWxQcmVmaWx0ZXIiLCJjaGVja0Nsb25lIiwiY2xvbmVOb2RlIiwibm9DbG9uZUNoZWNrZWQiLCJya2V5RXZlbnQiLCJybW91c2VFdmVudCIsInJ0eXBlbmFtZXNwYWNlIiwicmV0dXJuVHJ1ZSIsInJldHVybkZhbHNlIiwic2FmZUFjdGl2ZUVsZW1lbnQiLCJ0eXBlcyIsIm9yaWdGbiIsImhhbmRsZU9iakluIiwiZXZlbnRIYW5kbGUiLCJuYW1lc3BhY2VzIiwib3JpZ1R5cGUiLCJlbGVtRGF0YSIsInRyaWdnZXJlZCIsImRpc3BhdGNoIiwibmFtZXNwYWNlIiwiZGVsZWdhdGVDb3VudCIsInNldHVwIiwibWFwcGVkVHlwZXMiLCJvcmlnQ291bnQiLCJ0ZWFyZG93biIsInJlbW92ZUV2ZW50IiwiZml4IiwiaGFuZGxlclF1ZXVlIiwiZGVsZWdhdGVUYXJnZXQiLCJwcmVEaXNwYXRjaCIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwiaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQiLCJybmFtZXNwYWNlIiwicG9zdERpc3BhdGNoIiwic2VsIiwiZml4SG9va3MiLCJrZXlIb29rcyIsIm9yaWdpbmFsIiwiY2hhckNvZGUiLCJrZXlDb2RlIiwibW91c2VIb29rcyIsImV2ZW50RG9jIiwicGFnZVgiLCJjbGllbnRYIiwiY2xpZW50TGVmdCIsInBhZ2VZIiwiY2xpZW50WSIsImNsaWVudFRvcCIsIm9yaWdpbmFsRXZlbnQiLCJmaXhIb29rIiwibm9CdWJibGUiLCJibHVyIiwiYmVmb3JldW5sb2FkIiwicmV0dXJuVmFsdWUiLCJkZWZhdWx0UHJldmVudGVkIiwidGltZVN0YW1wIiwiaXNTaW11bGF0ZWQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInBvaW50ZXJlbnRlciIsInBvaW50ZXJsZWF2ZSIsIm9yaWciLCJyZWxhdGVkIiwicnhodG1sVGFnIiwicm5vSW5uZXJodG1sIiwicmNoZWNrZWQiLCJyc2NyaXB0VHlwZU1hc2tlZCIsInJjbGVhblNjcmlwdCIsIm1hbmlwdWxhdGlvblRhcmdldCIsImRpc2FibGVTY3JpcHQiLCJyZXN0b3JlU2NyaXB0IiwiY2xvbmVDb3B5RXZlbnQiLCJkZXN0IiwicGRhdGFPbGQiLCJwZGF0YUN1ciIsInVkYXRhT2xkIiwidWRhdGFDdXIiLCJkb21NYW5pcCIsImhhc1NjcmlwdHMiLCJpTm9DbG9uZSIsIl9ldmFsVXJsIiwia2VlcERhdGEiLCJjbGVhbkRhdGEiLCJkYXRhQW5kRXZlbnRzIiwiZGVlcERhdGFBbmRFdmVudHMiLCJzcmNFbGVtZW50cyIsImRlc3RFbGVtZW50cyIsImluUGFnZSIsInByZXBlbmQiLCJpbnNlcnRCZWZvcmUiLCJiZWZvcmUiLCJhZnRlciIsInJlcGxhY2VXaXRoIiwicmVwbGFjZUNoaWxkIiwicHJlcGVuZFRvIiwicmVwbGFjZUFsbCIsImluc2VydCIsImVsZW1kaXNwbGF5IiwiSFRNTCIsIkJPRFkiLCJhY3R1YWxEaXNwbGF5IiwiZGVmYXVsdERpc3BsYXkiLCJ3cml0ZSIsInJtYXJnaW4iLCJybnVtbm9ucHgiLCJnZXRTdHlsZXMiLCJ2aWV3Iiwib3BlbmVyIiwic3dhcCIsImN1ckNTUyIsImNvbXB1dGVkIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImdldFByb3BlcnR5VmFsdWUiLCJwaXhlbE1hcmdpblJpZ2h0IiwiYWRkR2V0SG9va0lmIiwiY29uZGl0aW9uRm4iLCJob29rRm4iLCJwaXhlbFBvc2l0aW9uVmFsIiwiYm94U2l6aW5nUmVsaWFibGVWYWwiLCJwaXhlbE1hcmdpblJpZ2h0VmFsIiwicmVsaWFibGVNYXJnaW5MZWZ0VmFsIiwiY29tcHV0ZVN0eWxlVGVzdHMiLCJjc3NUZXh0IiwiZGl2U3R5bGUiLCJtYXJnaW5SaWdodCIsImJhY2tncm91bmRDbGlwIiwiY2xlYXJDbG9uZVN0eWxlIiwicGl4ZWxQb3NpdGlvbiIsImJveFNpemluZ1JlbGlhYmxlIiwicmVsaWFibGVNYXJnaW5MZWZ0IiwicmVsaWFibGVNYXJnaW5SaWdodCIsIm1hcmdpbkRpdiIsInJkaXNwbGF5c3dhcCIsImNzc1Nob3ciLCJ2aXNpYmlsaXR5IiwiY3NzTm9ybWFsVHJhbnNmb3JtIiwibGV0dGVyU3BhY2luZyIsImZvbnRXZWlnaHQiLCJjc3NQcmVmaXhlcyIsImVtcHR5U3R5bGUiLCJ2ZW5kb3JQcm9wTmFtZSIsImNhcE5hbWUiLCJzZXRQb3NpdGl2ZU51bWJlciIsInN1YnRyYWN0IiwiYXVnbWVudFdpZHRoT3JIZWlnaHQiLCJleHRyYSIsImlzQm9yZGVyQm94Iiwic3R5bGVzIiwiZ2V0V2lkdGhPckhlaWdodCIsInZhbHVlSXNCb3JkZXJCb3giLCJzaG93SGlkZSIsImhpZGRlbiIsIlR3ZWVuIiwiZWFzaW5nIiwiY3NzSG9va3MiLCJvcGFjaXR5IiwiY3NzUHJvcHMiLCJvcmlnTmFtZSIsImlzRmluaXRlIiwibWFyZ2luIiwiYm9yZGVyIiwic3VmZml4IiwiZXhwYW5kIiwiZXhwYW5kZWQiLCJwcm9wSG9va3MiLCJydW4iLCJwZXJjZW50IiwiZWFzZWQiLCJzdGVwIiwiZngiLCJsaW5lYXIiLCJzd2luZyIsImNvcyIsIlBJIiwiZnhOb3ciLCJ0aW1lcklkIiwicmZ4dHlwZXMiLCJycnVuIiwiY3JlYXRlRnhOb3ciLCJnZW5GeCIsImluY2x1ZGVXaWR0aCIsImNyZWF0ZVR3ZWVuIiwiQW5pbWF0aW9uIiwidHdlZW5lcnMiLCJwcm9wZXJ0aWVzIiwic3RvcHBlZCIsInByZWZpbHRlcnMiLCJ0aWNrIiwiY3VycmVudFRpbWUiLCJzdGFydFRpbWUiLCJ0d2VlbnMiLCJvcHRzIiwic3BlY2lhbEVhc2luZyIsIm9yaWdpbmFsUHJvcGVydGllcyIsIm9yaWdpbmFsT3B0aW9ucyIsImdvdG9FbmQiLCJyZWplY3RXaXRoIiwicHJvcEZpbHRlciIsInRpbWVyIiwiYW5pbSIsInR3ZWVuZXIiLCJvbGRmaXJlIiwiZGF0YVNob3ciLCJ1bnF1ZXVlZCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwicHJlZmlsdGVyIiwic3BlZWQiLCJvcHQiLCJzcGVlZHMiLCJmYWRlVG8iLCJvcHRhbGwiLCJkb0FuaW1hdGlvbiIsImZpbmlzaCIsInN0b3BRdWV1ZSIsInRpbWVycyIsImNzc0ZuIiwic2xpZGVEb3duIiwic2xpZGVVcCIsInNsaWRlVG9nZ2xlIiwiZmFkZUluIiwiZmFkZU91dCIsImZhZGVUb2dnbGUiLCJzbG93IiwiZmFzdCIsInRpbWUiLCJjaGVja09uIiwib3B0U2VsZWN0ZWQiLCJvcHREaXNhYmxlZCIsInJhZGlvVmFsdWUiLCJib29sSG9vayIsIm5UeXBlIiwiYXR0ckhvb2tzIiwiYm9vbCIsInByb3BOYW1lIiwiYXR0ck5hbWVzIiwicHJvcEZpeCIsInJmb2N1c2FibGUiLCJyY2xpY2thYmxlIiwicmVtb3ZlUHJvcCIsInRhYmluZGV4IiwicmNsYXNzIiwiZ2V0Q2xhc3MiLCJjbGFzc2VzIiwiY3VyVmFsdWUiLCJjbGF6eiIsImZpbmFsVmFsdWUiLCJzdGF0ZVZhbCIsImNsYXNzTmFtZXMiLCJycmV0dXJuIiwicnNwYWNlcyIsInZhbEhvb2tzIiwib3B0aW9uU2V0IiwicmZvY3VzTW9ycGgiLCJvbmx5SGFuZGxlcnMiLCJidWJibGVUeXBlIiwib250eXBlIiwiZXZlbnRQYXRoIiwiaXNUcmlnZ2VyIiwicGFyZW50V2luZG93Iiwic2ltdWxhdGUiLCJmbk92ZXIiLCJmbk91dCIsImZvY3VzaW4iLCJhdHRhY2hlcyIsIm5vbmNlIiwicnF1ZXJ5IiwicGFyc2VYTUwiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJyaGFzaCIsInJ0cyIsInJoZWFkZXJzIiwicm5vQ29udGVudCIsInJwcm90b2NvbCIsInRyYW5zcG9ydHMiLCJhbGxUeXBlcyIsIm9yaWdpbkFuY2hvciIsImFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsInN0cnVjdHVyZSIsImRhdGFUeXBlRXhwcmVzc2lvbiIsImRhdGFUeXBlcyIsImluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwianFYSFIiLCJpbnNwZWN0ZWQiLCJzZWVraW5nVHJhbnNwb3J0IiwiaW5zcGVjdCIsInByZWZpbHRlck9yRmFjdG9yeSIsImRhdGFUeXBlT3JUcmFuc3BvcnQiLCJhamF4RXh0ZW5kIiwiZmxhdE9wdGlvbnMiLCJhamF4U2V0dGluZ3MiLCJsYXN0TW9kaWZpZWQiLCJldGFnIiwiaXNMb2NhbCIsImFzeW5jIiwiYWNjZXB0cyIsImpzb24iLCJyZXNwb25zZUZpZWxkcyIsImNvbnZlcnRlcnMiLCJhamF4U2V0dXAiLCJzZXR0aW5ncyIsImFqYXhQcmVmaWx0ZXIiLCJhamF4VHJhbnNwb3J0IiwidHJhbnNwb3J0IiwiY2FjaGVVUkwiLCJyZXNwb25zZUhlYWRlcnNTdHJpbmciLCJyZXNwb25zZUhlYWRlcnMiLCJ0aW1lb3V0VGltZXIiLCJ1cmxBbmNob3IiLCJmaXJlR2xvYmFscyIsImNhbGxiYWNrQ29udGV4dCIsImdsb2JhbEV2ZW50Q29udGV4dCIsImNvbXBsZXRlRGVmZXJyZWQiLCJzdGF0dXNDb2RlIiwicmVxdWVzdEhlYWRlcnMiLCJyZXF1ZXN0SGVhZGVyc05hbWVzIiwic3RyQWJvcnQiLCJnZXRSZXNwb25zZUhlYWRlciIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsImxuYW1lIiwib3ZlcnJpZGVNaW1lVHlwZSIsIm1pbWVUeXBlIiwiYWJvcnQiLCJzdGF0dXNUZXh0IiwiZmluYWxUZXh0IiwiY3Jvc3NEb21haW4iLCJ0cmFkaXRpb25hbCIsImlmTW9kaWZpZWQiLCJoZWFkZXJzIiwibmF0aXZlU3RhdHVzVGV4dCIsInJlc3BvbnNlcyIsImlzU3VjY2VzcyIsInJlc3BvbnNlIiwibW9kaWZpZWQiLCJjdCIsImZpbmFsRGF0YVR5cGUiLCJmaXJzdERhdGFUeXBlIiwiYWpheEhhbmRsZVJlc3BvbnNlcyIsImNvbnYyIiwiY29udiIsImRhdGFGaWx0ZXIiLCJ0aHJvd3MiLCJhamF4Q29udmVydCIsImdldEpTT04iLCJnZXRTY3JpcHQiLCJ3cmFwQWxsIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJ3cmFwSW5uZXIiLCJ1bndyYXAiLCJ2aXNpYmxlIiwiZ2V0Q2xpZW50UmVjdHMiLCJyMjAiLCJyYnJhY2tldCIsInJDUkxGIiwicnN1Ym1pdHRlclR5cGVzIiwicnN1Ym1pdHRhYmxlIiwiYnVpbGRQYXJhbXMiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVBcnJheSIsInhoclN1Y2Nlc3NTdGF0dXMiLCIwIiwiMTIyMyIsInhoclN1cHBvcnRlZCIsImNvcnMiLCJlcnJvckNhbGxiYWNrIiwidXNlcm5hbWUiLCJ4aHJGaWVsZHMiLCJvbmFib3J0IiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VUZXh0IiwiYmluYXJ5Iiwic2NyaXB0Q2hhcnNldCIsImV2dCIsIm9sZENhbGxiYWNrcyIsInJqc29ucCIsImpzb25wIiwianNvbnBDYWxsYmFjayIsIm9yaWdpbmFsU2V0dGluZ3MiLCJjYWxsYmFja05hbWUiLCJvdmVyd3JpdHRlbiIsInJlc3BvbnNlQ29udGFpbmVyIiwianNvblByb3AiLCJrZWVwU2NyaXB0cyIsInBhcnNlZCIsIl9sb2FkIiwiZ2V0V2luZG93IiwiYW5pbWF0ZWQiLCJjdXJQb3NpdGlvbiIsImN1ckxlZnQiLCJjdXJDU1NUb3AiLCJjdXJUb3AiLCJjdXJPZmZzZXQiLCJjdXJDU1NMZWZ0IiwiY3VyRWxlbSIsIndpbiIsImJveCIsInBhZ2VZT2Zmc2V0IiwicGFnZVhPZmZzZXQiLCJwYXJlbnRPZmZzZXQiLCJzY3JvbGxUbyIsIkhlaWdodCIsIldpZHRoIiwiZGVmYXVsdEV4dHJhIiwiZnVuY05hbWUiLCJ1bmRlbGVnYXRlIiwic2l6ZSIsImFuZFNlbGYiLCJfalF1ZXJ5IiwiXyQiLCJjYWNoZWRTZXRUaW1lb3V0IiwiY2FjaGVkQ2xlYXJUaW1lb3V0IiwiZGVmYXVsdFNldFRpbW91dCIsImRlZmF1bHRDbGVhclRpbWVvdXQiLCJydW5UaW1lb3V0IiwiZnVuIiwiY3VycmVudFF1ZXVlIiwiZHJhaW5pbmciLCJxdWV1ZUluZGV4IiwiY2xlYW5VcE5leHRUaWNrIiwiZHJhaW5RdWV1ZSIsIm1hcmtlciIsInJ1bkNsZWFyVGltZW91dCIsIkl0ZW0iLCJicm93c2VyIiwiZW52IiwiYXJndiIsInZlcnNpb25zIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJlbWl0IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImJpbmRpbmciLCJjd2QiLCJjaGRpciIsInVtYXNrIiwicHJldmlvdXNVbmRlcnNjb3JlIiwiYnJlYWtlciIsIkFycmF5UHJvdG8iLCJPYmpQcm90byIsIkZ1bmNQcm90byIsIm5hdGl2ZUZvckVhY2giLCJmb3JFYWNoIiwibmF0aXZlTWFwIiwibmF0aXZlUmVkdWNlIiwicmVkdWNlIiwibmF0aXZlUmVkdWNlUmlnaHQiLCJyZWR1Y2VSaWdodCIsIm5hdGl2ZUZpbHRlciIsIm5hdGl2ZUV2ZXJ5IiwiZXZlcnkiLCJuYXRpdmVTb21lIiwic29tZSIsIm5hdGl2ZUluZGV4T2YiLCJuYXRpdmVMYXN0SW5kZXhPZiIsIm5hdGl2ZUlzQXJyYXkiLCJuYXRpdmVLZXlzIiwibmF0aXZlQmluZCIsIl93cmFwcGVkIiwiY29sbGVjdCIsInJlZHVjZUVycm9yIiwiZm9sZGwiLCJpbmplY3QiLCJtZW1vIiwiZm9sZHIiLCJkZXRlY3QiLCJpZGVudGl0eSIsImluY2x1ZGUiLCJpc0Z1bmMiLCJJbmZpbml0eSIsInNodWZmbGUiLCJyYW5kIiwic2h1ZmZsZWQiLCJsb29rdXBJdGVyYXRvciIsImNyaXRlcmlhIiwiZ3JvdXAiLCJiZWhhdmlvciIsImdyb3VwQnkiLCJjb3VudEJ5IiwibG93IiwibWlkIiwidGFrZSIsImd1YXJkIiwidGFpbCIsImRyb3AiLCJjb21wYWN0IiwiZmxhdHRlbiIsInNoYWxsb3ciLCJvdXRwdXQiLCJpc0FyZ3VtZW50cyIsIndpdGhvdXQiLCJkaWZmZXJlbmNlIiwidW5pcSIsImlzU29ydGVkIiwic2VlbiIsInVuaW9uIiwiaW50ZXJzZWN0aW9uIiwib3RoZXIiLCJ6aXAiLCJmcm9tIiwiaGFzSW5kZXgiLCJyYW5nZSIsImNlaWwiLCJjdG9yIiwiYm91bmQiLCJwYXJ0aWFsIiwiZnVuY3MiLCJtZW1vaXplIiwiaGFzaGVyIiwidGhyb3R0bGUiLCJsYXRlciIsImxlYWRpbmciLCJ0cmFpbGluZyIsImRlYm91bmNlIiwiaW1tZWRpYXRlIiwiY2FsbE5vdyIsInJhbiIsIndyYXBwZXIiLCJjb21wb3NlIiwidGltZXMiLCJwYWlycyIsImZ1bmN0aW9ucyIsIm1ldGhvZHMiLCJvbWl0IiwidGFwIiwiaW50ZXJjZXB0b3IiLCJhU3RhY2siLCJiU3RhY2siLCJtdWx0aWxpbmUiLCJpZ25vcmVDYXNlIiwiYUN0b3IiLCJiQ3RvciIsImlzRWxlbWVudCIsImlzTnVtYmVyIiwiaXNCb29sZWFuIiwiaXNOdWxsIiwiaXNVbmRlZmluZWQiLCJhY2N1bSIsImVudGl0eU1hcCIsImVudGl0eVJlZ2V4ZXMiLCJtaXhpbiIsImlkQ291bnRlciIsInRlbXBsYXRlU2V0dGluZ3MiLCJldmFsdWF0ZSIsImludGVycG9sYXRlIiwibm9NYXRjaCIsImVzY2FwZXMiLCJlc2NhcGVyIiwidmFyaWFibGUiLCJjaGFpbiIsIl9jaGFpbiIsIl9fd2VicGFja19hbWRfb3B0aW9uc19fIiwid2VicGFja1BvbHlmaWxsIiwiZGVwcmVjYXRlIiwicGF0aHMiXSwibWFwcGluZ3MiOiJhQUNFLFNBQVNBLEVBQXFCQyxHQVE3QixJQVBBLElBTUlDLEVBQVVDLEVBTlZDLEVBQVdILEVBQUssR0FDaEJJLEVBQWNKLEVBQUssR0FDbkJLLEVBQWlCTCxFQUFLLEdBSUhNLEVBQUksRUFBR0MsRUFBVyxHQUNwQ0QsRUFBSUgsRUFBU0ssT0FBUUYsSUFDekJKLEVBQVVDLEVBQVNHLEdBQ2hCRyxFQUFnQlAsSUFDbEJLLEVBQVNHLEtBQUtELEVBQWdCUCxHQUFTLElBRXhDTyxFQUFnQlAsR0FBVyxFQUU1QixJQUFJRCxLQUFZRyxFQUNaTyxPQUFPQyxVQUFVQyxlQUFlQyxLQUFLVixFQUFhSCxLQUNwRGMsRUFBUWQsR0FBWUcsRUFBWUgsSUFLbEMsSUFGR2UsR0FB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U3FqQyxFQUFXM25FLEdBQ3hCeWlDLEVBQUU1bEMsVUFBVW1ELEdBQVEsV0FDbEIsT0FBTzFDLEVBQU9QLEtBQUswSCxLQUFNNi9CLEVBQU9sbkMsTUFBTXFILEtBQUtza0UsU0FBVWhoRSxnQkFJekQwNkIsRUFBRTVXLE9BQU80VyxFQUFFNWxDLFVBQVcsQ0FHcEI2eEUsTUFBTyxXQUVMLE9BREFqcUUsS0FBS2txRSxRQUFTLEVBQ1BscUUsTUFJVHZELE1BQU8sV0FDTCxPQUFPdUQsS0FBS3NrRSxjQUtmaHNFLEtBQUswSCxPLCtEQzd0Q1IsWUFDQXpHLEVBQU9ELFFBQVU2d0UsSSx3RUNEakIsSUFBSWxzRSxFQUdKQSxFQUFJLFdBQ0gsT0FBTytCLEtBREosR0FJSixJQUVDL0IsRUFBSUEsR0FBSyxJQUFJNHdDLFNBQVMsY0FBYixHQUNSLE1BQU9wMUMsR0FFYyxpQkFBWCtELFNBQXFCUyxFQUFJVCxRQU9yQ2pFLEVBQU9ELFFBQVUyRSxHLHlEQ25CakIxRSxFQUFPRCxRQUFVLFNBQVNDLEdBb0J6QixPQW5CS0EsRUFBTzZ3RSxrQkFDWDd3RSxFQUFPOHdFLFVBQVksYUFDbkI5d0UsRUFBTyt3RSxNQUFRLEdBRVYvd0UsRUFBTytNLFdBQVUvTSxFQUFPK00sU0FBVyxJQUN4Q25PLE9BQU9nRSxlQUFlNUMsRUFBUSxTQUFVLENBQ3ZDNkMsWUFBWSxFQUNaQyxJQUFLLFdBQ0osT0FBTzlDLEVBQU9DLEtBR2hCckIsT0FBT2dFLGVBQWU1QyxFQUFRLEtBQU0sQ0FDbkM2QyxZQUFZLEVBQ1pDLElBQUssV0FDSixPQUFPOUMsRUFBT3pCLEtBR2hCeUIsRUFBTzZ3RSxnQkFBa0IsR0FFbkI3d0UsSSIsImZpbGUiOiJpbmZyYXN0cnVjdHVyZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIGluc3RhbGwgYSBKU09OUCBjYWxsYmFjayBmb3IgY2h1bmsgbG9hZGluZ1xuIFx0ZnVuY3Rpb24gd2VicGFja0pzb25wQ2FsbGJhY2soZGF0YSkge1xuIFx0XHR2YXIgY2h1bmtJZHMgPSBkYXRhWzBdO1xuIFx0XHR2YXIgbW9yZU1vZHVsZXMgPSBkYXRhWzFdO1xuIFx0XHR2YXIgZXhlY3V0ZU1vZHVsZXMgPSBkYXRhWzJdO1xuXG4gXHRcdC8vIGFkZCBcIm1vcmVNb2R1bGVzXCIgdG8gdGhlIG1vZHVsZXMgb2JqZWN0LFxuIFx0XHQvLyB0aGVuIGZsYWcgYWxsIFwiY2h1bmtJZHNcIiBhcyBsb2FkZWQgYW5kIGZpcmUgY2FsbGJhY2tcbiBcdFx0dmFyIG1vZHVsZUlkLCBjaHVua0lkLCBpID0gMCwgcmVzb2x2ZXMgPSBbXTtcbiBcdFx0Zm9yKDtpIDwgY2h1bmtJZHMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRjaHVua0lkID0gY2h1bmtJZHNbaV07XG4gXHRcdFx0aWYoaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdKSB7XG4gXHRcdFx0XHRyZXNvbHZlcy5wdXNoKGluc3RhbGxlZENodW5rc1tjaHVua0lkXVswXSk7XG4gXHRcdFx0fVxuIFx0XHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IDA7XG4gXHRcdH1cbiBcdFx0Zm9yKG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG4gXHRcdFx0aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcbiBcdFx0XHRcdG1vZHVsZXNbbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRpZihwYXJlbnRKc29ucEZ1bmN0aW9uKSBwYXJlbnRKc29ucEZ1bmN0aW9uKGRhdGEpO1xuXG4gXHRcdHdoaWxlKHJlc29sdmVzLmxlbmd0aCkge1xuIFx0XHRcdHJlc29sdmVzLnNoaWZ0KCkoKTtcbiBcdFx0fVxuXG4gXHRcdC8vIGFkZCBlbnRyeSBtb2R1bGVzIGZyb20gbG9hZGVkIGNodW5rIHRvIGRlZmVycmVkIGxpc3RcbiBcdFx0ZGVmZXJyZWRNb2R1bGVzLnB1c2guYXBwbHkoZGVmZXJyZWRNb2R1bGVzLCBleGVjdXRlTW9kdWxlcyB8fCBbXSk7XG5cbiBcdFx0Ly8gcnVuIGRlZmVycmVkIG1vZHVsZXMgd2hlbiBhbGwgY2h1bmtzIHJlYWR5XG4gXHRcdHJldHVybiBjaGVja0RlZmVycmVkTW9kdWxlcygpO1xuIFx0fTtcbiBcdGZ1bmN0aW9uIGNoZWNrRGVmZXJyZWRNb2R1bGVzKCkge1xuIFx0XHR2YXIgcmVzdWx0O1xuIFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGVmZXJyZWRNb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0dmFyIGRlZmVycmVkTW9kdWxlID0gZGVmZXJyZWRNb2R1bGVzW2ldO1xuIFx0XHRcdHZhciBmdWxmaWxsZWQgPSB0cnVlO1xuIFx0XHRcdGZvcih2YXIgaiA9IDE7IGogPCBkZWZlcnJlZE1vZHVsZS5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0dmFyIGRlcElkID0gZGVmZXJyZWRNb2R1bGVbal07XG4gXHRcdFx0XHRpZihpbnN0YWxsZWRDaHVua3NbZGVwSWRdICE9PSAwKSBmdWxmaWxsZWQgPSBmYWxzZTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYoZnVsZmlsbGVkKSB7XG4gXHRcdFx0XHRkZWZlcnJlZE1vZHVsZXMuc3BsaWNlKGktLSwgMSk7XG4gXHRcdFx0XHRyZXN1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IGRlZmVycmVkTW9kdWxlWzBdKTtcbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHRyZXR1cm4gcmVzdWx0O1xuIFx0fVxuXG4gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuIFx0Ly8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4gXHQvLyBQcm9taXNlID0gY2h1bmsgbG9hZGluZywgMCA9IGNodW5rIGxvYWRlZFxuIFx0dmFyIGluc3RhbGxlZENodW5rcyA9IHtcbiBcdFx0XCJpbmZyYXN0cnVjdHVyZVwiOiAwXG4gXHR9O1xuXG4gXHR2YXIgZGVmZXJyZWRNb2R1bGVzID0gW107XG5cbiBcdC8vIHNjcmlwdCBwYXRoIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBqc29ucFNjcmlwdFNyYyhjaHVua0lkKSB7XG4gXHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLnAgKyBcIlwiICsgKHt9W2NodW5rSWRdfHxjaHVua0lkKSArIFwiLmJ1bmRsZS42LjI0LjAuanNcIlxuIFx0fVxuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cbiBcdC8vIFRoaXMgZmlsZSBjb250YWlucyBvbmx5IHRoZSBlbnRyeSBjaHVuay5cbiBcdC8vIFRoZSBjaHVuayBsb2FkaW5nIGZ1bmN0aW9uIGZvciBhZGRpdGlvbmFsIGNodW5rc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5lID0gZnVuY3Rpb24gcmVxdWlyZUVuc3VyZShjaHVua0lkKSB7XG4gXHRcdHZhciBwcm9taXNlcyA9IFtdO1xuXG5cbiBcdFx0Ly8gSlNPTlAgY2h1bmsgbG9hZGluZyBmb3IgamF2YXNjcmlwdFxuXG4gXHRcdHZhciBpbnN0YWxsZWRDaHVua0RhdGEgPSBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF07XG4gXHRcdGlmKGluc3RhbGxlZENodW5rRGF0YSAhPT0gMCkgeyAvLyAwIG1lYW5zIFwiYWxyZWFkeSBpbnN0YWxsZWRcIi5cblxuIFx0XHRcdC8vIGEgUHJvbWlzZSBtZWFucyBcImN1cnJlbnRseSBsb2FkaW5nXCIuXG4gXHRcdFx0aWYoaW5zdGFsbGVkQ2h1bmtEYXRhKSB7XG4gXHRcdFx0XHRwcm9taXNlcy5wdXNoKGluc3RhbGxlZENodW5rRGF0YVsyXSk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdC8vIHNldHVwIFByb21pc2UgaW4gY2h1bmsgY2FjaGVcbiBcdFx0XHRcdHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gXHRcdFx0XHRcdGluc3RhbGxlZENodW5rRGF0YSA9IGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuIFx0XHRcdFx0fSk7XG4gXHRcdFx0XHRwcm9taXNlcy5wdXNoKGluc3RhbGxlZENodW5rRGF0YVsyXSA9IHByb21pc2UpO1xuXG4gXHRcdFx0XHQvLyBzdGFydCBjaHVuayBsb2FkaW5nXG4gXHRcdFx0XHR2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gXHRcdFx0XHR2YXIgb25TY3JpcHRDb21wbGV0ZTtcblxuIFx0XHRcdFx0c2NyaXB0LmNoYXJzZXQgPSAndXRmLTgnO1xuIFx0XHRcdFx0c2NyaXB0LnRpbWVvdXQgPSAxMjA7XG4gXHRcdFx0XHRpZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5uYykge1xuIFx0XHRcdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgX193ZWJwYWNrX3JlcXVpcmVfXy5uYyk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRzY3JpcHQuc3JjID0ganNvbnBTY3JpcHRTcmMoY2h1bmtJZCk7XG5cbiBcdFx0XHRcdC8vIGNyZWF0ZSBlcnJvciBiZWZvcmUgc3RhY2sgdW53b3VuZCB0byBnZXQgdXNlZnVsIHN0YWNrdHJhY2UgbGF0ZXJcbiBcdFx0XHRcdHZhciBlcnJvciA9IG5ldyBFcnJvcigpO1xuIFx0XHRcdFx0b25TY3JpcHRDb21wbGV0ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuIFx0XHRcdFx0XHQvLyBhdm9pZCBtZW0gbGVha3MgaW4gSUUuXG4gXHRcdFx0XHRcdHNjcmlwdC5vbmVycm9yID0gc2NyaXB0Lm9ubG9hZCA9IG51bGw7XG4gXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiBcdFx0XHRcdFx0dmFyIGNodW5rID0gaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdO1xuIFx0XHRcdFx0XHRpZihjaHVuayAhPT0gMCkge1xuIFx0XHRcdFx0XHRcdGlmKGNodW5rKSB7XG4gXHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JUeXBlID0gZXZlbnQgJiYgKGV2ZW50LnR5cGUgPT09ICdsb2FkJyA/ICdtaXNzaW5nJyA6IGV2ZW50LnR5cGUpO1xuIFx0XHRcdFx0XHRcdFx0dmFyIHJlYWxTcmMgPSBldmVudCAmJiBldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LnNyYztcbiBcdFx0XHRcdFx0XHRcdGVycm9yLm1lc3NhZ2UgPSAnTG9hZGluZyBjaHVuayAnICsgY2h1bmtJZCArICcgZmFpbGVkLlxcbignICsgZXJyb3JUeXBlICsgJzogJyArIHJlYWxTcmMgKyAnKSc7XG4gXHRcdFx0XHRcdFx0XHRlcnJvci5uYW1lID0gJ0NodW5rTG9hZEVycm9yJztcbiBcdFx0XHRcdFx0XHRcdGVycm9yLnR5cGUgPSBlcnJvclR5cGU7XG4gXHRcdFx0XHRcdFx0XHRlcnJvci5yZXF1ZXN0ID0gcmVhbFNyYztcbiBcdFx0XHRcdFx0XHRcdGNodW5rWzFdKGVycm9yKTtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gdW5kZWZpbmVkO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9O1xuIFx0XHRcdFx0dmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gXHRcdFx0XHRcdG9uU2NyaXB0Q29tcGxldGUoeyB0eXBlOiAndGltZW91dCcsIHRhcmdldDogc2NyaXB0IH0pO1xuIFx0XHRcdFx0fSwgMTIwMDAwKTtcbiBcdFx0XHRcdHNjcmlwdC5vbmVycm9yID0gc2NyaXB0Lm9ubG9hZCA9IG9uU2NyaXB0Q29tcGxldGU7XG4gXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gXHR9O1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2FwcC9cIjtcblxuIFx0Ly8gb24gZXJyb3IgZnVuY3Rpb24gZm9yIGFzeW5jIGxvYWRpbmdcbiBcdF9fd2VicGFja19yZXF1aXJlX18ub2UgPSBmdW5jdGlvbihlcnIpIHsgY29uc29sZS5lcnJvcihlcnIpOyB0aHJvdyBlcnI7IH07XG5cbiBcdHZhciBqc29ucEFycmF5ID0gd2luZG93W1wid2VicGFja0pzb25wXCJdID0gd2luZG93W1wid2VicGFja0pzb25wXCJdIHx8IFtdO1xuIFx0dmFyIG9sZEpzb25wRnVuY3Rpb24gPSBqc29ucEFycmF5LnB1c2guYmluZChqc29ucEFycmF5KTtcbiBcdGpzb25wQXJyYXkucHVzaCA9IHdlYnBhY2tKc29ucENhbGxiYWNrO1xuIFx0anNvbnBBcnJheSA9IGpzb25wQXJyYXkuc2xpY2UoKTtcbiBcdGZvcih2YXIgaSA9IDA7IGkgPCBqc29ucEFycmF5Lmxlbmd0aDsgaSsrKSB3ZWJwYWNrSnNvbnBDYWxsYmFjayhqc29ucEFycmF5W2ldKTtcbiBcdHZhciBwYXJlbnRKc29ucEZ1bmN0aW9uID0gb2xkSnNvbnBGdW5jdGlvbjtcblxuXG4gXHQvLyBhZGQgZW50cnkgbW9kdWxlIHRvIGRlZmVycmVkIGxpc3RcbiBcdGRlZmVycmVkTW9kdWxlcy5wdXNoKFswXSk7XG4gXHQvLyBydW4gZGVmZXJyZWQgbW9kdWxlcyB3aGVuIHJlYWR5XG4gXHRyZXR1cm4gY2hlY2tEZWZlcnJlZE1vZHVsZXMoKTtcbiIsIlwib2JqZWN0XCIhPXR5cGVvZiBKU09OMiYmXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdy5KU09OJiZ3aW5kb3cuSlNPTi5zdHJpbmdpZnkmJndpbmRvdy5KU09OLnBhcnNlP0pTT04yPXdpbmRvdy5KU09OOiFmdW5jdGlvbigpe3ZhciBhPXt9OyhmdW5jdGlvbigpe2Z1bmN0aW9uIGcoYSxiKXtmdW5jdGlvbiB0KGEpe2lmKHRbYV0hPT1yKXJldHVybiB0W2FdO3ZhciBjO2lmKFwiYnVnLXN0cmluZy1jaGFyLWluZGV4XCI9PWEpYz1cImFcIiE9XCJhXCJbMF07ZWxzZSBpZihcImpzb25cIj09YSljPXQoXCJqc29uLXN0cmluZ2lmeVwiKSYmdChcImpzb24tcGFyc2VcIik7ZWxzZXt2YXIgZSxnPSd7XCJhXCI6WzEsdHJ1ZSxmYWxzZSxudWxsLFwiXFxcXHUwMDAwXFxcXGJcXFxcblxcXFxmXFxcXHJcXFxcdFwiXX0nO2lmKFwianNvbi1zdHJpbmdpZnlcIj09YSl7dmFyIGg9Yi5zdHJpbmdpZnksaj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBoJiZzO2lmKGopeyhlPWZ1bmN0aW9uKCl7cmV0dXJuIDF9KS50b0pTT049ZTt0cnl7aj1cIjBcIj09PWgoMCkmJlwiMFwiPT09aChuZXcgZCkmJidcIlwiJz09aChuZXcgZikmJmgobyk9PT1yJiZoKHIpPT09ciYmaCgpPT09ciYmXCIxXCI9PT1oKGUpJiZcIlsxXVwiPT1oKFtlXSkmJlwiW251bGxdXCI9PWgoW3JdKSYmXCJudWxsXCI9PWgobnVsbCkmJlwiW251bGwsbnVsbCxudWxsXVwiPT1oKFtyLG8sbnVsbF0pJiZoKHthOltlLCEwLCExLG51bGwsXCJcXDBcXGJcXG5cXGZcXHJcXHRcIl19KT09ZyYmXCIxXCI9PT1oKG51bGwsZSkmJlwiW1xcbiAxLFxcbiAyXFxuXVwiPT1oKFsxLDJdLG51bGwsMSkmJidcIi0yNzE4MjEtMDQtMjBUMDA6MDA6MDAuMDAwWlwiJz09aChuZXcgaSgoLTg2NGUxMykpKSYmJ1wiKzI3NTc2MC0wOS0xM1QwMDowMDowMC4wMDBaXCInPT1oKG5ldyBpKDg2NGUxMykpJiYnXCItMDAwMDAxLTAxLTAxVDAwOjAwOjAwLjAwMFpcIic9PWgobmV3IGkoKC02MjE5ODc1NTJlNSkpKSYmJ1wiMTk2OS0xMi0zMVQyMzo1OTo1OS45OTlaXCInPT1oKG5ldyBpKCgtMSkpKX1jYXRjaChhKXtqPSExfX1jPWp9aWYoXCJqc29uLXBhcnNlXCI9PWEpe3ZhciBrPWIucGFyc2U7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygayl0cnl7aWYoMD09PWsoXCIwXCIpJiYhayghMSkpe2U9ayhnKTt2YXIgbD01PT1lLmEubGVuZ3RoJiYxPT09ZS5hWzBdO2lmKGwpe3RyeXtsPSFrKCdcIlxcdFwiJyl9Y2F0Y2goYSl7fWlmKGwpdHJ5e2w9MSE9PWsoXCIwMVwiKX1jYXRjaChhKXt9aWYobCl0cnl7bD0xIT09ayhcIjEuXCIpfWNhdGNoKGEpe319fX1jYXRjaChhKXtsPSExfWM9bH19cmV0dXJuIHRbYV09ISFjfWF8fChhPWUuT2JqZWN0KCkpLGJ8fChiPWUuT2JqZWN0KCkpO3ZhciBkPWEuTnVtYmVyfHxlLk51bWJlcixmPWEuU3RyaW5nfHxlLlN0cmluZyxoPWEuT2JqZWN0fHxlLk9iamVjdCxpPWEuRGF0ZXx8ZS5EYXRlLGo9YS5TeW50YXhFcnJvcnx8ZS5TeW50YXhFcnJvcixrPWEuVHlwZUVycm9yfHxlLlR5cGVFcnJvcixsPWEuTWF0aHx8ZS5NYXRoLG09YS5KU09OfHxlLkpTT047XCJvYmplY3RcIj09dHlwZW9mIG0mJm0mJihiLnN0cmluZ2lmeT1tLnN0cmluZ2lmeSxiLnBhcnNlPW0ucGFyc2UpO3ZhciBwLHEscixuPWgucHJvdG90eXBlLG89bi50b1N0cmluZyxzPW5ldyBpKCgtMHhjNzgyYjViODAwY2VjKSk7dHJ5e3M9cy5nZXRVVENGdWxsWWVhcigpPT0tMTA5MjUyJiYwPT09cy5nZXRVVENNb250aCgpJiYxPT09cy5nZXRVVENEYXRlKCkmJjEwPT1zLmdldFVUQ0hvdXJzKCkmJjM3PT1zLmdldFVUQ01pbnV0ZXMoKSYmNj09cy5nZXRVVENTZWNvbmRzKCkmJjcwOD09cy5nZXRVVENNaWxsaXNlY29uZHMoKX1jYXRjaChhKXt9aWYoIXQoXCJqc29uXCIpKXt2YXIgdT1cIltvYmplY3QgRnVuY3Rpb25dXCIsdj1cIltvYmplY3QgRGF0ZV1cIix3PVwiW29iamVjdCBOdW1iZXJdXCIseD1cIltvYmplY3QgU3RyaW5nXVwiLHk9XCJbb2JqZWN0IEFycmF5XVwiLHo9XCJbb2JqZWN0IEJvb2xlYW5dXCIsQT10KFwiYnVnLXN0cmluZy1jaGFyLWluZGV4XCIpO2lmKCFzKXZhciBCPWwuZmxvb3IsQz1bMCwzMSw1OSw5MCwxMjAsMTUxLDE4MSwyMTIsMjQzLDI3MywzMDQsMzM0XSxEPWZ1bmN0aW9uKGEsYil7cmV0dXJuIENbYl0rMzY1KihhLTE5NzApK0IoKGEtMTk2OSsoYj0rKGI+MSkpKS80KS1CKChhLTE5MDErYikvMTAwKStCKChhLTE2MDErYikvNDAwKX07aWYoKHA9bi5oYXNPd25Qcm9wZXJ0eSl8fChwPWZ1bmN0aW9uKGEpe3ZhciBjLGI9e307cmV0dXJuKGIuX19wcm90b19fPW51bGwsYi5fX3Byb3RvX189e3RvU3RyaW5nOjF9LGIpLnRvU3RyaW5nIT1vP3A9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fX3Byb3RvX18sYz1hIGluKHRoaXMuX19wcm90b19fPW51bGwsdGhpcyk7cmV0dXJuIHRoaXMuX19wcm90b19fPWIsY306KGM9Yi5jb25zdHJ1Y3RvcixwPWZ1bmN0aW9uKGEpe3ZhciBiPSh0aGlzLmNvbnN0cnVjdG9yfHxjKS5wcm90b3R5cGU7cmV0dXJuIGEgaW4gdGhpcyYmIShhIGluIGImJnRoaXNbYV09PT1iW2FdKX0pLGI9bnVsbCxwLmNhbGwodGhpcyxhKX0pLHE9ZnVuY3Rpb24oYSxiKXt2YXIgZSxmLGcsZD0wOyhlPWZ1bmN0aW9uKCl7dGhpcy52YWx1ZU9mPTB9KS5wcm90b3R5cGUudmFsdWVPZj0wLGY9bmV3IGU7Zm9yKGcgaW4gZilwLmNhbGwoZixnKSYmZCsrO3JldHVybiBlPWY9bnVsbCxkP3E9Mj09ZD9mdW5jdGlvbihhLGIpe3ZhciBlLGM9e30sZD1vLmNhbGwoYSk9PXU7Zm9yKGUgaW4gYSlkJiZcInByb3RvdHlwZVwiPT1lfHxwLmNhbGwoYyxlKXx8IShjW2VdPTEpfHwhcC5jYWxsKGEsZSl8fGIoZSl9OmZ1bmN0aW9uKGEsYil7dmFyIGQsZSxjPW8uY2FsbChhKT09dTtmb3IoZCBpbiBhKWMmJlwicHJvdG90eXBlXCI9PWR8fCFwLmNhbGwoYSxkKXx8KGU9XCJjb25zdHJ1Y3RvclwiPT09ZCl8fGIoZCk7KGV8fHAuY2FsbChhLGQ9XCJjb25zdHJ1Y3RvclwiKSkmJmIoZCl9OihmPVtcInZhbHVlT2ZcIixcInRvU3RyaW5nXCIsXCJ0b0xvY2FsZVN0cmluZ1wiLFwicHJvcGVydHlJc0VudW1lcmFibGVcIixcImlzUHJvdG90eXBlT2ZcIixcImhhc093blByb3BlcnR5XCIsXCJjb25zdHJ1Y3RvclwiXSxxPWZ1bmN0aW9uKGEsYil7dmFyIGUsZyxkPW8uY2FsbChhKT09dSxoPSFkJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBhLmNvbnN0cnVjdG9yJiZjW3R5cGVvZiBhLmhhc093blByb3BlcnR5XSYmYS5oYXNPd25Qcm9wZXJ0eXx8cDtmb3IoZSBpbiBhKWQmJlwicHJvdG90eXBlXCI9PWV8fCFoLmNhbGwoYSxlKXx8YihlKTtmb3IoZz1mLmxlbmd0aDtlPWZbLS1nXTtoLmNhbGwoYSxlKSYmYihlKSk7fSkscShhLGIpfSwhdChcImpzb24tc3RyaW5naWZ5XCIpKXt2YXIgRT17OTI6XCJcXFxcXFxcXFwiLDM0OidcXFxcXCInLDg6XCJcXFxcYlwiLDEyOlwiXFxcXGZcIiwxMDpcIlxcXFxuXCIsMTM6XCJcXFxcclwiLDk6XCJcXFxcdFwifSxGPVwiMDAwMDAwXCIsRz1mdW5jdGlvbihhLGIpe3JldHVybihGKyhifHwwKSkuc2xpY2UoLWEpfSxIPVwiXFxcXHUwMFwiLEk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSdcIicsYz0wLGQ9YS5sZW5ndGgsZT0hQXx8ZD4xMCxmPWUmJihBP2Euc3BsaXQoXCJcIik6YSk7YzxkO2MrKyl7dmFyIGc9YS5jaGFyQ29kZUF0KGMpO3N3aXRjaChnKXtjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMjpjYXNlIDEzOmNhc2UgMzQ6Y2FzZSA5MjpiKz1FW2ddO2JyZWFrO2RlZmF1bHQ6aWYoZzwzMil7Yis9SCtHKDIsZy50b1N0cmluZygxNikpO2JyZWFrfWIrPWU/ZltjXTphLmNoYXJBdChjKX19cmV0dXJuIGIrJ1wiJ30sSj1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXt2YXIgaCxpLGosbCxtLG4scyx0LHUsQSxDLEUsRixILEssTDt0cnl7aD1iW2FdfWNhdGNoKGEpe31pZihcIm9iamVjdFwiPT10eXBlb2YgaCYmaClpZihpPW8uY2FsbChoKSxpIT12fHxwLmNhbGwoaCxcInRvSlNPTlwiKSlcImZ1bmN0aW9uXCI9PXR5cGVvZiBoLnRvSlNPTiYmKGkhPXcmJmkhPXgmJmkhPXl8fHAuY2FsbChoLFwidG9KU09OXCIpKSYmKGg9aC50b0pTT04oYSkpO2Vsc2UgaWYoaD4tMS8wJiZoPDEvMCl7aWYoRCl7Zm9yKG09QihoLzg2NGU1KSxqPUIobS8zNjUuMjQyNSkrMTk3MC0xO0QoaisxLDApPD1tO2orKyk7Zm9yKGw9QigobS1EKGosMCkpLzMwLjQyKTtEKGosbCsxKTw9bTtsKyspO209MSttLUQoaixsKSxuPShoJTg2NGU1Kzg2NGU1KSU4NjRlNSxzPUIobi8zNmU1KSUyNCx0PUIobi82ZTQpJTYwLHU9QihuLzFlMyklNjAsQT1uJTFlM31lbHNlIGo9aC5nZXRVVENGdWxsWWVhcigpLGw9aC5nZXRVVENNb250aCgpLG09aC5nZXRVVENEYXRlKCkscz1oLmdldFVUQ0hvdXJzKCksdD1oLmdldFVUQ01pbnV0ZXMoKSx1PWguZ2V0VVRDU2Vjb25kcygpLEE9aC5nZXRVVENNaWxsaXNlY29uZHMoKTtoPShqPD0wfHxqPj0xZTQ/KGo8MD9cIi1cIjpcIitcIikrRyg2LGo8MD8tajpqKTpHKDQsaikpK1wiLVwiK0coMixsKzEpK1wiLVwiK0coMixtKStcIlRcIitHKDIscykrXCI6XCIrRygyLHQpK1wiOlwiK0coMix1KStcIi5cIitHKDMsQSkrXCJaXCJ9ZWxzZSBoPW51bGw7aWYoYyYmKGg9Yy5jYWxsKGIsYSxoKSksbnVsbD09PWgpcmV0dXJuXCJudWxsXCI7aWYoaT1vLmNhbGwoaCksaT09eilyZXR1cm5cIlwiK2g7aWYoaT09dylyZXR1cm4gaD4tMS8wJiZoPDEvMD9cIlwiK2g6XCJudWxsXCI7aWYoaT09eClyZXR1cm4gSShcIlwiK2gpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBoKXtmb3IoSD1nLmxlbmd0aDtILS07KWlmKGdbSF09PT1oKXRocm93IGsoKTtpZihnLnB1c2goaCksQz1bXSxLPWYsZis9ZSxpPT15KXtmb3IoRj0wLEg9aC5sZW5ndGg7RjxIO0YrKylFPUooRixoLGMsZCxlLGYsZyksQy5wdXNoKEU9PT1yP1wibnVsbFwiOkUpO0w9Qy5sZW5ndGg/ZT9cIltcXG5cIitmK0Muam9pbihcIixcXG5cIitmKStcIlxcblwiK0srXCJdXCI6XCJbXCIrQy5qb2luKFwiLFwiKStcIl1cIjpcIltdXCJ9ZWxzZSBxKGR8fGgsZnVuY3Rpb24oYSl7dmFyIGI9SihhLGgsYyxkLGUsZixnKTtiIT09ciYmQy5wdXNoKEkoYSkrXCI6XCIrKGU/XCIgXCI6XCJcIikrYil9KSxMPUMubGVuZ3RoP2U/XCJ7XFxuXCIrZitDLmpvaW4oXCIsXFxuXCIrZikrXCJcXG5cIitLK1wifVwiOlwie1wiK0Muam9pbihcIixcIikrXCJ9XCI6XCJ7fVwiO3JldHVybiBnLnBvcCgpLEx9fTtiLnN0cmluZ2lmeT1mdW5jdGlvbihhLGIsZCl7dmFyIGUsZixnLGg7aWYoY1t0eXBlb2YgYl0mJmIpaWYoKGg9by5jYWxsKGIpKT09dSlmPWI7ZWxzZSBpZihoPT15KXtnPXt9O2Zvcih2YXIgayxpPTAsaj1iLmxlbmd0aDtpPGo7az1iW2krK10saD1vLmNhbGwoayksKGg9PXh8fGg9PXcpJiYoZ1trXT0xKSk7fWlmKGQpaWYoKGg9by5jYWxsKGQpKT09dyl7aWYoKGQtPWQlMSk+MClmb3IoZT1cIlwiLGQ+MTAmJihkPTEwKTtlLmxlbmd0aDxkO2UrPVwiIFwiKTt9ZWxzZSBoPT14JiYoZT1kLmxlbmd0aDw9MTA/ZDpkLnNsaWNlKDAsMTApKTtyZXR1cm4gSihcIlwiLChrPXt9LGtbXCJcIl09YSxrKSxmLGcsZSxcIlwiLFtdKX19aWYoIXQoXCJqc29uLXBhcnNlXCIpKXt2YXIgTSxOLEs9Zi5mcm9tQ2hhckNvZGUsTD17OTI6XCJcXFxcXCIsMzQ6J1wiJyw0NzpcIi9cIiw5ODpcIlxcYlwiLDExNjpcIlxcdFwiLDExMDpcIlxcblwiLDEwMjpcIlxcZlwiLDExNDpcIlxcclwifSxPPWZ1bmN0aW9uKCl7dGhyb3cgTT1OPW51bGwsaigpfSxQPWZ1bmN0aW9uKCl7Zm9yKHZhciBjLGQsZSxmLGcsYT1OLGI9YS5sZW5ndGg7TTxiOylzd2l0Y2goZz1hLmNoYXJDb2RlQXQoTSkpe2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpNKys7YnJlYWs7Y2FzZSAxMjM6Y2FzZSAxMjU6Y2FzZSA5MTpjYXNlIDkzOmNhc2UgNTg6Y2FzZSA0NDpyZXR1cm4gYz1BP2EuY2hhckF0KE0pOmFbTV0sTSsrLGM7Y2FzZSAzNDpmb3IoYz1cIkBcIixNKys7TTxiOylpZihnPWEuY2hhckNvZGVBdChNKSxnPDMyKU8oKTtlbHNlIGlmKDkyPT1nKXN3aXRjaChnPWEuY2hhckNvZGVBdCgrK00pKXtjYXNlIDkyOmNhc2UgMzQ6Y2FzZSA0NzpjYXNlIDk4OmNhc2UgMTE2OmNhc2UgMTEwOmNhc2UgMTAyOmNhc2UgMTE0OmMrPUxbZ10sTSsrO2JyZWFrO2Nhc2UgMTE3OmZvcihkPSsrTSxlPU0rNDtNPGU7TSsrKWc9YS5jaGFyQ29kZUF0KE0pLGc+PTQ4JiZnPD01N3x8Zz49OTcmJmc8PTEwMnx8Zz49NjUmJmc8PTcwfHxPKCk7Yys9SyhcIjB4XCIrYS5zbGljZShkLE0pKTticmVhaztkZWZhdWx0Ok8oKX1lbHNle2lmKDM0PT1nKWJyZWFrO2ZvcihnPWEuY2hhckNvZGVBdChNKSxkPU07Zz49MzImJjkyIT1nJiYzNCE9ZzspZz1hLmNoYXJDb2RlQXQoKytNKTtjKz1hLnNsaWNlKGQsTSl9aWYoMzQ9PWEuY2hhckNvZGVBdChNKSlyZXR1cm4gTSsrLGM7TygpO2RlZmF1bHQ6aWYoZD1NLDQ1PT1nJiYoZj0hMCxnPWEuY2hhckNvZGVBdCgrK00pKSxnPj00OCYmZzw9NTcpe2Zvcig0OD09ZyYmKGc9YS5jaGFyQ29kZUF0KE0rMSksZz49NDgmJmc8PTU3KSYmTygpLGY9ITE7TTxiJiYoZz1hLmNoYXJDb2RlQXQoTSksZz49NDgmJmc8PTU3KTtNKyspO2lmKDQ2PT1hLmNoYXJDb2RlQXQoTSkpe2ZvcihlPSsrTTtlPGImJihnPWEuY2hhckNvZGVBdChlKSxnPj00OCYmZzw9NTcpO2UrKyk7ZT09TSYmTygpLE09ZX1pZihnPWEuY2hhckNvZGVBdChNKSwxMDE9PWd8fDY5PT1nKXtmb3IoZz1hLmNoYXJDb2RlQXQoKytNKSw0MyE9ZyYmNDUhPWd8fE0rKyxlPU07ZTxiJiYoZz1hLmNoYXJDb2RlQXQoZSksZz49NDgmJmc8PTU3KTtlKyspO2U9PU0mJk8oKSxNPWV9cmV0dXJuK2Euc2xpY2UoZCxNKX1pZihmJiZPKCksXCJ0cnVlXCI9PWEuc2xpY2UoTSxNKzQpKXJldHVybiBNKz00LCEwO2lmKFwiZmFsc2VcIj09YS5zbGljZShNLE0rNSkpcmV0dXJuIE0rPTUsITE7aWYoXCJudWxsXCI9PWEuc2xpY2UoTSxNKzQpKXJldHVybiBNKz00LG51bGw7TygpfXJldHVyblwiJFwifSxRPWZ1bmN0aW9uKGEpe3ZhciBiLGM7aWYoXCIkXCI9PWEmJk8oKSxcInN0cmluZ1wiPT10eXBlb2YgYSl7aWYoXCJAXCI9PShBP2EuY2hhckF0KDApOmFbMF0pKXJldHVybiBhLnNsaWNlKDEpO2lmKFwiW1wiPT1hKXtmb3IoYj1bXTthPVAoKSxcIl1cIiE9YTtjfHwoYz0hMCkpYyYmKFwiLFwiPT1hPyhhPVAoKSxcIl1cIj09YSYmTygpKTpPKCkpLFwiLFwiPT1hJiZPKCksYi5wdXNoKFEoYSkpO3JldHVybiBifWlmKFwie1wiPT1hKXtmb3IoYj17fTthPVAoKSxcIn1cIiE9YTtjfHwoYz0hMCkpYyYmKFwiLFwiPT1hPyhhPVAoKSxcIn1cIj09YSYmTygpKTpPKCkpLFwiLFwiIT1hJiZcInN0cmluZ1wiPT10eXBlb2YgYSYmXCJAXCI9PShBP2EuY2hhckF0KDApOmFbMF0pJiZcIjpcIj09UCgpfHxPKCksYlthLnNsaWNlKDEpXT1RKFAoKSk7cmV0dXJuIGJ9TygpfXJldHVybiBhfSxSPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1TKGEsYixjKTtkPT09cj9kZWxldGUgYVtiXTphW2JdPWR9LFM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlLGQ9YVtiXTtpZihcIm9iamVjdFwiPT10eXBlb2YgZCYmZClpZihvLmNhbGwoZCk9PXkpZm9yKGU9ZC5sZW5ndGg7ZS0tOylSKGQsZSxjKTtlbHNlIHEoZCxmdW5jdGlvbihhKXtSKGQsYSxjKX0pO3JldHVybiBjLmNhbGwoYSxiLGQpfTtiLnBhcnNlPWZ1bmN0aW9uKGEsYil7dmFyIGMsZDtyZXR1cm4gTT0wLE49XCJcIithLGM9UShQKCkpLFwiJFwiIT1QKCkmJk8oKSxNPU49bnVsbCxiJiZvLmNhbGwoYik9PXU/UygoZD17fSxkW1wiXCJdPWMsZCksXCJcIixiKTpjfX19cmV0dXJuIGIucnVuSW5Db250ZXh0PWcsYn12YXIgYj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQsYz17ZnVuY3Rpb246ITAsb2JqZWN0OiEwfSxkPWNbdHlwZW9mIGFdJiZhJiYhYS5ub2RlVHlwZSYmYSxlPWNbdHlwZW9mIHdpbmRvd10mJndpbmRvd3x8dGhpcyxmPWQmJmNbdHlwZW9mIG1vZHVsZV0mJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsO2lmKCFmfHxmLmdsb2JhbCE9PWYmJmYud2luZG93IT09ZiYmZi5zZWxmIT09Znx8KGU9ZiksZCYmIWIpZyhlLGQpO2Vsc2V7dmFyIGg9ZS5KU09OLGk9ZS5KU09OMyxqPSExLGs9ZyhlLGUuSlNPTjM9e25vQ29uZmxpY3Q6ZnVuY3Rpb24oKXtyZXR1cm4ganx8KGo9ITAsZS5KU09OPWgsZS5KU09OMz1pLGg9aT1udWxsKSxrfX0pO2UuSlNPTj17cGFyc2U6ay5wYXJzZSxzdHJpbmdpZnk6ay5zdHJpbmdpZnl9fWImJmRlZmluZShmdW5jdGlvbigpe3JldHVybiBrfSl9KS5jYWxsKHRoaXMpLEpTT04yPWF9KCksXCJvYmplY3RcIiE9dHlwZW9mIF9wYXEmJihfcGFxPVtdKSxcIm9iamVjdFwiIT10eXBlb2YgUGl3aWsmJihQaXdpaz1mdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHNhZmVEZWNvZGVXcmFwcGVyKGEpe3RyeXtyZXR1cm4gZGVjb2RlV3JhcHBlcihhKX1jYXRjaChiKXtyZXR1cm4gdW5lc2NhcGUoYSl9fWZ1bmN0aW9uIGlzRGVmaW5lZChhKXt2YXIgYj10eXBlb2YgYTtyZXR1cm5cInVuZGVmaW5lZFwiIT09Yn1mdW5jdGlvbiBpc0Z1bmN0aW9uKGEpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGF9ZnVuY3Rpb24gaXNPYmplY3QoYSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGF9ZnVuY3Rpb24gaXNTdHJpbmcoYSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGF8fGEgaW5zdGFuY2VvZiBTdHJpbmd9ZnVuY3Rpb24gYXBwbHkoKXt2YXIgYSxiLGM7Zm9yKGE9MDthPGFyZ3VtZW50cy5sZW5ndGg7YSs9MSljPWFyZ3VtZW50c1thXSxiPWMuc2hpZnQoKSxpc1N0cmluZyhiKT9hc3luY1RyYWNrZXJbYl0uYXBwbHkoYXN5bmNUcmFja2VyLGMpOmIuYXBwbHkoYXN5bmNUcmFja2VyLGMpfWZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIoYSxiLGMsZCl7cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcj8oYS5hZGRFdmVudExpc3RlbmVyKGIsYyxkKSwhMCk6YS5hdHRhY2hFdmVudD9hLmF0dGFjaEV2ZW50KFwib25cIitiLGMpOnZvaWQoYVtcIm9uXCIrYl09Yyl9ZnVuY3Rpb24gZXhlY3V0ZVBsdWdpbk1ldGhvZChhLGIpe3ZhciBkLGUsYz1cIlwiO2ZvcihkIGluIHBsdWdpbnMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBsdWdpbnMsZCkmJihlPXBsdWdpbnNbZF1bYV0saXNGdW5jdGlvbihlKSYmKGMrPWUoYikpKTtyZXR1cm4gY31mdW5jdGlvbiBiZWZvcmVVbmxvYWRIYW5kbGVyKCl7dmFyIGE7aWYoZXhlY3V0ZVBsdWdpbk1ldGhvZChcInVubG9hZFwiKSxleHBpcmVEYXRlVGltZSlkbyBhPW5ldyBEYXRlO3doaWxlKGEuZ2V0VGltZUFsaWFzKCk8ZXhwaXJlRGF0ZVRpbWUpfWZ1bmN0aW9uIGxvYWRIYW5kbGVyKCl7dmFyIGE7aWYoIWhhc0xvYWRlZClmb3IoaGFzTG9hZGVkPSEwLGV4ZWN1dGVQbHVnaW5NZXRob2QoXCJsb2FkXCIpLGE9MDthPHJlZ2lzdGVyZWRPbkxvYWRIYW5kbGVycy5sZW5ndGg7YSsrKXJlZ2lzdGVyZWRPbkxvYWRIYW5kbGVyc1thXSgpO3JldHVybiEwfWZ1bmN0aW9uIGFkZFJlYWR5TGlzdGVuZXIoKXt2YXIgYTtkb2N1bWVudEFsaWFzLmFkZEV2ZW50TGlzdGVuZXI/YWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudEFsaWFzLFwiRE9NQ29udGVudExvYWRlZFwiLGZ1bmN0aW9uIGEoKXtkb2N1bWVudEFsaWFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsYSwhMSksbG9hZEhhbmRsZXIoKX0pOmRvY3VtZW50QWxpYXMuYXR0YWNoRXZlbnQmJihkb2N1bWVudEFsaWFzLmF0dGFjaEV2ZW50KFwib25yZWFkeXN0YXRlY2hhbmdlXCIsZnVuY3Rpb24gYSgpe1wiY29tcGxldGVcIj09PWRvY3VtZW50QWxpYXMucmVhZHlTdGF0ZSYmKGRvY3VtZW50QWxpYXMuZGV0YWNoRXZlbnQoXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIixhKSxsb2FkSGFuZGxlcigpKX0pLGRvY3VtZW50QWxpYXMuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsJiZ3aW5kb3dBbGlhcz09PXdpbmRvd0FsaWFzLnRvcCYmIWZ1bmN0aW9uIGEoKXtpZighaGFzTG9hZGVkKXt0cnl7ZG9jdW1lbnRBbGlhcy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoXCJsZWZ0XCIpfWNhdGNoKGIpe3JldHVybiB2b2lkIHNldFRpbWVvdXQoYSwwKX1sb2FkSGFuZGxlcigpfX0oKSksbmV3IFJlZ0V4cChcIldlYktpdFwiKS50ZXN0KG5hdmlnYXRvckFsaWFzLnVzZXJBZ2VudCkmJihhPXNldEludGVydmFsKGZ1bmN0aW9uKCl7KGhhc0xvYWRlZHx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChkb2N1bWVudEFsaWFzLnJlYWR5U3RhdGUpKSYmKGNsZWFySW50ZXJ2YWwoYSksbG9hZEhhbmRsZXIoKSl9LDEwKSksYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3dBbGlhcyxcImxvYWRcIixsb2FkSGFuZGxlciwhMSl9ZnVuY3Rpb24gbG9hZFNjcmlwdChhLGIpe3ZhciBjPWRvY3VtZW50QWxpYXMuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtjLnR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIixjLnNyYz1hLGMucmVhZHlTdGF0ZT9jLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZHlTdGF0ZTtcImxvYWRlZFwiIT09YSYmXCJjb21wbGV0ZVwiIT09YXx8KGMub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsYigpKX06Yy5vbmxvYWQ9Yixkb2N1bWVudEFsaWFzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChjKX1mdW5jdGlvbiBnZXRSZWZlcnJlcigpe3ZhciBhPVwiXCI7dHJ5e2E9d2luZG93QWxpYXMudG9wLmRvY3VtZW50LnJlZmVycmVyfWNhdGNoKGIpe2lmKHdpbmRvd0FsaWFzLnBhcmVudCl0cnl7YT13aW5kb3dBbGlhcy5wYXJlbnQuZG9jdW1lbnQucmVmZXJyZXJ9Y2F0Y2goYil7YT1cIlwifX1yZXR1cm5cIlwiPT09YSYmKGE9ZG9jdW1lbnRBbGlhcy5yZWZlcnJlciksYX1mdW5jdGlvbiBnZXRQcm90b2NvbFNjaGVtZShhKXt2YXIgYj1uZXcgUmVnRXhwKFwiXihbYS16XSspOlwiKSxjPWIuZXhlYyhhKTtyZXR1cm4gYz9jWzFdOm51bGx9ZnVuY3Rpb24gZ2V0SG9zdE5hbWUoYSl7dmFyIGI9bmV3IFJlZ0V4cChcIl4oPzooPzpodHRwcz98ZnRwKTopLyooPzpbXkBdK0ApPyhbXjovI10rKVwiKSxjPWIuZXhlYyhhKTtyZXR1cm4gYz9jWzFdOmF9ZnVuY3Rpb24gZ2V0UGFyYW1ldGVyKGEsYil7dmFyIGM9XCJbXFxcXD8mI11cIitiK1wiPShbXiYjXSopXCIsZD1uZXcgUmVnRXhwKGMpLGU9ZC5leGVjKGEpO3JldHVybiBlP2RlY29kZVdyYXBwZXIoZVsxXSk6XCJcIn1mdW5jdGlvbiB1dGY4X2VuY29kZShhKXtyZXR1cm4gdW5lc2NhcGUoZW5jb2RlV3JhcHBlcihhKSl9ZnVuY3Rpb24gc2hhMShhKXt2YXIgZCxlLGYsbSxuLG8scCxxLHIscyxiPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE8PGJ8YT4+PjMyLWJ9LGM9ZnVuY3Rpb24oYSl7dmFyIGMsZCxiPVwiXCI7Zm9yKGM9NztjPj0wO2MtLSlkPWE+Pj40KmMmMTUsYis9ZC50b1N0cmluZygxNik7cmV0dXJuIGJ9LGc9W10saD0xNzMyNTg0MTkzLGk9NDAyMzIzMzQxNyxqPTI1NjIzODMxMDIsaz0yNzE3MzM4NzgsbD0zMjg1Mzc3NTIwLHQ9W107Zm9yKGE9dXRmOF9lbmNvZGUoYSkscz1hLmxlbmd0aCxlPTA7ZTxzLTM7ZSs9NClmPWEuY2hhckNvZGVBdChlKTw8MjR8YS5jaGFyQ29kZUF0KGUrMSk8PDE2fGEuY2hhckNvZGVBdChlKzIpPDw4fGEuY2hhckNvZGVBdChlKzMpLHQucHVzaChmKTtzd2l0Y2goMyZzKXtjYXNlIDA6ZT0yMTQ3NDgzNjQ4O2JyZWFrO2Nhc2UgMTplPWEuY2hhckNvZGVBdChzLTEpPDwyNHw4Mzg4NjA4O2JyZWFrO2Nhc2UgMjplPWEuY2hhckNvZGVBdChzLTIpPDwyNHxhLmNoYXJDb2RlQXQocy0xKTw8MTZ8MzI3Njg7YnJlYWs7Y2FzZSAzOmU9YS5jaGFyQ29kZUF0KHMtMyk8PDI0fGEuY2hhckNvZGVBdChzLTIpPDwxNnxhLmNoYXJDb2RlQXQocy0xKTw8OHwxMjh9Zm9yKHQucHVzaChlKTsxNCE9PSgxNSZ0Lmxlbmd0aCk7KXQucHVzaCgwKTtmb3IodC5wdXNoKHM+Pj4yOSksdC5wdXNoKHM8PDMmNDI5NDk2NzI5NSksZD0wO2Q8dC5sZW5ndGg7ZCs9MTYpe2ZvcihlPTA7ZTwxNjtlKyspZ1tlXT10W2QrZV07Zm9yKGU9MTY7ZTw9Nzk7ZSsrKWdbZV09YihnW2UtM11eZ1tlLThdXmdbZS0xNF1eZ1tlLTE2XSwxKTtmb3IobT1oLG49aSxvPWoscD1rLHE9bCxlPTA7ZTw9MTk7ZSsrKXI9YihtLDUpKyhuJm98fm4mcCkrcStnW2VdKzE1MTg1MDAyNDkmNDI5NDk2NzI5NSxxPXAscD1vLG89YihuLDMwKSxuPW0sbT1yO2ZvcihlPTIwO2U8PTM5O2UrKylyPWIobSw1KSsobl5vXnApK3ErZ1tlXSsxODU5Nzc1MzkzJjQyOTQ5NjcyOTUscT1wLHA9byxvPWIobiwzMCksbj1tLG09cjtmb3IoZT00MDtlPD01OTtlKyspcj1iKG0sNSkrKG4mb3xuJnB8byZwKStxK2dbZV0rMjQwMDk1OTcwOCY0Mjk0OTY3Mjk1LHE9cCxwPW8sbz1iKG4sMzApLG49bSxtPXI7Zm9yKGU9NjA7ZTw9Nzk7ZSsrKXI9YihtLDUpKyhuXm9ecCkrcStnW2VdKzMzOTU0Njk3ODImNDI5NDk2NzI5NSxxPXAscD1vLG89YihuLDMwKSxuPW0sbT1yO2g9aCttJjQyOTQ5NjcyOTUsaT1pK24mNDI5NDk2NzI5NSxqPWorbyY0Mjk0OTY3Mjk1LGs9aytwJjQyOTQ5NjcyOTUsbD1sK3EmNDI5NDk2NzI5NX1yZXR1cm4gcj1jKGgpK2MoaSkrYyhqKStjKGspK2MobCksci50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHVybEZpeHVwKGEsYixjKXtyZXR1cm5cInRyYW5zbGF0ZS5nb29nbGV1c2VyY29udGVudC5jb21cIj09PWE/KFwiXCI9PT1jJiYoYz1iKSxiPWdldFBhcmFtZXRlcihiLFwidVwiKSxhPWdldEhvc3ROYW1lKGIpKTpcImNjLmJpbmdqLmNvbVwiIT09YSYmXCJ3ZWJjYWNoZS5nb29nbGV1c2VyY29udGVudC5jb21cIiE9PWEmJlwiNzQuNi5cIiE9PWEuc2xpY2UoMCw1KXx8KGI9ZG9jdW1lbnRBbGlhcy5saW5rc1swXS5ocmVmLGE9Z2V0SG9zdE5hbWUoYikpLFthLGIsY119ZnVuY3Rpb24gZG9tYWluRml4dXAoYSl7dmFyIGI9YS5sZW5ndGg7cmV0dXJuXCIuXCI9PT1hLmNoYXJBdCgtLWIpJiYoYT1hLnNsaWNlKDAsYikpLFwiKi5cIj09PWEuc2xpY2UoMCwyKSYmKGE9YS5zbGljZSgxKSksYX1mdW5jdGlvbiB0aXRsZUZpeHVwKGEpe2lmKGE9YSYmYS50ZXh0P2EudGV4dDphLCFpc1N0cmluZyhhKSl7dmFyIGI9ZG9jdW1lbnRBbGlhcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRpdGxlXCIpO2ImJmlzRGVmaW5lZChiWzBdKSYmKGE9YlswXS50ZXh0KX1yZXR1cm4gYX1mdW5jdGlvbiBnZXRDaGlsZHJlbkZyb21Ob2RlKGEpe3JldHVybiBhPyFpc0RlZmluZWQoYS5jaGlsZHJlbikmJmlzRGVmaW5lZChhLmNoaWxkTm9kZXMpP2EuY2hpbGRyZW46aXNEZWZpbmVkKGEuY2hpbGRyZW4pP2EuY2hpbGRyZW46W106W119ZnVuY3Rpb24gY29udGFpbnNOb2RlRWxlbWVudChhLGIpe3JldHVybiEoIWF8fCFiKSYmKGEuY29udGFpbnM/YS5jb250YWlucyhiKTphPT09Ynx8ISFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYhISgxNiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpKSl9ZnVuY3Rpb24gaW5kZXhPZkFycmF5KGEsYil7aWYoYSYmYS5pbmRleE9mKXJldHVybiBhLmluZGV4T2YoYik7aWYoIWlzRGVmaW5lZChhKXx8bnVsbD09PWEpcmV0dXJuLTE7aWYoIWEubGVuZ3RoKXJldHVybi0xO3ZhciBjPWEubGVuZ3RoO2lmKDA9PT1jKXJldHVybi0xO2Zvcih2YXIgZD0wO2Q8Yzspe2lmKGFbZF09PT1iKXJldHVybiBkO2QrK31yZXR1cm4tMX1mdW5jdGlvbiBpc1Zpc2libGUoYSl7ZnVuY3Rpb24gYihhLGIpe3JldHVybiB3aW5kb3dBbGlhcy5nZXRDb21wdXRlZFN0eWxlP2RvY3VtZW50QWxpYXMuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpW2JdOmEuY3VycmVudFN0eWxlP2EuY3VycmVudFN0eWxlW2JdOnZvaWQgMH1mdW5jdGlvbiBjKGEpe2ZvcihhPWEucGFyZW50Tm9kZTthOyl7aWYoYT09PWRvY3VtZW50QWxpYXMpcmV0dXJuITA7YT1hLnBhcmVudE5vZGV9cmV0dXJuITF9ZnVuY3Rpb24gZChlLGYsZyxoLGksaixrKXt2YXIgbD1lLnBhcmVudE5vZGUsbT0xO3JldHVybiEhYyhlKSYmKDk9PT1sLm5vZGVUeXBlfHxcIjBcIiE9PWIoZSxcIm9wYWNpdHlcIikmJlwibm9uZVwiIT09YihlLFwiZGlzcGxheVwiKSYmXCJoaWRkZW5cIiE9PWIoZSxcInZpc2liaWxpdHlcIikmJihpc0RlZmluZWQoZikmJmlzRGVmaW5lZChnKSYmaXNEZWZpbmVkKGgpJiZpc0RlZmluZWQoaSkmJmlzRGVmaW5lZChqKSYmaXNEZWZpbmVkKGspfHwoZj1lLm9mZnNldFRvcCxpPWUub2Zmc2V0TGVmdCxoPWYrZS5vZmZzZXRIZWlnaHQsZz1pK2Uub2Zmc2V0V2lkdGgsaj1lLm9mZnNldFdpZHRoLGs9ZS5vZmZzZXRIZWlnaHQpLChhIT09ZXx8MCE9PWsmJjAhPT1qfHxcImhpZGRlblwiIT09YihlLFwib3ZlcmZsb3dcIikpJiYoIWx8fChcImhpZGRlblwiIT09YihsLFwib3ZlcmZsb3dcIikmJlwic2Nyb2xsXCIhPT1iKGwsXCJvdmVyZmxvd1wiKXx8IShpK20+bC5vZmZzZXRXaWR0aCtsLnNjcm9sbExlZnR8fGkrai1tPGwuc2Nyb2xsTGVmdHx8ZittPmwub2Zmc2V0SGVpZ2h0K2wuc2Nyb2xsVG9wfHxmK2stbTxsLnNjcm9sbFRvcCkpJiYoZS5vZmZzZXRQYXJlbnQ9PT1sJiYoaSs9bC5vZmZzZXRMZWZ0LGYrPWwub2Zmc2V0VG9wKSxkKGwsZixnLGgsaSxqLGspKSkpKX1yZXR1cm4hIWEmJmQoYSl9ZnVuY3Rpb24gZ2V0UGl3aWtVcmxGb3JPdmVybGF5KGEsYil7cmV0dXJuIGI/YjooXCJwaXdpay5waHBcIj09PWEuc2xpY2UoLTkpJiYoYT1hLnNsaWNlKDAsYS5sZW5ndGgtOSkpLGEpfWZ1bmN0aW9uIGlzT3ZlcmxheVNlc3Npb24oYSl7dmFyIGI9XCJQaXdpa19PdmVybGF5XCIsYz1uZXcgUmVnRXhwKFwiaW5kZXhcXFxcLnBocFxcXFw/bW9kdWxlPU92ZXJsYXkmYWN0aW9uPXN0YXJ0T3ZlcmxheVNlc3Npb24maWRTaXRlPShbMC05XSspJnBlcmlvZD0oW14mXSspJmRhdGU9KFteJl0rKSRcIiksZD1jLmV4ZWMoZG9jdW1lbnRBbGlhcy5yZWZlcnJlcik7aWYoZCl7dmFyIGU9ZFsxXTtpZihlIT09U3RyaW5nKGEpKXJldHVybiExO3ZhciBmPWRbMl0sZz1kWzNdO3dpbmRvd0FsaWFzLm5hbWU9YitcIiMjI1wiK2YrXCIjIyNcIitnfXZhciBoPXdpbmRvd0FsaWFzLm5hbWUuc3BsaXQoXCIjIyNcIik7cmV0dXJuIDM9PT1oLmxlbmd0aCYmaFswXT09PWJ9ZnVuY3Rpb24gaW5qZWN0T3ZlcmxheVNjcmlwdHMoYSxiLGMpe3ZhciBkPXdpbmRvd0FsaWFzLm5hbWUuc3BsaXQoXCIjIyNcIiksZT1kWzFdLGY9ZFsyXSxnPWdldFBpd2lrVXJsRm9yT3ZlcmxheShhLGIpO2xvYWRTY3JpcHQoZytcInBsdWdpbnMvT3ZlcmxheS9jbGllbnQvY2xpZW50LmpzP3Y9MVwiLGZ1bmN0aW9uKCl7UGl3aWtfT3ZlcmxheV9DbGllbnQuaW5pdGlhbGl6ZShnLGMsZSxmKX0pfWZ1bmN0aW9uIFRyYWNrZXIodHJhY2tlclVybCxzaXRlSWQpe2Z1bmN0aW9uIHNldENvb2tpZShhLGIsYyxkLGUsZil7aWYoIWNvbmZpZ0Nvb2tpZXNEaXNhYmxlZCl7dmFyIGc7YyYmKGc9bmV3IERhdGUsZy5zZXRUaW1lKGcuZ2V0VGltZSgpK2MpKSxkb2N1bWVudEFsaWFzLmNvb2tpZT1hK1wiPVwiK2VuY29kZVdyYXBwZXIoYikrKGM/XCI7ZXhwaXJlcz1cIitnLnRvR01UU3RyaW5nKCk6XCJcIikrXCI7cGF0aD1cIisoZHx8XCIvXCIpKyhlP1wiO2RvbWFpbj1cIitlOlwiXCIpKyhmP1wiO3NlY3VyZVwiOlwiXCIpfX1mdW5jdGlvbiBnZXRDb29raWUoYSl7aWYoY29uZmlnQ29va2llc0Rpc2FibGVkKXJldHVybiAwO3ZhciBiPW5ldyBSZWdFeHAoXCIoXnw7KVsgXSpcIithK1wiPShbXjtdKilcIiksYz1iLmV4ZWMoZG9jdW1lbnRBbGlhcy5jb29raWUpO3JldHVybiBjP2RlY29kZVdyYXBwZXIoY1syXSk6MH1mdW5jdGlvbiBwdXJpZnkoYSl7dmFyIGI7cmV0dXJuIGNvbmZpZ0Rpc2NhcmRIYXNoVGFnPyhiPW5ldyBSZWdFeHAoXCIjLipcIiksYS5yZXBsYWNlKGIsXCJcIikpOmF9ZnVuY3Rpb24gcmVzb2x2ZVJlbGF0aXZlUmVmZXJlbmNlKGEsYil7dmFyIGQsYz1nZXRQcm90b2NvbFNjaGVtZShiKTtyZXR1cm4gYz9iOlwiL1wiPT09Yi5zbGljZSgwLDEpP2dldFByb3RvY29sU2NoZW1lKGEpK1wiOi8vXCIrZ2V0SG9zdE5hbWUoYSkrYjooYT1wdXJpZnkoYSksZD1hLmluZGV4T2YoXCI/XCIpLGQ+PTAmJihhPWEuc2xpY2UoMCxkKSksZD1hLmxhc3RJbmRleE9mKFwiL1wiKSxkIT09YS5sZW5ndGgtMSYmKGE9YS5zbGljZSgwLGQrMSkpLGErYil9ZnVuY3Rpb24gaXNTaXRlSG9zdE5hbWUoYSl7dmFyIGIsYyxkO2ZvcihiPTA7Yjxjb25maWdIb3N0c0FsaWFzLmxlbmd0aDtiKyspe2lmKGM9ZG9tYWluRml4dXAoY29uZmlnSG9zdHNBbGlhc1tiXS50b0xvd2VyQ2FzZSgpKSxhPT09YylyZXR1cm4hMDtpZihcIi5cIj09PWMuc2xpY2UoMCwxKSl7aWYoYT09PWMuc2xpY2UoMSkpcmV0dXJuITA7aWYoZD1hLmxlbmd0aC1jLmxlbmd0aCxkPjAmJmEuc2xpY2UoZCk9PT1jKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBnZXRJbWFnZShhLGIpe3ZhciBjPW5ldyBJbWFnZSgxLDEpO2Mub25sb2FkPWZ1bmN0aW9uKCl7aXRlcmF0b3I9MCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiJiZiKCl9LGMuc3JjPWNvbmZpZ1RyYWNrZXJVcmwrKGNvbmZpZ1RyYWNrZXJVcmwuaW5kZXhPZihcIj9cIik8MD9cIj9cIjpcIiZcIikrYX1mdW5jdGlvbiBzZW5kWG1sSHR0cFJlcXVlc3QoYSxiLGMpe2lzRGVmaW5lZChjKSYmbnVsbCE9PWN8fChjPSEwKTt0cnl7dmFyIGQ9d2luZG93QWxpYXMuWE1MSHR0cFJlcXVlc3Q/bmV3IHdpbmRvd0FsaWFzLlhNTEh0dHBSZXF1ZXN0OndpbmRvd0FsaWFzLkFjdGl2ZVhPYmplY3Q/bmV3IEFjdGl2ZVhPYmplY3QoXCJNaWNyb3NvZnQuWE1MSFRUUFwiKTpudWxsO2Qub3BlbihcIlBPU1RcIixjb25maWdUcmFja2VyVXJsLCEwKSxkLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQhPT10aGlzLnJlYWR5U3RhdGV8fHRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMHx8IWM/XCJmdW5jdGlvblwiPT10eXBlb2YgYiYmYigpOmdldEltYWdlKGEsYil9LGQuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLGNvbmZpZ1JlcXVlc3RDb250ZW50VHlwZSksZC5zZW5kKGEpfWNhdGNoKGQpe2MmJmdldEltYWdlKGEsYil9fWZ1bmN0aW9uIHNldEV4cGlyZURhdGVUaW1lKGEpe3ZhciBiPW5ldyBEYXRlLGM9Yi5nZXRUaW1lKCkrYTsoIWV4cGlyZURhdGVUaW1lfHxjPmV4cGlyZURhdGVUaW1lKSYmKGV4cGlyZURhdGVUaW1lPWMpfWZ1bmN0aW9uIGhlYXJ0QmVhdFVwKGEpeyFoZWFydEJlYXRUaW1lb3V0JiZjb25maWdIZWFydEJlYXREZWxheSYmKGhlYXJ0QmVhdFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKGhlYXJ0QmVhdFRpbWVvdXQ9bnVsbCwhaGVhcnRCZWF0UGluZ0lmQWN0aXZpdHlBbGlhcygpKXt2YXIgYj1uZXcgRGF0ZSxjPWNvbmZpZ0hlYXJ0QmVhdERlbGF5LShiLmdldFRpbWUoKS1sYXN0VHJhY2tlclJlcXVlc3RUaW1lKTtjPU1hdGgubWluKGNvbmZpZ0hlYXJ0QmVhdERlbGF5LGMpLGhlYXJ0QmVhdFVwKGMpfX0sYXx8Y29uZmlnSGVhcnRCZWF0RGVsYXkpKX1mdW5jdGlvbiBoZWFydEJlYXREb3duKCl7aGVhcnRCZWF0VGltZW91dCYmKGNsZWFyVGltZW91dChoZWFydEJlYXRUaW1lb3V0KSxoZWFydEJlYXRUaW1lb3V0PW51bGwpfWZ1bmN0aW9uIGhlYXJ0QmVhdE9uRm9jdXMoKXtoZWFydEJlYXRQaW5nSWZBY3Rpdml0eUFsaWFzKCl8fGhlYXJ0QmVhdFVwKCl9ZnVuY3Rpb24gaGVhcnRCZWF0T25CbHVyKCl7aGVhcnRCZWF0RG93bigpfWZ1bmN0aW9uIHNldFVwSGVhcnRCZWF0KCl7IWhlYXJ0QmVhdFNldFVwJiZjb25maWdIZWFydEJlYXREZWxheSYmKGhlYXJ0QmVhdFNldFVwPSEwLGFkZEV2ZW50TGlzdGVuZXIod2luZG93QWxpYXMsXCJmb2N1c1wiLGhlYXJ0QmVhdE9uRm9jdXMpLGFkZEV2ZW50TGlzdGVuZXIod2luZG93QWxpYXMsXCJibHVyXCIsaGVhcnRCZWF0T25CbHVyKSxoZWFydEJlYXRVcCgpKX1mdW5jdGlvbiBtYWtlU3VyZVRoZXJlSXNBR2FwQWZ0ZXJGaXJzdFRyYWNraW5nUmVxdWVzdFRvUHJldmVudE11bHRpcGxlVmlzaXRvckNyZWF0aW9uKGEpe3ZhciBiPW5ldyBEYXRlLGM9Yi5nZXRUaW1lKCk7aWYobGFzdFRyYWNrZXJSZXF1ZXN0VGltZT1jLHRpbWVOZXh0VHJhY2tpbmdSZXF1ZXN0Q2FuQmVFeGVjdXRlZEltbWVkaWF0ZWx5JiZjPHRpbWVOZXh0VHJhY2tpbmdSZXF1ZXN0Q2FuQmVFeGVjdXRlZEltbWVkaWF0ZWx5KXt2YXIgZD10aW1lTmV4dFRyYWNraW5nUmVxdWVzdENhbkJlRXhlY3V0ZWRJbW1lZGlhdGVseS1jO3JldHVybiBzZXRUaW1lb3V0KGEsZCksc2V0RXhwaXJlRGF0ZVRpbWUoZCs1MCksdm9pZCh0aW1lTmV4dFRyYWNraW5nUmVxdWVzdENhbkJlRXhlY3V0ZWRJbW1lZGlhdGVseSs9NTApfWlmKHRpbWVOZXh0VHJhY2tpbmdSZXF1ZXN0Q2FuQmVFeGVjdXRlZEltbWVkaWF0ZWx5PT09ITEpe3ZhciBlPTgwMDt0aW1lTmV4dFRyYWNraW5nUmVxdWVzdENhbkJlRXhlY3V0ZWRJbW1lZGlhdGVseT1jK2V9YSgpfWZ1bmN0aW9uIHNlbmRSZXF1ZXN0KGEsYixjKXshY29uZmlnRG9Ob3RUcmFjayYmYSYmbWFrZVN1cmVUaGVyZUlzQUdhcEFmdGVyRmlyc3RUcmFja2luZ1JlcXVlc3RUb1ByZXZlbnRNdWx0aXBsZVZpc2l0b3JDcmVhdGlvbihmdW5jdGlvbigpe1wiUE9TVFwiPT09Y29uZmlnUmVxdWVzdE1ldGhvZD9zZW5kWG1sSHR0cFJlcXVlc3QoYSxjKTpnZXRJbWFnZShhLGMpLHNldEV4cGlyZURhdGVUaW1lKGIpfSksaGVhcnRCZWF0U2V0VXA/aGVhcnRCZWF0VXAoKTpzZXRVcEhlYXJ0QmVhdCgpfWZ1bmN0aW9uIGNhblNlbmRCdWxrUmVxdWVzdChhKXtyZXR1cm4hY29uZmlnRG9Ob3RUcmFjayYmKGEmJmEubGVuZ3RoKX1mdW5jdGlvbiBzZW5kQnVsa1JlcXVlc3QoYSxiKXtpZihjYW5TZW5kQnVsa1JlcXVlc3QoYSkpe3ZhciBjPSd7XCJyZXF1ZXN0c1wiOltcIj8nK2Euam9pbignXCIsXCI/JykrJ1wiXX0nO21ha2VTdXJlVGhlcmVJc0FHYXBBZnRlckZpcnN0VHJhY2tpbmdSZXF1ZXN0VG9QcmV2ZW50TXVsdGlwbGVWaXNpdG9yQ3JlYXRpb24oZnVuY3Rpb24oKXtzZW5kWG1sSHR0cFJlcXVlc3QoYyxudWxsLCExKSxzZXRFeHBpcmVEYXRlVGltZShiKX0pfX1mdW5jdGlvbiBnZXRDb29raWVOYW1lKGEpe3JldHVybiBjb25maWdDb29raWVOYW1lUHJlZml4K2ErXCIuXCIrY29uZmlnVHJhY2tlclNpdGVJZCtcIi5cIitkb21haW5IYXNofWZ1bmN0aW9uIGhhc0Nvb2tpZXMoKXtpZihjb25maWdDb29raWVzRGlzYWJsZWQpcmV0dXJuXCIwXCI7aWYoIWlzRGVmaW5lZChuYXZpZ2F0b3JBbGlhcy5jb29raWVFbmFibGVkKSl7dmFyIGE9Z2V0Q29va2llTmFtZShcInRlc3Rjb29raWVcIik7cmV0dXJuIHNldENvb2tpZShhLFwiMVwiKSxcIjFcIj09PWdldENvb2tpZShhKT9cIjFcIjpcIjBcIn1yZXR1cm4gbmF2aWdhdG9yQWxpYXMuY29va2llRW5hYmxlZD9cIjFcIjpcIjBcIn1mdW5jdGlvbiB1cGRhdGVEb21haW5IYXNoKCl7ZG9tYWluSGFzaD1oYXNoKChjb25maWdDb29raWVEb21haW58fGRvbWFpbkFsaWFzKSsoY29uZmlnQ29va2llUGF0aHx8XCIvXCIpKS5zbGljZSgwLDQpfWZ1bmN0aW9uIGdldEN1c3RvbVZhcmlhYmxlc0Zyb21Db29raWUoKXt2YXIgYT1nZXRDb29raWVOYW1lKFwiY3ZhclwiKSxiPWdldENvb2tpZShhKTtyZXR1cm4gYi5sZW5ndGgmJihiPUpTT04yLnBhcnNlKGIpLGlzT2JqZWN0KGIpKT9iOnt9fWZ1bmN0aW9uIGxvYWRDdXN0b21WYXJpYWJsZXMoKXtjdXN0b21WYXJpYWJsZXM9PT0hMSYmKGN1c3RvbVZhcmlhYmxlcz1nZXRDdXN0b21WYXJpYWJsZXNGcm9tQ29va2llKCkpfWZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tVXVpZCgpe3JldHVybiBoYXNoKChuYXZpZ2F0b3JBbGlhcy51c2VyQWdlbnR8fFwiXCIpKyhuYXZpZ2F0b3JBbGlhcy5wbGF0Zm9ybXx8XCJcIikrSlNPTjIuc3RyaW5naWZ5KGJyb3dzZXJGZWF0dXJlcykrKG5ldyBEYXRlKS5nZXRUaW1lKCkrTWF0aC5yYW5kb20oKSkuc2xpY2UoMCwxNil9ZnVuY3Rpb24gbG9hZFZpc2l0b3JJZENvb2tpZSgpe3ZhciBlLGYsYT1uZXcgRGF0ZSxiPU1hdGgucm91bmQoYS5nZXRUaW1lKCkvMWUzKSxjPWdldENvb2tpZU5hbWUoXCJpZFwiKSxkPWdldENvb2tpZShjKTtyZXR1cm4gZD8oZT1kLnNwbGl0KFwiLlwiKSxlLnVuc2hpZnQoXCIwXCIpLHZpc2l0b3JVVUlELmxlbmd0aCYmKGVbMV09dmlzaXRvclVVSUQpLGUpOihmPXZpc2l0b3JVVUlELmxlbmd0aD92aXNpdG9yVVVJRDpcIjBcIj09PWhhc0Nvb2tpZXMoKT9cIlwiOmdlbmVyYXRlUmFuZG9tVXVpZCgpLGU9W1wiMVwiLGYsYiwwLGIsXCJcIixcIlwiXSl9ZnVuY3Rpb24gZ2V0VmFsdWVzRnJvbVZpc2l0b3JJZENvb2tpZSgpe3ZhciBhPWxvYWRWaXNpdG9ySWRDb29raWUoKSxiPWFbMF0sYz1hWzFdLGQ9YVsyXSxlPWFbM10sZj1hWzRdLGc9YVs1XTtpc0RlZmluZWQoYVs2XSl8fChhWzZdPVwiXCIpO3ZhciBoPWFbNl07cmV0dXJue25ld1Zpc2l0b3I6Yix1dWlkOmMsY3JlYXRlVHM6ZCx2aXNpdENvdW50OmUsY3VycmVudFZpc2l0VHM6ZixsYXN0VmlzaXRUczpnLGxhc3RFY29tbWVyY2VPcmRlclRzOmh9fWZ1bmN0aW9uIGdldFJlbWFpbmluZ1Zpc2l0b3JDb29raWVUaW1lb3V0KCl7dmFyIGE9bmV3IERhdGUsYj1hLmdldFRpbWUoKSxjPWdldFZhbHVlc0Zyb21WaXNpdG9ySWRDb29raWUoKS5jcmVhdGVUcyxkPXBhcnNlSW50KGMsMTApLGU9MWUzKmQrY29uZmlnVmlzaXRvckNvb2tpZVRpbWVvdXQtYjtyZXR1cm4gZX1mdW5jdGlvbiBzZXRWaXNpdG9ySWRDb29raWUoYSl7aWYoY29uZmlnVHJhY2tlclNpdGVJZCl7dmFyIGI9bmV3IERhdGUsYz1NYXRoLnJvdW5kKGIuZ2V0VGltZSgpLzFlMyk7aXNEZWZpbmVkKGEpfHwoYT1nZXRWYWx1ZXNGcm9tVmlzaXRvcklkQ29va2llKCkpO3ZhciBkPWEudXVpZCtcIi5cIithLmNyZWF0ZVRzK1wiLlwiK2EudmlzaXRDb3VudCtcIi5cIitjK1wiLlwiK2EubGFzdFZpc2l0VHMrXCIuXCIrYS5sYXN0RWNvbW1lcmNlT3JkZXJUcztzZXRDb29raWUoZ2V0Q29va2llTmFtZShcImlkXCIpLGQsZ2V0UmVtYWluaW5nVmlzaXRvckNvb2tpZVRpbWVvdXQoKSxjb25maWdDb29raWVQYXRoLGNvbmZpZ0Nvb2tpZURvbWFpbil9fWZ1bmN0aW9uIGxvYWRSZWZlcnJlckF0dHJpYnV0aW9uQ29va2llKCl7dmFyIGE9Z2V0Q29va2llKGdldENvb2tpZU5hbWUoXCJyZWZcIikpO2lmKGEubGVuZ3RoKXRyeXtpZihhPUpTT04yLnBhcnNlKGEpLGlzT2JqZWN0KGEpKXJldHVybiBhfWNhdGNoKGEpe31yZXR1cm5bXCJcIixcIlwiLDAsXCJcIl19ZnVuY3Rpb24gZGVsZXRlQ29va2llKGEsYixjKXtzZXRDb29raWUoYSxcIlwiLC04NjQwMCxiLGMpfWZ1bmN0aW9uIGlzUG9zc2libGVUb1NldENvb2tpZU9uRG9tYWluKGEpe3ZhciBiPVwidGVzdHZhbHVlXCI7cmV0dXJuIHNldENvb2tpZShcInRlc3RcIixiLDFlNCxudWxsLGEpLGdldENvb2tpZShcInRlc3RcIik9PT1iJiYoZGVsZXRlQ29va2llKFwidGVzdFwiLG51bGwsYSksITApfWZ1bmN0aW9uIGRlbGV0ZUNvb2tpZXMoKXt2YXIgYT1jb25maWdDb29raWVzRGlzYWJsZWQ7Y29uZmlnQ29va2llc0Rpc2FibGVkPSExO3ZhciBjLGQsYj1bXCJpZFwiLFwic2VzXCIsXCJjdmFyXCIsXCJyZWZcIl07Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKylkPWdldENvb2tpZU5hbWUoYltjXSksMCE9PWdldENvb2tpZShkKSYmZGVsZXRlQ29va2llKGQsY29uZmlnQ29va2llUGF0aCxjb25maWdDb29raWVEb21haW4pO2NvbmZpZ0Nvb2tpZXNEaXNhYmxlZD1hfWZ1bmN0aW9uIHNldFNpdGVJZChhKXtjb25maWdUcmFja2VyU2l0ZUlkPWEsc2V0VmlzaXRvcklkQ29va2llKCl9ZnVuY3Rpb24gc29ydE9iamVjdEJ5S2V5cyhhKXtpZihhJiZpc09iamVjdChhKSl7dmFyIGMsYj1bXTtmb3IoYyBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGMpJiZiLnB1c2goYyk7dmFyIGQ9e307Yi5zb3J0KCk7dmFyIGYsZT1iLmxlbmd0aDtmb3IoZj0wO2Y8ZTtmKyspZFtiW2ZdXT1hW2JbZl1dO3JldHVybiBkfX1mdW5jdGlvbiBzZXRTZXNzaW9uQ29va2llKCl7c2V0Q29va2llKGdldENvb2tpZU5hbWUoXCJzZXNcIiksXCIqXCIsY29uZmlnU2Vzc2lvbkNvb2tpZVRpbWVvdXQsY29uZmlnQ29va2llUGF0aCxjb25maWdDb29raWVEb21haW4pfWZ1bmN0aW9uIGdldFJlcXVlc3QoYSxiLGMsZCl7ZnVuY3Rpb24geShhLGIpe3ZhciBjPUpTT04yLnN0cmluZ2lmeShhKTtyZXR1cm4gYy5sZW5ndGg+Mj9cIiZcIitiK1wiPVwiK2VuY29kZVdyYXBwZXIoYyk6XCJcIn12YXIgZSxoLGksayxsLHQsdSxmPW5ldyBEYXRlLGc9TWF0aC5yb3VuZChmLmdldFRpbWUoKS8xZTMpLGo9MTAyNCxtPWN1c3RvbVZhcmlhYmxlcyxuPWdldENvb2tpZU5hbWUoXCJzZXNcIiksbz1nZXRDb29raWVOYW1lKFwicmVmXCIpLHA9Z2V0Q29va2llTmFtZShcImN2YXJcIikscT1nZXRDb29raWUobikscj1sb2FkUmVmZXJyZXJBdHRyaWJ1dGlvbkNvb2tpZSgpLHM9Y29uZmlnQ3VzdG9tVXJsfHxsb2NhdGlvbkhyZWZBbGlhcztpZihjb25maWdDb29raWVzRGlzYWJsZWQmJmRlbGV0ZUNvb2tpZXMoKSxjb25maWdEb05vdFRyYWNrKXJldHVyblwiXCI7dmFyIHY9Z2V0VmFsdWVzRnJvbVZpc2l0b3JJZENvb2tpZSgpO2lzRGVmaW5lZChkKXx8KGQ9XCJcIik7dmFyIHc9ZG9jdW1lbnRBbGlhcy5jaGFyYWN0ZXJTZXR8fGRvY3VtZW50QWxpYXMuY2hhcnNldDtpZih3JiZcInV0Zi04XCIhPT13LnRvTG93ZXJDYXNlKCl8fCh3PW51bGwpLHQ9clswXSx1PXJbMV0saD1yWzJdLGk9clszXSwhcSl7dmFyIHg9Y29uZmlnU2Vzc2lvbkNvb2tpZVRpbWVvdXQvMWUzO2lmKCghdi5sYXN0VmlzaXRUc3x8Zy12Lmxhc3RWaXNpdFRzPngpJiYodi52aXNpdENvdW50Kyssdi5sYXN0VmlzaXRUcz12LmN1cnJlbnRWaXNpdFRzKSwhY29uZmlnQ29udmVyc2lvbkF0dHJpYnV0aW9uRmlyc3RSZWZlcnJlcnx8IXQubGVuZ3RoKXtmb3IoZSBpbiBjb25maWdDYW1wYWlnbk5hbWVQYXJhbWV0ZXJzKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb25maWdDYW1wYWlnbk5hbWVQYXJhbWV0ZXJzLGUpJiYodD1nZXRQYXJhbWV0ZXIocyxjb25maWdDYW1wYWlnbk5hbWVQYXJhbWV0ZXJzW2VdKSx0Lmxlbmd0aCkpYnJlYWs7Zm9yKGUgaW4gY29uZmlnQ2FtcGFpZ25LZXl3b3JkUGFyYW1ldGVycylpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29uZmlnQ2FtcGFpZ25LZXl3b3JkUGFyYW1ldGVycyxlKSYmKHU9Z2V0UGFyYW1ldGVyKHMsY29uZmlnQ2FtcGFpZ25LZXl3b3JkUGFyYW1ldGVyc1tlXSksdS5sZW5ndGgpKWJyZWFrfWs9Z2V0SG9zdE5hbWUoY29uZmlnUmVmZXJyZXJVcmwpLGw9aS5sZW5ndGg/Z2V0SG9zdE5hbWUoaSk6XCJcIiwhay5sZW5ndGh8fGlzU2l0ZUhvc3ROYW1lKGspfHxjb25maWdDb252ZXJzaW9uQXR0cmlidXRpb25GaXJzdFJlZmVycmVyJiZsLmxlbmd0aCYmIWlzU2l0ZUhvc3ROYW1lKGwpfHwoaT1jb25maWdSZWZlcnJlclVybCksKGkubGVuZ3RofHx0Lmxlbmd0aCkmJihoPWcscj1bdCx1LGgscHVyaWZ5KGkuc2xpY2UoMCxqKSldLHNldENvb2tpZShvLEpTT04yLnN0cmluZ2lmeShyKSxjb25maWdSZWZlcnJhbENvb2tpZVRpbWVvdXQsY29uZmlnQ29va2llUGF0aCxjb25maWdDb29raWVEb21haW4pKX1hKz1cIiZpZHNpdGU9XCIrY29uZmlnVHJhY2tlclNpdGVJZCtcIiZyZWM9MSZyPVwiK1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyLDgpK1wiJmg9XCIrZi5nZXRIb3VycygpK1wiJm09XCIrZi5nZXRNaW51dGVzKCkrXCImcz1cIitmLmdldFNlY29uZHMoKStcIiZ1cmw9XCIrZW5jb2RlV3JhcHBlcihwdXJpZnkocykpKyhjb25maWdSZWZlcnJlclVybC5sZW5ndGg/XCImdXJscmVmPVwiK2VuY29kZVdyYXBwZXIocHVyaWZ5KGNvbmZpZ1JlZmVycmVyVXJsKSk6XCJcIikrKGNvbmZpZ1VzZXJJZCYmY29uZmlnVXNlcklkLmxlbmd0aD9cIiZ1aWQ9XCIrZW5jb2RlV3JhcHBlcihjb25maWdVc2VySWQpOlwiXCIpK1wiJl9pZD1cIit2LnV1aWQrXCImX2lkdHM9XCIrdi5jcmVhdGVUcytcIiZfaWR2Yz1cIit2LnZpc2l0Q291bnQrXCImX2lkbj1cIit2Lm5ld1Zpc2l0b3IrKHQubGVuZ3RoP1wiJl9yY249XCIrZW5jb2RlV3JhcHBlcih0KTpcIlwiKSsodS5sZW5ndGg/XCImX3Jjaz1cIitlbmNvZGVXcmFwcGVyKHUpOlwiXCIpK1wiJl9yZWZ0cz1cIitoK1wiJl92aWV3dHM9XCIrdi5sYXN0VmlzaXRUcysoU3RyaW5nKHYubGFzdEVjb21tZXJjZU9yZGVyVHMpLmxlbmd0aD9cIiZfZWN0cz1cIit2Lmxhc3RFY29tbWVyY2VPcmRlclRzOlwiXCIpKyhTdHJpbmcoaSkubGVuZ3RoP1wiJl9yZWY9XCIrZW5jb2RlV3JhcHBlcihwdXJpZnkoaS5zbGljZSgwLGopKSk6XCJcIikrKHc/XCImY3M9XCIrZW5jb2RlV3JhcHBlcih3KTpcIlwiKStcIiZzZW5kX2ltYWdlPTBcIjtmb3IoZSBpbiBicm93c2VyRmVhdHVyZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGJyb3dzZXJGZWF0dXJlcyxlKSYmKGErPVwiJlwiK2UrXCI9XCIrYnJvd3NlckZlYXR1cmVzW2VdKTtiP2ErPVwiJmRhdGE9XCIrZW5jb2RlV3JhcHBlcihKU09OMi5zdHJpbmdpZnkoYikpOmNvbmZpZ0N1c3RvbURhdGEmJihhKz1cIiZkYXRhPVwiK2VuY29kZVdyYXBwZXIoSlNPTjIuc3RyaW5naWZ5KGNvbmZpZ0N1c3RvbURhdGEpKSk7dmFyIHo9c29ydE9iamVjdEJ5S2V5cyhjdXN0b21WYXJpYWJsZXNQYWdlKSxBPXNvcnRPYmplY3RCeUtleXMoY3VzdG9tVmFyaWFibGVzRXZlbnQpO2lmKGErPXkoeixcImN2YXJcIiksYSs9eShBLFwiZV9jdmFyXCIpLGN1c3RvbVZhcmlhYmxlcyl7YSs9eShjdXN0b21WYXJpYWJsZXMsXCJfY3ZhclwiKTtmb3IoZSBpbiBtKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtLGUpJiYoXCJcIiE9PWN1c3RvbVZhcmlhYmxlc1tlXVswXSYmXCJcIiE9PWN1c3RvbVZhcmlhYmxlc1tlXVsxXXx8ZGVsZXRlIGN1c3RvbVZhcmlhYmxlc1tlXSk7Y29uZmlnU3RvcmVDdXN0b21WYXJpYWJsZXNJbkNvb2tpZSYmc2V0Q29va2llKHAsSlNPTjIuc3RyaW5naWZ5KGN1c3RvbVZhcmlhYmxlcyksY29uZmlnU2Vzc2lvbkNvb2tpZVRpbWVvdXQsY29uZmlnQ29va2llUGF0aCxjb25maWdDb29raWVEb21haW4pfXJldHVybiBjb25maWdQZXJmb3JtYW5jZVRyYWNraW5nRW5hYmxlZCYmKGNvbmZpZ1BlcmZvcm1hbmNlR2VuZXJhdGlvblRpbWU/YSs9XCImZ3RfbXM9XCIrY29uZmlnUGVyZm9ybWFuY2VHZW5lcmF0aW9uVGltZTpwZXJmb3JtYW5jZUFsaWFzJiZwZXJmb3JtYW5jZUFsaWFzLnRpbWluZyYmcGVyZm9ybWFuY2VBbGlhcy50aW1pbmcucmVxdWVzdFN0YXJ0JiZwZXJmb3JtYW5jZUFsaWFzLnRpbWluZy5yZXNwb25zZUVuZCYmKGErPVwiJmd0X21zPVwiKyhwZXJmb3JtYW5jZUFsaWFzLnRpbWluZy5yZXNwb25zZUVuZC1wZXJmb3JtYW5jZUFsaWFzLnRpbWluZy5yZXF1ZXN0U3RhcnQpKSksdi5sYXN0RWNvbW1lcmNlT3JkZXJUcz1pc0RlZmluZWQoZCkmJlN0cmluZyhkKS5sZW5ndGg/ZDp2Lmxhc3RFY29tbWVyY2VPcmRlclRzLHNldFZpc2l0b3JJZENvb2tpZSh2KSxzZXRTZXNzaW9uQ29va2llKCksYSs9ZXhlY3V0ZVBsdWdpbk1ldGhvZChjKSxjb25maWdBcHBlbmRUb1RyYWNraW5nVXJsLmxlbmd0aCYmKGErPVwiJlwiK2NvbmZpZ0FwcGVuZFRvVHJhY2tpbmdVcmwpLGlzRnVuY3Rpb24oY29uZmlnQ3VzdG9tUmVxdWVzdENvbnRlbnRQcm9jZXNzaW5nKSYmKGE9Y29uZmlnQ3VzdG9tUmVxdWVzdENvbnRlbnRQcm9jZXNzaW5nKGEpKSxhfWZ1bmN0aW9uIGxvZ0Vjb21tZXJjZShhLGIsYyxkLGUsZil7dmFyIGgsayxnPVwiaWRnb2FsPTBcIixpPW5ldyBEYXRlLGo9W107aWYoU3RyaW5nKGEpLmxlbmd0aCYmKGcrPVwiJmVjX2lkPVwiK2VuY29kZVdyYXBwZXIoYSksaD1NYXRoLnJvdW5kKGkuZ2V0VGltZSgpLzFlMykpLGcrPVwiJnJldmVudWU9XCIrYixTdHJpbmcoYykubGVuZ3RoJiYoZys9XCImZWNfc3Q9XCIrYyksU3RyaW5nKGQpLmxlbmd0aCYmKGcrPVwiJmVjX3R4PVwiK2QpLFN0cmluZyhlKS5sZW5ndGgmJihnKz1cIiZlY19zaD1cIitlKSxTdHJpbmcoZikubGVuZ3RoJiYoZys9XCImZWNfZHQ9XCIrZiksZWNvbW1lcmNlSXRlbXMpe2ZvcihrIGluIGVjb21tZXJjZUl0ZW1zKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlY29tbWVyY2VJdGVtcyxrKSYmKGlzRGVmaW5lZChlY29tbWVyY2VJdGVtc1trXVsxXSl8fChlY29tbWVyY2VJdGVtc1trXVsxXT1cIlwiKSxpc0RlZmluZWQoZWNvbW1lcmNlSXRlbXNba11bMl0pfHwoZWNvbW1lcmNlSXRlbXNba11bMl09XCJcIiksaXNEZWZpbmVkKGVjb21tZXJjZUl0ZW1zW2tdWzNdKSYmMCE9PVN0cmluZyhlY29tbWVyY2VJdGVtc1trXVszXSkubGVuZ3RofHwoZWNvbW1lcmNlSXRlbXNba11bM109MCksaXNEZWZpbmVkKGVjb21tZXJjZUl0ZW1zW2tdWzRdKSYmMCE9PVN0cmluZyhlY29tbWVyY2VJdGVtc1trXVs0XSkubGVuZ3RofHwoZWNvbW1lcmNlSXRlbXNba11bNF09MSksai5wdXNoKGVjb21tZXJjZUl0ZW1zW2tdKSk7Zys9XCImZWNfaXRlbXM9XCIrZW5jb2RlV3JhcHBlcihKU09OMi5zdHJpbmdpZnkoaikpfWc9Z2V0UmVxdWVzdChnLGNvbmZpZ0N1c3RvbURhdGEsXCJlY29tbWVyY2VcIixoKSxzZW5kUmVxdWVzdChnLGNvbmZpZ1RyYWNrZXJQYXVzZSl9ZnVuY3Rpb24gbG9nRWNvbW1lcmNlT3JkZXIoYSxiLGMsZCxlLGYpe1N0cmluZyhhKS5sZW5ndGgmJmlzRGVmaW5lZChiKSYmbG9nRWNvbW1lcmNlKGEsYixjLGQsZSxmKX1mdW5jdGlvbiBsb2dFY29tbWVyY2VDYXJ0VXBkYXRlKGEpe2lzRGVmaW5lZChhKSYmbG9nRWNvbW1lcmNlKFwiXCIsYSxcIlwiLFwiXCIsXCJcIixcIlwiKX1mdW5jdGlvbiBsb2dQYWdlVmlldyhhLGIpe3ZhciBkPShuZXcgRGF0ZSxnZXRSZXF1ZXN0KFwiYWN0aW9uX25hbWU9XCIrZW5jb2RlV3JhcHBlcih0aXRsZUZpeHVwKGF8fGNvbmZpZ1RpdGxlKSksYixcImxvZ1wiKSk7c2VuZFJlcXVlc3QoZCxjb25maWdUcmFja2VyUGF1c2UpfWZ1bmN0aW9uIGdldENsYXNzZXNSZWdFeHAoYSxiKXt2YXIgYyxkPVwiKF58ICkocGl3aWtbXy1dXCIrYjtpZihhKWZvcihjPTA7YzxhLmxlbmd0aDtjKyspZCs9XCJ8XCIrYVtjXTtyZXR1cm4gZCs9XCIpKCB8JClcIixuZXcgUmVnRXhwKGQpfWZ1bmN0aW9uIHN0YXJ0c1VybFdpdGhUcmFja2VyVXJsKGEpe3JldHVybiBjb25maWdUcmFja2VyVXJsJiZhJiYwPT09U3RyaW5nKGEpLmluZGV4T2YoY29uZmlnVHJhY2tlclVybCl9ZnVuY3Rpb24gZ2V0TGlua1R5cGUoYSxiLGMsZCl7aWYoc3RhcnRzVXJsV2l0aFRyYWNrZXJVcmwoYikpcmV0dXJuIDA7dmFyIGU9Z2V0Q2xhc3Nlc1JlZ0V4cChjb25maWdEb3dubG9hZENsYXNzZXMsXCJkb3dubG9hZFwiKSxmPWdldENsYXNzZXNSZWdFeHAoY29uZmlnTGlua0NsYXNzZXMsXCJsaW5rXCIpLGc9bmV3IFJlZ0V4cChcIlxcXFwuKFwiK2NvbmZpZ0Rvd25sb2FkRXh0ZW5zaW9ucy5qb2luKFwifFwiKStcIikoWz8mI118JClcIixcImlcIik7cmV0dXJuIGYudGVzdChhKT9cImxpbmtcIjpkfHxlLnRlc3QoYSl8fGcudGVzdChiKT9cImRvd25sb2FkXCI6Yz8wOlwibGlua1wifWZ1bmN0aW9uIGdldFNvdXJjZUVsZW1lbnQoYSl7dmFyIGI7Zm9yKGI9YS5wYXJlbnROb2RlO251bGwhPT1iJiZpc0RlZmluZWQoYikmJiFxdWVyeS5pc0xpbmtFbGVtZW50KGEpOylhPWIsYj1hLnBhcmVudE5vZGU7cmV0dXJuIGF9ZnVuY3Rpb24gZ2V0TGlua0lmU2hvdWxkQmVQcm9jZXNzZWQoYSl7aWYoYT1nZXRTb3VyY2VFbGVtZW50KGEpLHF1ZXJ5Lmhhc05vZGVBdHRyaWJ1dGUoYSxcImhyZWZcIikmJmlzRGVmaW5lZChhLmhyZWYpKXt2YXIgYj1xdWVyeS5nZXRBdHRyaWJ1dGVWYWx1ZUZyb21Ob2RlKGEsXCJocmVmXCIpO2lmKCFzdGFydHNVcmxXaXRoVHJhY2tlclVybChiKSl7dmFyIGM9YS5ob3N0bmFtZXx8Z2V0SG9zdE5hbWUoYS5ocmVmKSxkPWMudG9Mb3dlckNhc2UoKSxlPWEuaHJlZi5yZXBsYWNlKGMsZCksZj1uZXcgUmVnRXhwKFwiXihqYXZhc2NyaXB0fHZic2NyaXB0fGpzY3JpcHR8bW9jaGF8bGl2ZXNjcmlwdHxlY21hc2NyaXB0fG1haWx0byk6XCIsXCJpXCIpO2lmKCFmLnRlc3QoZSkpe3ZhciBnPWdldExpbmtUeXBlKGEuY2xhc3NOYW1lLGUsaXNTaXRlSG9zdE5hbWUoZCkscXVlcnkuaGFzTm9kZUF0dHJpYnV0ZShhLFwiZG93bmxvYWRcIikpO2lmKGcpcmV0dXJue3R5cGU6ZyxocmVmOmV9fX19fWZ1bmN0aW9uIGJ1aWxkQ29udGVudEludGVyYWN0aW9uUmVxdWVzdChhLGIsYyxkKXt2YXIgZT1jb250ZW50LmJ1aWxkSW50ZXJhY3Rpb25SZXF1ZXN0UGFyYW1zKGEsYixjLGQpO2lmKGUpcmV0dXJuIGdldFJlcXVlc3QoZSxudWxsLFwiY29udGVudEludGVyYWN0aW9uXCIpfWZ1bmN0aW9uIGJ1aWxkQ29udGVudEludGVyYWN0aW9uVHJhY2tpbmdSZWRpcmVjdFVybChhLGIsYyxkLGUpe2lmKGlzRGVmaW5lZChhKSl7aWYoc3RhcnRzVXJsV2l0aFRyYWNrZXJVcmwoYSkpcmV0dXJuIGE7dmFyIGY9Y29udGVudC50b0Fic29sdXRlVXJsKGEpLGc9XCJyZWRpcmVjdHVybD1cIitlbmNvZGVXcmFwcGVyKGYpK1wiJlwiO2crPWJ1aWxkQ29udGVudEludGVyYWN0aW9uUmVxdWVzdChiLGMsZCxlfHxhKTt2YXIgaD1cIiZcIjtyZXR1cm4gY29uZmlnVHJhY2tlclVybC5pbmRleE9mKFwiP1wiKTwwJiYoaD1cIj9cIiksY29uZmlnVHJhY2tlclVybCtoK2d9fWZ1bmN0aW9uIGlzTm9kZUF1dGhvcml6ZWRUb1RyaWdnZXJJbnRlcmFjdGlvbihhLGIpe2lmKCFhfHwhYilyZXR1cm4hMTt2YXIgYz1jb250ZW50LmZpbmRUYXJnZXROb2RlKGEpO3JldHVybiFjb250ZW50LnNob3VsZElnbm9yZUludGVyYWN0aW9uKGMpJiYoYz1jb250ZW50LmZpbmRUYXJnZXROb2RlTm9EZWZhdWx0KGEpLCEoYyYmIWNvbnRhaW5zTm9kZUVsZW1lbnQoYyxiKSkpfWZ1bmN0aW9uIGdldENvbnRlbnRJbnRlcmFjdGlvblRvUmVxdWVzdElmUG9zc2libGUoYSxiLGMpe2lmKGEpe3ZhciBkPWNvbnRlbnQuZmluZFBhcmVudENvbnRlbnROb2RlKGEpO2lmKGQmJmlzTm9kZUF1dGhvcml6ZWRUb1RyaWdnZXJJbnRlcmFjdGlvbihkLGEpKXt2YXIgZT1jb250ZW50LmJ1aWxkQ29udGVudEJsb2NrKGQpO2lmKGUpcmV0dXJuIWUudGFyZ2V0JiZjJiYoZS50YXJnZXQ9YyksY29udGVudC5idWlsZEludGVyYWN0aW9uUmVxdWVzdFBhcmFtcyhiLGUubmFtZSxlLnBpZWNlLGUudGFyZ2V0KX19fWZ1bmN0aW9uIHdhc0NvbnRlbnRJbXByZXNzaW9uQWxyZWFkeVRyYWNrZWQoYSl7aWYoIXRyYWNrZWRDb250ZW50SW1wcmVzc2lvbnN8fCF0cmFja2VkQ29udGVudEltcHJlc3Npb25zLmxlbmd0aClyZXR1cm4hMTt2YXIgYixjO2ZvcihiPTA7Yjx0cmFja2VkQ29udGVudEltcHJlc3Npb25zLmxlbmd0aDtiKyspaWYoYz10cmFja2VkQ29udGVudEltcHJlc3Npb25zW2JdLGMmJmMubmFtZT09PWEubmFtZSYmYy5waWVjZT09PWEucGllY2UmJmMudGFyZ2V0PT09YS50YXJnZXQpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcmVwbGFjZUhyZWZJZkludGVybmFsTGluayhhKXtpZighYSlyZXR1cm4hMTt2YXIgYj1jb250ZW50LmZpbmRUYXJnZXROb2RlKGEpO2lmKCFifHxjb250ZW50LnNob3VsZElnbm9yZUludGVyYWN0aW9uKGIpKXJldHVybiExO3ZhciBjPWdldExpbmtJZlNob3VsZEJlUHJvY2Vzc2VkKGIpO2lmKGxpbmtUcmFja2luZ0VuYWJsZWQmJmMmJmMudHlwZSlyZXR1cm4hMTtpZihxdWVyeS5pc0xpbmtFbGVtZW50KGIpJiZxdWVyeS5oYXNOb2RlQXR0cmlidXRlV2l0aFZhbHVlKGIsXCJocmVmXCIpKXt2YXIgZD1TdHJpbmcocXVlcnkuZ2V0QXR0cmlidXRlVmFsdWVGcm9tTm9kZShiLFwiaHJlZlwiKSk7aWYoMD09PWQuaW5kZXhPZihcIiNcIikpcmV0dXJuITE7aWYoc3RhcnRzVXJsV2l0aFRyYWNrZXJVcmwoZCkpcmV0dXJuITA7aWYoIWNvbnRlbnQuaXNVcmxUb0N1cnJlbnREb21haW4oZCkpcmV0dXJuITE7dmFyIGU9Y29udGVudC5idWlsZENvbnRlbnRCbG9jayhhKTtpZighZSlyZXR1cm47dmFyIGY9ZS5uYW1lLGc9ZS5waWVjZSxoPWUudGFyZ2V0O3F1ZXJ5Lmhhc05vZGVBdHRyaWJ1dGVXaXRoVmFsdWUoYixjb250ZW50LkNPTlRFTlRfVEFSR0VUX0FUVFIpJiYhYi53YXNDb250ZW50VGFyZ2V0QXR0clJlcGxhY2VkfHwoYi53YXNDb250ZW50VGFyZ2V0QXR0clJlcGxhY2VkPSEwLGg9Y29udGVudC50b0Fic29sdXRlVXJsKGQpLHF1ZXJ5LnNldEFueUF0dHJpYnV0ZShiLGNvbnRlbnQuQ09OVEVOVF9UQVJHRVRfQVRUUixoKSk7dmFyIGk9YnVpbGRDb250ZW50SW50ZXJhY3Rpb25UcmFja2luZ1JlZGlyZWN0VXJsKGQsXCJjbGlja1wiLGYsZyxoKTtyZXR1cm4gY29udGVudC5zZXRIcmVmQXR0cmlidXRlKGIsaSksITB9cmV0dXJuITF9ZnVuY3Rpb24gcmVwbGFjZUhyZWZzSWZJbnRlcm5hbExpbmsoYSl7aWYoYSYmYS5sZW5ndGgpe3ZhciBiO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspcmVwbGFjZUhyZWZJZkludGVybmFsTGluayhhW2JdKX19ZnVuY3Rpb24gdHJhY2tDb250ZW50SW1wcmVzc2lvbkNsaWNrSW50ZXJhY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2lmKGEpe3ZhciBkLGM9Y29udGVudC5maW5kUGFyZW50Q29udGVudE5vZGUoYSk7aWYoYiYmKGQ9Yi50YXJnZXR8fGIuc3JjRWxlbWVudCksZHx8KGQ9YSksaXNOb2RlQXV0aG9yaXplZFRvVHJpZ2dlckludGVyYWN0aW9uKGMsZCkpe2lmKHNldEV4cGlyZURhdGVUaW1lKGNvbmZpZ1RyYWNrZXJQYXVzZSkscXVlcnkuaXNMaW5rRWxlbWVudChhKSYmcXVlcnkuaGFzTm9kZUF0dHJpYnV0ZVdpdGhWYWx1ZShhLFwiaHJlZlwiKSYmcXVlcnkuaGFzTm9kZUF0dHJpYnV0ZVdpdGhWYWx1ZShhLGNvbnRlbnQuQ09OVEVOVF9UQVJHRVRfQVRUUikpe3ZhciBlPXF1ZXJ5LmdldEF0dHJpYnV0ZVZhbHVlRnJvbU5vZGUoYSxcImhyZWZcIik7IXN0YXJ0c1VybFdpdGhUcmFja2VyVXJsKGUpJiZhLndhc0NvbnRlbnRUYXJnZXRBdHRyUmVwbGFjZWQmJnF1ZXJ5LnNldEFueUF0dHJpYnV0ZShhLGNvbnRlbnQuQ09OVEVOVF9UQVJHRVRfQVRUUixcIlwiKX12YXIgZj1nZXRMaW5rSWZTaG91bGRCZVByb2Nlc3NlZChhKTtpZihsaW5rVHJhY2tpbmdJbnN0YWxsZWQmJmYmJmYudHlwZSlyZXR1cm4gZi50eXBlO2lmKHJlcGxhY2VIcmVmSWZJbnRlcm5hbExpbmsoYykpcmV0dXJuXCJocmVmXCI7dmFyIGc9Y29udGVudC5idWlsZENvbnRlbnRCbG9jayhjKTtpZihnKXt2YXIgaD1nLm5hbWUsaT1nLnBpZWNlLGo9Zy50YXJnZXQsaz1idWlsZENvbnRlbnRJbnRlcmFjdGlvblJlcXVlc3QoXCJjbGlja1wiLGgsaSxqKTtyZXR1cm4gc2VuZFJlcXVlc3Qoayxjb25maWdUcmFja2VyUGF1c2UpLGt9fX19fWZ1bmN0aW9uIHNldHVwSW50ZXJhY3Rpb25zVHJhY2tpbmcoYSl7aWYoYSYmYS5sZW5ndGgpe3ZhciBiLGM7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKyljPWNvbnRlbnQuZmluZFRhcmdldE5vZGUoYVtiXSksYyYmIWMuY29udGVudEludGVyYWN0aW9uVHJhY2tpbmdTZXR1cERvbmUmJihjLmNvbnRlbnRJbnRlcmFjdGlvblRyYWNraW5nU2V0dXBEb25lPSEwLGFkZEV2ZW50TGlzdGVuZXIoYyxcImNsaWNrXCIsdHJhY2tDb250ZW50SW1wcmVzc2lvbkNsaWNrSW50ZXJhY3Rpb24oYykpKX19ZnVuY3Rpb24gYnVpbGRDb250ZW50SW1wcmVzc2lvbnNSZXF1ZXN0cyhhLGIpe2lmKCFhfHwhYS5sZW5ndGgpcmV0dXJuW107dmFyIGMsZDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXdhc0NvbnRlbnRJbXByZXNzaW9uQWxyZWFkeVRyYWNrZWQoYVtjXSk/KGEuc3BsaWNlKGMsMSksYy0tKTp0cmFja2VkQ29udGVudEltcHJlc3Npb25zLnB1c2goYVtjXSk7aWYoIWF8fCFhLmxlbmd0aClyZXR1cm5bXTtyZXBsYWNlSHJlZnNJZkludGVybmFsTGluayhiKSxzZXR1cEludGVyYWN0aW9uc1RyYWNraW5nKGIpO3ZhciBlPVtdO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspZD1nZXRSZXF1ZXN0KGNvbnRlbnQuYnVpbGRJbXByZXNzaW9uUmVxdWVzdFBhcmFtcyhhW2NdLm5hbWUsYVtjXS5waWVjZSxhW2NdLnRhcmdldCksdm9pZCAwLFwiY29udGVudEltcHJlc3Npb25zXCIpLGUucHVzaChkKTtyZXR1cm4gZX1mdW5jdGlvbiBnZXRDb250ZW50SW1wcmVzc2lvbnNSZXF1ZXN0c0Zyb21Ob2RlcyhhKXt2YXIgYj1jb250ZW50LmNvbGxlY3RDb250ZW50KGEpO3JldHVybiBidWlsZENvbnRlbnRJbXByZXNzaW9uc1JlcXVlc3RzKGIsYSl9ZnVuY3Rpb24gZ2V0Q3VycmVudGx5VmlzaWJsZUNvbnRlbnRJbXByZXNzaW9uc1JlcXVlc3RzSWZOb3RUcmFja2VkWWV0KGEpe2lmKCFhfHwhYS5sZW5ndGgpcmV0dXJuW107dmFyIGI7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKyljb250ZW50LmlzTm9kZVZpc2libGUoYVtiXSl8fChhLnNwbGljZShiLDEpLGItLSk7cmV0dXJuIGEmJmEubGVuZ3RoP2dldENvbnRlbnRJbXByZXNzaW9uc1JlcXVlc3RzRnJvbU5vZGVzKGEpOltdfWZ1bmN0aW9uIGJ1aWxkQ29udGVudEltcHJlc3Npb25SZXF1ZXN0KGEsYixjKXt2YXIgZD1jb250ZW50LmJ1aWxkSW1wcmVzc2lvblJlcXVlc3RQYXJhbXMoYSxiLGMpO3JldHVybiBnZXRSZXF1ZXN0KGQsbnVsbCxcImNvbnRlbnRJbXByZXNzaW9uXCIpfWZ1bmN0aW9uIGJ1aWxkQ29udGVudEludGVyYWN0aW9uUmVxdWVzdE5vZGUoYSxiKXtpZihhKXt2YXIgYz1jb250ZW50LmZpbmRQYXJlbnRDb250ZW50Tm9kZShhKSxkPWNvbnRlbnQuYnVpbGRDb250ZW50QmxvY2soYyk7aWYoZClyZXR1cm4gYnx8KGI9XCJVbmtub3duXCIpLGJ1aWxkQ29udGVudEludGVyYWN0aW9uUmVxdWVzdChiLGQubmFtZSxkLnBpZWNlLGQudGFyZ2V0KX19ZnVuY3Rpb24gYnVpbGRFdmVudFJlcXVlc3QoYSxiLGMsZCl7cmV0dXJuXCJlX2M9XCIrZW5jb2RlV3JhcHBlcihhKStcIiZlX2E9XCIrZW5jb2RlV3JhcHBlcihiKSsoaXNEZWZpbmVkKGMpP1wiJmVfbj1cIitlbmNvZGVXcmFwcGVyKGMpOlwiXCIpKyhpc0RlZmluZWQoZCk/XCImZV92PVwiK2VuY29kZVdyYXBwZXIoZCk6XCJcIik7XG59ZnVuY3Rpb24gbG9nRXZlbnQoYSxiLGMsZCxlKXtpZigwPT09U3RyaW5nKGEpLmxlbmd0aHx8MD09PVN0cmluZyhiKS5sZW5ndGgpcmV0dXJuITE7dmFyIGY9Z2V0UmVxdWVzdChidWlsZEV2ZW50UmVxdWVzdChhLGIsYyxkKSxlLFwiZXZlbnRcIik7c2VuZFJlcXVlc3QoZixjb25maWdUcmFja2VyUGF1c2UpfWZ1bmN0aW9uIGxvZ1NpdGVTZWFyY2goYSxiLGMsZCl7dmFyIGU9Z2V0UmVxdWVzdChcInNlYXJjaD1cIitlbmNvZGVXcmFwcGVyKGEpKyhiP1wiJnNlYXJjaF9jYXQ9XCIrZW5jb2RlV3JhcHBlcihiKTpcIlwiKSsoaXNEZWZpbmVkKGMpP1wiJnNlYXJjaF9jb3VudD1cIitjOlwiXCIpLGQsXCJzaXRlc2VhcmNoXCIpO3NlbmRSZXF1ZXN0KGUsY29uZmlnVHJhY2tlclBhdXNlKX1mdW5jdGlvbiBsb2dHb2FsKGEsYixjKXt2YXIgZD1nZXRSZXF1ZXN0KFwiaWRnb2FsPVwiK2ErKGI/XCImcmV2ZW51ZT1cIitiOlwiXCIpLGMsXCJnb2FsXCIpO3NlbmRSZXF1ZXN0KGQsY29uZmlnVHJhY2tlclBhdXNlKX1mdW5jdGlvbiBsb2dMaW5rKGEsYixjLGQsZSl7dmFyIGY9YitcIj1cIitlbmNvZGVXcmFwcGVyKHB1cmlmeShhKSksZz1nZXRDb250ZW50SW50ZXJhY3Rpb25Ub1JlcXVlc3RJZlBvc3NpYmxlKGUsXCJjbGlja1wiLGEpO2cmJihmKz1cIiZcIitnKTt2YXIgaD1nZXRSZXF1ZXN0KGYsYyxcImxpbmtcIik7c2VuZFJlcXVlc3QoaCxkPzA6Y29uZmlnVHJhY2tlclBhdXNlLGQpfWZ1bmN0aW9uIHByZWZpeFByb3BlcnR5TmFtZShhLGIpe3JldHVyblwiXCIhPT1hP2ErYi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStiLnNsaWNlKDEpOmJ9ZnVuY3Rpb24gdHJhY2tDYWxsYmFjayhhKXt2YXIgYixjLGUsZD1bXCJcIixcIndlYmtpdFwiLFwibXNcIixcIm1velwiXTtpZighY29uZmlnQ291bnRQcmVSZW5kZXJlZClmb3IoYz0wO2M8ZC5sZW5ndGg7YysrKWlmKGU9ZFtjXSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZG9jdW1lbnRBbGlhcyxwcmVmaXhQcm9wZXJ0eU5hbWUoZSxcImhpZGRlblwiKSkpe1wicHJlcmVuZGVyXCI9PT1kb2N1bWVudEFsaWFzW3ByZWZpeFByb3BlcnR5TmFtZShlLFwidmlzaWJpbGl0eVN0YXRlXCIpXSYmKGI9ITApO2JyZWFrfXJldHVybiBiP3ZvaWQgYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudEFsaWFzLGUrXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsZnVuY3Rpb24gYigpe2RvY3VtZW50QWxpYXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlK1widmlzaWJpbGl0eWNoYW5nZVwiLGIsITEpLGEoKX0pOnZvaWQgYSgpfWZ1bmN0aW9uIHRyYWNrQ2FsbGJhY2tPbkxvYWQoYSl7XCJjb21wbGV0ZVwiPT09ZG9jdW1lbnRBbGlhcy5yZWFkeVN0YXRlP2EoKTp3aW5kb3dBbGlhcy5hZGRFdmVudExpc3RlbmVyP3dpbmRvd0FsaWFzLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsYSk6d2luZG93QWxpYXMuYXR0YWNoRXZlbnQmJndpbmRvd0FsaWFzLmF0dGFjaEV2ZW50KFwib25Mb2FkXCIsYSl9ZnVuY3Rpb24gdHJhY2tDYWxsYmFja09uUmVhZHkoYSl7dmFyIGI9ITE7Yj1kb2N1bWVudEFsaWFzLmF0dGFjaEV2ZW50P1wiY29tcGxldGVcIj09PWRvY3VtZW50QWxpYXMucmVhZHlTdGF0ZTpcImxvYWRpbmdcIiE9PWRvY3VtZW50QWxpYXMucmVhZHlTdGF0ZSxiP2EoKTpkb2N1bWVudEFsaWFzLmFkZEV2ZW50TGlzdGVuZXI/ZG9jdW1lbnRBbGlhcy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLGEpOmRvY3VtZW50QWxpYXMuYXR0YWNoRXZlbnQmJmRvY3VtZW50QWxpYXMuYXR0YWNoRXZlbnQoXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIixhKX1mdW5jdGlvbiBwcm9jZXNzQ2xpY2soYSl7dmFyIGI9Z2V0TGlua0lmU2hvdWxkQmVQcm9jZXNzZWQoYSk7YiYmYi50eXBlJiYoYi5ocmVmPXNhZmVEZWNvZGVXcmFwcGVyKGIuaHJlZiksbG9nTGluayhiLmhyZWYsYi50eXBlLHZvaWQgMCxudWxsLGEpKX1mdW5jdGlvbiBpc0lFOG9yT2xkZXIoKXtyZXR1cm4gZG9jdW1lbnRBbGlhcy5hbGwmJiFkb2N1bWVudEFsaWFzLmFkZEV2ZW50TGlzdGVuZXJ9ZnVuY3Rpb24gZ2V0S2V5Q29kZUZyb21FdmVudChhKXt2YXIgYj1hLndoaWNoLGM9dHlwZW9mIGEuYnV0dG9uO3JldHVybiBifHxcInVuZGVmaW5lZFwiPT09Y3x8KGlzSUU4b3JPbGRlcigpPzEmYS5idXR0b24/Yj0xOjImYS5idXR0b24/Yj0zOjQmYS5idXR0b24mJihiPTIpOjA9PT1hLmJ1dHRvbnx8XCIwXCI9PT1hLmJ1dHRvbj9iPTE6MSZhLmJ1dHRvbj9iPTI6MiZhLmJ1dHRvbiYmKGI9MykpLGJ9ZnVuY3Rpb24gZ2V0TmFtZU9mQ2xpY2tlZEJ1dHRvbihhKXtzd2l0Y2goZ2V0S2V5Q29kZUZyb21FdmVudChhKSl7Y2FzZSAxOnJldHVyblwibGVmdFwiO2Nhc2UgMjpyZXR1cm5cIm1pZGRsZVwiO2Nhc2UgMzpyZXR1cm5cInJpZ2h0XCJ9fWZ1bmN0aW9uIGdldFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoYSl7cmV0dXJuIGEudGFyZ2V0fHxhLnNyY0VsZW1lbnR9ZnVuY3Rpb24gY2xpY2tIYW5kbGVyKGEpe3JldHVybiBmdW5jdGlvbihiKXtiPWJ8fHdpbmRvd0FsaWFzLmV2ZW50O3ZhciBjPWdldE5hbWVPZkNsaWNrZWRCdXR0b24oYiksZD1nZXRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGIpO2lmKFwiY2xpY2tcIj09PWIudHlwZSl7dmFyIGU9ITE7YSYmXCJtaWRkbGVcIj09PWMmJihlPSEwKSxkJiYhZSYmcHJvY2Vzc0NsaWNrKGQpfWVsc2VcIm1vdXNlZG93blwiPT09Yi50eXBlP1wibWlkZGxlXCI9PT1jJiZkPyhsYXN0QnV0dG9uPWMsbGFzdFRhcmdldD1kKTpsYXN0QnV0dG9uPWxhc3RUYXJnZXQ9bnVsbDpcIm1vdXNldXBcIj09PWIudHlwZT8oYz09PWxhc3RCdXR0b24mJmQ9PT1sYXN0VGFyZ2V0JiZwcm9jZXNzQ2xpY2soZCksbGFzdEJ1dHRvbj1sYXN0VGFyZ2V0PW51bGwpOlwiY29udGV4dG1lbnVcIj09PWIudHlwZSYmcHJvY2Vzc0NsaWNrKGQpfX1mdW5jdGlvbiBhZGRDbGlja0xpc3RlbmVyKGEsYil7YWRkRXZlbnRMaXN0ZW5lcihhLFwiY2xpY2tcIixjbGlja0hhbmRsZXIoYiksITEpLGImJihhZGRFdmVudExpc3RlbmVyKGEsXCJtb3VzZXVwXCIsY2xpY2tIYW5kbGVyKGIpLCExKSxhZGRFdmVudExpc3RlbmVyKGEsXCJtb3VzZWRvd25cIixjbGlja0hhbmRsZXIoYiksITEpLGFkZEV2ZW50TGlzdGVuZXIoYSxcImNvbnRleHRtZW51XCIsY2xpY2tIYW5kbGVyKGIpLCExKSl9ZnVuY3Rpb24gYWRkQ2xpY2tMaXN0ZW5lcnMoYSl7aWYoIWxpbmtUcmFja2luZ0luc3RhbGxlZCl7bGlua1RyYWNraW5nSW5zdGFsbGVkPSEwO3ZhciBiLGM9Z2V0Q2xhc3Nlc1JlZ0V4cChjb25maWdJZ25vcmVDbGFzc2VzLFwiaWdub3JlXCIpLGQ9ZG9jdW1lbnRBbGlhcy5saW5rcztpZihkKWZvcihiPTA7YjxkLmxlbmd0aDtiKyspYy50ZXN0KGRbYl0uY2xhc3NOYW1lKXx8YWRkQ2xpY2tMaXN0ZW5lcihkW2JdLGEpfX1mdW5jdGlvbiBlbmFibGVUcmFja09ubHlWaXNpYmxlQ29udGVudChhLGIsYyl7ZnVuY3Rpb24gZygpe2Q9ITB9aWYoaXNUcmFja09ubHlWaXNpYmxlQ29udGVudEVuYWJsZWQpcmV0dXJuITA7aXNUcmFja09ubHlWaXNpYmxlQ29udGVudEVuYWJsZWQ9ITA7dmFyIGUsZixkPSExO3RyYWNrQ2FsbGJhY2tPbkxvYWQoZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGEpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpc1RyYWNrT25seVZpc2libGVDb250ZW50RW5hYmxlZCYmKGQ9ITEsYy50cmFja1Zpc2libGVDb250ZW50SW1wcmVzc2lvbnMoKSxoKGEpKX0sYSl9ZnVuY3Rpb24gaShhKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aXNUcmFja09ubHlWaXNpYmxlQ29udGVudEVuYWJsZWQmJihkJiYoZD0hMSxjLnRyYWNrVmlzaWJsZUNvbnRlbnRJbXByZXNzaW9ucygpKSxpKGEpKX0sYSl9aWYoYSl7Zm9yKGU9W1wic2Nyb2xsXCIsXCJyZXNpemVcIl0sZj0wO2Y8ZS5sZW5ndGg7ZisrKWRvY3VtZW50QWxpYXMuYWRkRXZlbnRMaXN0ZW5lcj9kb2N1bWVudEFsaWFzLmFkZEV2ZW50TGlzdGVuZXIoZVtmXSxnKTp3aW5kb3dBbGlhcy5hdHRhY2hFdmVudChcIm9uXCIrZVtmXSxnKTtpKDEwMCl9YiYmYj4wJiYoYj1wYXJzZUludChiLDEwKSxoKGIpKX0pfWZ1bmN0aW9uIGRldGVjdEJyb3dzZXJGZWF0dXJlcygpe3ZhciBhLGIsYz17cGRmOlwiYXBwbGljYXRpb24vcGRmXCIscXQ6XCJ2aWRlby9xdWlja3RpbWVcIixyZWFscDpcImF1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdpblwiLHdtYTpcImFwcGxpY2F0aW9uL3gtbXBsYXllcjJcIixkaXI6XCJhcHBsaWNhdGlvbi94LWRpcmVjdG9yXCIsZmxhOlwiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2hcIixqYXZhOlwiYXBwbGljYXRpb24veC1qYXZhLXZtXCIsZ2VhcnM6XCJhcHBsaWNhdGlvbi94LWdvb2dsZWdlYXJzXCIsYWc6XCJhcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0XCJ9LGQ9d2luZG93QWxpYXMuZGV2aWNlUGl4ZWxSYXRpb3x8MTtpZighbmV3IFJlZ0V4cChcIk1TSUVcIikudGVzdChuYXZpZ2F0b3JBbGlhcy51c2VyQWdlbnQpKXtpZihuYXZpZ2F0b3JBbGlhcy5taW1lVHlwZXMmJm5hdmlnYXRvckFsaWFzLm1pbWVUeXBlcy5sZW5ndGgpZm9yKGEgaW4gYylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxhKSYmKGI9bmF2aWdhdG9yQWxpYXMubWltZVR5cGVzW2NbYV1dLGJyb3dzZXJGZWF0dXJlc1thXT1iJiZiLmVuYWJsZWRQbHVnaW4/XCIxXCI6XCIwXCIpO1widW5rbm93blwiIT10eXBlb2YgbmF2aWdhdG9yLmphdmFFbmFibGVkJiZpc0RlZmluZWQobmF2aWdhdG9yQWxpYXMuamF2YUVuYWJsZWQpJiZuYXZpZ2F0b3JBbGlhcy5qYXZhRW5hYmxlZCgpJiYoYnJvd3NlckZlYXR1cmVzLmphdmE9XCIxXCIpLGlzRnVuY3Rpb24od2luZG93QWxpYXMuR2VhcnNGYWN0b3J5KSYmKGJyb3dzZXJGZWF0dXJlcy5nZWFycz1cIjFcIiksYnJvd3NlckZlYXR1cmVzLmNvb2tpZT1oYXNDb29raWVzKCl9YnJvd3NlckZlYXR1cmVzLnJlcz1zY3JlZW5BbGlhcy53aWR0aCpkK1wieFwiK3NjcmVlbkFsaWFzLmhlaWdodCpkfWZ1bmN0aW9uIHJlZ2lzdGVySG9vayhob29rTmFtZSx1c2VySG9vayl7dmFyIGhvb2tPYmo9bnVsbDtpZihpc1N0cmluZyhob29rTmFtZSkmJiFpc0RlZmluZWQocmVnaXN0ZXJlZEhvb2tzW2hvb2tOYW1lXSkmJnVzZXJIb29rKXtpZihpc09iamVjdCh1c2VySG9vaykpaG9va09iaj11c2VySG9vaztlbHNlIGlmKGlzU3RyaW5nKHVzZXJIb29rKSl0cnl7ZXZhbChcImhvb2tPYmogPVwiK3VzZXJIb29rKX1jYXRjaChhKXt9cmVnaXN0ZXJlZEhvb2tzW2hvb2tOYW1lXT1ob29rT2JqfXJldHVybiBob29rT2JqfXZhciByZWdpc3RlcmVkSG9va3M9e30sbG9jYXRpb25BcnJheT11cmxGaXh1cChkb2N1bWVudEFsaWFzLmRvbWFpbix3aW5kb3dBbGlhcy5sb2NhdGlvbi5ocmVmLGdldFJlZmVycmVyKCkpLGRvbWFpbkFsaWFzPWRvbWFpbkZpeHVwKGxvY2F0aW9uQXJyYXlbMF0pLGxvY2F0aW9uSHJlZkFsaWFzPXNhZmVEZWNvZGVXcmFwcGVyKGxvY2F0aW9uQXJyYXlbMV0pLGNvbmZpZ1JlZmVycmVyVXJsPXNhZmVEZWNvZGVXcmFwcGVyKGxvY2F0aW9uQXJyYXlbMl0pLGVuYWJsZUpTRXJyb3JUcmFja2luZz0hMSxkZWZhdWx0UmVxdWVzdE1ldGhvZD1cIkdFVFwiLGNvbmZpZ1JlcXVlc3RNZXRob2Q9ZGVmYXVsdFJlcXVlc3RNZXRob2QsZGVmYXVsdFJlcXVlc3RDb250ZW50VHlwZT1cImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLGNvbmZpZ1JlcXVlc3RDb250ZW50VHlwZT1kZWZhdWx0UmVxdWVzdENvbnRlbnRUeXBlLGNvbmZpZ1RyYWNrZXJVcmw9dHJhY2tlclVybHx8XCJcIixjb25maWdBcGlVcmw9XCJcIixjb25maWdBcHBlbmRUb1RyYWNraW5nVXJsPVwiXCIsY29uZmlnVHJhY2tlclNpdGVJZD1zaXRlSWR8fFwiXCIsY29uZmlnVXNlcklkPVwiXCIsdmlzaXRvclVVSUQ9XCJcIixjb25maWdDdXN0b21VcmwsY29uZmlnVGl0bGU9ZG9jdW1lbnRBbGlhcy50aXRsZSxjb25maWdEb3dubG9hZEV4dGVuc2lvbnM9W1wiN3pcIixcImFhY1wiLFwiYXBrXCIsXCJhcmNcIixcImFyalwiLFwiYXNmXCIsXCJhc3hcIixcImF2aVwiLFwiYXp3M1wiLFwiYmluXCIsXCJjc3ZcIixcImRlYlwiLFwiZG1nXCIsXCJkb2NcIixcImRvY3hcIixcImVwdWJcIixcImV4ZVwiLFwiZmx2XCIsXCJnaWZcIixcImd6XCIsXCJnemlwXCIsXCJocXhcIixcImlib29rc1wiLFwiamFyXCIsXCJqcGdcIixcImpwZWdcIixcImpzXCIsXCJtb2JpXCIsXCJtcDJcIixcIm1wM1wiLFwibXA0XCIsXCJtcGdcIixcIm1wZWdcIixcIm1vdlwiLFwibW92aWVcIixcIm1zaVwiLFwibXNwXCIsXCJvZGJcIixcIm9kZlwiLFwib2RnXCIsXCJvZHNcIixcIm9kdFwiLFwib2dnXCIsXCJvZ3ZcIixcInBkZlwiLFwicGhwc1wiLFwicG5nXCIsXCJwcHRcIixcInBwdHhcIixcInF0XCIsXCJxdG1cIixcInJhXCIsXCJyYW1cIixcInJhclwiLFwicnBtXCIsXCJzZWFcIixcInNpdFwiLFwidGFyXCIsXCJ0YnpcIixcInRiejJcIixcImJ6XCIsXCJiejJcIixcInRnelwiLFwidG9ycmVudFwiLFwidHh0XCIsXCJ3YXZcIixcIndtYVwiLFwid212XCIsXCJ3cGRcIixcInhsc1wiLFwieGxzeFwiLFwieG1sXCIsXCJ6XCIsXCJ6aXBcIl0sY29uZmlnSG9zdHNBbGlhcz1bZG9tYWluQWxpYXNdLGNvbmZpZ0lnbm9yZUNsYXNzZXM9W10sY29uZmlnRG93bmxvYWRDbGFzc2VzPVtdLGNvbmZpZ0xpbmtDbGFzc2VzPVtdLGNvbmZpZ1RyYWNrZXJQYXVzZT01MDAsY29uZmlnTWluaW11bVZpc2l0VGltZSxjb25maWdIZWFydEJlYXREZWxheSxoZWFydEJlYXRQaW5nSWZBY3Rpdml0eUFsaWFzLGNvbmZpZ0Rpc2NhcmRIYXNoVGFnLGNvbmZpZ0N1c3RvbURhdGEsY29uZmlnQ2FtcGFpZ25OYW1lUGFyYW1ldGVycz1bXCJwa19jYW1wYWlnblwiLFwicGl3aWtfY2FtcGFpZ25cIixcInV0bV9jYW1wYWlnblwiLFwidXRtX3NvdXJjZVwiLFwidXRtX21lZGl1bVwiXSxjb25maWdDYW1wYWlnbktleXdvcmRQYXJhbWV0ZXJzPVtcInBrX2t3ZFwiLFwicGl3aWtfa3dkXCIsXCJ1dG1fdGVybVwiXSxjb25maWdDb29raWVOYW1lUHJlZml4PVwiX3BrX1wiLGNvbmZpZ0Nvb2tpZURvbWFpbixjb25maWdDb29raWVQYXRoLGNvbmZpZ0Nvb2tpZXNEaXNhYmxlZD0hMSxjb25maWdEb05vdFRyYWNrLGNvbmZpZ0NvdW50UHJlUmVuZGVyZWQsY29uZmlnQ29udmVyc2lvbkF0dHJpYnV0aW9uRmlyc3RSZWZlcnJlcixjb25maWdWaXNpdG9yQ29va2llVGltZW91dD0zMzk1NTJlNSxjb25maWdTZXNzaW9uQ29va2llVGltZW91dD0xOGU1LGNvbmZpZ1JlZmVycmFsQ29va2llVGltZW91dD0xNTc2OGU2LGNvbmZpZ1BlcmZvcm1hbmNlVHJhY2tpbmdFbmFibGVkPSEwLGNvbmZpZ1BlcmZvcm1hbmNlR2VuZXJhdGlvblRpbWU9MCxjb25maWdTdG9yZUN1c3RvbVZhcmlhYmxlc0luQ29va2llPSExLGN1c3RvbVZhcmlhYmxlcz0hMSxjb25maWdDdXN0b21SZXF1ZXN0Q29udGVudFByb2Nlc3NpbmcsY3VzdG9tVmFyaWFibGVzUGFnZT17fSxjdXN0b21WYXJpYWJsZXNFdmVudD17fSxjdXN0b21WYXJpYWJsZU1heGltdW1MZW5ndGg9MjAwLGVjb21tZXJjZUl0ZW1zPXt9LGJyb3dzZXJGZWF0dXJlcz17fSx0cmFja2VkQ29udGVudEltcHJlc3Npb25zPVtdLGlzVHJhY2tPbmx5VmlzaWJsZUNvbnRlbnRFbmFibGVkPSExLHRpbWVOZXh0VHJhY2tpbmdSZXF1ZXN0Q2FuQmVFeGVjdXRlZEltbWVkaWF0ZWx5PSExLGxpbmtUcmFja2luZ0luc3RhbGxlZD0hMSxsaW5rVHJhY2tpbmdFbmFibGVkPSExLGhlYXJ0QmVhdFNldFVwPSExLGxhc3RUcmFja2VyUmVxdWVzdFRpbWU9bnVsbCxoZWFydEJlYXRUaW1lb3V0LGxhc3RCdXR0b24sbGFzdFRhcmdldCxoYXNoPXNoYTEsZG9tYWluSGFzaDtyZXR1cm4gaGVhcnRCZWF0UGluZ0lmQWN0aXZpdHlBbGlhcz1mdW5jdGlvbigpe3ZhciBiPW5ldyBEYXRlO2lmKGxhc3RUcmFja2VyUmVxdWVzdFRpbWUrY29uZmlnSGVhcnRCZWF0RGVsYXk8PWIuZ2V0VGltZSgpKXt2YXIgYz1nZXRSZXF1ZXN0KFwicGluZz0xXCIsbnVsbCxcInBpbmdcIik7cmV0dXJuIHNlbmRSZXF1ZXN0KGMsY29uZmlnVHJhY2tlclBhdXNlKSwhMH1yZXR1cm4hMX0sZGV0ZWN0QnJvd3NlckZlYXR1cmVzKCksdXBkYXRlRG9tYWluSGFzaCgpLHNldFZpc2l0b3JJZENvb2tpZSgpLGV4ZWN1dGVQbHVnaW5NZXRob2QoXCJydW5cIixyZWdpc3Rlckhvb2spLHtob29rOnJlZ2lzdGVyZWRIb29rcyxnZXRIb29rOmZ1bmN0aW9uKGEpe3JldHVybiByZWdpc3RlcmVkSG9va3NbYV19LGdldFF1ZXJ5OmZ1bmN0aW9uKCl7cmV0dXJuIHF1ZXJ5fSxnZXRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnRlbnR9LGJ1aWxkQ29udGVudEltcHJlc3Npb25SZXF1ZXN0OmJ1aWxkQ29udGVudEltcHJlc3Npb25SZXF1ZXN0LGJ1aWxkQ29udGVudEludGVyYWN0aW9uUmVxdWVzdDpidWlsZENvbnRlbnRJbnRlcmFjdGlvblJlcXVlc3QsYnVpbGRDb250ZW50SW50ZXJhY3Rpb25SZXF1ZXN0Tm9kZTpidWlsZENvbnRlbnRJbnRlcmFjdGlvblJlcXVlc3ROb2RlLGJ1aWxkQ29udGVudEludGVyYWN0aW9uVHJhY2tpbmdSZWRpcmVjdFVybDpidWlsZENvbnRlbnRJbnRlcmFjdGlvblRyYWNraW5nUmVkaXJlY3RVcmwsZ2V0Q29udGVudEltcHJlc3Npb25zUmVxdWVzdHNGcm9tTm9kZXM6Z2V0Q29udGVudEltcHJlc3Npb25zUmVxdWVzdHNGcm9tTm9kZXMsZ2V0Q3VycmVudGx5VmlzaWJsZUNvbnRlbnRJbXByZXNzaW9uc1JlcXVlc3RzSWZOb3RUcmFja2VkWWV0OmdldEN1cnJlbnRseVZpc2libGVDb250ZW50SW1wcmVzc2lvbnNSZXF1ZXN0c0lmTm90VHJhY2tlZFlldCx0cmFja0NhbGxiYWNrT25Mb2FkOnRyYWNrQ2FsbGJhY2tPbkxvYWQsdHJhY2tDYWxsYmFja09uUmVhZHk6dHJhY2tDYWxsYmFja09uUmVhZHksYnVpbGRDb250ZW50SW1wcmVzc2lvbnNSZXF1ZXN0czpidWlsZENvbnRlbnRJbXByZXNzaW9uc1JlcXVlc3RzLHdhc0NvbnRlbnRJbXByZXNzaW9uQWxyZWFkeVRyYWNrZWQ6d2FzQ29udGVudEltcHJlc3Npb25BbHJlYWR5VHJhY2tlZCxhcHBlbmRDb250ZW50SW50ZXJhY3Rpb25Ub1JlcXVlc3RJZlBvc3NpYmxlOmdldENvbnRlbnRJbnRlcmFjdGlvblRvUmVxdWVzdElmUG9zc2libGUsc2V0dXBJbnRlcmFjdGlvbnNUcmFja2luZzpzZXR1cEludGVyYWN0aW9uc1RyYWNraW5nLHRyYWNrQ29udGVudEltcHJlc3Npb25DbGlja0ludGVyYWN0aW9uOnRyYWNrQ29udGVudEltcHJlc3Npb25DbGlja0ludGVyYWN0aW9uLGludGVybmFsSXNOb2RlVmlzaWJsZTppc1Zpc2libGUsaXNOb2RlQXV0aG9yaXplZFRvVHJpZ2dlckludGVyYWN0aW9uOmlzTm9kZUF1dGhvcml6ZWRUb1RyaWdnZXJJbnRlcmFjdGlvbixyZXBsYWNlSHJlZklmSW50ZXJuYWxMaW5rOnJlcGxhY2VIcmVmSWZJbnRlcm5hbExpbmssZ2V0Q29uZmlnRG93bmxvYWRFeHRlbnNpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbmZpZ0Rvd25sb2FkRXh0ZW5zaW9uc30sZW5hYmxlVHJhY2tPbmx5VmlzaWJsZUNvbnRlbnQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZW5hYmxlVHJhY2tPbmx5VmlzaWJsZUNvbnRlbnQoYSxiLHRoaXMpfSxjbGVhclRyYWNrZWRDb250ZW50SW1wcmVzc2lvbnM6ZnVuY3Rpb24oKXt0cmFja2VkQ29udGVudEltcHJlc3Npb25zPVtdfSxnZXRUcmFja2VkQ29udGVudEltcHJlc3Npb25zOmZ1bmN0aW9uKCl7cmV0dXJuIHRyYWNrZWRDb250ZW50SW1wcmVzc2lvbnN9LGNsZWFyRW5hYmxlVHJhY2tPbmx5VmlzaWJsZUNvbnRlbnQ6ZnVuY3Rpb24oKXtpc1RyYWNrT25seVZpc2libGVDb250ZW50RW5hYmxlZD0hMX0sZGlzYWJsZUxpbmtUcmFja2luZzpmdW5jdGlvbigpe2xpbmtUcmFja2luZ0luc3RhbGxlZD0hMSxsaW5rVHJhY2tpbmdFbmFibGVkPSExfSxnZXRDb25maWdWaXNpdG9yQ29va2llVGltZW91dDpmdW5jdGlvbigpe3JldHVybiBjb25maWdWaXNpdG9yQ29va2llVGltZW91dH0sZ2V0UmVtYWluaW5nVmlzaXRvckNvb2tpZVRpbWVvdXQ6Z2V0UmVtYWluaW5nVmlzaXRvckNvb2tpZVRpbWVvdXQsZ2V0VmlzaXRvcklkOmZ1bmN0aW9uKCl7cmV0dXJuIGdldFZhbHVlc0Zyb21WaXNpdG9ySWRDb29raWUoKS51dWlkfSxnZXRWaXNpdG9ySW5mbzpmdW5jdGlvbigpe3JldHVybiBsb2FkVmlzaXRvcklkQ29va2llKCl9LGdldEF0dHJpYnV0aW9uSW5mbzpmdW5jdGlvbigpe3JldHVybiBsb2FkUmVmZXJyZXJBdHRyaWJ1dGlvbkNvb2tpZSgpfSxnZXRBdHRyaWJ1dGlvbkNhbXBhaWduTmFtZTpmdW5jdGlvbigpe3JldHVybiBsb2FkUmVmZXJyZXJBdHRyaWJ1dGlvbkNvb2tpZSgpWzBdfSxnZXRBdHRyaWJ1dGlvbkNhbXBhaWduS2V5d29yZDpmdW5jdGlvbigpe3JldHVybiBsb2FkUmVmZXJyZXJBdHRyaWJ1dGlvbkNvb2tpZSgpWzFdfSxnZXRBdHRyaWJ1dGlvblJlZmVycmVyVGltZXN0YW1wOmZ1bmN0aW9uKCl7cmV0dXJuIGxvYWRSZWZlcnJlckF0dHJpYnV0aW9uQ29va2llKClbMl19LGdldEF0dHJpYnV0aW9uUmVmZXJyZXJVcmw6ZnVuY3Rpb24oKXtyZXR1cm4gbG9hZFJlZmVycmVyQXR0cmlidXRpb25Db29raWUoKVszXX0sc2V0VHJhY2tlclVybDpmdW5jdGlvbihhKXtjb25maWdUcmFja2VyVXJsPWF9LGdldFRyYWNrZXJVcmw6ZnVuY3Rpb24oKXtyZXR1cm4gY29uZmlnVHJhY2tlclVybH0sZ2V0U2l0ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbmZpZ1RyYWNrZXJTaXRlSWR9LHNldFNpdGVJZDpmdW5jdGlvbihhKXtzZXRTaXRlSWQoYSl9LHNldFVzZXJJZDpmdW5jdGlvbihhKXtpc0RlZmluZWQoYSkmJmEubGVuZ3RoJiYoY29uZmlnVXNlcklkPWEsdmlzaXRvclVVSUQ9aGFzaChjb25maWdVc2VySWQpLnN1YnN0cigwLDE2KSl9LGdldFVzZXJJZDpmdW5jdGlvbigpe3JldHVybiBjb25maWdVc2VySWR9LHNldEN1c3RvbURhdGE6ZnVuY3Rpb24oYSxiKXtpc09iamVjdChhKT9jb25maWdDdXN0b21EYXRhPWE6KGNvbmZpZ0N1c3RvbURhdGF8fChjb25maWdDdXN0b21EYXRhPXt9KSxjb25maWdDdXN0b21EYXRhW2FdPWIpfSxnZXRDdXN0b21EYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbmZpZ0N1c3RvbURhdGF9LHNldEN1c3RvbVJlcXVlc3RQcm9jZXNzaW5nOmZ1bmN0aW9uKGEpe2NvbmZpZ0N1c3RvbVJlcXVlc3RDb250ZW50UHJvY2Vzc2luZz1hfSxhcHBlbmRUb1RyYWNraW5nVXJsOmZ1bmN0aW9uKGEpe2NvbmZpZ0FwcGVuZFRvVHJhY2tpbmdVcmw9YX0sZ2V0UmVxdWVzdDpmdW5jdGlvbihhKXtyZXR1cm4gZ2V0UmVxdWVzdChhKX0sYWRkUGx1Z2luOmZ1bmN0aW9uKGEsYil7cGx1Z2luc1thXT1ifSxzZXRDdXN0b21WYXJpYWJsZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZTtpc0RlZmluZWQoZCl8fChkPVwidmlzaXRcIiksaXNEZWZpbmVkKGIpJiYoaXNEZWZpbmVkKGMpfHwoYz1cIlwiKSxhPjAmJihiPWlzU3RyaW5nKGIpP2I6U3RyaW5nKGIpLGM9aXNTdHJpbmcoYyk/YzpTdHJpbmcoYyksZT1bYi5zbGljZSgwLGN1c3RvbVZhcmlhYmxlTWF4aW11bUxlbmd0aCksYy5zbGljZSgwLGN1c3RvbVZhcmlhYmxlTWF4aW11bUxlbmd0aCldLFwidmlzaXRcIj09PWR8fDI9PT1kPyhsb2FkQ3VzdG9tVmFyaWFibGVzKCksY3VzdG9tVmFyaWFibGVzW2FdPWUpOlwicGFnZVwiPT09ZHx8Mz09PWQ/Y3VzdG9tVmFyaWFibGVzUGFnZVthXT1lOlwiZXZlbnRcIj09PWQmJihjdXN0b21WYXJpYWJsZXNFdmVudFthXT1lKSkpfSxnZXRDdXN0b21WYXJpYWJsZTpmdW5jdGlvbihhLGIpe3ZhciBjO3JldHVybiBpc0RlZmluZWQoYil8fChiPVwidmlzaXRcIiksXCJwYWdlXCI9PT1ifHwzPT09Yj9jPWN1c3RvbVZhcmlhYmxlc1BhZ2VbYV06XCJldmVudFwiPT09Yj9jPWN1c3RvbVZhcmlhYmxlc0V2ZW50W2FdOlwidmlzaXRcIiE9PWImJjIhPT1ifHwobG9hZEN1c3RvbVZhcmlhYmxlcygpLGM9Y3VzdG9tVmFyaWFibGVzW2FdKSwhKCFpc0RlZmluZWQoYyl8fGMmJlwiXCI9PT1jWzBdKSYmY30sZGVsZXRlQ3VzdG9tVmFyaWFibGU6ZnVuY3Rpb24oYSxiKXt0aGlzLmdldEN1c3RvbVZhcmlhYmxlKGEsYikmJnRoaXMuc2V0Q3VzdG9tVmFyaWFibGUoYSxcIlwiLFwiXCIsYil9LHN0b3JlQ3VzdG9tVmFyaWFibGVzSW5Db29raWU6ZnVuY3Rpb24oKXtjb25maWdTdG9yZUN1c3RvbVZhcmlhYmxlc0luQ29va2llPSEwfSxzZXRMaW5rVHJhY2tpbmdUaW1lcjpmdW5jdGlvbihhKXtjb25maWdUcmFja2VyUGF1c2U9YX0sc2V0RG93bmxvYWRFeHRlbnNpb25zOmZ1bmN0aW9uKGEpe2lzU3RyaW5nKGEpJiYoYT1hLnNwbGl0KFwifFwiKSksY29uZmlnRG93bmxvYWRFeHRlbnNpb25zPWF9LGFkZERvd25sb2FkRXh0ZW5zaW9uczpmdW5jdGlvbihhKXt2YXIgYjtmb3IoaXNTdHJpbmcoYSkmJihhPWEuc3BsaXQoXCJ8XCIpKSxiPTA7YjxhLmxlbmd0aDtiKyspY29uZmlnRG93bmxvYWRFeHRlbnNpb25zLnB1c2goYVtiXSl9LHJlbW92ZURvd25sb2FkRXh0ZW5zaW9uczpmdW5jdGlvbihhKXt2YXIgYixjPVtdO2Zvcihpc1N0cmluZyhhKSYmKGE9YS5zcGxpdChcInxcIikpLGI9MDtiPGNvbmZpZ0Rvd25sb2FkRXh0ZW5zaW9ucy5sZW5ndGg7YisrKWluZGV4T2ZBcnJheShhLGNvbmZpZ0Rvd25sb2FkRXh0ZW5zaW9uc1tiXSk9PT0tMSYmYy5wdXNoKGNvbmZpZ0Rvd25sb2FkRXh0ZW5zaW9uc1tiXSk7Y29uZmlnRG93bmxvYWRFeHRlbnNpb25zPWN9LHNldERvbWFpbnM6ZnVuY3Rpb24oYSl7Y29uZmlnSG9zdHNBbGlhcz1pc1N0cmluZyhhKT9bYV06YSxjb25maWdIb3N0c0FsaWFzLnB1c2goZG9tYWluQWxpYXMpfSxzZXRJZ25vcmVDbGFzc2VzOmZ1bmN0aW9uKGEpe2NvbmZpZ0lnbm9yZUNsYXNzZXM9aXNTdHJpbmcoYSk/W2FdOmF9LHNldFJlcXVlc3RNZXRob2Q6ZnVuY3Rpb24oYSl7Y29uZmlnUmVxdWVzdE1ldGhvZD1hfHxkZWZhdWx0UmVxdWVzdE1ldGhvZH0sc2V0UmVxdWVzdENvbnRlbnRUeXBlOmZ1bmN0aW9uKGEpe2NvbmZpZ1JlcXVlc3RDb250ZW50VHlwZT1hfHxkZWZhdWx0UmVxdWVzdENvbnRlbnRUeXBlfSxzZXRSZWZlcnJlclVybDpmdW5jdGlvbihhKXtjb25maWdSZWZlcnJlclVybD1hfSxzZXRDdXN0b21Vcmw6ZnVuY3Rpb24oYSl7Y29uZmlnQ3VzdG9tVXJsPXJlc29sdmVSZWxhdGl2ZVJlZmVyZW5jZShsb2NhdGlvbkhyZWZBbGlhcyxhKX0sc2V0RG9jdW1lbnRUaXRsZTpmdW5jdGlvbihhKXtjb25maWdUaXRsZT1hfSxzZXRBUElVcmw6ZnVuY3Rpb24oYSl7Y29uZmlnQXBpVXJsPWF9LHNldERvd25sb2FkQ2xhc3NlczpmdW5jdGlvbihhKXtjb25maWdEb3dubG9hZENsYXNzZXM9aXNTdHJpbmcoYSk/W2FdOmF9LHNldExpbmtDbGFzc2VzOmZ1bmN0aW9uKGEpe2NvbmZpZ0xpbmtDbGFzc2VzPWlzU3RyaW5nKGEpP1thXTphfSxzZXRDYW1wYWlnbk5hbWVLZXk6ZnVuY3Rpb24oYSl7Y29uZmlnQ2FtcGFpZ25OYW1lUGFyYW1ldGVycz1pc1N0cmluZyhhKT9bYV06YX0sc2V0Q2FtcGFpZ25LZXl3b3JkS2V5OmZ1bmN0aW9uKGEpe2NvbmZpZ0NhbXBhaWduS2V5d29yZFBhcmFtZXRlcnM9aXNTdHJpbmcoYSk/W2FdOmF9LGRpc2NhcmRIYXNoVGFnOmZ1bmN0aW9uKGEpe2NvbmZpZ0Rpc2NhcmRIYXNoVGFnPWF9LHNldENvb2tpZU5hbWVQcmVmaXg6ZnVuY3Rpb24oYSl7Y29uZmlnQ29va2llTmFtZVByZWZpeD1hLGN1c3RvbVZhcmlhYmxlcz1nZXRDdXN0b21WYXJpYWJsZXNGcm9tQ29va2llKCl9LHNldENvb2tpZURvbWFpbjpmdW5jdGlvbihhKXt2YXIgYj1kb21haW5GaXh1cChhKTtpc1Bvc3NpYmxlVG9TZXRDb29raWVPbkRvbWFpbihiKSYmKGNvbmZpZ0Nvb2tpZURvbWFpbj1iLHVwZGF0ZURvbWFpbkhhc2goKSl9LHNldENvb2tpZVBhdGg6ZnVuY3Rpb24oYSl7Y29uZmlnQ29va2llUGF0aD1hLHVwZGF0ZURvbWFpbkhhc2goKX0sc2V0VmlzaXRvckNvb2tpZVRpbWVvdXQ6ZnVuY3Rpb24oYSl7Y29uZmlnVmlzaXRvckNvb2tpZVRpbWVvdXQ9MWUzKmF9LHNldFNlc3Npb25Db29raWVUaW1lb3V0OmZ1bmN0aW9uKGEpe2NvbmZpZ1Nlc3Npb25Db29raWVUaW1lb3V0PTFlMyphfSxzZXRSZWZlcnJhbENvb2tpZVRpbWVvdXQ6ZnVuY3Rpb24oYSl7Y29uZmlnUmVmZXJyYWxDb29raWVUaW1lb3V0PTFlMyphfSxzZXRDb252ZXJzaW9uQXR0cmlidXRpb25GaXJzdFJlZmVycmVyOmZ1bmN0aW9uKGEpe2NvbmZpZ0NvbnZlcnNpb25BdHRyaWJ1dGlvbkZpcnN0UmVmZXJyZXI9YX0sZGlzYWJsZUNvb2tpZXM6ZnVuY3Rpb24oKXtjb25maWdDb29raWVzRGlzYWJsZWQ9ITAsYnJvd3NlckZlYXR1cmVzLmNvb2tpZT1cIjBcIixjb25maWdUcmFja2VyU2l0ZUlkJiZkZWxldGVDb29raWVzKCl9LGRlbGV0ZUNvb2tpZXM6ZnVuY3Rpb24oKXtkZWxldGVDb29raWVzKCl9LHNldERvTm90VHJhY2s6ZnVuY3Rpb24oYSl7dmFyIGI9bmF2aWdhdG9yQWxpYXMuZG9Ob3RUcmFja3x8bmF2aWdhdG9yQWxpYXMubXNEb05vdFRyYWNrO2NvbmZpZ0RvTm90VHJhY2s9YSYmKFwieWVzXCI9PT1ifHxcIjFcIj09PWIpLGNvbmZpZ0RvTm90VHJhY2smJnRoaXMuZGlzYWJsZUNvb2tpZXMoKX0sYWRkTGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXthZGRDbGlja0xpc3RlbmVyKGEsYil9LGVuYWJsZUxpbmtUcmFja2luZzpmdW5jdGlvbihhKXtsaW5rVHJhY2tpbmdFbmFibGVkPSEwLGhhc0xvYWRlZD9hZGRDbGlja0xpc3RlbmVycyhhKTpyZWdpc3RlcmVkT25Mb2FkSGFuZGxlcnMucHVzaChmdW5jdGlvbigpe2FkZENsaWNrTGlzdGVuZXJzKGEpfSl9LGVuYWJsZUpTRXJyb3JUcmFja2luZzpmdW5jdGlvbigpe2lmKCFlbmFibGVKU0Vycm9yVHJhY2tpbmcpe2VuYWJsZUpTRXJyb3JUcmFja2luZz0hMDt2YXIgYT13aW5kb3dBbGlhcy5vbmVycm9yO3dpbmRvd0FsaWFzLm9uZXJyb3I9ZnVuY3Rpb24oYixjLGQsZSxmKXtyZXR1cm4gdHJhY2tDYWxsYmFjayhmdW5jdGlvbigpe3ZhciBhPVwiSmF2YVNjcmlwdCBFcnJvcnNcIixmPWMrXCI6XCIrZDtlJiYoZis9XCI6XCIrZSksbG9nRXZlbnQoYSxmLGIpfSksISFhJiZhKGIsYyxkLGUsZil9fX0sZGlzYWJsZVBlcmZvcm1hbmNlVHJhY2tpbmc6ZnVuY3Rpb24oKXtjb25maWdQZXJmb3JtYW5jZVRyYWNraW5nRW5hYmxlZD0hMX0sc2V0R2VuZXJhdGlvblRpbWVNczpmdW5jdGlvbihhKXtjb25maWdQZXJmb3JtYW5jZUdlbmVyYXRpb25UaW1lPXBhcnNlSW50KGEsMTApfSxlbmFibGVIZWFydEJlYXRUaW1lcjpmdW5jdGlvbihhKXthPU1hdGgubWF4KGEsMSksY29uZmlnSGVhcnRCZWF0RGVsYXk9MWUzKihhfHwxNSksbnVsbCE9PWxhc3RUcmFja2VyUmVxdWVzdFRpbWUmJnNldFVwSGVhcnRCZWF0KCl9LGRpc2FibGVIZWFydEJlYXRUaW1lcjpmdW5jdGlvbigpe2hlYXJ0QmVhdERvd24oKSxjb25maWdIZWFydEJlYXREZWxheT1udWxsLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIixoZWFydEJlYXRPbkZvY3VzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIixoZWFydEJlYXRPbkJsdXIpfSxraWxsRnJhbWU6ZnVuY3Rpb24oKXt3aW5kb3dBbGlhcy5sb2NhdGlvbiE9PXdpbmRvd0FsaWFzLnRvcC5sb2NhdGlvbiYmKHdpbmRvd0FsaWFzLnRvcC5sb2NhdGlvbj13aW5kb3dBbGlhcy5sb2NhdGlvbil9LHJlZGlyZWN0RmlsZTpmdW5jdGlvbihhKXtcImZpbGU6XCI9PT13aW5kb3dBbGlhcy5sb2NhdGlvbi5wcm90b2NvbCYmKHdpbmRvd0FsaWFzLmxvY2F0aW9uPWEpfSxzZXRDb3VudFByZVJlbmRlcmVkOmZ1bmN0aW9uKGEpe2NvbmZpZ0NvdW50UHJlUmVuZGVyZWQ9YX0sdHJhY2tHb2FsOmZ1bmN0aW9uKGEsYixjKXt0cmFja0NhbGxiYWNrKGZ1bmN0aW9uKCl7bG9nR29hbChhLGIsYyl9KX0sdHJhY2tMaW5rOmZ1bmN0aW9uKGEsYixjLGQpe3RyYWNrQ2FsbGJhY2soZnVuY3Rpb24oKXtsb2dMaW5rKGEsYixjLGQpfSl9LHRyYWNrUGFnZVZpZXc6ZnVuY3Rpb24oYSxiKXt0cmFja2VkQ29udGVudEltcHJlc3Npb25zPVtdLHRyYWNrQ2FsbGJhY2soaXNPdmVybGF5U2Vzc2lvbihjb25maWdUcmFja2VyU2l0ZUlkKT9mdW5jdGlvbigpe2luamVjdE92ZXJsYXlTY3JpcHRzKGNvbmZpZ1RyYWNrZXJVcmwsY29uZmlnQXBpVXJsLGNvbmZpZ1RyYWNrZXJTaXRlSWQpfTpmdW5jdGlvbigpe2xvZ1BhZ2VWaWV3KGEsYil9KX0sdHJhY2tBbGxDb250ZW50SW1wcmVzc2lvbnM6ZnVuY3Rpb24oKXtpc092ZXJsYXlTZXNzaW9uKGNvbmZpZ1RyYWNrZXJTaXRlSWQpfHx0cmFja0NhbGxiYWNrKGZ1bmN0aW9uKCl7dHJhY2tDYWxsYmFja09uUmVhZHkoZnVuY3Rpb24oKXt2YXIgYT1jb250ZW50LmZpbmRDb250ZW50Tm9kZXMoKSxiPWdldENvbnRlbnRJbXByZXNzaW9uc1JlcXVlc3RzRnJvbU5vZGVzKGEpO3NlbmRCdWxrUmVxdWVzdChiLGNvbmZpZ1RyYWNrZXJQYXVzZSl9KX0pfSx0cmFja1Zpc2libGVDb250ZW50SW1wcmVzc2lvbnM6ZnVuY3Rpb24oYSxiKXtpc092ZXJsYXlTZXNzaW9uKGNvbmZpZ1RyYWNrZXJTaXRlSWQpfHwoaXNEZWZpbmVkKGEpfHwoYT0hMCksaXNEZWZpbmVkKGIpfHwoYj03NTApLGVuYWJsZVRyYWNrT25seVZpc2libGVDb250ZW50KGEsYix0aGlzKSx0cmFja0NhbGxiYWNrKGZ1bmN0aW9uKCl7dHJhY2tDYWxsYmFja09uTG9hZChmdW5jdGlvbigpe3ZhciBhPWNvbnRlbnQuZmluZENvbnRlbnROb2RlcygpLGI9Z2V0Q3VycmVudGx5VmlzaWJsZUNvbnRlbnRJbXByZXNzaW9uc1JlcXVlc3RzSWZOb3RUcmFja2VkWWV0KGEpO3NlbmRCdWxrUmVxdWVzdChiLGNvbmZpZ1RyYWNrZXJQYXVzZSl9KX0pKX0sdHJhY2tDb250ZW50SW1wcmVzc2lvbjpmdW5jdGlvbihhLGIsYyl7aXNPdmVybGF5U2Vzc2lvbihjb25maWdUcmFja2VyU2l0ZUlkKXx8YSYmKGI9Ynx8XCJVbmtub3duXCIsdHJhY2tDYWxsYmFjayhmdW5jdGlvbigpe3ZhciBkPWJ1aWxkQ29udGVudEltcHJlc3Npb25SZXF1ZXN0KGEsYixjKTtzZW5kUmVxdWVzdChkLGNvbmZpZ1RyYWNrZXJQYXVzZSl9KSl9LHRyYWNrQ29udGVudEltcHJlc3Npb25zV2l0aGluTm9kZTpmdW5jdGlvbihhKXshaXNPdmVybGF5U2Vzc2lvbihjb25maWdUcmFja2VyU2l0ZUlkKSYmYSYmdHJhY2tDYWxsYmFjayhmdW5jdGlvbigpe2lzVHJhY2tPbmx5VmlzaWJsZUNvbnRlbnRFbmFibGVkP3RyYWNrQ2FsbGJhY2tPbkxvYWQoZnVuY3Rpb24oKXt2YXIgYj1jb250ZW50LmZpbmRDb250ZW50Tm9kZXNXaXRoaW5Ob2RlKGEpLGM9Z2V0Q3VycmVudGx5VmlzaWJsZUNvbnRlbnRJbXByZXNzaW9uc1JlcXVlc3RzSWZOb3RUcmFja2VkWWV0KGIpO3NlbmRCdWxrUmVxdWVzdChjLGNvbmZpZ1RyYWNrZXJQYXVzZSl9KTp0cmFja0NhbGxiYWNrT25SZWFkeShmdW5jdGlvbigpe3ZhciBiPWNvbnRlbnQuZmluZENvbnRlbnROb2Rlc1dpdGhpbk5vZGUoYSksYz1nZXRDb250ZW50SW1wcmVzc2lvbnNSZXF1ZXN0c0Zyb21Ob2RlcyhiKTtzZW5kQnVsa1JlcXVlc3QoYyxjb25maWdUcmFja2VyUGF1c2UpfSl9KX0sdHJhY2tDb250ZW50SW50ZXJhY3Rpb246ZnVuY3Rpb24oYSxiLGMsZCl7aXNPdmVybGF5U2Vzc2lvbihjb25maWdUcmFja2VyU2l0ZUlkKXx8YSYmYiYmKGM9Y3x8XCJVbmtub3duXCIsdHJhY2tDYWxsYmFjayhmdW5jdGlvbigpe3ZhciBlPWJ1aWxkQ29udGVudEludGVyYWN0aW9uUmVxdWVzdChhLGIsYyxkKTtzZW5kUmVxdWVzdChlLGNvbmZpZ1RyYWNrZXJQYXVzZSl9KSl9LHRyYWNrQ29udGVudEludGVyYWN0aW9uTm9kZTpmdW5jdGlvbihhLGIpeyFpc092ZXJsYXlTZXNzaW9uKGNvbmZpZ1RyYWNrZXJTaXRlSWQpJiZhJiZ0cmFja0NhbGxiYWNrKGZ1bmN0aW9uKCl7dmFyIGM9YnVpbGRDb250ZW50SW50ZXJhY3Rpb25SZXF1ZXN0Tm9kZShhLGIpO3NlbmRSZXF1ZXN0KGMsY29uZmlnVHJhY2tlclBhdXNlKX0pfSxsb2dBbGxDb250ZW50QmxvY2tzT25QYWdlOmZ1bmN0aW9uKCl7dmFyIGE9Y29udGVudC5maW5kQ29udGVudE5vZGVzKCksYj1jb250ZW50LmNvbGxlY3RDb250ZW50KGEpO3ZvaWQgMCE9PWNvbnNvbGUmJmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhiKX0sdHJhY2tFdmVudDpmdW5jdGlvbihhLGIsYyxkKXt0cmFja0NhbGxiYWNrKGZ1bmN0aW9uKCl7bG9nRXZlbnQoYSxiLGMsZCl9KX0sdHJhY2tTaXRlU2VhcmNoOmZ1bmN0aW9uKGEsYixjKXt0cmFja0NhbGxiYWNrKGZ1bmN0aW9uKCl7bG9nU2l0ZVNlYXJjaChhLGIsYyl9KX0sc2V0RWNvbW1lcmNlVmlldzpmdW5jdGlvbihhLGIsYyxkKXtpc0RlZmluZWQoYykmJmMubGVuZ3RoP2MgaW5zdGFuY2VvZiBBcnJheSYmKGM9SlNPTjIuc3RyaW5naWZ5KGMpKTpjPVwiXCIsY3VzdG9tVmFyaWFibGVzUGFnZVs1XT1bXCJfcGtjXCIsY10saXNEZWZpbmVkKGQpJiZTdHJpbmcoZCkubGVuZ3RoJiYoY3VzdG9tVmFyaWFibGVzUGFnZVsyXT1bXCJfcGtwXCIsZF0pLChpc0RlZmluZWQoYSkmJmEubGVuZ3RofHxpc0RlZmluZWQoYikmJmIubGVuZ3RoKSYmKGlzRGVmaW5lZChhKSYmYS5sZW5ndGgmJihjdXN0b21WYXJpYWJsZXNQYWdlWzNdPVtcIl9wa3NcIixhXSksaXNEZWZpbmVkKGIpJiZiLmxlbmd0aHx8KGI9XCJcIiksY3VzdG9tVmFyaWFibGVzUGFnZVs0XT1bXCJfcGtuXCIsYl0pfSxhZGRFY29tbWVyY2VJdGVtOmZ1bmN0aW9uKGEsYixjLGQsZSl7YS5sZW5ndGgmJihlY29tbWVyY2VJdGVtc1thXT1bYSxiLGMsZCxlXSl9LHRyYWNrRWNvbW1lcmNlT3JkZXI6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2xvZ0Vjb21tZXJjZU9yZGVyKGEsYixjLGQsZSxmKX0sdHJhY2tFY29tbWVyY2VDYXJ0VXBkYXRlOmZ1bmN0aW9uKGEpe2xvZ0Vjb21tZXJjZUNhcnRVcGRhdGUoYSl9fX1mdW5jdGlvbiBUcmFja2VyUHJveHkoKXtyZXR1cm57cHVzaDphcHBseX19ZnVuY3Rpb24gYXBwbHlNZXRob2RzSW5PcmRlcihhLGIpe3ZhciBkLGUsYz17fTtmb3IoZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZj1iW2RdO2ZvcihjW2ZdPTEsZT0wO2U8YS5sZW5ndGg7ZSsrKWlmKGFbZV0mJmFbZV1bMF0pe3ZhciBnPWFbZV1bMF07Zj09PWcmJihhcHBseShhW2VdKSxkZWxldGUgYVtlXSxjW2ddPjEmJnZvaWQgMCE9PWNvbnNvbGUmJmNvbnNvbGUmJmNvbnNvbGUuZXJyb3ImJmNvbnNvbGUuZXJyb3IoXCJUaGUgbWV0aG9kIFwiK2crJyBpcyByZWdpc3RlcmVkIG1vcmUgdGhhbiBvbmNlIGluIFwicGFxXCIgdmFyaWFibGUuIE9ubHkgdGhlIGxhc3QgY2FsbCBoYXMgYW4gZWZmZWN0LiBQbGVhc2UgaGF2ZSBhIGxvb2sgYXQgdGhlIG11bHRpcGxlIFBpd2lrIHRyYWNrZXJzIGRvY3VtZW50YXRpb246IGh0dHA6Ly9kZXZlbG9wZXIucGl3aWsub3JnL2d1aWRlcy90cmFja2luZy1qYXZhc2NyaXB0LWd1aWRlI211bHRpcGxlLXBpd2lrLXRyYWNrZXJzJyksY1tnXSsrKX19cmV0dXJuIGF9dmFyIGV4cGlyZURhdGVUaW1lLHBsdWdpbnM9e30sZG9jdW1lbnRBbGlhcz1kb2N1bWVudCxuYXZpZ2F0b3JBbGlhcz1uYXZpZ2F0b3Isc2NyZWVuQWxpYXM9c2NyZWVuLHdpbmRvd0FsaWFzPXdpbmRvdyxwZXJmb3JtYW5jZUFsaWFzPXdpbmRvd0FsaWFzLnBlcmZvcm1hbmNlfHx3aW5kb3dBbGlhcy5tb3pQZXJmb3JtYW5jZXx8d2luZG93QWxpYXMubXNQZXJmb3JtYW5jZXx8d2luZG93QWxpYXMud2Via2l0UGVyZm9ybWFuY2UsaGFzTG9hZGVkPSExLHJlZ2lzdGVyZWRPbkxvYWRIYW5kbGVycz1bXSxlbmNvZGVXcmFwcGVyPXdpbmRvd0FsaWFzLmVuY29kZVVSSUNvbXBvbmVudCxkZWNvZGVXcmFwcGVyPXdpbmRvd0FsaWFzLmRlY29kZVVSSUNvbXBvbmVudCx1cmxkZWNvZGU9dW5lc2NhcGUsYXN5bmNUcmFja2VyLGl0ZXJhdG9yLFBpd2lrLHF1ZXJ5PXtodG1sQ29sbGVjdGlvblRvQXJyYXk6ZnVuY3Rpb24oYSl7dmFyIGMsYj1bXTtpZighYXx8IWEubGVuZ3RoKXJldHVybiBiO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKGFbY10pO3JldHVybiBifSxmaW5kOmZ1bmN0aW9uKGEpe2lmKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsfHwhYSlyZXR1cm5bXTt2YXIgYj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGEpO3JldHVybiB0aGlzLmh0bWxDb2xsZWN0aW9uVG9BcnJheShiKX0sZmluZE11bHRpcGxlOmZ1bmN0aW9uKGEpe2lmKCFhfHwhYS5sZW5ndGgpcmV0dXJuW107dmFyIGIsYyxkPVtdO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspYz10aGlzLmZpbmQoYVtiXSksZD1kLmNvbmNhdChjKTtyZXR1cm4gZD10aGlzLm1ha2VOb2Rlc1VuaXF1ZShkKX0sZmluZE5vZGVzQnlUYWdOYW1lOmZ1bmN0aW9uKGEsYil7aWYoIWF8fCFifHwhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSlyZXR1cm5bXTt2YXIgYz1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGIpO3JldHVybiB0aGlzLmh0bWxDb2xsZWN0aW9uVG9BcnJheShjKX0sbWFrZU5vZGVzVW5pcXVlOmZ1bmN0aW9uKGEpe3ZhciBiPVtdLmNvbmNhdChhKTtpZihhLnNvcnQoZnVuY3Rpb24oYSxjKXtpZihhPT09YylyZXR1cm4gMDt2YXIgZD1pbmRleE9mQXJyYXkoYixhKSxlPWluZGV4T2ZBcnJheShiLGMpO3JldHVybiBkPT09ZT8wOmQ+ZT8tMToxfSksYS5sZW5ndGg8PTEpcmV0dXJuIGE7dmFyIGYsYz0wLGQ9MCxlPVtdO2ZvcihmPWFbYysrXTtmOylmPT09YVtjXSYmKGQ9ZS5wdXNoKGMpKSxmPWFbYysrXXx8bnVsbDtmb3IoO2QtLTspYS5zcGxpY2UoZVtkXSwxKTtyZXR1cm4gYX0sZ2V0QXR0cmlidXRlVmFsdWVGcm9tTm9kZTpmdW5jdGlvbihhLGIpe2lmKHRoaXMuaGFzTm9kZUF0dHJpYnV0ZShhLGIpKXtpZihhJiZhLmdldEF0dHJpYnV0ZSlyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoYik7aWYoYSYmYS5hdHRyaWJ1dGVzKXt2YXIgYz10eXBlb2YgYS5hdHRyaWJ1dGVzW2JdO2lmKFwidW5kZWZpbmVkXCIhPT1jKXtpZihhLmF0dHJpYnV0ZXNbYl0udmFsdWUpcmV0dXJuIGEuYXR0cmlidXRlc1tiXS52YWx1ZTtpZihhLmF0dHJpYnV0ZXNbYl0ubm9kZVZhbHVlKXJldHVybiBhLmF0dHJpYnV0ZXNbYl0ubm9kZVZhbHVlO3ZhciBkLGU9YS5hdHRyaWJ1dGVzO2lmKGUpe2ZvcihkPTA7ZDxlLmxlbmd0aDtkKyspaWYoZVtkXS5ub2RlTmFtZT09PWIpcmV0dXJuIGVbZF0ubm9kZVZhbHVlO3JldHVybiBudWxsfX19fX0saGFzTm9kZUF0dHJpYnV0ZVdpdGhWYWx1ZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0QXR0cmlidXRlVmFsdWVGcm9tTm9kZShhLGIpO3JldHVybiEhY30saGFzTm9kZUF0dHJpYnV0ZTpmdW5jdGlvbihhLGIpe2lmKGEmJmEuaGFzQXR0cmlidXRlKXJldHVybiBhLmhhc0F0dHJpYnV0ZShiKTtpZihhJiZhLmF0dHJpYnV0ZXMpe3ZhciBjPXR5cGVvZiBhLmF0dHJpYnV0ZXNbYl07cmV0dXJuXCJ1bmRlZmluZWRcIiE9PWN9cmV0dXJuITF9LGhhc05vZGVDc3NDbGFzczpmdW5jdGlvbihhLGIpe2lmKGEmJmImJmEuY2xhc3NOYW1lKXt2YXIgYz1cInN0cmluZ1wiPT10eXBlb2YgYS5jbGFzc05hbWU/YS5jbGFzc05hbWUuc3BsaXQoXCIgXCIpOltdO2lmKC0xIT09aW5kZXhPZkFycmF5KGMsYikpcmV0dXJuITB9cmV0dXJuITF9LGZpbmROb2Rlc0hhdmluZ0F0dHJpYnV0ZTpmdW5jdGlvbihhLGIsYyl7aWYoY3x8KGM9W10pLCFhfHwhYilyZXR1cm4gYzt2YXIgZD1nZXRDaGlsZHJlbkZyb21Ob2RlKGEpO2lmKCFkfHwhZC5sZW5ndGgpcmV0dXJuIGM7dmFyIGUsZjtmb3IoZT0wO2U8ZC5sZW5ndGg7ZSsrKWY9ZFtlXSx0aGlzLmhhc05vZGVBdHRyaWJ1dGUoZixiKSYmYy5wdXNoKGYpLGM9dGhpcy5maW5kTm9kZXNIYXZpbmdBdHRyaWJ1dGUoZixiLGMpO3JldHVybiBjfSxmaW5kRmlyc3ROb2RlSGF2aW5nQXR0cmlidXRlOmZ1bmN0aW9uKGEsYil7aWYoYSYmYil7aWYodGhpcy5oYXNOb2RlQXR0cmlidXRlKGEsYikpcmV0dXJuIGE7dmFyIGM9dGhpcy5maW5kTm9kZXNIYXZpbmdBdHRyaWJ1dGUoYSxiKTtyZXR1cm4gYyYmYy5sZW5ndGg/Y1swXTp2b2lkIDB9fSxmaW5kRmlyc3ROb2RlSGF2aW5nQXR0cmlidXRlV2l0aFZhbHVlOmZ1bmN0aW9uKGEsYil7aWYoYSYmYil7aWYodGhpcy5oYXNOb2RlQXR0cmlidXRlV2l0aFZhbHVlKGEsYikpcmV0dXJuIGE7dmFyIGM9dGhpcy5maW5kTm9kZXNIYXZpbmdBdHRyaWJ1dGUoYSxiKTtpZihjJiZjLmxlbmd0aCl7dmFyIGQ7Zm9yKGQ9MDtkPGMubGVuZ3RoO2QrKylpZih0aGlzLmdldEF0dHJpYnV0ZVZhbHVlRnJvbU5vZGUoY1tkXSxiKSlyZXR1cm4gY1tkXX19fSxmaW5kTm9kZXNIYXZpbmdDc3NDbGFzczpmdW5jdGlvbihhLGIsYyl7aWYoY3x8KGM9W10pLCFhfHwhYilyZXR1cm4gYztpZihhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpe3ZhciBkPWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShiKTtyZXR1cm4gdGhpcy5odG1sQ29sbGVjdGlvblRvQXJyYXkoZCl9dmFyIGU9Z2V0Q2hpbGRyZW5Gcm9tTm9kZShhKTtpZighZXx8IWUubGVuZ3RoKXJldHVybltdO3ZhciBmLGc7Zm9yKGY9MDtmPGUubGVuZ3RoO2YrKylnPWVbZl0sdGhpcy5oYXNOb2RlQ3NzQ2xhc3MoZyxiKSYmYy5wdXNoKGcpLGM9dGhpcy5maW5kTm9kZXNIYXZpbmdDc3NDbGFzcyhnLGIsYyk7cmV0dXJuIGN9LGZpbmRGaXJzdE5vZGVIYXZpbmdDbGFzczpmdW5jdGlvbihhLGIpe2lmKGEmJmIpe2lmKHRoaXMuaGFzTm9kZUNzc0NsYXNzKGEsYikpcmV0dXJuIGE7dmFyIGM9dGhpcy5maW5kTm9kZXNIYXZpbmdDc3NDbGFzcyhhLGIpO3JldHVybiBjJiZjLmxlbmd0aD9jWzBdOnZvaWQgMH19LGlzTGlua0VsZW1lbnQ6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuITE7dmFyIGI9U3RyaW5nKGEubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCksYz1bXCJhXCIsXCJhcmVhXCJdLGQ9aW5kZXhPZkFycmF5KGMsYik7cmV0dXJuIGQhPT0tMX0sc2V0QW55QXR0cmlidXRlOmZ1bmN0aW9uKGEsYixjKXthJiZiJiYoYS5zZXRBdHRyaWJ1dGU/YS5zZXRBdHRyaWJ1dGUoYixjKTphW2JdPWMpfX0sY29udGVudD17Q09OVEVOVF9BVFRSOlwiZGF0YS10cmFjay1jb250ZW50XCIsQ09OVEVOVF9DTEFTUzpcInBpd2lrVHJhY2tDb250ZW50XCIsQ09OVEVOVF9OQU1FX0FUVFI6XCJkYXRhLWNvbnRlbnQtbmFtZVwiLENPTlRFTlRfUElFQ0VfQVRUUjpcImRhdGEtY29udGVudC1waWVjZVwiLENPTlRFTlRfUElFQ0VfQ0xBU1M6XCJwaXdpa0NvbnRlbnRQaWVjZVwiLENPTlRFTlRfVEFSR0VUX0FUVFI6XCJkYXRhLWNvbnRlbnQtdGFyZ2V0XCIsQ09OVEVOVF9UQVJHRVRfQ0xBU1M6XCJwaXdpa0NvbnRlbnRUYXJnZXRcIixDT05URU5UX0lHTk9SRUlOVEVSQUNUSU9OX0FUVFI6XCJkYXRhLWNvbnRlbnQtaWdub3JlaW50ZXJhY3Rpb25cIixDT05URU5UX0lHTk9SRUlOVEVSQUNUSU9OX0NMQVNTOlwicGl3aWtDb250ZW50SWdub3JlSW50ZXJhY3Rpb25cIixsb2NhdGlvbjp2b2lkIDAsZmluZENvbnRlbnROb2RlczpmdW5jdGlvbigpe3ZhciBhPVwiLlwiK3RoaXMuQ09OVEVOVF9DTEFTUyxiPVwiW1wiK3RoaXMuQ09OVEVOVF9BVFRSK1wiXVwiLGM9cXVlcnkuZmluZE11bHRpcGxlKFthLGJdKTtyZXR1cm4gY30sZmluZENvbnRlbnROb2Rlc1dpdGhpbk5vZGU6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuW107dmFyIGI9cXVlcnkuZmluZE5vZGVzSGF2aW5nQ3NzQ2xhc3MoYSx0aGlzLkNPTlRFTlRfQ0xBU1MpLGM9cXVlcnkuZmluZE5vZGVzSGF2aW5nQXR0cmlidXRlKGEsdGhpcy5DT05URU5UX0FUVFIpO2lmKGMmJmMubGVuZ3RoKXt2YXIgZDtmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCsrKWIucHVzaChjW2RdKX1yZXR1cm4gcXVlcnkuaGFzTm9kZUF0dHJpYnV0ZShhLHRoaXMuQ09OVEVOVF9BVFRSKT9iLnB1c2goYSk6cXVlcnkuaGFzTm9kZUNzc0NsYXNzKGEsdGhpcy5DT05URU5UX0NMQVNTKSYmYi5wdXNoKGEpLGI9cXVlcnkubWFrZU5vZGVzVW5pcXVlKGIpfSxmaW5kUGFyZW50Q29udGVudE5vZGU6ZnVuY3Rpb24oYSl7aWYoYSlmb3IodmFyIGI9YSxjPTA7YiYmYiE9PWRvY3VtZW50QWxpYXMmJmIucGFyZW50Tm9kZTspe2lmKHF1ZXJ5Lmhhc05vZGVBdHRyaWJ1dGUoYix0aGlzLkNPTlRFTlRfQVRUUikpcmV0dXJuIGI7aWYocXVlcnkuaGFzTm9kZUNzc0NsYXNzKGIsdGhpcy5DT05URU5UX0NMQVNTKSlyZXR1cm4gYjtpZihiPWIucGFyZW50Tm9kZSxjPjFlMylicmVhaztjKyt9fSxmaW5kUGllY2VOb2RlOmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBiPXF1ZXJ5LmZpbmRGaXJzdE5vZGVIYXZpbmdBdHRyaWJ1dGUoYSx0aGlzLkNPTlRFTlRfUElFQ0VfQVRUUiksYnx8KGI9cXVlcnkuZmluZEZpcnN0Tm9kZUhhdmluZ0NsYXNzKGEsdGhpcy5DT05URU5UX1BJRUNFX0NMQVNTKSksYj9iOmF9LGZpbmRUYXJnZXROb2RlTm9EZWZhdWx0OmZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBiPXF1ZXJ5LmZpbmRGaXJzdE5vZGVIYXZpbmdBdHRyaWJ1dGVXaXRoVmFsdWUoYSx0aGlzLkNPTlRFTlRfVEFSR0VUX0FUVFIpO3JldHVybiBiP2I6KGI9cXVlcnkuZmluZEZpcnN0Tm9kZUhhdmluZ0F0dHJpYnV0ZShhLHRoaXMuQ09OVEVOVF9UQVJHRVRfQVRUUikpP2I6KGI9cXVlcnkuZmluZEZpcnN0Tm9kZUhhdmluZ0NsYXNzKGEsdGhpcy5DT05URU5UX1RBUkdFVF9DTEFTUyksYj9iOnZvaWQgMCl9fSxmaW5kVGFyZ2V0Tm9kZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmZpbmRUYXJnZXROb2RlTm9EZWZhdWx0KGEpO3JldHVybiBiP2I6YX0sZmluZENvbnRlbnROYW1lOmZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBiPXF1ZXJ5LmZpbmRGaXJzdE5vZGVIYXZpbmdBdHRyaWJ1dGVXaXRoVmFsdWUoYSx0aGlzLkNPTlRFTlRfTkFNRV9BVFRSKTtpZihiKXJldHVybiBxdWVyeS5nZXRBdHRyaWJ1dGVWYWx1ZUZyb21Ob2RlKGIsdGhpcy5DT05URU5UX05BTUVfQVRUUik7dmFyIGM9dGhpcy5maW5kQ29udGVudFBpZWNlKGEpO2lmKGMpcmV0dXJuIHRoaXMucmVtb3ZlRG9tYWluSWZJc0luTGluayhjKTtpZihxdWVyeS5oYXNOb2RlQXR0cmlidXRlV2l0aFZhbHVlKGEsXCJ0aXRsZVwiKSlyZXR1cm4gcXVlcnkuZ2V0QXR0cmlidXRlVmFsdWVGcm9tTm9kZShhLFwidGl0bGVcIik7dmFyIGQ9dGhpcy5maW5kUGllY2VOb2RlKGEpO2lmKHF1ZXJ5Lmhhc05vZGVBdHRyaWJ1dGVXaXRoVmFsdWUoZCxcInRpdGxlXCIpKXJldHVybiBxdWVyeS5nZXRBdHRyaWJ1dGVWYWx1ZUZyb21Ob2RlKGQsXCJ0aXRsZVwiKTt2YXIgZT10aGlzLmZpbmRUYXJnZXROb2RlKGEpO3JldHVybiBxdWVyeS5oYXNOb2RlQXR0cmlidXRlV2l0aFZhbHVlKGUsXCJ0aXRsZVwiKT9xdWVyeS5nZXRBdHRyaWJ1dGVWYWx1ZUZyb21Ob2RlKGUsXCJ0aXRsZVwiKTp2b2lkIDB9fSxmaW5kQ29udGVudFBpZWNlOmZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBiPXF1ZXJ5LmZpbmRGaXJzdE5vZGVIYXZpbmdBdHRyaWJ1dGVXaXRoVmFsdWUoYSx0aGlzLkNPTlRFTlRfUElFQ0VfQVRUUik7aWYoYilyZXR1cm4gcXVlcnkuZ2V0QXR0cmlidXRlVmFsdWVGcm9tTm9kZShiLHRoaXMuQ09OVEVOVF9QSUVDRV9BVFRSKTt2YXIgYz10aGlzLmZpbmRQaWVjZU5vZGUoYSksZD10aGlzLmZpbmRNZWRpYVVybEluTm9kZShjKTtyZXR1cm4gZD90aGlzLnRvQWJzb2x1dGVVcmwoZCk6dm9pZCAwfX0sZmluZENvbnRlbnRUYXJnZXQ6ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI9dGhpcy5maW5kVGFyZ2V0Tm9kZShhKTtpZihxdWVyeS5oYXNOb2RlQXR0cmlidXRlV2l0aFZhbHVlKGIsdGhpcy5DT05URU5UX1RBUkdFVF9BVFRSKSlyZXR1cm4gcXVlcnkuZ2V0QXR0cmlidXRlVmFsdWVGcm9tTm9kZShiLHRoaXMuQ09OVEVOVF9UQVJHRVRfQVRUUik7dmFyIGM7aWYocXVlcnkuaGFzTm9kZUF0dHJpYnV0ZVdpdGhWYWx1ZShiLFwiaHJlZlwiKSlyZXR1cm4gYz1xdWVyeS5nZXRBdHRyaWJ1dGVWYWx1ZUZyb21Ob2RlKGIsXCJocmVmXCIpLHRoaXMudG9BYnNvbHV0ZVVybChjKTt2YXIgZD10aGlzLmZpbmRQaWVjZU5vZGUoYSk7cmV0dXJuIHF1ZXJ5Lmhhc05vZGVBdHRyaWJ1dGVXaXRoVmFsdWUoZCxcImhyZWZcIik/KGM9cXVlcnkuZ2V0QXR0cmlidXRlVmFsdWVGcm9tTm9kZShkLFwiaHJlZlwiKSx0aGlzLnRvQWJzb2x1dGVVcmwoYykpOnZvaWQgMH19LGlzU2FtZURvbWFpbjpmdW5jdGlvbihhKXtpZighYXx8IWEuaW5kZXhPZilyZXR1cm4hMTtpZigwPT09YS5pbmRleE9mKHRoaXMuZ2V0TG9jYXRpb24oKS5vcmlnaW4pKXJldHVybiEwO3ZhciBiPWEuaW5kZXhPZih0aGlzLmdldExvY2F0aW9uKCkuaG9zdCk7cmV0dXJuIDg+PWImJjA8PWJ9LHJlbW92ZURvbWFpbklmSXNJbkxpbms6ZnVuY3Rpb24oYSl7dmFyIGI9XCJeaHR0cHM/Oi8vW14vXStcIixjPVwiXi4qLy9bXi9dK1wiO3JldHVybiBhJiZhLnNlYXJjaCYmLTEhPT1hLnNlYXJjaChuZXcgUmVnRXhwKGIpKSYmdGhpcy5pc1NhbWVEb21haW4oYSkmJihhPWEucmVwbGFjZShuZXcgUmVnRXhwKGMpLFwiXCIpLGF8fChhPVwiL1wiKSksYX0sZmluZE1lZGlhVXJsSW5Ob2RlOmZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBiPVtcImltZ1wiLFwiZW1iZWRcIixcInZpZGVvXCIsXCJhdWRpb1wiXSxjPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZigtMSE9PWluZGV4T2ZBcnJheShiLGMpJiZxdWVyeS5maW5kRmlyc3ROb2RlSGF2aW5nQXR0cmlidXRlV2l0aFZhbHVlKGEsXCJzcmNcIikpe3ZhciBkPXF1ZXJ5LmZpbmRGaXJzdE5vZGVIYXZpbmdBdHRyaWJ1dGVXaXRoVmFsdWUoYSxcInNyY1wiKTtyZXR1cm4gcXVlcnkuZ2V0QXR0cmlidXRlVmFsdWVGcm9tTm9kZShkLFwic3JjXCIpfWlmKFwib2JqZWN0XCI9PT1jJiZxdWVyeS5oYXNOb2RlQXR0cmlidXRlV2l0aFZhbHVlKGEsXCJkYXRhXCIpKXJldHVybiBxdWVyeS5nZXRBdHRyaWJ1dGVWYWx1ZUZyb21Ob2RlKGEsXCJkYXRhXCIpO2lmKFwib2JqZWN0XCI9PT1jKXt2YXIgZT1xdWVyeS5maW5kTm9kZXNCeVRhZ05hbWUoYSxcInBhcmFtXCIpO2lmKGUmJmUubGVuZ3RoKXt2YXIgZjtmb3IoZj0wO2Y8ZS5sZW5ndGg7ZisrKWlmKFwibW92aWVcIj09PXF1ZXJ5LmdldEF0dHJpYnV0ZVZhbHVlRnJvbU5vZGUoZVtmXSxcIm5hbWVcIikmJnF1ZXJ5Lmhhc05vZGVBdHRyaWJ1dGVXaXRoVmFsdWUoZVtmXSxcInZhbHVlXCIpKXJldHVybiBxdWVyeS5nZXRBdHRyaWJ1dGVWYWx1ZUZyb21Ob2RlKGVbZl0sXCJ2YWx1ZVwiKX12YXIgZz1xdWVyeS5maW5kTm9kZXNCeVRhZ05hbWUoYSxcImVtYmVkXCIpO2lmKGcmJmcubGVuZ3RoKXJldHVybiB0aGlzLmZpbmRNZWRpYVVybEluTm9kZShnWzBdKX19fSx0cmltOmZ1bmN0aW9uKGEpe3JldHVybiBhJiZTdHJpbmcoYSk9PT1hP2EucmVwbGFjZSgvXlxccyt8XFxzKyQvZyxcIlwiKTphfSxpc09yV2FzTm9kZUluVmlld3BvcnQ6ZnVuY3Rpb24oYSl7aWYoIWF8fCFhLmdldEJvdW5kaW5nQ2xpZW50UmVjdHx8MSE9PWEubm9kZVR5cGUpcmV0dXJuITA7dmFyIGI9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPWRvY3VtZW50QWxpYXMuZG9jdW1lbnRFbGVtZW50fHx7fSxkPWIudG9wPDA7ZCYmYS5vZmZzZXRUb3AmJihkPWEub2Zmc2V0VG9wK2IuaGVpZ2h0PjApO3ZhciBlPWMuY2xpZW50V2lkdGg7d2luZG93QWxpYXMuaW5uZXJXaWR0aCYmZT53aW5kb3dBbGlhcy5pbm5lcldpZHRoJiYoZT13aW5kb3dBbGlhcy5pbm5lcldpZHRoKTt2YXIgZj1jLmNsaWVudEhlaWdodDtyZXR1cm4gd2luZG93QWxpYXMuaW5uZXJIZWlnaHQmJmY+d2luZG93QWxpYXMuaW5uZXJIZWlnaHQmJihmPXdpbmRvd0FsaWFzLmlubmVySGVpZ2h0KSwoYi5ib3R0b20+MHx8ZCkmJmIucmlnaHQ+MCYmYi5sZWZ0PGUmJihiLnRvcDxmfHxkKX0saXNOb2RlVmlzaWJsZTpmdW5jdGlvbihhKXt2YXIgYj1pc1Zpc2libGUoYSksYz10aGlzLmlzT3JXYXNOb2RlSW5WaWV3cG9ydChhKTtyZXR1cm4gYiYmY30sYnVpbGRJbnRlcmFjdGlvblJlcXVlc3RQYXJhbXM6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9XCJcIjtyZXR1cm4gYSYmKGUrPVwiY19pPVwiK2VuY29kZVdyYXBwZXIoYSkpLGImJihlJiYoZSs9XCImXCIpLGUrPVwiY19uPVwiK2VuY29kZVdyYXBwZXIoYikpLGMmJihlJiYoZSs9XCImXCIpLGUrPVwiY19wPVwiK2VuY29kZVdyYXBwZXIoYykpLGQmJihlJiYoZSs9XCImXCIpLGUrPVwiY190PVwiK2VuY29kZVdyYXBwZXIoZCkpLGV9LGJ1aWxkSW1wcmVzc2lvblJlcXVlc3RQYXJhbXM6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVwiY19uPVwiK2VuY29kZVdyYXBwZXIoYSkrXCImY19wPVwiK2VuY29kZVdyYXBwZXIoYik7cmV0dXJuIGMmJihkKz1cIiZjX3Q9XCIrZW5jb2RlV3JhcHBlcihjKSksZH0sYnVpbGRDb250ZW50QmxvY2s6ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI9dGhpcy5maW5kQ29udGVudE5hbWUoYSksYz10aGlzLmZpbmRDb250ZW50UGllY2UoYSksZD10aGlzLmZpbmRDb250ZW50VGFyZ2V0KGEpO3JldHVybiBiPXRoaXMudHJpbShiKSxjPXRoaXMudHJpbShjKSxkPXRoaXMudHJpbShkKSx7bmFtZTpifHxcIlVua25vd25cIixwaWVjZTpjfHxcIlVua25vd25cIix0YXJnZXQ6ZHx8XCJcIn19fSxjb2xsZWN0Q29udGVudDpmdW5jdGlvbihhKXtpZighYXx8IWEubGVuZ3RoKXJldHVybltdO3ZhciBjLGQsYj1bXTtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWQ9dGhpcy5idWlsZENvbnRlbnRCbG9jayhhW2NdKSxpc0RlZmluZWQoZCkmJmIucHVzaChkKTtyZXR1cm4gYn0sc2V0TG9jYXRpb246ZnVuY3Rpb24oYSl7dGhpcy5sb2NhdGlvbj1hfSxnZXRMb2NhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMubG9jYXRpb258fHdpbmRvd0FsaWFzLmxvY2F0aW9uO3JldHVybiBhLm9yaWdpbnx8KGEub3JpZ2luPWEucHJvdG9jb2wrXCIvL1wiK2EuaG9zdG5hbWUrKGEucG9ydD9cIjpcIithLnBvcnQ6XCJcIikpLGF9LHRvQWJzb2x1dGVVcmw6ZnVuY3Rpb24oYSl7aWYoKCFhfHxTdHJpbmcoYSkhPT1hKSYmXCJcIiE9PWEpcmV0dXJuIGE7aWYoXCJcIj09PWEpcmV0dXJuIHRoaXMuZ2V0TG9jYXRpb24oKS5ocmVmO2lmKGEuc2VhcmNoKC9eXFwvXFwvLykhPT0tMSlyZXR1cm4gdGhpcy5nZXRMb2NhdGlvbigpLnByb3RvY29sK2E7aWYoYS5zZWFyY2goLzpcXC9cXC8vKSE9PS0xKXJldHVybiBhO2lmKDA9PT1hLmluZGV4T2YoXCIjXCIpKXJldHVybiB0aGlzLmdldExvY2F0aW9uKCkub3JpZ2luK3RoaXMuZ2V0TG9jYXRpb24oKS5wYXRobmFtZSthO2lmKDA9PT1hLmluZGV4T2YoXCI/XCIpKXJldHVybiB0aGlzLmdldExvY2F0aW9uKCkub3JpZ2luK3RoaXMuZ2V0TG9jYXRpb24oKS5wYXRobmFtZSthO2lmKDA9PT1hLnNlYXJjaChcIl5bYS16QS1aXXsyLDExfTpcIikpcmV0dXJuIGE7aWYoYS5zZWFyY2goL15cXC8vKSE9PS0xKXJldHVybiB0aGlzLmdldExvY2F0aW9uKCkub3JpZ2luK2E7dmFyIGI9XCIoLiovKVwiLGM9dGhpcy5nZXRMb2NhdGlvbigpLm9yaWdpbit0aGlzLmdldExvY2F0aW9uKCkucGF0aG5hbWUubWF0Y2gobmV3IFJlZ0V4cChiKSlbMF07cmV0dXJuIGMrYX0saXNVcmxUb0N1cnJlbnREb21haW46ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy50b0Fic29sdXRlVXJsKGEpO2lmKCFiKXJldHVybiExO3ZhciBjPXRoaXMuZ2V0TG9jYXRpb24oKS5vcmlnaW47cmV0dXJuIGM9PT1ifHwwPT09U3RyaW5nKGIpLmluZGV4T2YoYykmJlwiOlwiIT09U3RyaW5nKGIpLnN1YnN0cihjLmxlbmd0aCwxKX0sc2V0SHJlZkF0dHJpYnV0ZTpmdW5jdGlvbihhLGIpe2EmJmImJnF1ZXJ5LnNldEFueUF0dHJpYnV0ZShhLFwiaHJlZlwiLGIpfSxzaG91bGRJZ25vcmVJbnRlcmFjdGlvbjpmdW5jdGlvbihhKXt2YXIgYj1xdWVyeS5oYXNOb2RlQXR0cmlidXRlKGEsdGhpcy5DT05URU5UX0lHTk9SRUlOVEVSQUNUSU9OX0FUVFIpLGM9cXVlcnkuaGFzTm9kZUNzc0NsYXNzKGEsdGhpcy5DT05URU5UX0lHTk9SRUlOVEVSQUNUSU9OX0NMQVNTKTtyZXR1cm4gYnx8Y319O2FkZEV2ZW50TGlzdGVuZXIod2luZG93QWxpYXMsXCJiZWZvcmV1bmxvYWRcIixiZWZvcmVVbmxvYWRIYW5kbGVyLCExKSxhZGRSZWFkeUxpc3RlbmVyKCksRGF0ZS5wcm90b3R5cGUuZ2V0VGltZUFsaWFzPURhdGUucHJvdG90eXBlLmdldFRpbWUsYXN5bmNUcmFja2VyPW5ldyBUcmFja2VyO3ZhciBhcHBseUZpcnN0PVtcImRpc2FibGVDb29raWVzXCIsXCJzZXRUcmFja2VyVXJsXCIsXCJzZXRBUElVcmxcIixcInNldENvb2tpZVBhdGhcIixcInNldENvb2tpZURvbWFpblwiLFwic2V0VXNlcklkXCIsXCJzZXRTaXRlSWRcIixcImVuYWJsZUxpbmtUcmFja2luZ1wiXTtmb3IoX3BhcT1hcHBseU1ldGhvZHNJbk9yZGVyKF9wYXEsYXBwbHlGaXJzdCksaXRlcmF0b3I9MDtpdGVyYXRvcjxfcGFxLmxlbmd0aDtpdGVyYXRvcisrKV9wYXFbaXRlcmF0b3JdJiZhcHBseShfcGFxW2l0ZXJhdG9yXSk7cmV0dXJuIF9wYXE9bmV3IFRyYWNrZXJQcm94eSxQaXdpaz17YWRkUGx1Z2luOmZ1bmN0aW9uKGEsYil7cGx1Z2luc1thXT1ifSxnZXRUcmFja2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGlzRGVmaW5lZChiKXx8KGI9dGhpcy5nZXRBc3luY1RyYWNrZXIoKS5nZXRTaXRlSWQoKSksaXNEZWZpbmVkKGEpfHwoYT10aGlzLmdldEFzeW5jVHJhY2tlcigpLmdldFRyYWNrZXJVcmwoKSksbmV3IFRyYWNrZXIoYSxiKX0sZ2V0QXN5bmNUcmFja2VyOmZ1bmN0aW9uKCl7cmV0dXJuIGFzeW5jVHJhY2tlcn19LFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKFwicGl3aWtcIixbXSxmdW5jdGlvbigpe3JldHVybiBQaXdpa30pLFBpd2lrfSgpKSx3aW5kb3cmJndpbmRvdy5waXdpa0FzeW5jSW5pdCYmd2luZG93LnBpd2lrQXN5bmNJbml0KCksZnVuY3Rpb24oKXt2YXIgYT10eXBlb2YgQW5hbHl0aWNzVHJhY2tlcjtcInVuZGVmaW5lZFwiPT09YSYmKEFuYWx5dGljc1RyYWNrZXI9UGl3aWspfSgpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIHBpd2lrX2xvZyYmKHBpd2lrX2xvZz1mdW5jdGlvbihhLGIsYyxkKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGEpe3RyeXtpZih3aW5kb3dbXCJwaXdpa19cIithXSlyZXR1cm4gd2luZG93W1wicGl3aWtfXCIrYV19Y2F0Y2goYSl7fX12YXIgZixnPVBpd2lrLmdldFRyYWNrZXIoYyxiKTtnLnNldERvY3VtZW50VGl0bGUoYSksZy5zZXRDdXN0b21EYXRhKGQpLGY9ZShcInRyYWNrZXJfcGF1c2VcIiksZiYmZy5zZXRMaW5rVHJhY2tpbmdUaW1lcihmKSxmPWUoXCJkb3dubG9hZF9leHRlbnNpb25zXCIpLGYmJmcuc2V0RG93bmxvYWRFeHRlbnNpb25zKGYpLGY9ZShcImhvc3RzX2FsaWFzXCIpLGYmJmcuc2V0RG9tYWlucyhmKSxmPWUoXCJpZ25vcmVfY2xhc3Nlc1wiKSxmJiZnLnNldElnbm9yZUNsYXNzZXMoZiksZy50cmFja1BhZ2VWaWV3KCksZShcImluc3RhbGxfdHJhY2tlclwiKSYmKHBpd2lrX3RyYWNrPWZ1bmN0aW9uKGEsYixjLGQpe2cuc2V0U2l0ZUlkKGIpLGcuc2V0VHJhY2tlclVybChjKSxnLnRyYWNrTGluayhhLGQpfSxnLmVuYWJsZUxpbmtUcmFja2luZygpKX0pOyIsIi8vZXhwb3J0IGdsb2JhbCBfcGFxIGFycmF5IHVwb24gd2hpY2ggY2hhbmdlcyB3aWxsIGJlIHRyYWNrZWQuXG5kZWZpbmUoWydwaXdpaycgLCAnanF1ZXJ5J10sIGZ1bmN0aW9uIChwaXdpayAsICQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcbiAgICBcbiAgICAgXG4gICAgXG4vKiAgICBpZiAodHlwZW9mIEpTT04yID09ICdvYmplY3QnICYmIHR5cGVvZiBKU09OMi5zdHJpbmdpZnkgPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5KU09OID09PSAnb2JqZWN0JyAmJiB3aW5kb3cuSlNPTi5zdHJpbmdpZnkgJiYgd2luZG93LkpTT04ucGFyc2UpIHtcbiAgICBcdHdpbmRvdy5KU09OMiA9IHdpbmRvdy5KU09OO1xuICAgIH0qL1xuICAgIF9wYXEucHVzaChbXCJzZXRUcmFja2VyVXJsXCIsIHRyYWNraW5nX3NlcnZlcl0pO1xuICAgIF9wYXEucHVzaChbXCJzZXRTaXRlSWRcIiwgK3RyYWNraW5nX2lkX3NpdGVdKTtcbiAgICBfcGFxLnB1c2goWydkaXNhYmxlQ29va2llcyddKTtcbiAgICBfcGFxLnB1c2goW1widHJhY2tQYWdlVmlld1wiXSk7XG5cblxuICAvLyAgX3BhcS5wdXNoKFtcImVuYWJsZUxpbmtUcmFja2luZ1wiXSk7XG4gICAgJChmdW5jdGlvbigpe1xuXG5cbiAgICAgICAgLy8gdGhpcyBpcyB0byB0cmFjayBzaXRlIHNlYXJjaC5cbiAgICAgICAgJCgnYm9keScpLm9uKCdjbGljaycgLCcjc2VhcmNoQnV0dG9uJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKCQoJyNzZWFyY2hTdHJpbmcnKS52YWwoKSl7XG4gICAgICAgICAgICAgICAgX3BhcS5wdXNoKFsndHJhY2tTaXRlU2VhcmNoJyAsJCgnI3NlYXJjaFN0cmluZycpLnZhbCgpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgYWJzb2x1dGVQYXRoID0gZnVuY3Rpb24oaHJlZikge1xuICAgICAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgICAgIGxpbmsuaHJlZiA9IGhyZWY7XG4gICAgICAgICAgICAvLyB3b3JraW5nIGluIGNocm9tZSwgIElFMTEgYW5kIElFMTBcbiAgICAgICAgICAgIHJldHVybiBsaW5rLmhyZWY7XG4gICAgICAgIH1cbiAgICAgICB2YXIgZGxfcmV4ID0gbmV3IFJlZ0V4cChcIihwZGZ8eGxzfHR4dHx6aXB8eG1sKSRcIik7XG5cbiAgICAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJ2EnICxmdW5jdGlvbigkZXZlbnQpe1xuXG4gICAgICAgICAgIGlmKCQodGhpcykuYXR0cignaHJlZicpKXsgLy8gaHMgaHJlZiBhdHRyaWJ1dGVcbiAgICAgICAgICAgICAgIGlmKGRsX3JleC50ZXN0KCAkKHRoaXMpLmF0dHIoJ2hyZWYnKSkpe1xuICAgICAgICAgICAgICAgIF9wYXEucHVzaChbJ3RyYWNrTGluaycgLCBhYnNvbHV0ZVBhdGgoJCh0aGlzKS5hdHRyKCdocmVmJykpICwgJ2Rvd25sb2FkJ10pO1xuICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgX3BhcS5wdXNoKFsndHJhY2tMaW5rJyAsIGFic29sdXRlUGF0aCgkKHRoaXMpLmF0dHIoJ2hyZWYnKSkgLCAnbGluayddKTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIC8vIHRyYWNrIGFzIGV2ZW50ICwgZXhhbXBsZSBmb3Igc2hhcmUgbGlua3MuXG4gICAgICAgICAgICB9XG4gICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIF9wYXE7XG59KTtcbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiBib290c3RyYXAtZGF0ZXBpY2tlci5qcyBcclxuICogaHR0cDovL3d3dy5leWVjb24ucm8vYm9vdHN0cmFwLWRhdGVwaWNrZXJcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIENvcHlyaWdodCAyMDEyIFN0ZWZhbiBQZXRyZVxyXG4gKlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4gKlxyXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICpcclxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cclxuXHJcbiFmdW5jdGlvbiggJCApIHtcclxuXHJcblx0Ly8gUGlja2VyIG9iamVjdFxyXG5cclxuXHR2YXIgRGF0ZXBpY2tlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xyXG5cdFx0dGhpcy5lbGVtZW50ID0gJChlbGVtZW50KTtcclxuXHRcdHRoaXMuZm9ybWF0ID0gRFBHbG9iYWwucGFyc2VGb3JtYXQob3B0aW9ucy5mb3JtYXR8fHRoaXMuZWxlbWVudC5kYXRhKCdkYXRlLWZvcm1hdCcpfHwnbW0vZGQveXl5eScpO1xyXG5cdFx0dGhpcy5waWNrZXIgPSAkKERQR2xvYmFsLnRlbXBsYXRlKVxyXG5cdFx0XHRcdFx0XHRcdC5hcHBlbmRUbygnYm9keScpXHJcblx0XHRcdFx0XHRcdFx0Lm9uKHtcclxuXHRcdFx0XHRcdFx0XHRcdGNsaWNrOiAkLnByb3h5KHRoaXMuY2xpY2ssIHRoaXMpLy8sXHJcblx0XHRcdFx0XHRcdFx0XHQvL21vdXNlZG93bjogJC5wcm94eSh0aGlzLm1vdXNlZG93biwgdGhpcylcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdHRoaXMuaXNJbnB1dCA9IHRoaXMuZWxlbWVudC5pcygnaW5wdXQnKTtcclxuXHRcdHRoaXMuY29tcG9uZW50ID0gdGhpcy5lbGVtZW50LmlzKCcuZGF0ZScpID8gdGhpcy5lbGVtZW50LmZpbmQoJy5hZGQtb24nKSA6IGZhbHNlO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzSW5wdXQpIHtcclxuXHRcdFx0dGhpcy5lbGVtZW50Lm9uKHtcclxuXHRcdFx0XHRmb2N1czogJC5wcm94eSh0aGlzLnNob3csIHRoaXMpLFxyXG5cdFx0XHRcdC8vYmx1cjogJC5wcm94eSh0aGlzLmhpZGUsIHRoaXMpLFxyXG5cdFx0XHRcdGtleXVwOiAkLnByb3h5KHRoaXMudXBkYXRlLCB0aGlzKVxyXG5cdFx0XHR9KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICh0aGlzLmNvbXBvbmVudCl7XHJcblx0XHRcdFx0dGhpcy5jb21wb25lbnQub24oJ2NsaWNrJywgJC5wcm94eSh0aGlzLnNob3csIHRoaXMpKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmVsZW1lbnQub24oJ2NsaWNrJywgJC5wcm94eSh0aGlzLnNob3csIHRoaXMpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMubWluVmlld01vZGUgPSBvcHRpb25zLm1pblZpZXdNb2RlfHx0aGlzLmVsZW1lbnQuZGF0YSgnZGF0ZS1taW52aWV3bW9kZScpfHwwO1xyXG5cdFx0aWYgKHR5cGVvZiB0aGlzLm1pblZpZXdNb2RlID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRzd2l0Y2ggKHRoaXMubWluVmlld01vZGUpIHtcclxuXHRcdFx0XHRjYXNlICdtb250aHMnOlxyXG5cdFx0XHRcdFx0dGhpcy5taW5WaWV3TW9kZSA9IDE7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlICd5ZWFycyc6XHJcblx0XHRcdFx0XHR0aGlzLm1pblZpZXdNb2RlID0gMjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHR0aGlzLm1pblZpZXdNb2RlID0gMDtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHR0aGlzLnZpZXdNb2RlID0gb3B0aW9ucy52aWV3TW9kZXx8dGhpcy5lbGVtZW50LmRhdGEoJ2RhdGUtdmlld21vZGUnKXx8MDtcclxuXHRcdGlmICh0eXBlb2YgdGhpcy52aWV3TW9kZSA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0c3dpdGNoICh0aGlzLnZpZXdNb2RlKSB7XHJcblx0XHRcdFx0Y2FzZSAnbW9udGhzJzpcclxuXHRcdFx0XHRcdHRoaXMudmlld01vZGUgPSAxO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSAneWVhcnMnOlxyXG5cdFx0XHRcdFx0dGhpcy52aWV3TW9kZSA9IDI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0dGhpcy52aWV3TW9kZSA9IDA7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0dGhpcy5zdGFydFZpZXdNb2RlID0gdGhpcy52aWV3TW9kZTtcclxuXHRcdHRoaXMud2Vla1N0YXJ0ID0gb3B0aW9ucy53ZWVrU3RhcnR8fHRoaXMuZWxlbWVudC5kYXRhKCdkYXRlLXdlZWtzdGFydCcpfHwwO1xyXG5cdFx0dGhpcy53ZWVrRW5kID0gdGhpcy53ZWVrU3RhcnQgPT09IDAgPyA2IDogdGhpcy53ZWVrU3RhcnQgLSAxO1xyXG5cdFx0dGhpcy5vblJlbmRlciA9IG9wdGlvbnMub25SZW5kZXI7XHJcblx0XHR0aGlzLmZpbGxEb3coKTtcclxuXHRcdHRoaXMuZmlsbE1vbnRocygpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHRcdHRoaXMuc2hvd01vZGUoKTtcclxuXHR9O1xyXG5cclxuXHREYXRlcGlja2VyLnByb3RvdHlwZSA9IHtcclxuXHRcdGNvbnN0cnVjdG9yOiBEYXRlcGlja2VyLFxyXG5cclxuXHRcdHNob3c6IGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0dGhpcy5waWNrZXIuc2hvdygpO1xyXG5cdFx0XHR0aGlzLmhlaWdodCA9IHRoaXMuY29tcG9uZW50ID8gdGhpcy5jb21wb25lbnQub3V0ZXJIZWlnaHQoKSA6IHRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpO1xyXG5cdFx0XHR0aGlzLnBsYWNlKCk7XHJcblx0XHRcdCQod2luZG93KS5vbigncmVzaXplJywgJC5wcm94eSh0aGlzLnBsYWNlLCB0aGlzKSk7XHJcblx0XHRcdGlmIChlICkge1xyXG5cdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghdGhpcy5pc0lucHV0KSB7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIHRoYXQgPSB0aGlzO1xyXG5cdFx0XHQkKGRvY3VtZW50KS5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oZXYpe1xyXG5cdFx0XHRcdGlmICgkKGV2LnRhcmdldCkuY2xvc2VzdCgnLmRhdGVwaWNrZXInKS5sZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0dGhhdC5oaWRlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5lbGVtZW50LnRyaWdnZXIoe1xyXG5cdFx0XHRcdHR5cGU6ICdzaG93JyxcclxuXHRcdFx0XHRkYXRlOiB0aGlzLmRhdGVcclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGhpZGU6IGZ1bmN0aW9uKCl7XHJcblx0XHRcdHRoaXMucGlja2VyLmhpZGUoKTtcclxuXHRcdFx0JCh3aW5kb3cpLm9mZigncmVzaXplJywgdGhpcy5wbGFjZSk7XHJcblx0XHRcdHRoaXMudmlld01vZGUgPSB0aGlzLnN0YXJ0Vmlld01vZGU7XHJcblx0XHRcdHRoaXMuc2hvd01vZGUoKTtcclxuXHRcdFx0aWYgKCF0aGlzLmlzSW5wdXQpIHtcclxuXHRcdFx0XHQkKGRvY3VtZW50KS5vZmYoJ21vdXNlZG93bicsIHRoaXMuaGlkZSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly90aGlzLnNldCgpO1xyXG5cdFx0XHR0aGlzLmVsZW1lbnQudHJpZ2dlcih7XHJcblx0XHRcdFx0dHlwZTogJ2hpZGUnLFxyXG5cdFx0XHRcdGRhdGU6IHRoaXMuZGF0ZVxyXG5cdFx0XHR9KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0c2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIGZvcm1hdGVkID0gRFBHbG9iYWwuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsIHRoaXMuZm9ybWF0KTtcclxuXHRcdFx0aWYgKCF0aGlzLmlzSW5wdXQpIHtcclxuXHRcdFx0XHRpZiAodGhpcy5jb21wb25lbnQpe1xyXG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LmZpbmQoJ2lucHV0JykucHJvcCgndmFsdWUnLCBmb3JtYXRlZCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuZWxlbWVudC5kYXRhKCdkYXRlJywgZm9ybWF0ZWQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuZWxlbWVudC5wcm9wKCd2YWx1ZScsIGZvcm1hdGVkKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHRzZXRWYWx1ZTogZnVuY3Rpb24obmV3RGF0ZSkge1xyXG5cdFx0XHRpZiAodHlwZW9mIG5ld0RhdGUgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdFx0dGhpcy5kYXRlID0gRFBHbG9iYWwucGFyc2VEYXRlKG5ld0RhdGUsIHRoaXMuZm9ybWF0KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmRhdGUgPSBuZXcgRGF0ZShuZXdEYXRlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLnNldCgpO1xyXG5cdFx0XHR0aGlzLnZpZXdEYXRlID0gbmV3IERhdGUodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMuZGF0ZS5nZXRNb250aCgpLCAxLCAwLCAwLCAwLCAwKTtcclxuXHRcdFx0dGhpcy5maWxsKCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdHBsYWNlOiBmdW5jdGlvbigpe1xyXG5cdFx0XHR2YXIgb2Zmc2V0ID0gdGhpcy5jb21wb25lbnQgPyB0aGlzLmNvbXBvbmVudC5vZmZzZXQoKSA6IHRoaXMuZWxlbWVudC5vZmZzZXQoKTtcclxuXHRcdFx0dGhpcy5waWNrZXIuY3NzKHtcclxuXHRcdFx0XHR0b3A6IG9mZnNldC50b3AgKyB0aGlzLmhlaWdodCxcclxuXHRcdFx0XHRsZWZ0OiBvZmZzZXQubGVmdFxyXG5cdFx0XHR9KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0dXBkYXRlOiBmdW5jdGlvbihuZXdEYXRlKXtcclxuXHRcdFx0dGhpcy5kYXRlID0gRFBHbG9iYWwucGFyc2VEYXRlKFxyXG5cdFx0XHRcdHR5cGVvZiBuZXdEYXRlID09PSAnc3RyaW5nJyA/IG5ld0RhdGUgOiAodGhpcy5pc0lucHV0ID8gdGhpcy5lbGVtZW50LnByb3AoJ3ZhbHVlJykgOiB0aGlzLmVsZW1lbnQuZGF0YSgnZGF0ZScpKSxcclxuXHRcdFx0XHR0aGlzLmZvcm1hdFxyXG5cdFx0XHQpO1xyXG5cdFx0XHR0aGlzLnZpZXdEYXRlID0gbmV3IERhdGUodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMuZGF0ZS5nZXRNb250aCgpLCAxLCAwLCAwLCAwLCAwKTtcclxuXHRcdFx0dGhpcy5maWxsKCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGZpbGxEb3c6IGZ1bmN0aW9uKCl7XHJcblx0XHRcdHZhciBkb3dDbnQgPSB0aGlzLndlZWtTdGFydDtcclxuXHRcdFx0dmFyIGh0bWwgPSAnPHRyPic7XHJcblx0XHRcdHdoaWxlIChkb3dDbnQgPCB0aGlzLndlZWtTdGFydCArIDcpIHtcclxuXHRcdFx0XHRodG1sICs9ICc8dGggY2xhc3M9XCJkb3dcIj4nK0RQR2xvYmFsLmRhdGVzLmRheXNNaW5bKGRvd0NudCsrKSU3XSsnPC90aD4nO1xyXG5cdFx0XHR9XHJcblx0XHRcdGh0bWwgKz0gJzwvdHI+JztcclxuXHRcdFx0dGhpcy5waWNrZXIuZmluZCgnLmRhdGVwaWNrZXItZGF5cyB0aGVhZCcpLmFwcGVuZChodG1sKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0ZmlsbE1vbnRoczogZnVuY3Rpb24oKXtcclxuXHRcdFx0dmFyIGh0bWwgPSAnJztcclxuXHRcdFx0dmFyIGkgPSAwXHJcblx0XHRcdHdoaWxlIChpIDwgMTIpIHtcclxuXHRcdFx0XHRodG1sICs9ICc8c3BhbiBjbGFzcz1cIm1vbnRoXCI+JytEUEdsb2JhbC5kYXRlcy5tb250aHNTaG9ydFtpKytdKyc8L3NwYW4+JztcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLnBpY2tlci5maW5kKCcuZGF0ZXBpY2tlci1tb250aHMgdGQnKS5hcHBlbmQoaHRtbCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGZpbGw6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgZCA9IG5ldyBEYXRlKHRoaXMudmlld0RhdGUpLFxyXG5cdFx0XHRcdHllYXIgPSBkLmdldEZ1bGxZZWFyKCksXHJcblx0XHRcdFx0bW9udGggPSBkLmdldE1vbnRoKCksXHJcblx0XHRcdFx0Y3VycmVudERhdGUgPSB0aGlzLmRhdGUudmFsdWVPZigpO1xyXG5cdFx0XHR0aGlzLnBpY2tlci5maW5kKCcuZGF0ZXBpY2tlci1kYXlzIHRoOmVxKDEpJylcclxuXHRcdFx0XHRcdFx0LnRleHQoRFBHbG9iYWwuZGF0ZXMubW9udGhzW21vbnRoXSsnICcreWVhcik7XHJcblx0XHRcdHZhciBwcmV2TW9udGggPSBuZXcgRGF0ZSh5ZWFyLCBtb250aC0xLCAyOCwwLDAsMCwwKSxcclxuXHRcdFx0XHRkYXkgPSBEUEdsb2JhbC5nZXREYXlzSW5Nb250aChwcmV2TW9udGguZ2V0RnVsbFllYXIoKSwgcHJldk1vbnRoLmdldE1vbnRoKCkpO1xyXG5cdFx0XHRwcmV2TW9udGguc2V0RGF0ZShkYXkpO1xyXG5cdFx0XHRwcmV2TW9udGguc2V0RGF0ZShkYXkgLSAocHJldk1vbnRoLmdldERheSgpIC0gdGhpcy53ZWVrU3RhcnQgKyA3KSU3KTtcclxuXHRcdFx0dmFyIG5leHRNb250aCA9IG5ldyBEYXRlKHByZXZNb250aCk7XHJcblx0XHRcdG5leHRNb250aC5zZXREYXRlKG5leHRNb250aC5nZXREYXRlKCkgKyA0Mik7XHJcblx0XHRcdG5leHRNb250aCA9IG5leHRNb250aC52YWx1ZU9mKCk7XHJcblx0XHRcdHZhciBodG1sID0gW107XHJcblx0XHRcdHZhciBjbHNOYW1lLFxyXG5cdFx0XHRcdHByZXZZLFxyXG5cdFx0XHRcdHByZXZNO1xyXG5cdFx0XHR3aGlsZShwcmV2TW9udGgudmFsdWVPZigpIDwgbmV4dE1vbnRoKSB7XHJcblx0XHRcdFx0aWYgKHByZXZNb250aC5nZXREYXkoKSA9PT0gdGhpcy53ZWVrU3RhcnQpIHtcclxuXHRcdFx0XHRcdGh0bWwucHVzaCgnPHRyPicpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjbHNOYW1lID0gdGhpcy5vblJlbmRlcihwcmV2TW9udGgpO1xyXG5cdFx0XHRcdHByZXZZID0gcHJldk1vbnRoLmdldEZ1bGxZZWFyKCk7XHJcblx0XHRcdFx0cHJldk0gPSBwcmV2TW9udGguZ2V0TW9udGgoKTtcclxuXHRcdFx0XHRpZiAoKHByZXZNIDwgbW9udGggJiYgIHByZXZZID09PSB5ZWFyKSB8fCAgcHJldlkgPCB5ZWFyKSB7XHJcblx0XHRcdFx0XHRjbHNOYW1lICs9ICcgb2xkJztcclxuXHRcdFx0XHR9IGVsc2UgaWYgKChwcmV2TSA+IG1vbnRoICYmIHByZXZZID09PSB5ZWFyKSB8fCBwcmV2WSA+IHllYXIpIHtcclxuXHRcdFx0XHRcdGNsc05hbWUgKz0gJyBuZXcnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAocHJldk1vbnRoLnZhbHVlT2YoKSA9PT0gY3VycmVudERhdGUpIHtcclxuXHRcdFx0XHRcdGNsc05hbWUgKz0gJyBhY3RpdmUnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRodG1sLnB1c2goJzx0ZCBjbGFzcz1cImRheSAnK2Nsc05hbWUrJ1wiPicrcHJldk1vbnRoLmdldERhdGUoKSArICc8L3RkPicpO1xyXG5cdFx0XHRcdGlmIChwcmV2TW9udGguZ2V0RGF5KCkgPT09IHRoaXMud2Vla0VuZCkge1xyXG5cdFx0XHRcdFx0aHRtbC5wdXNoKCc8L3RyPicpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRwcmV2TW9udGguc2V0RGF0ZShwcmV2TW9udGguZ2V0RGF0ZSgpKzEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMucGlja2VyLmZpbmQoJy5kYXRlcGlja2VyLWRheXMgdGJvZHknKS5lbXB0eSgpLmFwcGVuZChodG1sLmpvaW4oJycpKTtcclxuXHRcdFx0dmFyIGN1cnJlbnRZZWFyID0gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCk7XHJcblxyXG5cdFx0XHR2YXIgbW9udGhzID0gdGhpcy5waWNrZXIuZmluZCgnLmRhdGVwaWNrZXItbW9udGhzJylcclxuXHRcdFx0XHRcdFx0LmZpbmQoJ3RoOmVxKDEpJylcclxuXHRcdFx0XHRcdFx0XHQudGV4dCh5ZWFyKVxyXG5cdFx0XHRcdFx0XHRcdC5lbmQoKVxyXG5cdFx0XHRcdFx0XHQuZmluZCgnc3BhbicpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcclxuXHRcdFx0aWYgKGN1cnJlbnRZZWFyID09PSB5ZWFyKSB7XHJcblx0XHRcdFx0bW9udGhzLmVxKHRoaXMuZGF0ZS5nZXRNb250aCgpKS5hZGRDbGFzcygnYWN0aXZlJyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGh0bWwgPSAnJztcclxuXHRcdFx0eWVhciA9IHBhcnNlSW50KHllYXIvMTAsIDEwKSAqIDEwO1xyXG5cdFx0XHR2YXIgeWVhckNvbnQgPSB0aGlzLnBpY2tlci5maW5kKCcuZGF0ZXBpY2tlci15ZWFycycpXHJcblx0XHRcdFx0XHRcdFx0XHQuZmluZCgndGg6ZXEoMSknKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQudGV4dCh5ZWFyICsgJy0nICsgKHllYXIgKyA5KSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0LmVuZCgpXHJcblx0XHRcdFx0XHRcdFx0XHQuZmluZCgndGQnKTtcclxuXHRcdFx0eWVhciAtPSAxO1xyXG5cdFx0XHRmb3IgKHZhciBpID0gLTE7IGkgPCAxMTsgaSsrKSB7XHJcblx0XHRcdFx0aHRtbCArPSAnPHNwYW4gY2xhc3M9XCJ5ZWFyJysoaSA9PT0gLTEgfHwgaSA9PT0gMTAgPyAnIG9sZCcgOiAnJykrKGN1cnJlbnRZZWFyID09PSB5ZWFyID8gJyBhY3RpdmUnIDogJycpKydcIj4nK3llYXIrJzwvc3Bhbj4nO1xyXG5cdFx0XHRcdHllYXIgKz0gMTtcclxuXHRcdFx0fVxyXG5cdFx0XHR5ZWFyQ29udC5odG1sKGh0bWwpO1xyXG5cdFx0fSxcclxuXHJcblx0XHRjbGljazogZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdHZhciB0YXJnZXQgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCdzcGFuLCB0ZCwgdGgnKTtcclxuXHRcdFx0aWYgKHRhcmdldC5sZW5ndGggPT09IDEpIHtcclxuXHRcdFx0XHRzd2l0Y2godGFyZ2V0WzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHtcclxuXHRcdFx0XHRcdGNhc2UgJ3RoJzpcclxuXHRcdFx0XHRcdFx0c3dpdGNoKHRhcmdldFswXS5jbGFzc05hbWUpIHtcclxuXHRcdFx0XHRcdFx0XHRjYXNlICdzd2l0Y2gnOlxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zaG93TW9kZSgxKTtcclxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgJ3ByZXYnOlxyXG5cdFx0XHRcdFx0XHRcdGNhc2UgJ25leHQnOlxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy52aWV3RGF0ZVsnc2V0JytEUEdsb2JhbC5tb2Rlc1t0aGlzLnZpZXdNb2RlXS5uYXZGbmNdLmNhbGwoXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudmlld0RhdGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudmlld0RhdGVbJ2dldCcrRFBHbG9iYWwubW9kZXNbdGhpcy52aWV3TW9kZV0ubmF2Rm5jXS5jYWxsKHRoaXMudmlld0RhdGUpICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0RFBHbG9iYWwubW9kZXNbdGhpcy52aWV3TW9kZV0ubmF2U3RlcCAqICh0YXJnZXRbMF0uY2xhc3NOYW1lID09PSAncHJldicgPyAtMSA6IDEpXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5maWxsKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNldCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRjYXNlICdzcGFuJzpcclxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldC5pcygnLm1vbnRoJykpIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgbW9udGggPSB0YXJnZXQucGFyZW50KCkuZmluZCgnc3BhbicpLmluZGV4KHRhcmdldCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy52aWV3RGF0ZS5zZXRNb250aChtb250aCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHllYXIgPSBwYXJzZUludCh0YXJnZXQudGV4dCgpLCAxMCl8fDA7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy52aWV3RGF0ZS5zZXRGdWxsWWVhcih5ZWFyKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy52aWV3TW9kZSAhPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGF0ZSA9IG5ldyBEYXRlKHRoaXMudmlld0RhdGUpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZWxlbWVudC50cmlnZ2VyKHtcclxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdjaGFuZ2VEYXRlJyxcclxuXHRcdFx0XHRcdFx0XHRcdGRhdGU6IHRoaXMuZGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRcdHZpZXdNb2RlOiBEUEdsb2JhbC5tb2Rlc1t0aGlzLnZpZXdNb2RlXS5jbHNOYW1lXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0dGhpcy5zaG93TW9kZSgtMSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZmlsbCgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldCgpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgJ3RkJzpcclxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldC5pcygnLmRheScpICYmICF0YXJnZXQuaXMoJy5kaXNhYmxlZCcpKXtcclxuXHRcdFx0XHRcdFx0XHR2YXIgZGF5ID0gcGFyc2VJbnQodGFyZ2V0LnRleHQoKSwgMTApfHwxO1xyXG5cdFx0XHRcdFx0XHRcdHZhciBtb250aCA9IHRoaXMudmlld0RhdGUuZ2V0TW9udGgoKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAodGFyZ2V0LmlzKCcub2xkJykpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG1vbnRoIC09IDE7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICh0YXJnZXQuaXMoJy5uZXcnKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0bW9udGggKz0gMTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dmFyIHllYXIgPSB0aGlzLnZpZXdEYXRlLmdldEZ1bGxZZWFyKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSwwLDAsMCwwKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnZpZXdEYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIE1hdGgubWluKDI4LCBkYXkpLDAsMCwwLDApO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZmlsbCgpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2V0KCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5lbGVtZW50LnRyaWdnZXIoe1xyXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ2NoYW5nZURhdGUnLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZGF0ZTogdGhpcy5kYXRlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmlld01vZGU6IERQR2xvYmFsLm1vZGVzW3RoaXMudmlld01vZGVdLmNsc05hbWVcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0bW91c2Vkb3duOiBmdW5jdGlvbihlKXtcclxuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0fSxcclxuXHJcblx0XHRzaG93TW9kZTogZnVuY3Rpb24oZGlyKSB7XHJcblx0XHRcdGlmIChkaXIpIHtcclxuXHRcdFx0XHR0aGlzLnZpZXdNb2RlID0gTWF0aC5tYXgodGhpcy5taW5WaWV3TW9kZSwgTWF0aC5taW4oMiwgdGhpcy52aWV3TW9kZSArIGRpcikpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMucGlja2VyLmZpbmQoJz5kaXYnKS5oaWRlKCkuZmlsdGVyKCcuZGF0ZXBpY2tlci0nK0RQR2xvYmFsLm1vZGVzW3RoaXMudmlld01vZGVdLmNsc05hbWUpLnNob3coKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQkLmZuLmRhdGVwaWNrZXIgPSBmdW5jdGlvbiAoIG9wdGlvbiwgdmFsICkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHZhciAkdGhpcyA9ICQodGhpcyksXHJcblx0XHRcdFx0ZGF0YSA9ICR0aGlzLmRhdGEoJ2RhdGVwaWNrZXInKSxcclxuXHRcdFx0XHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgb3B0aW9uO1xyXG5cdFx0XHRpZiAoIWRhdGEpIHtcclxuXHRcdFx0XHQkdGhpcy5kYXRhKCdkYXRlcGlja2VyJywgKGRhdGEgPSBuZXcgRGF0ZXBpY2tlcih0aGlzLCAkLmV4dGVuZCh7fSwgJC5mbi5kYXRlcGlja2VyLmRlZmF1bHRzLG9wdGlvbnMpKSkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKHZhbCk7XHJcblx0XHR9KTtcclxuXHR9O1xyXG5cclxuXHQkLmZuLmRhdGVwaWNrZXIuZGVmYXVsdHMgPSB7XHJcblx0XHRvblJlbmRlcjogZnVuY3Rpb24oZGF0ZSkge1xyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9XHJcblx0fTtcclxuXHQkLmZuLmRhdGVwaWNrZXIuQ29uc3RydWN0b3IgPSBEYXRlcGlja2VyO1xyXG5cclxuXHR2YXIgRFBHbG9iYWwgPSB7XHJcblx0XHRtb2RlczogW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0Y2xzTmFtZTogJ2RheXMnLFxyXG5cdFx0XHRcdG5hdkZuYzogJ01vbnRoJyxcclxuXHRcdFx0XHRuYXZTdGVwOiAxXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjbHNOYW1lOiAnbW9udGhzJyxcclxuXHRcdFx0XHRuYXZGbmM6ICdGdWxsWWVhcicsXHJcblx0XHRcdFx0bmF2U3RlcDogMVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0Y2xzTmFtZTogJ3llYXJzJyxcclxuXHRcdFx0XHRuYXZGbmM6ICdGdWxsWWVhcicsXHJcblx0XHRcdFx0bmF2U3RlcDogMTBcclxuXHRcdH1dLFxyXG5cdFx0ZGF0ZXM6e1xyXG5cdFx0XHRkYXlzOiBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiLCBcIlN1bmRheVwiXSxcclxuXHRcdFx0ZGF5c1Nob3J0OiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIiwgXCJTdW5cIl0sXHJcblx0XHRcdGRheXNNaW46IFtcIlN1XCIsIFwiTW9cIiwgXCJUdVwiLCBcIldlXCIsIFwiVGhcIiwgXCJGclwiLCBcIlNhXCIsIFwiU3VcIl0sXHJcblx0XHRcdG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXHJcblx0XHRcdG1vbnRoc1Nob3J0OiBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl1cclxuXHRcdH0sXHJcblx0XHRpc0xlYXBZZWFyOiBmdW5jdGlvbiAoeWVhcikge1xyXG5cdFx0XHRyZXR1cm4gKCgoeWVhciAlIDQgPT09IDApICYmICh5ZWFyICUgMTAwICE9PSAwKSkgfHwgKHllYXIgJSA0MDAgPT09IDApKVxyXG5cdFx0fSxcclxuXHRcdGdldERheXNJbk1vbnRoOiBmdW5jdGlvbiAoeWVhciwgbW9udGgpIHtcclxuXHRcdFx0cmV0dXJuIFszMSwgKERQR2xvYmFsLmlzTGVhcFllYXIoeWVhcikgPyAyOSA6IDI4KSwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdW21vbnRoXVxyXG5cdFx0fSxcclxuXHRcdHBhcnNlRm9ybWF0OiBmdW5jdGlvbihmb3JtYXQpe1xyXG5cdFx0XHR2YXIgc2VwYXJhdG9yID0gZm9ybWF0Lm1hdGNoKC9bLlxcL1xcLVxcc10uKj8vKSxcclxuXHRcdFx0XHRwYXJ0cyA9IGZvcm1hdC5zcGxpdCgvXFxXKy8pO1xyXG5cdFx0XHRpZiAoIXNlcGFyYXRvciB8fCAhcGFydHMgfHwgcGFydHMubGVuZ3RoID09PSAwKXtcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGUgZm9ybWF0LlwiKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4ge3NlcGFyYXRvcjogc2VwYXJhdG9yLCBwYXJ0czogcGFydHN9O1xyXG5cdFx0fSxcclxuXHRcdHBhcnNlRGF0ZTogZnVuY3Rpb24oZGF0ZSwgZm9ybWF0KSB7XHJcblx0XHRcdHZhciBwYXJ0cyA9IGRhdGUuc3BsaXQoZm9ybWF0LnNlcGFyYXRvciksXHJcblx0XHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKCksXHJcblx0XHRcdFx0dmFsO1xyXG5cdFx0XHRkYXRlLnNldEhvdXJzKDApO1xyXG5cdFx0XHRkYXRlLnNldE1pbnV0ZXMoMCk7XHJcblx0XHRcdGRhdGUuc2V0U2Vjb25kcygwKTtcclxuXHRcdFx0ZGF0ZS5zZXRNaWxsaXNlY29uZHMoMCk7XHJcblx0XHRcdGlmIChwYXJ0cy5sZW5ndGggPT09IGZvcm1hdC5wYXJ0cy5sZW5ndGgpIHtcclxuXHRcdFx0XHR2YXIgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF5ID0gZGF0ZS5nZXREYXRlKCksIG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xyXG5cdFx0XHRcdGZvciAodmFyIGk9MCwgY250ID0gZm9ybWF0LnBhcnRzLmxlbmd0aDsgaSA8IGNudDsgaSsrKSB7XHJcblx0XHRcdFx0XHR2YWwgPSBwYXJzZUludChwYXJ0c1tpXSwgMTApfHwxO1xyXG5cdFx0XHRcdFx0c3dpdGNoKGZvcm1hdC5wYXJ0c1tpXSkge1xyXG5cdFx0XHRcdFx0XHRjYXNlICdkZCc6XHJcblx0XHRcdFx0XHRcdGNhc2UgJ2QnOlxyXG5cdFx0XHRcdFx0XHRcdGRheSA9IHZhbDtcclxuXHRcdFx0XHRcdFx0XHRkYXRlLnNldERhdGUodmFsKTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnbW0nOlxyXG5cdFx0XHRcdFx0XHRjYXNlICdtJzpcclxuXHRcdFx0XHRcdFx0XHRtb250aCA9IHZhbCAtIDE7XHJcblx0XHRcdFx0XHRcdFx0ZGF0ZS5zZXRNb250aCh2YWwgLSAxKTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAneXknOlxyXG5cdFx0XHRcdFx0XHRcdHllYXIgPSAyMDAwICsgdmFsO1xyXG5cdFx0XHRcdFx0XHRcdGRhdGUuc2V0RnVsbFllYXIoMjAwMCArIHZhbCk7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ3l5eXknOlxyXG5cdFx0XHRcdFx0XHRcdHllYXIgPSB2YWw7XHJcblx0XHRcdFx0XHRcdFx0ZGF0ZS5zZXRGdWxsWWVhcih2YWwpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSwgMCAsMCAsMCk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGRhdGU7XHJcblx0XHR9LFxyXG5cdFx0Zm9ybWF0RGF0ZTogZnVuY3Rpb24oZGF0ZSwgZm9ybWF0KXtcclxuXHRcdFx0dmFyIHZhbCA9IHtcclxuXHRcdFx0XHRkOiBkYXRlLmdldERhdGUoKSxcclxuXHRcdFx0XHRtOiBkYXRlLmdldE1vbnRoKCkgKyAxLFxyXG5cdFx0XHRcdHl5OiBkYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksXHJcblx0XHRcdFx0eXl5eTogZGF0ZS5nZXRGdWxsWWVhcigpXHJcblx0XHRcdH07XHJcblx0XHRcdHZhbC5kZCA9ICh2YWwuZCA8IDEwID8gJzAnIDogJycpICsgdmFsLmQ7XHJcblx0XHRcdHZhbC5tbSA9ICh2YWwubSA8IDEwID8gJzAnIDogJycpICsgdmFsLm07XHJcblx0XHRcdHZhciBkYXRlID0gW107XHJcblx0XHRcdGZvciAodmFyIGk9MCwgY250ID0gZm9ybWF0LnBhcnRzLmxlbmd0aDsgaSA8IGNudDsgaSsrKSB7XHJcblx0XHRcdFx0ZGF0ZS5wdXNoKHZhbFtmb3JtYXQucGFydHNbaV1dKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZGF0ZS5qb2luKGZvcm1hdC5zZXBhcmF0b3IpO1xyXG5cdFx0fSxcclxuXHRcdGhlYWRUZW1wbGF0ZTogJzx0aGVhZD4nK1xyXG5cdFx0XHRcdFx0XHRcdCc8dHI+JytcclxuXHRcdFx0XHRcdFx0XHRcdCc8dGggY2xhc3M9XCJwcmV2XCI+JmxzYXF1bzs8L3RoPicrXHJcblx0XHRcdFx0XHRcdFx0XHQnPHRoIGNvbHNwYW49XCI1XCIgY2xhc3M9XCJzd2l0Y2hcIj48L3RoPicrXHJcblx0XHRcdFx0XHRcdFx0XHQnPHRoIGNsYXNzPVwibmV4dFwiPiZyc2FxdW87PC90aD4nK1xyXG5cdFx0XHRcdFx0XHRcdCc8L3RyPicrXHJcblx0XHRcdFx0XHRcdCc8L3RoZWFkPicsXHJcblx0XHRjb250VGVtcGxhdGU6ICc8dGJvZHk+PHRyPjx0ZCBjb2xzcGFuPVwiN1wiPjwvdGQ+PC90cj48L3Rib2R5PidcclxuXHR9O1xyXG5cdERQR2xvYmFsLnRlbXBsYXRlID0gJzxkaXYgY2xhc3M9XCJkYXRlcGlja2VyIGRyb3Bkb3duLW1lbnVcIj4nK1xyXG5cdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1kYXlzXCI+JytcclxuXHRcdFx0XHRcdFx0XHRcdCc8dGFibGUgY2xhc3M9XCJ0YWJsZVwiPicrXHJcblx0XHRcdFx0XHRcdFx0XHRcdERQR2xvYmFsLmhlYWRUZW1wbGF0ZStcclxuXHRcdFx0XHRcdFx0XHRcdFx0Jzx0Ym9keT48L3Rib2R5PicrXHJcblx0XHRcdFx0XHRcdFx0XHQnPC90YWJsZT4nK1xyXG5cdFx0XHRcdFx0XHRcdCc8L2Rpdj4nK1xyXG5cdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1tb250aHNcIj4nK1xyXG5cdFx0XHRcdFx0XHRcdFx0Jzx0YWJsZSBjbGFzcz1cInRhYmxlXCI+JytcclxuXHRcdFx0XHRcdFx0XHRcdFx0RFBHbG9iYWwuaGVhZFRlbXBsYXRlK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHREUEdsb2JhbC5jb250VGVtcGxhdGUrXHJcblx0XHRcdFx0XHRcdFx0XHQnPC90YWJsZT4nK1xyXG5cdFx0XHRcdFx0XHRcdCc8L2Rpdj4nK1xyXG5cdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci15ZWFyc1wiPicrXHJcblx0XHRcdFx0XHRcdFx0XHQnPHRhYmxlIGNsYXNzPVwidGFibGVcIj4nK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHREUEdsb2JhbC5oZWFkVGVtcGxhdGUrXHJcblx0XHRcdFx0XHRcdFx0XHRcdERQR2xvYmFsLmNvbnRUZW1wbGF0ZStcclxuXHRcdFx0XHRcdFx0XHRcdCc8L3RhYmxlPicrXHJcblx0XHRcdFx0XHRcdFx0JzwvZGl2PicrXHJcblx0XHRcdFx0XHRcdCc8L2Rpdj4nO1xyXG5cclxufSggd2luZG93LmpRdWVyeSApO1xyXG4iLCIvKiFcbiAqIEJvb3RzdHJhcCB2My40LjEgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG5cbmlmICh0eXBlb2YgalF1ZXJ5ID09PSAndW5kZWZpbmVkJykge1xuICB0aHJvdyBuZXcgRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnknKVxufVxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB2YXIgdmVyc2lvbiA9ICQuZm4uanF1ZXJ5LnNwbGl0KCcgJylbMF0uc3BsaXQoJy4nKVxuICBpZiAoKHZlcnNpb25bMF0gPCAyICYmIHZlcnNpb25bMV0gPCA5KSB8fCAodmVyc2lvblswXSA9PSAxICYmIHZlcnNpb25bMV0gPT0gOSAmJiB2ZXJzaW9uWzJdIDwgMSkgfHwgKHZlcnNpb25bMF0gPiAzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQm9vdHN0cmFwXFwncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGpRdWVyeSB2ZXJzaW9uIDEuOS4xIG9yIGhpZ2hlciwgYnV0IGxvd2VyIHRoYW4gdmVyc2lvbiA0JylcbiAgfVxufShqUXVlcnkpO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEJvb3RzdHJhcDogdHJhbnNpdGlvbi5qcyB2My40LjFcbiAqIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzMuNC9qYXZhc2NyaXB0LyN0cmFuc2l0aW9uc1xuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIENTUyBUUkFOU0lUSU9OIFNVUFBPUlQgKFNob3V0b3V0OiBodHRwczovL21vZGVybml6ci5jb20vKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKCkge1xuICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jvb3RzdHJhcCcpXG5cbiAgICB2YXIgdHJhbnNFbmRFdmVudE5hbWVzID0ge1xuICAgICAgV2Via2l0VHJhbnNpdGlvbiA6ICd3ZWJraXRUcmFuc2l0aW9uRW5kJyxcbiAgICAgIE1velRyYW5zaXRpb24gICAgOiAndHJhbnNpdGlvbmVuZCcsXG4gICAgICBPVHJhbnNpdGlvbiAgICAgIDogJ29UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kJyxcbiAgICAgIHRyYW5zaXRpb24gICAgICAgOiAndHJhbnNpdGlvbmVuZCdcbiAgICB9XG5cbiAgICBmb3IgKHZhciBuYW1lIGluIHRyYW5zRW5kRXZlbnROYW1lcykge1xuICAgICAgaWYgKGVsLnN0eWxlW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHsgZW5kOiB0cmFuc0VuZEV2ZW50TmFtZXNbbmFtZV0gfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZSAvLyBleHBsaWNpdCBmb3IgaWU4ICggIC5fLilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vYmxvZy5hbGV4bWFjY2F3LmNvbS9jc3MtdHJhbnNpdGlvbnNcbiAgJC5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIChkdXJhdGlvbikge1xuICAgIHZhciBjYWxsZWQgPSBmYWxzZVxuICAgIHZhciAkZWwgPSB0aGlzXG4gICAgJCh0aGlzKS5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZSB9KVxuICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgaWYgKCFjYWxsZWQpICQoJGVsKS50cmlnZ2VyKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCkgfVxuICAgIHNldFRpbWVvdXQoY2FsbGJhY2ssIGR1cmF0aW9uKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAkKGZ1bmN0aW9uICgpIHtcbiAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiA9IHRyYW5zaXRpb25FbmQoKVxuXG4gICAgaWYgKCEkLnN1cHBvcnQudHJhbnNpdGlvbikgcmV0dXJuXG5cbiAgICAkLmV2ZW50LnNwZWNpYWwuYnNUcmFuc2l0aW9uRW5kID0ge1xuICAgICAgYmluZFR5cGU6ICQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxcbiAgICAgIGRlbGVnYXRlVHlwZTogJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLFxuICAgICAgaGFuZGxlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoJChlLnRhcmdldCkuaXModGhpcykpIHJldHVybiBlLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbn0oalF1ZXJ5KTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBCb290c3RyYXA6IGFsZXJ0LmpzIHYzLjQuMVxuICogaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvMy40L2phdmFzY3JpcHQvI2FsZXJ0c1xuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIEFMRVJUIENMQVNTIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHZhciBkaXNtaXNzID0gJ1tkYXRhLWRpc21pc3M9XCJhbGVydFwiXSdcbiAgdmFyIEFsZXJ0ICAgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAkKGVsKS5vbignY2xpY2snLCBkaXNtaXNzLCB0aGlzLmNsb3NlKVxuICB9XG5cbiAgQWxlcnQuVkVSU0lPTiA9ICczLjQuMSdcblxuICBBbGVydC5UUkFOU0lUSU9OX0RVUkFUSU9OID0gMTUwXG5cbiAgQWxlcnQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgJHRoaXMgICAgPSAkKHRoaXMpXG4gICAgdmFyIHNlbGVjdG9yID0gJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKVxuXG4gICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdocmVmJylcbiAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IgJiYgc2VsZWN0b3IucmVwbGFjZSgvLiooPz0jW15cXHNdKiQpLywgJycpIC8vIHN0cmlwIGZvciBpZTdcbiAgICB9XG5cbiAgICBzZWxlY3RvciAgICA9IHNlbGVjdG9yID09PSAnIycgPyBbXSA6IHNlbGVjdG9yXG4gICAgdmFyICRwYXJlbnQgPSAkKGRvY3VtZW50KS5maW5kKHNlbGVjdG9yKVxuXG4gICAgaWYgKGUpIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgaWYgKCEkcGFyZW50Lmxlbmd0aCkge1xuICAgICAgJHBhcmVudCA9ICR0aGlzLmNsb3Nlc3QoJy5hbGVydCcpXG4gICAgfVxuXG4gICAgJHBhcmVudC50cmlnZ2VyKGUgPSAkLkV2ZW50KCdjbG9zZS5icy5hbGVydCcpKVxuXG4gICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgJHBhcmVudC5yZW1vdmVDbGFzcygnaW4nKVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudCgpIHtcbiAgICAgIC8vIGRldGFjaCBmcm9tIHBhcmVudCwgZmlyZSBldmVudCB0aGVuIGNsZWFuIHVwIGRhdGFcbiAgICAgICRwYXJlbnQuZGV0YWNoKCkudHJpZ2dlcignY2xvc2VkLmJzLmFsZXJ0JykucmVtb3ZlKClcbiAgICB9XG5cbiAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiAkcGFyZW50Lmhhc0NsYXNzKCdmYWRlJykgP1xuICAgICAgJHBhcmVudFxuICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCByZW1vdmVFbGVtZW50KVxuICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoQWxlcnQuVFJBTlNJVElPTl9EVVJBVElPTikgOlxuICAgICAgcmVtb3ZlRWxlbWVudCgpXG4gIH1cblxuXG4gIC8vIEFMRVJUIFBMVUdJTiBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgID0gJHRoaXMuZGF0YSgnYnMuYWxlcnQnKVxuXG4gICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLmFsZXJ0JywgKGRhdGEgPSBuZXcgQWxlcnQodGhpcykpKVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXS5jYWxsKCR0aGlzKVxuICAgIH0pXG4gIH1cblxuICB2YXIgb2xkID0gJC5mbi5hbGVydFxuXG4gICQuZm4uYWxlcnQgICAgICAgICAgICAgPSBQbHVnaW5cbiAgJC5mbi5hbGVydC5Db25zdHJ1Y3RvciA9IEFsZXJ0XG5cblxuICAvLyBBTEVSVCBOTyBDT05GTElDVFxuICAvLyA9PT09PT09PT09PT09PT09PVxuXG4gICQuZm4uYWxlcnQubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuLmFsZXJ0ID0gb2xkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG5cbiAgLy8gQUxFUlQgREFUQS1BUElcbiAgLy8gPT09PT09PT09PT09PT1cblxuICAkKGRvY3VtZW50KS5vbignY2xpY2suYnMuYWxlcnQuZGF0YS1hcGknLCBkaXNtaXNzLCBBbGVydC5wcm90b3R5cGUuY2xvc2UpXG5cbn0oalF1ZXJ5KTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBCb290c3RyYXA6IGJ1dHRvbi5qcyB2My40LjFcbiAqIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzMuNC9qYXZhc2NyaXB0LyNidXR0b25zXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvcHlyaWdodCAyMDExLTIwMTkgVHdpdHRlciwgSW5jLlxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5cbitmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gQlVUVE9OIFBVQkxJQyBDTEFTUyBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHZhciBCdXR0b24gPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgID0gJChlbGVtZW50KVxuICAgIHRoaXMub3B0aW9ucyAgID0gJC5leHRlbmQoe30sIEJ1dHRvbi5ERUZBVUxUUywgb3B0aW9ucylcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gIH1cblxuICBCdXR0b24uVkVSU0lPTiAgPSAnMy40LjEnXG5cbiAgQnV0dG9uLkRFRkFVTFRTID0ge1xuICAgIGxvYWRpbmdUZXh0OiAnbG9hZGluZy4uLidcbiAgfVxuXG4gIEJ1dHRvbi5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICB2YXIgZCAgICA9ICdkaXNhYmxlZCdcbiAgICB2YXIgJGVsICA9IHRoaXMuJGVsZW1lbnRcbiAgICB2YXIgdmFsICA9ICRlbC5pcygnaW5wdXQnKSA/ICd2YWwnIDogJ2h0bWwnXG4gICAgdmFyIGRhdGEgPSAkZWwuZGF0YSgpXG5cbiAgICBzdGF0ZSArPSAnVGV4dCdcblxuICAgIGlmIChkYXRhLnJlc2V0VGV4dCA9PSBudWxsKSAkZWwuZGF0YSgncmVzZXRUZXh0JywgJGVsW3ZhbF0oKSlcblxuICAgIC8vIHB1c2ggdG8gZXZlbnQgbG9vcCB0byBhbGxvdyBmb3JtcyB0byBzdWJtaXRcbiAgICBzZXRUaW1lb3V0KCQucHJveHkoZnVuY3Rpb24gKCkge1xuICAgICAgJGVsW3ZhbF0oZGF0YVtzdGF0ZV0gPT0gbnVsbCA/IHRoaXMub3B0aW9uc1tzdGF0ZV0gOiBkYXRhW3N0YXRlXSlcblxuICAgICAgaWYgKHN0YXRlID09ICdsb2FkaW5nVGV4dCcpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlXG4gICAgICAgICRlbC5hZGRDbGFzcyhkKS5hdHRyKGQsIGQpLnByb3AoZCwgdHJ1ZSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0xvYWRpbmcpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICAkZWwucmVtb3ZlQ2xhc3MoZCkucmVtb3ZlQXR0cihkKS5wcm9wKGQsIGZhbHNlKVxuICAgICAgfVxuICAgIH0sIHRoaXMpLCAwKVxuICB9XG5cbiAgQnV0dG9uLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNoYW5nZWQgPSB0cnVlXG4gICAgdmFyICRwYXJlbnQgPSB0aGlzLiRlbGVtZW50LmNsb3Nlc3QoJ1tkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0nKVxuXG4gICAgaWYgKCRwYXJlbnQubGVuZ3RoKSB7XG4gICAgICB2YXIgJGlucHV0ID0gdGhpcy4kZWxlbWVudC5maW5kKCdpbnB1dCcpXG4gICAgICBpZiAoJGlucHV0LnByb3AoJ3R5cGUnKSA9PSAncmFkaW8nKSB7XG4gICAgICAgIGlmICgkaW5wdXQucHJvcCgnY2hlY2tlZCcpKSBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgJHBhcmVudC5maW5kKCcuYWN0aXZlJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICB9IGVsc2UgaWYgKCRpbnB1dC5wcm9wKCd0eXBlJykgPT0gJ2NoZWNrYm94Jykge1xuICAgICAgICBpZiAoKCRpbnB1dC5wcm9wKCdjaGVja2VkJykpICE9PSB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdhY3RpdmUnKSkgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICB9XG4gICAgICAkaW5wdXQucHJvcCgnY2hlY2tlZCcsIHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2FjdGl2ZScpKVxuICAgICAgaWYgKGNoYW5nZWQpICRpbnB1dC50cmlnZ2VyKCdjaGFuZ2UnKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtcHJlc3NlZCcsICF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdhY3RpdmUnKSlcbiAgICAgIHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpXG4gICAgfVxuICB9XG5cblxuICAvLyBCVVRUT04gUExVR0lOIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXG4gICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLmJ1dHRvbicpXG4gICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uXG5cbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuYnV0dG9uJywgKGRhdGEgPSBuZXcgQnV0dG9uKHRoaXMsIG9wdGlvbnMpKSlcblxuICAgICAgaWYgKG9wdGlvbiA9PSAndG9nZ2xlJykgZGF0YS50b2dnbGUoKVxuICAgICAgZWxzZSBpZiAob3B0aW9uKSBkYXRhLnNldFN0YXRlKG9wdGlvbilcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4uYnV0dG9uXG5cbiAgJC5mbi5idXR0b24gICAgICAgICAgICAgPSBQbHVnaW5cbiAgJC5mbi5idXR0b24uQ29uc3RydWN0b3IgPSBCdXR0b25cblxuXG4gIC8vIEJVVFRPTiBOTyBDT05GTElDVFxuICAvLyA9PT09PT09PT09PT09PT09PT1cblxuICAkLmZuLmJ1dHRvbi5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm4uYnV0dG9uID0gb2xkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG5cbiAgLy8gQlVUVE9OIERBVEEtQVBJXG4gIC8vID09PT09PT09PT09PT09PVxuXG4gICQoZG9jdW1lbnQpXG4gICAgLm9uKCdjbGljay5icy5idXR0b24uZGF0YS1hcGknLCAnW2RhdGEtdG9nZ2xlXj1cImJ1dHRvblwiXScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgJGJ0biA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5idG4nKVxuICAgICAgUGx1Z2luLmNhbGwoJGJ0biwgJ3RvZ2dsZScpXG4gICAgICBpZiAoISgkKGUudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT1cInJhZGlvXCJdLCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKSkpIHtcbiAgICAgICAgLy8gUHJldmVudCBkb3VibGUgY2xpY2sgb24gcmFkaW9zLCBhbmQgdGhlIGRvdWJsZSBzZWxlY3Rpb25zIChzbyBjYW5jZWxsYXRpb24pIG9uIGNoZWNrYm94ZXNcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIC8vIFRoZSB0YXJnZXQgY29tcG9uZW50IHN0aWxsIHJlY2VpdmUgdGhlIGZvY3VzXG4gICAgICAgIGlmICgkYnRuLmlzKCdpbnB1dCxidXR0b24nKSkgJGJ0bi50cmlnZ2VyKCdmb2N1cycpXG4gICAgICAgIGVsc2UgJGJ0bi5maW5kKCdpbnB1dDp2aXNpYmxlLGJ1dHRvbjp2aXNpYmxlJykuZmlyc3QoKS50cmlnZ2VyKCdmb2N1cycpXG4gICAgICB9XG4gICAgfSlcbiAgICAub24oJ2ZvY3VzLmJzLmJ1dHRvbi5kYXRhLWFwaSBibHVyLmJzLmJ1dHRvbi5kYXRhLWFwaScsICdbZGF0YS10b2dnbGVePVwiYnV0dG9uXCJdJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5idG4nKS50b2dnbGVDbGFzcygnZm9jdXMnLCAvXmZvY3VzKGluKT8kLy50ZXN0KGUudHlwZSkpXG4gICAgfSlcblxufShqUXVlcnkpO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEJvb3RzdHJhcDogY2Fyb3VzZWwuanMgdjMuNC4xXG4gKiBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy8zLjQvamF2YXNjcmlwdC8jY2Fyb3VzZWxcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cblxuK2Z1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBDQVJPVVNFTCBDTEFTUyBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgQ2Fyb3VzZWwgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgICAgPSAkKGVsZW1lbnQpXG4gICAgdGhpcy4kaW5kaWNhdG9ycyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmNhcm91c2VsLWluZGljYXRvcnMnKVxuICAgIHRoaXMub3B0aW9ucyAgICAgPSBvcHRpb25zXG4gICAgdGhpcy5wYXVzZWQgICAgICA9IG51bGxcbiAgICB0aGlzLnNsaWRpbmcgICAgID0gbnVsbFxuICAgIHRoaXMuaW50ZXJ2YWwgICAgPSBudWxsXG4gICAgdGhpcy4kYWN0aXZlICAgICA9IG51bGxcbiAgICB0aGlzLiRpdGVtcyAgICAgID0gbnVsbFxuXG4gICAgdGhpcy5vcHRpb25zLmtleWJvYXJkICYmIHRoaXMuJGVsZW1lbnQub24oJ2tleWRvd24uYnMuY2Fyb3VzZWwnLCAkLnByb3h5KHRoaXMua2V5ZG93biwgdGhpcykpXG5cbiAgICB0aGlzLm9wdGlvbnMucGF1c2UgPT0gJ2hvdmVyJyAmJiAhKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgJiYgdGhpcy4kZWxlbWVudFxuICAgICAgLm9uKCdtb3VzZWVudGVyLmJzLmNhcm91c2VsJywgJC5wcm94eSh0aGlzLnBhdXNlLCB0aGlzKSlcbiAgICAgIC5vbignbW91c2VsZWF2ZS5icy5jYXJvdXNlbCcsICQucHJveHkodGhpcy5jeWNsZSwgdGhpcykpXG4gIH1cblxuICBDYXJvdXNlbC5WRVJTSU9OICA9ICczLjQuMSdcblxuICBDYXJvdXNlbC5UUkFOU0lUSU9OX0RVUkFUSU9OID0gNjAwXG5cbiAgQ2Fyb3VzZWwuREVGQVVMVFMgPSB7XG4gICAgaW50ZXJ2YWw6IDUwMDAsXG4gICAgcGF1c2U6ICdob3ZlcicsXG4gICAgd3JhcDogdHJ1ZSxcbiAgICBrZXlib2FyZDogdHJ1ZVxuICB9XG5cbiAgQ2Fyb3VzZWwucHJvdG90eXBlLmtleWRvd24gPSBmdW5jdGlvbiAoZSkge1xuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGUudGFyZ2V0LnRhZ05hbWUpKSByZXR1cm5cbiAgICBzd2l0Y2ggKGUud2hpY2gpIHtcbiAgICAgIGNhc2UgMzc6IHRoaXMucHJldigpOyBicmVha1xuICAgICAgY2FzZSAzOTogdGhpcy5uZXh0KCk7IGJyZWFrXG4gICAgICBkZWZhdWx0OiByZXR1cm5cbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gIENhcm91c2VsLnByb3RvdHlwZS5jeWNsZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgZSB8fCAodGhpcy5wYXVzZWQgPSBmYWxzZSlcblxuICAgIHRoaXMuaW50ZXJ2YWwgJiYgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKVxuXG4gICAgdGhpcy5vcHRpb25zLmludGVydmFsXG4gICAgICAmJiAhdGhpcy5wYXVzZWRcbiAgICAgICYmICh0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoJC5wcm94eSh0aGlzLm5leHQsIHRoaXMpLCB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIENhcm91c2VsLnByb3RvdHlwZS5nZXRJdGVtSW5kZXggPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgIHRoaXMuJGl0ZW1zID0gaXRlbS5wYXJlbnQoKS5jaGlsZHJlbignLml0ZW0nKVxuICAgIHJldHVybiB0aGlzLiRpdGVtcy5pbmRleChpdGVtIHx8IHRoaXMuJGFjdGl2ZSlcbiAgfVxuXG4gIENhcm91c2VsLnByb3RvdHlwZS5nZXRJdGVtRm9yRGlyZWN0aW9uID0gZnVuY3Rpb24gKGRpcmVjdGlvbiwgYWN0aXZlKSB7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5nZXRJdGVtSW5kZXgoYWN0aXZlKVxuICAgIHZhciB3aWxsV3JhcCA9IChkaXJlY3Rpb24gPT0gJ3ByZXYnICYmIGFjdGl2ZUluZGV4ID09PSAwKVxuICAgICAgICAgICAgICAgIHx8IChkaXJlY3Rpb24gPT0gJ25leHQnICYmIGFjdGl2ZUluZGV4ID09ICh0aGlzLiRpdGVtcy5sZW5ndGggLSAxKSlcbiAgICBpZiAod2lsbFdyYXAgJiYgIXRoaXMub3B0aW9ucy53cmFwKSByZXR1cm4gYWN0aXZlXG4gICAgdmFyIGRlbHRhID0gZGlyZWN0aW9uID09ICdwcmV2JyA/IC0xIDogMVxuICAgIHZhciBpdGVtSW5kZXggPSAoYWN0aXZlSW5kZXggKyBkZWx0YSkgJSB0aGlzLiRpdGVtcy5sZW5ndGhcbiAgICByZXR1cm4gdGhpcy4kaXRlbXMuZXEoaXRlbUluZGV4KVxuICB9XG5cbiAgQ2Fyb3VzZWwucHJvdG90eXBlLnRvID0gZnVuY3Rpb24gKHBvcykge1xuICAgIHZhciB0aGF0ICAgICAgICA9IHRoaXNcbiAgICB2YXIgYWN0aXZlSW5kZXggPSB0aGlzLmdldEl0ZW1JbmRleCh0aGlzLiRhY3RpdmUgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pdGVtLmFjdGl2ZScpKVxuXG4gICAgaWYgKHBvcyA+ICh0aGlzLiRpdGVtcy5sZW5ndGggLSAxKSB8fCBwb3MgPCAwKSByZXR1cm5cblxuICAgIGlmICh0aGlzLnNsaWRpbmcpICAgICAgIHJldHVybiB0aGlzLiRlbGVtZW50Lm9uZSgnc2xpZC5icy5jYXJvdXNlbCcsIGZ1bmN0aW9uICgpIHsgdGhhdC50byhwb3MpIH0pIC8vIHllcywgXCJzbGlkXCJcbiAgICBpZiAoYWN0aXZlSW5kZXggPT0gcG9zKSByZXR1cm4gdGhpcy5wYXVzZSgpLmN5Y2xlKClcblxuICAgIHJldHVybiB0aGlzLnNsaWRlKHBvcyA+IGFjdGl2ZUluZGV4ID8gJ25leHQnIDogJ3ByZXYnLCB0aGlzLiRpdGVtcy5lcShwb3MpKVxuICB9XG5cbiAgQ2Fyb3VzZWwucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKGUpIHtcbiAgICBlIHx8ICh0aGlzLnBhdXNlZCA9IHRydWUpXG5cbiAgICBpZiAodGhpcy4kZWxlbWVudC5maW5kKCcubmV4dCwgLnByZXYnKS5sZW5ndGggJiYgJC5zdXBwb3J0LnRyYW5zaXRpb24pIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpXG4gICAgICB0aGlzLmN5Y2xlKHRydWUpXG4gICAgfVxuXG4gICAgdGhpcy5pbnRlcnZhbCA9IGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBDYXJvdXNlbC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5zbGlkaW5nKSByZXR1cm5cbiAgICByZXR1cm4gdGhpcy5zbGlkZSgnbmV4dCcpXG4gIH1cblxuICBDYXJvdXNlbC5wcm90b3R5cGUucHJldiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5zbGlkaW5nKSByZXR1cm5cbiAgICByZXR1cm4gdGhpcy5zbGlkZSgncHJldicpXG4gIH1cblxuICBDYXJvdXNlbC5wcm90b3R5cGUuc2xpZGUgPSBmdW5jdGlvbiAodHlwZSwgbmV4dCkge1xuICAgIHZhciAkYWN0aXZlICAgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pdGVtLmFjdGl2ZScpXG4gICAgdmFyICRuZXh0ICAgICA9IG5leHQgfHwgdGhpcy5nZXRJdGVtRm9yRGlyZWN0aW9uKHR5cGUsICRhY3RpdmUpXG4gICAgdmFyIGlzQ3ljbGluZyA9IHRoaXMuaW50ZXJ2YWxcbiAgICB2YXIgZGlyZWN0aW9uID0gdHlwZSA9PSAnbmV4dCcgPyAnbGVmdCcgOiAncmlnaHQnXG4gICAgdmFyIHRoYXQgICAgICA9IHRoaXNcblxuICAgIGlmICgkbmV4dC5oYXNDbGFzcygnYWN0aXZlJykpIHJldHVybiAodGhpcy5zbGlkaW5nID0gZmFsc2UpXG5cbiAgICB2YXIgcmVsYXRlZFRhcmdldCA9ICRuZXh0WzBdXG4gICAgdmFyIHNsaWRlRXZlbnQgPSAkLkV2ZW50KCdzbGlkZS5icy5jYXJvdXNlbCcsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRUYXJnZXQsXG4gICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgIH0pXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKHNsaWRlRXZlbnQpXG4gICAgaWYgKHNsaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgdGhpcy5zbGlkaW5nID0gdHJ1ZVxuXG4gICAgaXNDeWNsaW5nICYmIHRoaXMucGF1c2UoKVxuXG4gICAgaWYgKHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLiRpbmRpY2F0b3JzLmZpbmQoJy5hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAgIHZhciAkbmV4dEluZGljYXRvciA9ICQodGhpcy4kaW5kaWNhdG9ycy5jaGlsZHJlbigpW3RoaXMuZ2V0SXRlbUluZGV4KCRuZXh0KV0pXG4gICAgICAkbmV4dEluZGljYXRvciAmJiAkbmV4dEluZGljYXRvci5hZGRDbGFzcygnYWN0aXZlJylcbiAgICB9XG5cbiAgICB2YXIgc2xpZEV2ZW50ID0gJC5FdmVudCgnc2xpZC5icy5jYXJvdXNlbCcsIHsgcmVsYXRlZFRhcmdldDogcmVsYXRlZFRhcmdldCwgZGlyZWN0aW9uOiBkaXJlY3Rpb24gfSkgLy8geWVzLCBcInNsaWRcIlxuICAgIGlmICgkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdzbGlkZScpKSB7XG4gICAgICAkbmV4dC5hZGRDbGFzcyh0eXBlKVxuICAgICAgaWYgKHR5cGVvZiAkbmV4dCA9PT0gJ29iamVjdCcgJiYgJG5leHQubGVuZ3RoKSB7XG4gICAgICAgICRuZXh0WzBdLm9mZnNldFdpZHRoIC8vIGZvcmNlIHJlZmxvd1xuICAgICAgfVxuICAgICAgJGFjdGl2ZS5hZGRDbGFzcyhkaXJlY3Rpb24pXG4gICAgICAkbmV4dC5hZGRDbGFzcyhkaXJlY3Rpb24pXG4gICAgICAkYWN0aXZlXG4gICAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAkbmV4dC5yZW1vdmVDbGFzcyhbdHlwZSwgZGlyZWN0aW9uXS5qb2luKCcgJykpLmFkZENsYXNzKCdhY3RpdmUnKVxuICAgICAgICAgICRhY3RpdmUucmVtb3ZlQ2xhc3MoWydhY3RpdmUnLCBkaXJlY3Rpb25dLmpvaW4oJyAnKSlcbiAgICAgICAgICB0aGF0LnNsaWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhhdC4kZWxlbWVudC50cmlnZ2VyKHNsaWRFdmVudClcbiAgICAgICAgICB9LCAwKVxuICAgICAgICB9KVxuICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoQ2Fyb3VzZWwuVFJBTlNJVElPTl9EVVJBVElPTilcbiAgICB9IGVsc2Uge1xuICAgICAgJGFjdGl2ZS5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAgICRuZXh0LmFkZENsYXNzKCdhY3RpdmUnKVxuICAgICAgdGhpcy5zbGlkaW5nID0gZmFsc2VcbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihzbGlkRXZlbnQpXG4gICAgfVxuXG4gICAgaXNDeWNsaW5nICYmIHRoaXMuY3ljbGUoKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG5cbiAgLy8gQ0FST1VTRUwgUExVR0lOIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHRoaXMgICA9ICQodGhpcylcbiAgICAgIHZhciBkYXRhICAgID0gJHRoaXMuZGF0YSgnYnMuY2Fyb3VzZWwnKVxuICAgICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgQ2Fyb3VzZWwuREVGQVVMVFMsICR0aGlzLmRhdGEoKSwgdHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb24pXG4gICAgICB2YXIgYWN0aW9uICA9IHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycgPyBvcHRpb24gOiBvcHRpb25zLnNsaWRlXG5cbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuY2Fyb3VzZWwnLCAoZGF0YSA9IG5ldyBDYXJvdXNlbCh0aGlzLCBvcHRpb25zKSkpXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnbnVtYmVyJykgZGF0YS50byhvcHRpb24pXG4gICAgICBlbHNlIGlmIChhY3Rpb24pIGRhdGFbYWN0aW9uXSgpXG4gICAgICBlbHNlIGlmIChvcHRpb25zLmludGVydmFsKSBkYXRhLnBhdXNlKCkuY3ljbGUoKVxuICAgIH0pXG4gIH1cblxuICB2YXIgb2xkID0gJC5mbi5jYXJvdXNlbFxuXG4gICQuZm4uY2Fyb3VzZWwgICAgICAgICAgICAgPSBQbHVnaW5cbiAgJC5mbi5jYXJvdXNlbC5Db25zdHJ1Y3RvciA9IENhcm91c2VsXG5cblxuICAvLyBDQVJPVVNFTCBOTyBDT05GTElDVFxuICAvLyA9PT09PT09PT09PT09PT09PT09PVxuXG4gICQuZm4uY2Fyb3VzZWwubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuLmNhcm91c2VsID0gb2xkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG5cbiAgLy8gQ0FST1VTRUwgREFUQS1BUElcbiAgLy8gPT09PT09PT09PT09PT09PT1cblxuICB2YXIgY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgJHRoaXMgICA9ICQodGhpcylcbiAgICB2YXIgaHJlZiAgICA9ICR0aGlzLmF0dHIoJ2hyZWYnKVxuICAgIGlmIChocmVmKSB7XG4gICAgICBocmVmID0gaHJlZi5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLCAnJykgLy8gc3RyaXAgZm9yIGllN1xuICAgIH1cblxuICAgIHZhciB0YXJnZXQgID0gJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKSB8fCBocmVmXG4gICAgdmFyICR0YXJnZXQgPSAkKGRvY3VtZW50KS5maW5kKHRhcmdldClcblxuICAgIGlmICghJHRhcmdldC5oYXNDbGFzcygnY2Fyb3VzZWwnKSkgcmV0dXJuXG5cbiAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkdGFyZ2V0LmRhdGEoKSwgJHRoaXMuZGF0YSgpKVxuICAgIHZhciBzbGlkZUluZGV4ID0gJHRoaXMuYXR0cignZGF0YS1zbGlkZS10bycpXG4gICAgaWYgKHNsaWRlSW5kZXgpIG9wdGlvbnMuaW50ZXJ2YWwgPSBmYWxzZVxuXG4gICAgUGx1Z2luLmNhbGwoJHRhcmdldCwgb3B0aW9ucylcblxuICAgIGlmIChzbGlkZUluZGV4KSB7XG4gICAgICAkdGFyZ2V0LmRhdGEoJ2JzLmNhcm91c2VsJykudG8oc2xpZGVJbmRleClcbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gICQoZG9jdW1lbnQpXG4gICAgLm9uKCdjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaScsICdbZGF0YS1zbGlkZV0nLCBjbGlja0hhbmRsZXIpXG4gICAgLm9uKCdjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaScsICdbZGF0YS1zbGlkZS10b10nLCBjbGlja0hhbmRsZXIpXG5cbiAgJCh3aW5kb3cpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICQoJ1tkYXRhLXJpZGU9XCJjYXJvdXNlbFwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRjYXJvdXNlbCA9ICQodGhpcylcbiAgICAgIFBsdWdpbi5jYWxsKCRjYXJvdXNlbCwgJGNhcm91c2VsLmRhdGEoKSlcbiAgICB9KVxuICB9KVxuXG59KGpRdWVyeSk7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQm9vdHN0cmFwOiBjb2xsYXBzZS5qcyB2My40LjFcbiAqIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzMuNC9qYXZhc2NyaXB0LyNjb2xsYXBzZVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoganNoaW50IGxhdGVkZWY6IGZhbHNlICovXG5cbitmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gQ09MTEFQU0UgUFVCTElDIENMQVNTIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgQ29sbGFwc2UgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgICAgICA9ICQoZWxlbWVudClcbiAgICB0aGlzLm9wdGlvbnMgICAgICAgPSAkLmV4dGVuZCh7fSwgQ29sbGFwc2UuREVGQVVMVFMsIG9wdGlvbnMpXG4gICAgdGhpcy4kdHJpZ2dlciAgICAgID0gJCgnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1baHJlZj1cIiMnICsgZWxlbWVudC5pZCArICdcIl0sJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1bZGF0YS10YXJnZXQ9XCIjJyArIGVsZW1lbnQuaWQgKyAnXCJdJylcbiAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSBudWxsXG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBhcmVudCkge1xuICAgICAgdGhpcy4kcGFyZW50ID0gdGhpcy5nZXRQYXJlbnQoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLiRlbGVtZW50LCB0aGlzLiR0cmlnZ2VyKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMudG9nZ2xlKSB0aGlzLnRvZ2dsZSgpXG4gIH1cblxuICBDb2xsYXBzZS5WRVJTSU9OICA9ICczLjQuMSdcblxuICBDb2xsYXBzZS5UUkFOU0lUSU9OX0RVUkFUSU9OID0gMzUwXG5cbiAgQ29sbGFwc2UuREVGQVVMVFMgPSB7XG4gICAgdG9nZ2xlOiB0cnVlXG4gIH1cblxuICBDb2xsYXBzZS5wcm90b3R5cGUuZGltZW5zaW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYXNXaWR0aCA9IHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ3dpZHRoJylcbiAgICByZXR1cm4gaGFzV2lkdGggPyAnd2lkdGgnIDogJ2hlaWdodCdcbiAgfVxuXG4gIENvbGxhcHNlLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnRyYW5zaXRpb25pbmcgfHwgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnaW4nKSkgcmV0dXJuXG5cbiAgICB2YXIgYWN0aXZlc0RhdGFcbiAgICB2YXIgYWN0aXZlcyA9IHRoaXMuJHBhcmVudCAmJiB0aGlzLiRwYXJlbnQuY2hpbGRyZW4oJy5wYW5lbCcpLmNoaWxkcmVuKCcuaW4sIC5jb2xsYXBzaW5nJylcblxuICAgIGlmIChhY3RpdmVzICYmIGFjdGl2ZXMubGVuZ3RoKSB7XG4gICAgICBhY3RpdmVzRGF0YSA9IGFjdGl2ZXMuZGF0YSgnYnMuY29sbGFwc2UnKVxuICAgICAgaWYgKGFjdGl2ZXNEYXRhICYmIGFjdGl2ZXNEYXRhLnRyYW5zaXRpb25pbmcpIHJldHVyblxuICAgIH1cblxuICAgIHZhciBzdGFydEV2ZW50ID0gJC5FdmVudCgnc2hvdy5icy5jb2xsYXBzZScpXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKHN0YXJ0RXZlbnQpXG4gICAgaWYgKHN0YXJ0RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgaWYgKGFjdGl2ZXMgJiYgYWN0aXZlcy5sZW5ndGgpIHtcbiAgICAgIFBsdWdpbi5jYWxsKGFjdGl2ZXMsICdoaWRlJylcbiAgICAgIGFjdGl2ZXNEYXRhIHx8IGFjdGl2ZXMuZGF0YSgnYnMuY29sbGFwc2UnLCBudWxsKVxuICAgIH1cblxuICAgIHZhciBkaW1lbnNpb24gPSB0aGlzLmRpbWVuc2lvbigpXG5cbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNlJylcbiAgICAgIC5hZGRDbGFzcygnY29sbGFwc2luZycpW2RpbWVuc2lvbl0oMClcbiAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSlcblxuICAgIHRoaXMuJHRyaWdnZXJcbiAgICAgIC5yZW1vdmVDbGFzcygnY29sbGFwc2VkJylcbiAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSlcblxuICAgIHRoaXMudHJhbnNpdGlvbmluZyA9IDFcblxuICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgICAgLnJlbW92ZUNsYXNzKCdjb2xsYXBzaW5nJylcbiAgICAgICAgLmFkZENsYXNzKCdjb2xsYXBzZSBpbicpW2RpbWVuc2lvbl0oJycpXG4gICAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSAwXG4gICAgICB0aGlzLiRlbGVtZW50XG4gICAgICAgIC50cmlnZ2VyKCdzaG93bi5icy5jb2xsYXBzZScpXG4gICAgfVxuXG4gICAgaWYgKCEkLnN1cHBvcnQudHJhbnNpdGlvbikgcmV0dXJuIGNvbXBsZXRlLmNhbGwodGhpcylcblxuICAgIHZhciBzY3JvbGxTaXplID0gJC5jYW1lbENhc2UoWydzY3JvbGwnLCBkaW1lbnNpb25dLmpvaW4oJy0nKSlcblxuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsICQucHJveHkoY29tcGxldGUsIHRoaXMpKVxuICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKENvbGxhcHNlLlRSQU5TSVRJT05fRFVSQVRJT04pW2RpbWVuc2lvbl0odGhpcy4kZWxlbWVudFswXVtzY3JvbGxTaXplXSlcbiAgfVxuXG4gIENvbGxhcHNlLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnRyYW5zaXRpb25pbmcgfHwgIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2luJykpIHJldHVyblxuXG4gICAgdmFyIHN0YXJ0RXZlbnQgPSAkLkV2ZW50KCdoaWRlLmJzLmNvbGxhcHNlJylcbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoc3RhcnRFdmVudClcbiAgICBpZiAoc3RhcnRFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuXG5cbiAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5kaW1lbnNpb24oKVxuXG4gICAgdGhpcy4kZWxlbWVudFtkaW1lbnNpb25dKHRoaXMuJGVsZW1lbnRbZGltZW5zaW9uXSgpKVswXS5vZmZzZXRIZWlnaHRcblxuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5hZGRDbGFzcygnY29sbGFwc2luZycpXG4gICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNlIGluJylcbiAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpXG5cbiAgICB0aGlzLiR0cmlnZ2VyXG4gICAgICAuYWRkQ2xhc3MoJ2NvbGxhcHNlZCcpXG4gICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIGZhbHNlKVxuXG4gICAgdGhpcy50cmFuc2l0aW9uaW5nID0gMVxuXG4gICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy50cmFuc2l0aW9uaW5nID0gMFxuICAgICAgdGhpcy4kZWxlbWVudFxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNpbmcnKVxuICAgICAgICAuYWRkQ2xhc3MoJ2NvbGxhcHNlJylcbiAgICAgICAgLnRyaWdnZXIoJ2hpZGRlbi5icy5jb2xsYXBzZScpXG4gICAgfVxuXG4gICAgaWYgKCEkLnN1cHBvcnQudHJhbnNpdGlvbikgcmV0dXJuIGNvbXBsZXRlLmNhbGwodGhpcylcblxuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIFtkaW1lbnNpb25dKDApXG4gICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCAkLnByb3h5KGNvbXBsZXRlLCB0aGlzKSlcbiAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChDb2xsYXBzZS5UUkFOU0lUSU9OX0RVUkFUSU9OKVxuICB9XG5cbiAgQ29sbGFwc2UucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2luJykgPyAnaGlkZScgOiAnc2hvdyddKClcbiAgfVxuXG4gIENvbGxhcHNlLnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICQoZG9jdW1lbnQpLmZpbmQodGhpcy5vcHRpb25zLnBhcmVudClcbiAgICAgIC5maW5kKCdbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXVtkYXRhLXBhcmVudD1cIicgKyB0aGlzLm9wdGlvbnMucGFyZW50ICsgJ1wiXScpXG4gICAgICAuZWFjaCgkLnByb3h5KGZ1bmN0aW9uIChpLCBlbGVtZW50KSB7XG4gICAgICAgIHZhciAkZWxlbWVudCA9ICQoZWxlbWVudClcbiAgICAgICAgdGhpcy5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoZ2V0VGFyZ2V0RnJvbVRyaWdnZXIoJGVsZW1lbnQpLCAkZWxlbWVudClcbiAgICAgIH0sIHRoaXMpKVxuICAgICAgLmVuZCgpXG4gIH1cblxuICBDb2xsYXBzZS5wcm90b3R5cGUuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzID0gZnVuY3Rpb24gKCRlbGVtZW50LCAkdHJpZ2dlcikge1xuICAgIHZhciBpc09wZW4gPSAkZWxlbWVudC5oYXNDbGFzcygnaW4nKVxuXG4gICAgJGVsZW1lbnQuYXR0cignYXJpYS1leHBhbmRlZCcsIGlzT3BlbilcbiAgICAkdHJpZ2dlclxuICAgICAgLnRvZ2dsZUNsYXNzKCdjb2xsYXBzZWQnLCAhaXNPcGVuKVxuICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pXG4gIH1cblxuICBmdW5jdGlvbiBnZXRUYXJnZXRGcm9tVHJpZ2dlcigkdHJpZ2dlcikge1xuICAgIHZhciBocmVmXG4gICAgdmFyIHRhcmdldCA9ICR0cmlnZ2VyLmF0dHIoJ2RhdGEtdGFyZ2V0JylcbiAgICAgIHx8IChocmVmID0gJHRyaWdnZXIuYXR0cignaHJlZicpKSAmJiBocmVmLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sICcnKSAvLyBzdHJpcCBmb3IgaWU3XG5cbiAgICByZXR1cm4gJChkb2N1bWVudCkuZmluZCh0YXJnZXQpXG4gIH1cblxuXG4gIC8vIENPTExBUFNFIFBMVUdJTiBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXG4gICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLmNvbGxhcHNlJylcbiAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIENvbGxhcHNlLkRFRkFVTFRTLCAkdGhpcy5kYXRhKCksIHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uKVxuXG4gICAgICBpZiAoIWRhdGEgJiYgb3B0aW9ucy50b2dnbGUgJiYgL3Nob3d8aGlkZS8udGVzdChvcHRpb24pKSBvcHRpb25zLnRvZ2dsZSA9IGZhbHNlXG4gICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLmNvbGxhcHNlJywgKGRhdGEgPSBuZXcgQ29sbGFwc2UodGhpcywgb3B0aW9ucykpKVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpXG4gICAgfSlcbiAgfVxuXG4gIHZhciBvbGQgPSAkLmZuLmNvbGxhcHNlXG5cbiAgJC5mbi5jb2xsYXBzZSAgICAgICAgICAgICA9IFBsdWdpblxuICAkLmZuLmNvbGxhcHNlLkNvbnN0cnVjdG9yID0gQ29sbGFwc2VcblxuXG4gIC8vIENPTExBUFNFIE5PIENPTkZMSUNUXG4gIC8vID09PT09PT09PT09PT09PT09PT09XG5cbiAgJC5mbi5jb2xsYXBzZS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm4uY29sbGFwc2UgPSBvbGRcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cblxuICAvLyBDT0xMQVBTRSBEQVRBLUFQSVxuICAvLyA9PT09PT09PT09PT09PT09PVxuXG4gICQoZG9jdW1lbnQpLm9uKCdjbGljay5icy5jb2xsYXBzZS5kYXRhLWFwaScsICdbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXScsIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXG5cbiAgICBpZiAoISR0aGlzLmF0dHIoJ2RhdGEtdGFyZ2V0JykpIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgdmFyICR0YXJnZXQgPSBnZXRUYXJnZXRGcm9tVHJpZ2dlcigkdGhpcylcbiAgICB2YXIgZGF0YSAgICA9ICR0YXJnZXQuZGF0YSgnYnMuY29sbGFwc2UnKVxuICAgIHZhciBvcHRpb24gID0gZGF0YSA/ICd0b2dnbGUnIDogJHRoaXMuZGF0YSgpXG5cbiAgICBQbHVnaW4uY2FsbCgkdGFyZ2V0LCBvcHRpb24pXG4gIH0pXG5cbn0oalF1ZXJ5KTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBCb290c3RyYXA6IGRyb3Bkb3duLmpzIHYzLjQuMVxuICogaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvMy40L2phdmFzY3JpcHQvI2Ryb3Bkb3duc1xuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIERST1BET1dOIENMQVNTIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHZhciBiYWNrZHJvcCA9ICcuZHJvcGRvd24tYmFja2Ryb3AnXG4gIHZhciB0b2dnbGUgICA9ICdbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXSdcbiAgdmFyIERyb3Bkb3duID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAkKGVsZW1lbnQpLm9uKCdjbGljay5icy5kcm9wZG93bicsIHRoaXMudG9nZ2xlKVxuICB9XG5cbiAgRHJvcGRvd24uVkVSU0lPTiA9ICczLjQuMSdcblxuICBmdW5jdGlvbiBnZXRQYXJlbnQoJHRoaXMpIHtcbiAgICB2YXIgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpXG5cbiAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICBzZWxlY3RvciA9ICR0aGlzLmF0dHIoJ2hyZWYnKVxuICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvciAmJiAvI1tBLVphLXpdLy50ZXN0KHNlbGVjdG9yKSAmJiBzZWxlY3Rvci5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLCAnJykgLy8gc3RyaXAgZm9yIGllN1xuICAgIH1cblxuICAgIHZhciAkcGFyZW50ID0gc2VsZWN0b3IgIT09ICcjJyA/ICQoZG9jdW1lbnQpLmZpbmQoc2VsZWN0b3IpIDogbnVsbFxuXG4gICAgcmV0dXJuICRwYXJlbnQgJiYgJHBhcmVudC5sZW5ndGggPyAkcGFyZW50IDogJHRoaXMucGFyZW50KClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyTWVudXMoZSkge1xuICAgIGlmIChlICYmIGUud2hpY2ggPT09IDMpIHJldHVyblxuICAgICQoYmFja2Ryb3ApLnJlbW92ZSgpXG4gICAgJCh0b2dnbGUpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzICAgICAgICAgPSAkKHRoaXMpXG4gICAgICB2YXIgJHBhcmVudCAgICAgICA9IGdldFBhcmVudCgkdGhpcylcbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0geyByZWxhdGVkVGFyZ2V0OiB0aGlzIH1cblxuICAgICAgaWYgKCEkcGFyZW50Lmhhc0NsYXNzKCdvcGVuJykpIHJldHVyblxuXG4gICAgICBpZiAoZSAmJiBlLnR5cGUgPT0gJ2NsaWNrJyAmJiAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGUudGFyZ2V0LnRhZ05hbWUpICYmICQuY29udGFpbnMoJHBhcmVudFswXSwgZS50YXJnZXQpKSByZXR1cm5cblxuICAgICAgJHBhcmVudC50cmlnZ2VyKGUgPSAkLkV2ZW50KCdoaWRlLmJzLmRyb3Bkb3duJywgcmVsYXRlZFRhcmdldCkpXG5cbiAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm5cblxuICAgICAgJHRoaXMuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpXG4gICAgICAkcGFyZW50LnJlbW92ZUNsYXNzKCdvcGVuJykudHJpZ2dlcigkLkV2ZW50KCdoaWRkZW4uYnMuZHJvcGRvd24nLCByZWxhdGVkVGFyZ2V0KSlcbiAgICB9KVxuICB9XG5cbiAgRHJvcGRvd24ucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyICR0aGlzID0gJCh0aGlzKVxuXG4gICAgaWYgKCR0aGlzLmlzKCcuZGlzYWJsZWQsIDpkaXNhYmxlZCcpKSByZXR1cm5cblxuICAgIHZhciAkcGFyZW50ICA9IGdldFBhcmVudCgkdGhpcylcbiAgICB2YXIgaXNBY3RpdmUgPSAkcGFyZW50Lmhhc0NsYXNzKCdvcGVuJylcblxuICAgIGNsZWFyTWVudXMoKVxuXG4gICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAhJHBhcmVudC5jbG9zZXN0KCcubmF2YmFyLW5hdicpLmxlbmd0aCkge1xuICAgICAgICAvLyBpZiBtb2JpbGUgd2UgdXNlIGEgYmFja2Ryb3AgYmVjYXVzZSBjbGljayBldmVudHMgZG9uJ3QgZGVsZWdhdGVcbiAgICAgICAgJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSlcbiAgICAgICAgICAuYWRkQ2xhc3MoJ2Ryb3Bkb3duLWJhY2tkcm9wJylcbiAgICAgICAgICAuaW5zZXJ0QWZ0ZXIoJCh0aGlzKSlcbiAgICAgICAgICAub24oJ2NsaWNrJywgY2xlYXJNZW51cylcbiAgICAgIH1cblxuICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSB7IHJlbGF0ZWRUYXJnZXQ6IHRoaXMgfVxuICAgICAgJHBhcmVudC50cmlnZ2VyKGUgPSAkLkV2ZW50KCdzaG93LmJzLmRyb3Bkb3duJywgcmVsYXRlZFRhcmdldCkpXG5cbiAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm5cblxuICAgICAgJHRoaXNcbiAgICAgICAgLnRyaWdnZXIoJ2ZvY3VzJylcbiAgICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpXG5cbiAgICAgICRwYXJlbnRcbiAgICAgICAgLnRvZ2dsZUNsYXNzKCdvcGVuJylcbiAgICAgICAgLnRyaWdnZXIoJC5FdmVudCgnc2hvd24uYnMuZHJvcGRvd24nLCByZWxhdGVkVGFyZ2V0KSlcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIERyb3Bkb3duLnByb3RvdHlwZS5rZXlkb3duID0gZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIS8oMzh8NDB8Mjd8MzIpLy50ZXN0KGUud2hpY2gpIHx8IC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZS50YXJnZXQudGFnTmFtZSkpIHJldHVyblxuXG4gICAgdmFyICR0aGlzID0gJCh0aGlzKVxuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgaWYgKCR0aGlzLmlzKCcuZGlzYWJsZWQsIDpkaXNhYmxlZCcpKSByZXR1cm5cblxuICAgIHZhciAkcGFyZW50ICA9IGdldFBhcmVudCgkdGhpcylcbiAgICB2YXIgaXNBY3RpdmUgPSAkcGFyZW50Lmhhc0NsYXNzKCdvcGVuJylcblxuICAgIGlmICghaXNBY3RpdmUgJiYgZS53aGljaCAhPSAyNyB8fCBpc0FjdGl2ZSAmJiBlLndoaWNoID09IDI3KSB7XG4gICAgICBpZiAoZS53aGljaCA9PSAyNykgJHBhcmVudC5maW5kKHRvZ2dsZSkudHJpZ2dlcignZm9jdXMnKVxuICAgICAgcmV0dXJuICR0aGlzLnRyaWdnZXIoJ2NsaWNrJylcbiAgICB9XG5cbiAgICB2YXIgZGVzYyA9ICcgbGk6bm90KC5kaXNhYmxlZCk6dmlzaWJsZSBhJ1xuICAgIHZhciAkaXRlbXMgPSAkcGFyZW50LmZpbmQoJy5kcm9wZG93bi1tZW51JyArIGRlc2MpXG5cbiAgICBpZiAoISRpdGVtcy5sZW5ndGgpIHJldHVyblxuXG4gICAgdmFyIGluZGV4ID0gJGl0ZW1zLmluZGV4KGUudGFyZ2V0KVxuXG4gICAgaWYgKGUud2hpY2ggPT0gMzggJiYgaW5kZXggPiAwKSAgICAgICAgICAgICAgICAgaW5kZXgtLSAgICAgICAgIC8vIHVwXG4gICAgaWYgKGUud2hpY2ggPT0gNDAgJiYgaW5kZXggPCAkaXRlbXMubGVuZ3RoIC0gMSkgaW5kZXgrKyAgICAgICAgIC8vIGRvd25cbiAgICBpZiAoIX5pbmRleCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDBcblxuICAgICRpdGVtcy5lcShpbmRleCkudHJpZ2dlcignZm9jdXMnKVxuICB9XG5cblxuICAvLyBEUk9QRE9XTiBQTFVHSU4gREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGZ1bmN0aW9uIFBsdWdpbihvcHRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGhpcyA9ICQodGhpcylcbiAgICAgIHZhciBkYXRhICA9ICR0aGlzLmRhdGEoJ2JzLmRyb3Bkb3duJylcblxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5kcm9wZG93bicsIChkYXRhID0gbmV3IERyb3Bkb3duKHRoaXMpKSlcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0uY2FsbCgkdGhpcylcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4uZHJvcGRvd25cblxuICAkLmZuLmRyb3Bkb3duICAgICAgICAgICAgID0gUGx1Z2luXG4gICQuZm4uZHJvcGRvd24uQ29uc3RydWN0b3IgPSBEcm9wZG93blxuXG5cbiAgLy8gRFJPUERPV04gTk8gQ09ORkxJQ1RcbiAgLy8gPT09PT09PT09PT09PT09PT09PT1cblxuICAkLmZuLmRyb3Bkb3duLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbi5kcm9wZG93biA9IG9sZFxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuXG4gIC8vIEFQUExZIFRPIFNUQU5EQVJEIERST1BET1dOIEVMRU1FTlRTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgJChkb2N1bWVudClcbiAgICAub24oJ2NsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpJywgY2xlYXJNZW51cylcbiAgICAub24oJ2NsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpJywgJy5kcm9wZG93biBmb3JtJywgZnVuY3Rpb24gKGUpIHsgZS5zdG9wUHJvcGFnYXRpb24oKSB9KVxuICAgIC5vbignY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGknLCB0b2dnbGUsIERyb3Bkb3duLnByb3RvdHlwZS50b2dnbGUpXG4gICAgLm9uKCdrZXlkb3duLmJzLmRyb3Bkb3duLmRhdGEtYXBpJywgdG9nZ2xlLCBEcm9wZG93bi5wcm90b3R5cGUua2V5ZG93bilcbiAgICAub24oJ2tleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGknLCAnLmRyb3Bkb3duLW1lbnUnLCBEcm9wZG93bi5wcm90b3R5cGUua2V5ZG93bilcblxufShqUXVlcnkpO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEJvb3RzdHJhcDogbW9kYWwuanMgdjMuNC4xXG4gKiBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy8zLjQvamF2YXNjcmlwdC8jbW9kYWxzXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvcHlyaWdodCAyMDExLTIwMTkgVHdpdHRlciwgSW5jLlxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5cbitmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gTU9EQUwgQ0xBU1MgREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09XG5cbiAgdmFyIE1vZGFsID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy4kYm9keSA9ICQoZG9jdW1lbnQuYm9keSlcbiAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KVxuICAgIHRoaXMuJGRpYWxvZyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLm1vZGFsLWRpYWxvZycpXG4gICAgdGhpcy4kYmFja2Ryb3AgPSBudWxsXG4gICAgdGhpcy5pc1Nob3duID0gbnVsbFxuICAgIHRoaXMub3JpZ2luYWxCb2R5UGFkID0gbnVsbFxuICAgIHRoaXMuc2Nyb2xsYmFyV2lkdGggPSAwXG4gICAgdGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2VcbiAgICB0aGlzLmZpeGVkQ29udGVudCA9ICcubmF2YmFyLWZpeGVkLXRvcCwgLm5hdmJhci1maXhlZC1ib3R0b20nXG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnJlbW90ZSkge1xuICAgICAgdGhpcy4kZWxlbWVudFxuICAgICAgICAuZmluZCgnLm1vZGFsLWNvbnRlbnQnKVxuICAgICAgICAubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlLCAkLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2xvYWRlZC5icy5tb2RhbCcpXG4gICAgICAgIH0sIHRoaXMpKVxuICAgIH1cbiAgfVxuXG4gIE1vZGFsLlZFUlNJT04gPSAnMy40LjEnXG5cbiAgTW9kYWwuVFJBTlNJVElPTl9EVVJBVElPTiA9IDMwMFxuICBNb2RhbC5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OID0gMTUwXG5cbiAgTW9kYWwuREVGQVVMVFMgPSB7XG4gICAgYmFja2Ryb3A6IHRydWUsXG4gICAga2V5Ym9hcmQ6IHRydWUsXG4gICAgc2hvdzogdHJ1ZVxuICB9XG5cbiAgTW9kYWwucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChfcmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLmlzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhfcmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKF9yZWxhdGVkVGFyZ2V0KSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgdmFyIGUgPSAkLkV2ZW50KCdzaG93LmJzLm1vZGFsJywgeyByZWxhdGVkVGFyZ2V0OiBfcmVsYXRlZFRhcmdldCB9KVxuXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpXG5cbiAgICBpZiAodGhpcy5pc1Nob3duIHx8IGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgdGhpcy5pc1Nob3duID0gdHJ1ZVxuXG4gICAgdGhpcy5jaGVja1Njcm9sbGJhcigpXG4gICAgdGhpcy5zZXRTY3JvbGxiYXIoKVxuICAgIHRoaXMuJGJvZHkuYWRkQ2xhc3MoJ21vZGFsLW9wZW4nKVxuXG4gICAgdGhpcy5lc2NhcGUoKVxuICAgIHRoaXMucmVzaXplKClcblxuICAgIHRoaXMuJGVsZW1lbnQub24oJ2NsaWNrLmRpc21pc3MuYnMubW9kYWwnLCAnW2RhdGEtZGlzbWlzcz1cIm1vZGFsXCJdJywgJC5wcm94eSh0aGlzLmhpZGUsIHRoaXMpKVxuXG4gICAgdGhpcy4kZGlhbG9nLm9uKCdtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoYXQuJGVsZW1lbnQub25lKCdtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoJChlLnRhcmdldCkuaXModGhhdC4kZWxlbWVudCkpIHRoYXQuaWdub3JlQmFja2Ryb3BDbGljayA9IHRydWVcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRyYW5zaXRpb24gPSAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGF0LiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJylcblxuICAgICAgaWYgKCF0aGF0LiRlbGVtZW50LnBhcmVudCgpLmxlbmd0aCkge1xuICAgICAgICB0aGF0LiRlbGVtZW50LmFwcGVuZFRvKHRoYXQuJGJvZHkpIC8vIGRvbid0IG1vdmUgbW9kYWxzIGRvbSBwb3NpdGlvblxuICAgICAgfVxuXG4gICAgICB0aGF0LiRlbGVtZW50XG4gICAgICAgIC5zaG93KClcbiAgICAgICAgLnNjcm9sbFRvcCgwKVxuXG4gICAgICB0aGF0LmFkanVzdERpYWxvZygpXG5cbiAgICAgIGlmICh0cmFuc2l0aW9uKSB7XG4gICAgICAgIHRoYXQuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGggLy8gZm9yY2UgcmVmbG93XG4gICAgICB9XG5cbiAgICAgIHRoYXQuJGVsZW1lbnQuYWRkQ2xhc3MoJ2luJylcblxuICAgICAgdGhhdC5lbmZvcmNlRm9jdXMoKVxuXG4gICAgICB2YXIgZSA9ICQuRXZlbnQoJ3Nob3duLmJzLm1vZGFsJywgeyByZWxhdGVkVGFyZ2V0OiBfcmVsYXRlZFRhcmdldCB9KVxuXG4gICAgICB0cmFuc2l0aW9uID9cbiAgICAgICAgdGhhdC4kZGlhbG9nIC8vIHdhaXQgZm9yIG1vZGFsIHRvIHNsaWRlIGluXG4gICAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhhdC4kZWxlbWVudC50cmlnZ2VyKCdmb2N1cycpLnRyaWdnZXIoZSlcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChNb2RhbC5UUkFOU0lUSU9OX0RVUkFUSU9OKSA6XG4gICAgICAgIHRoYXQuJGVsZW1lbnQudHJpZ2dlcignZm9jdXMnKS50cmlnZ2VyKGUpXG4gICAgfSlcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZSkgZS5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICBlID0gJC5FdmVudCgnaGlkZS5icy5tb2RhbCcpXG5cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSlcblxuICAgIGlmICghdGhpcy5pc1Nob3duIHx8IGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgdGhpcy5pc1Nob3duID0gZmFsc2VcblxuICAgIHRoaXMuZXNjYXBlKClcbiAgICB0aGlzLnJlc2l6ZSgpXG5cbiAgICAkKGRvY3VtZW50KS5vZmYoJ2ZvY3VzaW4uYnMubW9kYWwnKVxuXG4gICAgdGhpcy4kZWxlbWVudFxuICAgICAgLnJlbW92ZUNsYXNzKCdpbicpXG4gICAgICAub2ZmKCdjbGljay5kaXNtaXNzLmJzLm1vZGFsJylcbiAgICAgIC5vZmYoJ21vdXNldXAuZGlzbWlzcy5icy5tb2RhbCcpXG5cbiAgICB0aGlzLiRkaWFsb2cub2ZmKCdtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbCcpXG5cbiAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJykgP1xuICAgICAgdGhpcy4kZWxlbWVudFxuICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCAkLnByb3h5KHRoaXMuaGlkZU1vZGFsLCB0aGlzKSlcbiAgICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKE1vZGFsLlRSQU5TSVRJT05fRFVSQVRJT04pIDpcbiAgICAgIHRoaXMuaGlkZU1vZGFsKClcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5lbmZvcmNlRm9jdXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgJChkb2N1bWVudClcbiAgICAgIC5vZmYoJ2ZvY3VzaW4uYnMubW9kYWwnKSAvLyBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGZvY3VzIGxvb3BcbiAgICAgIC5vbignZm9jdXNpbi5icy5tb2RhbCcsICQucHJveHkoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50ICE9PSBlLnRhcmdldCAmJlxuICAgICAgICAgIHRoaXMuJGVsZW1lbnRbMF0gIT09IGUudGFyZ2V0ICYmXG4gICAgICAgICAgIXRoaXMuJGVsZW1lbnQuaGFzKGUudGFyZ2V0KS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2ZvY3VzJylcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcykpXG4gIH1cblxuICBNb2RhbC5wcm90b3R5cGUuZXNjYXBlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmlzU2hvd24gJiYgdGhpcy5vcHRpb25zLmtleWJvYXJkKSB7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCdrZXlkb3duLmRpc21pc3MuYnMubW9kYWwnLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUud2hpY2ggPT0gMjcgJiYgdGhpcy5oaWRlKClcbiAgICAgIH0sIHRoaXMpKVxuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNTaG93bikge1xuICAgICAgdGhpcy4kZWxlbWVudC5vZmYoJ2tleWRvd24uZGlzbWlzcy5icy5tb2RhbCcpXG4gICAgfVxuICB9XG5cbiAgTW9kYWwucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5pc1Nob3duKSB7XG4gICAgICAkKHdpbmRvdykub24oJ3Jlc2l6ZS5icy5tb2RhbCcsICQucHJveHkodGhpcy5oYW5kbGVVcGRhdGUsIHRoaXMpKVxuICAgIH0gZWxzZSB7XG4gICAgICAkKHdpbmRvdykub2ZmKCdyZXNpemUuYnMubW9kYWwnKVxuICAgIH1cbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5oaWRlTW9kYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgdGhpcy4kZWxlbWVudC5oaWRlKClcbiAgICB0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoYXQuJGJvZHkucmVtb3ZlQ2xhc3MoJ21vZGFsLW9wZW4nKVxuICAgICAgdGhhdC5yZXNldEFkanVzdG1lbnRzKClcbiAgICAgIHRoYXQucmVzZXRTY3JvbGxiYXIoKVxuICAgICAgdGhhdC4kZWxlbWVudC50cmlnZ2VyKCdoaWRkZW4uYnMubW9kYWwnKVxuICAgIH0pXG4gIH1cblxuICBNb2RhbC5wcm90b3R5cGUucmVtb3ZlQmFja2Ryb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kYmFja2Ryb3AgJiYgdGhpcy4kYmFja2Ryb3AucmVtb3ZlKClcbiAgICB0aGlzLiRiYWNrZHJvcCA9IG51bGxcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5iYWNrZHJvcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIHZhciBhbmltYXRlID0gdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpID8gJ2ZhZGUnIDogJydcblxuICAgIGlmICh0aGlzLmlzU2hvd24gJiYgdGhpcy5vcHRpb25zLmJhY2tkcm9wKSB7XG4gICAgICB2YXIgZG9BbmltYXRlID0gJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgYW5pbWF0ZVxuXG4gICAgICB0aGlzLiRiYWNrZHJvcCA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpXG4gICAgICAgIC5hZGRDbGFzcygnbW9kYWwtYmFja2Ryb3AgJyArIGFuaW1hdGUpXG4gICAgICAgIC5hcHBlbmRUbyh0aGlzLiRib2R5KVxuXG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCdjbGljay5kaXNtaXNzLmJzLm1vZGFsJywgJC5wcm94eShmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAodGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrKSB7XG4gICAgICAgICAgdGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2VcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoZS50YXJnZXQgIT09IGUuY3VycmVudFRhcmdldCkgcmV0dXJuXG4gICAgICAgIHRoaXMub3B0aW9ucy5iYWNrZHJvcCA9PSAnc3RhdGljJ1xuICAgICAgICAgID8gdGhpcy4kZWxlbWVudFswXS5mb2N1cygpXG4gICAgICAgICAgOiB0aGlzLmhpZGUoKVxuICAgICAgfSwgdGhpcykpXG5cbiAgICAgIGlmIChkb0FuaW1hdGUpIHRoaXMuJGJhY2tkcm9wWzBdLm9mZnNldFdpZHRoIC8vIGZvcmNlIHJlZmxvd1xuXG4gICAgICB0aGlzLiRiYWNrZHJvcC5hZGRDbGFzcygnaW4nKVxuXG4gICAgICBpZiAoIWNhbGxiYWNrKSByZXR1cm5cblxuICAgICAgZG9BbmltYXRlID9cbiAgICAgICAgdGhpcy4kYmFja2Ryb3BcbiAgICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCBjYWxsYmFjaylcbiAgICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoTW9kYWwuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTikgOlxuICAgICAgICBjYWxsYmFjaygpXG5cbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU2hvd24gJiYgdGhpcy4kYmFja2Ryb3ApIHtcbiAgICAgIHRoaXMuJGJhY2tkcm9wLnJlbW92ZUNsYXNzKCdpbicpXG5cbiAgICAgIHZhciBjYWxsYmFja1JlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhhdC5yZW1vdmVCYWNrZHJvcCgpXG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKClcbiAgICAgIH1cbiAgICAgICQuc3VwcG9ydC50cmFuc2l0aW9uICYmIHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2ZhZGUnKSA/XG4gICAgICAgIHRoaXMuJGJhY2tkcm9wXG4gICAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgY2FsbGJhY2tSZW1vdmUpXG4gICAgICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKE1vZGFsLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pIDpcbiAgICAgICAgY2FsbGJhY2tSZW1vdmUoKVxuXG4gICAgfSBlbHNlIGlmIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKVxuICAgIH1cbiAgfVxuXG4gIC8vIHRoZXNlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvdmVyZmxvd2luZyBtb2RhbHNcblxuICBNb2RhbC5wcm90b3R5cGUuaGFuZGxlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuYWRqdXN0RGlhbG9nKClcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5hZGp1c3REaWFsb2cgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1vZGFsSXNPdmVyZmxvd2luZyA9IHRoaXMuJGVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodFxuXG4gICAgdGhpcy4kZWxlbWVudC5jc3Moe1xuICAgICAgcGFkZGluZ0xlZnQ6ICF0aGlzLmJvZHlJc092ZXJmbG93aW5nICYmIG1vZGFsSXNPdmVyZmxvd2luZyA/IHRoaXMuc2Nyb2xsYmFyV2lkdGggOiAnJyxcbiAgICAgIHBhZGRpbmdSaWdodDogdGhpcy5ib2R5SXNPdmVyZmxvd2luZyAmJiAhbW9kYWxJc092ZXJmbG93aW5nID8gdGhpcy5zY3JvbGxiYXJXaWR0aCA6ICcnXG4gICAgfSlcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5yZXNldEFkanVzdG1lbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJGVsZW1lbnQuY3NzKHtcbiAgICAgIHBhZGRpbmdMZWZ0OiAnJyxcbiAgICAgIHBhZGRpbmdSaWdodDogJydcbiAgICB9KVxuICB9XG5cbiAgTW9kYWwucHJvdG90eXBlLmNoZWNrU2Nyb2xsYmFyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBmdWxsV2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIGlmICghZnVsbFdpbmRvd1dpZHRoKSB7IC8vIHdvcmthcm91bmQgZm9yIG1pc3Npbmcgd2luZG93LmlubmVyV2lkdGggaW4gSUU4XG4gICAgICB2YXIgZG9jdW1lbnRFbGVtZW50UmVjdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgZnVsbFdpbmRvd1dpZHRoID0gZG9jdW1lbnRFbGVtZW50UmVjdC5yaWdodCAtIE1hdGguYWJzKGRvY3VtZW50RWxlbWVudFJlY3QubGVmdClcbiAgICB9XG4gICAgdGhpcy5ib2R5SXNPdmVyZmxvd2luZyA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPCBmdWxsV2luZG93V2lkdGhcbiAgICB0aGlzLnNjcm9sbGJhcldpZHRoID0gdGhpcy5tZWFzdXJlU2Nyb2xsYmFyKClcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5zZXRTY3JvbGxiYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGJvZHlQYWQgPSBwYXJzZUludCgodGhpcy4kYm9keS5jc3MoJ3BhZGRpbmctcmlnaHQnKSB8fCAwKSwgMTApXG4gICAgdGhpcy5vcmlnaW5hbEJvZHlQYWQgPSBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCB8fCAnJ1xuICAgIHZhciBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuc2Nyb2xsYmFyV2lkdGhcbiAgICBpZiAodGhpcy5ib2R5SXNPdmVyZmxvd2luZykge1xuICAgICAgdGhpcy4kYm9keS5jc3MoJ3BhZGRpbmctcmlnaHQnLCBib2R5UGFkICsgc2Nyb2xsYmFyV2lkdGgpXG4gICAgICAkKHRoaXMuZml4ZWRDb250ZW50KS5lYWNoKGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkge1xuICAgICAgICB2YXIgYWN0dWFsUGFkZGluZyA9IGVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0XG4gICAgICAgIHZhciBjYWxjdWxhdGVkUGFkZGluZyA9ICQoZWxlbWVudCkuY3NzKCdwYWRkaW5nLXJpZ2h0JylcbiAgICAgICAgJChlbGVtZW50KVxuICAgICAgICAgIC5kYXRhKCdwYWRkaW5nLXJpZ2h0JywgYWN0dWFsUGFkZGluZylcbiAgICAgICAgICAuY3NzKCdwYWRkaW5nLXJpZ2h0JywgcGFyc2VGbG9hdChjYWxjdWxhdGVkUGFkZGluZykgKyBzY3JvbGxiYXJXaWR0aCArICdweCcpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5yZXNldFNjcm9sbGJhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiRib2R5LmNzcygncGFkZGluZy1yaWdodCcsIHRoaXMub3JpZ2luYWxCb2R5UGFkKVxuICAgICQodGhpcy5maXhlZENvbnRlbnQpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgcGFkZGluZyA9ICQoZWxlbWVudCkuZGF0YSgncGFkZGluZy1yaWdodCcpXG4gICAgICAkKGVsZW1lbnQpLnJlbW92ZURhdGEoJ3BhZGRpbmctcmlnaHQnKVxuICAgICAgZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBwYWRkaW5nID8gcGFkZGluZyA6ICcnXG4gICAgfSlcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5tZWFzdXJlU2Nyb2xsYmFyID0gZnVuY3Rpb24gKCkgeyAvLyB0aHggd2Fsc2hcbiAgICB2YXIgc2Nyb2xsRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBzY3JvbGxEaXYuY2xhc3NOYW1lID0gJ21vZGFsLXNjcm9sbGJhci1tZWFzdXJlJ1xuICAgIHRoaXMuJGJvZHkuYXBwZW5kKHNjcm9sbERpdilcbiAgICB2YXIgc2Nyb2xsYmFyV2lkdGggPSBzY3JvbGxEaXYub2Zmc2V0V2lkdGggLSBzY3JvbGxEaXYuY2xpZW50V2lkdGhcbiAgICB0aGlzLiRib2R5WzBdLnJlbW92ZUNoaWxkKHNjcm9sbERpdilcbiAgICByZXR1cm4gc2Nyb2xsYmFyV2lkdGhcbiAgfVxuXG5cbiAgLy8gTU9EQUwgUExVR0lOIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT1cblxuICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uLCBfcmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgPSAkdGhpcy5kYXRhKCdicy5tb2RhbCcpXG4gICAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBNb2RhbC5ERUZBVUxUUywgJHRoaXMuZGF0YSgpLCB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvbilcblxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5tb2RhbCcsIChkYXRhID0gbmV3IE1vZGFsKHRoaXMsIG9wdGlvbnMpKSlcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oX3JlbGF0ZWRUYXJnZXQpXG4gICAgICBlbHNlIGlmIChvcHRpb25zLnNob3cpIGRhdGEuc2hvdyhfcmVsYXRlZFRhcmdldClcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4ubW9kYWxcblxuICAkLmZuLm1vZGFsID0gUGx1Z2luXG4gICQuZm4ubW9kYWwuQ29uc3RydWN0b3IgPSBNb2RhbFxuXG5cbiAgLy8gTU9EQUwgTk8gQ09ORkxJQ1RcbiAgLy8gPT09PT09PT09PT09PT09PT1cblxuICAkLmZuLm1vZGFsLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbi5tb2RhbCA9IG9sZFxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuXG4gIC8vIE1PREFMIERBVEEtQVBJXG4gIC8vID09PT09PT09PT09PT09XG5cbiAgJChkb2N1bWVudCkub24oJ2NsaWNrLmJzLm1vZGFsLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZT1cIm1vZGFsXCJdJywgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgJHRoaXMgPSAkKHRoaXMpXG4gICAgdmFyIGhyZWYgPSAkdGhpcy5hdHRyKCdocmVmJylcbiAgICB2YXIgdGFyZ2V0ID0gJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKSB8fFxuICAgICAgKGhyZWYgJiYgaHJlZi5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLCAnJykpIC8vIHN0cmlwIGZvciBpZTdcblxuICAgIHZhciAkdGFyZ2V0ID0gJChkb2N1bWVudCkuZmluZCh0YXJnZXQpXG4gICAgdmFyIG9wdGlvbiA9ICR0YXJnZXQuZGF0YSgnYnMubW9kYWwnKSA/ICd0b2dnbGUnIDogJC5leHRlbmQoeyByZW1vdGU6ICEvIy8udGVzdChocmVmKSAmJiBocmVmIH0sICR0YXJnZXQuZGF0YSgpLCAkdGhpcy5kYXRhKCkpXG5cbiAgICBpZiAoJHRoaXMuaXMoJ2EnKSkgZS5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAkdGFyZ2V0Lm9uZSgnc2hvdy5icy5tb2RhbCcsIGZ1bmN0aW9uIChzaG93RXZlbnQpIHtcbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybiAvLyBvbmx5IHJlZ2lzdGVyIGZvY3VzIHJlc3RvcmVyIGlmIG1vZGFsIHdpbGwgYWN0dWFsbHkgZ2V0IHNob3duXG4gICAgICAkdGFyZ2V0Lm9uZSgnaGlkZGVuLmJzLm1vZGFsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAkdGhpcy5pcygnOnZpc2libGUnKSAmJiAkdGhpcy50cmlnZ2VyKCdmb2N1cycpXG4gICAgICB9KVxuICAgIH0pXG4gICAgUGx1Z2luLmNhbGwoJHRhcmdldCwgb3B0aW9uLCB0aGlzKVxuICB9KVxuXG59KGpRdWVyeSk7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQm9vdHN0cmFwOiB0b29sdGlwLmpzIHYzLjQuMVxuICogaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvMy40L2phdmFzY3JpcHQvI3Rvb2x0aXBcbiAqIEluc3BpcmVkIGJ5IHRoZSBvcmlnaW5hbCBqUXVlcnkudGlwc3kgYnkgSmFzb24gRnJhbWVcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbitmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIERJU0FMTE9XRURfQVRUUklCVVRFUyA9IFsnc2FuaXRpemUnLCAnd2hpdGVMaXN0JywgJ3Nhbml0aXplRm4nXVxuXG4gIHZhciB1cmlBdHRycyA9IFtcbiAgICAnYmFja2dyb3VuZCcsXG4gICAgJ2NpdGUnLFxuICAgICdocmVmJyxcbiAgICAnaXRlbXR5cGUnLFxuICAgICdsb25nZGVzYycsXG4gICAgJ3Bvc3RlcicsXG4gICAgJ3NyYycsXG4gICAgJ3hsaW5rOmhyZWYnXG4gIF1cblxuICB2YXIgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTiA9IC9eYXJpYS1bXFx3LV0qJC9pXG5cbiAgdmFyIERlZmF1bHRXaGl0ZWxpc3QgPSB7XG4gICAgLy8gR2xvYmFsIGF0dHJpYnV0ZXMgYWxsb3dlZCBvbiBhbnkgc3VwcGxpZWQgZWxlbWVudCBiZWxvdy5cbiAgICAnKic6IFsnY2xhc3MnLCAnZGlyJywgJ2lkJywgJ2xhbmcnLCAncm9sZScsIEFSSUFfQVRUUklCVVRFX1BBVFRFUk5dLFxuICAgIGE6IFsndGFyZ2V0JywgJ2hyZWYnLCAndGl0bGUnLCAncmVsJ10sXG4gICAgYXJlYTogW10sXG4gICAgYjogW10sXG4gICAgYnI6IFtdLFxuICAgIGNvbDogW10sXG4gICAgY29kZTogW10sXG4gICAgZGl2OiBbXSxcbiAgICBlbTogW10sXG4gICAgaHI6IFtdLFxuICAgIGgxOiBbXSxcbiAgICBoMjogW10sXG4gICAgaDM6IFtdLFxuICAgIGg0OiBbXSxcbiAgICBoNTogW10sXG4gICAgaDY6IFtdLFxuICAgIGk6IFtdLFxuICAgIGltZzogWydzcmMnLCAnYWx0JywgJ3RpdGxlJywgJ3dpZHRoJywgJ2hlaWdodCddLFxuICAgIGxpOiBbXSxcbiAgICBvbDogW10sXG4gICAgcDogW10sXG4gICAgcHJlOiBbXSxcbiAgICBzOiBbXSxcbiAgICBzbWFsbDogW10sXG4gICAgc3BhbjogW10sXG4gICAgc3ViOiBbXSxcbiAgICBzdXA6IFtdLFxuICAgIHN0cm9uZzogW10sXG4gICAgdTogW10sXG4gICAgdWw6IFtdXG4gIH1cblxuICAvKipcbiAgICogQSBwYXR0ZXJuIHRoYXQgcmVjb2duaXplcyBhIGNvbW1vbmx5IHVzZWZ1bCBzdWJzZXQgb2YgVVJMcyB0aGF0IGFyZSBzYWZlLlxuICAgKlxuICAgKiBTaG91dG91dCB0byBBbmd1bGFyIDcgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzcuMi40L3BhY2thZ2VzL2NvcmUvc3JjL3Nhbml0aXphdGlvbi91cmxfc2FuaXRpemVyLnRzXG4gICAqL1xuICB2YXIgU0FGRV9VUkxfUEFUVEVSTiA9IC9eKD86KD86aHR0cHM/fG1haWx0b3xmdHB8dGVsfGZpbGUpOnxbXiY6Lz8jXSooPzpbLz8jXXwkKSkvZ2lcblxuICAvKipcbiAgICogQSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBzYWZlIGRhdGEgVVJMcy4gT25seSBtYXRjaGVzIGltYWdlLCB2aWRlbyBhbmQgYXVkaW8gdHlwZXMuXG4gICAqXG4gICAqIFNob3V0b3V0IHRvIEFuZ3VsYXIgNyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvNy4yLjQvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHNcbiAgICovXG4gIHZhciBEQVRBX1VSTF9QQVRURVJOID0gL15kYXRhOig/OmltYWdlXFwvKD86Ym1wfGdpZnxqcGVnfGpwZ3xwbmd8dGlmZnx3ZWJwKXx2aWRlb1xcLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1xcLyg/Om1wM3xvZ2F8b2dnfG9wdXMpKTtiYXNlNjQsW2EtejAtOSsvXSs9KiQvaVxuXG4gIGZ1bmN0aW9uIGFsbG93ZWRBdHRyaWJ1dGUoYXR0ciwgYWxsb3dlZEF0dHJpYnV0ZUxpc3QpIHtcbiAgICB2YXIgYXR0ck5hbWUgPSBhdHRyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmICgkLmluQXJyYXkoYXR0ck5hbWUsIGFsbG93ZWRBdHRyaWJ1dGVMaXN0KSAhPT0gLTEpIHtcbiAgICAgIGlmICgkLmluQXJyYXkoYXR0ck5hbWUsIHVyaUF0dHJzKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oYXR0ci5ub2RlVmFsdWUubWF0Y2goU0FGRV9VUkxfUEFUVEVSTikgfHwgYXR0ci5ub2RlVmFsdWUubWF0Y2goREFUQV9VUkxfUEFUVEVSTikpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgdmFyIHJlZ0V4cCA9ICQoYWxsb3dlZEF0dHJpYnV0ZUxpc3QpLmZpbHRlcihmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBSZWdFeHBcbiAgICB9KVxuXG4gICAgLy8gQ2hlY2sgaWYgYSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdGVzIHRoZSBhdHRyaWJ1dGUuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSByZWdFeHAubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXR0ck5hbWUubWF0Y2gocmVnRXhwW2ldKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gc2FuaXRpemVIdG1sKHVuc2FmZUh0bWwsIHdoaXRlTGlzdCwgc2FuaXRpemVGbikge1xuICAgIGlmICh1bnNhZmVIdG1sLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuc2FmZUh0bWxcbiAgICB9XG5cbiAgICBpZiAoc2FuaXRpemVGbiAmJiB0eXBlb2Ygc2FuaXRpemVGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHNhbml0aXplRm4odW5zYWZlSHRtbClcbiAgICB9XG5cbiAgICAvLyBJRSA4IGFuZCBiZWxvdyBkb24ndCBzdXBwb3J0IGNyZWF0ZUhUTUxEb2N1bWVudFxuICAgIGlmICghZG9jdW1lbnQuaW1wbGVtZW50YXRpb24gfHwgIWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCkge1xuICAgICAgcmV0dXJuIHVuc2FmZUh0bWxcbiAgICB9XG5cbiAgICB2YXIgY3JlYXRlZERvY3VtZW50ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCdzYW5pdGl6YXRpb24nKVxuICAgIGNyZWF0ZWREb2N1bWVudC5ib2R5LmlubmVySFRNTCA9IHVuc2FmZUh0bWxcblxuICAgIHZhciB3aGl0ZWxpc3RLZXlzID0gJC5tYXAod2hpdGVMaXN0LCBmdW5jdGlvbiAoZWwsIGkpIHsgcmV0dXJuIGkgfSlcbiAgICB2YXIgZWxlbWVudHMgPSAkKGNyZWF0ZWREb2N1bWVudC5ib2R5KS5maW5kKCcqJylcblxuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdmFyIGVsID0gZWxlbWVudHNbaV1cbiAgICAgIHZhciBlbE5hbWUgPSBlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICAgIGlmICgkLmluQXJyYXkoZWxOYW1lLCB3aGl0ZWxpc3RLZXlzKSA9PT0gLTEpIHtcbiAgICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbClcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB2YXIgYXR0cmlidXRlTGlzdCA9ICQubWFwKGVsLmF0dHJpYnV0ZXMsIGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwgfSlcbiAgICAgIHZhciB3aGl0ZWxpc3RlZEF0dHJpYnV0ZXMgPSBbXS5jb25jYXQod2hpdGVMaXN0WycqJ10gfHwgW10sIHdoaXRlTGlzdFtlbE5hbWVdIHx8IFtdKVxuXG4gICAgICBmb3IgKHZhciBqID0gMCwgbGVuMiA9IGF0dHJpYnV0ZUxpc3QubGVuZ3RoOyBqIDwgbGVuMjsgaisrKSB7XG4gICAgICAgIGlmICghYWxsb3dlZEF0dHJpYnV0ZShhdHRyaWJ1dGVMaXN0W2pdLCB3aGl0ZWxpc3RlZEF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZUxpc3Rbal0ubm9kZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlZERvY3VtZW50LmJvZHkuaW5uZXJIVE1MXG4gIH1cblxuICAvLyBUT09MVElQIFBVQkxJQyBDTEFTUyBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgVG9vbHRpcCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy50eXBlICAgICAgID0gbnVsbFxuICAgIHRoaXMub3B0aW9ucyAgICA9IG51bGxcbiAgICB0aGlzLmVuYWJsZWQgICAgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0ICAgID0gbnVsbFxuICAgIHRoaXMuaG92ZXJTdGF0ZSA9IG51bGxcbiAgICB0aGlzLiRlbGVtZW50ICAgPSBudWxsXG4gICAgdGhpcy5pblN0YXRlICAgID0gbnVsbFxuXG4gICAgdGhpcy5pbml0KCd0b29sdGlwJywgZWxlbWVudCwgb3B0aW9ucylcbiAgfVxuXG4gIFRvb2x0aXAuVkVSU0lPTiAgPSAnMy40LjEnXG5cbiAgVG9vbHRpcC5UUkFOU0lUSU9OX0RVUkFUSU9OID0gMTUwXG5cbiAgVG9vbHRpcC5ERUZBVUxUUyA9IHtcbiAgICBhbmltYXRpb246IHRydWUsXG4gICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICBzZWxlY3RvcjogZmFsc2UsXG4gICAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj48ZGl2IGNsYXNzPVwidG9vbHRpcC1pbm5lclwiPjwvZGl2PjwvZGl2PicsXG4gICAgdHJpZ2dlcjogJ2hvdmVyIGZvY3VzJyxcbiAgICB0aXRsZTogJycsXG4gICAgZGVsYXk6IDAsXG4gICAgaHRtbDogZmFsc2UsXG4gICAgY29udGFpbmVyOiBmYWxzZSxcbiAgICB2aWV3cG9ydDoge1xuICAgICAgc2VsZWN0b3I6ICdib2R5JyxcbiAgICAgIHBhZGRpbmc6IDBcbiAgICB9LFxuICAgIHNhbml0aXplIDogdHJ1ZSxcbiAgICBzYW5pdGl6ZUZuIDogbnVsbCxcbiAgICB3aGl0ZUxpc3QgOiBEZWZhdWx0V2hpdGVsaXN0XG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKHR5cGUsIGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmVuYWJsZWQgICA9IHRydWVcbiAgICB0aGlzLnR5cGUgICAgICA9IHR5cGVcbiAgICB0aGlzLiRlbGVtZW50ICA9ICQoZWxlbWVudClcbiAgICB0aGlzLm9wdGlvbnMgICA9IHRoaXMuZ2V0T3B0aW9ucyhvcHRpb25zKVxuICAgIHRoaXMuJHZpZXdwb3J0ID0gdGhpcy5vcHRpb25zLnZpZXdwb3J0ICYmICQoZG9jdW1lbnQpLmZpbmQoJC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy52aWV3cG9ydCkgPyB0aGlzLm9wdGlvbnMudmlld3BvcnQuY2FsbCh0aGlzLCB0aGlzLiRlbGVtZW50KSA6ICh0aGlzLm9wdGlvbnMudmlld3BvcnQuc2VsZWN0b3IgfHwgdGhpcy5vcHRpb25zLnZpZXdwb3J0KSlcbiAgICB0aGlzLmluU3RhdGUgICA9IHsgY2xpY2s6IGZhbHNlLCBob3ZlcjogZmFsc2UsIGZvY3VzOiBmYWxzZSB9XG5cbiAgICBpZiAodGhpcy4kZWxlbWVudFswXSBpbnN0YW5jZW9mIGRvY3VtZW50LmNvbnN0cnVjdG9yICYmICF0aGlzLm9wdGlvbnMuc2VsZWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYHNlbGVjdG9yYCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBpbml0aWFsaXppbmcgJyArIHRoaXMudHlwZSArICcgb24gdGhlIHdpbmRvdy5kb2N1bWVudCBvYmplY3QhJylcbiAgICB9XG5cbiAgICB2YXIgdHJpZ2dlcnMgPSB0aGlzLm9wdGlvbnMudHJpZ2dlci5zcGxpdCgnICcpXG5cbiAgICBmb3IgKHZhciBpID0gdHJpZ2dlcnMubGVuZ3RoOyBpLS07KSB7XG4gICAgICB2YXIgdHJpZ2dlciA9IHRyaWdnZXJzW2ldXG5cbiAgICAgIGlmICh0cmlnZ2VyID09ICdjbGljaycpIHtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5vbignY2xpY2suJyArIHRoaXMudHlwZSwgdGhpcy5vcHRpb25zLnNlbGVjdG9yLCAkLnByb3h5KHRoaXMudG9nZ2xlLCB0aGlzKSlcbiAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAhPSAnbWFudWFsJykge1xuICAgICAgICB2YXIgZXZlbnRJbiAgPSB0cmlnZ2VyID09ICdob3ZlcicgPyAnbW91c2VlbnRlcicgOiAnZm9jdXNpbidcbiAgICAgICAgdmFyIGV2ZW50T3V0ID0gdHJpZ2dlciA9PSAnaG92ZXInID8gJ21vdXNlbGVhdmUnIDogJ2ZvY3Vzb3V0J1xuXG4gICAgICAgIHRoaXMuJGVsZW1lbnQub24oZXZlbnRJbiAgKyAnLicgKyB0aGlzLnR5cGUsIHRoaXMub3B0aW9ucy5zZWxlY3RvciwgJC5wcm94eSh0aGlzLmVudGVyLCB0aGlzKSlcbiAgICAgICAgdGhpcy4kZWxlbWVudC5vbihldmVudE91dCArICcuJyArIHRoaXMudHlwZSwgdGhpcy5vcHRpb25zLnNlbGVjdG9yLCAkLnByb3h5KHRoaXMubGVhdmUsIHRoaXMpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucy5zZWxlY3RvciA/XG4gICAgICAodGhpcy5fb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIHsgdHJpZ2dlcjogJ21hbnVhbCcsIHNlbGVjdG9yOiAnJyB9KSkgOlxuICAgICAgdGhpcy5maXhUaXRsZSgpXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5nZXREZWZhdWx0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gVG9vbHRpcC5ERUZBVUxUU1xuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0T3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGRhdGFBdHRyaWJ1dGVzID0gdGhpcy4kZWxlbWVudC5kYXRhKClcblxuICAgIGZvciAodmFyIGRhdGFBdHRyIGluIGRhdGFBdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoZGF0YUF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoZGF0YUF0dHIpICYmICQuaW5BcnJheShkYXRhQXR0ciwgRElTQUxMT1dFRF9BVFRSSUJVVEVTKSAhPT0gLTEpIHtcbiAgICAgICAgZGVsZXRlIGRhdGFBdHRyaWJ1dGVzW2RhdGFBdHRyXVxuICAgICAgfVxuICAgIH1cblxuICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5nZXREZWZhdWx0cygpLCBkYXRhQXR0cmlidXRlcywgb3B0aW9ucylcblxuICAgIGlmIChvcHRpb25zLmRlbGF5ICYmIHR5cGVvZiBvcHRpb25zLmRlbGF5ID09ICdudW1iZXInKSB7XG4gICAgICBvcHRpb25zLmRlbGF5ID0ge1xuICAgICAgICBzaG93OiBvcHRpb25zLmRlbGF5LFxuICAgICAgICBoaWRlOiBvcHRpb25zLmRlbGF5XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2FuaXRpemUpIHtcbiAgICAgIG9wdGlvbnMudGVtcGxhdGUgPSBzYW5pdGl6ZUh0bWwob3B0aW9ucy50ZW1wbGF0ZSwgb3B0aW9ucy53aGl0ZUxpc3QsIG9wdGlvbnMuc2FuaXRpemVGbilcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uc1xuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zICA9IHt9XG4gICAgdmFyIGRlZmF1bHRzID0gdGhpcy5nZXREZWZhdWx0cygpXG5cbiAgICB0aGlzLl9vcHRpb25zICYmICQuZWFjaCh0aGlzLl9vcHRpb25zLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGRlZmF1bHRzW2tleV0gIT0gdmFsdWUpIG9wdGlvbnNba2V5XSA9IHZhbHVlXG4gICAgfSlcblxuICAgIHJldHVybiBvcHRpb25zXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5lbnRlciA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICB2YXIgc2VsZiA9IG9iaiBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IgP1xuICAgICAgb2JqIDogJChvYmouY3VycmVudFRhcmdldCkuZGF0YSgnYnMuJyArIHRoaXMudHlwZSlcblxuICAgIGlmICghc2VsZikge1xuICAgICAgc2VsZiA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKG9iai5jdXJyZW50VGFyZ2V0LCB0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKVxuICAgICAgJChvYmouY3VycmVudFRhcmdldCkuZGF0YSgnYnMuJyArIHRoaXMudHlwZSwgc2VsZilcbiAgICB9XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgJC5FdmVudCkge1xuICAgICAgc2VsZi5pblN0YXRlW29iai50eXBlID09ICdmb2N1c2luJyA/ICdmb2N1cycgOiAnaG92ZXInXSA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAoc2VsZi50aXAoKS5oYXNDbGFzcygnaW4nKSB8fCBzZWxmLmhvdmVyU3RhdGUgPT0gJ2luJykge1xuICAgICAgc2VsZi5ob3ZlclN0YXRlID0gJ2luJ1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHNlbGYudGltZW91dClcblxuICAgIHNlbGYuaG92ZXJTdGF0ZSA9ICdpbidcblxuICAgIGlmICghc2VsZi5vcHRpb25zLmRlbGF5IHx8ICFzZWxmLm9wdGlvbnMuZGVsYXkuc2hvdykgcmV0dXJuIHNlbGYuc2hvdygpXG5cbiAgICBzZWxmLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzZWxmLmhvdmVyU3RhdGUgPT0gJ2luJykgc2VsZi5zaG93KClcbiAgICB9LCBzZWxmLm9wdGlvbnMuZGVsYXkuc2hvdylcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmlzSW5TdGF0ZVRydWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuaW5TdGF0ZSkge1xuICAgICAgaWYgKHRoaXMuaW5TdGF0ZVtrZXldKSByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUubGVhdmUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgdmFyIHNlbGYgPSBvYmogaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yID9cbiAgICAgIG9iaiA6ICQob2JqLmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUpXG5cbiAgICBpZiAoIXNlbGYpIHtcbiAgICAgIHNlbGYgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihvYmouY3VycmVudFRhcmdldCwgdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSlcbiAgICAgICQob2JqLmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUsIHNlbGYpXG4gICAgfVxuXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mICQuRXZlbnQpIHtcbiAgICAgIHNlbGYuaW5TdGF0ZVtvYmoudHlwZSA9PSAnZm9jdXNvdXQnID8gJ2ZvY3VzJyA6ICdob3ZlciddID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5pc0luU3RhdGVUcnVlKCkpIHJldHVyblxuXG4gICAgY2xlYXJUaW1lb3V0KHNlbGYudGltZW91dClcblxuICAgIHNlbGYuaG92ZXJTdGF0ZSA9ICdvdXQnXG5cbiAgICBpZiAoIXNlbGYub3B0aW9ucy5kZWxheSB8fCAhc2VsZi5vcHRpb25zLmRlbGF5LmhpZGUpIHJldHVybiBzZWxmLmhpZGUoKVxuXG4gICAgc2VsZi50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoc2VsZi5ob3ZlclN0YXRlID09ICdvdXQnKSBzZWxmLmhpZGUoKVxuICAgIH0sIHNlbGYub3B0aW9ucy5kZWxheS5oaWRlKVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZSA9ICQuRXZlbnQoJ3Nob3cuYnMuJyArIHRoaXMudHlwZSlcblxuICAgIGlmICh0aGlzLmhhc0NvbnRlbnQoKSAmJiB0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKVxuXG4gICAgICB2YXIgaW5Eb20gPSAkLmNvbnRhaW5zKHRoaXMuJGVsZW1lbnRbMF0ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMuJGVsZW1lbnRbMF0pXG4gICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSB8fCAhaW5Eb20pIHJldHVyblxuICAgICAgdmFyIHRoYXQgPSB0aGlzXG5cbiAgICAgIHZhciAkdGlwID0gdGhpcy50aXAoKVxuXG4gICAgICB2YXIgdGlwSWQgPSB0aGlzLmdldFVJRCh0aGlzLnR5cGUpXG5cbiAgICAgIHRoaXMuc2V0Q29udGVudCgpXG4gICAgICAkdGlwLmF0dHIoJ2lkJywgdGlwSWQpXG4gICAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aXBJZClcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hbmltYXRpb24pICR0aXAuYWRkQ2xhc3MoJ2ZhZGUnKVxuXG4gICAgICB2YXIgcGxhY2VtZW50ID0gdHlwZW9mIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQgPT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLCAkdGlwWzBdLCB0aGlzLiRlbGVtZW50WzBdKSA6XG4gICAgICAgIHRoaXMub3B0aW9ucy5wbGFjZW1lbnRcblxuICAgICAgdmFyIGF1dG9Ub2tlbiA9IC9cXHM/YXV0bz9cXHM/L2lcbiAgICAgIHZhciBhdXRvUGxhY2UgPSBhdXRvVG9rZW4udGVzdChwbGFjZW1lbnQpXG4gICAgICBpZiAoYXV0b1BsYWNlKSBwbGFjZW1lbnQgPSBwbGFjZW1lbnQucmVwbGFjZShhdXRvVG9rZW4sICcnKSB8fCAndG9wJ1xuXG4gICAgICAkdGlwXG4gICAgICAgIC5kZXRhY2goKVxuICAgICAgICAuY3NzKHsgdG9wOiAwLCBsZWZ0OiAwLCBkaXNwbGF5OiAnYmxvY2snIH0pXG4gICAgICAgIC5hZGRDbGFzcyhwbGFjZW1lbnQpXG4gICAgICAgIC5kYXRhKCdicy4nICsgdGhpcy50eXBlLCB0aGlzKVxuXG4gICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID8gJHRpcC5hcHBlbmRUbygkKGRvY3VtZW50KS5maW5kKHRoaXMub3B0aW9ucy5jb250YWluZXIpKSA6ICR0aXAuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudClcbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignaW5zZXJ0ZWQuYnMuJyArIHRoaXMudHlwZSlcblxuICAgICAgdmFyIHBvcyAgICAgICAgICA9IHRoaXMuZ2V0UG9zaXRpb24oKVxuICAgICAgdmFyIGFjdHVhbFdpZHRoICA9ICR0aXBbMF0ub2Zmc2V0V2lkdGhcbiAgICAgIHZhciBhY3R1YWxIZWlnaHQgPSAkdGlwWzBdLm9mZnNldEhlaWdodFxuXG4gICAgICBpZiAoYXV0b1BsYWNlKSB7XG4gICAgICAgIHZhciBvcmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRcbiAgICAgICAgdmFyIHZpZXdwb3J0RGltID0gdGhpcy5nZXRQb3NpdGlvbih0aGlzLiR2aWV3cG9ydClcblxuICAgICAgICBwbGFjZW1lbnQgPSBwbGFjZW1lbnQgPT0gJ2JvdHRvbScgJiYgcG9zLmJvdHRvbSArIGFjdHVhbEhlaWdodCA+IHZpZXdwb3J0RGltLmJvdHRvbSA/ICd0b3AnICAgIDpcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50ID09ICd0b3AnICAgICYmIHBvcy50b3AgICAgLSBhY3R1YWxIZWlnaHQgPCB2aWV3cG9ydERpbS50b3AgICAgPyAnYm90dG9tJyA6XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudCA9PSAncmlnaHQnICAmJiBwb3MucmlnaHQgICsgYWN0dWFsV2lkdGggID4gdmlld3BvcnREaW0ud2lkdGggID8gJ2xlZnQnICAgOlxuICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQgPT0gJ2xlZnQnICAgJiYgcG9zLmxlZnQgICAtIGFjdHVhbFdpZHRoICA8IHZpZXdwb3J0RGltLmxlZnQgICA/ICdyaWdodCcgIDpcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50XG5cbiAgICAgICAgJHRpcFxuICAgICAgICAgIC5yZW1vdmVDbGFzcyhvcmdQbGFjZW1lbnQpXG4gICAgICAgICAgLmFkZENsYXNzKHBsYWNlbWVudClcbiAgICAgIH1cblxuICAgICAgdmFyIGNhbGN1bGF0ZWRPZmZzZXQgPSB0aGlzLmdldENhbGN1bGF0ZWRPZmZzZXQocGxhY2VtZW50LCBwb3MsIGFjdHVhbFdpZHRoLCBhY3R1YWxIZWlnaHQpXG5cbiAgICAgIHRoaXMuYXBwbHlQbGFjZW1lbnQoY2FsY3VsYXRlZE9mZnNldCwgcGxhY2VtZW50KVxuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcmV2SG92ZXJTdGF0ZSA9IHRoYXQuaG92ZXJTdGF0ZVxuICAgICAgICB0aGF0LiRlbGVtZW50LnRyaWdnZXIoJ3Nob3duLmJzLicgKyB0aGF0LnR5cGUpXG4gICAgICAgIHRoYXQuaG92ZXJTdGF0ZSA9IG51bGxcblxuICAgICAgICBpZiAocHJldkhvdmVyU3RhdGUgPT0gJ291dCcpIHRoYXQubGVhdmUodGhhdClcbiAgICAgIH1cblxuICAgICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kdGlwLmhhc0NsYXNzKCdmYWRlJykgP1xuICAgICAgICAkdGlwXG4gICAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgY29tcGxldGUpXG4gICAgICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKFRvb2x0aXAuVFJBTlNJVElPTl9EVVJBVElPTikgOlxuICAgICAgICBjb21wbGV0ZSgpXG4gICAgfVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuYXBwbHlQbGFjZW1lbnQgPSBmdW5jdGlvbiAob2Zmc2V0LCBwbGFjZW1lbnQpIHtcbiAgICB2YXIgJHRpcCAgID0gdGhpcy50aXAoKVxuICAgIHZhciB3aWR0aCAgPSAkdGlwWzBdLm9mZnNldFdpZHRoXG4gICAgdmFyIGhlaWdodCA9ICR0aXBbMF0ub2Zmc2V0SGVpZ2h0XG5cbiAgICAvLyBtYW51YWxseSByZWFkIG1hcmdpbnMgYmVjYXVzZSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaW5jbHVkZXMgZGlmZmVyZW5jZVxuICAgIHZhciBtYXJnaW5Ub3AgPSBwYXJzZUludCgkdGlwLmNzcygnbWFyZ2luLXRvcCcpLCAxMClcbiAgICB2YXIgbWFyZ2luTGVmdCA9IHBhcnNlSW50KCR0aXAuY3NzKCdtYXJnaW4tbGVmdCcpLCAxMClcblxuICAgIC8vIHdlIG11c3QgY2hlY2sgZm9yIE5hTiBmb3IgaWUgOC85XG4gICAgaWYgKGlzTmFOKG1hcmdpblRvcCkpICBtYXJnaW5Ub3AgID0gMFxuICAgIGlmIChpc05hTihtYXJnaW5MZWZ0KSkgbWFyZ2luTGVmdCA9IDBcblxuICAgIG9mZnNldC50b3AgICs9IG1hcmdpblRvcFxuICAgIG9mZnNldC5sZWZ0ICs9IG1hcmdpbkxlZnRcblxuICAgIC8vICQuZm4ub2Zmc2V0IGRvZXNuJ3Qgcm91bmQgcGl4ZWwgdmFsdWVzXG4gICAgLy8gc28gd2UgdXNlIHNldE9mZnNldCBkaXJlY3RseSB3aXRoIG91ciBvd24gZnVuY3Rpb24gQi0wXG4gICAgJC5vZmZzZXQuc2V0T2Zmc2V0KCR0aXBbMF0sICQuZXh0ZW5kKHtcbiAgICAgIHVzaW5nOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgJHRpcC5jc3Moe1xuICAgICAgICAgIHRvcDogTWF0aC5yb3VuZChwcm9wcy50b3ApLFxuICAgICAgICAgIGxlZnQ6IE1hdGgucm91bmQocHJvcHMubGVmdClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LCBvZmZzZXQpLCAwKVxuXG4gICAgJHRpcC5hZGRDbGFzcygnaW4nKVxuXG4gICAgLy8gY2hlY2sgdG8gc2VlIGlmIHBsYWNpbmcgdGlwIGluIG5ldyBvZmZzZXQgY2F1c2VkIHRoZSB0aXAgdG8gcmVzaXplIGl0c2VsZlxuICAgIHZhciBhY3R1YWxXaWR0aCAgPSAkdGlwWzBdLm9mZnNldFdpZHRoXG4gICAgdmFyIGFjdHVhbEhlaWdodCA9ICR0aXBbMF0ub2Zmc2V0SGVpZ2h0XG5cbiAgICBpZiAocGxhY2VtZW50ID09ICd0b3AnICYmIGFjdHVhbEhlaWdodCAhPSBoZWlnaHQpIHtcbiAgICAgIG9mZnNldC50b3AgPSBvZmZzZXQudG9wICsgaGVpZ2h0IC0gYWN0dWFsSGVpZ2h0XG4gICAgfVxuXG4gICAgdmFyIGRlbHRhID0gdGhpcy5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGEocGxhY2VtZW50LCBvZmZzZXQsIGFjdHVhbFdpZHRoLCBhY3R1YWxIZWlnaHQpXG5cbiAgICBpZiAoZGVsdGEubGVmdCkgb2Zmc2V0LmxlZnQgKz0gZGVsdGEubGVmdFxuICAgIGVsc2Ugb2Zmc2V0LnRvcCArPSBkZWx0YS50b3BcblxuICAgIHZhciBpc1ZlcnRpY2FsICAgICAgICAgID0gL3RvcHxib3R0b20vLnRlc3QocGxhY2VtZW50KVxuICAgIHZhciBhcnJvd0RlbHRhICAgICAgICAgID0gaXNWZXJ0aWNhbCA/IGRlbHRhLmxlZnQgKiAyIC0gd2lkdGggKyBhY3R1YWxXaWR0aCA6IGRlbHRhLnRvcCAqIDIgLSBoZWlnaHQgKyBhY3R1YWxIZWlnaHRcbiAgICB2YXIgYXJyb3dPZmZzZXRQb3NpdGlvbiA9IGlzVmVydGljYWwgPyAnb2Zmc2V0V2lkdGgnIDogJ29mZnNldEhlaWdodCdcblxuICAgICR0aXAub2Zmc2V0KG9mZnNldClcbiAgICB0aGlzLnJlcGxhY2VBcnJvdyhhcnJvd0RlbHRhLCAkdGlwWzBdW2Fycm93T2Zmc2V0UG9zaXRpb25dLCBpc1ZlcnRpY2FsKVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUucmVwbGFjZUFycm93ID0gZnVuY3Rpb24gKGRlbHRhLCBkaW1lbnNpb24sIGlzVmVydGljYWwpIHtcbiAgICB0aGlzLmFycm93KClcbiAgICAgIC5jc3MoaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnLCA1MCAqICgxIC0gZGVsdGEgLyBkaW1lbnNpb24pICsgJyUnKVxuICAgICAgLmNzcyhpc1ZlcnRpY2FsID8gJ3RvcCcgOiAnbGVmdCcsICcnKVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuc2V0Q29udGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJHRpcCAgPSB0aGlzLnRpcCgpXG4gICAgdmFyIHRpdGxlID0gdGhpcy5nZXRUaXRsZSgpXG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmh0bWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2FuaXRpemUpIHtcbiAgICAgICAgdGl0bGUgPSBzYW5pdGl6ZUh0bWwodGl0bGUsIHRoaXMub3B0aW9ucy53aGl0ZUxpc3QsIHRoaXMub3B0aW9ucy5zYW5pdGl6ZUZuKVxuICAgICAgfVxuXG4gICAgICAkdGlwLmZpbmQoJy50b29sdGlwLWlubmVyJykuaHRtbCh0aXRsZSlcbiAgICB9IGVsc2Uge1xuICAgICAgJHRpcC5maW5kKCcudG9vbHRpcC1pbm5lcicpLnRleHQodGl0bGUpXG4gICAgfVxuXG4gICAgJHRpcC5yZW1vdmVDbGFzcygnZmFkZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQnKVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIHZhciAkdGlwID0gJCh0aGlzLiR0aXApXG4gICAgdmFyIGUgICAgPSAkLkV2ZW50KCdoaWRlLmJzLicgKyB0aGlzLnR5cGUpXG5cbiAgICBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgIGlmICh0aGF0LmhvdmVyU3RhdGUgIT0gJ2luJykgJHRpcC5kZXRhY2goKVxuICAgICAgaWYgKHRoYXQuJGVsZW1lbnQpIHsgLy8gVE9ETzogQ2hlY2sgd2hldGhlciBndWFyZGluZyB0aGlzIGNvZGUgd2l0aCB0aGlzIGBpZmAgaXMgcmVhbGx5IG5lY2Vzc2FyeS5cbiAgICAgICAgdGhhdC4kZWxlbWVudFxuICAgICAgICAgIC5yZW1vdmVBdHRyKCdhcmlhLWRlc2NyaWJlZGJ5JylcbiAgICAgICAgICAudHJpZ2dlcignaGlkZGVuLmJzLicgKyB0aGF0LnR5cGUpXG4gICAgICB9XG4gICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpXG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpXG5cbiAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuXG5cbiAgICAkdGlwLnJlbW92ZUNsYXNzKCdpbicpXG5cbiAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiAkdGlwLmhhc0NsYXNzKCdmYWRlJykgP1xuICAgICAgJHRpcFxuICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCBjb21wbGV0ZSlcbiAgICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKFRvb2x0aXAuVFJBTlNJVElPTl9EVVJBVElPTikgOlxuICAgICAgY29tcGxldGUoKVxuXG4gICAgdGhpcy5ob3ZlclN0YXRlID0gbnVsbFxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmZpeFRpdGxlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkZSA9IHRoaXMuJGVsZW1lbnRcbiAgICBpZiAoJGUuYXR0cigndGl0bGUnKSB8fCB0eXBlb2YgJGUuYXR0cignZGF0YS1vcmlnaW5hbC10aXRsZScpICE9ICdzdHJpbmcnKSB7XG4gICAgICAkZS5hdHRyKCdkYXRhLW9yaWdpbmFsLXRpdGxlJywgJGUuYXR0cigndGl0bGUnKSB8fCAnJykuYXR0cigndGl0bGUnLCAnJylcbiAgICB9XG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5oYXNDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRpdGxlKClcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmdldFBvc2l0aW9uID0gZnVuY3Rpb24gKCRlbGVtZW50KSB7XG4gICAgJGVsZW1lbnQgICA9ICRlbGVtZW50IHx8IHRoaXMuJGVsZW1lbnRcblxuICAgIHZhciBlbCAgICAgPSAkZWxlbWVudFswXVxuICAgIHZhciBpc0JvZHkgPSBlbC50YWdOYW1lID09ICdCT0RZJ1xuXG4gICAgdmFyIGVsUmVjdCAgICA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgaWYgKGVsUmVjdC53aWR0aCA9PSBudWxsKSB7XG4gICAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBtaXNzaW5nIGluIElFOCwgc28gY29tcHV0ZSB0aGVtIG1hbnVhbGx5OyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xNDA5M1xuICAgICAgZWxSZWN0ID0gJC5leHRlbmQoe30sIGVsUmVjdCwgeyB3aWR0aDogZWxSZWN0LnJpZ2h0IC0gZWxSZWN0LmxlZnQsIGhlaWdodDogZWxSZWN0LmJvdHRvbSAtIGVsUmVjdC50b3AgfSlcbiAgICB9XG4gICAgdmFyIGlzU3ZnID0gd2luZG93LlNWR0VsZW1lbnQgJiYgZWwgaW5zdGFuY2VvZiB3aW5kb3cuU1ZHRWxlbWVudFxuICAgIC8vIEF2b2lkIHVzaW5nICQub2Zmc2V0KCkgb24gU1ZHcyBzaW5jZSBpdCBnaXZlcyBpbmNvcnJlY3QgcmVzdWx0cyBpbiBqUXVlcnkgMy5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8yMDI4MFxuICAgIHZhciBlbE9mZnNldCAgPSBpc0JvZHkgPyB7IHRvcDogMCwgbGVmdDogMCB9IDogKGlzU3ZnID8gbnVsbCA6ICRlbGVtZW50Lm9mZnNldCgpKVxuICAgIHZhciBzY3JvbGwgICAgPSB7IHNjcm9sbDogaXNCb2R5ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA6ICRlbGVtZW50LnNjcm9sbFRvcCgpIH1cbiAgICB2YXIgb3V0ZXJEaW1zID0gaXNCb2R5ID8geyB3aWR0aDogJCh3aW5kb3cpLndpZHRoKCksIGhlaWdodDogJCh3aW5kb3cpLmhlaWdodCgpIH0gOiBudWxsXG5cbiAgICByZXR1cm4gJC5leHRlbmQoe30sIGVsUmVjdCwgc2Nyb2xsLCBvdXRlckRpbXMsIGVsT2Zmc2V0KVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0Q2FsY3VsYXRlZE9mZnNldCA9IGZ1bmN0aW9uIChwbGFjZW1lbnQsIHBvcywgYWN0dWFsV2lkdGgsIGFjdHVhbEhlaWdodCkge1xuICAgIHJldHVybiBwbGFjZW1lbnQgPT0gJ2JvdHRvbScgPyB7IHRvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQsICAgbGVmdDogcG9zLmxlZnQgKyBwb3Mud2lkdGggLyAyIC0gYWN0dWFsV2lkdGggLyAyIH0gOlxuICAgICAgICAgICBwbGFjZW1lbnQgPT0gJ3RvcCcgICAgPyB7IHRvcDogcG9zLnRvcCAtIGFjdHVhbEhlaWdodCwgbGVmdDogcG9zLmxlZnQgKyBwb3Mud2lkdGggLyAyIC0gYWN0dWFsV2lkdGggLyAyIH0gOlxuICAgICAgICAgICBwbGFjZW1lbnQgPT0gJ2xlZnQnICAgPyB7IHRvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQgLyAyIC0gYWN0dWFsSGVpZ2h0IC8gMiwgbGVmdDogcG9zLmxlZnQgLSBhY3R1YWxXaWR0aCB9IDpcbiAgICAgICAgLyogcGxhY2VtZW50ID09ICdyaWdodCcgKi8geyB0b3A6IHBvcy50b3AgKyBwb3MuaGVpZ2h0IC8gMiAtIGFjdHVhbEhlaWdodCAvIDIsIGxlZnQ6IHBvcy5sZWZ0ICsgcG9zLndpZHRoIH1cblxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhID0gZnVuY3Rpb24gKHBsYWNlbWVudCwgcG9zLCBhY3R1YWxXaWR0aCwgYWN0dWFsSGVpZ2h0KSB7XG4gICAgdmFyIGRlbHRhID0geyB0b3A6IDAsIGxlZnQ6IDAgfVxuICAgIGlmICghdGhpcy4kdmlld3BvcnQpIHJldHVybiBkZWx0YVxuXG4gICAgdmFyIHZpZXdwb3J0UGFkZGluZyA9IHRoaXMub3B0aW9ucy52aWV3cG9ydCAmJiB0aGlzLm9wdGlvbnMudmlld3BvcnQucGFkZGluZyB8fCAwXG4gICAgdmFyIHZpZXdwb3J0RGltZW5zaW9ucyA9IHRoaXMuZ2V0UG9zaXRpb24odGhpcy4kdmlld3BvcnQpXG5cbiAgICBpZiAoL3JpZ2h0fGxlZnQvLnRlc3QocGxhY2VtZW50KSkge1xuICAgICAgdmFyIHRvcEVkZ2VPZmZzZXQgICAgPSBwb3MudG9wIC0gdmlld3BvcnRQYWRkaW5nIC0gdmlld3BvcnREaW1lbnNpb25zLnNjcm9sbFxuICAgICAgdmFyIGJvdHRvbUVkZ2VPZmZzZXQgPSBwb3MudG9wICsgdmlld3BvcnRQYWRkaW5nIC0gdmlld3BvcnREaW1lbnNpb25zLnNjcm9sbCArIGFjdHVhbEhlaWdodFxuICAgICAgaWYgKHRvcEVkZ2VPZmZzZXQgPCB2aWV3cG9ydERpbWVuc2lvbnMudG9wKSB7IC8vIHRvcCBvdmVyZmxvd1xuICAgICAgICBkZWx0YS50b3AgPSB2aWV3cG9ydERpbWVuc2lvbnMudG9wIC0gdG9wRWRnZU9mZnNldFxuICAgICAgfSBlbHNlIGlmIChib3R0b21FZGdlT2Zmc2V0ID4gdmlld3BvcnREaW1lbnNpb25zLnRvcCArIHZpZXdwb3J0RGltZW5zaW9ucy5oZWlnaHQpIHsgLy8gYm90dG9tIG92ZXJmbG93XG4gICAgICAgIGRlbHRhLnRvcCA9IHZpZXdwb3J0RGltZW5zaW9ucy50b3AgKyB2aWV3cG9ydERpbWVuc2lvbnMuaGVpZ2h0IC0gYm90dG9tRWRnZU9mZnNldFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbGVmdEVkZ2VPZmZzZXQgID0gcG9zLmxlZnQgLSB2aWV3cG9ydFBhZGRpbmdcbiAgICAgIHZhciByaWdodEVkZ2VPZmZzZXQgPSBwb3MubGVmdCArIHZpZXdwb3J0UGFkZGluZyArIGFjdHVhbFdpZHRoXG4gICAgICBpZiAobGVmdEVkZ2VPZmZzZXQgPCB2aWV3cG9ydERpbWVuc2lvbnMubGVmdCkgeyAvLyBsZWZ0IG92ZXJmbG93XG4gICAgICAgIGRlbHRhLmxlZnQgPSB2aWV3cG9ydERpbWVuc2lvbnMubGVmdCAtIGxlZnRFZGdlT2Zmc2V0XG4gICAgICB9IGVsc2UgaWYgKHJpZ2h0RWRnZU9mZnNldCA+IHZpZXdwb3J0RGltZW5zaW9ucy5yaWdodCkgeyAvLyByaWdodCBvdmVyZmxvd1xuICAgICAgICBkZWx0YS5sZWZ0ID0gdmlld3BvcnREaW1lbnNpb25zLmxlZnQgKyB2aWV3cG9ydERpbWVuc2lvbnMud2lkdGggLSByaWdodEVkZ2VPZmZzZXRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsdGFcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmdldFRpdGxlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB0aXRsZVxuICAgIHZhciAkZSA9IHRoaXMuJGVsZW1lbnRcbiAgICB2YXIgbyAgPSB0aGlzLm9wdGlvbnNcblxuICAgIHRpdGxlID0gJGUuYXR0cignZGF0YS1vcmlnaW5hbC10aXRsZScpXG4gICAgICB8fCAodHlwZW9mIG8udGl0bGUgPT0gJ2Z1bmN0aW9uJyA/IG8udGl0bGUuY2FsbCgkZVswXSkgOiAgby50aXRsZSlcblxuICAgIHJldHVybiB0aXRsZVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0VUlEID0gZnVuY3Rpb24gKHByZWZpeCkge1xuICAgIGRvIHByZWZpeCArPSB+fihNYXRoLnJhbmRvbSgpICogMTAwMDAwMClcbiAgICB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSlcbiAgICByZXR1cm4gcHJlZml4XG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS50aXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLiR0aXApIHtcbiAgICAgIHRoaXMuJHRpcCA9ICQodGhpcy5vcHRpb25zLnRlbXBsYXRlKVxuICAgICAgaWYgKHRoaXMuJHRpcC5sZW5ndGggIT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlICsgJyBgdGVtcGxhdGVgIG9wdGlvbiBtdXN0IGNvbnNpc3Qgb2YgZXhhY3RseSAxIHRvcC1sZXZlbCBlbGVtZW50IScpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiR0aXBcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmFycm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAodGhpcy4kYXJyb3cgPSB0aGlzLiRhcnJvdyB8fCB0aGlzLnRpcCgpLmZpbmQoJy50b29sdGlwLWFycm93JykpXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUudG9nZ2xlRW5hYmxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmVuYWJsZWQgPSAhdGhpcy5lbmFibGVkXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBzZWxmID0gdGhpc1xuICAgIGlmIChlKSB7XG4gICAgICBzZWxmID0gJChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUpXG4gICAgICBpZiAoIXNlbGYpIHtcbiAgICAgICAgc2VsZiA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGUuY3VycmVudFRhcmdldCwgdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSlcbiAgICAgICAgJChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUsIHNlbGYpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGUpIHtcbiAgICAgIHNlbGYuaW5TdGF0ZS5jbGljayA9ICFzZWxmLmluU3RhdGUuY2xpY2tcbiAgICAgIGlmIChzZWxmLmlzSW5TdGF0ZVRydWUoKSkgc2VsZi5lbnRlcihzZWxmKVxuICAgICAgZWxzZSBzZWxmLmxlYXZlKHNlbGYpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYudGlwKCkuaGFzQ2xhc3MoJ2luJykgPyBzZWxmLmxlYXZlKHNlbGYpIDogc2VsZi5lbnRlcihzZWxmKVxuICAgIH1cbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dClcbiAgICB0aGlzLmhpZGUoZnVuY3Rpb24gKCkge1xuICAgICAgdGhhdC4kZWxlbWVudC5vZmYoJy4nICsgdGhhdC50eXBlKS5yZW1vdmVEYXRhKCdicy4nICsgdGhhdC50eXBlKVxuICAgICAgaWYgKHRoYXQuJHRpcCkge1xuICAgICAgICB0aGF0LiR0aXAuZGV0YWNoKClcbiAgICAgIH1cbiAgICAgIHRoYXQuJHRpcCA9IG51bGxcbiAgICAgIHRoYXQuJGFycm93ID0gbnVsbFxuICAgICAgdGhhdC4kdmlld3BvcnQgPSBudWxsXG4gICAgICB0aGF0LiRlbGVtZW50ID0gbnVsbFxuICAgIH0pXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5zYW5pdGl6ZUh0bWwgPSBmdW5jdGlvbiAodW5zYWZlSHRtbCkge1xuICAgIHJldHVybiBzYW5pdGl6ZUh0bWwodW5zYWZlSHRtbCwgdGhpcy5vcHRpb25zLndoaXRlTGlzdCwgdGhpcy5vcHRpb25zLnNhbml0aXplRm4pXG4gIH1cblxuICAvLyBUT09MVElQIFBMVUdJTiBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHRoaXMgICA9ICQodGhpcylcbiAgICAgIHZhciBkYXRhICAgID0gJHRoaXMuZGF0YSgnYnMudG9vbHRpcCcpXG4gICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uXG5cbiAgICAgIGlmICghZGF0YSAmJiAvZGVzdHJveXxoaWRlLy50ZXN0KG9wdGlvbikpIHJldHVyblxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy50b29sdGlwJywgKGRhdGEgPSBuZXcgVG9vbHRpcCh0aGlzLCBvcHRpb25zKSkpXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKClcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4udG9vbHRpcFxuXG4gICQuZm4udG9vbHRpcCAgICAgICAgICAgICA9IFBsdWdpblxuICAkLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IgPSBUb29sdGlwXG5cblxuICAvLyBUT09MVElQIE5PIENPTkZMSUNUXG4gIC8vID09PT09PT09PT09PT09PT09PT1cblxuICAkLmZuLnRvb2x0aXAubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuLnRvb2x0aXAgPSBvbGRcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbn0oalF1ZXJ5KTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBCb290c3RyYXA6IHBvcG92ZXIuanMgdjMuNC4xXG4gKiBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy8zLjQvamF2YXNjcmlwdC8jcG9wb3ZlcnNcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cblxuK2Z1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBQT1BPVkVSIFBVQkxJQyBDTEFTUyBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgUG9wb3ZlciA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5pbml0KCdwb3BvdmVyJywgZWxlbWVudCwgb3B0aW9ucylcbiAgfVxuXG4gIGlmICghJC5mbi50b29sdGlwKSB0aHJvdyBuZXcgRXJyb3IoJ1BvcG92ZXIgcmVxdWlyZXMgdG9vbHRpcC5qcycpXG5cbiAgUG9wb3Zlci5WRVJTSU9OICA9ICczLjQuMSdcblxuICBQb3BvdmVyLkRFRkFVTFRTID0gJC5leHRlbmQoe30sICQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5ERUZBVUxUUywge1xuICAgIHBsYWNlbWVudDogJ3JpZ2h0JyxcbiAgICB0cmlnZ2VyOiAnY2xpY2snLFxuICAgIGNvbnRlbnQ6ICcnLFxuICAgIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PjxoMyBjbGFzcz1cInBvcG92ZXItdGl0bGVcIj48L2gzPjxkaXYgY2xhc3M9XCJwb3BvdmVyLWNvbnRlbnRcIj48L2Rpdj48L2Rpdj4nXG4gIH0pXG5cblxuICAvLyBOT1RFOiBQT1BPVkVSIEVYVEVORFMgdG9vbHRpcC5qc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIFBvcG92ZXIucHJvdG90eXBlID0gJC5leHRlbmQoe30sICQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5wcm90b3R5cGUpXG5cbiAgUG9wb3Zlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb3BvdmVyXG5cbiAgUG9wb3Zlci5wcm90b3R5cGUuZ2V0RGVmYXVsdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFBvcG92ZXIuREVGQVVMVFNcbiAgfVxuXG4gIFBvcG92ZXIucHJvdG90eXBlLnNldENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICR0aXAgICAgPSB0aGlzLnRpcCgpXG4gICAgdmFyIHRpdGxlICAgPSB0aGlzLmdldFRpdGxlKClcbiAgICB2YXIgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpXG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmh0bWwpIHtcbiAgICAgIHZhciB0eXBlQ29udGVudCA9IHR5cGVvZiBjb250ZW50XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2FuaXRpemUpIHtcbiAgICAgICAgdGl0bGUgPSB0aGlzLnNhbml0aXplSHRtbCh0aXRsZSlcblxuICAgICAgICBpZiAodHlwZUNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29udGVudCA9IHRoaXMuc2FuaXRpemVIdG1sKGNvbnRlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJHRpcC5maW5kKCcucG9wb3Zlci10aXRsZScpLmh0bWwodGl0bGUpXG4gICAgICAkdGlwLmZpbmQoJy5wb3BvdmVyLWNvbnRlbnQnKS5jaGlsZHJlbigpLmRldGFjaCgpLmVuZCgpW1xuICAgICAgICB0eXBlQ29udGVudCA9PT0gJ3N0cmluZycgPyAnaHRtbCcgOiAnYXBwZW5kJ1xuICAgICAgXShjb250ZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICAkdGlwLmZpbmQoJy5wb3BvdmVyLXRpdGxlJykudGV4dCh0aXRsZSlcbiAgICAgICR0aXAuZmluZCgnLnBvcG92ZXItY29udGVudCcpLmNoaWxkcmVuKCkuZGV0YWNoKCkuZW5kKCkudGV4dChjb250ZW50KVxuICAgIH1cblxuICAgICR0aXAucmVtb3ZlQ2xhc3MoJ2ZhZGUgdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0IGluJylcblxuICAgIC8vIElFOCBkb2Vzbid0IGFjY2VwdCBoaWRpbmcgdmlhIHRoZSBgOmVtcHR5YCBwc2V1ZG8gc2VsZWN0b3IsIHdlIGhhdmUgdG8gZG9cbiAgICAvLyB0aGlzIG1hbnVhbGx5IGJ5IGNoZWNraW5nIHRoZSBjb250ZW50cy5cbiAgICBpZiAoISR0aXAuZmluZCgnLnBvcG92ZXItdGl0bGUnKS5odG1sKCkpICR0aXAuZmluZCgnLnBvcG92ZXItdGl0bGUnKS5oaWRlKClcbiAgfVxuXG4gIFBvcG92ZXIucHJvdG90eXBlLmhhc0NvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGUoKSB8fCB0aGlzLmdldENvbnRlbnQoKVxuICB9XG5cbiAgUG9wb3Zlci5wcm90b3R5cGUuZ2V0Q29udGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJGUgPSB0aGlzLiRlbGVtZW50XG4gICAgdmFyIG8gID0gdGhpcy5vcHRpb25zXG5cbiAgICByZXR1cm4gJGUuYXR0cignZGF0YS1jb250ZW50JylcbiAgICAgIHx8ICh0eXBlb2Ygby5jb250ZW50ID09ICdmdW5jdGlvbicgP1xuICAgICAgICBvLmNvbnRlbnQuY2FsbCgkZVswXSkgOlxuICAgICAgICBvLmNvbnRlbnQpXG4gIH1cblxuICBQb3BvdmVyLnByb3RvdHlwZS5hcnJvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKHRoaXMuJGFycm93ID0gdGhpcy4kYXJyb3cgfHwgdGhpcy50aXAoKS5maW5kKCcuYXJyb3cnKSlcbiAgfVxuXG5cbiAgLy8gUE9QT1ZFUiBQTFVHSU4gREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXG4gICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLnBvcG92ZXInKVxuICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvblxuXG4gICAgICBpZiAoIWRhdGEgJiYgL2Rlc3Ryb3l8aGlkZS8udGVzdChvcHRpb24pKSByZXR1cm5cbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMucG9wb3ZlcicsIChkYXRhID0gbmV3IFBvcG92ZXIodGhpcywgb3B0aW9ucykpKVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpXG4gICAgfSlcbiAgfVxuXG4gIHZhciBvbGQgPSAkLmZuLnBvcG92ZXJcblxuICAkLmZuLnBvcG92ZXIgICAgICAgICAgICAgPSBQbHVnaW5cbiAgJC5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yID0gUG9wb3ZlclxuXG5cbiAgLy8gUE9QT1ZFUiBOTyBDT05GTElDVFxuICAvLyA9PT09PT09PT09PT09PT09PT09XG5cbiAgJC5mbi5wb3BvdmVyLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbi5wb3BvdmVyID0gb2xkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG59KGpRdWVyeSk7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQm9vdHN0cmFwOiBzY3JvbGxzcHkuanMgdjMuNC4xXG4gKiBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy8zLjQvamF2YXNjcmlwdC8jc2Nyb2xsc3B5XG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvcHlyaWdodCAyMDExLTIwMTkgVHdpdHRlciwgSW5jLlxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5cbitmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gU0NST0xMU1BZIENMQVNTIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBmdW5jdGlvbiBTY3JvbGxTcHkoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGJvZHkgICAgICAgICAgPSAkKGRvY3VtZW50LmJvZHkpXG4gICAgdGhpcy4kc2Nyb2xsRWxlbWVudCA9ICQoZWxlbWVudCkuaXMoZG9jdW1lbnQuYm9keSkgPyAkKHdpbmRvdykgOiAkKGVsZW1lbnQpXG4gICAgdGhpcy5vcHRpb25zICAgICAgICA9ICQuZXh0ZW5kKHt9LCBTY3JvbGxTcHkuREVGQVVMVFMsIG9wdGlvbnMpXG4gICAgdGhpcy5zZWxlY3RvciAgICAgICA9ICh0aGlzLm9wdGlvbnMudGFyZ2V0IHx8ICcnKSArICcgLm5hdiBsaSA+IGEnXG4gICAgdGhpcy5vZmZzZXRzICAgICAgICA9IFtdXG4gICAgdGhpcy50YXJnZXRzICAgICAgICA9IFtdXG4gICAgdGhpcy5hY3RpdmVUYXJnZXQgICA9IG51bGxcbiAgICB0aGlzLnNjcm9sbEhlaWdodCAgID0gMFxuXG4gICAgdGhpcy4kc2Nyb2xsRWxlbWVudC5vbignc2Nyb2xsLmJzLnNjcm9sbHNweScsICQucHJveHkodGhpcy5wcm9jZXNzLCB0aGlzKSlcbiAgICB0aGlzLnJlZnJlc2goKVxuICAgIHRoaXMucHJvY2VzcygpXG4gIH1cblxuICBTY3JvbGxTcHkuVkVSU0lPTiAgPSAnMy40LjEnXG5cbiAgU2Nyb2xsU3B5LkRFRkFVTFRTID0ge1xuICAgIG9mZnNldDogMTBcbiAgfVxuXG4gIFNjcm9sbFNweS5wcm90b3R5cGUuZ2V0U2Nyb2xsSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLiRzY3JvbGxFbGVtZW50WzBdLnNjcm9sbEhlaWdodCB8fCBNYXRoLm1heCh0aGlzLiRib2R5WzBdLnNjcm9sbEhlaWdodCwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodClcbiAgfVxuXG4gIFNjcm9sbFNweS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGhhdCAgICAgICAgICA9IHRoaXNcbiAgICB2YXIgb2Zmc2V0TWV0aG9kICA9ICdvZmZzZXQnXG4gICAgdmFyIG9mZnNldEJhc2UgICAgPSAwXG5cbiAgICB0aGlzLm9mZnNldHMgICAgICA9IFtdXG4gICAgdGhpcy50YXJnZXRzICAgICAgPSBbXVxuICAgIHRoaXMuc2Nyb2xsSGVpZ2h0ID0gdGhpcy5nZXRTY3JvbGxIZWlnaHQoKVxuXG4gICAgaWYgKCEkLmlzV2luZG93KHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0pKSB7XG4gICAgICBvZmZzZXRNZXRob2QgPSAncG9zaXRpb24nXG4gICAgICBvZmZzZXRCYXNlICAgPSB0aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpXG4gICAgfVxuXG4gICAgdGhpcy4kYm9keVxuICAgICAgLmZpbmQodGhpcy5zZWxlY3RvcilcbiAgICAgIC5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgJGVsICAgPSAkKHRoaXMpXG4gICAgICAgIHZhciBocmVmICA9ICRlbC5kYXRhKCd0YXJnZXQnKSB8fCAkZWwuYXR0cignaHJlZicpXG4gICAgICAgIHZhciAkaHJlZiA9IC9eIy4vLnRlc3QoaHJlZikgJiYgJChocmVmKVxuXG4gICAgICAgIHJldHVybiAoJGhyZWZcbiAgICAgICAgICAmJiAkaHJlZi5sZW5ndGhcbiAgICAgICAgICAmJiAkaHJlZi5pcygnOnZpc2libGUnKVxuICAgICAgICAgICYmIFtbJGhyZWZbb2Zmc2V0TWV0aG9kXSgpLnRvcCArIG9mZnNldEJhc2UsIGhyZWZdXSkgfHwgbnVsbFxuICAgICAgfSlcbiAgICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhWzBdIC0gYlswXSB9KVxuICAgICAgLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGF0Lm9mZnNldHMucHVzaCh0aGlzWzBdKVxuICAgICAgICB0aGF0LnRhcmdldHMucHVzaCh0aGlzWzFdKVxuICAgICAgfSlcbiAgfVxuXG4gIFNjcm9sbFNweS5wcm90b3R5cGUucHJvY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2Nyb2xsVG9wICAgID0gdGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSArIHRoaXMub3B0aW9ucy5vZmZzZXRcbiAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gdGhpcy5nZXRTY3JvbGxIZWlnaHQoKVxuICAgIHZhciBtYXhTY3JvbGwgICAgPSB0aGlzLm9wdGlvbnMub2Zmc2V0ICsgc2Nyb2xsSGVpZ2h0IC0gdGhpcy4kc2Nyb2xsRWxlbWVudC5oZWlnaHQoKVxuICAgIHZhciBvZmZzZXRzICAgICAgPSB0aGlzLm9mZnNldHNcbiAgICB2YXIgdGFyZ2V0cyAgICAgID0gdGhpcy50YXJnZXRzXG4gICAgdmFyIGFjdGl2ZVRhcmdldCA9IHRoaXMuYWN0aXZlVGFyZ2V0XG4gICAgdmFyIGlcblxuICAgIGlmICh0aGlzLnNjcm9sbEhlaWdodCAhPSBzY3JvbGxIZWlnaHQpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpXG4gICAgfVxuXG4gICAgaWYgKHNjcm9sbFRvcCA+PSBtYXhTY3JvbGwpIHtcbiAgICAgIHJldHVybiBhY3RpdmVUYXJnZXQgIT0gKGkgPSB0YXJnZXRzW3RhcmdldHMubGVuZ3RoIC0gMV0pICYmIHRoaXMuYWN0aXZhdGUoaSlcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlVGFyZ2V0ICYmIHNjcm9sbFRvcCA8IG9mZnNldHNbMF0pIHtcbiAgICAgIHRoaXMuYWN0aXZlVGFyZ2V0ID0gbnVsbFxuICAgICAgcmV0dXJuIHRoaXMuY2xlYXIoKVxuICAgIH1cblxuICAgIGZvciAoaSA9IG9mZnNldHMubGVuZ3RoOyBpLS07KSB7XG4gICAgICBhY3RpdmVUYXJnZXQgIT0gdGFyZ2V0c1tpXVxuICAgICAgICAmJiBzY3JvbGxUb3AgPj0gb2Zmc2V0c1tpXVxuICAgICAgICAmJiAob2Zmc2V0c1tpICsgMV0gPT09IHVuZGVmaW5lZCB8fCBzY3JvbGxUb3AgPCBvZmZzZXRzW2kgKyAxXSlcbiAgICAgICAgJiYgdGhpcy5hY3RpdmF0ZSh0YXJnZXRzW2ldKVxuICAgIH1cbiAgfVxuXG4gIFNjcm9sbFNweS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgdGhpcy5hY3RpdmVUYXJnZXQgPSB0YXJnZXRcblxuICAgIHRoaXMuY2xlYXIoKVxuXG4gICAgdmFyIHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciArXG4gICAgICAnW2RhdGEtdGFyZ2V0PVwiJyArIHRhcmdldCArICdcIl0sJyArXG4gICAgICB0aGlzLnNlbGVjdG9yICsgJ1tocmVmPVwiJyArIHRhcmdldCArICdcIl0nXG5cbiAgICB2YXIgYWN0aXZlID0gJChzZWxlY3RvcilcbiAgICAgIC5wYXJlbnRzKCdsaScpXG4gICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXG5cbiAgICBpZiAoYWN0aXZlLnBhcmVudCgnLmRyb3Bkb3duLW1lbnUnKS5sZW5ndGgpIHtcbiAgICAgIGFjdGl2ZSA9IGFjdGl2ZVxuICAgICAgICAuY2xvc2VzdCgnbGkuZHJvcGRvd24nKVxuICAgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXG4gICAgfVxuXG4gICAgYWN0aXZlLnRyaWdnZXIoJ2FjdGl2YXRlLmJzLnNjcm9sbHNweScpXG4gIH1cblxuICBTY3JvbGxTcHkucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICQodGhpcy5zZWxlY3RvcilcbiAgICAgIC5wYXJlbnRzVW50aWwodGhpcy5vcHRpb25zLnRhcmdldCwgJy5hY3RpdmUnKVxuICAgICAgLnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxuICB9XG5cblxuICAvLyBTQ1JPTExTUFkgUExVR0lOIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXG4gICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLnNjcm9sbHNweScpXG4gICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uXG5cbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuc2Nyb2xsc3B5JywgKGRhdGEgPSBuZXcgU2Nyb2xsU3B5KHRoaXMsIG9wdGlvbnMpKSlcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oKVxuICAgIH0pXG4gIH1cblxuICB2YXIgb2xkID0gJC5mbi5zY3JvbGxzcHlcblxuICAkLmZuLnNjcm9sbHNweSAgICAgICAgICAgICA9IFBsdWdpblxuICAkLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3RvciA9IFNjcm9sbFNweVxuXG5cbiAgLy8gU0NST0xMU1BZIE5PIENPTkZMSUNUXG4gIC8vID09PT09PT09PT09PT09PT09PT09PVxuXG4gICQuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbi5zY3JvbGxzcHkgPSBvbGRcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cblxuICAvLyBTQ1JPTExTUFkgREFUQS1BUElcbiAgLy8gPT09PT09PT09PT09PT09PT09XG5cbiAgJCh3aW5kb3cpLm9uKCdsb2FkLmJzLnNjcm9sbHNweS5kYXRhLWFwaScsIGZ1bmN0aW9uICgpIHtcbiAgICAkKCdbZGF0YS1zcHk9XCJzY3JvbGxcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkc3B5ID0gJCh0aGlzKVxuICAgICAgUGx1Z2luLmNhbGwoJHNweSwgJHNweS5kYXRhKCkpXG4gICAgfSlcbiAgfSlcblxufShqUXVlcnkpO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEJvb3RzdHJhcDogdGFiLmpzIHYzLjQuMVxuICogaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvMy40L2phdmFzY3JpcHQvI3RhYnNcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cblxuK2Z1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBUQUIgQ0xBU1MgREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PVxuXG4gIHZhciBUYWIgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIC8vIGpzY3M6ZGlzYWJsZSByZXF1aXJlRG9sbGFyQmVmb3JlalF1ZXJ5QXNzaWdubWVudFxuICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudClcbiAgICAvLyBqc2NzOmVuYWJsZSByZXF1aXJlRG9sbGFyQmVmb3JlalF1ZXJ5QXNzaWdubWVudFxuICB9XG5cbiAgVGFiLlZFUlNJT04gPSAnMy40LjEnXG5cbiAgVGFiLlRSQU5TSVRJT05fRFVSQVRJT04gPSAxNTBcblxuICBUYWIucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICR0aGlzICAgID0gdGhpcy5lbGVtZW50XG4gICAgdmFyICR1bCAgICAgID0gJHRoaXMuY2xvc2VzdCgndWw6bm90KC5kcm9wZG93bi1tZW51KScpXG4gICAgdmFyIHNlbGVjdG9yID0gJHRoaXMuZGF0YSgndGFyZ2V0JylcblxuICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgIHNlbGVjdG9yID0gJHRoaXMuYXR0cignaHJlZicpXG4gICAgICBzZWxlY3RvciA9IHNlbGVjdG9yICYmIHNlbGVjdG9yLnJlcGxhY2UoLy4qKD89I1teXFxzXSokKS8sICcnKSAvLyBzdHJpcCBmb3IgaWU3XG4gICAgfVxuXG4gICAgaWYgKCR0aGlzLnBhcmVudCgnbGknKS5oYXNDbGFzcygnYWN0aXZlJykpIHJldHVyblxuXG4gICAgdmFyICRwcmV2aW91cyA9ICR1bC5maW5kKCcuYWN0aXZlOmxhc3QgYScpXG4gICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQoJ2hpZGUuYnMudGFiJywge1xuICAgICAgcmVsYXRlZFRhcmdldDogJHRoaXNbMF1cbiAgICB9KVxuICAgIHZhciBzaG93RXZlbnQgPSAkLkV2ZW50KCdzaG93LmJzLnRhYicsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6ICRwcmV2aW91c1swXVxuICAgIH0pXG5cbiAgICAkcHJldmlvdXMudHJpZ2dlcihoaWRlRXZlbnQpXG4gICAgJHRoaXMudHJpZ2dlcihzaG93RXZlbnQpXG5cbiAgICBpZiAoc2hvd0V2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpIHx8IGhpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuXG5cbiAgICB2YXIgJHRhcmdldCA9ICQoZG9jdW1lbnQpLmZpbmQoc2VsZWN0b3IpXG5cbiAgICB0aGlzLmFjdGl2YXRlKCR0aGlzLmNsb3Nlc3QoJ2xpJyksICR1bClcbiAgICB0aGlzLmFjdGl2YXRlKCR0YXJnZXQsICR0YXJnZXQucGFyZW50KCksIGZ1bmN0aW9uICgpIHtcbiAgICAgICRwcmV2aW91cy50cmlnZ2VyKHtcbiAgICAgICAgdHlwZTogJ2hpZGRlbi5icy50YWInLFxuICAgICAgICByZWxhdGVkVGFyZ2V0OiAkdGhpc1swXVxuICAgICAgfSlcbiAgICAgICR0aGlzLnRyaWdnZXIoe1xuICAgICAgICB0eXBlOiAnc2hvd24uYnMudGFiJyxcbiAgICAgICAgcmVsYXRlZFRhcmdldDogJHByZXZpb3VzWzBdXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBUYWIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgICB2YXIgJGFjdGl2ZSAgICA9IGNvbnRhaW5lci5maW5kKCc+IC5hY3RpdmUnKVxuICAgIHZhciB0cmFuc2l0aW9uID0gY2FsbGJhY2tcbiAgICAgICYmICQuc3VwcG9ydC50cmFuc2l0aW9uXG4gICAgICAmJiAoJGFjdGl2ZS5sZW5ndGggJiYgJGFjdGl2ZS5oYXNDbGFzcygnZmFkZScpIHx8ICEhY29udGFpbmVyLmZpbmQoJz4gLmZhZGUnKS5sZW5ndGgpXG5cbiAgICBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgJGFjdGl2ZVxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICAgIC5maW5kKCc+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZScpXG4gICAgICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAgICAgLmVuZCgpXG4gICAgICAgIC5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKVxuICAgICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIGZhbHNlKVxuXG4gICAgICBlbGVtZW50XG4gICAgICAgIC5hZGRDbGFzcygnYWN0aXZlJylcbiAgICAgICAgLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXScpXG4gICAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSlcblxuICAgICAgaWYgKHRyYW5zaXRpb24pIHtcbiAgICAgICAgZWxlbWVudFswXS5vZmZzZXRXaWR0aCAvLyByZWZsb3cgZm9yIHRyYW5zaXRpb25cbiAgICAgICAgZWxlbWVudC5hZGRDbGFzcygnaW4nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcygnZmFkZScpXG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50LnBhcmVudCgnLmRyb3Bkb3duLW1lbnUnKS5sZW5ndGgpIHtcbiAgICAgICAgZWxlbWVudFxuICAgICAgICAgIC5jbG9zZXN0KCdsaS5kcm9wZG93bicpXG4gICAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKVxuICAgICAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSlcbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKVxuICAgIH1cblxuICAgICRhY3RpdmUubGVuZ3RoICYmIHRyYW5zaXRpb24gP1xuICAgICAgJGFjdGl2ZVxuICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCBuZXh0KVxuICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoVGFiLlRSQU5TSVRJT05fRFVSQVRJT04pIDpcbiAgICAgIG5leHQoKVxuXG4gICAgJGFjdGl2ZS5yZW1vdmVDbGFzcygnaW4nKVxuICB9XG5cblxuICAvLyBUQUIgUExVR0lOIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgID0gJHRoaXMuZGF0YSgnYnMudGFiJylcblxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy50YWInLCAoZGF0YSA9IG5ldyBUYWIodGhpcykpKVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpXG4gICAgfSlcbiAgfVxuXG4gIHZhciBvbGQgPSAkLmZuLnRhYlxuXG4gICQuZm4udGFiICAgICAgICAgICAgID0gUGx1Z2luXG4gICQuZm4udGFiLkNvbnN0cnVjdG9yID0gVGFiXG5cblxuICAvLyBUQUIgTk8gQ09ORkxJQ1RcbiAgLy8gPT09PT09PT09PT09PT09XG5cbiAgJC5mbi50YWIubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuLnRhYiA9IG9sZFxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuXG4gIC8vIFRBQiBEQVRBLUFQSVxuICAvLyA9PT09PT09PT09PT1cblxuICB2YXIgY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBQbHVnaW4uY2FsbCgkKHRoaXMpLCAnc2hvdycpXG4gIH1cblxuICAkKGRvY3VtZW50KVxuICAgIC5vbignY2xpY2suYnMudGFiLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXScsIGNsaWNrSGFuZGxlcilcbiAgICAub24oJ2NsaWNrLmJzLnRhYi5kYXRhLWFwaScsICdbZGF0YS10b2dnbGU9XCJwaWxsXCJdJywgY2xpY2tIYW5kbGVyKVxuXG59KGpRdWVyeSk7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQm9vdHN0cmFwOiBhZmZpeC5qcyB2My40LjFcbiAqIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzMuNC9qYXZhc2NyaXB0LyNhZmZpeFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIEFGRklYIENMQVNTIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHZhciBBZmZpeCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIEFmZml4LkRFRkFVTFRTLCBvcHRpb25zKVxuXG4gICAgdmFyIHRhcmdldCA9IHRoaXMub3B0aW9ucy50YXJnZXQgPT09IEFmZml4LkRFRkFVTFRTLnRhcmdldCA/ICQodGhpcy5vcHRpb25zLnRhcmdldCkgOiAkKGRvY3VtZW50KS5maW5kKHRoaXMub3B0aW9ucy50YXJnZXQpXG5cbiAgICB0aGlzLiR0YXJnZXQgPSB0YXJnZXRcbiAgICAgIC5vbignc2Nyb2xsLmJzLmFmZml4LmRhdGEtYXBpJywgJC5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sIHRoaXMpKVxuICAgICAgLm9uKCdjbGljay5icy5hZmZpeC5kYXRhLWFwaScsICAkLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3AsIHRoaXMpKVxuXG4gICAgdGhpcy4kZWxlbWVudCAgICAgPSAkKGVsZW1lbnQpXG4gICAgdGhpcy5hZmZpeGVkICAgICAgPSBudWxsXG4gICAgdGhpcy51bnBpbiAgICAgICAgPSBudWxsXG4gICAgdGhpcy5waW5uZWRPZmZzZXQgPSBudWxsXG5cbiAgICB0aGlzLmNoZWNrUG9zaXRpb24oKVxuICB9XG5cbiAgQWZmaXguVkVSU0lPTiAgPSAnMy40LjEnXG5cbiAgQWZmaXguUkVTRVQgICAgPSAnYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbSdcblxuICBBZmZpeC5ERUZBVUxUUyA9IHtcbiAgICBvZmZzZXQ6IDAsXG4gICAgdGFyZ2V0OiB3aW5kb3dcbiAgfVxuXG4gIEFmZml4LnByb3RvdHlwZS5nZXRTdGF0ZSA9IGZ1bmN0aW9uIChzY3JvbGxIZWlnaHQsIGhlaWdodCwgb2Zmc2V0VG9wLCBvZmZzZXRCb3R0b20pIHtcbiAgICB2YXIgc2Nyb2xsVG9wICAgID0gdGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpXG4gICAgdmFyIHBvc2l0aW9uICAgICA9IHRoaXMuJGVsZW1lbnQub2Zmc2V0KClcbiAgICB2YXIgdGFyZ2V0SGVpZ2h0ID0gdGhpcy4kdGFyZ2V0LmhlaWdodCgpXG5cbiAgICBpZiAob2Zmc2V0VG9wICE9IG51bGwgJiYgdGhpcy5hZmZpeGVkID09ICd0b3AnKSByZXR1cm4gc2Nyb2xsVG9wIDwgb2Zmc2V0VG9wID8gJ3RvcCcgOiBmYWxzZVxuXG4gICAgaWYgKHRoaXMuYWZmaXhlZCA9PSAnYm90dG9tJykge1xuICAgICAgaWYgKG9mZnNldFRvcCAhPSBudWxsKSByZXR1cm4gKHNjcm9sbFRvcCArIHRoaXMudW5waW4gPD0gcG9zaXRpb24udG9wKSA/IGZhbHNlIDogJ2JvdHRvbSdcbiAgICAgIHJldHVybiAoc2Nyb2xsVG9wICsgdGFyZ2V0SGVpZ2h0IDw9IHNjcm9sbEhlaWdodCAtIG9mZnNldEJvdHRvbSkgPyBmYWxzZSA6ICdib3R0b20nXG4gICAgfVxuXG4gICAgdmFyIGluaXRpYWxpemluZyAgID0gdGhpcy5hZmZpeGVkID09IG51bGxcbiAgICB2YXIgY29sbGlkZXJUb3AgICAgPSBpbml0aWFsaXppbmcgPyBzY3JvbGxUb3AgOiBwb3NpdGlvbi50b3BcbiAgICB2YXIgY29sbGlkZXJIZWlnaHQgPSBpbml0aWFsaXppbmcgPyB0YXJnZXRIZWlnaHQgOiBoZWlnaHRcblxuICAgIGlmIChvZmZzZXRUb3AgIT0gbnVsbCAmJiBzY3JvbGxUb3AgPD0gb2Zmc2V0VG9wKSByZXR1cm4gJ3RvcCdcbiAgICBpZiAob2Zmc2V0Qm90dG9tICE9IG51bGwgJiYgKGNvbGxpZGVyVG9wICsgY29sbGlkZXJIZWlnaHQgPj0gc2Nyb2xsSGVpZ2h0IC0gb2Zmc2V0Qm90dG9tKSkgcmV0dXJuICdib3R0b20nXG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIEFmZml4LnByb3RvdHlwZS5nZXRQaW5uZWRPZmZzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMucGlubmVkT2Zmc2V0KSByZXR1cm4gdGhpcy5waW5uZWRPZmZzZXRcbiAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKEFmZml4LlJFU0VUKS5hZGRDbGFzcygnYWZmaXgnKVxuICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKClcbiAgICB2YXIgcG9zaXRpb24gID0gdGhpcy4kZWxlbWVudC5vZmZzZXQoKVxuICAgIHJldHVybiAodGhpcy5waW5uZWRPZmZzZXQgPSBwb3NpdGlvbi50b3AgLSBzY3JvbGxUb3ApXG4gIH1cblxuICBBZmZpeC5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2V0VGltZW91dCgkLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbiwgdGhpcyksIDEpXG4gIH1cblxuICBBZmZpeC5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuJGVsZW1lbnQuaXMoJzp2aXNpYmxlJykpIHJldHVyblxuXG4gICAgdmFyIGhlaWdodCAgICAgICA9IHRoaXMuJGVsZW1lbnQuaGVpZ2h0KClcbiAgICB2YXIgb2Zmc2V0ICAgICAgID0gdGhpcy5vcHRpb25zLm9mZnNldFxuICAgIHZhciBvZmZzZXRUb3AgICAgPSBvZmZzZXQudG9wXG4gICAgdmFyIG9mZnNldEJvdHRvbSA9IG9mZnNldC5ib3R0b21cbiAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gTWF0aC5tYXgoJChkb2N1bWVudCkuaGVpZ2h0KCksICQoZG9jdW1lbnQuYm9keSkuaGVpZ2h0KCkpXG5cbiAgICBpZiAodHlwZW9mIG9mZnNldCAhPSAnb2JqZWN0JykgICAgICAgICBvZmZzZXRCb3R0b20gPSBvZmZzZXRUb3AgPSBvZmZzZXRcbiAgICBpZiAodHlwZW9mIG9mZnNldFRvcCA9PSAnZnVuY3Rpb24nKSAgICBvZmZzZXRUb3AgICAgPSBvZmZzZXQudG9wKHRoaXMuJGVsZW1lbnQpXG4gICAgaWYgKHR5cGVvZiBvZmZzZXRCb3R0b20gPT0gJ2Z1bmN0aW9uJykgb2Zmc2V0Qm90dG9tID0gb2Zmc2V0LmJvdHRvbSh0aGlzLiRlbGVtZW50KVxuXG4gICAgdmFyIGFmZml4ID0gdGhpcy5nZXRTdGF0ZShzY3JvbGxIZWlnaHQsIGhlaWdodCwgb2Zmc2V0VG9wLCBvZmZzZXRCb3R0b20pXG5cbiAgICBpZiAodGhpcy5hZmZpeGVkICE9IGFmZml4KSB7XG4gICAgICBpZiAodGhpcy51bnBpbiAhPSBudWxsKSB0aGlzLiRlbGVtZW50LmNzcygndG9wJywgJycpXG5cbiAgICAgIHZhciBhZmZpeFR5cGUgPSAnYWZmaXgnICsgKGFmZml4ID8gJy0nICsgYWZmaXggOiAnJylcbiAgICAgIHZhciBlICAgICAgICAgPSAkLkV2ZW50KGFmZml4VHlwZSArICcuYnMuYWZmaXgnKVxuXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSlcblxuICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgICB0aGlzLmFmZml4ZWQgPSBhZmZpeFxuICAgICAgdGhpcy51bnBpbiA9IGFmZml4ID09ICdib3R0b20nID8gdGhpcy5nZXRQaW5uZWRPZmZzZXQoKSA6IG51bGxcblxuICAgICAgdGhpcy4kZWxlbWVudFxuICAgICAgICAucmVtb3ZlQ2xhc3MoQWZmaXguUkVTRVQpXG4gICAgICAgIC5hZGRDbGFzcyhhZmZpeFR5cGUpXG4gICAgICAgIC50cmlnZ2VyKGFmZml4VHlwZS5yZXBsYWNlKCdhZmZpeCcsICdhZmZpeGVkJykgKyAnLmJzLmFmZml4JylcbiAgICB9XG5cbiAgICBpZiAoYWZmaXggPT0gJ2JvdHRvbScpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQub2Zmc2V0KHtcbiAgICAgICAgdG9wOiBzY3JvbGxIZWlnaHQgLSBoZWlnaHQgLSBvZmZzZXRCb3R0b21cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cblxuICAvLyBBRkZJWCBQTFVHSU4gREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGZ1bmN0aW9uIFBsdWdpbihvcHRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgICAgPSAkdGhpcy5kYXRhKCdicy5hZmZpeCcpXG4gICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uXG5cbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuYWZmaXgnLCAoZGF0YSA9IG5ldyBBZmZpeCh0aGlzLCBvcHRpb25zKSkpXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKClcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4uYWZmaXhcblxuICAkLmZuLmFmZml4ICAgICAgICAgICAgID0gUGx1Z2luXG4gICQuZm4uYWZmaXguQ29uc3RydWN0b3IgPSBBZmZpeFxuXG5cbiAgLy8gQUZGSVggTk8gQ09ORkxJQ1RcbiAgLy8gPT09PT09PT09PT09PT09PT1cblxuICAkLmZuLmFmZml4Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbi5hZmZpeCA9IG9sZFxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuXG4gIC8vIEFGRklYIERBVEEtQVBJXG4gIC8vID09PT09PT09PT09PT09XG5cbiAgJCh3aW5kb3cpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICQoJ1tkYXRhLXNweT1cImFmZml4XCJdJykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHNweSA9ICQodGhpcylcbiAgICAgIHZhciBkYXRhID0gJHNweS5kYXRhKClcblxuICAgICAgZGF0YS5vZmZzZXQgPSBkYXRhLm9mZnNldCB8fCB7fVxuXG4gICAgICBpZiAoZGF0YS5vZmZzZXRCb3R0b20gIT0gbnVsbCkgZGF0YS5vZmZzZXQuYm90dG9tID0gZGF0YS5vZmZzZXRCb3R0b21cbiAgICAgIGlmIChkYXRhLm9mZnNldFRvcCAgICAhPSBudWxsKSBkYXRhLm9mZnNldC50b3AgICAgPSBkYXRhLm9mZnNldFRvcFxuXG4gICAgICBQbHVnaW4uY2FsbCgkc3B5LCBkYXRhKVxuICAgIH0pXG4gIH0pXG5cbn0oalF1ZXJ5KTtcbiIsIihmdW5jdGlvbigpe3ZhciByb290PXRoaXM7dmFyIHByZXZpb3VzQmFja2JvbmU9cm9vdC5CYWNrYm9uZTt2YXIgYXJyYXk9W107dmFyIHB1c2g9YXJyYXkucHVzaDt2YXIgc2xpY2U9YXJyYXkuc2xpY2U7dmFyIHNwbGljZT1hcnJheS5zcGxpY2U7dmFyIEJhY2tib25lO2lmKHR5cGVvZiBleHBvcnRzIT09XCJ1bmRlZmluZWRcIil7QmFja2JvbmU9ZXhwb3J0c31lbHNle0JhY2tib25lPXJvb3QuQmFja2JvbmU9e319QmFja2JvbmUuVkVSU0lPTj1cIjEuMC4wXCI7dmFyIF89cm9vdC5fO2lmKCFfJiZ0eXBlb2YgcmVxdWlyZSE9PVwidW5kZWZpbmVkXCIpXz1yZXF1aXJlKFwidW5kZXJzY29yZVwiKTtCYWNrYm9uZS4kPXJlcXVpcmUoXCJqcXVlcnlcIik7QmFja2JvbmUubm9Db25mbGljdD1mdW5jdGlvbigpe3Jvb3QuQmFja2JvbmU9cHJldmlvdXNCYWNrYm9uZTtyZXR1cm4gdGhpc307QmFja2JvbmUuZW11bGF0ZUhUVFA9ZmFsc2U7QmFja2JvbmUuZW11bGF0ZUpTT049ZmFsc2U7dmFyIEV2ZW50cz1CYWNrYm9uZS5FdmVudHM9e29uOmZ1bmN0aW9uKG5hbWUsY2FsbGJhY2ssY29udGV4dCl7aWYoIWV2ZW50c0FwaSh0aGlzLFwib25cIixuYW1lLFtjYWxsYmFjayxjb250ZXh0XSl8fCFjYWxsYmFjaylyZXR1cm4gdGhpczt0aGlzLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9e30pO3ZhciBldmVudHM9dGhpcy5fZXZlbnRzW25hbWVdfHwodGhpcy5fZXZlbnRzW25hbWVdPVtdKTtldmVudHMucHVzaCh7Y2FsbGJhY2s6Y2FsbGJhY2ssY29udGV4dDpjb250ZXh0LGN0eDpjb250ZXh0fHx0aGlzfSk7cmV0dXJuIHRoaXN9LG9uY2U6ZnVuY3Rpb24obmFtZSxjYWxsYmFjayxjb250ZXh0KXtpZighZXZlbnRzQXBpKHRoaXMsXCJvbmNlXCIsbmFtZSxbY2FsbGJhY2ssY29udGV4dF0pfHwhY2FsbGJhY2spcmV0dXJuIHRoaXM7dmFyIHNlbGY9dGhpczt2YXIgb25jZT1fLm9uY2UoZnVuY3Rpb24oKXtzZWxmLm9mZihuYW1lLG9uY2UpO2NhbGxiYWNrLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO29uY2UuX2NhbGxiYWNrPWNhbGxiYWNrO3JldHVybiB0aGlzLm9uKG5hbWUsb25jZSxjb250ZXh0KX0sb2ZmOmZ1bmN0aW9uKG5hbWUsY2FsbGJhY2ssY29udGV4dCl7dmFyIHJldGFpbixldixldmVudHMsbmFtZXMsaSxsLGosaztpZighdGhpcy5fZXZlbnRzfHwhZXZlbnRzQXBpKHRoaXMsXCJvZmZcIixuYW1lLFtjYWxsYmFjayxjb250ZXh0XSkpcmV0dXJuIHRoaXM7aWYoIW5hbWUmJiFjYWxsYmFjayYmIWNvbnRleHQpe3RoaXMuX2V2ZW50cz17fTtyZXR1cm4gdGhpc31uYW1lcz1uYW1lP1tuYW1lXTpfLmtleXModGhpcy5fZXZlbnRzKTtmb3IoaT0wLGw9bmFtZXMubGVuZ3RoO2k8bDtpKyspe25hbWU9bmFtZXNbaV07aWYoZXZlbnRzPXRoaXMuX2V2ZW50c1tuYW1lXSl7dGhpcy5fZXZlbnRzW25hbWVdPXJldGFpbj1bXTtpZihjYWxsYmFja3x8Y29udGV4dCl7Zm9yKGo9MCxrPWV2ZW50cy5sZW5ndGg7ajxrO2orKyl7ZXY9ZXZlbnRzW2pdO2lmKGNhbGxiYWNrJiZjYWxsYmFjayE9PWV2LmNhbGxiYWNrJiZjYWxsYmFjayE9PWV2LmNhbGxiYWNrLl9jYWxsYmFja3x8Y29udGV4dCYmY29udGV4dCE9PWV2LmNvbnRleHQpe3JldGFpbi5wdXNoKGV2KX19fWlmKCFyZXRhaW4ubGVuZ3RoKWRlbGV0ZSB0aGlzLl9ldmVudHNbbmFtZV19fXJldHVybiB0aGlzfSx0cmlnZ2VyOmZ1bmN0aW9uKG5hbWUpe2lmKCF0aGlzLl9ldmVudHMpcmV0dXJuIHRoaXM7dmFyIGFyZ3M9c2xpY2UuY2FsbChhcmd1bWVudHMsMSk7aWYoIWV2ZW50c0FwaSh0aGlzLFwidHJpZ2dlclwiLG5hbWUsYXJncykpcmV0dXJuIHRoaXM7dmFyIGV2ZW50cz10aGlzLl9ldmVudHNbbmFtZV07dmFyIGFsbEV2ZW50cz10aGlzLl9ldmVudHMuYWxsO2lmKGV2ZW50cyl0cmlnZ2VyRXZlbnRzKGV2ZW50cyxhcmdzKTtpZihhbGxFdmVudHMpdHJpZ2dlckV2ZW50cyhhbGxFdmVudHMsYXJndW1lbnRzKTtyZXR1cm4gdGhpc30sc3RvcExpc3RlbmluZzpmdW5jdGlvbihvYmosbmFtZSxjYWxsYmFjayl7dmFyIGxpc3RlbmVycz10aGlzLl9saXN0ZW5lcnM7aWYoIWxpc3RlbmVycylyZXR1cm4gdGhpczt2YXIgZGVsZXRlTGlzdGVuZXI9IW5hbWUmJiFjYWxsYmFjaztpZih0eXBlb2YgbmFtZT09PVwib2JqZWN0XCIpY2FsbGJhY2s9dGhpcztpZihvYmopKGxpc3RlbmVycz17fSlbb2JqLl9saXN0ZW5lcklkXT1vYmo7Zm9yKHZhciBpZCBpbiBsaXN0ZW5lcnMpe2xpc3RlbmVyc1tpZF0ub2ZmKG5hbWUsY2FsbGJhY2ssdGhpcyk7aWYoZGVsZXRlTGlzdGVuZXIpZGVsZXRlIHRoaXMuX2xpc3RlbmVyc1tpZF19cmV0dXJuIHRoaXN9fTt2YXIgZXZlbnRTcGxpdHRlcj0vXFxzKy87dmFyIGV2ZW50c0FwaT1mdW5jdGlvbihvYmosYWN0aW9uLG5hbWUscmVzdCl7aWYoIW5hbWUpcmV0dXJuIHRydWU7aWYodHlwZW9mIG5hbWU9PT1cIm9iamVjdFwiKXtmb3IodmFyIGtleSBpbiBuYW1lKXtvYmpbYWN0aW9uXS5hcHBseShvYmosW2tleSxuYW1lW2tleV1dLmNvbmNhdChyZXN0KSl9cmV0dXJuIGZhbHNlfWlmKGV2ZW50U3BsaXR0ZXIudGVzdChuYW1lKSl7dmFyIG5hbWVzPW5hbWUuc3BsaXQoZXZlbnRTcGxpdHRlcik7Zm9yKHZhciBpPTAsbD1uYW1lcy5sZW5ndGg7aTxsO2krKyl7b2JqW2FjdGlvbl0uYXBwbHkob2JqLFtuYW1lc1tpXV0uY29uY2F0KHJlc3QpKX1yZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9O3ZhciB0cmlnZ2VyRXZlbnRzPWZ1bmN0aW9uKGV2ZW50cyxhcmdzKXt2YXIgZXYsaT0tMSxsPWV2ZW50cy5sZW5ndGgsYTE9YXJnc1swXSxhMj1hcmdzWzFdLGEzPWFyZ3NbMl07c3dpdGNoKGFyZ3MubGVuZ3RoKXtjYXNlIDA6d2hpbGUoKytpPGwpKGV2PWV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgpO3JldHVybjtjYXNlIDE6d2hpbGUoKytpPGwpKGV2PWV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgsYTEpO3JldHVybjtjYXNlIDI6d2hpbGUoKytpPGwpKGV2PWV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgsYTEsYTIpO3JldHVybjtjYXNlIDM6d2hpbGUoKytpPGwpKGV2PWV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgsYTEsYTIsYTMpO3JldHVybjtkZWZhdWx0OndoaWxlKCsraTxsKShldj1ldmVudHNbaV0pLmNhbGxiYWNrLmFwcGx5KGV2LmN0eCxhcmdzKX19O3ZhciBsaXN0ZW5NZXRob2RzPXtsaXN0ZW5UbzpcIm9uXCIsbGlzdGVuVG9PbmNlOlwib25jZVwifTtfLmVhY2gobGlzdGVuTWV0aG9kcyxmdW5jdGlvbihpbXBsZW1lbnRhdGlvbixtZXRob2Qpe0V2ZW50c1ttZXRob2RdPWZ1bmN0aW9uKG9iaixuYW1lLGNhbGxiYWNrKXt2YXIgbGlzdGVuZXJzPXRoaXMuX2xpc3RlbmVyc3x8KHRoaXMuX2xpc3RlbmVycz17fSk7dmFyIGlkPW9iai5fbGlzdGVuZXJJZHx8KG9iai5fbGlzdGVuZXJJZD1fLnVuaXF1ZUlkKFwibFwiKSk7bGlzdGVuZXJzW2lkXT1vYmo7aWYodHlwZW9mIG5hbWU9PT1cIm9iamVjdFwiKWNhbGxiYWNrPXRoaXM7b2JqW2ltcGxlbWVudGF0aW9uXShuYW1lLGNhbGxiYWNrLHRoaXMpO3JldHVybiB0aGlzfX0pO0V2ZW50cy5iaW5kPUV2ZW50cy5vbjtFdmVudHMudW5iaW5kPUV2ZW50cy5vZmY7Xy5leHRlbmQoQmFja2JvbmUsRXZlbnRzKTt2YXIgTW9kZWw9QmFja2JvbmUuTW9kZWw9ZnVuY3Rpb24oYXR0cmlidXRlcyxvcHRpb25zKXt2YXIgZGVmYXVsdHM7dmFyIGF0dHJzPWF0dHJpYnV0ZXN8fHt9O29wdGlvbnN8fChvcHRpb25zPXt9KTt0aGlzLmNpZD1fLnVuaXF1ZUlkKFwiY1wiKTt0aGlzLmF0dHJpYnV0ZXM9e307Xy5leHRlbmQodGhpcyxfLnBpY2sob3B0aW9ucyxtb2RlbE9wdGlvbnMpKTtpZihvcHRpb25zLnBhcnNlKWF0dHJzPXRoaXMucGFyc2UoYXR0cnMsb3B0aW9ucyl8fHt9O2lmKGRlZmF1bHRzPV8ucmVzdWx0KHRoaXMsXCJkZWZhdWx0c1wiKSl7YXR0cnM9Xy5kZWZhdWx0cyh7fSxhdHRycyxkZWZhdWx0cyl9dGhpcy5zZXQoYXR0cnMsb3B0aW9ucyk7dGhpcy5jaGFuZ2VkPXt9O3RoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBtb2RlbE9wdGlvbnM9W1widXJsXCIsXCJ1cmxSb290XCIsXCJjb2xsZWN0aW9uXCJdO18uZXh0ZW5kKE1vZGVsLnByb3RvdHlwZSxFdmVudHMse2NoYW5nZWQ6bnVsbCx2YWxpZGF0aW9uRXJyb3I6bnVsbCxpZEF0dHJpYnV0ZTpcImlkXCIsaW5pdGlhbGl6ZTpmdW5jdGlvbigpe30sdG9KU09OOmZ1bmN0aW9uKG9wdGlvbnMpe3JldHVybiBfLmNsb25lKHRoaXMuYXR0cmlidXRlcyl9LHN5bmM6ZnVuY3Rpb24oKXtyZXR1cm4gQmFja2JvbmUuc3luYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGdldDpmdW5jdGlvbihhdHRyKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW2F0dHJdfSxlc2NhcGU6ZnVuY3Rpb24oYXR0cil7cmV0dXJuIF8uZXNjYXBlKHRoaXMuZ2V0KGF0dHIpKX0saGFzOmZ1bmN0aW9uKGF0dHIpe3JldHVybiB0aGlzLmdldChhdHRyKSE9bnVsbH0sc2V0OmZ1bmN0aW9uKGtleSx2YWwsb3B0aW9ucyl7dmFyIGF0dHIsYXR0cnMsdW5zZXQsY2hhbmdlcyxzaWxlbnQsY2hhbmdpbmcscHJldixjdXJyZW50O2lmKGtleT09bnVsbClyZXR1cm4gdGhpcztpZih0eXBlb2Yga2V5PT09XCJvYmplY3RcIil7YXR0cnM9a2V5O29wdGlvbnM9dmFsfWVsc2V7KGF0dHJzPXt9KVtrZXldPXZhbH1vcHRpb25zfHwob3B0aW9ucz17fSk7aWYoIXRoaXMuX3ZhbGlkYXRlKGF0dHJzLG9wdGlvbnMpKXJldHVybiBmYWxzZTt1bnNldD1vcHRpb25zLnVuc2V0O3NpbGVudD1vcHRpb25zLnNpbGVudDtjaGFuZ2VzPVtdO2NoYW5naW5nPXRoaXMuX2NoYW5naW5nO3RoaXMuX2NoYW5naW5nPXRydWU7aWYoIWNoYW5naW5nKXt0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXM9Xy5jbG9uZSh0aGlzLmF0dHJpYnV0ZXMpO3RoaXMuY2hhbmdlZD17fX1jdXJyZW50PXRoaXMuYXR0cmlidXRlcyxwcmV2PXRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcztpZih0aGlzLmlkQXR0cmlidXRlIGluIGF0dHJzKXRoaXMuaWQ9YXR0cnNbdGhpcy5pZEF0dHJpYnV0ZV07Zm9yKGF0dHIgaW4gYXR0cnMpe3ZhbD1hdHRyc1thdHRyXTtpZighXy5pc0VxdWFsKGN1cnJlbnRbYXR0cl0sdmFsKSljaGFuZ2VzLnB1c2goYXR0cik7aWYoIV8uaXNFcXVhbChwcmV2W2F0dHJdLHZhbCkpe3RoaXMuY2hhbmdlZFthdHRyXT12YWx9ZWxzZXtkZWxldGUgdGhpcy5jaGFuZ2VkW2F0dHJdfXVuc2V0P2RlbGV0ZSBjdXJyZW50W2F0dHJdOmN1cnJlbnRbYXR0cl09dmFsfWlmKCFzaWxlbnQpe2lmKGNoYW5nZXMubGVuZ3RoKXRoaXMuX3BlbmRpbmc9dHJ1ZTtmb3IodmFyIGk9MCxsPWNoYW5nZXMubGVuZ3RoO2k8bDtpKyspe3RoaXMudHJpZ2dlcihcImNoYW5nZTpcIitjaGFuZ2VzW2ldLHRoaXMsY3VycmVudFtjaGFuZ2VzW2ldXSxvcHRpb25zKX19aWYoY2hhbmdpbmcpcmV0dXJuIHRoaXM7aWYoIXNpbGVudCl7d2hpbGUodGhpcy5fcGVuZGluZyl7dGhpcy5fcGVuZGluZz1mYWxzZTt0aGlzLnRyaWdnZXIoXCJjaGFuZ2VcIix0aGlzLG9wdGlvbnMpfX10aGlzLl9wZW5kaW5nPWZhbHNlO3RoaXMuX2NoYW5naW5nPWZhbHNlO3JldHVybiB0aGlzfSx1bnNldDpmdW5jdGlvbihhdHRyLG9wdGlvbnMpe3JldHVybiB0aGlzLnNldChhdHRyLHZvaWQgMCxfLmV4dGVuZCh7fSxvcHRpb25zLHt1bnNldDp0cnVlfSkpfSxjbGVhcjpmdW5jdGlvbihvcHRpb25zKXt2YXIgYXR0cnM9e307Zm9yKHZhciBrZXkgaW4gdGhpcy5hdHRyaWJ1dGVzKWF0dHJzW2tleV09dm9pZCAwO3JldHVybiB0aGlzLnNldChhdHRycyxfLmV4dGVuZCh7fSxvcHRpb25zLHt1bnNldDp0cnVlfSkpfSxoYXNDaGFuZ2VkOmZ1bmN0aW9uKGF0dHIpe2lmKGF0dHI9PW51bGwpcmV0dXJuIV8uaXNFbXB0eSh0aGlzLmNoYW5nZWQpO3JldHVybiBfLmhhcyh0aGlzLmNoYW5nZWQsYXR0cil9LGNoYW5nZWRBdHRyaWJ1dGVzOmZ1bmN0aW9uKGRpZmYpe2lmKCFkaWZmKXJldHVybiB0aGlzLmhhc0NoYW5nZWQoKT9fLmNsb25lKHRoaXMuY2hhbmdlZCk6ZmFsc2U7dmFyIHZhbCxjaGFuZ2VkPWZhbHNlO3ZhciBvbGQ9dGhpcy5fY2hhbmdpbmc/dGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzOnRoaXMuYXR0cmlidXRlcztmb3IodmFyIGF0dHIgaW4gZGlmZil7aWYoXy5pc0VxdWFsKG9sZFthdHRyXSx2YWw9ZGlmZlthdHRyXSkpY29udGludWU7KGNoYW5nZWR8fChjaGFuZ2VkPXt9KSlbYXR0cl09dmFsfXJldHVybiBjaGFuZ2VkfSxwcmV2aW91czpmdW5jdGlvbihhdHRyKXtpZihhdHRyPT1udWxsfHwhdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzKXJldHVybiBudWxsO3JldHVybiB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXNbYXR0cl19LHByZXZpb3VzQXR0cmlidXRlczpmdW5jdGlvbigpe3JldHVybiBfLmNsb25lKHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyl9LGZldGNoOmZ1bmN0aW9uKG9wdGlvbnMpe29wdGlvbnM9b3B0aW9ucz9fLmNsb25lKG9wdGlvbnMpOnt9O2lmKG9wdGlvbnMucGFyc2U9PT12b2lkIDApb3B0aW9ucy5wYXJzZT10cnVlO3ZhciBtb2RlbD10aGlzO3ZhciBzdWNjZXNzPW9wdGlvbnMuc3VjY2VzcztvcHRpb25zLnN1Y2Nlc3M9ZnVuY3Rpb24ocmVzcCl7aWYoIW1vZGVsLnNldChtb2RlbC5wYXJzZShyZXNwLG9wdGlvbnMpLG9wdGlvbnMpKXJldHVybiBmYWxzZTtpZihzdWNjZXNzKXN1Y2Nlc3MobW9kZWwscmVzcCxvcHRpb25zKTttb2RlbC50cmlnZ2VyKFwic3luY1wiLG1vZGVsLHJlc3Asb3B0aW9ucyl9O3dyYXBFcnJvcih0aGlzLG9wdGlvbnMpO3JldHVybiB0aGlzLnN5bmMoXCJyZWFkXCIsdGhpcyxvcHRpb25zKX0sc2F2ZTpmdW5jdGlvbihrZXksdmFsLG9wdGlvbnMpe3ZhciBhdHRycyxtZXRob2QseGhyLGF0dHJpYnV0ZXM9dGhpcy5hdHRyaWJ1dGVzO2lmKGtleT09bnVsbHx8dHlwZW9mIGtleT09PVwib2JqZWN0XCIpe2F0dHJzPWtleTtvcHRpb25zPXZhbH1lbHNleyhhdHRycz17fSlba2V5XT12YWx9aWYoYXR0cnMmJighb3B0aW9uc3x8IW9wdGlvbnMud2FpdCkmJiF0aGlzLnNldChhdHRycyxvcHRpb25zKSlyZXR1cm4gZmFsc2U7b3B0aW9ucz1fLmV4dGVuZCh7dmFsaWRhdGU6dHJ1ZX0sb3B0aW9ucyk7aWYoIXRoaXMuX3ZhbGlkYXRlKGF0dHJzLG9wdGlvbnMpKXJldHVybiBmYWxzZTtpZihhdHRycyYmb3B0aW9ucy53YWl0KXt0aGlzLmF0dHJpYnV0ZXM9Xy5leHRlbmQoe30sYXR0cmlidXRlcyxhdHRycyl9aWYob3B0aW9ucy5wYXJzZT09PXZvaWQgMClvcHRpb25zLnBhcnNlPXRydWU7dmFyIG1vZGVsPXRoaXM7dmFyIHN1Y2Nlc3M9b3B0aW9ucy5zdWNjZXNzO29wdGlvbnMuc3VjY2Vzcz1mdW5jdGlvbihyZXNwKXttb2RlbC5hdHRyaWJ1dGVzPWF0dHJpYnV0ZXM7dmFyIHNlcnZlckF0dHJzPW1vZGVsLnBhcnNlKHJlc3Asb3B0aW9ucyk7aWYob3B0aW9ucy53YWl0KXNlcnZlckF0dHJzPV8uZXh0ZW5kKGF0dHJzfHx7fSxzZXJ2ZXJBdHRycyk7aWYoXy5pc09iamVjdChzZXJ2ZXJBdHRycykmJiFtb2RlbC5zZXQoc2VydmVyQXR0cnMsb3B0aW9ucykpe3JldHVybiBmYWxzZX1pZihzdWNjZXNzKXN1Y2Nlc3MobW9kZWwscmVzcCxvcHRpb25zKTttb2RlbC50cmlnZ2VyKFwic3luY1wiLG1vZGVsLHJlc3Asb3B0aW9ucyl9O3dyYXBFcnJvcih0aGlzLG9wdGlvbnMpO21ldGhvZD10aGlzLmlzTmV3KCk/XCJjcmVhdGVcIjpvcHRpb25zLnBhdGNoP1wicGF0Y2hcIjpcInVwZGF0ZVwiO2lmKG1ldGhvZD09PVwicGF0Y2hcIilvcHRpb25zLmF0dHJzPWF0dHJzO3hocj10aGlzLnN5bmMobWV0aG9kLHRoaXMsb3B0aW9ucyk7aWYoYXR0cnMmJm9wdGlvbnMud2FpdCl0aGlzLmF0dHJpYnV0ZXM9YXR0cmlidXRlcztyZXR1cm4geGhyfSxkZXN0cm95OmZ1bmN0aW9uKG9wdGlvbnMpe29wdGlvbnM9b3B0aW9ucz9fLmNsb25lKG9wdGlvbnMpOnt9O3ZhciBtb2RlbD10aGlzO3ZhciBzdWNjZXNzPW9wdGlvbnMuc3VjY2Vzczt2YXIgZGVzdHJveT1mdW5jdGlvbigpe21vZGVsLnRyaWdnZXIoXCJkZXN0cm95XCIsbW9kZWwsbW9kZWwuY29sbGVjdGlvbixvcHRpb25zKX07b3B0aW9ucy5zdWNjZXNzPWZ1bmN0aW9uKHJlc3Ape2lmKG9wdGlvbnMud2FpdHx8bW9kZWwuaXNOZXcoKSlkZXN0cm95KCk7aWYoc3VjY2VzcylzdWNjZXNzKG1vZGVsLHJlc3Asb3B0aW9ucyk7aWYoIW1vZGVsLmlzTmV3KCkpbW9kZWwudHJpZ2dlcihcInN5bmNcIixtb2RlbCxyZXNwLG9wdGlvbnMpfTtpZih0aGlzLmlzTmV3KCkpe29wdGlvbnMuc3VjY2VzcygpO3JldHVybiBmYWxzZX13cmFwRXJyb3IodGhpcyxvcHRpb25zKTt2YXIgeGhyPXRoaXMuc3luYyhcImRlbGV0ZVwiLHRoaXMsb3B0aW9ucyk7aWYoIW9wdGlvbnMud2FpdClkZXN0cm95KCk7cmV0dXJuIHhocn0sdXJsOmZ1bmN0aW9uKCl7dmFyIGJhc2U9Xy5yZXN1bHQodGhpcyxcInVybFJvb3RcIil8fF8ucmVzdWx0KHRoaXMuY29sbGVjdGlvbixcInVybFwiKXx8dXJsRXJyb3IoKTtpZih0aGlzLmlzTmV3KCkpcmV0dXJuIGJhc2U7cmV0dXJuIGJhc2UrKGJhc2UuY2hhckF0KGJhc2UubGVuZ3RoLTEpPT09XCIvXCI/XCJcIjpcIi9cIikrZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuaWQpfSxwYXJzZTpmdW5jdGlvbihyZXNwLG9wdGlvbnMpe3JldHVybiByZXNwfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmF0dHJpYnV0ZXMpfSxpc05ldzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkPT1udWxsfSxpc1ZhbGlkOmZ1bmN0aW9uKG9wdGlvbnMpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh7fSxfLmV4dGVuZChvcHRpb25zfHx7fSx7dmFsaWRhdGU6dHJ1ZX0pKX0sX3ZhbGlkYXRlOmZ1bmN0aW9uKGF0dHJzLG9wdGlvbnMpe2lmKCFvcHRpb25zLnZhbGlkYXRlfHwhdGhpcy52YWxpZGF0ZSlyZXR1cm4gdHJ1ZTthdHRycz1fLmV4dGVuZCh7fSx0aGlzLmF0dHJpYnV0ZXMsYXR0cnMpO3ZhciBlcnJvcj10aGlzLnZhbGlkYXRpb25FcnJvcj10aGlzLnZhbGlkYXRlKGF0dHJzLG9wdGlvbnMpfHxudWxsO2lmKCFlcnJvcilyZXR1cm4gdHJ1ZTt0aGlzLnRyaWdnZXIoXCJpbnZhbGlkXCIsdGhpcyxlcnJvcixfLmV4dGVuZChvcHRpb25zfHx7fSx7dmFsaWRhdGlvbkVycm9yOmVycm9yfSkpO3JldHVybiBmYWxzZX19KTt2YXIgbW9kZWxNZXRob2RzPVtcImtleXNcIixcInZhbHVlc1wiLFwicGFpcnNcIixcImludmVydFwiLFwicGlja1wiLFwib21pdFwiXTtfLmVhY2gobW9kZWxNZXRob2RzLGZ1bmN0aW9uKG1ldGhvZCl7TW9kZWwucHJvdG90eXBlW21ldGhvZF09ZnVuY3Rpb24oKXt2YXIgYXJncz1zbGljZS5jYWxsKGFyZ3VtZW50cyk7YXJncy51bnNoaWZ0KHRoaXMuYXR0cmlidXRlcyk7cmV0dXJuIF9bbWV0aG9kXS5hcHBseShfLGFyZ3MpfX0pO3ZhciBDb2xsZWN0aW9uPUJhY2tib25lLkNvbGxlY3Rpb249ZnVuY3Rpb24obW9kZWxzLG9wdGlvbnMpe29wdGlvbnN8fChvcHRpb25zPXt9KTtpZihvcHRpb25zLnVybCl0aGlzLnVybD1vcHRpb25zLnVybDtpZihvcHRpb25zLm1vZGVsKXRoaXMubW9kZWw9b3B0aW9ucy5tb2RlbDtpZihvcHRpb25zLmNvbXBhcmF0b3IhPT12b2lkIDApdGhpcy5jb21wYXJhdG9yPW9wdGlvbnMuY29tcGFyYXRvcjt0aGlzLl9yZXNldCgpO3RoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYobW9kZWxzKXRoaXMucmVzZXQobW9kZWxzLF8uZXh0ZW5kKHtzaWxlbnQ6dHJ1ZX0sb3B0aW9ucykpfTt2YXIgc2V0T3B0aW9ucz17YWRkOnRydWUscmVtb3ZlOnRydWUsbWVyZ2U6dHJ1ZX07dmFyIGFkZE9wdGlvbnM9e2FkZDp0cnVlLG1lcmdlOmZhbHNlLHJlbW92ZTpmYWxzZX07Xy5leHRlbmQoQ29sbGVjdGlvbi5wcm90b3R5cGUsRXZlbnRzLHttb2RlbDpNb2RlbCxpbml0aWFsaXplOmZ1bmN0aW9uKCl7fSx0b0pTT046ZnVuY3Rpb24ob3B0aW9ucyl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKG1vZGVsKXtyZXR1cm4gbW9kZWwudG9KU09OKG9wdGlvbnMpfSl9LHN5bmM6ZnVuY3Rpb24oKXtyZXR1cm4gQmFja2JvbmUuc3luYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGFkZDpmdW5jdGlvbihtb2RlbHMsb3B0aW9ucyl7cmV0dXJuIHRoaXMuc2V0KG1vZGVscyxfLmRlZmF1bHRzKG9wdGlvbnN8fHt9LGFkZE9wdGlvbnMpKX0scmVtb3ZlOmZ1bmN0aW9uKG1vZGVscyxvcHRpb25zKXttb2RlbHM9Xy5pc0FycmF5KG1vZGVscyk/bW9kZWxzLnNsaWNlKCk6W21vZGVsc107b3B0aW9uc3x8KG9wdGlvbnM9e30pO3ZhciBpLGwsaW5kZXgsbW9kZWw7Zm9yKGk9MCxsPW1vZGVscy5sZW5ndGg7aTxsO2krKyl7bW9kZWw9dGhpcy5nZXQobW9kZWxzW2ldKTtpZighbW9kZWwpY29udGludWU7ZGVsZXRlIHRoaXMuX2J5SWRbbW9kZWwuaWRdO2RlbGV0ZSB0aGlzLl9ieUlkW21vZGVsLmNpZF07aW5kZXg9dGhpcy5pbmRleE9mKG1vZGVsKTt0aGlzLm1vZGVscy5zcGxpY2UoaW5kZXgsMSk7dGhpcy5sZW5ndGgtLTtpZighb3B0aW9ucy5zaWxlbnQpe29wdGlvbnMuaW5kZXg9aW5kZXg7bW9kZWwudHJpZ2dlcihcInJlbW92ZVwiLG1vZGVsLHRoaXMsb3B0aW9ucyl9dGhpcy5fcmVtb3ZlUmVmZXJlbmNlKG1vZGVsKX1yZXR1cm4gdGhpc30sc2V0OmZ1bmN0aW9uKG1vZGVscyxvcHRpb25zKXtvcHRpb25zPV8uZGVmYXVsdHMob3B0aW9uc3x8e30sc2V0T3B0aW9ucyk7aWYob3B0aW9ucy5wYXJzZSltb2RlbHM9dGhpcy5wYXJzZShtb2RlbHMsb3B0aW9ucyk7aWYoIV8uaXNBcnJheShtb2RlbHMpKW1vZGVscz1tb2RlbHM/W21vZGVsc106W107dmFyIGksbCxtb2RlbCxhdHRycyxleGlzdGluZyxzb3J0O3ZhciBhdD1vcHRpb25zLmF0O3ZhciBzb3J0YWJsZT10aGlzLmNvbXBhcmF0b3ImJmF0PT1udWxsJiZvcHRpb25zLnNvcnQhPT1mYWxzZTt2YXIgc29ydEF0dHI9Xy5pc1N0cmluZyh0aGlzLmNvbXBhcmF0b3IpP3RoaXMuY29tcGFyYXRvcjpudWxsO3ZhciB0b0FkZD1bXSx0b1JlbW92ZT1bXSxtb2RlbE1hcD17fTtmb3IoaT0wLGw9bW9kZWxzLmxlbmd0aDtpPGw7aSsrKXtpZighKG1vZGVsPXRoaXMuX3ByZXBhcmVNb2RlbChtb2RlbHNbaV0sb3B0aW9ucykpKWNvbnRpbnVlO2lmKGV4aXN0aW5nPXRoaXMuZ2V0KG1vZGVsKSl7aWYob3B0aW9ucy5yZW1vdmUpbW9kZWxNYXBbZXhpc3RpbmcuY2lkXT10cnVlO2lmKG9wdGlvbnMubWVyZ2Upe2V4aXN0aW5nLnNldChtb2RlbC5hdHRyaWJ1dGVzLG9wdGlvbnMpO2lmKHNvcnRhYmxlJiYhc29ydCYmZXhpc3RpbmcuaGFzQ2hhbmdlZChzb3J0QXR0cikpc29ydD10cnVlfX1lbHNlIGlmKG9wdGlvbnMuYWRkKXt0b0FkZC5wdXNoKG1vZGVsKTttb2RlbC5vbihcImFsbFwiLHRoaXMuX29uTW9kZWxFdmVudCx0aGlzKTt0aGlzLl9ieUlkW21vZGVsLmNpZF09bW9kZWw7aWYobW9kZWwuaWQhPW51bGwpdGhpcy5fYnlJZFttb2RlbC5pZF09bW9kZWx9fWlmKG9wdGlvbnMucmVtb3ZlKXtmb3IoaT0wLGw9dGhpcy5sZW5ndGg7aTxsOysraSl7aWYoIW1vZGVsTWFwWyhtb2RlbD10aGlzLm1vZGVsc1tpXSkuY2lkXSl0b1JlbW92ZS5wdXNoKG1vZGVsKX1pZih0b1JlbW92ZS5sZW5ndGgpdGhpcy5yZW1vdmUodG9SZW1vdmUsb3B0aW9ucyl9aWYodG9BZGQubGVuZ3RoKXtpZihzb3J0YWJsZSlzb3J0PXRydWU7dGhpcy5sZW5ndGgrPXRvQWRkLmxlbmd0aDtpZihhdCE9bnVsbCl7c3BsaWNlLmFwcGx5KHRoaXMubW9kZWxzLFthdCwwXS5jb25jYXQodG9BZGQpKX1lbHNle3B1c2guYXBwbHkodGhpcy5tb2RlbHMsdG9BZGQpfX1pZihzb3J0KXRoaXMuc29ydCh7c2lsZW50OnRydWV9KTtpZihvcHRpb25zLnNpbGVudClyZXR1cm4gdGhpcztmb3IoaT0wLGw9dG9BZGQubGVuZ3RoO2k8bDtpKyspeyhtb2RlbD10b0FkZFtpXSkudHJpZ2dlcihcImFkZFwiLG1vZGVsLHRoaXMsb3B0aW9ucyl9aWYoc29ydCl0aGlzLnRyaWdnZXIoXCJzb3J0XCIsdGhpcyxvcHRpb25zKTtyZXR1cm4gdGhpc30scmVzZXQ6ZnVuY3Rpb24obW9kZWxzLG9wdGlvbnMpe29wdGlvbnN8fChvcHRpb25zPXt9KTtmb3IodmFyIGk9MCxsPXRoaXMubW9kZWxzLmxlbmd0aDtpPGw7aSsrKXt0aGlzLl9yZW1vdmVSZWZlcmVuY2UodGhpcy5tb2RlbHNbaV0pfW9wdGlvbnMucHJldmlvdXNNb2RlbHM9dGhpcy5tb2RlbHM7dGhpcy5fcmVzZXQoKTt0aGlzLmFkZChtb2RlbHMsXy5leHRlbmQoe3NpbGVudDp0cnVlfSxvcHRpb25zKSk7aWYoIW9wdGlvbnMuc2lsZW50KXRoaXMudHJpZ2dlcihcInJlc2V0XCIsdGhpcyxvcHRpb25zKTtyZXR1cm4gdGhpc30scHVzaDpmdW5jdGlvbihtb2RlbCxvcHRpb25zKXttb2RlbD10aGlzLl9wcmVwYXJlTW9kZWwobW9kZWwsb3B0aW9ucyk7dGhpcy5hZGQobW9kZWwsXy5leHRlbmQoe2F0OnRoaXMubGVuZ3RofSxvcHRpb25zKSk7cmV0dXJuIG1vZGVsfSxwb3A6ZnVuY3Rpb24ob3B0aW9ucyl7dmFyIG1vZGVsPXRoaXMuYXQodGhpcy5sZW5ndGgtMSk7dGhpcy5yZW1vdmUobW9kZWwsb3B0aW9ucyk7cmV0dXJuIG1vZGVsfSx1bnNoaWZ0OmZ1bmN0aW9uKG1vZGVsLG9wdGlvbnMpe21vZGVsPXRoaXMuX3ByZXBhcmVNb2RlbChtb2RlbCxvcHRpb25zKTt0aGlzLmFkZChtb2RlbCxfLmV4dGVuZCh7YXQ6MH0sb3B0aW9ucykpO3JldHVybiBtb2RlbH0sc2hpZnQ6ZnVuY3Rpb24ob3B0aW9ucyl7dmFyIG1vZGVsPXRoaXMuYXQoMCk7dGhpcy5yZW1vdmUobW9kZWwsb3B0aW9ucyk7cmV0dXJuIG1vZGVsfSxzbGljZTpmdW5jdGlvbihiZWdpbixlbmQpe3JldHVybiB0aGlzLm1vZGVscy5zbGljZShiZWdpbixlbmQpfSxnZXQ6ZnVuY3Rpb24ob2JqKXtpZihvYmo9PW51bGwpcmV0dXJuIHZvaWQgMDtyZXR1cm4gdGhpcy5fYnlJZFtvYmouaWQhPW51bGw/b2JqLmlkOm9iai5jaWR8fG9ial19LGF0OmZ1bmN0aW9uKGluZGV4KXtyZXR1cm4gdGhpcy5tb2RlbHNbaW5kZXhdfSx3aGVyZTpmdW5jdGlvbihhdHRycyxmaXJzdCl7aWYoXy5pc0VtcHR5KGF0dHJzKSlyZXR1cm4gZmlyc3Q/dm9pZCAwOltdO3JldHVybiB0aGlzW2ZpcnN0P1wiZmluZFwiOlwiZmlsdGVyXCJdKGZ1bmN0aW9uKG1vZGVsKXtmb3IodmFyIGtleSBpbiBhdHRycyl7aWYoYXR0cnNba2V5XSE9PW1vZGVsLmdldChrZXkpKXJldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0pfSxmaW5kV2hlcmU6ZnVuY3Rpb24oYXR0cnMpe3JldHVybiB0aGlzLndoZXJlKGF0dHJzLHRydWUpfSxzb3J0OmZ1bmN0aW9uKG9wdGlvbnMpe2lmKCF0aGlzLmNvbXBhcmF0b3IpdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNvcnQgYSBzZXQgd2l0aG91dCBhIGNvbXBhcmF0b3JcIik7b3B0aW9uc3x8KG9wdGlvbnM9e30pO2lmKF8uaXNTdHJpbmcodGhpcy5jb21wYXJhdG9yKXx8dGhpcy5jb21wYXJhdG9yLmxlbmd0aD09PTEpe3RoaXMubW9kZWxzPXRoaXMuc29ydEJ5KHRoaXMuY29tcGFyYXRvcix0aGlzKX1lbHNle3RoaXMubW9kZWxzLnNvcnQoXy5iaW5kKHRoaXMuY29tcGFyYXRvcix0aGlzKSl9aWYoIW9wdGlvbnMuc2lsZW50KXRoaXMudHJpZ2dlcihcInNvcnRcIix0aGlzLG9wdGlvbnMpO3JldHVybiB0aGlzfSxzb3J0ZWRJbmRleDpmdW5jdGlvbihtb2RlbCx2YWx1ZSxjb250ZXh0KXt2YWx1ZXx8KHZhbHVlPXRoaXMuY29tcGFyYXRvcik7dmFyIGl0ZXJhdG9yPV8uaXNGdW5jdGlvbih2YWx1ZSk/dmFsdWU6ZnVuY3Rpb24obW9kZWwpe3JldHVybiBtb2RlbC5nZXQodmFsdWUpfTtyZXR1cm4gXy5zb3J0ZWRJbmRleCh0aGlzLm1vZGVscyxtb2RlbCxpdGVyYXRvcixjb250ZXh0KX0scGx1Y2s6ZnVuY3Rpb24oYXR0cil7cmV0dXJuIF8uaW52b2tlKHRoaXMubW9kZWxzLFwiZ2V0XCIsYXR0cil9LGZldGNoOmZ1bmN0aW9uKG9wdGlvbnMpe29wdGlvbnM9b3B0aW9ucz9fLmNsb25lKG9wdGlvbnMpOnt9O2lmKG9wdGlvbnMucGFyc2U9PT12b2lkIDApb3B0aW9ucy5wYXJzZT10cnVlO3ZhciBzdWNjZXNzPW9wdGlvbnMuc3VjY2Vzczt2YXIgY29sbGVjdGlvbj10aGlzO29wdGlvbnMuc3VjY2Vzcz1mdW5jdGlvbihyZXNwKXt2YXIgbWV0aG9kPW9wdGlvbnMucmVzZXQ/XCJyZXNldFwiOlwic2V0XCI7Y29sbGVjdGlvblttZXRob2RdKHJlc3Asb3B0aW9ucyk7aWYoc3VjY2VzcylzdWNjZXNzKGNvbGxlY3Rpb24scmVzcCxvcHRpb25zKTtjb2xsZWN0aW9uLnRyaWdnZXIoXCJzeW5jXCIsY29sbGVjdGlvbixyZXNwLG9wdGlvbnMpfTt3cmFwRXJyb3IodGhpcyxvcHRpb25zKTtyZXR1cm4gdGhpcy5zeW5jKFwicmVhZFwiLHRoaXMsb3B0aW9ucyl9LGNyZWF0ZTpmdW5jdGlvbihtb2RlbCxvcHRpb25zKXtvcHRpb25zPW9wdGlvbnM/Xy5jbG9uZShvcHRpb25zKTp7fTtpZighKG1vZGVsPXRoaXMuX3ByZXBhcmVNb2RlbChtb2RlbCxvcHRpb25zKSkpcmV0dXJuIGZhbHNlO2lmKCFvcHRpb25zLndhaXQpdGhpcy5hZGQobW9kZWwsb3B0aW9ucyk7dmFyIGNvbGxlY3Rpb249dGhpczt2YXIgc3VjY2Vzcz1vcHRpb25zLnN1Y2Nlc3M7b3B0aW9ucy5zdWNjZXNzPWZ1bmN0aW9uKHJlc3Ape2lmKG9wdGlvbnMud2FpdCljb2xsZWN0aW9uLmFkZChtb2RlbCxvcHRpb25zKTtpZihzdWNjZXNzKXN1Y2Nlc3MobW9kZWwscmVzcCxvcHRpb25zKX07bW9kZWwuc2F2ZShudWxsLG9wdGlvbnMpO3JldHVybiBtb2RlbH0scGFyc2U6ZnVuY3Rpb24ocmVzcCxvcHRpb25zKXtyZXR1cm4gcmVzcH0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5tb2RlbHMpfSxfcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aD0wO3RoaXMubW9kZWxzPVtdO3RoaXMuX2J5SWQ9e319LF9wcmVwYXJlTW9kZWw6ZnVuY3Rpb24oYXR0cnMsb3B0aW9ucyl7aWYoYXR0cnMgaW5zdGFuY2VvZiBNb2RlbCl7aWYoIWF0dHJzLmNvbGxlY3Rpb24pYXR0cnMuY29sbGVjdGlvbj10aGlzO3JldHVybiBhdHRyc31vcHRpb25zfHwob3B0aW9ucz17fSk7b3B0aW9ucy5jb2xsZWN0aW9uPXRoaXM7dmFyIG1vZGVsPW5ldyB0aGlzLm1vZGVsKGF0dHJzLG9wdGlvbnMpO2lmKCFtb2RlbC5fdmFsaWRhdGUoYXR0cnMsb3B0aW9ucykpe3RoaXMudHJpZ2dlcihcImludmFsaWRcIix0aGlzLGF0dHJzLG9wdGlvbnMpO3JldHVybiBmYWxzZX1yZXR1cm4gbW9kZWx9LF9yZW1vdmVSZWZlcmVuY2U6ZnVuY3Rpb24obW9kZWwpe2lmKHRoaXM9PT1tb2RlbC5jb2xsZWN0aW9uKWRlbGV0ZSBtb2RlbC5jb2xsZWN0aW9uO21vZGVsLm9mZihcImFsbFwiLHRoaXMuX29uTW9kZWxFdmVudCx0aGlzKX0sX29uTW9kZWxFdmVudDpmdW5jdGlvbihldmVudCxtb2RlbCxjb2xsZWN0aW9uLG9wdGlvbnMpe2lmKChldmVudD09PVwiYWRkXCJ8fGV2ZW50PT09XCJyZW1vdmVcIikmJmNvbGxlY3Rpb24hPT10aGlzKXJldHVybjtpZihldmVudD09PVwiZGVzdHJveVwiKXRoaXMucmVtb3ZlKG1vZGVsLG9wdGlvbnMpO2lmKG1vZGVsJiZldmVudD09PVwiY2hhbmdlOlwiK21vZGVsLmlkQXR0cmlidXRlKXtkZWxldGUgdGhpcy5fYnlJZFttb2RlbC5wcmV2aW91cyhtb2RlbC5pZEF0dHJpYnV0ZSldO2lmKG1vZGVsLmlkIT1udWxsKXRoaXMuX2J5SWRbbW9kZWwuaWRdPW1vZGVsfXRoaXMudHJpZ2dlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIG1ldGhvZHM9W1wiZm9yRWFjaFwiLFwiZWFjaFwiLFwibWFwXCIsXCJjb2xsZWN0XCIsXCJyZWR1Y2VcIixcImZvbGRsXCIsXCJpbmplY3RcIixcInJlZHVjZVJpZ2h0XCIsXCJmb2xkclwiLFwiZmluZFwiLFwiZGV0ZWN0XCIsXCJmaWx0ZXJcIixcInNlbGVjdFwiLFwicmVqZWN0XCIsXCJldmVyeVwiLFwiYWxsXCIsXCJzb21lXCIsXCJhbnlcIixcImluY2x1ZGVcIixcImNvbnRhaW5zXCIsXCJpbnZva2VcIixcIm1heFwiLFwibWluXCIsXCJ0b0FycmF5XCIsXCJzaXplXCIsXCJmaXJzdFwiLFwiaGVhZFwiLFwidGFrZVwiLFwiaW5pdGlhbFwiLFwicmVzdFwiLFwidGFpbFwiLFwiZHJvcFwiLFwibGFzdFwiLFwid2l0aG91dFwiLFwiaW5kZXhPZlwiLFwic2h1ZmZsZVwiLFwibGFzdEluZGV4T2ZcIixcImlzRW1wdHlcIixcImNoYWluXCJdO18uZWFjaChtZXRob2RzLGZ1bmN0aW9uKG1ldGhvZCl7Q29sbGVjdGlvbi5wcm90b3R5cGVbbWV0aG9kXT1mdW5jdGlvbigpe3ZhciBhcmdzPXNsaWNlLmNhbGwoYXJndW1lbnRzKTthcmdzLnVuc2hpZnQodGhpcy5tb2RlbHMpO3JldHVybiBfW21ldGhvZF0uYXBwbHkoXyxhcmdzKX19KTt2YXIgYXR0cmlidXRlTWV0aG9kcz1bXCJncm91cEJ5XCIsXCJjb3VudEJ5XCIsXCJzb3J0QnlcIl07Xy5lYWNoKGF0dHJpYnV0ZU1ldGhvZHMsZnVuY3Rpb24obWV0aG9kKXtDb2xsZWN0aW9uLnByb3RvdHlwZVttZXRob2RdPWZ1bmN0aW9uKHZhbHVlLGNvbnRleHQpe3ZhciBpdGVyYXRvcj1fLmlzRnVuY3Rpb24odmFsdWUpP3ZhbHVlOmZ1bmN0aW9uKG1vZGVsKXtyZXR1cm4gbW9kZWwuZ2V0KHZhbHVlKX07cmV0dXJuIF9bbWV0aG9kXSh0aGlzLm1vZGVscyxpdGVyYXRvcixjb250ZXh0KX19KTt2YXIgVmlldz1CYWNrYm9uZS5WaWV3PWZ1bmN0aW9uKG9wdGlvbnMpe3RoaXMuY2lkPV8udW5pcXVlSWQoXCJ2aWV3XCIpO3RoaXMuX2NvbmZpZ3VyZShvcHRpb25zfHx7fSk7dGhpcy5fZW5zdXJlRWxlbWVudCgpO3RoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5kZWxlZ2F0ZUV2ZW50cygpfTt2YXIgZGVsZWdhdGVFdmVudFNwbGl0dGVyPS9eKFxcUyspXFxzKiguKikkLzt2YXIgdmlld09wdGlvbnM9W1wibW9kZWxcIixcImNvbGxlY3Rpb25cIixcImVsXCIsXCJpZFwiLFwiYXR0cmlidXRlc1wiLFwiY2xhc3NOYW1lXCIsXCJ0YWdOYW1lXCIsXCJldmVudHNcIl07Xy5leHRlbmQoVmlldy5wcm90b3R5cGUsRXZlbnRzLHt0YWdOYW1lOlwiZGl2XCIsJDpmdW5jdGlvbihzZWxlY3Rvcil7cmV0dXJuIHRoaXMuJGVsLmZpbmQoc2VsZWN0b3IpfSxpbml0aWFsaXplOmZ1bmN0aW9uKCl7fSxyZW5kZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy4kZWwucmVtb3ZlKCk7dGhpcy5zdG9wTGlzdGVuaW5nKCk7cmV0dXJuIHRoaXN9LHNldEVsZW1lbnQ6ZnVuY3Rpb24oZWxlbWVudCxkZWxlZ2F0ZSl7aWYodGhpcy4kZWwpdGhpcy51bmRlbGVnYXRlRXZlbnRzKCk7dGhpcy4kZWw9ZWxlbWVudCBpbnN0YW5jZW9mIEJhY2tib25lLiQ/ZWxlbWVudDpCYWNrYm9uZS4kKGVsZW1lbnQpO3RoaXMuZWw9dGhpcy4kZWxbMF07aWYoZGVsZWdhdGUhPT1mYWxzZSl0aGlzLmRlbGVnYXRlRXZlbnRzKCk7cmV0dXJuIHRoaXN9LGRlbGVnYXRlRXZlbnRzOmZ1bmN0aW9uKGV2ZW50cyl7aWYoIShldmVudHN8fChldmVudHM9Xy5yZXN1bHQodGhpcyxcImV2ZW50c1wiKSkpKXJldHVybiB0aGlzO3RoaXMudW5kZWxlZ2F0ZUV2ZW50cygpO2Zvcih2YXIga2V5IGluIGV2ZW50cyl7dmFyIG1ldGhvZD1ldmVudHNba2V5XTtpZighXy5pc0Z1bmN0aW9uKG1ldGhvZCkpbWV0aG9kPXRoaXNbZXZlbnRzW2tleV1dO2lmKCFtZXRob2QpY29udGludWU7dmFyIG1hdGNoPWtleS5tYXRjaChkZWxlZ2F0ZUV2ZW50U3BsaXR0ZXIpO3ZhciBldmVudE5hbWU9bWF0Y2hbMV0sc2VsZWN0b3I9bWF0Y2hbMl07bWV0aG9kPV8uYmluZChtZXRob2QsdGhpcyk7ZXZlbnROYW1lKz1cIi5kZWxlZ2F0ZUV2ZW50c1wiK3RoaXMuY2lkO2lmKHNlbGVjdG9yPT09XCJcIil7dGhpcy4kZWwub24oZXZlbnROYW1lLG1ldGhvZCl9ZWxzZXt0aGlzLiRlbC5vbihldmVudE5hbWUsc2VsZWN0b3IsbWV0aG9kKX19cmV0dXJuIHRoaXN9LHVuZGVsZWdhdGVFdmVudHM6ZnVuY3Rpb24oKXt0aGlzLiRlbC5vZmYoXCIuZGVsZWdhdGVFdmVudHNcIit0aGlzLmNpZCk7cmV0dXJuIHRoaXN9LF9jb25maWd1cmU6ZnVuY3Rpb24ob3B0aW9ucyl7aWYodGhpcy5vcHRpb25zKW9wdGlvbnM9Xy5leHRlbmQoe30sXy5yZXN1bHQodGhpcyxcIm9wdGlvbnNcIiksb3B0aW9ucyk7Xy5leHRlbmQodGhpcyxfLnBpY2sob3B0aW9ucyx2aWV3T3B0aW9ucykpO3RoaXMub3B0aW9ucz1vcHRpb25zfSxfZW5zdXJlRWxlbWVudDpmdW5jdGlvbigpe2lmKCF0aGlzLmVsKXt2YXIgYXR0cnM9Xy5leHRlbmQoe30sXy5yZXN1bHQodGhpcyxcImF0dHJpYnV0ZXNcIikpO2lmKHRoaXMuaWQpYXR0cnMuaWQ9Xy5yZXN1bHQodGhpcyxcImlkXCIpO2lmKHRoaXMuY2xhc3NOYW1lKWF0dHJzW1wiY2xhc3NcIl09Xy5yZXN1bHQodGhpcyxcImNsYXNzTmFtZVwiKTt2YXIgJGVsPUJhY2tib25lLiQoXCI8XCIrXy5yZXN1bHQodGhpcyxcInRhZ05hbWVcIikrXCI+XCIpLmF0dHIoYXR0cnMpO3RoaXMuc2V0RWxlbWVudCgkZWwsZmFsc2UpfWVsc2V7dGhpcy5zZXRFbGVtZW50KF8ucmVzdWx0KHRoaXMsXCJlbFwiKSxmYWxzZSl9fX0pO0JhY2tib25lLnN5bmM9ZnVuY3Rpb24obWV0aG9kLG1vZGVsLG9wdGlvbnMpe3ZhciB0eXBlPW1ldGhvZE1hcFttZXRob2RdO18uZGVmYXVsdHMob3B0aW9uc3x8KG9wdGlvbnM9e30pLHtlbXVsYXRlSFRUUDpCYWNrYm9uZS5lbXVsYXRlSFRUUCxlbXVsYXRlSlNPTjpCYWNrYm9uZS5lbXVsYXRlSlNPTn0pO3ZhciBwYXJhbXM9e3R5cGU6dHlwZSxkYXRhVHlwZTpcImpzb25cIn07aWYoIW9wdGlvbnMudXJsKXtwYXJhbXMudXJsPV8ucmVzdWx0KG1vZGVsLFwidXJsXCIpfHx1cmxFcnJvcigpfWlmKG9wdGlvbnMuZGF0YT09bnVsbCYmbW9kZWwmJihtZXRob2Q9PT1cImNyZWF0ZVwifHxtZXRob2Q9PT1cInVwZGF0ZVwifHxtZXRob2Q9PT1cInBhdGNoXCIpKXtwYXJhbXMuY29udGVudFR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI7cGFyYW1zLmRhdGE9SlNPTi5zdHJpbmdpZnkob3B0aW9ucy5hdHRyc3x8bW9kZWwudG9KU09OKG9wdGlvbnMpKX1pZihvcHRpb25zLmVtdWxhdGVKU09OKXtwYXJhbXMuY29udGVudFR5cGU9XCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIjtwYXJhbXMuZGF0YT1wYXJhbXMuZGF0YT97bW9kZWw6cGFyYW1zLmRhdGF9Ont9fWlmKG9wdGlvbnMuZW11bGF0ZUhUVFAmJih0eXBlPT09XCJQVVRcInx8dHlwZT09PVwiREVMRVRFXCJ8fHR5cGU9PT1cIlBBVENIXCIpKXtwYXJhbXMudHlwZT1cIlBPU1RcIjtpZihvcHRpb25zLmVtdWxhdGVKU09OKXBhcmFtcy5kYXRhLl9tZXRob2Q9dHlwZTt2YXIgYmVmb3JlU2VuZD1vcHRpb25zLmJlZm9yZVNlbmQ7b3B0aW9ucy5iZWZvcmVTZW5kPWZ1bmN0aW9uKHhocil7eGhyLnNldFJlcXVlc3RIZWFkZXIoXCJYLUhUVFAtTWV0aG9kLU92ZXJyaWRlXCIsdHlwZSk7aWYoYmVmb3JlU2VuZClyZXR1cm4gYmVmb3JlU2VuZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWlmKHBhcmFtcy50eXBlIT09XCJHRVRcIiYmIW9wdGlvbnMuZW11bGF0ZUpTT04pe3BhcmFtcy5wcm9jZXNzRGF0YT1mYWxzZX1pZihwYXJhbXMudHlwZT09PVwiUEFUQ0hcIiYmd2luZG93LkFjdGl2ZVhPYmplY3QmJiEod2luZG93LmV4dGVybmFsJiZ3aW5kb3cuZXh0ZXJuYWwubXNBY3RpdmVYRmlsdGVyaW5nRW5hYmxlZCkpe3BhcmFtcy54aHI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoXCJNaWNyb3NvZnQuWE1MSFRUUFwiKX19dmFyIHhocj1vcHRpb25zLnhocj1CYWNrYm9uZS5hamF4KF8uZXh0ZW5kKHBhcmFtcyxvcHRpb25zKSk7bW9kZWwudHJpZ2dlcihcInJlcXVlc3RcIixtb2RlbCx4aHIsb3B0aW9ucyk7cmV0dXJuIHhocn07dmFyIG1ldGhvZE1hcD17Y3JlYXRlOlwiUE9TVFwiLHVwZGF0ZTpcIlBVVFwiLHBhdGNoOlwiUEFUQ0hcIixcImRlbGV0ZVwiOlwiREVMRVRFXCIscmVhZDpcIkdFVFwifTtCYWNrYm9uZS5hamF4PWZ1bmN0aW9uKCl7cmV0dXJuIEJhY2tib25lLiQuYWpheC5hcHBseShCYWNrYm9uZS4kLGFyZ3VtZW50cyl9O3ZhciBSb3V0ZXI9QmFja2JvbmUuUm91dGVyPWZ1bmN0aW9uKG9wdGlvbnMpe29wdGlvbnN8fChvcHRpb25zPXt9KTtpZihvcHRpb25zLnJvdXRlcyl0aGlzLnJvdXRlcz1vcHRpb25zLnJvdXRlczt0aGlzLl9iaW5kUm91dGVzKCk7dGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIG9wdGlvbmFsUGFyYW09L1xcKCguKj8pXFwpL2c7dmFyIG5hbWVkUGFyYW09LyhcXChcXD8pPzpcXHcrL2c7dmFyIHNwbGF0UGFyYW09L1xcKlxcdysvZzt2YXIgZXNjYXBlUmVnRXhwPS9bXFwte31cXFtcXF0rPy4sXFxcXFxcXiR8I1xcc10vZztfLmV4dGVuZChSb3V0ZXIucHJvdG90eXBlLEV2ZW50cyx7aW5pdGlhbGl6ZTpmdW5jdGlvbigpe30scm91dGU6ZnVuY3Rpb24ocm91dGUsbmFtZSxjYWxsYmFjayl7aWYoIV8uaXNSZWdFeHAocm91dGUpKXJvdXRlPXRoaXMuX3JvdXRlVG9SZWdFeHAocm91dGUpO2lmKF8uaXNGdW5jdGlvbihuYW1lKSl7Y2FsbGJhY2s9bmFtZTtuYW1lPVwiXCJ9aWYoIWNhbGxiYWNrKWNhbGxiYWNrPXRoaXNbbmFtZV07dmFyIHJvdXRlcj10aGlzO0JhY2tib25lLmhpc3Rvcnkucm91dGUocm91dGUsZnVuY3Rpb24oZnJhZ21lbnQpe3ZhciBhcmdzPXJvdXRlci5fZXh0cmFjdFBhcmFtZXRlcnMocm91dGUsZnJhZ21lbnQpO2NhbGxiYWNrJiZjYWxsYmFjay5hcHBseShyb3V0ZXIsYXJncyk7cm91dGVyLnRyaWdnZXIuYXBwbHkocm91dGVyLFtcInJvdXRlOlwiK25hbWVdLmNvbmNhdChhcmdzKSk7cm91dGVyLnRyaWdnZXIoXCJyb3V0ZVwiLG5hbWUsYXJncyk7QmFja2JvbmUuaGlzdG9yeS50cmlnZ2VyKFwicm91dGVcIixyb3V0ZXIsbmFtZSxhcmdzKX0pO3JldHVybiB0aGlzfSxuYXZpZ2F0ZTpmdW5jdGlvbihmcmFnbWVudCxvcHRpb25zKXtCYWNrYm9uZS5oaXN0b3J5Lm5hdmlnYXRlKGZyYWdtZW50LG9wdGlvbnMpO3JldHVybiB0aGlzfSxfYmluZFJvdXRlczpmdW5jdGlvbigpe2lmKCF0aGlzLnJvdXRlcylyZXR1cm47dGhpcy5yb3V0ZXM9Xy5yZXN1bHQodGhpcyxcInJvdXRlc1wiKTt2YXIgcm91dGUscm91dGVzPV8ua2V5cyh0aGlzLnJvdXRlcyk7d2hpbGUoKHJvdXRlPXJvdXRlcy5wb3AoKSkhPW51bGwpe3RoaXMucm91dGUocm91dGUsdGhpcy5yb3V0ZXNbcm91dGVdKX19LF9yb3V0ZVRvUmVnRXhwOmZ1bmN0aW9uKHJvdXRlKXtyb3V0ZT1yb3V0ZS5yZXBsYWNlKGVzY2FwZVJlZ0V4cCxcIlxcXFwkJlwiKS5yZXBsYWNlKG9wdGlvbmFsUGFyYW0sXCIoPzokMSk/XCIpLnJlcGxhY2UobmFtZWRQYXJhbSxmdW5jdGlvbihtYXRjaCxvcHRpb25hbCl7cmV0dXJuIG9wdGlvbmFsP21hdGNoOlwiKFteL10rKVwifSkucmVwbGFjZShzcGxhdFBhcmFtLFwiKC4qPylcIik7cmV0dXJuIG5ldyBSZWdFeHAoXCJeXCIrcm91dGUrXCIkXCIpfSxfZXh0cmFjdFBhcmFtZXRlcnM6ZnVuY3Rpb24ocm91dGUsZnJhZ21lbnQpe3ZhciBwYXJhbXM9cm91dGUuZXhlYyhmcmFnbWVudCkuc2xpY2UoMSk7cmV0dXJuIF8ubWFwKHBhcmFtcyxmdW5jdGlvbihwYXJhbSl7cmV0dXJuIHBhcmFtP2RlY29kZVVSSUNvbXBvbmVudChwYXJhbSk6bnVsbH0pfX0pO3ZhciBIaXN0b3J5PUJhY2tib25lLkhpc3Rvcnk9ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZXJzPVtdO18uYmluZEFsbCh0aGlzLFwiY2hlY2tVcmxcIik7aWYodHlwZW9mIHdpbmRvdyE9PVwidW5kZWZpbmVkXCIpe3RoaXMubG9jYXRpb249d2luZG93LmxvY2F0aW9uO3RoaXMuaGlzdG9yeT13aW5kb3cuaGlzdG9yeX19O3ZhciByb3V0ZVN0cmlwcGVyPS9eWyNcXC9dfFxccyskL2c7dmFyIHJvb3RTdHJpcHBlcj0vXlxcLyt8XFwvKyQvZzt2YXIgaXNFeHBsb3Jlcj0vbXNpZSBbXFx3Ll0rLzt2YXIgdHJhaWxpbmdTbGFzaD0vXFwvJC87SGlzdG9yeS5zdGFydGVkPWZhbHNlO18uZXh0ZW5kKEhpc3RvcnkucHJvdG90eXBlLEV2ZW50cyx7aW50ZXJ2YWw6NTAsZ2V0SGFzaDpmdW5jdGlvbih3aW5kb3cpe3ZhciBtYXRjaD0od2luZG93fHx0aGlzKS5sb2NhdGlvbi5ocmVmLm1hdGNoKC8jKC4qKSQvKTtyZXR1cm4gbWF0Y2g/bWF0Y2hbMV06XCJcIn0sZ2V0RnJhZ21lbnQ6ZnVuY3Rpb24oZnJhZ21lbnQsZm9yY2VQdXNoU3RhdGUpe2lmKGZyYWdtZW50PT1udWxsKXtpZih0aGlzLl9oYXNQdXNoU3RhdGV8fCF0aGlzLl93YW50c0hhc2hDaGFuZ2V8fGZvcmNlUHVzaFN0YXRlKXtmcmFnbWVudD10aGlzLmxvY2F0aW9uLnBhdGhuYW1lO3ZhciByb290PXRoaXMucm9vdC5yZXBsYWNlKHRyYWlsaW5nU2xhc2gsXCJcIik7aWYoIWZyYWdtZW50LmluZGV4T2Yocm9vdCkpZnJhZ21lbnQ9ZnJhZ21lbnQuc3Vic3RyKHJvb3QubGVuZ3RoKX1lbHNle2ZyYWdtZW50PXRoaXMuZ2V0SGFzaCgpfX1yZXR1cm4gZnJhZ21lbnQucmVwbGFjZShyb3V0ZVN0cmlwcGVyLFwiXCIpfSxzdGFydDpmdW5jdGlvbihvcHRpb25zKXtpZihIaXN0b3J5LnN0YXJ0ZWQpdGhyb3cgbmV3IEVycm9yKFwiQmFja2JvbmUuaGlzdG9yeSBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWRcIik7SGlzdG9yeS5zdGFydGVkPXRydWU7dGhpcy5vcHRpb25zPV8uZXh0ZW5kKHt9LHtyb290OlwiL1wifSx0aGlzLm9wdGlvbnMsb3B0aW9ucyk7dGhpcy5yb290PXRoaXMub3B0aW9ucy5yb290O3RoaXMuX3dhbnRzSGFzaENoYW5nZT10aGlzLm9wdGlvbnMuaGFzaENoYW5nZSE9PWZhbHNlO3RoaXMuX3dhbnRzUHVzaFN0YXRlPSEhdGhpcy5vcHRpb25zLnB1c2hTdGF0ZTt0aGlzLl9oYXNQdXNoU3RhdGU9ISEodGhpcy5vcHRpb25zLnB1c2hTdGF0ZSYmdGhpcy5oaXN0b3J5JiZ0aGlzLmhpc3RvcnkucHVzaFN0YXRlKTt2YXIgZnJhZ21lbnQ9dGhpcy5nZXRGcmFnbWVudCgpO3ZhciBkb2NNb2RlPWRvY3VtZW50LmRvY3VtZW50TW9kZTt2YXIgb2xkSUU9aXNFeHBsb3Jlci5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkmJighZG9jTW9kZXx8ZG9jTW9kZTw9Nyk7dGhpcy5yb290PShcIi9cIit0aGlzLnJvb3QrXCIvXCIpLnJlcGxhY2Uocm9vdFN0cmlwcGVyLFwiL1wiKTtpZihvbGRJRSYmdGhpcy5fd2FudHNIYXNoQ2hhbmdlKXt0aGlzLmlmcmFtZT1CYWNrYm9uZS4kKCc8aWZyYW1lIHNyYz1cImphdmFzY3JpcHQ6MFwiIHRhYmluZGV4PVwiLTFcIiAvPicpLmhpZGUoKS5hcHBlbmRUbyhcImJvZHlcIilbMF0uY29udGVudFdpbmRvdzt0aGlzLm5hdmlnYXRlKGZyYWdtZW50KX1pZih0aGlzLl9oYXNQdXNoU3RhdGUpe0JhY2tib25lLiQod2luZG93KS5vbihcInBvcHN0YXRlXCIsdGhpcy5jaGVja1VybCl9ZWxzZSBpZih0aGlzLl93YW50c0hhc2hDaGFuZ2UmJlwib25oYXNoY2hhbmdlXCJpbiB3aW5kb3cmJiFvbGRJRSl7QmFja2JvbmUuJCh3aW5kb3cpLm9uKFwiaGFzaGNoYW5nZVwiLHRoaXMuY2hlY2tVcmwpfWVsc2UgaWYodGhpcy5fd2FudHNIYXNoQ2hhbmdlKXt0aGlzLl9jaGVja1VybEludGVydmFsPXNldEludGVydmFsKHRoaXMuY2hlY2tVcmwsdGhpcy5pbnRlcnZhbCl9dGhpcy5mcmFnbWVudD1mcmFnbWVudDt2YXIgbG9jPXRoaXMubG9jYXRpb247dmFyIGF0Um9vdD1sb2MucGF0aG5hbWUucmVwbGFjZSgvW15cXC9dJC8sXCIkJi9cIik9PT10aGlzLnJvb3Q7aWYodGhpcy5fd2FudHNIYXNoQ2hhbmdlJiZ0aGlzLl93YW50c1B1c2hTdGF0ZSYmIXRoaXMuX2hhc1B1c2hTdGF0ZSYmIWF0Um9vdCl7dGhpcy5mcmFnbWVudD10aGlzLmdldEZyYWdtZW50KG51bGwsdHJ1ZSk7dGhpcy5sb2NhdGlvbi5yZXBsYWNlKHRoaXMucm9vdCt0aGlzLmxvY2F0aW9uLnNlYXJjaCtcIiNcIit0aGlzLmZyYWdtZW50KTtyZXR1cm4gdHJ1ZX1lbHNlIGlmKHRoaXMuX3dhbnRzUHVzaFN0YXRlJiZ0aGlzLl9oYXNQdXNoU3RhdGUmJmF0Um9vdCYmbG9jLmhhc2gpe3RoaXMuZnJhZ21lbnQ9dGhpcy5nZXRIYXNoKCkucmVwbGFjZShyb3V0ZVN0cmlwcGVyLFwiXCIpO3RoaXMuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsdGhpcy5yb290K3RoaXMuZnJhZ21lbnQrbG9jLnNlYXJjaCl9aWYoIXRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIHRoaXMubG9hZFVybCgpfSxzdG9wOmZ1bmN0aW9uKCl7QmFja2JvbmUuJCh3aW5kb3cpLm9mZihcInBvcHN0YXRlXCIsdGhpcy5jaGVja1VybCkub2ZmKFwiaGFzaGNoYW5nZVwiLHRoaXMuY2hlY2tVcmwpO2NsZWFySW50ZXJ2YWwodGhpcy5fY2hlY2tVcmxJbnRlcnZhbCk7SGlzdG9yeS5zdGFydGVkPWZhbHNlfSxyb3V0ZTpmdW5jdGlvbihyb3V0ZSxjYWxsYmFjayl7dGhpcy5oYW5kbGVycy51bnNoaWZ0KHtyb3V0ZTpyb3V0ZSxjYWxsYmFjazpjYWxsYmFja30pfSxjaGVja1VybDpmdW5jdGlvbihlKXt2YXIgY3VycmVudD10aGlzLmdldEZyYWdtZW50KCk7aWYoY3VycmVudD09PXRoaXMuZnJhZ21lbnQmJnRoaXMuaWZyYW1lKXtjdXJyZW50PXRoaXMuZ2V0RnJhZ21lbnQodGhpcy5nZXRIYXNoKHRoaXMuaWZyYW1lKSl9aWYoY3VycmVudD09PXRoaXMuZnJhZ21lbnQpcmV0dXJuIGZhbHNlO2lmKHRoaXMuaWZyYW1lKXRoaXMubmF2aWdhdGUoY3VycmVudCk7dGhpcy5sb2FkVXJsKCl8fHRoaXMubG9hZFVybCh0aGlzLmdldEhhc2goKSl9LGxvYWRVcmw6ZnVuY3Rpb24oZnJhZ21lbnRPdmVycmlkZSl7dmFyIGZyYWdtZW50PXRoaXMuZnJhZ21lbnQ9dGhpcy5nZXRGcmFnbWVudChmcmFnbWVudE92ZXJyaWRlKTt2YXIgbWF0Y2hlZD1fLmFueSh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKGhhbmRsZXIpe2lmKGhhbmRsZXIucm91dGUudGVzdChmcmFnbWVudCkpe2hhbmRsZXIuY2FsbGJhY2soZnJhZ21lbnQpO3JldHVybiB0cnVlfX0pO3JldHVybiBtYXRjaGVkfSxuYXZpZ2F0ZTpmdW5jdGlvbihmcmFnbWVudCxvcHRpb25zKXtpZighSGlzdG9yeS5zdGFydGVkKXJldHVybiBmYWxzZTtpZighb3B0aW9uc3x8b3B0aW9ucz09PXRydWUpb3B0aW9ucz17dHJpZ2dlcjpvcHRpb25zfTtmcmFnbWVudD10aGlzLmdldEZyYWdtZW50KGZyYWdtZW50fHxcIlwiKTtpZih0aGlzLmZyYWdtZW50PT09ZnJhZ21lbnQpcmV0dXJuO3RoaXMuZnJhZ21lbnQ9ZnJhZ21lbnQ7dmFyIHVybD10aGlzLnJvb3QrZnJhZ21lbnQ7aWYodGhpcy5faGFzUHVzaFN0YXRlKXt0aGlzLmhpc3Rvcnlbb3B0aW9ucy5yZXBsYWNlP1wicmVwbGFjZVN0YXRlXCI6XCJwdXNoU3RhdGVcIl0oe30sZG9jdW1lbnQudGl0bGUsdXJsKX1lbHNlIGlmKHRoaXMuX3dhbnRzSGFzaENoYW5nZSl7dGhpcy5fdXBkYXRlSGFzaCh0aGlzLmxvY2F0aW9uLGZyYWdtZW50LG9wdGlvbnMucmVwbGFjZSk7aWYodGhpcy5pZnJhbWUmJmZyYWdtZW50IT09dGhpcy5nZXRGcmFnbWVudCh0aGlzLmdldEhhc2godGhpcy5pZnJhbWUpKSl7aWYoIW9wdGlvbnMucmVwbGFjZSl0aGlzLmlmcmFtZS5kb2N1bWVudC5vcGVuKCkuY2xvc2UoKTt0aGlzLl91cGRhdGVIYXNoKHRoaXMuaWZyYW1lLmxvY2F0aW9uLGZyYWdtZW50LG9wdGlvbnMucmVwbGFjZSl9fWVsc2V7cmV0dXJuIHRoaXMubG9jYXRpb24uYXNzaWduKHVybCl9aWYob3B0aW9ucy50cmlnZ2VyKXRoaXMubG9hZFVybChmcmFnbWVudCl9LF91cGRhdGVIYXNoOmZ1bmN0aW9uKGxvY2F0aW9uLGZyYWdtZW50LHJlcGxhY2Upe2lmKHJlcGxhY2Upe3ZhciBocmVmPWxvY2F0aW9uLmhyZWYucmVwbGFjZSgvKGphdmFzY3JpcHQ6fCMpLiokLyxcIlwiKTtsb2NhdGlvbi5yZXBsYWNlKGhyZWYrXCIjXCIrZnJhZ21lbnQpfWVsc2V7bG9jYXRpb24uaGFzaD1cIiNcIitmcmFnbWVudH19fSk7QmFja2JvbmUuaGlzdG9yeT1uZXcgSGlzdG9yeTt2YXIgZXh0ZW5kPWZ1bmN0aW9uKHByb3RvUHJvcHMsc3RhdGljUHJvcHMpe3ZhciBwYXJlbnQ9dGhpczt2YXIgY2hpbGQ7aWYocHJvdG9Qcm9wcyYmXy5oYXMocHJvdG9Qcm9wcyxcImNvbnN0cnVjdG9yXCIpKXtjaGlsZD1wcm90b1Byb3BzLmNvbnN0cnVjdG9yfWVsc2V7Y2hpbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gcGFyZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19Xy5leHRlbmQoY2hpbGQscGFyZW50LHN0YXRpY1Byb3BzKTt2YXIgU3Vycm9nYXRlPWZ1bmN0aW9uKCl7dGhpcy5jb25zdHJ1Y3Rvcj1jaGlsZH07U3Vycm9nYXRlLnByb3RvdHlwZT1wYXJlbnQucHJvdG90eXBlO2NoaWxkLnByb3RvdHlwZT1uZXcgU3Vycm9nYXRlO2lmKHByb3RvUHJvcHMpXy5leHRlbmQoY2hpbGQucHJvdG90eXBlLHByb3RvUHJvcHMpO2NoaWxkLl9fc3VwZXJfXz1wYXJlbnQucHJvdG90eXBlO3JldHVybiBjaGlsZH07TW9kZWwuZXh0ZW5kPUNvbGxlY3Rpb24uZXh0ZW5kPVJvdXRlci5leHRlbmQ9Vmlldy5leHRlbmQ9SGlzdG9yeS5leHRlbmQ9ZXh0ZW5kO3ZhciB1cmxFcnJvcj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignQSBcInVybFwiIHByb3BlcnR5IG9yIGZ1bmN0aW9uIG11c3QgYmUgc3BlY2lmaWVkJyl9O3ZhciB3cmFwRXJyb3I9ZnVuY3Rpb24obW9kZWwsb3B0aW9ucyl7dmFyIGVycm9yPW9wdGlvbnMuZXJyb3I7b3B0aW9ucy5lcnJvcj1mdW5jdGlvbihyZXNwKXtpZihlcnJvcillcnJvcihtb2RlbCxyZXNwLG9wdGlvbnMpO21vZGVsLnRyaWdnZXIoXCJlcnJvclwiLG1vZGVsLHJlc3Asb3B0aW9ucyl9fX0pLmNhbGwodGhpcyk7XG4vKlxuLy9AIHNvdXJjZU1hcHBpbmdVUkw9YmFja2JvbmUtbWluLm1hcFxuKi8iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2VzNi1wcm9taXNlJykuUHJvbWlzZTtcbiIsIi8qIVxuICogQG92ZXJ2aWV3IGVzNi1wcm9taXNlIC0gYSB0aW55IGltcGxlbWVudGF0aW9uIG9mIFByb21pc2VzL0ErLlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTQgWWVodWRhIEthdHosIFRvbSBEYWxlLCBTdGVmYW4gUGVubmVyIGFuZCBjb250cmlidXRvcnMgKENvbnZlcnNpb24gdG8gRVM2IEFQSSBieSBKYWtlIEFyY2hpYmFsZClcbiAqIEBsaWNlbnNlICAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2VcbiAqICAgICAgICAgICAgU2VlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zdGVmYW5wZW5uZXIvZXM2LXByb21pc2UvbWFzdGVyL0xJQ0VOU0VcbiAqIEB2ZXJzaW9uICAgMy4zLjFcbiAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIChnbG9iYWwuRVM2UHJvbWlzZSA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gb2JqZWN0T3JGdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxudmFyIF9pc0FycmF5ID0gdW5kZWZpbmVkO1xuaWYgKCFBcnJheS5pc0FycmF5KSB7XG4gIF9pc0FycmF5ID0gZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xufSBlbHNlIHtcbiAgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xufVxuXG52YXIgaXNBcnJheSA9IF9pc0FycmF5O1xuXG52YXIgbGVuID0gMDtcbnZhciB2ZXJ0eE5leHQgPSB1bmRlZmluZWQ7XG52YXIgY3VzdG9tU2NoZWR1bGVyRm4gPSB1bmRlZmluZWQ7XG5cbnZhciBhc2FwID0gZnVuY3Rpb24gYXNhcChjYWxsYmFjaywgYXJnKSB7XG4gIHF1ZXVlW2xlbl0gPSBjYWxsYmFjaztcbiAgcXVldWVbbGVuICsgMV0gPSBhcmc7XG4gIGxlbiArPSAyO1xuICBpZiAobGVuID09PSAyKSB7XG4gICAgLy8gSWYgbGVuIGlzIDIsIHRoYXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHNjaGVkdWxlIGFuIGFzeW5jIGZsdXNoLlxuICAgIC8vIElmIGFkZGl0aW9uYWwgY2FsbGJhY2tzIGFyZSBxdWV1ZWQgYmVmb3JlIHRoZSBxdWV1ZSBpcyBmbHVzaGVkLCB0aGV5XG4gICAgLy8gd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhpcyBmbHVzaCB0aGF0IHdlIGFyZSBzY2hlZHVsaW5nLlxuICAgIGlmIChjdXN0b21TY2hlZHVsZXJGbikge1xuICAgICAgY3VzdG9tU2NoZWR1bGVyRm4oZmx1c2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZUZsdXNoKCk7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBzZXRTY2hlZHVsZXIoc2NoZWR1bGVGbikge1xuICBjdXN0b21TY2hlZHVsZXJGbiA9IHNjaGVkdWxlRm47XG59XG5cbmZ1bmN0aW9uIHNldEFzYXAoYXNhcEZuKSB7XG4gIGFzYXAgPSBhc2FwRm47XG59XG5cbnZhciBicm93c2VyV2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XG52YXIgYnJvd3Nlckdsb2JhbCA9IGJyb3dzZXJXaW5kb3cgfHwge307XG52YXIgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIgPSBicm93c2VyR2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgYnJvd3Nlckdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGlzTm9kZSA9IHR5cGVvZiBzZWxmID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHt9KS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXSc7XG5cbi8vIHRlc3QgZm9yIHdlYiB3b3JrZXIgYnV0IG5vdCBpbiBJRTEwXG52YXIgaXNXb3JrZXIgPSB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBub2RlXG5mdW5jdGlvbiB1c2VOZXh0VGljaygpIHtcbiAgLy8gbm9kZSB2ZXJzaW9uIDAuMTAueCBkaXNwbGF5cyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2hlbiBuZXh0VGljayBpcyB1c2VkIHJlY3Vyc2l2ZWx5XG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY3Vqb2pzL3doZW4vaXNzdWVzLzQxMCBmb3IgZGV0YWlsc1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgfTtcbn1cblxuLy8gdmVydHhcbmZ1bmN0aW9uIHVzZVZlcnR4VGltZXIoKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmVydHhOZXh0KGZsdXNoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpO1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBub2RlLmRhdGEgPSBpdGVyYXRpb25zID0gKytpdGVyYXRpb25zICUgMjtcbiAgfTtcbn1cblxuLy8gd2ViIHdvcmtlclxuZnVuY3Rpb24gdXNlTWVzc2FnZUNoYW5uZWwoKSB7XG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZmx1c2g7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVNldFRpbWVvdXQoKSB7XG4gIC8vIFN0b3JlIHNldFRpbWVvdXQgcmVmZXJlbmNlIHNvIGVzNi1wcm9taXNlIHdpbGwgYmUgdW5hZmZlY3RlZCBieVxuICAvLyBvdGhlciBjb2RlIG1vZGlmeWluZyBzZXRUaW1lb3V0IChsaWtlIHNpbm9uLnVzZUZha2VUaW1lcnMoKSlcbiAgdmFyIGdsb2JhbFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnbG9iYWxTZXRUaW1lb3V0KGZsdXNoLCAxKTtcbiAgfTtcbn1cblxudmFyIHF1ZXVlID0gbmV3IEFycmF5KDEwMDApO1xuZnVuY3Rpb24gZmx1c2goKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZVtpXTtcbiAgICB2YXIgYXJnID0gcXVldWVbaSArIDFdO1xuXG4gICAgY2FsbGJhY2soYXJnKTtcblxuICAgIHF1ZXVlW2ldID0gdW5kZWZpbmVkO1xuICAgIHF1ZXVlW2kgKyAxXSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRWZXJ0eCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgciA9IHJlcXVpcmU7XG4gICAgdmFyIHZlcnR4ID0gcigndmVydHgnKTtcbiAgICB2ZXJ0eE5leHQgPSB2ZXJ0eC5ydW5Pbkxvb3AgfHwgdmVydHgucnVuT25Db250ZXh0O1xuICAgIHJldHVybiB1c2VWZXJ0eFRpbWVyKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdXNlU2V0VGltZW91dCgpO1xuICB9XG59XG5cbnZhciBzY2hlZHVsZUZsdXNoID0gdW5kZWZpbmVkO1xuLy8gRGVjaWRlIHdoYXQgYXN5bmMgbWV0aG9kIHRvIHVzZSB0byB0cmlnZ2VyaW5nIHByb2Nlc3Npbmcgb2YgcXVldWVkIGNhbGxiYWNrczpcbmlmIChpc05vZGUpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU5leHRUaWNrKCk7XG59IGVsc2UgaWYgKEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG59IGVsc2UgaWYgKGlzV29ya2VyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNZXNzYWdlQ2hhbm5lbCgpO1xufSBlbHNlIGlmIChicm93c2VyV2luZG93ID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IGF0dGVtcHRWZXJ0eCgpO1xufSBlbHNlIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZVNldFRpbWVvdXQoKTtcbn1cblxuZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX2FyZ3VtZW50cyA9IGFyZ3VtZW50cztcblxuICB2YXIgcGFyZW50ID0gdGhpcztcblxuICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoY2hpbGRbUFJPTUlTRV9JRF0gPT09IHVuZGVmaW5lZCkge1xuICAgIG1ha2VQcm9taXNlKGNoaWxkKTtcbiAgfVxuXG4gIHZhciBfc3RhdGUgPSBwYXJlbnQuX3N0YXRlO1xuXG4gIGlmIChfc3RhdGUpIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNhbGxiYWNrID0gX2FyZ3VtZW50c1tfc3RhdGUgLSAxXTtcbiAgICAgIGFzYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2soX3N0YXRlLCBjaGlsZCwgY2FsbGJhY2ssIHBhcmVudC5fcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH0gZWxzZSB7XG4gICAgc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlc29sdmVgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgcmVzb2x2ZWQgd2l0aCB0aGVcbiAgcGFzc2VkIGB2YWx1ZWAuIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICByZXNvbHZlKDEpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3VyIGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgxKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIHJlc29sdmVcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gdmFsdWUgdmFsdWUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGhcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSBmdWxmaWxsZWQgd2l0aCB0aGUgZ2l2ZW5cbiAgYHZhbHVlYFxuKi9cbmZ1bmN0aW9uIHJlc29sdmUob2JqZWN0KSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QuY29uc3RydWN0b3IgPT09IENvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVzb2x2ZShwcm9taXNlLCBvYmplY3QpO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIFBST01JU0VfSUQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIFBFTkRJTkcgPSB2b2lkIDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG5cbnZhciBHRVRfVEhFTl9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiBzZWxmRnVsZmlsbG1lbnQoKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKTtcbn1cblxuZnVuY3Rpb24gY2Fubm90UmV0dXJuT3duKCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcignQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLicpO1xufVxuXG5mdW5jdGlvbiBnZXRUaGVuKHByb21pc2UpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJvbWlzZS50aGVuO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7XG4gICAgcmV0dXJuIEdFVF9USEVOX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRoZW4odGhlbiwgdmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcikge1xuICB0cnkge1xuICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSwgdGhlbikge1xuICBhc2FwKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgdmFyIHNlYWxlZCA9IGZhbHNlO1xuICAgIHZhciBlcnJvciA9IHRyeVRoZW4odGhlbiwgdGhlbmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoc2VhbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlYWxlZCA9IHRydWU7XG5cbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9LCAnU2V0dGxlOiAnICsgKHByb21pc2UuX2xhYmVsIHx8ICcgdW5rbm93biBwcm9taXNlJykpO1xuXG4gICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9XG4gIH0sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSkge1xuICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBGVUxGSUxMRUQpIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2UgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZSh0aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUsIHRoZW4kJCkge1xuICBpZiAobWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3RvciA9PT0gcHJvbWlzZS5jb25zdHJ1Y3RvciAmJiB0aGVuJCQgPT09IHRoZW4gJiYgbWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3Rvci5yZXNvbHZlID09PSByZXNvbHZlKSB7XG4gICAgaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoZW4kJCA9PT0gR0VUX1RIRU5fRVJST1IpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgR0VUX1RIRU5fRVJST1IuZXJyb3IpO1xuICAgIH0gZWxzZSBpZiAodGhlbiQkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoZW4kJCkpIHtcbiAgICAgIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHNlbGZGdWxmaWxsbWVudCgpKTtcbiAgfSBlbHNlIGlmIChvYmplY3RPckZ1bmN0aW9uKHZhbHVlKSkge1xuICAgIGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUsIGdldFRoZW4odmFsdWUpKTtcbiAgfSBlbHNlIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdWJsaXNoUmVqZWN0aW9uKHByb21pc2UpIHtcbiAgaWYgKHByb21pc2UuX29uZXJyb3IpIHtcbiAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7XG4gIH1cblxuICBwdWJsaXNoKHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHByb21pc2UsIHZhbHVlKSB7XG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb21pc2UuX3Jlc3VsdCA9IHZhbHVlO1xuICBwcm9taXNlLl9zdGF0ZSA9IEZVTEZJTExFRDtcblxuICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwcm9taXNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbikge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvbWlzZS5fc3RhdGUgPSBSRUpFQ1RFRDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gcmVhc29uO1xuXG4gIGFzYXAocHVibGlzaFJlamVjdGlvbiwgcHJvbWlzZSk7XG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX3N1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgdmFyIGxlbmd0aCA9IF9zdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDtcblxuICBfc3Vic2NyaWJlcnNbbGVuZ3RoXSA9IGNoaWxkO1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgRlVMRklMTEVEXSA9IG9uRnVsZmlsbG1lbnQ7XG4gIF9zdWJzY3JpYmVyc1tsZW5ndGggKyBSRUpFQ1RFRF0gPSBvblJlamVjdGlvbjtcblxuICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICBhc2FwKHB1Ymxpc2gsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaChwcm9taXNlKSB7XG4gIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICB2YXIgc2V0dGxlZCA9IHByb21pc2UuX3N0YXRlO1xuXG4gIGlmIChzdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY2hpbGQgPSB1bmRlZmluZWQsXG4gICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZCxcbiAgICAgIGRldGFpbCA9IHByb21pc2UuX3Jlc3VsdDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgY2hpbGQgPSBzdWJzY3JpYmVyc1tpXTtcbiAgICBjYWxsYmFjayA9IHN1YnNjcmliZXJzW2kgKyBzZXR0bGVkXTtcblxuICAgIGlmIChjaGlsZCkge1xuICAgICAgaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG59XG5cbmZ1bmN0aW9uIEVycm9yT2JqZWN0KCkge1xuICB0aGlzLmVycm9yID0gbnVsbDtcbn1cblxudmFyIFRSWV9DQVRDSF9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGRldGFpbCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlO1xuICAgIHJldHVybiBUUllfQ0FUQ0hfRVJST1I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgcHJvbWlzZSwgY2FsbGJhY2ssIGRldGFpbCkge1xuICB2YXIgaGFzQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKGNhbGxiYWNrKSxcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkLFxuICAgICAgZXJyb3IgPSB1bmRlZmluZWQsXG4gICAgICBzdWNjZWVkZWQgPSB1bmRlZmluZWQsXG4gICAgICBmYWlsZWQgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGhhc0NhbGxiYWNrKSB7XG4gICAgdmFsdWUgPSB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gVFJZX0NBVENIX0VSUk9SKSB7XG4gICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgZXJyb3IgPSB2YWx1ZS5lcnJvcjtcbiAgICAgIHZhbHVlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGRldGFpbDtcbiAgICBzdWNjZWVkZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgLy8gbm9vcFxuICB9IGVsc2UgaWYgKGhhc0NhbGxiYWNrICYmIHN1Y2NlZWRlZCkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZmFpbGVkKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHNldHRsZWQgPT09IEZVTEZJTExFRCkge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplUHJvbWlzZShwcm9taXNlLCByZXNvbHZlcikge1xuICB0cnkge1xuICAgIHJlc29sdmVyKGZ1bmN0aW9uIHJlc29sdmVQcm9taXNlKHZhbHVlKSB7XG4gICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIF9yZWplY3QocHJvbWlzZSwgZSk7XG4gIH1cbn1cblxudmFyIGlkID0gMDtcbmZ1bmN0aW9uIG5leHRJZCgpIHtcbiAgcmV0dXJuIGlkKys7XG59XG5cbmZ1bmN0aW9uIG1ha2VQcm9taXNlKHByb21pc2UpIHtcbiAgcHJvbWlzZVtQUk9NSVNFX0lEXSA9IGlkKys7XG4gIHByb21pc2UuX3N0YXRlID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9yZXN1bHQgPSB1bmRlZmluZWQ7XG4gIHByb21pc2UuX3N1YnNjcmliZXJzID0gW107XG59XG5cbmZ1bmN0aW9uIEVudW1lcmF0b3IoQ29uc3RydWN0b3IsIGlucHV0KSB7XG4gIHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgdGhpcy5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuXG4gIGlmICghdGhpcy5wcm9taXNlW1BST01JU0VfSURdKSB7XG4gICAgbWFrZVByb21pc2UodGhpcy5wcm9taXNlKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5sZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgdGhpcy5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMDtcbiAgICAgIHRoaXMuX2VudW1lcmF0ZSgpO1xuICAgICAgaWYgKHRoaXMuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICBmdWxmaWxsKHRoaXMucHJvbWlzZSwgdGhpcy5fcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgX3JlamVjdCh0aGlzLnByb21pc2UsIHZhbGlkYXRpb25FcnJvcigpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0aW9uRXJyb3IoKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheScpO1xufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICB2YXIgX2lucHV0ID0gdGhpcy5faW5wdXQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IHRoaXMuX3N0YXRlID09PSBQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHRoaXMuX2VhY2hFbnRyeShfaW5wdXRbaV0sIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24gKGVudHJ5LCBpKSB7XG4gIHZhciBjID0gdGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcbiAgdmFyIHJlc29sdmUkJCA9IGMucmVzb2x2ZTtcblxuICBpZiAocmVzb2x2ZSQkID09PSByZXNvbHZlKSB7XG4gICAgdmFyIF90aGVuID0gZ2V0VGhlbihlbnRyeSk7XG5cbiAgICBpZiAoX3RoZW4gPT09IHRoZW4gJiYgZW50cnkuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgICB0aGlzLl9zZXR0bGVkQXQoZW50cnkuX3N0YXRlLCBpLCBlbnRyeS5fcmVzdWx0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhlbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fcmVtYWluaW5nLS07XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGMgPT09IFByb21pc2UpIHtcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IGMobm9vcCk7XG4gICAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIGVudHJ5LCBfdGhlbik7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQocHJvbWlzZSwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbiAocmVzb2x2ZSQkKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlJCQoZW50cnkpO1xuICAgICAgfSksIGkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl93aWxsU2V0dGxlQXQocmVzb2x2ZSQkKGVudHJ5KSwgaSk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9zZXR0bGVkQXQgPSBmdW5jdGlvbiAoc3RhdGUsIGksIHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gUEVORElORykge1xuICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuXG4gICAgaWYgKHN0YXRlID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc3VsdFtpXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbiAocHJvbWlzZSwgaSkge1xuICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgc3Vic2NyaWJlKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVudW1lcmF0b3IuX3NldHRsZWRBdChGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoUkVKRUNURUQsIGksIHJlYXNvbik7XG4gIH0pO1xufTtcblxuLyoqXG4gIGBQcm9taXNlLmFsbGAgYWNjZXB0cyBhbiBhcnJheSBvZiBwcm9taXNlcywgYW5kIHJldHVybnMgYSBuZXcgcHJvbWlzZSB3aGljaFxuICBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBmdWxmaWxsbWVudCB2YWx1ZXMgZm9yIHRoZSBwYXNzZWQgcHJvbWlzZXMsIG9yXG4gIHJlamVjdGVkIHdpdGggdGhlIHJlYXNvbiBvZiB0aGUgZmlyc3QgcGFzc2VkIHByb21pc2UgdG8gYmUgcmVqZWN0ZWQuIEl0IGNhc3RzIGFsbFxuICBlbGVtZW50cyBvZiB0aGUgcGFzc2VkIGl0ZXJhYmxlIHRvIHByb21pc2VzIGFzIGl0IHJ1bnMgdGhpcyBhbGdvcml0aG0uXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlc29sdmUoMik7XG4gIGxldCBwcm9taXNlMyA9IHJlc29sdmUoMyk7XG4gIGxldCBwcm9taXNlcyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdO1xuXG4gIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXtcbiAgICAvLyBUaGUgYXJyYXkgaGVyZSB3b3VsZCBiZSBbIDEsIDIsIDMgXTtcbiAgfSk7XG4gIGBgYFxuXG4gIElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBnaXZlbiB0byBgYWxsYCBhcmUgcmVqZWN0ZWQsIHRoZSBmaXJzdCBwcm9taXNlXG4gIHRoYXQgaXMgcmVqZWN0ZWQgd2lsbCBiZSBnaXZlbiBhcyBhbiBhcmd1bWVudCB0byB0aGUgcmV0dXJuZWQgcHJvbWlzZXMnc1xuICByZWplY3Rpb24gaGFuZGxlci4gRm9yIGV4YW1wbGU6XG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlamVjdChuZXcgRXJyb3IoXCIyXCIpKTtcbiAgbGV0IHByb21pc2UzID0gcmVqZWN0KG5ldyBFcnJvcihcIjNcIikpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gQ29kZSBoZXJlIG5ldmVyIHJ1bnMgYmVjYXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQgcHJvbWlzZXMhXG4gIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgLy8gZXJyb3IubWVzc2FnZSA9PT0gXCIyXCJcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgYWxsXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBcnJheX0gZW50cmllcyBhcnJheSBvZiBwcm9taXNlc1xuICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIGBwcm9taXNlc2AgaGF2ZSBiZWVuXG4gIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQgaWYgYW55IG9mIHRoZW0gYmVjb21lIHJlamVjdGVkLlxuICBAc3RhdGljXG4qL1xuZnVuY3Rpb24gYWxsKGVudHJpZXMpIHtcbiAgcmV0dXJuIG5ldyBFbnVtZXJhdG9yKHRoaXMsIGVudHJpZXMpLnByb21pc2U7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yYWNlYCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2ggaXMgc2V0dGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlXG4gIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIHNldHRsZS5cblxuICBFeGFtcGxlOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMicpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIHJlc3VsdCA9PT0gJ3Byb21pc2UgMicgYmVjYXVzZSBpdCB3YXMgcmVzb2x2ZWQgYmVmb3JlIHByb21pc2UxXG4gICAgLy8gd2FzIHJlc29sdmVkLlxuICB9KTtcbiAgYGBgXG5cbiAgYFByb21pc2UucmFjZWAgaXMgZGV0ZXJtaW5pc3RpYyBpbiB0aGF0IG9ubHkgdGhlIHN0YXRlIG9mIHRoZSBmaXJzdFxuICBzZXR0bGVkIHByb21pc2UgbWF0dGVycy4gRm9yIGV4YW1wbGUsIGV2ZW4gaWYgb3RoZXIgcHJvbWlzZXMgZ2l2ZW4gdG8gdGhlXG4gIGBwcm9taXNlc2AgYXJyYXkgYXJndW1lbnQgYXJlIHJlc29sdmVkLCBidXQgdGhlIGZpcnN0IHNldHRsZWQgcHJvbWlzZSBoYXNcbiAgYmVjb21lIHJlamVjdGVkIGJlZm9yZSB0aGUgb3RoZXIgcHJvbWlzZXMgYmVjYW1lIGZ1bGZpbGxlZCwgdGhlIHJldHVybmVkXG4gIHByb21pc2Ugd2lsbCBiZWNvbWUgcmVqZWN0ZWQ6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMScpO1xuICAgIH0sIDIwMCk7XG4gIH0pO1xuXG4gIGxldCBwcm9taXNlMiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcigncHJvbWlzZSAyJykpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgcHJvbWlzZSAyIGJlY2FtZSByZWplY3RlZCBiZWZvcmVcbiAgICAvLyBwcm9taXNlIDEgYmVjYW1lIGZ1bGZpbGxlZFxuICB9KTtcbiAgYGBgXG5cbiAgQW4gZXhhbXBsZSByZWFsLXdvcmxkIHVzZSBjYXNlIGlzIGltcGxlbWVudGluZyB0aW1lb3V0czpcblxuICBgYGBqYXZhc2NyaXB0XG4gIFByb21pc2UucmFjZShbYWpheCgnZm9vLmpzb24nKSwgdGltZW91dCg1MDAwKV0pXG4gIGBgYFxuXG4gIEBtZXRob2QgcmFjZVxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IHByb21pc2VzIGFycmF5IG9mIHByb21pc2VzIHRvIG9ic2VydmVcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2Ugd2hpY2ggc2V0dGxlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGZpcnN0IHBhc3NlZFxuICBwcm9taXNlIHRvIHNldHRsZS5cbiovXG5mdW5jdGlvbiByYWNlKGVudHJpZXMpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuICBpZiAoIWlzQXJyYXkoZW50cmllcykpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChfLCByZWplY3QpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLicpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgQ29uc3RydWN0b3IucmVzb2x2ZShlbnRyaWVzW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlamVjdGAgcmV0dXJucyBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgcGFzc2VkIGByZWFzb25gLlxuICBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZWplY3RcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gcmVhc29uIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCB3aXRoLlxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIHRoZSBnaXZlbiBgcmVhc29uYC5cbiovXG5mdW5jdGlvbiByZWplY3QocmVhc29uKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBuZWVkc1Jlc29sdmVyKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yJyk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzTmV3KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xufVxuXG4vKipcbiAgUHJvbWlzZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZVxuICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb25cbiAgd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgVGVybWlub2xvZ3lcbiAgLS0tLS0tLS0tLS1cblxuICAtIGBwcm9taXNlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gd2l0aCBhIGB0aGVuYCBtZXRob2Qgd2hvc2UgYmVoYXZpb3IgY29uZm9ybXMgdG8gdGhpcyBzcGVjaWZpY2F0aW9uLlxuICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuXG4gIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5jbHVkaW5nIHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS5cbiAgLSBgZXhjZXB0aW9uYCBpcyBhIHZhbHVlIHRoYXQgaXMgdGhyb3duIHVzaW5nIHRoZSB0aHJvdyBzdGF0ZW1lbnQuXG4gIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC5cbiAgLSBgc2V0dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBwcm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG5cbiAgQSBwcm9taXNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBwZW5kaW5nLCBmdWxmaWxsZWQsIG9yIHJlamVjdGVkLlxuXG4gIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkXG4gIHN0YXRlLiAgUHJvbWlzZXMgdGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5kIGFyZSBpbiB0aGVcbiAgcmVqZWN0ZWQgc3RhdGUuICBBIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5ldmVyIGEgdGhlbmFibGUuXG5cbiAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhXG4gIHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3NcbiAgc2V0dGxlZCBzdGF0ZS4gIFNvIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyB3aWxsXG4gIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGxcbiAgaXRzZWxmIGZ1bGZpbGwuXG5cblxuICBCYXNpYyBVc2FnZTpcbiAgLS0tLS0tLS0tLS0tXG5cbiAgYGBganNcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAvLyBvbiBzdWNjZXNzXG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG5cbiAgICAvLyBvbiBmYWlsdXJlXG4gICAgcmVqZWN0KHJlYXNvbik7XG4gIH0pO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgQWR2YW5jZWQgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLS0tLVxuXG4gIFByb21pc2VzIHNoaW5lIHdoZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb25zIHN1Y2ggYXNcbiAgYFhNTEh0dHBSZXF1ZXN0YHMuXG5cbiAgYGBganNcbiAgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICAgIGxldCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHhoci5zZW5kKCk7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IHRoaXMuRE9ORSkge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdnZXRKU09OOiBgJyArIHVybCArICdgIGZhaWxlZCB3aXRoIHN0YXR1czogWycgKyB0aGlzLnN0YXR1cyArICddJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEpTT04oJy9wb3N0cy5qc29uJykudGhlbihmdW5jdGlvbihqc29uKSB7XG4gICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgLy8gb24gcmVqZWN0aW9uXG4gIH0pO1xuICBgYGBcblxuICBVbmxpa2UgY2FsbGJhY2tzLCBwcm9taXNlcyBhcmUgZ3JlYXQgY29tcG9zYWJsZSBwcmltaXRpdmVzLlxuXG4gIGBgYGpzXG4gIFByb21pc2UuYWxsKFtcbiAgICBnZXRKU09OKCcvcG9zdHMnKSxcbiAgICBnZXRKU09OKCcvY29tbWVudHMnKVxuICBdKS50aGVuKGZ1bmN0aW9uKHZhbHVlcyl7XG4gICAgdmFsdWVzWzBdIC8vID0+IHBvc3RzSlNPTlxuICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT05cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH0pO1xuICBgYGBcblxuICBAY2xhc3MgUHJvbWlzZVxuICBAcGFyYW0ge2Z1bmN0aW9ufSByZXNvbHZlclxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEBjb25zdHJ1Y3RvclxuKi9cbmZ1bmN0aW9uIFByb21pc2UocmVzb2x2ZXIpIHtcbiAgdGhpc1tQUk9NSVNFX0lEXSA9IG5leHRJZCgpO1xuICB0aGlzLl9yZXN1bHQgPSB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTtcblxuICBpZiAobm9vcCAhPT0gcmVzb2x2ZXIpIHtcbiAgICB0eXBlb2YgcmVzb2x2ZXIgIT09ICdmdW5jdGlvbicgJiYgbmVlZHNSZXNvbHZlcigpO1xuICAgIHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlID8gaW5pdGlhbGl6ZVByb21pc2UodGhpcywgcmVzb2x2ZXIpIDogbmVlZHNOZXcoKTtcbiAgfVxufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcblByb21pc2UucmFjZSA9IHJhY2U7XG5Qcm9taXNlLnJlc29sdmUgPSByZXNvbHZlO1xuUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7XG5Qcm9taXNlLl9zZXRTY2hlZHVsZXIgPSBzZXRTY2hlZHVsZXI7XG5Qcm9taXNlLl9zZXRBc2FwID0gc2V0QXNhcDtcblByb21pc2UuX2FzYXAgPSBhc2FwO1xuXG5Qcm9taXNlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFByb21pc2UsXG5cbiAgLyoqXG4gICAgVGhlIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsXG4gICAgd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGVcbiAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uKHVzZXIpe1xuICAgICAgLy8gdXNlciBpcyBhdmFpbGFibGVcbiAgICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gdXNlciBpcyB1bmF2YWlsYWJsZSwgYW5kIHlvdSBhcmUgZ2l2ZW4gdGhlIHJlYXNvbiB3aHlcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQ2hhaW5pbmdcbiAgICAtLS0tLS0tLVxuICBcbiAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIGB0aGVuYCBpcyBpdHNlbGYgYSBwcm9taXNlLiAgVGhpcyBzZWNvbmQsICdkb3duc3RyZWFtJ1xuICAgIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmaXJzdCBwcm9taXNlJ3MgZnVsZmlsbG1lbnRcbiAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiB1c2VyLm5hbWU7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuICdkZWZhdWx0IG5hbWUnO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHVzZXJOYW1lKSB7XG4gICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVzZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0XG4gICAgICAvLyB3aWxsIGJlIGAnZGVmYXVsdCBuYW1lJ2BcbiAgICB9KTtcbiAgXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuXG4gICAgfSk7XG4gICAgYGBgXG4gICAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFzc2ltaWxhdGlvblxuICAgIC0tLS0tLS0tLS0tLVxuICBcbiAgICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICAgIHJldHJpZXZlZCBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGVcbiAgICBmdWxmaWxsbWVudCBvciByZWplY3Rpb24gaGFuZGxlci4gVGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIHRoZW4gYmUgcGVuZGluZ1xuICAgIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBUaGUgdXNlcidzIGNvbW1lbnRzIGFyZSBub3cgYXZhaWxhYmxlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIElmIHRoZSBhc3NpbWxpYXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFsc28gcmVqZWN0LlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBTaW1wbGUgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCByZXN1bHQ7XG4gIFxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBmaW5kUmVzdWx0KCk7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRSZXN1bHQoZnVuY3Rpb24ocmVzdWx0LCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRSZXN1bHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQWR2YW5jZWQgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCBhdXRob3IsIGJvb2tzO1xuICBcbiAgICB0cnkge1xuICAgICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTtcbiAgICAgIC8vIHN1Y2Nlc3NcbiAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgLy8gZmFpbHVyZVxuICAgIH1cbiAgICBgYGBcbiAgXG4gICAgRXJyYmFjayBFeGFtcGxlXG4gIFxuICAgIGBgYGpzXG4gIFxuICAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcbiAgXG4gICAgfVxuICBcbiAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikge1xuICBcbiAgICB9XG4gIFxuICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgIC8vIGZhaWx1cmVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvdW5kQm9va3MoYm9va3MpO1xuICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIGZhaWx1cmUocmVhc29uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgUHJvbWlzZSBFeGFtcGxlO1xuICBcbiAgICBgYGBqYXZhc2NyaXB0XG4gICAgZmluZEF1dGhvcigpLlxuICAgICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuXG4gICAgICB0aGVuKGZ1bmN0aW9uKGJvb2tzKXtcbiAgICAgICAgLy8gZm91bmQgYm9va3NcbiAgICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCB0aGVuXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25GdWxmaWxsZWRcbiAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gIHRoZW46IHRoZW4sXG5cbiAgLyoqXG4gICAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZVxuICAgIGFzIHRoZSBjYXRjaCBibG9jayBvZiBhIHRyeS9jYXRjaCBzdGF0ZW1lbnQuXG4gIFxuICAgIGBgYGpzXG4gICAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZG4ndCBmaW5kIHRoYXQgYXV0aG9yJyk7XG4gICAgfVxuICBcbiAgICAvLyBzeW5jaHJvbm91c1xuICAgIHRyeSB7XG4gICAgICBmaW5kQXV0aG9yKCk7XG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfVxuICBcbiAgICAvLyBhc3luYyB3aXRoIHByb21pc2VzXG4gICAgZmluZEF1dGhvcigpLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBAbWV0aG9kIGNhdGNoXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgQHJldHVybiB7UHJvbWlzZX1cbiAgKi9cbiAgJ2NhdGNoJzogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGlvbik7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHBvbHlmaWxsKCkge1xuICAgIHZhciBsb2NhbCA9IHVuZGVmaW5lZDtcblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IGdsb2JhbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICAgIGlmIChQKSB7XG4gICAgICAgIHZhciBwcm9taXNlVG9TdHJpbmcgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gc2lsZW50bHkgaWdub3JlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb21pc2VUb1N0cmluZyA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvY2FsLlByb21pc2UgPSBQcm9taXNlO1xufVxuXG5wb2x5ZmlsbCgpO1xuLy8gU3RyYW5nZSBjb21wYXQuLlxuUHJvbWlzZS5wb2x5ZmlsbCA9IHBvbHlmaWxsO1xuUHJvbWlzZS5Qcm9taXNlID0gUHJvbWlzZTtcblxucmV0dXJuIFByb21pc2U7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lczYtcHJvbWlzZS5tYXAiLCIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjIuMi40XG4gKiBodHRwOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBJbmNsdWRlcyBTaXp6bGUuanNcbiAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMTYtMDUtMjBUMTc6MjNaXG4gKi9cblxuKGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7XG5cblx0aWYgKCB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59KHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gU3VwcG9ydDogRmlyZWZveCAxOCtcbi8vIENhbid0IGJlIGluIHN0cmljdCBtb2RlLCBzZXZlcmFsIGxpYnMgaW5jbHVkaW5nIEFTUC5ORVQgdHJhY2Vcbi8vIHRoZSBzdGFjayB2aWEgYXJndW1lbnRzLmNhbGxlci5jYWxsZWUgYW5kIEZpcmVmb3ggZGllcyBpZlxuLy8geW91IHRyeSB0byB0cmFjZSB0aHJvdWdoIFwidXNlIHN0cmljdFwiIGNhbGwgY2hhaW5zLiAoIzEzMzM1KVxuLy9cInVzZSBzdHJpY3RcIjtcbnZhciBhcnIgPSBbXTtcblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBjb25jYXQgPSBhcnIuY29uY2F0O1xuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIHN1cHBvcnQgPSB7fTtcblxuXG5cbnZhclxuXHR2ZXJzaW9uID0gXCIyLjIuNFwiLFxuXG5cdC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5XG5cdGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblxuXHRcdC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJ1xuXHRcdC8vIE5lZWQgaW5pdCBpZiBqUXVlcnkgaXMgY2FsbGVkIChqdXN0IGFsbG93IGVycm9yIHRvIGJlIHRocm93biBpZiBub3QgaW5jbHVkZWQpXG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMVxuXHQvLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1Bcblx0cnRyaW0gPSAvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csXG5cblx0Ly8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG5cdHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbXFxkYS16XSkvZ2ksXG5cblx0Ly8gVXNlZCBieSBqUXVlcnkuY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKVxuXHRmY2FtZWxDYXNlID0gZnVuY3Rpb24oIGFsbCwgbGV0dGVyICkge1xuXHRcdHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcblx0fTtcblxualF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHtcblxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXG5cdGpxdWVyeTogdmVyc2lvbixcblxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxuXG5cdC8vIFN0YXJ0IHdpdGggYW4gZW1wdHkgc2VsZWN0b3Jcblx0c2VsZWN0b3I6IFwiXCIsXG5cblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXG5cdGxlbmd0aDogMCxcblxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1Jcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xuXHRcdHJldHVybiBudW0gIT0gbnVsbCA/XG5cblx0XHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcblx0XHRcdCggbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXSApIDpcblxuXHRcdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxuXHRcdFx0c2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblx0XHRyZXQuY29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFqUXVlcnkuaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBpID09PSBsZW5ndGggKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHRpLS07XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fFxuXHRcdFx0XHRcdCggY29weUlzQXJyYXkgPSBqUXVlcnkuaXNBcnJheSggY29weSApICkgKSApIHtcblxuXHRcdFx0XHRcdGlmICggY29weUlzQXJyYXkgKSB7XG5cdFx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzQXJyYXkoIHNyYyApID8gc3JjIDogW107XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApID8gc3JjIDoge307XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xuXG5cdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXG5cdGV4cGFuZG86IFwialF1ZXJ5XCIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xcRC9nLCBcIlwiICksXG5cblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcblx0aXNSZWFkeTogdHJ1ZSxcblxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xuXHR9LFxuXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXG5cblx0aXNGdW5jdGlvbjogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LnR5cGUoIG9iaiApID09PSBcImZ1bmN0aW9uXCI7XG5cdH0sXG5cblx0aXNBcnJheTogQXJyYXkuaXNBcnJheSxcblxuXHRpc1dpbmRvdzogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9LFxuXG5cdGlzTnVtZXJpYzogZnVuY3Rpb24oIG9iaiApIHtcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChudWxsfHRydWV8ZmFsc2V8XCJcIilcblx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG5cdFx0Ly8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXG5cdFx0Ly8gYWRkaW5nIDEgY29ycmVjdHMgbG9zcyBvZiBwcmVjaXNpb24gZnJvbSBwYXJzZUZsb2F0ICgjMTUxMDApXG5cdFx0dmFyIHJlYWxTdHJpbmdPYmogPSBvYmogJiYgb2JqLnRvU3RyaW5nKCk7XG5cdFx0cmV0dXJuICFqUXVlcnkuaXNBcnJheSggb2JqICkgJiYgKCByZWFsU3RyaW5nT2JqIC0gcGFyc2VGbG9hdCggcmVhbFN0cmluZ09iaiApICsgMSApID49IDA7XG5cdH0sXG5cblx0aXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIga2V5O1xuXG5cdFx0Ly8gTm90IHBsYWluIG9iamVjdHM6XG5cdFx0Ly8gLSBBbnkgb2JqZWN0IG9yIHZhbHVlIHdob3NlIGludGVybmFsIFtbQ2xhc3NdXSBwcm9wZXJ0eSBpcyBub3QgXCJbb2JqZWN0IE9iamVjdF1cIlxuXHRcdC8vIC0gRE9NIG5vZGVzXG5cdFx0Ly8gLSB3aW5kb3dcblx0XHRpZiAoIGpRdWVyeS50eXBlKCBvYmogKSAhPT0gXCJvYmplY3RcIiB8fCBvYmoubm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBOb3Qgb3duIGNvbnN0cnVjdG9yIHByb3BlcnR5IG11c3QgYmUgT2JqZWN0XG5cdFx0aWYgKCBvYmouY29uc3RydWN0b3IgJiZcblx0XHRcdFx0IWhhc093bi5jYWxsKCBvYmosIFwiY29uc3RydWN0b3JcIiApICYmXG5cdFx0XHRcdCFoYXNPd24uY2FsbCggb2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSB8fCB7fSwgXCJpc1Byb3RvdHlwZU9mXCIgKSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBPd24gcHJvcGVydGllcyBhcmUgZW51bWVyYXRlZCBmaXJzdGx5LCBzbyB0byBzcGVlZCB1cCxcblx0XHQvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJlIG93blxuXHRcdGZvciAoIGtleSBpbiBvYmogKSB7fVxuXG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkIHx8IGhhc093bi5jYWxsKCBvYmosIGtleSApO1xuXHR9LFxuXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIG5hbWU7XG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdHR5cGU6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wLCBpT1M8NiAoZnVuY3Rpb25pc2ggUmVnRXhwKVxuXHRcdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8IFwib2JqZWN0XCIgOlxuXHRcdFx0dHlwZW9mIG9iajtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBnbG9iYWwgY29udGV4dFxuXHRnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSApIHtcblx0XHR2YXIgc2NyaXB0LFxuXHRcdFx0aW5kaXJlY3QgPSBldmFsO1xuXG5cdFx0Y29kZSA9IGpRdWVyeS50cmltKCBjb2RlICk7XG5cblx0XHRpZiAoIGNvZGUgKSB7XG5cblx0XHRcdC8vIElmIHRoZSBjb2RlIGluY2x1ZGVzIGEgdmFsaWQsIHByb2xvZ3VlIHBvc2l0aW9uXG5cdFx0XHQvLyBzdHJpY3QgbW9kZSBwcmFnbWEsIGV4ZWN1dGUgY29kZSBieSBpbmplY3RpbmcgYVxuXHRcdFx0Ly8gc2NyaXB0IHRhZyBpbnRvIHRoZSBkb2N1bWVudC5cblx0XHRcdGlmICggY29kZS5pbmRleE9mKCBcInVzZSBzdHJpY3RcIiApID09PSAxICkge1xuXHRcdFx0XHRzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNjcmlwdFwiICk7XG5cdFx0XHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgYXZvaWQgdGhlIERPTSBub2RlIGNyZWF0aW9uLCBpbnNlcnRpb25cblx0XHRcdFx0Ly8gYW5kIHJlbW92YWwgYnkgdXNpbmcgYW4gaW5kaXJlY3QgZ2xvYmFsIGV2YWxcblxuXHRcdFx0XHRpbmRpcmVjdCggY29kZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG5cdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0Ly8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKVxuXHRjYW1lbENhc2U6IGZ1bmN0aW9uKCBzdHJpbmcgKSB7XG5cdFx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG5cdH0sXG5cblx0bm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjFcblx0dHJpbTogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0cmV0dXJuIHRleHQgPT0gbnVsbCA/XG5cdFx0XHRcIlwiIDpcblx0XHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCJcIiApO1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gY29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XG5cdC8vIGFyZ3VtZW50cy5cblx0cHJveHk6IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcblx0XHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRcdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xuXHRcdFx0Y29udGV4dCA9IGZuO1xuXHRcdFx0Zm4gPSB0bXA7XG5cdFx0fVxuXG5cdFx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0XHQvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLlxuXHRcdGlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApICkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBTaW11bGF0ZWQgYmluZFxuXHRcdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcblx0XHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7XG5cdFx0fTtcblxuXHRcdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRcdHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrO1xuXG5cdFx0cmV0dXJuIHByb3h5O1xuXHR9LFxuXG5cdG5vdzogRGF0ZS5ub3csXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuLy8gSlNIaW50IHdvdWxkIGVycm9yIG9uIHRoaXMgY29kZSBkdWUgdG8gdGhlIFN5bWJvbCBub3QgYmVpbmcgZGVmaW5lZCBpbiBFUzUuXG4vLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuanNoaW50cmMgd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBqdXN0IGRpc2FibGUgSlNIaW50IGZvciB0aGVzZVxuLy8gdGhyZWUgbGluZXMuXG4vKiBqc2hpbnQgaWdub3JlOiBzdGFydCAqL1xuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuLyoganNoaW50IGlnbm9yZTogZW5kICovXG5cbi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcFxualF1ZXJ5LmVhY2goIFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2xcIi5zcGxpdCggXCIgXCIgKSxcbmZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHRjbGFzczJ0eXBlWyBcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbn0gKTtcblxuZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHtcblxuXHQvLyBTdXBwb3J0OiBpT1MgOC4yIChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApO1xuXG5cdGlmICggdHlwZSA9PT0gXCJmdW5jdGlvblwiIHx8IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHxcblx0XHR0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqO1xufVxudmFyIFNpenpsZSA9XG4vKiFcbiAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYyLjIuMVxuICogaHR0cDovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxNS0xMC0xN1xuICovXG4oZnVuY3Rpb24oIHdpbmRvdyApIHtcblxudmFyIGksXG5cdHN1cHBvcnQsXG5cdEV4cHIsXG5cdGdldFRleHQsXG5cdGlzWE1MLFxuXHR0b2tlbml6ZSxcblx0Y29tcGlsZSxcblx0c2VsZWN0LFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXG5cdHNldERvY3VtZW50LFxuXHRkb2N1bWVudCxcblx0ZG9jRWxlbSxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0cmJ1Z2d5TWF0Y2hlcyxcblx0bWF0Y2hlcyxcblx0Y29udGFpbnMsXG5cblx0Ly8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YVxuXHRleHBhbmRvID0gXCJzaXp6bGVcIiArIDEgKiBuZXcgRGF0ZSgpLFxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXG5cdGRpcnJ1bnMgPSAwLFxuXHRkb25lID0gMCxcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ly8gR2VuZXJhbC1wdXJwb3NlIGNvbnN0YW50c1xuXHRNQVhfTkVHQVRJVkUgPSAxIDw8IDMxLFxuXG5cdC8vIEluc3RhbmNlIG1ldGhvZHNcblx0aGFzT3duID0gKHt9KS5oYXNPd25Qcm9wZXJ0eSxcblx0YXJyID0gW10sXG5cdHBvcCA9IGFyci5wb3AsXG5cdHB1c2hfbmF0aXZlID0gYXJyLnB1c2gsXG5cdHB1c2ggPSBhcnIucHVzaCxcblx0c2xpY2UgPSBhcnIuc2xpY2UsXG5cdC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZVxuXHQvLyBodHRwOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzVcblx0aW5kZXhPZiA9IGZ1bmN0aW9uKCBsaXN0LCBlbGVtICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdGxlbiA9IGxpc3QubGVuZ3RoO1xuXHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0aWYgKCBsaXN0W2ldID09PSBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxuXHR3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFxuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRpZmllclxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXFxceDAwLVxcXFx4YTBdKStcIixcblxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnNcblx0YXR0cmlidXRlcyA9IFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XCIgKyB3aGl0ZXNwYWNlICtcblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdXCJcblx0XHRcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiICsgaWRlbnRpZmllciArIFwiKSl8KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCIqXFxcXF1cIixcblxuXHRwc2V1ZG9zID0gXCI6KFwiICsgaWRlbnRpZmllciArIFwiKSg/OlxcXFwoKFwiICtcblx0XHQvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOlxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxuXHRcdFwiKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8XCIgK1xuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblx0XHQvLyAzLiBhbnl0aGluZyBlbHNlIChjYXB0dXJlIDIpXG5cdFx0XCIuKlwiICtcblx0XHRcIilcXFxcKXwpXCIsXG5cblx0Ly8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlclxuXHRyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcIitcIiwgXCJnXCIgKSxcblx0cnRyaW0gPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIgKyB3aGl0ZXNwYWNlICsgXCIrJFwiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblxuXHRyYXR0cmlidXRlUXVvdGVzID0gbmV3IFJlZ0V4cCggXCI9XCIgKyB3aGl0ZXNwYWNlICsgXCIqKFteXFxcXF0nXFxcIl0qPylcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLCBcImdcIiApLFxuXG5cdHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcblxuXHRtYXRjaEV4cHIgPSB7XG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiVEFHXCI6IG5ldyBSZWdFeHAoIFwiXihcIiArIGlkZW50aWZpZXIgKyBcInxbKl0pXCIgKSxcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0XCJQU0VVRE9cIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0XCJDSElMRFwiOiBuZXcgUmVnRXhwKCBcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRcImJvb2xcIjogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxuXHR9LFxuXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxuXG5cdHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLFxuXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXG5cblx0cnNpYmxpbmcgPSAvWyt+XS8sXG5cdHJlc2NhcGUgPSAvJ3xcXFxcL2csXG5cblx0Ly8gQ1NTIGVzY2FwZXMgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3woXCIgKyB3aGl0ZXNwYWNlICsgXCIpfC4pXCIsIFwiaWdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGVkIC0gMHgxMDAwMDtcblx0XHQvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludFxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjRcblx0XHQvLyBXb3JrYXJvdW5kIGVycm9uZW91cyBudW1lcmljIGludGVycHJldGF0aW9uIG9mICtcIjB4XCJcblx0XHRyZXR1cm4gaGlnaCAhPT0gaGlnaCB8fCBlc2NhcGVkV2hpdGVzcGFjZSA/XG5cdFx0XHRlc2NhcGVkIDpcblx0XHRcdGhpZ2ggPCAwID9cblx0XHRcdFx0Ly8gQk1QIGNvZGVwb2ludFxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0Ly8gU3VwcGxlbWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpXG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xuXHR9LFxuXG5cdC8vIFVzZWQgZm9yIGlmcmFtZXNcblx0Ly8gU2VlIHNldERvY3VtZW50KClcblx0Ly8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgXCJQZXJtaXNzaW9uIERlbmllZFwiXG5cdC8vIGVycm9yIGluIElFXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRzZXREb2N1bWVudCgpO1xuXHR9O1xuXG4vLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKVxudHJ5IHtcblx0cHVzaC5hcHBseShcblx0XHQoYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSksXG5cdFx0cHJlZmVycmVkRG9jLmNoaWxkTm9kZXNcblx0KTtcblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHRhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlO1xufSBjYXRjaCAoIGUgKSB7XG5cdHB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID9cblxuXHRcdC8vIExldmVyYWdlIHNsaWNlIGlmIHBvc3NpYmxlXG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0cHVzaF9uYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbChlbHMpICk7XG5cdFx0fSA6XG5cblx0XHQvLyBTdXBwb3J0OiBJRTw5XG5cdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHZhciBqID0gdGFyZ2V0Lmxlbmd0aCxcblx0XHRcdFx0aSA9IDA7XG5cdFx0XHQvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGhcblx0XHRcdHdoaWxlICggKHRhcmdldFtqKytdID0gZWxzW2krK10pICkge31cblx0XHRcdHRhcmdldC5sZW5ndGggPSBqIC0gMTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG5pZHNlbGVjdCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXG5cdFx0aWYgKCAoIGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHByZWZlcnJlZERvYyApICE9PSBkb2N1bWVudCApIHtcblx0XHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0fVxuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7XG5cblx0XHRcdFx0Ly8gSUQgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKCAobSA9IG1hdGNoWzFdKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICYmXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIChtID0gbWF0Y2hbM10pICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCBzdXBwb3J0LnFzYSAmJlxuXHRcdFx0XHQhY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCghcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSkgKSB7XG5cblx0XHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXG5cdFx0XHRcdC8vIHFTQSBsb29rcyBvdXRzaWRlIEVsZW1lbnQgY29udGV4dCwgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudFxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB3b3JrYXJvdW5kIHRlY2huaXF1ZVxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PThcblx0XHRcdFx0Ly8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHNcblx0XHRcdFx0fSBlbHNlIGlmICggY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdFx0Ly8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRpZiAoIChuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkpICkge1xuXHRcdFx0XHRcdFx0bmlkID0gbmlkLnJlcGxhY2UoIHJlc2NhcGUsIFwiXFxcXCQmXCIgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKG5pZCA9IGV4cGFuZG8pICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XG5cdFx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XG5cdFx0XHRcdFx0bmlkc2VsZWN0ID0gcmlkZW50aWZpZXIudGVzdCggbmlkICkgPyBcIiNcIiArIG5pZCA6IFwiW2lkPSdcIiArIG5pZCArIFwiJ11cIjtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1tpXSA9IG5pZHNlbGVjdCArIFwiIFwiICsgdG9TZWxlY3RvciggZ3JvdXBzW2ldICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIG5ld1NlbGVjdG9yICkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxuXHRcdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XG5cdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWxsIG90aGVyc1xuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxuICpcdGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XG5cdHZhciBrZXlzID0gW107XG5cblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cdFx0XHQvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXNcblx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07XG5cdFx0fVxuXHRcdHJldHVybiAoY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xuXHRmblsgZXhwYW5kbyBdID0gdHJ1ZTtcblx0cmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZGl2IGFuZCBleHBlY3RzIGEgYm9vbGVhbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0KCBmbiApIHtcblx0dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZGl2ICk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cdFx0Ly8gUmVtb3ZlIGZyb20gaXRzIHBhcmVudCBieSBkZWZhdWx0XG5cdFx0aWYgKCBkaXYucGFyZW50Tm9kZSApIHtcblx0XHRcdGRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBkaXYgKTtcblx0XHR9XG5cdFx0Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUVcblx0XHRkaXYgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogQWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRyc1xuICogQHBhcmFtIHtTdHJpbmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkXG4gKi9cbmZ1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIgKSB7XG5cdHZhciBhcnIgPSBhdHRycy5zcGxpdChcInxcIiksXG5cdFx0aSA9IGFyci5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0RXhwci5hdHRySGFuZGxlWyBhcnJbaV0gXSA9IGhhbmRsZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGFcbiAqIEBwYXJhbSB7RWxlbWVudH0gYlxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXG4gKi9cbmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHtcblx0dmFyIGN1ciA9IGIgJiYgYSxcblx0XHRkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0KCB+Yi5zb3VyY2VJbmRleCB8fCBNQVhfTkVHQVRJVkUgKSAtXG5cdFx0XHQoIH5hLnNvdXJjZUluZGV4IHx8IE1BWF9ORUdBVElWRSApO1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIubmV4dFNpYmxpbmcpICkge1xuXHRcdFx0aWYgKCBjdXIgPT09IGIgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYSA/IDEgOiAtMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIChuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIikgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkge1xuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBhcmd1bWVudCApIHtcblx0XHRhcmd1bWVudCA9ICthcmd1bWVudDtcblx0XHRyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0dmFyIGosXG5cdFx0XHRcdG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksXG5cdFx0XHRcdGkgPSBtYXRjaEluZGV4ZXMubGVuZ3RoO1xuXG5cdFx0XHQvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXNcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIHNlZWRbIChqID0gbWF0Y2hJbmRleGVzW2ldKSBdICkge1xuXHRcdFx0XHRcdHNlZWRbal0gPSAhKG1hdGNoZXNbal0gPSBzZWVkW2pdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBub2RlIGZvciB2YWxpZGl0eSBhcyBhIFNpenpsZSBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dFxuICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkge1xuXHRyZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb250ZXh0O1xufVxuXG4vLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZVxuc3VwcG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge307XG5cbi8qKlxuICogRGV0ZWN0cyBYTUwgbm9kZXNcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlXG4gKi9cbmlzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdC8vIGRvY3VtZW50RWxlbWVudCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3Rcblx0Ly8gKHN1Y2ggYXMgbG9hZGluZyBpZnJhbWVzIGluIElFIC0gIzQ4MzMpXG5cdHZhciBkb2N1bWVudEVsZW1lbnQgPSBlbGVtICYmIChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50O1xuXHRyZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9PSBcIkhUTUxcIiA6IGZhbHNlO1xufTtcblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKi9cbnNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7XG5cdHZhciBoYXNDb21wYXJlLCBwYXJlbnQsXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xuXG5cdC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkXG5cdGlmICggZG9jID09PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDktMTEsIEVkZ2Vcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHRpZiAoIChwYXJlbnQgPSBkb2N1bWVudC5kZWZhdWx0VmlldykgJiYgcGFyZW50LnRvcCAhPT0gcGFyZW50ICkge1xuXHRcdC8vIFN1cHBvcnQ6IElFIDExXG5cdFx0aWYgKCBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdHBhcmVudC5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyLCBmYWxzZSApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHlcblx0XHR9IGVsc2UgaWYgKCBwYXJlbnQuYXR0YWNoRXZlbnQgKSB7XG5cdFx0XHRwYXJlbnQuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgdW5sb2FkSGFuZGxlciApO1xuXHRcdH1cblx0fVxuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0XHRkaXYuY2xhc3NOYW1lID0gXCJpXCI7XG5cdFx0cmV0dXJuICFkaXYuZ2V0QXR0cmlidXRlKFwiY2xhc3NOYW1lXCIpO1xuXHR9KTtcblxuXHQvKiBnZXRFbGVtZW50KHMpQnkqXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzXG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcblx0XHRkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoXCJcIikgKTtcblx0XHRyZXR1cm4gIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBTdXBwb3J0OiBJRTw5XG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDEwXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxuXHQvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtYXRpY2FsbHktc2V0IG5hbWVzLFxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3Rcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZGl2ICkuaWQgPSBleHBhbmRvO1xuXHRcdHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBJRCBmaW5kIGFuZCBmaWx0ZXJcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maW5kW1wiSURcIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBtID8gWyBtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdEV4cHIuZmlsdGVyW1wiSURcIl0gPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKFwiaWRcIikgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHQvLyBTdXBwb3J0OiBJRTYvN1xuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRkZWxldGUgRXhwci5maW5kW1wiSURcIl07XG5cblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHR9XG5cblx0Ly8gVGFnXG5cdEV4cHIuZmluZFtcIlRBR1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b29cblx0XHRcdFx0cmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzXG5cdFx0XHRpZiAoIHRhZyA9PT0gXCIqXCIgKSB7XG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kW1wiQ0xBU1NcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpXG5cdHJidWdneU1hdGNoZXMgPSBbXTtcblxuXHQvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKVxuXHQvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3Jcblx0Ly8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZVxuXHQvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvclxuXHQvLyBTZWUgaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7XG5cdFx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdFx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxuXHRcdGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRcdFx0Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZVxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcblx0XHRcdC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoXG5cdFx0XHQvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZGl2ICkuaW5uZXJIVE1MID0gXCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+XCIgK1xuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTZcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cblx0XHRcdC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0IFwic2FmZVwiIGZvciBXaW5SVFxuXHRcdFx0Ly8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlsqXiRdPVwiICsgd2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseVxuXHRcdFx0aWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbc2VsZWN0ZWRdXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooPzp2YWx1ZXxcIiArIGJvb2xlYW5zICsgXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lPDI5LCBBbmRyb2lkPDQuNCwgU2FmYXJpPDcuMCssIGlPUzw3LjArLCBQaGFudG9tSlM8MS45LjgrXG5cdFx0XHRpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCggXCJbaWR+PVwiICsgZXhwYW5kbyArIFwiLV1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCJ+PVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiOmNoZWNrZWRcIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4KywgaU9TIDgrXG5cdFx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCBcImEjXCIgKyBleHBhbmRvICsgXCIrKlwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIi4jLitbK35dXCIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdFx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHRcdC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudFxuXHRcdFx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiRFwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gRW5mb3JjZSBjYXNlLXNlbnNpdGl2aXR5IG9mIG5hbWUgYXR0cmlidXRlXG5cdFx0XHRpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiW25hbWU9ZF1cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZW5hYmxlZFwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlkIHBzZXVkb3Ncblx0XHRcdGRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiKiw6eFwiKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKFwiLC4qOlwiKTtcblx0XHR9KTtcblx0fVxuXG5cdGlmICggKHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAobWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlcyB8fFxuXHRcdGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKSApKSApIHtcblxuXHRcdGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xuXHRcdFx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXG5cdFx0XHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KVxuXHRcdFx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZGl2LCBcImRpdlwiICk7XG5cblx0XHRcdC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb25cblx0XHRcdC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWRcblx0XHRcdG1hdGNoZXMuY2FsbCggZGl2LCBcIltzIT0nJ106eFwiICk7XG5cdFx0XHRyYnVnZ3lNYXRjaGVzLnB1c2goIFwiIT1cIiwgcHNldWRvcyApO1xuXHRcdH0pO1xuXHR9XG5cblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbihcInxcIikgKTtcblx0cmJ1Z2d5TWF0Y2hlcyA9IHJidWdneU1hdGNoZXMubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneU1hdGNoZXMuam9pbihcInxcIikgKTtcblxuXHQvKiBDb250YWluc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cdGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTtcblxuXHQvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXJcblx0Ly8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5cdGNvbnRhaW5zID0gaGFzQ29tcGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxuXHRcdFx0XHRidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XG5cdFx0XHRcdFx0YWRvd24uY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0XHRcdCkpO1xuXHRcdH0gOlxuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0aWYgKCBiICkge1xuXHRcdFx0XHR3aGlsZSAoIChiID0gYi5wYXJlbnROb2RlKSApIHtcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Y29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0MTtcblxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdGlmICggY29tcGFyZSAmIDEgfHxcblx0XHRcdCghc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHRpZiAoIGEgPT09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYSkgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHRcdGlmICggYiA9PT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBiKSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyXG5cdFx0XHRyZXR1cm4gc29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb21wYXJlICYgNCA/IC0xIDogMTtcblx0fSA6XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0YXVwID0gYS5wYXJlbnROb2RlLFxuXHRcdFx0YnVwID0gYi5wYXJlbnROb2RlLFxuXHRcdFx0YXAgPSBbIGEgXSxcblx0XHRcdGJwID0gWyBiIF07XG5cblx0XHQvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZFxuXHRcdGlmICggIWF1cCB8fCAhYnVwICkge1xuXHRcdFx0cmV0dXJuIGEgPT09IGRvY3VtZW50ID8gLTEgOlxuXHRcdFx0XHRiID09PSBkb2N1bWVudCA/IDEgOlxuXHRcdFx0XHRhdXAgPyAtMSA6XG5cdFx0XHRcdGJ1cCA/IDEgOlxuXHRcdFx0XHRzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cblx0XHQvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVja1xuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xuXHRcdFx0cmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uXG5cdFx0Y3VyID0gYTtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRhcC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cdFx0Y3VyID0gYjtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRicC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cblx0XHQvLyBXYWxrIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeVxuXHRcdHdoaWxlICggYXBbaV0gPT09IGJwW2ldICkge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBpID9cblx0XHRcdC8vIERvIGEgc2libGluZyBjaGVjayBpZiB0aGUgbm9kZXMgaGF2ZSBhIGNvbW1vbiBhbmNlc3RvclxuXHRcdFx0c2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSBub2RlcyBpbiBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdFxuXHRcdFx0YXBbaV0gPT09IHByZWZlcnJlZERvYyA/IC0xIDpcblx0XHRcdGJwW2ldID09PSBwcmVmZXJyZWREb2MgPyAxIDpcblx0XHRcdDA7XG5cdH07XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufTtcblxuU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7XG59O1xuXG5TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxlY3RvcnMgYXJlIHF1b3RlZFxuXHRleHByID0gZXhwci5yZXBsYWNlKCByYXR0cmlidXRlUXVvdGVzLCBcIj0nJDEnXVwiICk7XG5cblx0aWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCFjb21waWxlckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxuXHRcdCggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiZcblx0XHQoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cdFx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7fVxuXHR9XG5cblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdH1cblx0cmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XG59O1xuXG5TaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXHRcdC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEzODA3KVxuXHRcdHZhbCA9IGZuICYmIGhhc093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID9cblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XG5cdFx0XHR1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID9cblx0XHR2YWwgOlxuXHRcdHN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6XG5cdFx0XHQodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcbn07XG5cblNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdHRocm93IG5ldyBFcnJvciggXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIG1zZyApO1xufTtcblxuLyoqXG4gKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzXG4gKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0c1xuICovXG5TaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkge1xuXHR2YXIgZWxlbSxcblx0XHRkdXBsaWNhdGVzID0gW10sXG5cdFx0aiA9IDAsXG5cdFx0aSA9IDA7XG5cblx0Ly8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5jZVxuXHRoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzO1xuXHRzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTtcblx0cmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTtcblxuXHRpZiAoIGhhc0R1cGxpY2F0ZSApIHtcblx0XHR3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHtcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0cmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxuXHRzb3J0SW5wdXQgPSBudWxsO1xuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlc1xuICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtXG4gKi9cbmdldFRleHQgPSBTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbm9kZSxcblx0XHRyZXQgPSBcIlwiLFxuXHRcdGkgPSAwLFxuXHRcdG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRpZiAoICFub2RlVHlwZSApIHtcblx0XHQvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheVxuXHRcdHdoaWxlICggKG5vZGUgPSBlbGVtW2krK10pICkge1xuXHRcdFx0Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXNcblx0XHRcdHJldCArPSBnZXRUZXh0KCBub2RlICk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRyZXQgKz0gZ2V0VGV4dCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVZhbHVlO1xuXHR9XG5cdC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2Rlc1xuXG5cdHJldHVybiByZXQ7XG59O1xuXG5FeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHtcblxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcblx0Y2FjaGVMZW5ndGg6IDUwLFxuXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxuXG5cdG1hdGNoOiBtYXRjaEV4cHIsXG5cblx0YXR0ckhhbmRsZToge30sXG5cblx0ZmluZDoge30sXG5cblx0cmVsYXRpdmU6IHtcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cblx0fSxcblxuXHRwcmVGaWx0ZXI6IHtcblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0bWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbM10gPSAoIG1hdGNoWzNdIHx8IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCIgKS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHRpZiAoIG1hdGNoWzJdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWzNdID0gXCIgXCIgKyBtYXRjaFszXSArIFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRpZiAoIG1hdGNoWzFdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWzNdICkge1xuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWzRdID0gKyggbWF0Y2hbNF0gPyBtYXRjaFs1XSArIChtYXRjaFs2XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzNdID09PSBcImV2ZW5cIiB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApICk7XG5cdFx0XHRcdG1hdGNoWzVdID0gKyggKCBtYXRjaFs3XSArIG1hdGNoWzhdICkgfHwgbWF0Y2hbM10gPT09IFwib2RkXCIgKTtcblxuXHRcdFx0Ly8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFszXSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdHZhciBleGNlc3MsXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWzZdICYmIG1hdGNoWzJdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwcltcIkNISUxEXCJdLnRlc3QoIG1hdGNoWzBdICkgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xuXHRcdFx0aWYgKCBtYXRjaFszXSApIHtcblx0XHRcdFx0bWF0Y2hbMl0gPSBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cdFx0XHRcdC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpXG5cdFx0XHRcdChleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkgJiZcblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdChleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGgpICkge1xuXG5cdFx0XHRcdC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4XG5cdFx0XHRcdG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsyXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTtcblx0XHR9XG5cdH0sXG5cblx0ZmlsdGVyOiB7XG5cblx0XHRcIlRBR1wiOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9IDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTtcblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDTEFTU1wiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkge1xuXHRcdFx0dmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyBcIiBcIiBdO1xuXG5cdFx0XHRyZXR1cm4gcGF0dGVybiB8fFxuXHRcdFx0XHQocGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyBjbGFzc05hbWUgKyBcIihcIiArIHdoaXRlc3BhY2UgKyBcInwkKVwiICkpICYmXG5cdFx0XHRcdGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhdHRlcm4udGVzdCggdHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlbGVtLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIgKTtcblx0XHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdFx0XHRpZiAoIHJlc3VsdCA9PSBudWxsICkge1xuXHRcdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCIhPVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggIW9wZXJhdG9yICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0ICs9IFwiXCI7XG5cblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG5cdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBhcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7XG5cdFx0XHR2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSBcIm50aFwiLFxuXHRcdFx0XHRmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gXCJsYXN0XCIsXG5cdFx0XHRcdG9mVHlwZSA9IHdoYXQgPT09IFwib2YtdHlwZVwiO1xuXG5cdFx0XHRyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/XG5cblx0XHRcdFx0Ly8gU2hvcnRjdXQgZm9yIDpudGgtKihuKVxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdH0gOlxuXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLFxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gbm9kZVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoZGlmZiA9IG5vZGVJbmRleCA9IDApIHx8IHN0YXJ0LnBvcCgpKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLilcblx0XHRcdFx0XHRcdFx0Ly8gb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxuXHRcdFx0XHRcdFx0XHRpZiAoIGRpZmYgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsrZGlmZiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXHRcdFx0Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBTaXp6bGUgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFtpXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFtpXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXHRcdC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvc1xuXHRcdFwibm90XCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFtpXSA9ICEobWF0Y2hlc1tpXSA9IGVsZW0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkgOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WzBdID0gZWxlbTtcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdFx0XHRpbnB1dFswXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJoYXNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHQvLyBcIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3Jcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxuXHRcdC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsXG5cdFx0Ly8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBcIi1cIi5cblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0XHQvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLlwiXG5cdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdFwibGFuZ1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdChsYW5nIHx8IFwiXCIpICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0XHRcdFx0ZWxlbS5sYW5nIDpcblx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKFwieG1sOmxhbmdcIikgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXgpO1xuXHRcdH0sXG5cblx0XHQvLyBCb29sZWFuIHByb3BlcnRpZXNcblx0XHRcImVuYWJsZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2U7XG5cdFx0fSxcblxuXHRcdFwiZGlzYWJsZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0XCJjaGVja2VkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIChub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmICEhZWxlbS5jaGVja2VkKSB8fCAobm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkKTtcblx0XHR9LFxuXG5cdFx0XCJzZWxlY3RlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIENvbnRlbnRzXG5cdFx0XCJlbXB0eVwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0XCJwYXJlbnRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvc1tcImVtcHR5XCJdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZShcInR5cGVcIikpID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgMCBdO1xuXHRcdH0pLFxuXG5cdFx0XCJsYXN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIFsgbGVuZ3RoIC0gMSBdO1xuXHRcdH0pLFxuXG5cdFx0XCJlcVwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSksXG5cblx0XHRcImV2ZW5cIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcIm9kZFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJndFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pXG5cdH1cbn07XG5cbkV4cHIucHNldWRvc1tcIm50aFwiXSA9IEV4cHIucHNldWRvc1tcImVxXCJdO1xuXG4vLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvc1xuZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcbn1cbmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XG59XG5cbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xuZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9XG5zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvcztcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XG5cbnRva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSkgKSB7XG5cdFx0XHRpZiAoIG1hdGNoICkge1xuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAodG9rZW5zID0gW10pICk7XG5cdFx0fVxuXG5cdFx0bWF0Y2hlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gQ29tYmluYXRvcnNcblx0XHRpZiAoIChtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWzBdLnJlcGxhY2UoIHJ0cmltLCBcIiBcIiApXG5cdFx0XHR9KTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoIChtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkpICYmICghcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdChtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdFx0bWF0Y2hlczogbWF0Y2hcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdHJldHVybiBwYXJzZU9ubHkgP1xuXHRcdHNvRmFyLmxlbmd0aCA6XG5cdFx0c29GYXIgP1xuXHRcdFx0U2l6emxlLmVycm9yKCBzZWxlY3RvciApIDpcblx0XHRcdC8vIENhY2hlIHRoZSB0b2tlbnNcblx0XHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xufTtcblxuZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRzZWxlY3RvciA9IFwiXCI7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdHNlbGVjdG9yICs9IHRva2Vuc1tpXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBkaXIgPT09IFwicGFyZW50Tm9kZVwiLFxuXHRcdGRvbmVOYW1lID0gZG9uZSsrO1xuXG5cdHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID9cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGNsb3Nlc3QgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZ1xuXHRcdFx0aWYgKCB4bWwgKSB7XG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8IChlbGVtWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gfHwgKG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0aWYgKCAob2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsgZGlyIF0pICYmXG5cdFx0XHRcdFx0XHRcdG9sZENhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgb2xkQ2FjaGVbIDEgXSA9PT0gZG9uZU5hbWUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyBkaXIgXSA9IG5ld0NhY2hlO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZ1xuXHRcdFx0XHRcdFx0XHRpZiAoIChuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkpICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkge1xuXHRyZXR1cm4gbWF0Y2hlcnMubGVuZ3RoID4gMSA/XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggIW1hdGNoZXJzW2ldKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWzBdO1xufVxuXG5mdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBjb250ZXh0cy5sZW5ndGg7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzW2ldLCByZXN1bHRzICk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGNvbmRlbnNlKCB1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0LCB4bWwgKSB7XG5cdHZhciBlbGVtLFxuXHRcdG5ld1VubWF0Y2hlZCA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsXG5cdFx0bWFwcGVkID0gbWFwICE9IG51bGw7XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7XG5cdFx0XHRpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0aWYgKCBtYXBwZWQgKSB7XG5cdFx0XHRcdFx0bWFwLnB1c2goIGkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXdVbm1hdGNoZWQ7XG59XG5cbmZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHtcblx0aWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTtcblx0fVxuXHRpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7XG5cdH1cblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkge1xuXHRcdHZhciB0ZW1wLCBpLCBlbGVtLFxuXHRcdFx0cHJlTWFwID0gW10sXG5cdFx0XHRwb3N0TWFwID0gW10sXG5cdFx0XHRwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dFxuXHRcdFx0ZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yIHx8IFwiKlwiLCBjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLFxuXG5cdFx0XHQvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb25cblx0XHRcdG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgP1xuXHRcdFx0XHRjb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdGVsZW1zLFxuXG5cdFx0XHRtYXRjaGVyT3V0ID0gbWF0Y2hlciA/XG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXG5cdFx0XHRcdHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID9cblxuXHRcdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFtdIDpcblxuXHRcdFx0XHRcdC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseVxuXHRcdFx0XHRcdHJlc3VsdHMgOlxuXHRcdFx0XHRtYXRjaGVySW47XG5cblx0XHQvLyBGaW5kIHByaW1hcnkgbWF0Y2hlc1xuXHRcdGlmICggbWF0Y2hlciApIHtcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoZWxlbSA9IHRlbXBbaV0pICkge1xuXHRcdFx0XHRcdG1hdGNoZXJPdXRbIHBvc3RNYXBbaV0gXSA9ICEobWF0Y2hlckluWyBwb3N0TWFwW2ldIF0gPSBlbGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggc2VlZCApIHtcblx0XHRcdGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7XG5cdFx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goIChtYXRjaGVySW5baV0gPSBlbGVtKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCAobWF0Y2hlck91dCA9IFtdKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSAmJlxuXHRcdFx0XHRcdFx0KHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSApIDogcHJlTWFwW2ldKSA+IC0xICkge1xuXG5cdFx0XHRcdFx0XHRzZWVkW3RlbXBdID0gIShyZXN1bHRzW3RlbXBdID0gZWxlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlmIGRlZmluZWRcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlck91dCA9IGNvbmRlbnNlKFxuXHRcdFx0XHRtYXRjaGVyT3V0ID09PSByZXN1bHRzID9cblx0XHRcdFx0XHRtYXRjaGVyT3V0LnNwbGljZSggcHJlZXhpc3RpbmcsIG1hdGNoZXJPdXQubGVuZ3RoICkgOlxuXHRcdFx0XHRcdG1hdGNoZXJPdXRcblx0XHRcdCk7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91dCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7XG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMF0udHlwZSBdLFxuXHRcdGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVtcIiBcIl0sXG5cdFx0aSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLFxuXG5cdFx0Ly8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocylcblx0XHRtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIHJldCA9ICggIWxlYWRpbmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8fCAoXG5cdFx0XHRcdChjaGVja0NvbnRleHQgPSBjb250ZXh0KS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXHRcdFx0Ly8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRjaGVja0NvbnRleHQgPSBudWxsO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9IF07XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAobWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkge1xuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIpIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zW2ldLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zW2ldLm1hdGNoZXMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHQvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmdcblx0XHRcdFx0aiA9ICsraTtcblx0XHRcdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbal0udHlwZSBdICkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzZXRNYXRjaGVyKFxuXHRcdFx0XHRcdGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLFxuXHRcdFx0XHRcdGkgPiAxICYmIHRvU2VsZWN0b3IoXG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgcHJlY2VkaW5nIHRva2VuIHdhcyBhIGRlc2NlbmRhbnQgY29tYmluYXRvciwgaW5zZXJ0IGFuIGltcGxpY2l0IGFueS1lbGVtZW50IGAqYFxuXHRcdFx0XHRcdFx0dG9rZW5zLnNsaWNlKCAwLCBpIC0gMSApLmNvbmNhdCh7IHZhbHVlOiB0b2tlbnNbIGkgLSAyIF0udHlwZSA9PT0gXCIgXCIgPyBcIipcIiA6IFwiXCIgfSlcblx0XHRcdFx0XHQpLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSxcblx0XHRcdFx0XHRtYXRjaGVyLFxuXHRcdFx0XHRcdGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICh0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIHRvU2VsZWN0b3IoIHRva2VucyApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSB7XG5cdHZhciBieVNldCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0YnlFbGVtZW50ID0gZWxlbWVudE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0c3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkge1xuXHRcdFx0dmFyIGVsZW0sIGosIG1hdGNoZXIsXG5cdFx0XHRcdG1hdGNoZWRDb3VudCA9IDAsXG5cdFx0XHRcdGkgPSBcIjBcIixcblx0XHRcdFx0dW5tYXRjaGVkID0gc2VlZCAmJiBbXSxcblx0XHRcdFx0c2V0TWF0Y2hlZCA9IFtdLFxuXHRcdFx0XHRjb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCxcblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFtcIlRBR1wiXSggXCIqXCIsIG91dGVybW9zdCApLFxuXHRcdFx0XHQvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlclxuXHRcdFx0XHRkaXJydW5zVW5pcXVlID0gKGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xKSxcblx0XHRcdFx0bGVuID0gZWxlbXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgPT09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0ZXJtb3N0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0c1xuXHRcdFx0Ly8gU3VwcG9ydDogSUU8OSwgU2FmYXJpXG5cdFx0XHQvLyBUb2xlcmF0ZSBOb2RlTGlzdCBwcm9wZXJ0aWVzIChJRTogXCJsZW5ndGhcIjsgU2FmYXJpOiA8bnVtYmVyPikgbWF0Y2hpbmcgZWxlbWVudHMgYnkgaWRcblx0XHRcdGZvciAoIDsgaSAhPT0gbGVuICYmIChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHRpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHRcdFx0XHRcdFx0eG1sID0gIWRvY3VtZW50SXNIVE1MO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR3aGlsZSAoIChtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzW2orK10pICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0IHx8IGRvY3VtZW50LCB4bWwpICkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVyc1xuXHRcdFx0XHRpZiAoIGJ5U2V0ICkge1xuXHRcdFx0XHRcdC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnNcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSkgKSB7XG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XG5cdFx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdFx0dW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gYGlgIGlzIG5vdyB0aGUgY291bnQgb2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBpdCB0byBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gbWFrZXMgdGhlIGxhdHRlciBub25uZWdhdGl2ZS5cblx0XHRcdG1hdGNoZWRDb3VudCArPSBpO1xuXG5cdFx0XHQvLyBBcHBseSBzZXQgZmlsdGVycyB0byB1bm1hdGNoZWQgZWxlbWVudHNcblx0XHRcdC8vIE5PVEU6IFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVtZW50cyAoaS5lLiwgYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIGVxdWFscyBgaWApLCB1bmxlc3Mgd2UgZGlkbid0IHZpc2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGF2ZVxuXHRcdFx0Ly8gbm8gZWxlbWVudCBtYXRjaGVycyBhbmQgbm8gc2VlZC5cblx0XHRcdC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nIFwiMFwiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXRcblx0XHRcdC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgXCIwMFwiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMgYWxzb1xuXHRcdFx0Ly8gbnVtZXJpY2FsbHkgemVyby5cblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xuXHRcdFx0XHRqID0gMDtcblx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IHNldE1hdGNoZXJzW2orK10pICkge1xuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0Ly8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZ1xuXHRcdFx0XHRcdGlmICggbWF0Y2hlZENvdW50ID4gMCApIHtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoICEodW5tYXRjaGVkW2ldIHx8IHNldE1hdGNoZWRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHRcdHNldE1hdGNoZWRbaV0gPSBwb3AuY2FsbCggcmVzdWx0cyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXNcblx0XHRcdFx0XHRzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHNcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApO1xuXG5cdFx0XHRcdC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZ1xuXHRcdFx0XHRpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHQoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHtcblxuXHRcdFx0XHRcdFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5tYXRjaGVkO1xuXHRcdH07XG5cblx0cmV0dXJuIGJ5U2V0ID9cblx0XHRtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDpcblx0XHRzdXBlck1hdGNoZXI7XG59XG5cbmNvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7XG5cdHZhciBpLFxuXHRcdHNldE1hdGNoZXJzID0gW10sXG5cdFx0ZWxlbWVudE1hdGNoZXJzID0gW10sXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggIWNhY2hlZCApIHtcblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbaV0gKTtcblx0XHRcdGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvblxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVjdG9yLCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSApO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn07XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvcikgKTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzZWxlY3RvciBpbiB0aGUgbGlzdCBhbmQgbm8gc2VlZFxuXHQvLyAodGhlIGxhdHRlciBvZiB3aGljaCBndWFyYW50ZWVzIHVzIGNvbnRleHQpXG5cdGlmICggbWF0Y2gubGVuZ3RoID09PSAxICkge1xuXG5cdFx0Ly8gUmVkdWNlIGNvbnRleHQgaWYgdGhlIGxlYWRpbmcgY29tcG91bmQgc2VsZWN0b3IgaXMgYW4gSURcblx0XHR0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwICk7XG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAodG9rZW4gPSB0b2tlbnNbMF0pLnR5cGUgPT09IFwiSURcIiAmJlxuXHRcdFx0XHRzdXBwb3J0LmdldEJ5SWQgJiYgY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJlxuXHRcdFx0XHRFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbXCJJRFwiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwgY29udGV4dCApIHx8IFtdIClbMF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByW1wibmVlZHNDb250ZXh0XCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zW2ldO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkge1xuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0XHRcdFx0KSkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoXCJcIikuc29ydCggc29ydE9yZGVyICkuam9pbihcIlwiKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdjEgKSB7XG5cdC8vIFNob3VsZCByZXR1cm4gMSwgYnV0IHJldHVybnMgNCAoZm9sbG93aW5nKVxuXHRyZXR1cm4gZGl2MS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSApICYgMTtcbn0pO1xuXG4vLyBTdXBwb3J0OiBJRTw4XG4vLyBQcmV2ZW50IGF0dHJpYnV0ZS9wcm9wZXJ0eSBcImludGVycG9sYXRpb25cIlxuLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweFxuaWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdGRpdi5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcblx0cmV0dXJuIGRpdi5maXJzdENoaWxkLmdldEF0dHJpYnV0ZShcImhyZWZcIikgPT09IFwiI1wiIDtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0eXBlXCIgPyAxIDogMiApO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdGRpdi5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGRpdi5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiLCBcIlwiICk7XG5cdHJldHVybiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBcIlwiO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggXCJ2YWx1ZVwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kZWZhdWx0VmFsdWU7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGdldEF0dHJpYnV0ZU5vZGUgdG8gZmV0Y2ggYm9vbGVhbnMgd2hlbiBnZXRBdHRyaWJ1dGUgbGllc1xuaWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XG5cdHJldHVybiBkaXYuZ2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIikgPT0gbnVsbDtcbn0pICkge1xuXHRhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHZhbDtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOlxuXHRcdFx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcblx0XHR9XG5cdH0pO1xufVxuXG5yZXR1cm4gU2l6emxlO1xuXG59KSggd2luZG93ICk7XG5cblxuXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcbmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9ycztcbmpRdWVyeS5leHByWyBcIjpcIiBdID0galF1ZXJ5LmV4cHIucHNldWRvcztcbmpRdWVyeS51bmlxdWVTb3J0ID0galF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0O1xualF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDtcbmpRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDtcbmpRdWVyeS5jb250YWlucyA9IFNpenpsZS5jb250YWlucztcblxuXG5cbnZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHtcblx0dmFyIG1hdGNoZWQgPSBbXSxcblx0XHR0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7XG5cblx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7XG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0aWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdO1xuXG5cdGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7XG5cdFx0aWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7XG5cdFx0XHRtYXRjaGVkLnB1c2goIG4gKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7XG5cbnZhciByc2luZ2xlVGFnID0gKCAvXjwoW1xcdy1dKylcXHMqXFwvPz4oPzo8XFwvXFwxPnwpJC8gKTtcblxuXG5cbnZhciByaXNTaW1wbGUgPSAvXi5bXjojXFxbXFwuLF0qJC87XG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHQvKiBqc2hpbnQgLVcwMTggKi9cblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cblx0fVxuXG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcblx0XHR9ICk7XG5cblx0fVxuXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRpZiAoIHJpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcblx0XHR9XG5cblx0XHRxdWFsaWZpZXIgPSBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzICk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90O1xuXHR9ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRyZXR1cm4gZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgP1xuXHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXSA6XG5cdFx0alF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHRcdH0gKSApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGksXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdC8vIE5lZWRlZCBiZWNhdXNlICQoIHNlbGVjdG9yLCBjb250ZXh0ICkgYmVjb21lcyAkKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKVxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQgKTtcblx0XHRyZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yID8gdGhpcy5zZWxlY3RvciArIFwiIFwiICsgc2VsZWN0b3IgOiBzZWxlY3Rvcjtcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTtcblx0fSxcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTtcblx0fSxcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gISF3aW5ub3coXG5cdFx0XHR0aGlzLFxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0XG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvciApIDpcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXG5cdFx0XHRmYWxzZVxuXHRcdCkubGVuZ3RoO1xuXHR9XG59ICk7XG5cblxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcblxuXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcbnZhciByb290alF1ZXJ5LFxuXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSlcblx0Ly8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0qKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBCbGFja2JlcnJ5IDQuNlxuXHRcdFx0XHRcdC8vIGdFQklEIHJldHVybnMgbm9kZXMgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAoIzY5NjMpXG5cdFx0XHRcdFx0aWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5jb250ZXh0ID0gZG9jdW1lbnQ7XG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpcy5jb250ZXh0ID0gdGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yLnNlbGVjdG9yICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmNvbnRleHQgPSBzZWxlY3Rvci5jb250ZXh0O1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0cG9zID0gcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvcnMsIGNvbnRleHQgfHwgdGhpcy5jb250ZXh0ICkgOlxuXHRcdFx0XHQwO1xuXG5cdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHBvcyA/XG5cdFx0XHRcdFx0cG9zLmluZGV4KCBjdXIgKSA+IC0xIDpcblxuXHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBjdXIsIHNlbGVjdG9ycyApICkgKSB7XG5cblx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQgfHwgalF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XG5cdH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XG5cblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXNcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7XG5cdH07XG59ICk7XG52YXIgcm5vdHdoaXRlID0gKCAvXFxTKy9nICk7XG5cblxuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcblx0dmFyIG9iamVjdCA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBvcHRpb25zLm9uY2U7XG5cblx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLFxuXHRcdFx0Ly8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlc1xuXHRcdFx0ZmlyZWQgPSBmaXJpbmcgPSB0cnVlO1xuXHRcdFx0Zm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRcdHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb25cblx0XHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJlxuXHRcdFx0XHRcdFx0b3B0aW9ucy5zdG9wT25GYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZVxuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0XG5cdFx0XHRpZiAoICFvcHRpb25zLm1lbW9yeSApIHtcblx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGZpcmluZyA9IGZhbHNlO1xuXG5cdFx0XHQvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZFxuXHRcdFx0aWYgKCBsb2NrZWQgKSB7XG5cblx0XHRcdFx0Ly8gS2VlcCBhbiBlbXB0eSBsaXN0IGlmIHdlIGhhdmUgZGF0YSBmb3IgZnV0dXJlIGFkZCBjYWxsc1xuXHRcdFx0XHRpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxpc3QgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0XG5cdFx0c2VsZiA9IHtcblxuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmdcblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBtZW1vcnkgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQoIGZ1bmN0aW9uIGFkZCggYXJncyApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIGpRdWVyeS50eXBlKCBhcmcgKSAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0fSApKCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHR2YXIgaW5kZXg7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xuXHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4gZm4gP1xuXHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOlxuXHRcdFx0XHRcdGxpc3QubGVuZ3RoID4gMDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3Rcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmUgYW5kIC5hZGRcblx0XHRcdC8vIEFib3J0IGFueSBjdXJyZW50L3BlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0Ly8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzXG5cdFx0XHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFsaXN0O1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZVxuXHRcdFx0Ly8gQWxzbyBkaXNhYmxlIC5hZGQgdW5sZXNzIHdlIGhhdmUgbWVtb3J5IChzaW5jZSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdClcblx0XHRcdC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdGxvY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgbGlzdGVuZXIgbGlzdCwgZmluYWwgc3RhdGVcblx0XHRcdFx0WyBcInJlc29sdmVcIiwgXCJkb25lXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCBcInJlc29sdmVkXCIgXSxcblx0XHRcdFx0WyBcInJlamVjdFwiLCBcImZhaWxcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIFwicmVqZWN0ZWRcIiBdLFxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0XHRcdFx0XHR2YXIgZm4gPSBqUXVlcnkuaXNGdW5jdGlvbiggZm5zWyBpIF0gKSAmJiBmbnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZFsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdIGZvciBmb3J3YXJkaW5nIGFjdGlvbnMgdG8gbmV3RGVmZXJcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmZhaWwoIG5ld0RlZmVyLnJlamVjdCApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMgPT09IHByb21pc2UgPyBuZXdEZWZlci5wcm9taXNlKCkgOiB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdFxuXHRcdHByb21pc2UucGlwZSA9IHByb21pc2UudGhlbjtcblxuXHRcdC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHNcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHR2YXIgbGlzdCA9IHR1cGxlWyAyIF0sXG5cdFx0XHRcdHN0YXRlU3RyaW5nID0gdHVwbGVbIDMgXTtcblxuXHRcdFx0Ly8gcHJvbWlzZVsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdID0gbGlzdC5hZGRcblx0XHRcdHByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkO1xuXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcblx0XHRcdGlmICggc3RhdGVTdHJpbmcgKSB7XG5cdFx0XHRcdGxpc3QuYWRkKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdC8vIHN0YXRlID0gWyByZXNvbHZlZCB8IHJlamVjdGVkIF1cblx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXG5cdFx0XHRcdC8vIFsgcmVqZWN0X2xpc3QgfCByZXNvbHZlX2xpc3QgXS5kaXNhYmxlOyBwcm9ncmVzc19saXN0LmxvY2tcblx0XHRcdFx0fSwgdHVwbGVzWyBpIF4gMSBdWyAyIF0uZGlzYWJsZSwgdHVwbGVzWyAyIF1bIDIgXS5sb2NrICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGRlZmVycmVkWyByZXNvbHZlIHwgcmVqZWN0IHwgbm90aWZ5IF1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHByb21pc2UgOiB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9O1xuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcblx0XHR9ICk7XG5cblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2Vcblx0XHRwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7XG5cblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XG5cdFx0aWYgKCBmdW5jICkge1xuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZG9uZSFcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XG5cdH0sXG5cblx0Ly8gRGVmZXJyZWQgaGVscGVyXG5cdHdoZW46IGZ1bmN0aW9uKCBzdWJvcmRpbmF0ZSAvKiAsIC4uLiwgc3Vib3JkaW5hdGVOICovICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblx0XHRcdGxlbmd0aCA9IHJlc29sdmVWYWx1ZXMubGVuZ3RoLFxuXG5cdFx0XHQvLyB0aGUgY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzXG5cdFx0XHRyZW1haW5pbmcgPSBsZW5ndGggIT09IDEgfHxcblx0XHRcdFx0KCBzdWJvcmRpbmF0ZSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggc3Vib3JkaW5hdGUucHJvbWlzZSApICkgPyBsZW5ndGggOiAwLFxuXG5cdFx0XHQvLyB0aGUgbWFzdGVyIERlZmVycmVkLlxuXHRcdFx0Ly8gSWYgcmVzb2x2ZVZhbHVlcyBjb25zaXN0IG9mIG9ubHkgYSBzaW5nbGUgRGVmZXJyZWQsIGp1c3QgdXNlIHRoYXQuXG5cdFx0XHRkZWZlcnJlZCA9IHJlbWFpbmluZyA9PT0gMSA/IHN1Ym9yZGluYXRlIDogalF1ZXJ5LkRlZmVycmVkKCksXG5cblx0XHRcdC8vIFVwZGF0ZSBmdW5jdGlvbiBmb3IgYm90aCByZXNvbHZlIGFuZCBwcm9ncmVzcyB2YWx1ZXNcblx0XHRcdHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSwgY29udGV4dHMsIHZhbHVlcyApIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRjb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHR2YWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoIHZhbHVlcyA9PT0gcHJvZ3Jlc3NWYWx1ZXMgKSB7XG5cdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggISggLS1yZW1haW5pbmcgKSApIHtcblx0XHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fSxcblxuXHRcdFx0cHJvZ3Jlc3NWYWx1ZXMsIHByb2dyZXNzQ29udGV4dHMsIHJlc29sdmVDb250ZXh0cztcblxuXHRcdC8vIEFkZCBsaXN0ZW5lcnMgdG8gRGVmZXJyZWQgc3Vib3JkaW5hdGVzOyB0cmVhdCBvdGhlcnMgYXMgcmVzb2x2ZWRcblx0XHRpZiAoIGxlbmd0aCA+IDEgKSB7XG5cdFx0XHRwcm9ncmVzc1ZhbHVlcyA9IG5ldyBBcnJheSggbGVuZ3RoICk7XG5cdFx0XHRwcm9ncmVzc0NvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTtcblx0XHRcdHJlc29sdmVDb250ZXh0cyA9IG5ldyBBcnJheSggbGVuZ3RoICk7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZVZhbHVlc1sgaSBdLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0LnByb2dyZXNzKCB1cGRhdGVGdW5jKCBpLCBwcm9ncmVzc0NvbnRleHRzLCBwcm9ncmVzc1ZhbHVlcyApIClcblx0XHRcdFx0XHRcdC5kb25lKCB1cGRhdGVGdW5jKCBpLCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKSApXG5cdFx0XHRcdFx0XHQuZmFpbCggZGVmZXJyZWQucmVqZWN0ICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0LS1yZW1haW5pbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB3ZSdyZSBub3Qgd2FpdGluZyBvbiBhbnl0aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVyXG5cdFx0aWYgKCAhcmVtYWluaW5nICkge1xuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcbnZhciByZWFkeUxpc3Q7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHQvLyBBZGQgdGhlIGNhbGxiYWNrXG5cdGpRdWVyeS5yZWFkeS5wcm9taXNlKCkuZG9uZSggZm4gKTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxuXHRpc1JlYWR5OiBmYWxzZSxcblxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXG5cdC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxXG5cdHJlYWR5V2FpdDogMSxcblxuXHQvLyBIb2xkIChvciByZWxlYXNlKSB0aGUgcmVhZHkgZXZlbnRcblx0aG9sZFJlYWR5OiBmdW5jdGlvbiggaG9sZCApIHtcblx0XHRpZiAoIGhvbGQgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xuXHRcdH1cblx0fSxcblxuXHQvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5XG5cdHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHtcblxuXHRcdC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHlcblx0XHRpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcblx0XHRqUXVlcnkuaXNSZWFkeSA9IHRydWU7XG5cblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxuXHRcdGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGVcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XG5cblx0XHQvLyBUcmlnZ2VyIGFueSBib3VuZCByZWFkeSBldmVudHNcblx0XHRpZiAoIGpRdWVyeS5mbi50cmlnZ2VySGFuZGxlciApIHtcblx0XHRcdGpRdWVyeSggZG9jdW1lbnQgKS50cmlnZ2VySGFuZGxlciggXCJyZWFkeVwiICk7XG5cdFx0XHRqUXVlcnkoIGRvY3VtZW50ICkub2ZmKCBcInJlYWR5XCIgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuLyoqXG4gKiBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuICovXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbmpRdWVyeS5yZWFkeS5wcm9taXNlID0gZnVuY3Rpb24oIG9iaiApIHtcblx0aWYgKCAhcmVhZHlMaXN0ICkge1xuXG5cdFx0cmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cblx0XHQvLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuXHRcdC8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLlxuXHRcdC8vIFN1cHBvcnQ6IElFOS0xMCBvbmx5XG5cdFx0Ly8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgXCJpbnRlcmFjdGl2ZVwiIHRvbyBzb29uXG5cdFx0aWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcblx0XHRcdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdFx0XHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2tcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblxuXHRcdFx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZWFkeUxpc3QucHJvbWlzZSggb2JqICk7XG59O1xuXG4vLyBLaWNrIG9mZiB0aGUgRE9NIHJlYWR5IGNoZWNrIGV2ZW4gaWYgdGhlIHVzZXIgZG9lcyBub3RcbmpRdWVyeS5yZWFkeS5wcm9taXNlKCk7XG5cblxuXG5cbi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvblxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXG52YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxuXHRcdGJ1bGsgPSBrZXkgPT0gbnVsbDtcblxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXG5cdGlmICggalF1ZXJ5LnR5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyYXcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggYnVsayApIHtcblxuXHRcdFx0Ly8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0XG5cdFx0XHRpZiAoIHJhdyApIHtcblx0XHRcdFx0Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XG5cdFx0XHRcdGZuID0gbnVsbDtcblxuXHRcdFx0Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVsayA9IGZuO1xuXHRcdFx0XHRmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0ZWxlbXNbIGkgXSwga2V5LCByYXcgP1xuXHRcdFx0XHRcdHZhbHVlIDpcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjaGFpbmFibGUgP1xuXHRcdGVsZW1zIDpcblxuXHRcdC8vIEdldHNcblx0XHRidWxrID9cblx0XHRcdGZuLmNhbGwoIGVsZW1zICkgOlxuXHRcdFx0bGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xudmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0Ly8gQWNjZXB0cyBvbmx5OlxuXHQvLyAgLSBOb2RlXG5cdC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREVcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcblx0Ly8gIC0gT2JqZWN0XG5cdC8vICAgIC0gQW55XG5cdC8qIGpzaGludCAtVzAxOCAqL1xuXHRyZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBEYXRhKCkge1xuXHR0aGlzLmV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7XG59XG5cbkRhdGEudWlkID0gMTtcblxuRGF0YS5wcm90b3R5cGUgPSB7XG5cblx0cmVnaXN0ZXI6IGZ1bmN0aW9uKCBvd25lciwgaW5pdGlhbCApIHtcblx0XHR2YXIgdmFsdWUgPSBpbml0aWFsIHx8IHt9O1xuXG5cdFx0Ly8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlclxuXHRcdC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50XG5cdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlO1xuXG5cdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlLCBub24td3JpdGFibGUgcHJvcGVydHlcblx0XHQvLyBjb25maWd1cmFiaWxpdHkgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZVxuXHRcdC8vIGRlbGV0ZWQgd2l0aCB0aGUgZGVsZXRlIG9wZXJhdG9yXG5cdFx0fSBlbHNlIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdH0gKTtcblx0XHR9XG5cdFx0cmV0dXJuIG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0fSxcblx0Y2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuXG5cdFx0Ly8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuXG5cdFx0aWYgKCAhYWNjZXB0RGF0YSggb3duZXIgKSApIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGNhY2hlWyBkYXRhIF0gPSB2YWx1ZTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvbmUtYnktb25lIHRvIHRoZSBjYWNoZSBvYmplY3Rcblx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVbIHByb3AgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSAmJiBvd25lclsgdGhpcy5leHBhbmRvIF1bIGtleSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgc3RvcmVkO1xuXG5cdFx0Ly8gSW4gY2FzZXMgd2hlcmUgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZFxuXHRcdC8vICAgMi4gQSBzdHJpbmcga2V5IHdhcyBzcGVjaWZpZWQsIGJ1dCBubyB2YWx1ZSBwcm92aWRlZFxuXHRcdC8vXG5cdFx0Ly8gVGFrZSB0aGUgXCJyZWFkXCIgcGF0aCBhbmQgYWxsb3cgdGhlIGdldCBtZXRob2QgdG8gZGV0ZXJtaW5lXG5cdFx0Ly8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBUaGUgZW50aXJlIGNhY2hlIG9iamVjdFxuXHRcdC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXlcblx0XHQvL1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiICkgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApICkge1xuXG5cdFx0XHRzdG9yZWQgPSB0aGlzLmdldCggb3duZXIsIGtleSApO1xuXG5cdFx0XHRyZXR1cm4gc3RvcmVkICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRzdG9yZWQgOiB0aGlzLmdldCggb3duZXIsIGpRdWVyeS5jYW1lbENhc2UoIGtleSApICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLCBuYW1lLCBjYW1lbCxcblx0XHRcdGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0aWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyKCBvd25lciApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggalF1ZXJ5LmlzQXJyYXkoIGtleSApICkge1xuXG5cdFx0XHRcdC8vIElmIFwibmFtZVwiIGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2hlbiBkYXRhIGlzIGluaXRpYWxseSBjcmVhdGVkLCB2aWEgKFwia2V5XCIsIFwidmFsXCIpIHNpZ25hdHVyZSxcblx0XHRcdFx0Ly8ga2V5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBjYW1lbENhc2UuXG5cdFx0XHRcdC8vIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIF9ob3dfIGEga2V5IHdhcyBhZGRlZCwgcmVtb3ZlXG5cdFx0XHRcdC8vIGJvdGggcGxhaW4ga2V5IGFuZCBjYW1lbENhc2Uga2V5LiAjMTI3ODZcblx0XHRcdFx0Ly8gVGhpcyB3aWxsIG9ubHkgcGVuYWxpemUgdGhlIGFycmF5IGFyZ3VtZW50IHBhdGguXG5cdFx0XHRcdG5hbWUgPSBrZXkuY29uY2F0KCBrZXkubWFwKCBqUXVlcnkuY2FtZWxDYXNlICkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNhbWVsID0galF1ZXJ5LmNhbWVsQ2FzZSgga2V5ICk7XG5cblx0XHRcdFx0Ly8gVHJ5IHRoZSBzdHJpbmcgYXMgYSBrZXkgYmVmb3JlIGFueSBtYW5pcHVsYXRpb25cblx0XHRcdFx0aWYgKCBrZXkgaW4gY2FjaGUgKSB7XG5cdFx0XHRcdFx0bmFtZSA9IFsga2V5LCBjYW1lbCBdO1xuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxuXHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdFx0bmFtZSA9IGNhbWVsO1xuXHRcdFx0XHRcdG5hbWUgPSBuYW1lIGluIGNhY2hlID9cblx0XHRcdFx0XHRcdFsgbmFtZSBdIDogKCBuYW1lLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGkgPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsgbmFtZVsgaSBdIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9IDM1LTQ1K1xuXHRcdFx0Ly8gV2Via2l0ICYgQmxpbmsgcGVyZm9ybWFuY2Ugc3VmZmVycyB3aGVuIGRlbGV0aW5nIHByb3BlcnRpZXNcblx0XHRcdC8vIGZyb20gRE9NIG5vZGVzLCBzbyBzZXQgdG8gdW5kZWZpbmVkIGluc3RlYWRcblx0XHRcdC8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNzg2MDdcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHtcblx0dmFyIG5hbWU7XG5cblx0Ly8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueVxuXHQvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGVcblx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRuYW1lID0gXCJkYXRhLVwiICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsIFwiLSQmXCIgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRhdGEgPSBkYXRhID09PSBcInRydWVcIiA/IHRydWUgOlxuXHRcdFx0XHRcdGRhdGEgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDpcblx0XHRcdFx0XHRkYXRhID09PSBcIm51bGxcIiA/IG51bGwgOlxuXG5cdFx0XHRcdFx0Ly8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmdcblx0XHRcdFx0XHQrZGF0YSArIFwiXCIgPT09IGRhdGEgPyArZGF0YSA6XG5cdFx0XHRcdFx0cmJyYWNlLnRlc3QoIGRhdGEgKSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6XG5cdFx0XHRcdFx0ZGF0YTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRTExK1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpXG5cdFx0XHRcdFx0XHRpZiAoIGF0dHJzWyBpIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBhdHRyc1sgaSBdLm5hbWU7XG5cdFx0XHRcdFx0XHRcdGlmICggbmFtZS5pbmRleE9mKCBcImRhdGEtXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdC8vIFNldHMgbXVsdGlwbGUgdmFsdWVzXG5cdFx0aWYgKCB0eXBlb2Yga2V5ID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5ICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGRhdGEsIGNhbWVsS2V5O1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyB3aXRoIHRoZSBrZXkgYXMtaXNcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICkgfHxcblxuXHRcdFx0XHRcdC8vIFRyeSB0byBmaW5kIGRhc2hlZCBrZXkgaWYgaXQgZXhpc3RzIChnaC0yNzc5KVxuXHRcdFx0XHRcdC8vIFRoaXMgaXMgZm9yIDIuMi54IG9ubHlcblx0XHRcdFx0XHRkYXRhVXNlci5nZXQoIGVsZW0sIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCBcIi0kJlwiICkudG9Mb3dlckNhc2UoKSApO1xuXG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FtZWxLZXkgPSBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXG5cdFx0XHRcdC8vIHdpdGggdGhlIGtleSBjYW1lbGl6ZWRcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwgY2FtZWxLZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwgY2FtZWxLZXksIHVuZGVmaW5lZCApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIHRyaWVkIHJlYWxseSBoYXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgdGhlIGRhdGEuLi5cblx0XHRcdGNhbWVsS2V5ID0galF1ZXJ5LmNhbWVsQ2FzZSgga2V5ICk7XG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIEZpcnN0LCBhdHRlbXB0IHRvIHN0b3JlIGEgY29weSBvciByZWZlcmVuY2Ugb2YgYW55XG5cdFx0XHRcdC8vIGRhdGEgdGhhdCBtaWdodCd2ZSBiZWVuIHN0b3JlIHdpdGggYSBjYW1lbENhc2VkIGtleS5cblx0XHRcdFx0dmFyIGRhdGEgPSBkYXRhVXNlci5nZXQoIHRoaXMsIGNhbWVsS2V5ICk7XG5cblx0XHRcdFx0Ly8gRm9yIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGUgaW50ZXJvcCwgd2UgaGF2ZSB0b1xuXHRcdFx0XHQvLyBzdG9yZSBwcm9wZXJ0eSBuYW1lcyB3aXRoIGRhc2hlcyBpbiBhIGNhbWVsQ2FzZSBmb3JtLlxuXHRcdFx0XHQvLyBUaGlzIG1pZ2h0IG5vdCBhcHBseSB0byBhbGwgcHJvcGVydGllcy4uLipcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBjYW1lbEtleSwgdmFsdWUgKTtcblxuXHRcdFx0XHQvLyAqLi4uIEluIHRoZSBjYXNlIG9mIHByb3BlcnRpZXMgdGhhdCBtaWdodCBfYWN0dWFsbHlfXG5cdFx0XHRcdC8vIGhhdmUgZGFzaGVzLCB3ZSBuZWVkIHRvIGFsc28gc3RvcmUgYSBjb3B5IG9mIHRoYXRcblx0XHRcdFx0Ly8gdW5jaGFuZ2VkIHByb3BlcnR5LlxuXHRcdFx0XHRpZiAoIGtleS5pbmRleE9mKCBcIi1cIiApID4gLTEgJiYgZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRhdGFVc2VyLnJlbW92ZSggdGhpcywga2V5ICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHF1ZXVlO1xuXG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0dHlwZSA9ICggdHlwZSB8fCBcImZ4XCIgKSArIFwicXVldWVcIjtcblx0XHRcdHF1ZXVlID0gZGF0YVByaXYuZ2V0KCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXBcblx0XHRcdGlmICggZGF0YSApIHtcblx0XHRcdFx0aWYgKCAhcXVldWUgfHwgalF1ZXJ5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGlzSGlkZGVuID0gZnVuY3Rpb24oIGVsZW0sIGVsICkge1xuXG5cdFx0Ly8gaXNIaWRkZW4gbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjtcblx0XHQvLyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnRcblx0XHRlbGVtID0gZWwgfHwgZWxlbTtcblx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCIgfHxcblx0XHRcdCFqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHR9O1xuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLFxuXHRcdHNjYWxlID0gMSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7IHJldHVybiB0d2Vlbi5jdXIoKTsgfSA6XG5cdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsIFwiXCIgKTsgfSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0ZG8ge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyBpdGVyYXRpb24gemVyb2VkIG91dCwgZG91YmxlIHVudGlsIHdlIGdldCAqc29tZXRoaW5nKi5cblx0XHRcdC8vIFVzZSBzdHJpbmcgZm9yIGRvdWJsaW5nIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBzZWUgc2NhbGUgYXMgdW5jaGFuZ2VkIGJlbG93XG5cdFx0XHRzY2FsZSA9IHNjYWxlIHx8IFwiLjVcIjtcblxuXHRcdFx0Ly8gQWRqdXN0IGFuZCBhcHBseVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIFVwZGF0ZSBzY2FsZSwgdG9sZXJhdGluZyB6ZXJvIG9yIE5hTiBmcm9tIHR3ZWVuLmN1cigpXG5cdFx0Ly8gQnJlYWsgdGhlIGxvb3AgaWYgc2NhbGUgaXMgdW5jaGFuZ2VkIG9yIHBlcmZlY3QsIG9yIGlmIHdlJ3ZlIGp1c3QgaGFkIGVub3VnaC5cblx0XHR9IHdoaWxlIChcblx0XHRcdHNjYWxlICE9PSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsICkgJiYgc2NhbGUgIT09IDEgJiYgLS1tYXhJdGVyYXRpb25zXG5cdFx0KTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG52YXIgcmNoZWNrYWJsZVR5cGUgPSAoIC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pICk7XG5cbnZhciBydGFnTmFtZSA9ICggLzwoW1xcdzotXSspLyApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBTdXBwb3J0OiBJRTlcblx0b3B0aW9uOiBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF0sXG5cblx0Ly8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBpbiB0aGVcblx0Ly8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlblxuXHQvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuXG5cdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcblx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcblx0dHI6IFsgMiwgXCI8dGFibGU+PHRib2R5PlwiLCBcIjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXG5cblx0X2RlZmF1bHQ6IFsgMCwgXCJcIiwgXCJcIiBdXG59O1xuXG4vLyBTdXBwb3J0OiBJRTlcbndyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjtcblxud3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDtcbndyYXBNYXAudGggPSB3cmFwTWFwLnRkO1xuXG5cbmZ1bmN0aW9uIGdldEFsbCggY29udGV4dCwgdGFnICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0Ly8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAoIzE1MTUxKVxuXHR2YXIgcmV0ID0gdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgP1xuXHRcdFx0Y29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8IFwiKlwiICkgOlxuXHRcdFx0dHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiA/XG5cdFx0XHRcdGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICkgOlxuXHRcdFx0W107XG5cblx0cmV0dXJuIHRhZyA9PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBqUXVlcnkubm9kZU5hbWUoIGNvbnRleHQsIHRhZyApID9cblx0XHRqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKSA6XG5cdFx0cmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgY29udGFpbnMsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCBqUXVlcnkudHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xLCBQaGFudG9tSlM8MlxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjEsIFBoYW50b21KUzwyXG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29udGFpbnMgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBjb250YWlucyApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKSxcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wLTQuMywgU2FmYXJpPD01LjFcblx0Ly8gQ2hlY2sgc3RhdGUgbG9zdCBpZiB0aGUgbmFtZSBpcyBzZXQgKCMxMTIxNylcblx0Ly8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKVxuXHQvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSlcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJyYWRpb1wiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwidFwiICk7XG5cblx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXG5cdC8vIFN1cHBvcnQ6IFNhZmFyaTw9NS4xLCBBbmRyb2lkPDQuMlxuXHQvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHNcblx0c3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkO1xuXG5cdC8vIFN1cHBvcnQ6IElFPD0xMStcblx0Ly8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWRcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcbn0gKSgpO1xuXG5cbnZhclxuXHRya2V5RXZlbnQgPSAvXmtleS8sXG5cdHJtb3VzZUV2ZW50ID0gL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLFxuXHRydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlxcLiguKyl8KS87XG5cbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vLyBTdXBwb3J0OiBJRTlcbi8vIFNlZSAjMTMzOTMgZm9yIG1vcmUgaW5mb1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5vRGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMgKGJ1dCBhbGxvdyBwbGFpbiBvYmplY3RzKVxuXHRcdGlmICggIWVsZW1EYXRhICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGVyIGhhcyBhIHVuaXF1ZSBJRCwgdXNlZCB0byBmaW5kL3JlbW92ZSBpdCBsYXRlclxuXHRcdGlmICggIWhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdFxuXHRcdGlmICggISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgPSB7fTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xuXHRcdFx0dG1wID0gdG1wWyAyIF0gJiZcblx0XHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICk7XG5cblx0XHRcdC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHNcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTtcblxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXG5cdFx0XHRcdFx0KCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiZcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fFxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPT09IFwiKipcIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHtcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcblxuXHRcdFx0XHRcdGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNwZWNpYWwucmVtb3ZlICkge1xuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3Rcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxuXHRcdFx0aWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fFxuXHRcdFx0XHRcdHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBldmVudHNbIHR5cGUgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZFxuXHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImhhbmRsZSBldmVudHNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0ZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApO1xuXG5cdFx0dmFyIGksIGosIHJldCwgbWF0Y2hlZCwgaGFuZGxlT2JqLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cdFx0XHRoYW5kbGVycyA9ICggZGF0YVByaXYuZ2V0KCB0aGlzLCBcImV2ZW50c1wiICkgfHwge30gKVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXHRcdGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcblxuXHRcdC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWRcblx0XHRpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaGFuZGxlcnNcblx0XHRoYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRsZXJzICk7XG5cblx0XHQvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1c1xuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTtcblxuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJlxuXHRcdFx0XHQhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0XHQvLyBUcmlnZ2VyZWQgZXZlbnQgbXVzdCBlaXRoZXIgMSkgaGF2ZSBubyBuYW1lc3BhY2UsIG9yIDIpIGhhdmUgbmFtZXNwYWNlKHMpXG5cdFx0XHRcdC8vIGEgc3Vic2V0IG9yIGVxdWFsIHRvIHRob3NlIGluIHRoZSBib3VuZCBldmVudCAoYm90aCBjYW4gaGF2ZSBubyBuYW1lc3BhY2UpLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBtYXRjaGVzLCBzZWwsIGhhbmRsZU9iaixcblx0XHRcdGhhbmRsZXJRdWV1ZSA9IFtdLFxuXHRcdFx0ZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsXG5cdFx0XHRjdXIgPSBldmVudC50YXJnZXQ7XG5cblx0XHQvLyBTdXBwb3J0IChhdCBsZWFzdCk6IENocm9tZSwgSUU5XG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICgjMTMxODApXG5cdFx0Ly9cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94PD00Mitcblx0XHQvLyBBdm9pZCBub24tbGVmdC1jbGljayBpbiBGRiBidXQgZG9uJ3QgYmxvY2sgSUUgcmFkaW8gZXZlbnRzICgjMzg2MSwgZ2gtMjM0Mylcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiYgY3VyLm5vZGVUeXBlICYmXG5cdFx0XHQoIGV2ZW50LnR5cGUgIT09IFwiY2xpY2tcIiB8fCBpc05hTiggZXZlbnQuYnV0dG9uICkgfHwgZXZlbnQuYnV0dG9uIDwgMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICggY3VyLmRpc2FibGVkICE9PSB0cnVlIHx8IGV2ZW50LnR5cGUgIT09IFwiY2xpY2tcIiApICkge1xuXHRcdFx0XHRcdG1hdGNoZXMgPSBbXTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZXMubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogbWF0Y2hlcyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IHRoaXMsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaGFuZGxlclF1ZXVlO1xuXHR9LFxuXG5cdC8vIEluY2x1ZGVzIHNvbWUgZXZlbnQgcHJvcHMgc2hhcmVkIGJ5IEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50XG5cdHByb3BzOiAoIFwiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGV0YWlsIGV2ZW50UGhhc2UgXCIgK1xuXHRcdFwibWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaFwiICkuc3BsaXQoIFwiIFwiICksXG5cblx0Zml4SG9va3M6IHt9LFxuXG5cdGtleUhvb2tzOiB7XG5cdFx0cHJvcHM6IFwiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZVwiLnNwbGl0KCBcIiBcIiApLFxuXHRcdGZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHtcblxuXHRcdFx0Ly8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzXG5cdFx0XHRpZiAoIGV2ZW50LndoaWNoID09IG51bGwgKSB7XG5cdFx0XHRcdGV2ZW50LndoaWNoID0gb3JpZ2luYWwuY2hhckNvZGUgIT0gbnVsbCA/IG9yaWdpbmFsLmNoYXJDb2RlIDogb3JpZ2luYWwua2V5Q29kZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV2ZW50O1xuXHRcdH1cblx0fSxcblxuXHRtb3VzZUhvb2tzOiB7XG5cdFx0cHJvcHM6ICggXCJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIFwiICtcblx0XHRcdFwic2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudFwiICkuc3BsaXQoIFwiIFwiICksXG5cdFx0ZmlsdGVyOiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkge1xuXHRcdFx0dmFyIGV2ZW50RG9jLCBkb2MsIGJvZHksXG5cdFx0XHRcdGJ1dHRvbiA9IG9yaWdpbmFsLmJ1dHRvbjtcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHBhZ2VYL1kgaWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZVxuXHRcdFx0aWYgKCBldmVudC5wYWdlWCA9PSBudWxsICYmIG9yaWdpbmFsLmNsaWVudFggIT0gbnVsbCApIHtcblx0XHRcdFx0ZXZlbnREb2MgPSBldmVudC50YXJnZXQub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDtcblx0XHRcdFx0ZG9jID0gZXZlbnREb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0XHRib2R5ID0gZXZlbnREb2MuYm9keTtcblxuXHRcdFx0XHRldmVudC5wYWdlWCA9IG9yaWdpbmFsLmNsaWVudFggK1xuXHRcdFx0XHRcdCggZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkgJiYgYm9keS5zY3JvbGxMZWZ0IHx8IDAgKSAtXG5cdFx0XHRcdFx0KCBkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAmJiBib2R5LmNsaWVudExlZnQgfHwgMCApO1xuXHRcdFx0XHRldmVudC5wYWdlWSA9IG9yaWdpbmFsLmNsaWVudFkgK1xuXHRcdFx0XHRcdCggZG9jICYmIGRvYy5zY3JvbGxUb3AgIHx8IGJvZHkgJiYgYm9keS5zY3JvbGxUb3AgIHx8IDAgKSAtXG5cdFx0XHRcdFx0KCBkb2MgJiYgZG9jLmNsaWVudFRvcCAgfHwgYm9keSAmJiBib2R5LmNsaWVudFRvcCAgfHwgMCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0XG5cdFx0XHQvLyBOb3RlOiBidXR0b24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIGRvbid0IHVzZSBpdFxuXHRcdFx0aWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGV2ZW50LndoaWNoID0gKCBidXR0b24gJiAxID8gMSA6ICggYnV0dG9uICYgMiA/IDMgOiAoIGJ1dHRvbiAmIDQgPyAyIDogMCApICkgKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV2ZW50O1xuXHRcdH1cblx0fSxcblxuXHRmaXg6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoIGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdICkge1xuXHRcdFx0cmV0dXJuIGV2ZW50O1xuXHRcdH1cblxuXHRcdC8vIENyZWF0ZSBhIHdyaXRhYmxlIGNvcHkgb2YgdGhlIGV2ZW50IG9iamVjdCBhbmQgbm9ybWFsaXplIHNvbWUgcHJvcGVydGllc1xuXHRcdHZhciBpLCBwcm9wLCBjb3B5LFxuXHRcdFx0dHlwZSA9IGV2ZW50LnR5cGUsXG5cdFx0XHRvcmlnaW5hbEV2ZW50ID0gZXZlbnQsXG5cdFx0XHRmaXhIb29rID0gdGhpcy5maXhIb29rc1sgdHlwZSBdO1xuXG5cdFx0aWYgKCAhZml4SG9vayApIHtcblx0XHRcdHRoaXMuZml4SG9va3NbIHR5cGUgXSA9IGZpeEhvb2sgPVxuXHRcdFx0XHRybW91c2VFdmVudC50ZXN0KCB0eXBlICkgPyB0aGlzLm1vdXNlSG9va3MgOlxuXHRcdFx0XHRya2V5RXZlbnQudGVzdCggdHlwZSApID8gdGhpcy5rZXlIb29rcyA6XG5cdFx0XHRcdHt9O1xuXHRcdH1cblx0XHRjb3B5ID0gZml4SG9vay5wcm9wcyA/IHRoaXMucHJvcHMuY29uY2F0KCBmaXhIb29rLnByb3BzICkgOiB0aGlzLnByb3BzO1xuXG5cdFx0ZXZlbnQgPSBuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cblx0XHRpID0gY29weS5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRwcm9wID0gY29weVsgaSBdO1xuXHRcdFx0ZXZlbnRbIHByb3AgXSA9IG9yaWdpbmFsRXZlbnRbIHByb3AgXTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBDb3Jkb3ZhIDIuNSAoV2ViS2l0KSAoIzEzMjU1KVxuXHRcdC8vIEFsbCBldmVudHMgc2hvdWxkIGhhdmUgYSB0YXJnZXQ7IENvcmRvdmEgZGV2aWNlcmVhZHkgZG9lc24ndFxuXHRcdGlmICggIWV2ZW50LnRhcmdldCApIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGRvY3VtZW50O1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA2LjArLCBDaHJvbWU8Mjhcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKVxuXHRcdGlmICggZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZXZlbnQudGFyZ2V0LnBhcmVudE5vZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZpeEhvb2suZmlsdGVyID8gZml4SG9vay5maWx0ZXIoIGV2ZW50LCBvcmlnaW5hbEV2ZW50ICkgOiBldmVudDtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Zm9jdXM6IHtcblxuXHRcdFx0Ly8gRmlyZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCB0aGlzICE9PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuZm9jdXMgKSB7XG5cdFx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlbGVnYXRlVHlwZTogXCJmb2N1c2luXCJcblx0XHR9LFxuXHRcdGJsdXI6IHtcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIHRoaXMgPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgJiYgdGhpcy5ibHVyICkge1xuXHRcdFx0XHRcdHRoaXMuYmx1cigpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlbGVnYXRlVHlwZTogXCJmb2N1c291dFwiXG5cdFx0fSxcblx0XHRjbGljazoge1xuXG5cdFx0XHQvLyBGb3IgY2hlY2tib3gsIGZpcmUgbmF0aXZlIGV2ZW50IHNvIGNoZWNrZWQgc3RhdGUgd2lsbCBiZSByaWdodFxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggdGhpcy50eXBlID09PSBcImNoZWNrYm94XCIgJiYgdGhpcy5jbGljayAmJiBqUXVlcnkubm9kZU5hbWUoIHRoaXMsIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHRoaXMuY2xpY2soKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBkb24ndCBmaXJlIG5hdGl2ZSAuY2xpY2soKSBvbiBsaW5rc1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5ub2RlTmFtZSggZXZlbnQudGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IGpRdWVyeS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsXG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc1NpbXVsYXRlZDogZmFsc2UsXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxufTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7XG5cdH0sXG5cdG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7XG5cdFx0dmFyIGhhbmRsZU9iaiwgdHlwZTtcblx0XHRpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHtcblxuXHRcdFx0Ly8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudFxuXHRcdFx0aGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqO1xuXHRcdFx0alF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcblx0XHRcdFx0aGFuZGxlT2JqLm5hbWVzcGFjZSA/XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDpcblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUsXG5cdFx0XHRcdGhhbmRsZU9iai5zZWxlY3Rvcixcblx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0XHR0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcyBbLCBmbl0gKVxuXHRcdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbnZhclxuXHRyeGh0bWxUYWcgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXFx3Oi1dKylbXj5dKilcXC8+L2dpLFxuXG5cdC8vIFN1cHBvcnQ6IElFIDEwLTExLCBFZGdlIDEwMjQwK1xuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXHRyc2NyaXB0VHlwZU1hc2tlZCA9IC9edHJ1ZVxcLyguKikvLFxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7XG5cbi8vIE1hbmlwdWxhdGluZyB0YWJsZXMgcmVxdWlyZXMgYSB0Ym9keVxuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdGpRdWVyeS5ub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCBcInRyXCIgKSA/XG5cblx0XHRlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInRib2R5XCIgKVsgMCBdIHx8XG5cdFx0XHRlbGVtLmFwcGVuZENoaWxkKCBlbGVtLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0Ym9keVwiICkgKSA6XG5cdFx0ZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0dmFyIG1hdGNoID0gcnNjcmlwdFR5cGVNYXNrZWQuZXhlYyggZWxlbS50eXBlICk7XG5cblx0aWYgKCBtYXRjaCApIHtcblx0XHRlbGVtLnR5cGUgPSBtYXRjaFsgMSBdO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgcGRhdGFDdXIsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzO1xuXG5cdGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyAxLiBDb3B5IHByaXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLlxuXHRpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHBkYXRhT2xkID0gZGF0YVByaXYuYWNjZXNzKCBzcmMgKTtcblx0XHRwZGF0YUN1ciA9IGRhdGFQcml2LnNldCggZGVzdCwgcGRhdGFPbGQgKTtcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XG5cblx0XHRpZiAoIGV2ZW50cyApIHtcblx0XHRcdGRlbGV0ZSBwZGF0YUN1ci5oYW5kbGU7XG5cdFx0XHRwZGF0YUN1ci5ldmVudHMgPSB7fTtcblxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIDIuIENvcHkgdXNlciBkYXRhXG5cdGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0dWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApO1xuXHRcdHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7XG5cblx0XHRkYXRhVXNlci5zZXQoIGRlc3QsIHVkYXRhQ3VyICk7XG5cdH1cbn1cblxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xuXHR2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXG5cdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkge1xuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuXG5cdC8vIEZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkge1xuXG5cdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0YXJncyA9IGNvbmNhdC5hcHBseSggW10sIGFyZ3MgKTtcblxuXHR2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuXHRcdGlOb0Nsb25lID0gbCAtIDEsXG5cdFx0dmFsdWUgPSBhcmdzWyAwIF0sXG5cdFx0aXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIGlzRnVuY3Rpb24gfHxcblx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xuXHRcdHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHRcdHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTtcblx0XHRcdGlmICggaXNGdW5jdGlvbiApIHtcblx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XG5cdFx0XHR9XG5cdFx0XHRkb21NYW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoIGwgKSB7XG5cdFx0ZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTtcblx0XHRmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0ZnJhZ21lbnQgPSBmaXJzdDtcblx0XHR9XG5cblx0XHQvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2tcblx0XHRpZiAoIGZpcnN0IHx8IGlnbm9yZWQgKSB7XG5cdFx0XHRzY3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgXCJzY3JpcHRcIiApLCBkaXNhYmxlU2NyaXB0ICk7XG5cdFx0XHRoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7XG5cblx0XHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW1cblx0XHRcdC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cFxuXHRcdFx0Ly8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKCM4MDcwKS5cblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0bm9kZSA9IGZyYWdtZW50O1xuXG5cdFx0XHRcdGlmICggaSAhPT0gaU5vQ2xvbmUgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGpRdWVyeS5jbG9uZSggbm9kZSwgdHJ1ZSwgdHJ1ZSApO1xuXG5cdFx0XHRcdFx0Ly8gS2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvblxuXHRcdFx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjEsIFBoYW50b21KUzwyXG5cdFx0XHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FsbGJhY2suY2FsbCggY29sbGVjdGlvblsgaSBdLCBub2RlLCBpICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblx0XHRcdFx0ZG9jID0gc2NyaXB0c1sgc2NyaXB0cy5sZW5ndGggLSAxIF0ub3duZXJEb2N1bWVudDtcblxuXHRcdFx0XHQvLyBSZWVuYWJsZSBzY3JpcHRzXG5cdFx0XHRcdGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTtcblxuXHRcdFx0XHQvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0aW9uXG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgaGFzU2NyaXB0czsgaSsrICkge1xuXHRcdFx0XHRcdG5vZGUgPSBzY3JpcHRzWyBpIF07XG5cdFx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgXCJcIiApICYmXG5cdFx0XHRcdFx0XHQhZGF0YVByaXYuYWNjZXNzKCBub2RlLCBcImdsb2JhbEV2YWxcIiApICYmXG5cdFx0XHRcdFx0XHRqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUuc3JjICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCBcIlwiICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGpRdWVyeS5jb250YWlucyggbm9kZS5vd25lckRvY3VtZW50LCBub2RlICkgKSB7XG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHR9XG5cdFx0XHRub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRyZXR1cm4gaHRtbC5yZXBsYWNlKCByeGh0bWxUYWcsIFwiPCQxPjwvJDI+XCIgKTtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxuXHRcdFx0aW5QYWdlID0galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblxuXHRcdC8vIEZpeCBJRSBjbG9uaW5nIGlzc3Vlc1xuXHRcdGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiZcblx0XHRcdFx0IWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHA6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PSAzNS00NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0gMzUtNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBLZWVwIGRvbU1hbmlwIGV4cG9zZWQgdW50aWwgMy4wIChnaC0yMjI1KVxuXHRkb21NYW5pcDogZG9tTWFuaXAsXG5cblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApO1xuXHR9LFxuXG5cdHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS50ZXh0KCB0aGlzICkgOlxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRwcmVwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gdGhpc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXG5cdFx0XHRcdC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzXG5cdFx0XHRcdGVsZW0udGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0ZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50cztcblx0XHRkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7XG5cblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0aHRtbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBlbGVtID0gdGhpc1sgMCBdIHx8IHt9LFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uaW5uZXJIVE1MO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MXG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiZcblx0XHRcdFx0IXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkge1xuXG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cdFx0XHRcdFx0XHRcdGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbSA9IDA7XG5cblx0XHRcdFx0Ly8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge31cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHR0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpZ25vcmVkID0gW107XG5cblx0XHQvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnRcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuXG5cdFx0XHRpZiAoIGpRdWVyeS5pbkFycmF5KCB0aGlzLCBpZ25vcmVkICkgPCAwICkge1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApO1xuXHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0XHRwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb25cblx0XHR9LCBpZ25vcmVkICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIHtcblx0YXBwZW5kVG86IFwiYXBwZW5kXCIsXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXG5cdGluc2VydEJlZm9yZTogXCJiZWZvcmVcIixcblx0aW5zZXJ0QWZ0ZXI6IFwiYWZ0ZXJcIixcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXG59LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBlbGVtcyxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0aW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLFxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xuXHRcdFx0ZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6IHRoaXMuY2xvbmUoIHRydWUgKTtcblx0XHRcdGpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogUXRXZWJLaXRcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Ncblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xuXG5cbnZhciBpZnJhbWUsXG5cdGVsZW1kaXNwbGF5ID0ge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveFxuXHRcdC8vIFdlIGhhdmUgdG8gcHJlLWRlZmluZSB0aGVzZSB2YWx1ZXMgZm9yIEZGICgjMTAyMjcpXG5cdFx0SFRNTDogXCJibG9ja1wiLFxuXHRcdEJPRFk6IFwiYmxvY2tcIlxuXHR9O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBhY3R1YWwgZGlzcGxheSBvZiBhIGVsZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG5vZGVOYW1lIG9mIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gZG9jIERvY3VtZW50IG9iamVjdFxuICovXG5cbi8vIENhbGxlZCBvbmx5IGZyb20gd2l0aGluIGRlZmF1bHREaXNwbGF5XG5mdW5jdGlvbiBhY3R1YWxEaXNwbGF5KCBuYW1lLCBkb2MgKSB7XG5cdHZhciBlbGVtID0galF1ZXJ5KCBkb2MuY3JlYXRlRWxlbWVudCggbmFtZSApICkuYXBwZW5kVG8oIGRvYy5ib2R5ICksXG5cblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbVsgMCBdLCBcImRpc3BsYXlcIiApO1xuXG5cdC8vIFdlIGRvbid0IGhhdmUgYW55IGRhdGEgc3RvcmVkIG9uIHRoZSBlbGVtZW50LFxuXHQvLyBzbyB1c2UgXCJkZXRhY2hcIiBtZXRob2QgYXMgZmFzdCB3YXkgdG8gZ2V0IHJpZCBvZiB0aGUgZWxlbWVudFxuXHRlbGVtLmRldGFjaCgpO1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG4vKipcbiAqIFRyeSB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgZGlzcGxheSB2YWx1ZSBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gbm9kZU5hbWVcbiAqL1xuZnVuY3Rpb24gZGVmYXVsdERpc3BsYXkoIG5vZGVOYW1lICkge1xuXHR2YXIgZG9jID0gZG9jdW1lbnQsXG5cdFx0ZGlzcGxheSA9IGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdO1xuXG5cdGlmICggIWRpc3BsYXkgKSB7XG5cdFx0ZGlzcGxheSA9IGFjdHVhbERpc3BsYXkoIG5vZGVOYW1lLCBkb2MgKTtcblxuXHRcdC8vIElmIHRoZSBzaW1wbGUgd2F5IGZhaWxzLCByZWFkIGZyb20gaW5zaWRlIGFuIGlmcmFtZVxuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgfHwgIWRpc3BsYXkgKSB7XG5cblx0XHRcdC8vIFVzZSB0aGUgYWxyZWFkeS1jcmVhdGVkIGlmcmFtZSBpZiBwb3NzaWJsZVxuXHRcdFx0aWZyYW1lID0gKCBpZnJhbWUgfHwgalF1ZXJ5KCBcIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz5cIiApIClcblx0XHRcdFx0LmFwcGVuZFRvKCBkb2MuZG9jdW1lbnRFbGVtZW50ICk7XG5cblx0XHRcdC8vIEFsd2F5cyB3cml0ZSBhIG5ldyBIVE1MIHNrZWxldG9uIHNvIFdlYmtpdCBhbmQgRmlyZWZveCBkb24ndCBjaG9rZSBvbiByZXVzZVxuXHRcdFx0ZG9jID0gaWZyYW1lWyAwIF0uY29udGVudERvY3VtZW50O1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRVxuXHRcdFx0ZG9jLndyaXRlKCk7XG5cdFx0XHRkb2MuY2xvc2UoKTtcblxuXHRcdFx0ZGlzcGxheSA9IGFjdHVhbERpc3BsYXkoIG5vZGVOYW1lLCBkb2MgKTtcblx0XHRcdGlmcmFtZS5kZXRhY2goKTtcblx0XHR9XG5cblx0XHQvLyBTdG9yZSB0aGUgY29ycmVjdCBkZWZhdWx0IGRpc3BsYXlcblx0XHRlbGVtZGlzcGxheVsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cdH1cblxuXHRyZXR1cm4gZGlzcGxheTtcbn1cbnZhciBybWFyZ2luID0gKCAvXm1hcmdpbi8gKTtcblxudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRTw9MTErLCBGaXJlZm94PD0zMCsgKCMxNTA5OCwgIzE0MTUwKVxuXHRcdC8vIElFIHRocm93cyBvbiBlbGVtZW50cyBjcmVhdGVkIGluIHBvcHVwc1xuXHRcdC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCBcImRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGVcIlxuXHRcdHZhciB2aWV3ID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXG5cdFx0aWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7XG5cdFx0XHR2aWV3ID0gd2luZG93O1xuXHRcdH1cblxuXHRcdHJldHVybiB2aWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0gKTtcblx0fTtcblxudmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MgKSB7XG5cdHZhciByZXQsIG5hbWUsXG5cdFx0b2xkID0ge307XG5cblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG5cdH1cblxuXHRyZXQgPSBjYWxsYmFjay5hcHBseSggZWxlbSwgYXJncyB8fCBbXSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG52YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBwaXhlbE1hcmdpblJpZ2h0VmFsLCByZWxpYWJsZU1hcmdpbkxlZnRWYWwsXG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLFxuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHQvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25tZW50c1xuXHRpZiAoICFkaXYuc3R5bGUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHQvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAoIzg5MDgpXG5cdGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiY29udGVudC1ib3hcIjtcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcblxuXHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwiYm9yZGVyOjA7d2lkdGg6OHB4O2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweDtcIiArXG5cdFx0XCJwYWRkaW5nOjA7bWFyZ2luLXRvcDoxcHg7cG9zaXRpb246YWJzb2x1dGVcIjtcblx0Y29udGFpbmVyLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHQvLyBFeGVjdXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVzdHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlvdXRcblx0Ly8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi5cblx0ZnVuY3Rpb24gY29tcHV0ZVN0eWxlVGVzdHMoKSB7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94PDI5LCBBbmRyb2lkIDIuM1xuXHRcdFx0Ly8gVmVuZG9yLXByZWZpeCBib3gtc2l6aW5nXG5cdFx0XHRcIi13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtcIiArXG5cdFx0XHRcInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwidG9wOjElO3dpZHRoOjUwJVwiO1xuXHRcdGRpdi5pbm5lckhUTUwgPSBcIlwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHR2YXIgZGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2ICk7XG5cdFx0cGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gXCIxJVwiO1xuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCA9IGRpdlN0eWxlLm1hcmdpbkxlZnQgPT09IFwiMnB4XCI7XG5cdFx0Ym94U2l6aW5nUmVsaWFibGVWYWwgPSBkaXZTdHlsZS53aWR0aCA9PT0gXCI0cHhcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHlcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUubWFyZ2luUmlnaHQgPSBcIjUwJVwiO1xuXHRcdHBpeGVsTWFyZ2luUmlnaHRWYWwgPSBkaXZTdHlsZS5tYXJnaW5SaWdodCA9PT0gXCI0cHhcIjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cdH1cblxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0cGl4ZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIFRoaXMgdGVzdCBpcyBleGVjdXRlZCBvbmx5IG9uY2UgYnV0IHdlIHN0aWxsIGRvIG1lbW9pemluZ1xuXHRcdFx0Ly8gc2luY2Ugd2UgY2FuIHVzZSB0aGUgYm94U2l6aW5nUmVsaWFibGUgcHJlLWNvbXB1dGluZy5cblx0XHRcdC8vIE5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHRlc3Qgd2FzIGFscmVhZHkgcGVyZm9ybWVkLCB0aG91Z2guXG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7XG5cdFx0fSxcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGJveFNpemluZ1JlbGlhYmxlVmFsID09IG51bGwgKSB7XG5cdFx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7XG5cdFx0fSxcblx0XHRwaXhlbE1hcmdpblJpZ2h0OiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAtNC4zXG5cdFx0XHQvLyBXZSdyZSBjaGVja2luZyBmb3IgYm94U2l6aW5nUmVsaWFibGVWYWwgaGVyZSBpbnN0ZWFkIG9mIHBpeGVsTWFyZ2luUmlnaHRWYWxcblx0XHRcdC8vIHNpbmNlIHRoYXQgY29tcHJlc3NlcyBiZXR0ZXIgYW5kIHRoZXkncmUgY29tcHV0ZWQgdG9nZXRoZXIgYW55d2F5LlxuXHRcdFx0aWYgKCBib3hTaXppbmdSZWxpYWJsZVZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHBpeGVsTWFyZ2luUmlnaHRWYWw7XG5cdFx0fSxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggb25seSwgQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSAzN1xuXHRcdFx0aWYgKCBib3hTaXppbmdSZWxpYWJsZVZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDtcblx0XHR9LFxuXHRcdHJlbGlhYmxlTWFyZ2luUmlnaHQ6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuM1xuXHRcdFx0Ly8gQ2hlY2sgaWYgZGl2IHdpdGggZXhwbGljaXQgd2lkdGggYW5kIG5vIG1hcmdpbi1yaWdodCBpbmNvcnJlY3RseVxuXHRcdFx0Ly8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmlnaHQgYmFzZWQgb24gd2lkdGggb2YgY29udGFpbmVyLiAoIzMzMzMpXG5cdFx0XHQvLyBXZWJLaXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHRcblx0XHRcdC8vIFRoaXMgc3VwcG9ydCBmdW5jdGlvbiBpcyBvbmx5IGV4ZWN1dGVkIG9uY2Ugc28gbm8gbWVtb2l6aW5nIGlzIG5lZWRlZC5cblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdG1hcmdpbkRpdiA9IGRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdC8vIFJlc2V0IENTUzogYm94LXNpemluZzsgZGlzcGxheTsgbWFyZ2luOyBib3JkZXI7IHBhZGRpbmdcblx0XHRcdG1hcmdpbkRpdi5zdHlsZS5jc3NUZXh0ID0gZGl2LnN0eWxlLmNzc1RleHQgPVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zXG5cdFx0XHRcdC8vIFZlbmRvci1wcmVmaXggYm94LXNpemluZ1xuXHRcdFx0XHRcIi13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O1wiICtcblx0XHRcdFx0XCJkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MFwiO1xuXHRcdFx0bWFyZ2luRGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gbWFyZ2luRGl2LnN0eWxlLndpZHRoID0gXCIwXCI7XG5cdFx0XHRkaXYuc3R5bGUud2lkdGggPSBcIjFweFwiO1xuXHRcdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdFx0cmV0ID0gIXBhcnNlRmxvYXQoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBtYXJnaW5EaXYgKS5tYXJnaW5SaWdodCApO1xuXG5cdFx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApO1xuXHRcdFx0ZGl2LnJlbW92ZUNoaWxkKCBtYXJnaW5EaXYgKTtcblxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdH0gKTtcbn0gKSgpO1xuXG5cbmZ1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7XG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cdHJldCA9IGNvbXB1dGVkID8gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF0gOiB1bmRlZmluZWQ7XG5cblx0Ly8gU3VwcG9ydDogT3BlcmEgMTIuMXggb25seVxuXHQvLyBGYWxsIGJhY2sgdG8gc3R5bGUgZXZlbiB3aXRob3V0IGNvbXB1dGVkXG5cdC8vIGNvbXB1dGVkIGlzIHVuZGVmaW5lZCBmb3IgZWxlbXMgb24gZG9jdW1lbnQgZnJhZ21lbnRzXG5cdGlmICggKCByZXQgPT09IFwiXCIgfHwgcmV0ID09PSB1bmRlZmluZWQgKSAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSApIHtcblx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFOVxuXHQvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG9ubHkgbmVlZGVkIGZvciAuY3NzKCdmaWx0ZXInKSAoIzEyNTM3KVxuXHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoICFzdXBwb3J0LnBpeGVsTWFyZ2luUmlnaHQoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcm1hcmdpbi50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcblx0XHRcdHdpZHRoID0gc3R5bGUud2lkdGg7XG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcblxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xuXHRcdFx0cmV0ID0gY29tcHV0ZWQud2lkdGg7XG5cblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcblx0XHRcdHN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgP1xuXG5cdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuXG5cdFx0cmV0ICsgXCJcIiA6XG5cdFx0cmV0O1xufVxuXG5cbmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHtcblxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XG5cblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbnZhclxuXG5cdC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGVcblx0Ly8gZXhjZXB0IFwidGFibGVcIiwgXCJ0YWJsZS1jZWxsXCIsIG9yIFwidGFibGUtY2FwdGlvblwiXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxuXHRyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sXG5cblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH0sXG5cblx0Y3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiT1wiLCBcIk1velwiLCBcIm1zXCIgXSxcblx0ZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKS5zdHlsZTtcblxuLy8gUmV0dXJuIGEgY3NzIHByb3BlcnR5IG1hcHBlZCB0byBhIHBvdGVudGlhbGx5IHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7XG5cblx0Ly8gU2hvcnRjdXQgZm9yIG5hbWVzIHRoYXQgYXJlIG5vdCB2ZW5kb3IgcHJlZml4ZWRcblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHtcblxuXHQvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuXG5cdC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludFxuXHR2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTtcblx0cmV0dXJuIG1hdGNoZXMgP1xuXG5cdFx0Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgXCJzdWJ0cmFjdFwiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3Ncblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApIDpcblx0XHR2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYXVnbWVudFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhLCBpc0JvcmRlckJveCwgc3R5bGVzICkge1xuXHR2YXIgaSA9IGV4dHJhID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgP1xuXG5cdFx0Ly8gSWYgd2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZvaWQgYXVnbWVudGF0aW9uXG5cdFx0NCA6XG5cblx0XHQvLyBPdGhlcndpc2UgaW5pdGlhbGl6ZSBmb3IgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBwcm9wZXJ0aWVzXG5cdFx0bmFtZSA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cblx0XHR2YWwgPSAwO1xuXG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHtcblxuXHRcdC8vIEJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpbiwgc28gYWRkIGl0IGlmIHdlIHdhbnQgaXRcblx0XHRpZiAoIGV4dHJhID09PSBcIm1hcmdpblwiICkge1xuXHRcdFx0dmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIGV4dHJhICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdGlmICggaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIGJvcmRlci1ib3ggaW5jbHVkZXMgcGFkZGluZywgc28gcmVtb3ZlIGl0IGlmIHdlIHdhbnQgY29udGVudFxuXHRcdFx0aWYgKCBleHRyYSA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgYm9yZGVyIG5vciBtYXJnaW4sIHNvIHJlbW92ZSBib3JkZXJcblx0XHRcdGlmICggZXh0cmEgIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRcdHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQsIHNvIGFkZCBwYWRkaW5nXG5cdFx0XHR2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQgbm9yIHBhZGRpbmcsIHNvIGFkZCBib3JkZXJcblx0XHRcdGlmICggZXh0cmEgIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHR2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdmFsO1xufVxuXG5mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIG9mZnNldCBwcm9wZXJ0eSwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgYm9yZGVyLWJveCB2YWx1ZVxuXHR2YXIgdmFsdWVJc0JvcmRlckJveCA9IHRydWUsXG5cdFx0dmFsID0gbmFtZSA9PT0gXCJ3aWR0aFwiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zmc2V0SGVpZ2h0LFxuXHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIjtcblxuXHQvLyBTb21lIG5vbi1odG1sIGVsZW1lbnRzIHJldHVybiB1bmRlZmluZWQgZm9yIG9mZnNldFdpZHRoLCBzbyBjaGVjayBmb3IgbnVsbC91bmRlZmluZWRcblx0Ly8gc3ZnIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5Mjg1XG5cdC8vIE1hdGhNTCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTY2OFxuXHRpZiAoIHZhbCA8PSAwIHx8IHZhbCA9PSBudWxsICkge1xuXG5cdFx0Ly8gRmFsbCBiYWNrIHRvIGNvbXB1dGVkIHRoZW4gdW5jb21wdXRlZCBjc3MgaWYgbmVjZXNzYXJ5XG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHRpZiAoIHZhbCA8IDAgfHwgdmFsID09IG51bGwgKSB7XG5cdFx0XHR2YWwgPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gQ29tcHV0ZWQgdW5pdCBpcyBub3QgcGl4ZWxzLiBTdG9wIGhlcmUgYW5kIHJldHVybi5cblx0XHRpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHtcblx0XHRcdHJldHVybiB2YWw7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgZm9yIHN0eWxlIGluIGNhc2UgYSBicm93c2VyIHdoaWNoIHJldHVybnMgdW5yZWxpYWJsZSB2YWx1ZXNcblx0XHQvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSByZWxpYWJsZSBlbGVtLnN0eWxlXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94ICYmXG5cdFx0XHQoIHN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCB2YWwgPT09IGVsZW0uc3R5bGVbIG5hbWUgXSApO1xuXG5cdFx0Ly8gTm9ybWFsaXplIFwiXCIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYVxuXHRcdHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7XG5cdH1cblxuXHQvLyBVc2UgdGhlIGFjdGl2ZSBib3gtc2l6aW5nIG1vZGVsIHRvIGFkZC9zdWJ0cmFjdCBpcnJlbGV2YW50IHN0eWxlc1xuXHRyZXR1cm4gKCB2YWwgK1xuXHRcdGF1Z21lbnRXaWR0aE9ySGVpZ2h0KFxuXHRcdFx0ZWxlbSxcblx0XHRcdG5hbWUsXG5cdFx0XHRleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICksXG5cdFx0XHR2YWx1ZUlzQm9yZGVyQm94LFxuXHRcdFx0c3R5bGVzXG5cdFx0KVxuXHQpICsgXCJweFwiO1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLCBoaWRkZW4sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTtcblx0XHRpZiAoICFlbGVtLnN0eWxlICkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcIm9sZGRpc3BsYXlcIiApO1xuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBSZXNldCB0aGUgaW5saW5lIGRpc3BsYXkgb2YgdGhpcyBlbGVtZW50IHRvIGxlYXJuIGlmIGl0IGlzXG5cdFx0XHQvLyBiZWluZyBoaWRkZW4gYnkgY2FzY2FkZWQgcnVsZXMgb3Igbm90XG5cdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gJiYgZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBlbGVtZW50cyB3aGljaCBoYXZlIGJlZW4gb3ZlcnJpZGRlbiB3aXRoIGRpc3BsYXk6IG5vbmVcblx0XHRcdC8vIGluIGEgc3R5bGVzaGVldCB0byB3aGF0ZXZlciB0aGUgZGVmYXVsdCBicm93c2VyIHN0eWxlIGlzXG5cdFx0XHQvLyBmb3Igc3VjaCBhbiBlbGVtZW50XG5cdFx0XHRpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJiBpc0hpZGRlbiggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5hY2Nlc3MoXG5cdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcIm9sZGRpc3BsYXlcIixcblx0XHRcdFx0XHRkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGhpZGRlbiA9IGlzSGlkZGVuKCBlbGVtICk7XG5cblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgfHwgIWhpZGRlbiApIHtcblx0XHRcdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0XHRcdGVsZW0sXG5cdFx0XHRcdFx0XCJvbGRkaXNwbGF5XCIsXG5cdFx0XHRcdFx0aGlkZGVuID8gZGlzcGxheSA6IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgbW9zdCBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcFxuXHQvLyB0byBhdm9pZCB0aGUgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKCAhc2hvdyB8fCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiIHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IHNob3cgPyB2YWx1ZXNbIGluZGV4IF0gfHwgXCJcIiA6IFwibm9uZVwiO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50cztcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxuXHQvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHlcblx0Y3NzSG9va3M6IHtcblx0XHRvcGFjaXR5OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHRcdC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5XG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcblx0Y3NzTnVtYmVyOiB7XG5cdFx0XCJhbmltYXRpb25JdGVyYXRpb25Db3VudFwiOiB0cnVlLFxuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcblx0XHRcImZpbGxPcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxuXHRcdFwiZm9udFdlaWdodFwiOiB0cnVlLFxuXHRcdFwibGluZUhlaWdodFwiOiB0cnVlLFxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwib3JkZXJcIjogdHJ1ZSxcblx0XHRcIm9ycGhhbnNcIjogdHJ1ZSxcblx0XHRcIndpZG93c1wiOiB0cnVlLFxuXHRcdFwiekluZGV4XCI6IHRydWUsXG5cdFx0XCJ6b29tXCI6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHtcblx0XHRcImZsb2F0XCI6IFwiY3NzRmxvYXRcIlxuXHR9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRcdG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHxcblx0XHRcdCggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG9yaWdOYW1lICkgfHwgb3JpZ05hbWUgKTtcblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyAjOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbHVlICs9IHJldCAmJiByZXRbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0XHRcdC8vIGJhY2tncm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwgY2xvbmUncyB2YWx1ZXNcblx0XHRcdGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSBcIlwiICYmIG5hbWUuaW5kZXhPZiggXCJiYWNrZ3JvdW5kXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IFwiaW5oZXJpdFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fFxuXHRcdFx0XHQoIHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0bmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fFxuXHRcdFx0KCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggb3JpZ05hbWUgKSB8fCBvcmlnTmFtZSApO1xuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImhlaWdodFwiLCBcIndpZHRoXCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXG5cdFx0XHRcdC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0XG5cdFx0XHRcdHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApICYmXG5cdFx0XHRcdFx0ZWxlbS5vZmZzZXRXaWR0aCA9PT0gMCA/XG5cdFx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7XG5cdFx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkge1xuXHRcdFx0dmFyIG1hdGNoZXMsXG5cdFx0XHRcdHN0eWxlcyA9IGV4dHJhICYmIGdldFN0eWxlcyggZWxlbSApLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhICYmIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KFxuXHRcdFx0XHRcdGVsZW0sXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRleHRyYSxcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKTtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCxcblx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sIFwibWFyZ2luTGVmdFwiICkgKSB8fFxuXHRcdFx0XHRlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuXHRcdFx0XHRcdHN3YXAoIGVsZW0sIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cdFx0XHRcdFx0fSApXG5cdFx0XHRcdCkgKyBcInB4XCI7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDIuM1xualF1ZXJ5LmNzc0hvb2tzLm1hcmdpblJpZ2h0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuIHN3YXAoIGVsZW0sIHsgXCJkaXNwbGF5XCI6IFwiaW5saW5lLWJsb2NrXCIgfSxcblx0XHRcdFx0Y3VyQ1NTLCBbIGVsZW0sIFwibWFyZ2luUmlnaHRcIiBdICk7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXG5qUXVlcnkuZWFjaCgge1xuXHRtYXJnaW46IFwiXCIsXG5cdHBhZGRpbmc6IFwiXCIsXG5cdGJvcmRlcjogXCJXaWR0aFwiXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7XG5cdFx0ZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgaSA9IDAsXG5cdFx0XHRcdGV4cGFuZGVkID0ge30sXG5cblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXG5cdFx0XHRcdHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUuc3BsaXQoIFwiIFwiICkgOiBbIHZhbHVlIF07XG5cblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xuXHRcdH1cblx0fTtcblxuXHRpZiAoICFybWFyZ2luLnRlc3QoIHByZWZpeCApICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaXNBcnJheSggbmFtZSApICkge1xuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTtcblx0XHRcdFx0bGVuID0gbmFtZS5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0bWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG1hcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7XG5cdFx0fSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW4oIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gKSApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBTdXBwb3J0OiBJRTlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIENvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCB0aW1lcklkLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XG5cdH0gKTtcblx0cmV0dXJuICggZnhOb3cgPSBqUXVlcnkubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNCA7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7XG5cblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xuXHQvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCB0d2VlbiwgaG9va3MsIG9sZGZpcmUsIGRpc3BsYXksIGNoZWNrRGlzcGxheSxcblx0XHRhbmltID0gdGhpcyxcblx0XHRvcmlnID0ge30sXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlLFxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW4oIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIEhhbmRsZSBxdWV1ZTogZmFsc2UgcHJvbWlzZXNcblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gSGVpZ2h0L3dpZHRoIG92ZXJmbG93IHBhc3Ncblx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCJoZWlnaHRcIiBpbiBwcm9wcyB8fCBcIndpZHRoXCIgaW4gcHJvcHMgKSApIHtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgc25lYWtzIG91dFxuXHRcdC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUU5LTEwIGRvIG5vdFxuXHRcdC8vIGNoYW5nZSB0aGUgb3ZlcmZsb3cgYXR0cmlidXRlIHdoZW4gb3ZlcmZsb3dYIGFuZFxuXHRcdC8vIG92ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlXG5cdFx0b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07XG5cblx0XHQvLyBTZXQgZGlzcGxheSBwcm9wZXJ0eSB0byBpbmxpbmUtYmxvY2sgZm9yIGhlaWdodC93aWR0aFxuXHRcdC8vIGFuaW1hdGlvbnMgb24gaW5saW5lIGVsZW1lbnRzIHRoYXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQgYW5pbWF0ZWRcblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblxuXHRcdC8vIFRlc3QgZGVmYXVsdCBkaXNwbGF5IGlmIGRpc3BsYXkgaXMgY3VycmVudGx5IFwibm9uZVwiXG5cdFx0Y2hlY2tEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgP1xuXHRcdFx0ZGF0YVByaXYuZ2V0KCBlbGVtLCBcIm9sZGRpc3BsYXlcIiApIHx8IGRlZmF1bHREaXNwbGF5KCBlbGVtLm5vZGVOYW1lICkgOiBkaXNwbGF5O1xuXG5cdFx0aWYgKCBjaGVja0Rpc3BsYXkgPT09IFwiaW5saW5lXCIgJiYgalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBzaG93L2hpZGUgcGFzc1xuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xuXHRcdHZhbHVlID0gcHJvcHNbIHByb3AgXTtcblx0XHRpZiAoIHJmeHR5cGVzLmV4ZWMoIHZhbHVlICkgKSB7XG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcblx0XHRcdHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gXCJ0b2dnbGVcIjtcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGRhdGFTaG93IGxlZnQgb3ZlciBmcm9tIGEgc3RvcHBlZCBoaWRlIG9yIHNob3dcblx0XHRcdFx0Ly8gYW5kIHdlIGFyZSBnb2luZyB0byBwcm9jZWVkIHdpdGggc2hvdywgd2Ugc2hvdWxkIHByZXRlbmQgdG8gYmUgaGlkZGVuXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xuXG5cdFx0Ly8gQW55IG5vbi1meCB2YWx1ZSBzdG9wcyB1cyBmcm9tIHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaXNwbGF5ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XG5cdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcblx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwge30gKTtcblx0XHR9XG5cblx0XHQvLyBTdG9yZSBzdGF0ZSBpZiBpdHMgdG9nZ2xlIC0gZW5hYmxlcyAuc3RvcCgpLnRvZ2dsZSgpIHRvIFwicmV2ZXJzZVwiXG5cdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xuXHRcdH1cblx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdGpRdWVyeSggZWxlbSApLnNob3coKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5KCBlbGVtICkuaGlkZSgpO1xuXHRcdFx0fSApO1xuXHRcdH1cblx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHByb3A7XG5cblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJmeHNob3dcIiApO1xuXHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHR0d2VlbiA9IGNyZWF0ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5pbSApO1xuXG5cdFx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdFx0ZGF0YVNob3dbIHByb3AgXSA9IHR3ZWVuLnN0YXJ0O1xuXHRcdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0XHR0d2Vlbi5lbmQgPSB0d2Vlbi5zdGFydDtcblx0XHRcdFx0XHR0d2Vlbi5zdGFydCA9IHByb3AgPT09IFwid2lkdGhcIiB8fCBwcm9wID09PSBcImhlaWdodFwiID8gMSA6IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0Ly8gSWYgdGhpcyBpcyBhIG5vb3AgbGlrZSAuaGlkZSgpLmhpZGUoKSwgcmVzdG9yZSBhbiBvdmVyd3JpdHRlbiBkaXNwbGF5IHZhbHVlXG5cdH0gZWxzZSBpZiAoICggZGlzcGxheSA9PT0gXCJub25lXCIgPyBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApIDogZGlzcGxheSApID09PSBcImlubGluZVwiICkge1xuXHRcdHN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5O1xuXHR9XG59XG5cbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xuXHR2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzO1xuXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xuXHRmb3IgKCBpbmRleCBpbiBwcm9wcyApIHtcblx0XHRuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggaW5kZXggKTtcblx0XHRlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07XG5cdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zXG5cdFx0XHRcdC8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAtICggMC41IHx8IDAgKWAgKCMxMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkge1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTtcblxuXHRcdFx0aWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7XG5cdFx0XHRcdHJldHVybiByZW1haW5pbmc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0XHRhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAwLFxuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0XG5cdFx0XHRcdFx0bGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDtcblx0XHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcmVzdWx0LnN0b3AgKSApIHtcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID1cblx0XHRcdFx0XHRqUXVlcnkucHJveHkoIHJlc3VsdC5zdG9wLCByZXN1bHQgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcblxuXHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHQvLyBhdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xuXHRyZXR1cm4gYW5pbWF0aW9uLnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG59XG5cbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90d2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRqUXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCxcblx0XHRkdXJhdGlvbjogc3BlZWQsXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFqUXVlcnkuaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4Lm9mZiA/IDAgOiB0eXBlb2Ygb3B0LmR1cmF0aW9uID09PSBcIm51bWJlclwiID9cblx0XHRvcHQuZHVyYXRpb24gOiBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyA/XG5cdFx0XHRqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXSA6IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW4gKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBqUXVlcnkubm93KCk7XG5cblx0Zm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkge1xuXHRcdHRpbWVyID0gdGltZXJzWyBpIF07XG5cblx0XHQvLyBDaGVja3MgdGhlIHRpbWVyIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlbW92ZWRcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRpZiAoIHRpbWVyKCkgKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnRpbWVycy5wb3AoKTtcblx0fVxufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCAhdGltZXJJZCApIHtcblx0XHR0aW1lcklkID0gd2luZG93LnNldEludGVydmFsKCBqUXVlcnkuZngudGljaywgalF1ZXJ5LmZ4LmludGVydmFsICk7XG5cdH1cbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdHdpbmRvdy5jbGVhckludGVydmFsKCB0aW1lcklkICk7XG5cblx0dGltZXJJZCA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxuLy8gaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5L1xualF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7XG5cdHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7XG5cdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkge1xuXHRcdHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTtcblx0XHRob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0fTtcblx0fSApO1xufTtcblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKSxcblx0XHRzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNlbGVjdFwiICksXG5cdFx0b3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9wdGlvblwiICkgKTtcblxuXHRpbnB1dC50eXBlID0gXCJjaGVja2JveFwiO1xuXG5cdC8vIFN1cHBvcnQ6IGlPUzw9NS4xLCBBbmRyb2lkPD00LjIrXG5cdC8vIERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlIFwib25cIlxuXHRzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gXCJcIjtcblxuXHQvLyBTdXBwb3J0OiBJRTw9MTErXG5cdC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0XG5cdHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw9Mi4zXG5cdC8vIE9wdGlvbnMgaW5zaWRlIGRpc2FibGVkIHNlbGVjdHMgYXJlIGluY29ycmVjdGx5IG1hcmtlZCBhcyBkaXNhYmxlZFxuXHRzZWxlY3QuZGlzYWJsZWQgPSB0cnVlO1xuXHRzdXBwb3J0Lm9wdERpc2FibGVkID0gIW9wdC5kaXNhYmxlZDtcblxuXHQvLyBTdXBwb3J0OiBJRTw9MTErXG5cdC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvXG5cdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdGlucHV0LnZhbHVlID0gXCJ0XCI7XG5cdGlucHV0LnR5cGUgPSBcInJhZGlvXCI7XG5cdHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSBcInRcIjtcbn0gKSgpO1xuXG5cbnZhciBib29sSG9vayxcblx0YXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgYXR0cmlidXRlcyBhcmUgbG93ZXJjYXNlXG5cdFx0Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZFxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXHRcdFx0bmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdIHx8XG5cdFx0XHRcdCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgXCJcIiApO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xuXHR9LFxuXG5cdGF0dHJIb29rczoge1xuXHRcdHR5cGU6IHtcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09IFwicmFkaW9cIiAmJlxuXHRcdFx0XHRcdGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgKSB7XG5cdFx0XHRcdFx0dmFyIHZhbCA9IGVsZW0udmFsdWU7XG5cdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCB2YWx1ZSApO1xuXHRcdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdFx0ZWxlbS52YWx1ZSA9IHZhbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHR2YXIgbmFtZSwgcHJvcE5hbWUsXG5cdFx0XHRpID0gMCxcblx0XHRcdGF0dHJOYW1lcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKTtcblxuXHRcdGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHR3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0cHJvcE5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cblx0XHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGdldCBzcGVjaWFsIHRyZWF0bWVudCAoIzEwODcwKVxuXHRcdFx0XHRpZiAoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHRcdFx0Ly8gU2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdG8gZmFsc2Vcblx0XHRcdFx0XHRlbGVtWyBwcm9wTmFtZSBdID0gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xualF1ZXJ5LmVhY2goIGpRdWVyeS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKCAvXFx3Ky9nICksIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZTtcblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRuYW1lLnRvTG93ZXJDYXNlKCkgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIGh0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvXG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdHJldHVybiB0YWJpbmRleCA/XG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRhYmluZGV4LCAxMCApIDpcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdFx0cmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5ocmVmID9cblx0XHRcdFx0XHRcdFx0MCA6XG5cdFx0XHRcdFx0XHRcdC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cbnZhciByY2xhc3MgPSAvW1xcdFxcclxcblxcZl0vZztcblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUgKSB7XG5cdFx0XHRjbGFzc2VzID0gdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdO1xuXG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdCggXCIgXCIgKyBjdXJWYWx1ZSArIFwiIFwiICkucmVwbGFjZSggcmNsYXNzLCBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGF6eiArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IGpRdWVyeS50cmltKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXR0ciggXCJjbGFzc1wiLCBcIlwiICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUgKSB7XG5cdFx0XHRjbGFzc2VzID0gdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdO1xuXG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0KCBcIiBcIiArIGN1clZhbHVlICsgXCIgXCIgKS5yZXBsYWNlKCByY2xhc3MsIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBqUXVlcnkudHJpbSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHtcblx0XHR2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdGlmICggdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIiAmJiB0eXBlID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLFxuXHRcdFx0XHRcdHN0YXRlVmFsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY2xhc3NOYW1lLCBpLCBzZWxmLCBjbGFzc05hbWVzO1xuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0Ly8gVG9nZ2xlIGluZGl2aWR1YWwgY2xhc3MgbmFtZXNcblx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKTtcblx0XHRcdFx0Y2xhc3NOYW1lcyA9IHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTtcblxuXHRcdFx0XHR3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIGdldENsYXNzKCBlbGVtICkgKyBcIiBcIiApLnJlcGxhY2UoIHJjbGFzcywgXCIgXCIgKVxuXHRcdFx0XHRcdC5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nLFxuXHRyc3BhY2VzID0gL1tcXHgyMFxcdFxcclxcblxcZl0rL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIGlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0cmV0dXJuIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgP1xuXG5cdFx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRcdHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICkgOlxuXG5cdFx0XHRcdFx0Ly8gSGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyXG5cdFx0XHRcdFx0cmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHR2YXIgdmFsO1xuXG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFMTAtMTErXG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRqUXVlcnkudHJpbSggalF1ZXJ5LnRleHQoIGVsZW0gKSApLnJlcGxhY2UoIHJzcGFjZXMsIFwiIFwiICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIiB8fCBpbmRleCA8IDAsXG5cdFx0XHRcdFx0dmFsdWVzID0gb25lID8gbnVsbCA6IFtdLFxuXHRcdFx0XHRcdG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoLFxuXHRcdFx0XHRcdGkgPSBpbmRleCA8IDAgP1xuXHRcdFx0XHRcdFx0bWF4IDpcblx0XHRcdFx0XHRcdG9uZSA/IGluZGV4IDogMDtcblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIElFOC05IGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFmdGVyIGZvcm0gcmVzZXQgKCMyNTUxKVxuXHRcdFx0XHRcdGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJlxuXG5cdFx0XHRcdFx0XHRcdC8vIERvbid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdFx0XHRcdFx0KCBzdXBwb3J0Lm9wdERpc2FibGVkID9cblx0XHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkIDogb3B0aW9uLmdldEF0dHJpYnV0ZSggXCJkaXNhYmxlZFwiICkgPT09IG51bGwgKSAmJlxuXHRcdFx0XHRcdFx0XHQoICFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fFxuXHRcdFx0XHRcdFx0XHRcdCFqUXVlcnkubm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC87XG5cbmpRdWVyeS5leHRlbmQoIGpRdWVyeS5ldmVudCwge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkge1xuXG5cdFx0dmFyIGksIGN1ciwgdG1wLCBidWJibGVUeXBlLCBvbnR5cGUsIGhhbmRsZSwgc3BlY2lhbCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7XG5cblx0XHQvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGZvY3VzL2JsdXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBlbnN1cmUgd2UncmUgbm90IGZpcmluZyB0aGVtIHJpZ2h0IG5vd1xuXHRcdGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGUuaW5kZXhPZiggXCIuXCIgKSA+IC0xICkge1xuXG5cdFx0XHQvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpXG5cdFx0XHRuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCggXCIuXCIgKTtcblx0XHRcdHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7XG5cdFx0XHRuYW1lc3BhY2VzLnNvcnQoKTtcblx0XHR9XG5cdFx0b250eXBlID0gdHlwZS5pbmRleE9mKCBcIjpcIiApIDwgMCAmJiBcIm9uXCIgKyB0eXBlO1xuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGEgalF1ZXJ5LkV2ZW50IG9iamVjdCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nXG5cdFx0ZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRldmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQgKTtcblxuXHRcdC8vIFRyaWdnZXIgYml0bWFzazogJiAxIGZvciBuYXRpdmUgaGFuZGxlcnM7ICYgMiBmb3IgalF1ZXJ5IChhbHdheXMgdHJ1ZSlcblx0XHRldmVudC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMztcblx0XHRldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiICk7XG5cdFx0ZXZlbnQucm5hbWVzcGFjZSA9IGV2ZW50Lm5hbWVzcGFjZSA/XG5cdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKSA6XG5cdFx0XHRudWxsO1xuXG5cdFx0Ly8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkXG5cdFx0ZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkO1xuXHRcdGlmICggIWV2ZW50LnRhcmdldCApIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGVsZW07XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdFxuXHRcdGRhdGEgPSBkYXRhID09IG51bGwgP1xuXHRcdFx0WyBldmVudCBdIDpcblx0XHRcdGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEsIFsgZXZlbnQgXSApO1xuXG5cdFx0Ly8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5lc1xuXHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKVxuXHRcdC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAoIzk3MjQpXG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIG5hbWUgYXMgdGhlIGV2ZW50LlxuXHRcdFx0XHQvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApXG5cdFx0XHRcdGlmICggb250eXBlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gdG1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XG5cdH1cblxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuXHRcdH0gKTtcblx0fSxcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbmpRdWVyeS5lYWNoKCAoIFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgXCIgK1xuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cblx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxuXHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApO1xuXHR9XG59ICk7XG5cblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbi8vIFN1cHBvcnQ6IEZpcmVmb3hcbi8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3XG4vL1xuLy8gU3VwcG9ydDogQ2hyb21lLCBTYWZhcmlcbi8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLFxuLy8gd2hpY2ggaXMgc3BlYyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcbmlmICggIXN1cHBvcnQuZm9jdXNpbiApIHtcblx0alF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblxuXHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7XG5cdFx0fTtcblxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcblx0XHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0galF1ZXJ5Lm5vdygpO1xuXG52YXIgcnF1ZXJ5ID0gKCAvXFw/LyApO1xuXG5cblxuLy8gU3VwcG9ydDogQW5kcm9pZCAyLjNcbi8vIFdvcmthcm91bmQgZmFpbHVyZSB0byBzdHJpbmctY2FzdCBudWxsIGlucHV0XG5qUXVlcnkucGFyc2VKU09OID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdHJldHVybiBKU09OLnBhcnNlKCBkYXRhICsgXCJcIiApO1xufTtcblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbDtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFOVxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHhtbCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmICggIXhtbCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZXJyb3IoIFwiSW52YWxpZCBYTUw6IFwiICsgZGF0YSApO1xuXHR9XG5cdHJldHVybiB4bWw7XG59O1xuXG5cbnZhclxuXHRyaGFzaCA9IC8jLiokLyxcblx0cnRzID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cblx0Ly8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXG5cdHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLFxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblx0b3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzICM5ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG9cblx0XHRcdGlmICggY3VycmVudCA9PT0gXCIqXCIgKSB7XG5cblx0XHRcdFx0Y3VycmVudCA9IHByZXY7XG5cblx0XHRcdC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnRcblx0XHRcdH0gZWxzZSBpZiAoIHByZXYgIT09IFwiKlwiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXJcblx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyBcIiogXCIgKyBjdXJyZW50IF07XG5cblx0XHRcdFx0Ly8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXJcblx0XHRcdFx0aWYgKCAhY29udiApIHtcblx0XHRcdFx0XHRmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnRcblx0XHRcdFx0XHRcdHRtcCA9IGNvbnYyLnNwbGl0KCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXRcblx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIHRtcFsgMCBdIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJzWyBcIiogXCIgKyB0bXBbIDAgXSBdO1xuXHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjb252ID09PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnQgPSB0bXBbIDAgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0bXBbIDEgXSApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKVxuXHRcdFx0XHRpZiAoIGNvbnYgIT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHQvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtXG5cdFx0XHRcdFx0aWYgKCBjb252ICYmIHMudGhyb3dzICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogXCJwYXJzZXJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBjb252ID8gZSA6IFwiTm8gY29udmVyc2lvbiBmcm9tIFwiICsgcHJldiArIFwiIHRvIFwiICsgY3VycmVudFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IHN0YXRlOiBcInN1Y2Nlc3NcIiwgZGF0YTogcmVzcG9uc2UgfTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllc1xuXHRhY3RpdmU6IDAsXG5cblx0Ly8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdFxuXHRsYXN0TW9kaWZpZWQ6IHt9LFxuXHRldGFnOiB7fSxcblxuXHRhamF4U2V0dGluZ3M6IHtcblx0XHR1cmw6IGxvY2F0aW9uLmhyZWYsXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLFxuXHRcdGdsb2JhbDogdHJ1ZSxcblx0XHRwcm9jZXNzRGF0YTogdHJ1ZSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogalF1ZXJ5LnBhcnNlSlNPTixcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxuXG5cdFx0XHQvLyBEZWZlcnJlZHNcblx0XHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxuXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcblx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSxcblxuXHRcdFx0Ly8gVGhlIGpxWEhSIHN0YXRlXG5cdFx0XHRzdGF0ZSA9IDAsXG5cblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXG5cblx0XHRcdC8vIEZha2UgeGhyXG5cdFx0XHRqcVhIUiA9IHtcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcblxuXHRcdFx0XHQvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdHZhciBtYXRjaDtcblx0XHRcdFx0XHRpZiAoIHN0YXRlID09PSAyICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSBdID0gbWF0Y2hbIDIgXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGUgPT09IDIgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHR2YXIgbG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0aWYgKCAhc3RhdGUgKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCAhc3RhdGUgKSB7XG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcblx0XHRcdFx0XHR2YXIgY29kZTtcblx0XHRcdFx0XHRpZiAoIG1hcCApIHtcblx0XHRcdFx0XHRcdGlmICggc3RhdGUgPCAyICkge1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2sgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7XG5cdFx0anFYSFIuc3VjY2VzcyA9IGpxWEhSLmRvbmU7XG5cdFx0anFYSFIuZXJyb3IgPSBqcVhIUi5mYWlsO1xuXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICgjMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApLnJlcGxhY2UoIHJoYXNoLCBcIlwiIClcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XG5cblx0XHQvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCAjMTIwMDRcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xuXG5cdFx0Ly8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdFxuXHRcdHMuZGF0YVR5cGVzID0galF1ZXJ5LnRyaW0oIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LTExK1xuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBpZiB1cmwgaXMgbWFsZm9ybWVkLCBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFOC0xMStcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggc3RhdGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAoIzE1MTE4KVxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0c1xuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHRjYWNoZVVSTCA9IHMudXJsO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9ICggcy51cmwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YSApO1xuXG5cdFx0XHRcdC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGFudGktY2FjaGUgaW4gdXJsIGlmIG5lZWRlZFxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcblx0XHRcdFx0cy51cmwgPSBydHMudGVzdCggY2FjaGVVUkwgKSA/XG5cblx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgJ18nIHBhcmFtZXRlciwgc2V0IGl0cyB2YWx1ZVxuXHRcdFx0XHRcdGNhY2hlVVJMLnJlcGxhY2UoIHJ0cywgXCIkMV89XCIgKyBub25jZSsrICkgOlxuXG5cdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFkZCBvbmUgdG8gdGhlIGVuZFxuXHRcdFx0XHRcdGNhY2hlVVJMICsgKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArIG5vbmNlKys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Nb2RpZmllZC1TaW5jZVwiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU5vbmUtTWF0Y2hcIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnRcblx0XHRpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIsIHMuY29udGVudFR5cGUgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlXG5cdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlcihcblx0XHRcdFwiQWNjZXB0XCIsXG5cdFx0XHRzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID9cblx0XHRcdFx0cy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gK1xuXHRcdFx0XHRcdCggcy5kYXRhVHlwZXNbIDAgXSAhPT0gXCIqXCIgPyBcIiwgXCIgKyBhbGxUeXBlcyArIFwiOyBxPTAuMDFcIiA6IFwiXCIgKSA6XG5cdFx0XHRcdHMuYWNjZXB0c1sgXCIqXCIgXVxuXHRcdCk7XG5cblx0XHQvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb25cblx0XHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydFxuXHRcdGlmICggcy5iZWZvcmVTZW5kICYmXG5cdFx0XHQoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRmb3IgKCBpIGluIHsgc3VjY2VzczogMSwgZXJyb3I6IDEsIGNvbXBsZXRlOiAxIH0gKSB7XG5cdFx0XHRqcVhIUlsgaSBdKCBzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBHZXQgdHJhbnNwb3J0XG5cdFx0dHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnRcblx0XHRpZiAoICF0cmFuc3BvcnQgKSB7XG5cdFx0XHRkb25lKCAtMSwgXCJObyBUcmFuc3BvcnRcIiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gMTtcblxuXHRcdFx0Ly8gU2VuZCBnbG9iYWwgZXZlbnRcblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhTZW5kXCIsIFsganFYSFIsIHMgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhamF4U2VuZCwgc3RvcCB0aGVyZVxuXHRcdFx0aWYgKCBzdGF0ZSA9PT0gMiApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c3RhdGUgPSAxO1xuXHRcdFx0XHR0cmFuc3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIFByb3BhZ2F0ZSBleGNlcHRpb24gYXMgZXJyb3IgaWYgbm90IGRvbmVcblx0XHRcdFx0aWYgKCBzdGF0ZSA8IDIgKSB7XG5cdFx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblxuXHRcdFx0XHQvLyBTaW1wbHkgcmV0aHJvdyBvdGhlcndpc2Vcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gQ2FsbGVkIG9uY2Vcblx0XHRcdGlmICggc3RhdGUgPT09IDIgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdGUgaXMgXCJkb25lXCIgbm93XG5cdFx0XHRzdGF0ZSA9IDI7XG5cblx0XHRcdC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXG5cdFx0XHRpZiAoIHRpbWVvdXRUaW1lciApIHtcblx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uXG5cdFx0XHQvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKVxuXHRcdFx0dHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8IFwiXCI7XG5cblx0XHRcdC8vIFNldCByZWFkeVN0YXRlXG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwO1xuXG5cdFx0XHQvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bFxuXHRcdFx0aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7XG5cblx0XHRcdC8vIEdldCByZXNwb25zZSBkYXRhXG5cdFx0XHRpZiAoIHJlc3BvbnNlcyApIHtcblx0XHRcdFx0cmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldClcblx0XHRcdHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7XG5cblx0XHRcdC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdFx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkxhc3QtTW9kaWZpZWRcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiZXRhZ1wiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgbm8gY29udGVudFxuXHRcdFx0XHRpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gXCJIRUFEXCIgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm9jb250ZW50XCI7XG5cblx0XHRcdFx0Ly8gaWYgbm90IG1vZGlmaWVkXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vdG1vZGlmaWVkXCI7XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlO1xuXHRcdFx0XHRcdHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdGVycm9yID0gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0aXNTdWNjZXNzID0gIWVycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHNcblx0XHRcdFx0ZXJyb3IgPSBzdGF0dXNUZXh0O1xuXHRcdFx0XHRpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJlcnJvclwiO1xuXHRcdFx0XHRcdGlmICggc3RhdHVzIDwgMCApIHtcblx0XHRcdFx0XHRcdHN0YXR1cyA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0XG5cdFx0XHRqcVhIUi5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0XHRqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArIFwiXCI7XG5cblx0XHRcdC8vIFN1Y2Nlc3MvRXJyb3Jcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApO1xuXHRcdFx0c3RhdHVzQ29kZSA9IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/IFwiYWpheFN1Y2Nlc3NcIiA6IFwiYWpheEVycm9yXCIsXG5cdFx0XHRcdFx0WyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29tcGxldGVcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhDb21wbGV0ZVwiLCBbIGpxWEhSLCBzIF0gKTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcblx0XHRcdFx0aWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RvcFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ganFYSFI7XG5cdH0sXG5cblx0Z2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssIFwianNvblwiICk7XG5cdH0sXG5cblx0Z2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCBcInNjcmlwdFwiICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJnZXRcIiwgXCJwb3N0XCIgXSwgZnVuY3Rpb24oIGksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBkYXRhICkgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcblx0XHRcdGNhbGxiYWNrID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpXG5cdFx0cmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXG5cdFx0fSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7XG5cdH07XG59ICk7XG5cblxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCApIHtcblx0cmV0dXJuIGpRdWVyeS5hamF4KCB7XG5cdFx0dXJsOiB1cmwsXG5cblx0XHQvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMxMTI2NClcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxuXHRcdGFzeW5jOiBmYWxzZSxcblx0XHRnbG9iYWw6IGZhbHNlLFxuXHRcdFwidGhyb3dzXCI6IHRydWVcblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLFxuXHRcdFx0XHRjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTtcblxuXHRcdFx0aWYgKCBjb250ZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5hcHBlbmQoIGh0bWwgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBpc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFqUXVlcnkubm9kZU5hbWUoIHRoaXMsIFwiYm9keVwiICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHRcdH1cblx0XHR9ICkuZW5kKCk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdC8vIFN1cHBvcnQ6IE9wZXJhIDw9IDEyLjEyXG5cdC8vIE9wZXJhIHJlcG9ydHMgb2Zmc2V0V2lkdGhzIGFuZCBvZmZzZXRIZWlnaHRzIGxlc3MgdGhhbiB6ZXJvIG9uIHNvbWUgZWxlbWVudHNcblx0Ly8gVXNlIE9SIGluc3RlYWQgb2YgQU5EIGFzIHRoZSBlbGVtZW50IGlzIG5vdCB2aXNpYmxlIGlmIGVpdGhlciBpcyB0cnVlXG5cdC8vIFNlZSB0aWNrZXRzICMxMDQwNiBhbmQgIzEzMTMyXG5cdHJldHVybiBlbGVtLm9mZnNldFdpZHRoID4gMCB8fCBlbGVtLm9mZnNldEhlaWdodCA+IDAgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCA+IDA7XG59O1xuXG5cblxuXG52YXIgcjIwID0gLyUyMC9nLFxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIGpRdWVyeS5pc0FycmF5KCBvYmogKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLlxuXHRcdGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkge1xuXHRcdFx0aWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHtcblxuXHRcdFx0XHQvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuXG5cdFx0XHRcdGFkZCggcHJlZml4LCB2ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXG5cdFx0XHRcdGJ1aWxkUGFyYW1zKFxuXHRcdFx0XHRcdHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9IG51bGwgPyBpIDogXCJcIiApICsgXCJdXCIsXG5cdFx0XHRcdFx0dixcblx0XHRcdFx0XHR0cmFkaXRpb25hbCxcblx0XHRcdFx0XHRhZGRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XG5cdH1cbn1cblxuLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2Zcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xuXHR2YXIgcHJlZml4LFxuXHRcdHMgPSBbXSxcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlXG5cdFx0XHR2YWx1ZSA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApID8gdmFsdWUoKSA6ICggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgKTtcblx0XHR9O1xuXG5cdC8vIFNldCB0cmFkaXRpb25hbCB0byB0cnVlIGZvciBqUXVlcnkgPD0gMS4zLjIgYmVoYXZpb3IuXG5cdGlmICggdHJhZGl0aW9uYWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHR0cmFkaXRpb25hbCA9IGpRdWVyeS5hamF4U2V0dGluZ3MgJiYgalF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbDtcblx0fVxuXG5cdC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuXG5cdGlmICggalF1ZXJ5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2VyaWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTtcblx0fSxcblx0c2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENhbiBhZGQgcHJvcEhvb2sgZm9yIFwiZWxlbWVudHNcIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHNcblx0XHRcdHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCBcImVsZW1lbnRzXCIgKTtcblx0XHRcdHJldHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzO1xuXHRcdH0gKVxuXHRcdC5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRcdC8vIFVzZSAuaXMoIFwiOmRpc2FibGVkXCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3Jrc1xuXHRcdFx0cmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoIFwiOmRpc2FibGVkXCIgKSAmJlxuXHRcdFx0XHRyc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYmXG5cdFx0XHRcdCggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTtcblx0XHR9IClcblx0XHQubWFwKCBmdW5jdGlvbiggaSwgZWxlbSApIHtcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcblxuXHRcdFx0cmV0dXJuIHZhbCA9PSBudWxsID9cblx0XHRcdFx0bnVsbCA6XG5cdFx0XHRcdGpRdWVyeS5pc0FycmF5KCB2YWwgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHR9ICkuZ2V0KCk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRTlcblx0XHQvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImFib3J0XCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0eGhyLmFib3J0KCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09IFwiZXJyb3JcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFOVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUU5XG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XG5cdFx0XHRcdC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHNcblx0XHRcdFx0aWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCxcblx0XHRcdFx0XHRcdFx0Ly8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0XG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXG5cdFx0XHRcdFx0XHRcdC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcblxuXHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyAjMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldFxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGFjY2VwdHM6IHtcblx0XHRzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBcIiArXG5cdFx0XHRcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiXG5cdH0sXG5cdGNvbnRlbnRzOiB7XG5cdFx0c2NyaXB0OiAvXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi9cblx0fSxcblx0Y29udmVydGVyczoge1xuXHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xuXHR9XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydFxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXG5cdC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeSggXCI8c2NyaXB0PlwiICkucHJvcCgge1xuXHRcdFx0XHRcdGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCxcblx0XHRcdFx0XHRzcmM6IHMudXJsXG5cdFx0XHRcdH0gKS5vbihcblx0XHRcdFx0XHRcImxvYWQgZXJyb3JcIixcblx0XHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UrKyApICk7XG5cdFx0dGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7XG5cdFx0cmV0dXJuIGNhbGxiYWNrO1xuXHR9XG59ICk7XG5cbi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0c1xualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwianNvbiBqc29ucFwiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7XG5cblx0dmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLFxuXHRcdGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/XG5cdFx0XHRcInVybFwiIDpcblx0XHRcdHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKVxuXHRcdFx0XHRcdC5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgJiZcblx0XHRcdFx0cmpzb25wLnRlc3QoIHMuZGF0YSApICYmIFwiZGF0YVwiXG5cdFx0KTtcblxuXHQvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgXCJqc29ucFwiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0XG5cdGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gXCJqc29ucFwiICkge1xuXG5cdFx0Ly8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdFxuXHRcdGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dCA9IGZhbHNlO1xuXHR9XG5cdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdHZhciBwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKSxcblx0XHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xuXG5cdC8vIFNpbmdsZSB0YWdcblx0aWYgKCBwYXJzZWQgKSB7XG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApO1xuXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApO1xufTtcblxuXG4vLyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGxvYWQgbWV0aG9kXG52YXIgX2xvYWQgPSBqUXVlcnkuZm4ubG9hZDtcblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0aWYgKCB0eXBlb2YgdXJsICE9PSBcInN0cmluZ1wiICYmIF9sb2FkICkge1xuXHRcdHJldHVybiBfbG9hZC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH1cblxuXHR2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLFxuXHRcdHNlbGYgPSB0aGlzLFxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xuXG5cdGlmICggb2ZmID4gLTEgKSB7XG5cdFx0c2VsZWN0b3IgPSBqUXVlcnkudHJpbSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7XG5cblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFja1xuXHRcdGNhbGxiYWNrID0gcGFyYW1zO1xuXHRcdHBhcmFtcyA9IHVuZGVmaW5lZDtcblxuXHQvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nXG5cdH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICkge1xuXHRcdHR5cGUgPSBcIlBPU1RcIjtcblx0fVxuXG5cdC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0XG5cdGlmICggc2VsZi5sZW5ndGggPiAwICkge1xuXHRcdGpRdWVyeS5hamF4KCB7XG5cdFx0XHR1cmw6IHVybCxcblxuXHRcdFx0Ly8gSWYgXCJ0eXBlXCIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuIFwiR0VUXCIgbWV0aG9kIHdpbGwgYmUgdXNlZC5cblx0XHRcdC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZVxuXHRcdFx0Ly8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kXG5cdFx0XHR0eXBlOiB0eXBlIHx8IFwiR0VUXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXG5cdFx0XHRkYXRhOiBwYXJhbXNcblx0XHR9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHtcblxuXHRcdFx0Ly8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrXG5cdFx0XHRyZXNwb25zZSA9IGFyZ3VtZW50cztcblxuXHRcdFx0c2VsZi5odG1sKCBzZWxlY3RvciA/XG5cblx0XHRcdFx0Ly8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9yc1xuXHRcdFx0XHRqUXVlcnkoIFwiPGRpdj5cIiApLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdFxuXHRcdFx0XHRyZXNwb25zZVRleHQgKTtcblxuXHRcdC8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJkYXRhXCIsIFwic3RhdHVzXCIsIFwianFYSFJcIlxuXHRcdC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNldCBhYm92ZS5cblx0XHQvLyBJZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzIFwianFYSFJcIiwgXCJzdGF0dXNcIiwgXCJlcnJvclwiXG5cdFx0fSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7XG5cdFx0XHRzZWxmLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuXG5cblxuLy8gQXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24gQUpBWCBldmVudHNcbmpRdWVyeS5lYWNoKCBbXG5cdFwiYWpheFN0YXJ0XCIsXG5cdFwiYWpheFN0b3BcIixcblx0XCJhamF4Q29tcGxldGVcIixcblx0XCJhamF4RXJyb3JcIixcblx0XCJhamF4U3VjY2Vzc1wiLFxuXHRcImFqYXhTZW5kXCJcbl0sIGZ1bmN0aW9uKCBpLCB0eXBlICkge1xuXHRqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcblx0fTtcbn0gKTtcblxuXG5cblxualF1ZXJ5LmV4cHIuZmlsdGVycy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTtcblx0fSApLmxlbmd0aDtcbn07XG5cblxuXG5cbi8qKlxuICogR2V0cyBhIHdpbmRvdyBmcm9tIGFuIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93KCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmlzV2luZG93KCBlbGVtICkgPyBlbGVtIDogZWxlbS5ub2RlVHlwZSA9PT0gOSAmJiBlbGVtLmRlZmF1bHRWaWV3O1xufVxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgZG9jRWxlbSwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGJveCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH0sXG5cdFx0XHRkb2MgPSBlbGVtICYmIGVsZW0ub3duZXJEb2N1bWVudDtcblxuXHRcdGlmICggIWRvYyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdC8vIE1ha2Ugc3VyZSBpdCdzIG5vdCBhIGRpc2Nvbm5lY3RlZCBET00gbm9kZVxuXHRcdGlmICggIWpRdWVyeS5jb250YWlucyggZG9jRWxlbSwgZWxlbSApICkge1xuXHRcdFx0cmV0dXJuIGJveDtcblx0XHR9XG5cblx0XHRib3ggPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdHdpbiA9IGdldFdpbmRvdyggZG9jICk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogYm94LnRvcCArIHdpbi5wYWdlWU9mZnNldCAtIGRvY0VsZW0uY2xpZW50VG9wLFxuXHRcdFx0bGVmdDogYm94LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXQgLSBkb2NFbGVtLmNsaWVudExlZnRcblx0XHR9O1xuXHR9LFxuXG5cdHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICF0aGlzWyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIG9mZnNldFBhcmVudCwgb2Zmc2V0LFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBGaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gd2luZG93IChwYXJlbnRPZmZzZXQgPSB7dG9wOjAsIGxlZnQ6IDB9LFxuXHRcdC8vIGJlY2F1c2UgaXQgaXMgaXRzIG9ubHkgb2Zmc2V0IHBhcmVudFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBpcyB0aGVyZSB3aGVuIGNvbXB1dGVkIHBvc2l0aW9uIGlzIGZpeGVkXG5cdFx0XHRvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gR2V0ICpyZWFsKiBvZmZzZXRQYXJlbnRcblx0XHRcdG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50KCk7XG5cblx0XHRcdC8vIEdldCBjb3JyZWN0IG9mZnNldHNcblx0XHRcdG9mZnNldCA9IHRoaXMub2Zmc2V0KCk7XG5cdFx0XHRpZiAoICFqUXVlcnkubm9kZU5hbWUoIG9mZnNldFBhcmVudFsgMCBdLCBcImh0bWxcIiApICkge1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0KCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBvZmZzZXRQYXJlbnQgYm9yZGVyc1xuXHRcdFx0cGFyZW50T2Zmc2V0LnRvcCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnRbIDAgXSwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnRbIDAgXSwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXHRcdFx0dmFyIHdpbiA9IGdldFdpbmRvdyggZWxlbSApO1xuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmk8Ny04KywgQ2hyb21lPDM3LTQ0K1xuLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb25cbi8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NFxuLy8gQmxpbmsgYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MjgwXG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7XG5cblx0XHRcdFx0Ly8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0XG5cdFx0XHRcdHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgXCJweFwiIDpcblx0XHRcdFx0XHRjb21wdXRlZDtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59ICk7XG5cblxuLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XG5cdGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsIFwiXCI6IFwib3V0ZXJcIiArIG5hbWUgfSxcblx0XHRmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcblxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xuXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBkb2M7XG5cblx0XHRcdFx0aWYgKCBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIEFzIG9mIDUvOC8yMDEyIHRoaXMgd2lsbCB5aWVsZCBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgTW9iaWxlIFNhZmFyaSwgYnV0IHRoZXJlXG5cdFx0XHRcdFx0Ly8gaXNuJ3QgYSB3aG9sZSBsb3Qgd2UgY2FuIGRvLiBTZWUgcHVsbCByZXF1ZXN0IGF0IHRoaXMgVVJMIGZvciBkaXNjdXNzaW9uOlxuXHRcdFx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNzY0XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlLCBudWxsICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH0sXG5cdHNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmxlbmd0aDtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uYW5kU2VsZiA9IGpRdWVyeS5mbi5hZGRCYWNrO1xuXG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cbnZhclxuXG5cdC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSxcblxuXHQvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfJCA9IHdpbmRvdy4kO1xuXG5qUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkge1xuXHRpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LiQgPSBfJDtcblx0fVxuXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LmpRdWVyeSA9IF9qUXVlcnk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5O1xufTtcblxuLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTURcbi8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1Nylcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NilcbmlmICggIW5vR2xvYmFsICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cbnJldHVybiBqUXVlcnk7XG59KSk7XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLy8gICAgIFVuZGVyc2NvcmUuanMgMS41LjFcbi8vICAgICBodHRwOi8vdW5kZXJzY29yZWpzLm9yZ1xuLy8gICAgIChjKSAyMDA5LTIwMTMgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbi8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuXG4oZnVuY3Rpb24oKSB7XG5cbiAgLy8gQmFzZWxpbmUgc2V0dXBcbiAgLy8gLS0tLS0tLS0tLS0tLS1cblxuICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCBpbiB0aGUgYnJvd3Nlciwgb3IgYGdsb2JhbGAgb24gdGhlIHNlcnZlci5cbiAgdmFyIHJvb3QgPSB0aGlzO1xuXG4gIC8vIFNhdmUgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBgX2AgdmFyaWFibGUuXG4gIHZhciBwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll87XG5cbiAgLy8gRXN0YWJsaXNoIHRoZSBvYmplY3QgdGhhdCBnZXRzIHJldHVybmVkIHRvIGJyZWFrIG91dCBvZiBhIGxvb3AgaXRlcmF0aW9uLlxuICB2YXIgYnJlYWtlciA9IHt9O1xuXG4gIC8vIFNhdmUgYnl0ZXMgaW4gdGhlIG1pbmlmaWVkIChidXQgbm90IGd6aXBwZWQpIHZlcnNpb246XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGUsIEZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyXG4gICAgcHVzaCAgICAgICAgICAgICA9IEFycmF5UHJvdG8ucHVzaCxcbiAgICBzbGljZSAgICAgICAgICAgID0gQXJyYXlQcm90by5zbGljZSxcbiAgICBjb25jYXQgICAgICAgICAgID0gQXJyYXlQcm90by5jb25jYXQsXG4gICAgdG9TdHJpbmcgICAgICAgICA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgIGhhc093blByb3BlcnR5ICAgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBBbGwgKipFQ01BU2NyaXB0IDUqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhclxuICAgIG5hdGl2ZUZvckVhY2ggICAgICA9IEFycmF5UHJvdG8uZm9yRWFjaCxcbiAgICBuYXRpdmVNYXAgICAgICAgICAgPSBBcnJheVByb3RvLm1hcCxcbiAgICBuYXRpdmVSZWR1Y2UgICAgICAgPSBBcnJheVByb3RvLnJlZHVjZSxcbiAgICBuYXRpdmVSZWR1Y2VSaWdodCAgPSBBcnJheVByb3RvLnJlZHVjZVJpZ2h0LFxuICAgIG5hdGl2ZUZpbHRlciAgICAgICA9IEFycmF5UHJvdG8uZmlsdGVyLFxuICAgIG5hdGl2ZUV2ZXJ5ICAgICAgICA9IEFycmF5UHJvdG8uZXZlcnksXG4gICAgbmF0aXZlU29tZSAgICAgICAgID0gQXJyYXlQcm90by5zb21lLFxuICAgIG5hdGl2ZUluZGV4T2YgICAgICA9IEFycmF5UHJvdG8uaW5kZXhPZixcbiAgICBuYXRpdmVMYXN0SW5kZXhPZiAgPSBBcnJheVByb3RvLmxhc3RJbmRleE9mLFxuICAgIG5hdGl2ZUlzQXJyYXkgICAgICA9IEFycmF5LmlzQXJyYXksXG4gICAgbmF0aXZlS2V5cyAgICAgICAgID0gT2JqZWN0LmtleXMsXG4gICAgbmF0aXZlQmluZCAgICAgICAgID0gRnVuY1Byb3RvLmJpbmQ7XG5cbiAgLy8gQ3JlYXRlIGEgc2FmZSByZWZlcmVuY2UgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0IGZvciB1c2UgYmVsb3cuXG4gIHZhciBfID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIF8pIHJldHVybiBvYmo7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIF8pKSByZXR1cm4gbmV3IF8ob2JqKTtcbiAgICB0aGlzLl93cmFwcGVkID0gb2JqO1xuICB9O1xuXG4gIC8vIEV4cG9ydCB0aGUgVW5kZXJzY29yZSBvYmplY3QgZm9yICoqTm9kZS5qcyoqLCB3aXRoXG4gIC8vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGZvciB0aGUgb2xkIGByZXF1aXJlKClgIEFQSS4gSWYgd2UncmUgaW5cbiAgLy8gdGhlIGJyb3dzZXIsIGFkZCBgX2AgYXMgYSBnbG9iYWwgb2JqZWN0IHZpYSBhIHN0cmluZyBpZGVudGlmaWVyLFxuICAvLyBmb3IgQ2xvc3VyZSBDb21waWxlciBcImFkdmFuY2VkXCIgbW9kZS5cbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gXztcbiAgICB9XG4gICAgZXhwb3J0cy5fID0gXztcbiAgfSBlbHNlIHtcbiAgICByb290Ll8gPSBfO1xuICB9XG5cbiAgLy8gQ3VycmVudCB2ZXJzaW9uLlxuICBfLlZFUlNJT04gPSAnMS41LjEnO1xuXG4gIC8vIENvbGxlY3Rpb24gRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gVGhlIGNvcm5lcnN0b25lLCBhbiBgZWFjaGAgaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuXG4gIC8vIEhhbmRsZXMgb2JqZWN0cyB3aXRoIHRoZSBidWlsdC1pbiBgZm9yRWFjaGAsIGFycmF5cywgYW5kIHJhdyBvYmplY3RzLlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgZm9yRWFjaGAgaWYgYXZhaWxhYmxlLlxuICB2YXIgZWFjaCA9IF8uZWFjaCA9IF8uZm9yRWFjaCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybjtcbiAgICBpZiAobmF0aXZlRm9yRWFjaCAmJiBvYmouZm9yRWFjaCA9PT0gbmF0aXZlRm9yRWFjaCkge1xuICAgICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAob2JqLmxlbmd0aCA9PT0gK29iai5sZW5ndGgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaikgPT09IGJyZWFrZXIpIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoXy5oYXMob2JqLCBrZXkpKSB7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleV0sIGtleSwgb2JqKSA9PT0gYnJlYWtlcikgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgaXRlcmF0b3IgdG8gZWFjaCBlbGVtZW50LlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgbWFwYCBpZiBhdmFpbGFibGUuXG4gIF8ubWFwID0gXy5jb2xsZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0cztcbiAgICBpZiAobmF0aXZlTWFwICYmIG9iai5tYXAgPT09IG5hdGl2ZU1hcCkgcmV0dXJuIG9iai5tYXAoaXRlcmF0b3IsIGNvbnRleHQpO1xuICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIHZhciByZWR1Y2VFcnJvciA9ICdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJztcblxuICAvLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAsXG4gIC8vIG9yIGBmb2xkbGAuIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGByZWR1Y2VgIGlmIGF2YWlsYWJsZS5cbiAgXy5yZWR1Y2UgPSBfLmZvbGRsID0gXy5pbmplY3QgPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgICBpZiAob2JqID09IG51bGwpIG9iaiA9IFtdO1xuICAgIGlmIChuYXRpdmVSZWR1Y2UgJiYgb2JqLnJlZHVjZSA9PT0gbmF0aXZlUmVkdWNlKSB7XG4gICAgICBpZiAoY29udGV4dCkgaXRlcmF0b3IgPSBfLmJpbmQoaXRlcmF0b3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIGluaXRpYWwgPyBvYmoucmVkdWNlKGl0ZXJhdG9yLCBtZW1vKSA6IG9iai5yZWR1Y2UoaXRlcmF0b3IpO1xuICAgIH1cbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAoIWluaXRpYWwpIHtcbiAgICAgICAgbWVtbyA9IHZhbHVlO1xuICAgICAgICBpbml0aWFsID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lbW8gPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG1lbW8sIHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFpbml0aWFsKSB0aHJvdyBuZXcgVHlwZUVycm9yKHJlZHVjZUVycm9yKTtcbiAgICByZXR1cm4gbWVtbztcbiAgfTtcblxuICAvLyBUaGUgcmlnaHQtYXNzb2NpYXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZvbGRyYC5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYHJlZHVjZVJpZ2h0YCBpZiBhdmFpbGFibGUuXG4gIF8ucmVkdWNlUmlnaHQgPSBfLmZvbGRyID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRvciwgbWVtbywgY29udGV4dCkge1xuICAgIHZhciBpbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgaWYgKG9iaiA9PSBudWxsKSBvYmogPSBbXTtcbiAgICBpZiAobmF0aXZlUmVkdWNlUmlnaHQgJiYgb2JqLnJlZHVjZVJpZ2h0ID09PSBuYXRpdmVSZWR1Y2VSaWdodCkge1xuICAgICAgaWYgKGNvbnRleHQpIGl0ZXJhdG9yID0gXy5iaW5kKGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBpbml0aWFsID8gb2JqLnJlZHVjZVJpZ2h0KGl0ZXJhdG9yLCBtZW1vKSA6IG9iai5yZWR1Y2VSaWdodChpdGVyYXRvcik7XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBvYmoubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggIT09ICtsZW5ndGgpIHtcbiAgICAgIHZhciBrZXlzID0gXy5rZXlzKG9iaik7XG4gICAgICBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB9XG4gICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgaW5kZXggPSBrZXlzID8ga2V5c1stLWxlbmd0aF0gOiAtLWxlbmd0aDtcbiAgICAgIGlmICghaW5pdGlhbCkge1xuICAgICAgICBtZW1vID0gb2JqW2luZGV4XTtcbiAgICAgICAgaW5pdGlhbCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZW1vID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCBtZW1vLCBvYmpbaW5kZXhdLCBpbmRleCwgbGlzdCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFpbml0aWFsKSB0aHJvdyBuZXcgVHlwZUVycm9yKHJlZHVjZUVycm9yKTtcbiAgICByZXR1cm4gbWVtbztcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuIEFsaWFzZWQgYXMgYGRldGVjdGAuXG4gIF8uZmluZCA9IF8uZGV0ZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIHZhciByZXN1bHQ7XG4gICAgYW55KG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAoaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKSB7XG4gICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBmaWx0ZXJgIGlmIGF2YWlsYWJsZS5cbiAgLy8gQWxpYXNlZCBhcyBgc2VsZWN0YC5cbiAgXy5maWx0ZXIgPSBfLnNlbGVjdCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdHM7XG4gICAgaWYgKG5hdGl2ZUZpbHRlciAmJiBvYmouZmlsdGVyID09PSBuYXRpdmVGaWx0ZXIpIHJldHVybiBvYmouZmlsdGVyKGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAoaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9O1xuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4gIF8ucmVqZWN0ID0gZnVuY3Rpb24ob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIHJldHVybiBfLmZpbHRlcihvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgbGlzdCkge1xuICAgICAgcmV0dXJuICFpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCk7XG4gICAgfSwgY29udGV4dCk7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBtYXRjaCBhIHRydXRoIHRlc3QuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBldmVyeWAgaWYgYXZhaWxhYmxlLlxuICAvLyBBbGlhc2VkIGFzIGBhbGxgLlxuICBfLmV2ZXJ5ID0gXy5hbGwgPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0b3IgfHwgKGl0ZXJhdG9yID0gXy5pZGVudGl0eSk7XG4gICAgdmFyIHJlc3VsdCA9IHRydWU7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICAgIGlmIChuYXRpdmVFdmVyeSAmJiBvYmouZXZlcnkgPT09IG5hdGl2ZUV2ZXJ5KSByZXR1cm4gb2JqLmV2ZXJ5KGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAoIShyZXN1bHQgPSByZXN1bHQgJiYgaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKSkgcmV0dXJuIGJyZWFrZXI7XG4gICAgfSk7XG4gICAgcmV0dXJuICEhcmVzdWx0O1xuICB9O1xuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IG1hdGNoZXMgYSB0cnV0aCB0ZXN0LlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgc29tZWAgaWYgYXZhaWxhYmxlLlxuICAvLyBBbGlhc2VkIGFzIGBhbnlgLlxuICB2YXIgYW55ID0gXy5zb21lID0gXy5hbnkgPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0b3IgfHwgKGl0ZXJhdG9yID0gXy5pZGVudGl0eSk7XG4gICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgICBpZiAobmF0aXZlU29tZSAmJiBvYmouc29tZSA9PT0gbmF0aXZlU29tZSkgcmV0dXJuIG9iai5zb21lKGl0ZXJhdG9yLCBjb250ZXh0KTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICBpZiAocmVzdWx0IHx8IChyZXN1bHQgPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkpKSByZXR1cm4gYnJlYWtlcjtcbiAgICB9KTtcbiAgICByZXR1cm4gISFyZXN1bHQ7XG4gIH07XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiB2YWx1ZSAodXNpbmcgYD09PWApLlxuICAvLyBBbGlhc2VkIGFzIGBpbmNsdWRlYC5cbiAgXy5jb250YWlucyA9IF8uaW5jbHVkZSA9IGZ1bmN0aW9uKG9iaiwgdGFyZ2V0KSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKG5hdGl2ZUluZGV4T2YgJiYgb2JqLmluZGV4T2YgPT09IG5hdGl2ZUluZGV4T2YpIHJldHVybiBvYmouaW5kZXhPZih0YXJnZXQpICE9IC0xO1xuICAgIHJldHVybiBhbnkob2JqLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSB0YXJnZXQ7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gSW52b2tlIGEgbWV0aG9kICh3aXRoIGFyZ3VtZW50cykgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uXG4gIF8uaW52b2tlID0gZnVuY3Rpb24ob2JqLCBtZXRob2QpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICB2YXIgaXNGdW5jID0gXy5pc0Z1bmN0aW9uKG1ldGhvZCk7XG4gICAgcmV0dXJuIF8ubWFwKG9iaiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiAoaXNGdW5jID8gbWV0aG9kIDogdmFsdWVbbWV0aG9kXSkuYXBwbHkodmFsdWUsIGFyZ3MpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYG1hcGA6IGZldGNoaW5nIGEgcHJvcGVydHkuXG4gIF8ucGx1Y2sgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIHJldHVybiBfLm1hcChvYmosIGZ1bmN0aW9uKHZhbHVlKXsgcmV0dXJuIHZhbHVlW2tleV07IH0pO1xuICB9O1xuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYGZpbHRlcmA6IHNlbGVjdGluZyBvbmx5IG9iamVjdHNcbiAgLy8gY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy5cbiAgXy53aGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMsIGZpcnN0KSB7XG4gICAgaWYgKF8uaXNFbXB0eShhdHRycykpIHJldHVybiBmaXJzdCA/IHZvaWQgMCA6IFtdO1xuICAgIHJldHVybiBfW2ZpcnN0ID8gJ2ZpbmQnIDogJ2ZpbHRlciddKG9iaiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhdHRycykge1xuICAgICAgICBpZiAoYXR0cnNba2V5XSAhPT0gdmFsdWVba2V5XSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgZmluZGA6IGdldHRpbmcgdGhlIGZpcnN0IG9iamVjdFxuICAvLyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBfLmZpbmRXaGVyZSA9IGZ1bmN0aW9uKG9iaiwgYXR0cnMpIHtcbiAgICByZXR1cm4gXy53aGVyZShvYmosIGF0dHJzLCB0cnVlKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCBvciAoZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuXG4gIC8vIENhbid0IG9wdGltaXplIGFycmF5cyBvZiBpbnRlZ2VycyBsb25nZXIgdGhhbiA2NSw1MzUgZWxlbWVudHMuXG4gIC8vIFNlZSBbV2ViS2l0IEJ1ZyA4MDc5N10oaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNzk3KVxuICBfLm1heCA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICBpZiAoIWl0ZXJhdG9yICYmIF8uaXNBcnJheShvYmopICYmIG9ialswXSA9PT0gK29ialswXSAmJiBvYmoubGVuZ3RoIDwgNjU1MzUpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heC5hcHBseShNYXRoLCBvYmopO1xuICAgIH1cbiAgICBpZiAoIWl0ZXJhdG9yICYmIF8uaXNFbXB0eShvYmopKSByZXR1cm4gLUluZmluaXR5O1xuICAgIHZhciByZXN1bHQgPSB7Y29tcHV0ZWQgOiAtSW5maW5pdHksIHZhbHVlOiAtSW5maW5pdHl9O1xuICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIHZhciBjb21wdXRlZCA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpIDogdmFsdWU7XG4gICAgICBjb21wdXRlZCA+IHJlc3VsdC5jb21wdXRlZCAmJiAocmVzdWx0ID0ge3ZhbHVlIDogdmFsdWUsIGNvbXB1dGVkIDogY29tcHV0ZWR9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0LnZhbHVlO1xuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgXy5taW4gPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgaWYgKCFpdGVyYXRvciAmJiBfLmlzQXJyYXkob2JqKSAmJiBvYmpbMF0gPT09ICtvYmpbMF0gJiYgb2JqLmxlbmd0aCA8IDY1NTM1KSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCwgb2JqKTtcbiAgICB9XG4gICAgaWYgKCFpdGVyYXRvciAmJiBfLmlzRW1wdHkob2JqKSkgcmV0dXJuIEluZmluaXR5O1xuICAgIHZhciByZXN1bHQgPSB7Y29tcHV0ZWQgOiBJbmZpbml0eSwgdmFsdWU6IEluZmluaXR5fTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7XG4gICAgICB2YXIgY29tcHV0ZWQgPSBpdGVyYXRvciA/IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KSA6IHZhbHVlO1xuICAgICAgY29tcHV0ZWQgPCByZXN1bHQuY29tcHV0ZWQgJiYgKHJlc3VsdCA9IHt2YWx1ZSA6IHZhbHVlLCBjb21wdXRlZCA6IGNvbXB1dGVkfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgfTtcblxuICAvLyBTaHVmZmxlIGFuIGFycmF5LlxuICBfLnNodWZmbGUgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgcmFuZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBzaHVmZmxlZCA9IFtdO1xuICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmFuZCA9IF8ucmFuZG9tKGluZGV4KyspO1xuICAgICAgc2h1ZmZsZWRbaW5kZXggLSAxXSA9IHNodWZmbGVkW3JhbmRdO1xuICAgICAgc2h1ZmZsZWRbcmFuZF0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2h1ZmZsZWQ7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgbG9va3VwIGl0ZXJhdG9ycy5cbiAgdmFyIGxvb2t1cEl0ZXJhdG9yID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlIDogZnVuY3Rpb24ob2JqKXsgcmV0dXJuIG9ialt2YWx1ZV07IH07XG4gIH07XG5cbiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdG9yLlxuICBfLnNvcnRCeSA9IGZ1bmN0aW9uKG9iaiwgdmFsdWUsIGNvbnRleHQpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSBsb29rdXBJdGVyYXRvcih2YWx1ZSk7XG4gICAgcmV0dXJuIF8ucGx1Y2soXy5tYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlIDogdmFsdWUsXG4gICAgICAgIGluZGV4IDogaW5kZXgsXG4gICAgICAgIGNyaXRlcmlhIDogaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggPCByaWdodC5pbmRleCA/IC0xIDogMTtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlIFwiZ3JvdXAgYnlcIiBvcGVyYXRpb25zLlxuICB2YXIgZ3JvdXAgPSBmdW5jdGlvbihvYmosIHZhbHVlLCBjb250ZXh0LCBiZWhhdmlvcikge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaXRlcmF0b3IgPSBsb29rdXBJdGVyYXRvcih2YWx1ZSA9PSBudWxsID8gXy5pZGVudGl0eSA6IHZhbHVlKTtcbiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7XG4gICAgICB2YXIga2V5ID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgICBiZWhhdmlvcihyZXN1bHQsIGtleSwgdmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gR3JvdXBzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZVxuICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRlcmlvbi5cbiAgXy5ncm91cEJ5ID0gZnVuY3Rpb24ob2JqLCB2YWx1ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBncm91cChvYmosIHZhbHVlLCBjb250ZXh0LCBmdW5jdGlvbihyZXN1bHQsIGtleSwgdmFsdWUpIHtcbiAgICAgIChfLmhhcyhyZXN1bHQsIGtleSkgPyByZXN1bHRba2V5XSA6IChyZXN1bHRba2V5XSA9IFtdKSkucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQ291bnRzIGluc3RhbmNlcyBvZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3JpdGVyaW9uLiBQYXNzXG4gIC8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZVxuICAvLyBjcml0ZXJpb24uXG4gIF8uY291bnRCeSA9IGZ1bmN0aW9uKG9iaiwgdmFsdWUsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gZ3JvdXAob2JqLCB2YWx1ZSwgY29udGV4dCwgZnVuY3Rpb24ocmVzdWx0LCBrZXkpIHtcbiAgICAgIGlmICghXy5oYXMocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSA9IDA7XG4gICAgICByZXN1bHRba2V5XSsrO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2hcbiAgLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLlxuICBfLnNvcnRlZEluZGV4ID0gZnVuY3Rpb24oYXJyYXksIG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yID09IG51bGwgPyBfLmlkZW50aXR5IDogbG9va3VwSXRlcmF0b3IoaXRlcmF0b3IpO1xuICAgIHZhciB2YWx1ZSA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqKTtcbiAgICB2YXIgbG93ID0gMCwgaGlnaCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgdmFyIG1pZCA9IChsb3cgKyBoaWdoKSA+Pj4gMTtcbiAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgYXJyYXlbbWlkXSkgPCB2YWx1ZSA/IGxvdyA9IG1pZCArIDEgOiBoaWdoID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbG93O1xuICB9O1xuXG4gIC8vIFNhZmVseSBjcmVhdGUgYSByZWFsLCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRlcmFibGUuXG4gIF8udG9BcnJheSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghb2JqKSByZXR1cm4gW107XG4gICAgaWYgKF8uaXNBcnJheShvYmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopO1xuICAgIGlmIChvYmoubGVuZ3RoID09PSArb2JqLmxlbmd0aCkgcmV0dXJuIF8ubWFwKG9iaiwgXy5pZGVudGl0eSk7XG4gICAgcmV0dXJuIF8udmFsdWVzKG9iaik7XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gb2JqZWN0LlxuICBfLnNpemUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiAwO1xuICAgIHJldHVybiAob2JqLmxlbmd0aCA9PT0gK29iai5sZW5ndGgpID8gb2JqLmxlbmd0aCA6IF8ua2V5cyhvYmopLmxlbmd0aDtcbiAgfTtcblxuICAvLyBBcnJheSBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIEFsaWFzZWQgYXMgYGhlYWRgIGFuZCBgdGFrZWAuIFRoZSAqKmd1YXJkKiogY2hlY2tcbiAgLy8gYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmZpcnN0ID0gXy5oZWFkID0gXy50YWtlID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgcmV0dXJuIChuICE9IG51bGwpICYmICFndWFyZCA/IHNsaWNlLmNhbGwoYXJyYXksIDAsIG4pIDogYXJyYXlbMF07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uXG4gIC8vIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIGFsbCB0aGUgdmFsdWVzIGluXG4gIC8vIHRoZSBhcnJheSwgZXhjbHVkaW5nIHRoZSBsYXN0IE4uIFRoZSAqKmd1YXJkKiogY2hlY2sgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aFxuICAvLyBgXy5tYXBgLlxuICBfLmluaXRpYWwgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgYXJyYXkubGVuZ3RoIC0gKChuID09IG51bGwpIHx8IGd1YXJkID8gMSA6IG4pKTtcbiAgfTtcblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIFRoZSAqKmd1YXJkKiogY2hlY2sgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBfLmxhc3QgPSBmdW5jdGlvbihhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICBpZiAoKG4gIT0gbnVsbCkgJiYgIWd1YXJkKSB7XG4gICAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgTWF0aC5tYXgoYXJyYXkubGVuZ3RoIC0gbiwgMCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyBgdGFpbGAgYW5kIGBkcm9wYC5cbiAgLy8gRXNwZWNpYWxseSB1c2VmdWwgb24gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgYW4gKipuKiogd2lsbCByZXR1cm5cbiAgLy8gdGhlIHJlc3QgTiB2YWx1ZXMgaW4gdGhlIGFycmF5LiBUaGUgKipndWFyZCoqXG4gIC8vIGNoZWNrIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC5cbiAgXy5yZXN0ID0gXy50YWlsID0gXy5kcm9wID0gZnVuY3Rpb24oYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgcmV0dXJuIHNsaWNlLmNhbGwoYXJyYXksIChuID09IG51bGwpIHx8IGd1YXJkID8gMSA6IG4pO1xuICB9O1xuXG4gIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS5cbiAgXy5jb21wYWN0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5maWx0ZXIoYXJyYXksIF8uaWRlbnRpdHkpO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi5cbiAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihpbnB1dCwgc2hhbGxvdywgb3V0cHV0KSB7XG4gICAgaWYgKHNoYWxsb3cgJiYgXy5ldmVyeShpbnB1dCwgXy5pc0FycmF5KSkge1xuICAgICAgcmV0dXJuIGNvbmNhdC5hcHBseShvdXRwdXQsIGlucHV0KTtcbiAgICB9XG4gICAgZWFjaChpbnB1dCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGlmIChfLmlzQXJyYXkodmFsdWUpIHx8IF8uaXNBcmd1bWVudHModmFsdWUpKSB7XG4gICAgICAgIHNoYWxsb3cgPyBwdXNoLmFwcGx5KG91dHB1dCwgdmFsdWUpIDogZmxhdHRlbih2YWx1ZSwgc2hhbGxvdywgb3V0cHV0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9O1xuXG4gIC8vIFJldHVybiBhIGNvbXBsZXRlbHkgZmxhdHRlbmVkIHZlcnNpb24gb2YgYW4gYXJyYXkuXG4gIF8uZmxhdHRlbiA9IGZ1bmN0aW9uKGFycmF5LCBzaGFsbG93KSB7XG4gICAgcmV0dXJuIGZsYXR0ZW4oYXJyYXksIHNoYWxsb3csIFtdKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS5cbiAgXy53aXRob3V0ID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFycmF5LCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICB9O1xuXG4gIC8vIFByb2R1Y2UgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIHRoZSBhcnJheS4gSWYgdGhlIGFycmF5IGhhcyBhbHJlYWR5XG4gIC8vIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS5cbiAgLy8gQWxpYXNlZCBhcyBgdW5pcXVlYC5cbiAgXy51bmlxID0gXy51bmlxdWUgPSBmdW5jdGlvbihhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihpc1NvcnRlZCkpIHtcbiAgICAgIGNvbnRleHQgPSBpdGVyYXRvcjtcbiAgICAgIGl0ZXJhdG9yID0gaXNTb3J0ZWQ7XG4gICAgICBpc1NvcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB2YXIgaW5pdGlhbCA9IGl0ZXJhdG9yID8gXy5tYXAoYXJyYXksIGl0ZXJhdG9yLCBjb250ZXh0KSA6IGFycmF5O1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgdmFyIHNlZW4gPSBbXTtcbiAgICBlYWNoKGluaXRpYWwsIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkge1xuICAgICAgaWYgKGlzU29ydGVkID8gKCFpbmRleCB8fCBzZWVuW3NlZW4ubGVuZ3RoIC0gMV0gIT09IHZhbHVlKSA6ICFfLmNvbnRhaW5zKHNlZW4sIHZhbHVlKSkge1xuICAgICAgICBzZWVuLnB1c2godmFsdWUpO1xuICAgICAgICByZXN1bHRzLnB1c2goYXJyYXlbaW5kZXhdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2ZcbiAgLy8gdGhlIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8udW5pb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXy51bmlxKF8uZmxhdHRlbihhcmd1bWVudHMsIHRydWUpKTtcbiAgfTtcblxuICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlXG4gIC8vIHBhc3NlZC1pbiBhcnJheXMuXG4gIF8uaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdCA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICByZXR1cm4gXy5maWx0ZXIoXy51bmlxKGFycmF5KSwgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgcmV0dXJuIF8uZXZlcnkocmVzdCwgZnVuY3Rpb24ob3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIF8uaW5kZXhPZihvdGhlciwgaXRlbSkgPj0gMDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIFRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgXy5kaWZmZXJlbmNlID0gZnVuY3Rpb24oYXJyYXkpIHtcbiAgICB2YXIgcmVzdCA9IGNvbmNhdC5hcHBseShBcnJheVByb3RvLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIHJldHVybiBfLmZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpeyByZXR1cm4gIV8uY29udGFpbnMocmVzdCwgdmFsdWUpOyB9KTtcbiAgfTtcblxuICAvLyBaaXAgdG9nZXRoZXIgbXVsdGlwbGUgbGlzdHMgaW50byBhIHNpbmdsZSBhcnJheSAtLSBlbGVtZW50cyB0aGF0IHNoYXJlXG4gIC8vIGFuIGluZGV4IGdvIHRvZ2V0aGVyLlxuICBfLnppcCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZW5ndGggPSBfLm1heChfLnBsdWNrKGFyZ3VtZW50cywgXCJsZW5ndGhcIikuY29uY2F0KDApKTtcbiAgICB2YXIgcmVzdWx0cyA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdHNbaV0gPSBfLnBsdWNrKGFyZ3VtZW50cywgJycgKyBpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH07XG5cbiAgLy8gQ29udmVydHMgbGlzdHMgaW50byBvYmplY3RzLiBQYXNzIGVpdGhlciBhIHNpbmdsZSBhcnJheSBvZiBgW2tleSwgdmFsdWVdYFxuICAvLyBwYWlycywgb3IgdHdvIHBhcmFsbGVsIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFuZCBvbmUgb2ZcbiAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICBfLm9iamVjdCA9IGZ1bmN0aW9uKGxpc3QsIHZhbHVlcykge1xuICAgIGlmIChsaXN0ID09IG51bGwpIHJldHVybiB7fTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICByZXN1bHRbbGlzdFtpXV0gPSB2YWx1ZXNbaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbbGlzdFtpXVswXV0gPSBsaXN0W2ldWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIElmIHRoZSBicm93c2VyIGRvZXNuJ3Qgc3VwcGx5IHVzIHdpdGggaW5kZXhPZiAoSSdtIGxvb2tpbmcgYXQgeW91LCAqKk1TSUUqKiksXG4gIC8vIHdlIG5lZWQgdGhpcyBmdW5jdGlvbi4gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhblxuICAvLyBpdGVtIGluIGFuIGFycmF5LCBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgaW5kZXhPZmAgaWYgYXZhaWxhYmxlLlxuICAvLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5kIGFscmVhZHkgaW4gc29ydCBvcmRlciwgcGFzcyBgdHJ1ZWBcbiAgLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5IHNlYXJjaC5cbiAgXy5pbmRleE9mID0gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlzU29ydGVkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiAtMTtcbiAgICB2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7XG4gICAgaWYgKGlzU29ydGVkKSB7XG4gICAgICBpZiAodHlwZW9mIGlzU29ydGVkID09ICdudW1iZXInKSB7XG4gICAgICAgIGkgPSAoaXNTb3J0ZWQgPCAwID8gTWF0aC5tYXgoMCwgbCArIGlzU29ydGVkKSA6IGlzU29ydGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkgPSBfLnNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIGFycmF5W2ldID09PSBpdGVtID8gaSA6IC0xO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobmF0aXZlSW5kZXhPZiAmJiBhcnJheS5pbmRleE9mID09PSBuYXRpdmVJbmRleE9mKSByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtLCBpc1NvcnRlZCk7XG4gICAgZm9yICg7IGkgPCBsOyBpKyspIGlmIChhcnJheVtpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgcmV0dXJuIC0xO1xuICB9O1xuXG4gIC8vIERlbGVnYXRlcyB0byAqKkVDTUFTY3JpcHQgNSoqJ3MgbmF0aXZlIGBsYXN0SW5kZXhPZmAgaWYgYXZhaWxhYmxlLlxuICBfLmxhc3RJbmRleE9mID0gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGZyb20pIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCkgcmV0dXJuIC0xO1xuICAgIHZhciBoYXNJbmRleCA9IGZyb20gIT0gbnVsbDtcbiAgICBpZiAobmF0aXZlTGFzdEluZGV4T2YgJiYgYXJyYXkubGFzdEluZGV4T2YgPT09IG5hdGl2ZUxhc3RJbmRleE9mKSB7XG4gICAgICByZXR1cm4gaGFzSW5kZXggPyBhcnJheS5sYXN0SW5kZXhPZihpdGVtLCBmcm9tKSA6IGFycmF5Lmxhc3RJbmRleE9mKGl0ZW0pO1xuICAgIH1cbiAgICB2YXIgaSA9IChoYXNJbmRleCA/IGZyb20gOiBhcnJheS5sZW5ndGgpO1xuICAgIHdoaWxlIChpLS0pIGlmIChhcnJheVtpXSA9PT0gaXRlbSkgcmV0dXJuIGk7XG4gICAgcmV0dXJuIC0xO1xuICB9O1xuXG4gIC8vIEdlbmVyYXRlIGFuIGludGVnZXIgQXJyYXkgY29udGFpbmluZyBhbiBhcml0aG1ldGljIHByb2dyZXNzaW9uLiBBIHBvcnQgb2ZcbiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWVcbiAgLy8gW3RoZSBQeXRob24gZG9jdW1lbnRhdGlvbl0oaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS5cbiAgXy5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPD0gMSkge1xuICAgICAgc3RvcCA9IHN0YXJ0IHx8IDA7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIHN0ZXAgPSBhcmd1bWVudHNbMl0gfHwgMTtcblxuICAgIHZhciBsZW4gPSBNYXRoLm1heChNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKSwgMCk7XG4gICAgdmFyIGlkeCA9IDA7XG4gICAgdmFyIHJhbmdlID0gbmV3IEFycmF5KGxlbik7XG5cbiAgICB3aGlsZShpZHggPCBsZW4pIHtcbiAgICAgIHJhbmdlW2lkeCsrXSA9IHN0YXJ0O1xuICAgICAgc3RhcnQgKz0gc3RlcDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgLy8gRnVuY3Rpb24gKGFoZW0pIEZ1bmN0aW9uc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvLyBSZXVzYWJsZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgcHJvdG90eXBlIHNldHRpbmcuXG4gIHZhciBjdG9yID0gZnVuY3Rpb24oKXt9O1xuXG4gIC8vIENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJndW1lbnRzLFxuICAvLyBvcHRpb25hbGx5KS4gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYEZ1bmN0aW9uLmJpbmRgIGlmXG4gIC8vIGF2YWlsYWJsZS5cbiAgXy5iaW5kID0gZnVuY3Rpb24oZnVuYywgY29udGV4dCkge1xuICAgIHZhciBhcmdzLCBib3VuZDtcbiAgICBpZiAobmF0aXZlQmluZCAmJiBmdW5jLmJpbmQgPT09IG5hdGl2ZUJpbmQpIHJldHVybiBuYXRpdmVCaW5kLmFwcGx5KGZ1bmMsIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgaWYgKCFfLmlzRnVuY3Rpb24oZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3I7XG4gICAgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gYm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkpIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgICAgY3Rvci5wcm90b3R5cGUgPSBmdW5jLnByb3RvdHlwZTtcbiAgICAgIHZhciBzZWxmID0gbmV3IGN0b3I7XG4gICAgICBjdG9yLnByb3RvdHlwZSA9IG51bGw7XG4gICAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseShzZWxmLCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbiAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfTtcbiAgfTtcblxuICAvLyBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBieSBjcmVhdGluZyBhIHZlcnNpb24gdGhhdCBoYXMgaGFkIHNvbWUgb2YgaXRzXG4gIC8vIGFyZ3VtZW50cyBwcmUtZmlsbGVkLCB3aXRob3V0IGNoYW5naW5nIGl0cyBkeW5hbWljIGB0aGlzYCBjb250ZXh0LlxuICBfLnBhcnRpYWwgPSBmdW5jdGlvbihmdW5jKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgfTtcbiAgfTtcblxuICAvLyBCaW5kIGFsbCBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRoYXRcbiAgLy8gYWxsIGNhbGxiYWNrcyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQuXG4gIF8uYmluZEFsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBmdW5jcyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJiaW5kQWxsIG11c3QgYmUgcGFzc2VkIGZ1bmN0aW9uIG5hbWVzXCIpO1xuICAgIGVhY2goZnVuY3MsIGZ1bmN0aW9uKGYpIHsgb2JqW2ZdID0gXy5iaW5kKG9ialtmXSwgb2JqKTsgfSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBNZW1vaXplIGFuIGV4cGVuc2l2ZSBmdW5jdGlvbiBieSBzdG9yaW5nIGl0cyByZXN1bHRzLlxuICBfLm1lbW9pemUgPSBmdW5jdGlvbihmdW5jLCBoYXNoZXIpIHtcbiAgICB2YXIgbWVtbyA9IHt9O1xuICAgIGhhc2hlciB8fCAoaGFzaGVyID0gXy5pZGVudGl0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGtleSA9IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIF8uaGFzKG1lbW8sIGtleSkgPyBtZW1vW2tleV0gOiAobWVtb1trZXldID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICBfLmRlbGF5ID0gZnVuY3Rpb24oZnVuYywgd2FpdCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGFyZ3MpOyB9LCB3YWl0KTtcbiAgfTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbiAgLy8gY2xlYXJlZC5cbiAgXy5kZWZlciA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICByZXR1cm4gXy5kZWxheS5hcHBseShfLCBbZnVuYywgMV0uY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSkpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgd2hlbiBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIGF0IG1vc3Qgb25jZVxuICAvLyBkdXJpbmcgYSBnaXZlbiB3aW5kb3cgb2YgdGltZS4gTm9ybWFsbHksIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gd2lsbCBydW5cbiAgLy8gYXMgbXVjaCBhcyBpdCBjYW4sIHdpdGhvdXQgZXZlciBnb2luZyBtb3JlIHRoYW4gb25jZSBwZXIgYHdhaXRgIGR1cmF0aW9uO1xuICAvLyBidXQgaWYgeW91J2QgbGlrZSB0byBkaXNhYmxlIHRoZSBleGVjdXRpb24gb24gdGhlIGxlYWRpbmcgZWRnZSwgcGFzc1xuICAvLyBge2xlYWRpbmc6IGZhbHNlfWAuIFRvIGRpc2FibGUgZXhlY3V0aW9uIG9uIHRoZSB0cmFpbGluZyBlZGdlLCBkaXR0by5cbiAgXy50aHJvdHRsZSA9IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCwgYXJncywgcmVzdWx0O1xuICAgIHZhciB0aW1lb3V0ID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xuICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogbmV3IERhdGU7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbm93ID0gbmV3IERhdGU7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIHByZXZpb3VzID0gbm93O1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90XG4gIC8vIGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3JcbiAgLy8gTiBtaWxsaXNlY29uZHMuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhlXG4gIC8vIGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuXG4gIF8uZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIHZhciB0aW1lb3V0ID0gbnVsbDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIGlmICghaW1tZWRpYXRlKSByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfTtcbiAgICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgaWYgKGNhbGxOb3cpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93XG4gIC8vIG9mdGVuIHlvdSBjYWxsIGl0LiBVc2VmdWwgZm9yIGxhenkgaW5pdGlhbGl6YXRpb24uXG4gIF8ub25jZSA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgcmFuID0gZmFsc2UsIG1lbW87XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHJhbikgcmV0dXJuIG1lbW87XG4gICAgICByYW4gPSB0cnVlO1xuICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIGZ1bmMgPSBudWxsO1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCxcbiAgLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZFxuICAvLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxuICBfLndyYXAgPSBmdW5jdGlvbihmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbZnVuY107XG4gICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gd3JhcHBlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBhIGxpc3Qgb2YgZnVuY3Rpb25zLCBlYWNoXG4gIC8vIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuXG4gIF8uY29tcG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBmdW5jcyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIGZvciAodmFyIGkgPSBmdW5jcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBhcmdzID0gW2Z1bmNzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmdzWzBdO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIGFmdGVyIGJlaW5nIGNhbGxlZCBOIHRpbWVzLlxuICBfLmFmdGVyID0gZnVuY3Rpb24odGltZXMsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8vIE9iamVjdCBGdW5jdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNgXG4gIF8ua2V5cyA9IG5hdGl2ZUtleXMgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKG9iaiAhPT0gT2JqZWN0KG9iaikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgb2JqZWN0Jyk7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBpZiAoXy5oYXMob2JqLCBrZXkpKSBrZXlzLnB1c2goa2V5KTtcbiAgICByZXR1cm4ga2V5cztcbiAgfTtcblxuICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuXG4gIF8udmFsdWVzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIHZhbHVlcy5wdXNoKG9ialtrZXldKTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIC8vIENvbnZlcnQgYW4gb2JqZWN0IGludG8gYSBsaXN0IG9mIGBba2V5LCB2YWx1ZV1gIHBhaXJzLlxuICBfLnBhaXJzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHBhaXJzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgaWYgKF8uaGFzKG9iaiwga2V5KSkgcGFpcnMucHVzaChba2V5LCBvYmpba2V5XV0pO1xuICAgIHJldHVybiBwYWlycztcbiAgfTtcblxuICAvLyBJbnZlcnQgdGhlIGtleXMgYW5kIHZhbHVlcyBvZiBhbiBvYmplY3QuIFRoZSB2YWx1ZXMgbXVzdCBiZSBzZXJpYWxpemFibGUuXG4gIF8uaW52ZXJ0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIHJlc3VsdFtvYmpba2V5XV0gPSBrZXk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuXG4gIC8vIEFsaWFzZWQgYXMgYG1ldGhvZHNgXG4gIF8uZnVuY3Rpb25zID0gXy5tZXRob2RzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihvYmpba2V5XSkpIG5hbWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzLnNvcnQoKTtcbiAgfTtcblxuICAvLyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIHByb3BlcnRpZXMgaW4gcGFzc2VkLWluIG9iamVjdChzKS5cbiAgXy5leHRlbmQgPSBmdW5jdGlvbihvYmopIHtcbiAgICBlYWNoKHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSwgZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7XG4gICAgICAgICAgb2JqW3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5nIHRoZSB3aGl0ZWxpc3RlZCBwcm9wZXJ0aWVzLlxuICBfLnBpY2sgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgY29weSA9IHt9O1xuICAgIHZhciBrZXlzID0gY29uY2F0LmFwcGx5KEFycmF5UHJvdG8sIHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgZWFjaChrZXlzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgIGlmIChrZXkgaW4gb2JqKSBjb3B5W2tleV0gPSBvYmpba2V5XTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29weTtcbiAgfTtcblxuICAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGJsYWNrbGlzdGVkIHByb3BlcnRpZXMuXG4gIF8ub21pdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciBjb3B5ID0ge307XG4gICAgdmFyIGtleXMgPSBjb25jYXQuYXBwbHkoQXJyYXlQcm90bywgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoIV8uY29udGFpbnMoa2V5cywga2V5KSkgY29weVtrZXldID0gb2JqW2tleV07XG4gICAgfVxuICAgIHJldHVybiBjb3B5O1xuICB9O1xuXG4gIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuXG4gIF8uZGVmYXVsdHMgPSBmdW5jdGlvbihvYmopIHtcbiAgICBlYWNoKHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSwgZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7XG4gICAgICAgICAgaWYgKG9ialtwcm9wXSA9PT0gdm9pZCAwKSBvYmpbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb2JqO1xuICB9O1xuXG4gIC8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbiAgXy5jbG9uZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIHJldHVybiBfLmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogXy5leHRlbmQoe30sIG9iaik7XG4gIH07XG5cbiAgLy8gSW52b2tlcyBpbnRlcmNlcHRvciB3aXRoIHRoZSBvYmosIGFuZCB0aGVuIHJldHVybnMgb2JqLlxuICAvLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbiAgLy8gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbiB0aGUgY2hhaW4uXG4gIF8udGFwID0gZnVuY3Rpb24ob2JqLCBpbnRlcmNlcHRvcikge1xuICAgIGludGVyY2VwdG9yKG9iaik7XG4gICAgcmV0dXJuIG9iajtcbiAgfTtcblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYGlzRXF1YWxgLlxuICB2YXIgZXEgPSBmdW5jdGlvbihhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIElkZW50aWNhbCBvYmplY3RzIGFyZSBlcXVhbC4gYDAgPT09IC0wYCwgYnV0IHRoZXkgYXJlbid0IGlkZW50aWNhbC5cbiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTplZ2FsKS5cbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT0gMSAvIGI7XG4gICAgLy8gQSBzdHJpY3QgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgbnVsbCA9PSB1bmRlZmluZWRgLlxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gYSA9PT0gYjtcbiAgICAvLyBVbndyYXAgYW55IHdyYXBwZWQgb2JqZWN0cy5cbiAgICBpZiAoYSBpbnN0YW5jZW9mIF8pIGEgPSBhLl93cmFwcGVkO1xuICAgIGlmIChiIGluc3RhbmNlb2YgXykgYiA9IGIuX3dyYXBwZWQ7XG4gICAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy5cbiAgICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcbiAgICBpZiAoY2xhc3NOYW1lICE9IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTtcbiAgICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAgLy8gU3RyaW5ncywgbnVtYmVycywgZGF0ZXMsIGFuZCBib29sZWFucyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuXG4gICAgICBjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIGBuZXcgU3RyaW5nKFwiNVwiKWAuXG4gICAgICAgIHJldHVybiBhID09IFN0cmluZyhiKTtcbiAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG4gICAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuIEFuIGBlZ2FsYCBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCBmb3JcbiAgICAgICAgLy8gb3RoZXIgbnVtZXJpYyB2YWx1ZXMuXG4gICAgICAgIHJldHVybiBhICE9ICthID8gYiAhPSArYiA6IChhID09IDAgPyAxIC8gYSA9PSAxIC8gYiA6IGEgPT0gK2IpO1xuICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6XG4gICAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcbiAgICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAgIC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC5cbiAgICAgICAgcmV0dXJuICthID09ICtiO1xuICAgICAgLy8gUmVnRXhwcyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgc291cmNlIHBhdHRlcm5zIGFuZCBmbGFncy5cbiAgICAgIGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG4gICAgICAgIHJldHVybiBhLnNvdXJjZSA9PSBiLnNvdXJjZSAmJlxuICAgICAgICAgICAgICAgYS5nbG9iYWwgPT0gYi5nbG9iYWwgJiZcbiAgICAgICAgICAgICAgIGEubXVsdGlsaW5lID09IGIubXVsdGlsaW5lICYmXG4gICAgICAgICAgICAgICBhLmlnbm9yZUNhc2UgPT0gYi5pZ25vcmVDYXNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljXG4gICAgLy8gc3RydWN0dXJlcyBpcyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9uIGBKT2AuXG4gICAgdmFyIGxlbmd0aCA9IGFTdGFjay5sZW5ndGg7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAvLyBMaW5lYXIgc2VhcmNoLiBQZXJmb3JtYW5jZSBpcyBpbnZlcnNlbHkgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2ZcbiAgICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT0gYjtcbiAgICB9XG4gICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBzXG4gICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7XG4gICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKF8uaXNGdW5jdGlvbihhQ3RvcikgJiYgKGFDdG9yIGluc3RhbmNlb2YgYUN0b3IpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uaXNGdW5jdGlvbihiQ3RvcikgJiYgKGJDdG9yIGluc3RhbmNlb2YgYkN0b3IpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4gICAgYlN0YWNrLnB1c2goYik7XG4gICAgdmFyIHNpemUgPSAwLCByZXN1bHQgPSB0cnVlO1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgIGlmIChjbGFzc05hbWUgPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gICAgICBzaXplID0gYS5sZW5ndGg7XG4gICAgICByZXN1bHQgPSBzaXplID09IGIubGVuZ3RoO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgICAgICAgaWYgKCEocmVzdWx0ID0gZXEoYVtzaXplXSwgYltzaXplXSwgYVN0YWNrLCBiU3RhY2spKSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVlcCBjb21wYXJlIG9iamVjdHMuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gYSkge1xuICAgICAgICBpZiAoXy5oYXMoYSwga2V5KSkge1xuICAgICAgICAgIC8vIENvdW50IHRoZSBleHBlY3RlZCBudW1iZXIgb2YgcHJvcGVydGllcy5cbiAgICAgICAgICBzaXplKys7XG4gICAgICAgICAgLy8gRGVlcCBjb21wYXJlIGVhY2ggbWVtYmVyLlxuICAgICAgICAgIGlmICghKHJlc3VsdCA9IF8uaGFzKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcy5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgZm9yIChrZXkgaW4gYikge1xuICAgICAgICAgIGlmIChfLmhhcyhiLCBrZXkpICYmICEoc2l6ZS0tKSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gIXNpemU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIGFTdGFjay5wb3AoKTtcbiAgICBiU3RhY2sucG9wKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBQZXJmb3JtIGEgZGVlcCBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHR3byBvYmplY3RzIGFyZSBlcXVhbC5cbiAgXy5pc0VxdWFsID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiLCBbXSwgW10pO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gYXJyYXksIHN0cmluZywgb3Igb2JqZWN0IGVtcHR5P1xuICAvLyBBbiBcImVtcHR5XCIgb2JqZWN0IGhhcyBubyBlbnVtZXJhYmxlIG93bi1wcm9wZXJ0aWVzLlxuICBfLmlzRW1wdHkgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIGlmIChfLmlzQXJyYXkob2JqKSB8fCBfLmlzU3RyaW5nKG9iaikpIHJldHVybiBvYmoubGVuZ3RoID09PSAwO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChfLmhhcyhvYmosIGtleSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/XG4gIF8uaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYW4gYXJyYXk/XG4gIC8vIERlbGVnYXRlcyB0byBFQ01BNSdzIG5hdGl2ZSBBcnJheS5pc0FycmF5XG4gIF8uaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgYW4gb2JqZWN0P1xuICBfLmlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gT2JqZWN0KG9iaik7XG4gIH07XG5cbiAgLy8gQWRkIHNvbWUgaXNUeXBlIG1ldGhvZHM6IGlzQXJndW1lbnRzLCBpc0Z1bmN0aW9uLCBpc1N0cmluZywgaXNOdW1iZXIsIGlzRGF0ZSwgaXNSZWdFeHAuXG4gIGVhY2goWydBcmd1bWVudHMnLCAnRnVuY3Rpb24nLCAnU3RyaW5nJywgJ051bWJlcicsICdEYXRlJywgJ1JlZ0V4cCddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgX1snaXMnICsgbmFtZV0gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGEgZmFsbGJhY2sgdmVyc2lvbiBvZiB0aGUgbWV0aG9kIGluIGJyb3dzZXJzIChhaGVtLCBJRSksIHdoZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNwZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUuXG4gIGlmICghXy5pc0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7XG4gICAgXy5pc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuICEhKG9iaiAmJiBfLmhhcyhvYmosICdjYWxsZWUnKSk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS5cbiAgaWYgKHR5cGVvZiAoLy4vKSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIF8uaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbic7XG4gICAgfTtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gb2JqZWN0IGEgZmluaXRlIG51bWJlcj9cbiAgXy5pc0Zpbml0ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBpc0Zpbml0ZShvYmopICYmICFpc05hTihwYXJzZUZsb2F0KG9iaikpO1xuICB9O1xuXG4gIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFOYD8gKE5hTiBpcyB0aGUgb25seSBudW1iZXIgd2hpY2ggZG9lcyBub3QgZXF1YWwgaXRzZWxmKS5cbiAgXy5pc05hTiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfLmlzTnVtYmVyKG9iaikgJiYgb2JqICE9ICtvYmo7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIGJvb2xlYW4/XG4gIF8uaXNCb29sZWFuID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PSAnW29iamVjdCBCb29sZWFuXSc7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsP1xuICBfLmlzTnVsbCA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IG51bGw7XG4gIH07XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/XG4gIF8uaXNVbmRlZmluZWQgPSBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSB2b2lkIDA7XG4gIH07XG5cbiAgLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseVxuICAvLyBvbiBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLlxuICBfLmhhcyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICB9O1xuXG4gIC8vIFV0aWxpdHkgRnVuY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8gUnVuIFVuZGVyc2NvcmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0c1xuICAvLyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuXG4gIF8ubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJvb3QuXyA9IHByZXZpb3VzVW5kZXJzY29yZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0b3JzLlxuICBfLmlkZW50aXR5ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIF8udGltZXMgPSBmdW5jdGlvbihuLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgYWNjdW1baV0gPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIGkpO1xuICAgIHJldHVybiBhY2N1bTtcbiAgfTtcblxuICAvLyBSZXR1cm4gYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIG1pbiBhbmQgbWF4IChpbmNsdXNpdmUpLlxuICBfLnJhbmRvbSA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PSBudWxsKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cbiAgICByZXR1cm4gbWluICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKTtcbiAgfTtcblxuICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLlxuICB2YXIgZW50aXR5TWFwID0ge1xuICAgIGVzY2FwZToge1xuICAgICAgJyYnOiAnJmFtcDsnLFxuICAgICAgJzwnOiAnJmx0OycsXG4gICAgICAnPic6ICcmZ3Q7JyxcbiAgICAgICdcIic6ICcmcXVvdDsnLFxuICAgICAgXCInXCI6ICcmI3gyNzsnLFxuICAgICAgJy8nOiAnJiN4MkY7J1xuICAgIH1cbiAgfTtcbiAgZW50aXR5TWFwLnVuZXNjYXBlID0gXy5pbnZlcnQoZW50aXR5TWFwLmVzY2FwZSk7XG5cbiAgLy8gUmVnZXhlcyBjb250YWluaW5nIHRoZSBrZXlzIGFuZCB2YWx1ZXMgbGlzdGVkIGltbWVkaWF0ZWx5IGFib3ZlLlxuICB2YXIgZW50aXR5UmVnZXhlcyA9IHtcbiAgICBlc2NhcGU6ICAgbmV3IFJlZ0V4cCgnWycgKyBfLmtleXMoZW50aXR5TWFwLmVzY2FwZSkuam9pbignJykgKyAnXScsICdnJyksXG4gICAgdW5lc2NhcGU6IG5ldyBSZWdFeHAoJygnICsgXy5rZXlzKGVudGl0eU1hcC51bmVzY2FwZSkuam9pbignfCcpICsgJyknLCAnZycpXG4gIH07XG5cbiAgLy8gRnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzIHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxuICBfLmVhY2goWydlc2NhcGUnLCAndW5lc2NhcGUnXSwgZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgX1ttZXRob2RdID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICBpZiAoc3RyaW5nID09IG51bGwpIHJldHVybiAnJztcbiAgICAgIHJldHVybiAoJycgKyBzdHJpbmcpLnJlcGxhY2UoZW50aXR5UmVnZXhlc1ttZXRob2RdLCBmdW5jdGlvbihtYXRjaCkge1xuICAgICAgICByZXR1cm4gZW50aXR5TWFwW21ldGhvZF1bbWF0Y2hdO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gSWYgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBgcHJvcGVydHlgIGlzIGEgZnVuY3Rpb24gdGhlbiBpbnZva2UgaXQgd2l0aCB0aGVcbiAgLy8gYG9iamVjdGAgYXMgY29udGV4dDsgb3RoZXJ3aXNlLCByZXR1cm4gaXQuXG4gIF8ucmVzdWx0ID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3RbcHJvcGVydHldO1xuICAgIHJldHVybiBfLmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7XG4gIH07XG5cbiAgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LlxuICBfLm1peGluID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgZWFjaChfLmZ1bmN0aW9ucyhvYmopLCBmdW5jdGlvbihuYW1lKXtcbiAgICAgIHZhciBmdW5jID0gX1tuYW1lXSA9IG9ialtuYW1lXTtcbiAgICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQuY2FsbCh0aGlzLCBmdW5jLmFwcGx5KF8sIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBzZXNzaW9uKS5cbiAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbiAgdmFyIGlkQ291bnRlciA9IDA7XG4gIF8udW5pcXVlSWQgPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICB2YXIgaWQgPSArK2lkQ291bnRlciArICcnO1xuICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkO1xuICB9O1xuXG4gIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUgdXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZVxuICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gIF8udGVtcGxhdGVTZXR0aW5ncyA9IHtcbiAgICBldmFsdWF0ZSAgICA6IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcXHNcXFNdKz8pJT4vZyxcbiAgICBlc2NhcGUgICAgICA6IC88JS0oW1xcc1xcU10rPyklPi9nXG4gIH07XG5cbiAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxuICAvLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4gIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLlxuICB2YXIgbm9NYXRjaCA9IC8oLileLztcblxuICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYVxuICAvLyBzdHJpbmcgbGl0ZXJhbC5cbiAgdmFyIGVzY2FwZXMgPSB7XG4gICAgXCInXCI6ICAgICAgXCInXCIsXG4gICAgJ1xcXFwnOiAgICAgJ1xcXFwnLFxuICAgICdcXHInOiAgICAgJ3InLFxuICAgICdcXG4nOiAgICAgJ24nLFxuICAgICdcXHQnOiAgICAgJ3QnLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICB2YXIgZXNjYXBlciA9IC9cXFxcfCd8XFxyfFxcbnxcXHR8XFx1MjAyOHxcXHUyMDI5L2c7XG5cbiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi5cbiAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLFxuICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS5cbiAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIGRhdGEsIHNldHRpbmdzKSB7XG4gICAgdmFyIHJlbmRlcjtcbiAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpO1xuXG4gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uXG4gICAgdmFyIG1hdGNoZXIgPSBuZXcgUmVnRXhwKFtcbiAgICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2VcbiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7XG4gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7XG4gICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KVxuICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbihtYXRjaCkgeyByZXR1cm4gJ1xcXFwnICsgZXNjYXBlc1ttYXRjaF07IH0pO1xuXG4gICAgICBpZiAoZXNjYXBlKSB7XG4gICAgICAgIHNvdXJjZSArPSBcIicrXFxuKChfX3Q9KFwiICsgZXNjYXBlICsgXCIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcXG4nXCI7XG4gICAgICB9XG4gICAgICBpZiAoaW50ZXJwb2xhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJytcXG4oKF9fdD0oXCIgKyBpbnRlcnBvbGF0ZSArIFwiKSk9PW51bGw/Jyc6X190KStcXG4nXCI7XG4gICAgICB9XG4gICAgICBpZiAoZXZhbHVhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAgICAgIH1cbiAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xuICAgIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLlxuICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3VyY2UgKyAnfVxcbic7XG5cbiAgICBzb3VyY2UgPSBcInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbixcIiArXG4gICAgICBcInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XFxuXCIgK1xuICAgICAgc291cmNlICsgXCJyZXR1cm4gX19wO1xcblwiO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGUuc291cmNlID0gc291cmNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSkgcmV0dXJuIHJlbmRlcihkYXRhLCBfKTtcbiAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7XG4gICAgfTtcblxuICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi5cbiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIChzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJykgKyAnKXtcXG4nICsgc291cmNlICsgJ30nO1xuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9O1xuXG4gIC8vIEFkZCBhIFwiY2hhaW5cIiBmdW5jdGlvbiwgd2hpY2ggd2lsbCBkZWxlZ2F0ZSB0byB0aGUgd3JhcHBlci5cbiAgXy5jaGFpbiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIHJldHVybiBfKG9iaikuY2hhaW4oKTtcbiAgfTtcblxuICAvLyBPT1BcbiAgLy8gLS0tLS0tLS0tLS0tLS0tXG4gIC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0XG4gIC8vIGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhlXG4gIC8vIHVuZGVyc2NvcmUgZnVuY3Rpb25zLiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNoYWluZWQuXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnRpbnVlIGNoYWluaW5nIGludGVybWVkaWF0ZSByZXN1bHRzLlxuICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYWluID8gXyhvYmopLmNoYWluKCkgOiBvYmo7XG4gIH07XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICBfLm1peGluKF8pO1xuXG4gIC8vIEFkZCBhbGwgbXV0YXRvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIGVhY2goWydwb3AnLCAncHVzaCcsICdyZXZlcnNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8ucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIG1ldGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoKG5hbWUgPT0gJ3NoaWZ0JyB8fCBuYW1lID09ICdzcGxpY2UnKSAmJiBvYmoubGVuZ3RoID09PSAwKSBkZWxldGUgb2JqWzBdO1xuICAgICAgcmV0dXJuIHJlc3VsdC5jYWxsKHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gQWRkIGFsbCBhY2Nlc3NvciBBcnJheSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuXG4gIGVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07XG4gICAgXy5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByZXN1bHQuY2FsbCh0aGlzLCBtZXRob2QuYXBwbHkodGhpcy5fd3JhcHBlZCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG5cbiAgXy5leHRlbmQoXy5wcm90b3R5cGUsIHtcblxuICAgIC8vIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVjdC5cbiAgICBjaGFpbjogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLl9jaGFpbiA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gICAgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyYXBwZWQ7XG4gICAgfVxuXG4gIH0pO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqL1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXztcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdGlmICghbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xuXHRcdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcblx0fVxuXHRyZXR1cm4gbW9kdWxlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=