ibp-max 1.1.2 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +2 -2
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(self,(()=>(()=>{var __webpack_modules__={440:function(e,t){var n,r,o;r="undefined"!=typeof window?window:this,o=function(r,o){function i(e){var t=e.length,n=Q.type(e);return"function"!==n&&!Q.isWindow(e)&&(!(1!==e.nodeType||!t)||"array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function a(e,t,n){if(Q.isFunction(t))return Q.grep(e,(function(e,r){return!!t.call(e,r,e)!==n}));if(t.nodeType)return Q.grep(e,(function(e){return e===t!==n}));if("string"==typeof t){if(ie.test(t))return Q.filter(t,e,n);t=Q.filter(t,e)}return Q.grep(e,(function(e){return z.call(t,e)>=0!==n}))}function s(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function l(){Y.removeEventListener("DOMContentLoaded",l,!1),r.removeEventListener("load",l,!1),Q.ready()}function c(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=Q.expando+Math.random()}function u(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ye,"-$1").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:ve.test(n)?Q.parseJSON(n):n)}catch(e){}me.set(e,t,n)}else n=void 0;return n}function d(){return!0}function f(){return!1}function p(){try{return Y.activeElement}catch(e){}}function h(e,t){return Q.nodeName(e,"table")&&Q.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function g(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function m(e){var t=je.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function v(e,t){for(var n=0,r=e.length;r>n;n++)ge.set(e[n],"globalEval",!t||ge.get(t[n],"globalEval"))}function y(e,t){var n,r,o,i,a,s,l,c;if(1===t.nodeType){if(ge.hasData(e)&&(i=ge.access(e),a=ge.set(t,i),c=i.events))for(o in delete a.handle,a.events={},c)for(n=0,r=c[o].length;r>n;n++)Q.event.add(t,o,c[o][n]);me.hasData(e)&&(s=me.access(e),l=Q.extend({},s),me.set(t,l))}}function b(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&Q.nodeName(e,t)?Q.merge([e],n):n}function x(e,t){var n=t.nodeName.toLowerCase();"input"===n&&Ee.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}function w(e,t){var n,o=Q(t.createElement(e)).appendTo(t.body),i=r.getDefaultComputedStyle&&(n=r.getDefaultComputedStyle(o[0]))?n.display:Q.css(o[0],"display");return o.detach(),i}function E(e){var t=Y,n=$e[e];return n||("none"!==(n=w(e,t))&&n||((t=(Fe=(Fe||Q("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement))[0].contentDocument).write(),t.close(),n=w(e,t),Fe.detach()),$e[e]=n),n}function C(e,t,n){var r,o,i,a,s=e.style;return(n=n||Me(e))&&(a=n.getPropertyValue(t)||n[t]),n&&(""!==a||Q.contains(e.ownerDocument,e)||(a=Q.style(e,t)),He.test(a)&&Re.test(t)&&(r=s.width,o=s.minWidth,i=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=o,s.maxWidth=i)),void 0!==a?a+"":a}function A(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function L(e,t){if(t in e)return t;for(var n=t[0].toUpperCase()+t.slice(1),r=t,o=Ge.length;o--;)if((t=Ge[o]+n)in e)return t;return r}function S(e,t,n){var r=Ue.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function T(e,t,n,r,o){for(var i=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>i;i+=2)"margin"===n&&(a+=Q.css(e,n+xe[i],!0,o)),r?("content"===n&&(a-=Q.css(e,"padding"+xe[i],!0,o)),"margin"!==n&&(a-=Q.css(e,"border"+xe[i]+"Width",!0,o))):(a+=Q.css(e,"padding"+xe[i],!0,o),"padding"!==n&&(a+=Q.css(e,"border"+xe[i]+"Width",!0,o)));return a}function N(e,t,n){var r=!0,o="width"===t?e.offsetWidth:e.offsetHeight,i=Me(e),a="border-box"===Q.css(e,"boxSizing",!1,i);if(0>=o||null==o){if((0>(o=C(e,t,i))||null==o)&&(o=e.style[t]),He.test(o))return o;r=a&&(X.boxSizingReliable()||o===e.style[t]),o=parseFloat(o)||0}return o+T(e,t,n||(a?"border":"content"),r,i)+"px"}function k(e,t){for(var n,r,o,i=[],a=0,s=e.length;s>a;a++)(r=e[a]).style&&(i[a]=ge.get(r,"olddisplay"),n=r.style.display,t?(i[a]||"none"!==n||(r.style.display=""),""===r.style.display&&we(r)&&(i[a]=ge.access(r,"olddisplay",E(r.nodeName)))):(o=we(r),"none"===n&&o||ge.set(r,"olddisplay",o?n:Q.css(r,"display"))));for(a=0;s>a;a++)(r=e[a]).style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?i[a]||"":"none"));return e}function O(e,t,n,r,o){return new O.prototype.init(e,t,n,r,o)}function D(){return setTimeout((function(){Xe=void 0})),Xe=Q.now()}function _(e,t){var n,r=0,o={height:e};for(t=t?1:0;4>r;r+=2-t)o["margin"+(n=xe[r])]=o["padding"+n]=e;return t&&(o.opacity=o.width=e),o}function P(e,t,n){for(var r,o=(et[t]||[]).concat(et["*"]),i=0,a=o.length;a>i;i++)if(r=o[i].call(n,t,e))return r}function j(e,t,n){var r,o,i=0,a=Ze.length,s=Q.Deferred().always((function(){delete l.elem})),l=function(){if(o)return!1;for(var t=Xe||D(),n=Math.max(0,c.startTime+c.duration-t),r=1-(n/c.duration||0),i=0,a=c.tweens.length;a>i;i++)c.tweens[i].run(r);return s.notifyWith(e,[c,r,n]),1>r&&a?n:(s.resolveWith(e,[c]),!1)},c=s.promise({elem:e,props:Q.extend({},t),opts:Q.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xe||D(),duration:n.duration,tweens:[],createTween:function(t,n){var r=Q.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(r),r},stop:function(t){var n=0,r=t?c.tweens.length:0;if(o)return this;for(o=!0;r>n;n++)c.tweens[n].run(1);return t?s.resolveWith(e,[c,t]):s.rejectWith(e,[c,t]),this}}),u=c.props;for(function(e,t){var n,r,o,i,a;for(n in e)if(o=t[r=Q.camelCase(n)],i=e[n],Q.isArray(i)&&(o=i[1],i=e[n]=i[0]),n!==r&&(e[r]=i,delete e[n]),(a=Q.cssHooks[r])&&"expand"in a)for(n in i=a.expand(i),delete e[r],i)n in e||(e[n]=i[n],t[n]=o);else t[r]=o}(u,c.opts.specialEasing);a>i;i++)if(r=Ze[i].call(c,e,u,c.opts))return r;return Q.map(u,P,c),Q.isFunction(c.opts.start)&&c.opts.start.call(e,c),Q.fx.timer(Q.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)}function q(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,o=0,i=t.toLowerCase().match(fe)||[];if(Q.isFunction(n))for(;r=i[o++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function I(e,t,n,r){function o(s){var l;return i[s]=!0,Q.each(e[s]||[],(function(e,s){var c=s(t,n,r);return"string"!=typeof c||a||i[c]?a?!(l=c):void 0:(t.dataTypes.unshift(c),o(c),!1)})),l}var i={},a=e===vt;return o(t.dataTypes[0])||!i["*"]&&o("*")}function F(e,t){var n,r,o=Q.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((o[n]?e:r||(r={}))[n]=t[n]);return r&&Q.extend(!0,e,r),e}function $(e,t,n,r){var o;if(Q.isArray(t))Q.each(t,(function(t,o){n||xt.test(e)?r(e,o):$(e+"["+("object"==typeof o?t:"")+"]",o,n,r)}));else if(n||"object"!==Q.type(t))r(e,t);else for(o in t)$(e+"["+o+"]",t[o],n,r)}function R(e){return Q.isWindow(e)?e:9===e.nodeType&&e.defaultView}var H=[],M=H.slice,B=H.concat,U=H.push,z=H.indexOf,W={},V=W.toString,G=W.hasOwnProperty,X={},Y=r.document,J="2.1.1",Q=function(e,t){return new Q.fn.init(e,t)},K=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,Z=/^-ms-/,ee=/-([\da-z])/gi,te=function(e,t){return t.toUpperCase()};Q.fn=Q.prototype={jquery:J,constructor:Q,selector:"",length:0,toArray:function(){return M.call(this)},get:function(e){return null!=e?0>e?this[e+this.length]:this[e]:M.call(this)},pushStack:function(e){var t=Q.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return Q.each(this,e,t)},map:function(e){return this.pushStack(Q.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(M.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:U,sort:H.sort,splice:H.splice},Q.extend=Q.fn.extend=function(){var e,t,n,r,o,i,a=arguments[0]||{},s=1,l=arguments.length,c=!1;for("boolean"==typeof a&&(c=a,a=arguments[s]||{},s++),"object"==typeof a||Q.isFunction(a)||(a={}),s===l&&(a=this,s--);l>s;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(c&&r&&(Q.isPlainObject(r)||(o=Q.isArray(r)))?(o?(o=!1,i=n&&Q.isArray(n)?n:[]):i=n&&Q.isPlainObject(n)?n:{},a[t]=Q.extend(c,i,r)):void 0!==r&&(a[t]=r));return a},Q.extend({expando:"jQuery"+(J+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===Q.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!Q.isArray(e)&&e-parseFloat(e)>=0},isPlainObject:function(e){return!("object"!==Q.type(e)||e.nodeType||Q.isWindow(e)||e.constructor&&!G.call(e.constructor.prototype,"isPrototypeOf"))},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?W[V.call(e)]||"object":typeof e},globalEval:function(e){var t,n=eval;(e=Q.trim(e))&&(1===e.indexOf("use strict")?((t=Y.createElement("script")).text=e,Y.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(Z,"ms-").replace(ee,te)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r=0,o=e.length,a=i(e);if(n){if(a)for(;o>r&&!1!==t.apply(e[r],n);r++);else for(r in e)if(!1===t.apply(e[r],n))break}else if(a)for(;o>r&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(K,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(i(Object(e))?Q.merge(n,"string"==typeof e?[e]:e):U.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:z.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,o=e.length;n>r;r++)e[o++]=t[r];return e.length=o,e},grep:function(e,t,n){for(var r=[],o=0,i=e.length,a=!n;i>o;o++)!t(e[o],o)!==a&&r.push(e[o]);return r},map:function(e,t,n){var r,o=0,a=e.length,s=[];if(i(e))for(;a>o;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 B.apply([],s)},guid:1,proxy:function(e,t){var n,r,o;return"string"==typeof t&&(n=e[t],t=e,e=n),Q.isFunction(e)?(r=M.call(arguments,2),o=function(){return e.apply(t||this,r.concat(M.call(arguments)))},o.guid=e.guid=e.guid||Q.guid++,o):void 0},now:Date.now,support:X}),Q.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(function(e,t){W["[object "+t+"]"]=t.toLowerCase()}));var ne=function(e){function t(e,t,n,r){var o,i,a,s,l,c,d,p,h,g;if((t?t.ownerDocument||t:H)!==_&&D(t),n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=(t=t||_).nodeType)&&9!==s)return[];if(j&&!r){if(o=ye.exec(e))if(a=o[1]){if(9===s){if(!(i=t.getElementById(a))||!i.parentNode)return n;if(i.id===a)return n.push(i),n}else if(t.ownerDocument&&(i=t.ownerDocument.getElementById(a))&&$(t,i)&&i.id===a)return n.push(i),n}else{if(o[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((a=o[3])&&w.getElementsByClassName&&t.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(a)),n}if(w.qsa&&(!q||!q.test(e))){if(p=d=R,h=t,g=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=L(e),(d=t.getAttribute("id"))?p=d.replace(xe,"\\$&"):t.setAttribute("id",p),p="[id='"+p+"'] ",l=c.length;l--;)c[l]=p+f(c[l]);h=be.test(e)&&u(t.parentNode)||t,g=c.join(",")}if(g)try{return Z.apply(n,h.querySelectorAll(g)),n}catch(e){}finally{d||t.removeAttribute("id")}}}return T(e.replace(le,"$1"),t,n,r)}function n(){var e=[];return function t(n,r){return e.push(n+" ")>E.cacheLength&&delete t[e.shift()],t[n+" "]=r}}function r(e){return e[R]=!0,e}function o(e){var t=_.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function i(e,t){for(var n=e.split("|"),r=e.length;r--;)E.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||X)-(~e.sourceIndex||X);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return r((function(t){return t=+t,r((function(n,r){for(var o,i=e([],n.length,t),a=i.length;a--;)n[o=i[a]]&&(n[o]=!(r[o]=n[o]))}))}))}function u(e){return e&&typeof e.getElementsByTagName!==G&&e}function d(){}function f(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function p(e,t,n){var r=t.dir,o=n&&"parentNode"===r,i=B++;return t.first?function(t,n,i){for(;t=t[r];)if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,a){var s,l,c=[M,i];if(a){for(;t=t[r];)if((1===t.nodeType||o)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||o){if((s=(l=t[R]||(t[R]={}))[r])&&s[0]===M&&s[1]===i)return c[2]=s[2];if(l[r]=c,c[2]=e(t,n,a))return!0}}}function h(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)if(!e[o](t,n,r))return!1;return!0}:e[0]}function g(e,n,r){for(var o=0,i=n.length;i>o;o++)t(e,n[o],r);return r}function m(e,t,n,r,o){for(var i,a=[],s=0,l=e.length,c=null!=t;l>s;s++)(i=e[s])&&(!n||n(i,r,o))&&(a.push(i),c&&t.push(s));return a}function v(e,t,n,o,i,a){return o&&!o[R]&&(o=v(o)),i&&!i[R]&&(i=v(i,a)),r((function(r,a,s,l){var c,u,d,f=[],p=[],h=a.length,v=r||g(t||"*",s.nodeType?[s]:s,[]),y=!e||!r&&t?v:m(v,f,e,s,l),b=n?i||(r?e:h||o)?[]:a:y;if(n&&n(y,b,s,l),o)for(c=m(b,p),o(c,[],s,l),u=c.length;u--;)(d=c[u])&&(b[p[u]]=!(y[p[u]]=d));if(r){if(i||e){if(i){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(y[u]=d);i(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=i?te.call(r,d):f[u])>-1&&(r[c]=!(a[c]=d))}}else b=m(b===a?b.splice(h,b.length):b),i?i(null,a,b,l):Z.apply(a,b)}))}function y(e){for(var t,n,r,o=e.length,i=E.relative[e[0].type],a=i||E.relative[" "],s=i?1:0,l=p((function(e){return e===t}),a,!0),c=p((function(e){return te.call(t,e)>-1}),a,!0),u=[function(e,n,r){return!i&&(r||n!==N)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];o>s;s++)if(n=E.relative[e[s].type])u=[p(h(u),n)];else{if((n=E.filter[e[s].type].apply(null,e[s].matches))[R]){for(r=++s;o>r&&!E.relative[e[r].type];r++);return v(s>1&&h(u),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(le,"$1"),n,r>s&&y(e.slice(s,r)),o>r&&y(e=e.slice(r)),o>r&&f(e))}u.push(n)}return h(u)}function b(e,n){var o=n.length>0,i=e.length>0,a=function(r,a,s,l,c){var u,d,f,p=0,h="0",g=r&&[],v=[],y=N,b=r||i&&E.find.TAG("*",c),x=M+=null==y?1:Math.random()||.1,w=b.length;for(c&&(N=a!==_&&a);h!==w&&null!=(u=b[h]);h++){if(i&&u){for(d=0;f=e[d++];)if(f(u,a,s)){l.push(u);break}c&&(M=x)}o&&((u=!f&&u)&&p--,r&&g.push(u))}if(p+=h,o&&h!==p){for(d=0;f=n[d++];)f(g,v,a,s);if(r){if(p>0)for(;h--;)g[h]||v[h]||(v[h]=Q.call(l));v=m(v)}Z.apply(l,v),c&&!r&&v.length>0&&p+n.length>1&&t.uniqueSort(l)}return c&&(M=x,N=y),g};return o?r(a):a}var x,w,E,C,A,L,S,T,N,k,O,D,_,P,j,q,I,F,$,R="sizzle"+-new Date,H=e.document,M=0,B=0,U=n(),z=n(),W=n(),V=function(e,t){return e===t&&(O=!0),0},G="undefined",X=1<<31,Y={}.hasOwnProperty,J=[],Q=J.pop,K=J.push,Z=J.push,ee=J.slice,te=J.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},ne="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",re="[\\x20\\t\\r\\n\\f]",oe="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ie=oe.replace("w","w#"),ae="\\["+re+"*("+oe+")(?:"+re+"*([*^$|!~]?=)"+re+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ie+"))|)"+re+"*\\]",se=":("+oe+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ae+")*)|.*)\\)|)",le=new RegExp("^"+re+"+|((?:^|[^\\\\])(?:\\\\.)*)"+re+"+$","g"),ce=new RegExp("^"+re+"*,"+re+"*"),ue=new RegExp("^"+re+"*([>+~]|"+re+")"+re+"*"),de=new RegExp("="+re+"*([^\\]'\"]*?)"+re+"*\\]","g"),fe=new RegExp(se),pe=new RegExp("^"+ie+"$"),he={ID:new RegExp("^#("+oe+")"),CLASS:new RegExp("^\\.("+oe+")"),TAG:new RegExp("^("+oe.replace("w","w*")+")"),ATTR:new RegExp("^"+ae),PSEUDO:new RegExp("^"+se),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+re+"*(even|odd|(([+-]|)(\\d*)n|)"+re+"*(?:([+-]|)"+re+"*(\\d+)|))"+re+"*\\)|)","i"),bool:new RegExp("^(?:"+ne+")$","i"),needsContext:new RegExp("^"+re+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+re+"*((?:-\\d)?\\d*)"+re+"*\\)|)(?=[^-]|$)","i")},ge=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ve=/^[^{]+\{\s*\[native \w/,ye=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,be=/[+~]/,xe=/'|\\/g,we=new RegExp("\\\\([\\da-f]{1,6}"+re+"?|("+re+")|.)","ig"),Ee=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)};try{Z.apply(J=ee.call(H.childNodes),H.childNodes),J[H.childNodes.length].nodeType}catch(e){Z={apply:J.length?function(e,t){K.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}for(x in w=t.support={},A=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},D=t.setDocument=function(e){var t,n=e?e.ownerDocument||e:H,r=n.defaultView;return n!==_&&9===n.nodeType&&n.documentElement?(_=n,P=n.documentElement,j=!A(n),r&&r!==r.top&&(r.addEventListener?r.addEventListener("unload",(function(){D()}),!1):r.attachEvent&&r.attachEvent("onunload",(function(){D()}))),w.attributes=o((function(e){return e.className="i",!e.getAttribute("className")})),w.getElementsByTagName=o((function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length})),w.getElementsByClassName=ve.test(n.getElementsByClassName)&&o((function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length})),w.getById=o((function(e){return P.appendChild(e).id=R,!n.getElementsByName||!n.getElementsByName(R).length})),w.getById?(E.find.ID=function(e,t){if(typeof t.getElementById!==G&&j){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},E.filter.ID=function(e){var t=e.replace(we,Ee);return function(e){return e.getAttribute("id")===t}}):(delete E.find.ID,E.filter.ID=function(e){var t=e.replace(we,Ee);return function(e){var n=typeof e.getAttributeNode!==G&&e.getAttributeNode("id");return n&&n.value===t}}),E.find.TAG=w.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==G?t.getElementsByTagName(e):void 0}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if("*"===e){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},E.find.CLASS=w.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==G&&j?t.getElementsByClassName(e):void 0},I=[],q=[],(w.qsa=ve.test(n.querySelectorAll))&&(o((function(e){e.innerHTML="<select msallowclip=''><option selected=''></option></select>",e.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+re+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||q.push("\\["+re+"*(?:value|"+ne+")"),e.querySelectorAll(":checked").length||q.push(":checked")})),o((function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&q.push("name"+re+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),q.push(",.*:")}))),(w.matchesSelector=ve.test(F=P.matches||P.webkitMatchesSelector||P.mozMatchesSelector||P.oMatchesSelector||P.msMatchesSelector))&&o((function(e){w.disconnectedMatch=F.call(e,"div"),F.call(e,"[s!='']:x"),I.push("!=",se)})),q=q.length&&new RegExp(q.join("|")),I=I.length&&new RegExp(I.join("|")),t=ve.test(P.compareDocumentPosition),$=t||ve.test(P.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},V=t?function(e,t){if(e===t)return O=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!w.sortDetached&&t.compareDocumentPosition(e)===r?e===n||e.ownerDocument===H&&$(H,e)?-1:t===n||t.ownerDocument===H&&$(H,t)?1:k?te.call(k,e)-te.call(k,t):0:4&r?-1:1)}:function(e,t){if(e===t)return O=!0,0;var r,o=0,i=e.parentNode,s=t.parentNode,l=[e],c=[t];if(!i||!s)return e===n?-1:t===n?1:i?-1:s?1:k?te.call(k,e)-te.call(k,t):0;if(i===s)return a(e,t);for(r=e;r=r.parentNode;)l.unshift(r);for(r=t;r=r.parentNode;)c.unshift(r);for(;l[o]===c[o];)o++;return o?a(l[o],c[o]):l[o]===H?-1:c[o]===H?1:0},n):_},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==_&&D(e),n=n.replace(de,"='$1']"),!(!w.matchesSelector||!j||I&&I.test(n)||q&&q.test(n)))try{var r=F.call(e,n);if(r||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,_,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==_&&D(e),$(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==_&&D(e);var n=E.attrHandle[t.toLowerCase()],r=n&&Y.call(E.attrHandle,t.toLowerCase())?n(e,t,!j):void 0;return void 0!==r?r:w.attributes||!j?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,o=0;if(O=!w.detectDuplicates,k=!w.sortStable&&e.slice(0),e.sort(V),O){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)e.splice(n[r],1)}return k=null,e},C=t.getText=function(e){var t,n="",r=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+=C(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=C(t);return n},E=t.selectors={cacheLength:50,createPseudo:r,match:he,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(we,Ee),e[3]=(e[3]||e[4]||e[5]||"").replace(we,Ee),"~="===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]||t.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]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=L(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(we,Ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=U[e+" "];return t||(t=new RegExp("(^|"+re+")"+e+"("+re+"|$)"))&&U(e,(function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==G&&e.getAttribute("class")||"")}))},ATTR:function(e,n,r){return function(o){var i=t.attr(o,e);return null==i?"!="===n:!n||(i+="","="===n?i===r:"!="===n?i!==r:"^="===n?r&&0===i.indexOf(r):"*="===n?r&&i.indexOf(r)>-1:"$="===n?r&&i.slice(-r.length)===r:"~="===n?(" "+i+" ").indexOf(r)>-1:"|="===n&&(i===r||i.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,o){var i="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===o?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,h,g=i!==a?"nextSibling":"previousSibling",m=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(m){if(i){for(;g;){for(d=t;d=d[g];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&y){for(p=(c=(u=m[R]||(m[R]={}))[e]||[])[0]===M&&c[1],f=c[0]===M&&c[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(f=p=0)||h.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[M,p,f];break}}else if(y&&(c=(t[R]||(t[R]={}))[e])&&c[0]===M)f=c[1];else for(;(d=++p&&d&&d[g]||(f=p=0)||h.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[R]||(d[R]={}))[e]=[M,f]),d!==t)););return(f-=o)===r||f%r==0&&f/r>=0}}},PSEUDO:function(e,n){var o,i=E.pseudos[e]||E.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return i[R]?i(n):i.length>1?(o=[e,e,"",n],E.setFilters.hasOwnProperty(e.toLowerCase())?r((function(e,t){for(var r,o=i(e,n),a=o.length;a--;)e[r=te.call(e,o[a])]=!(t[r]=o[a])})):function(e){return i(e,0,o)}):i}},pseudos:{not:r((function(e){var t=[],n=[],o=S(e.replace(le,"$1"));return o[R]?r((function(e,t,n,r){for(var i,a=o(e,null,r,[]),s=e.length;s--;)(i=a[s])&&(e[s]=!(t[s]=i))})):function(e,r,i){return t[0]=e,o(t,null,i,n),!n.pop()}})),has:r((function(e){return function(n){return t(e,n).length>0}})),contains:r((function(e){return function(t){return(t.textContent||t.innerText||C(t)).indexOf(e)>-1}})),lang:r((function(e){return pe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(we,Ee).toLowerCase(),function(t){var n;do{if(n=j?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===_.activeElement&&(!_.hasFocus||_.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!E.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return ge.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:c((function(){return[0]})),last:c((function(e,t){return[t-1]})),eq:c((function(e,t,n){return[0>n?n+t:n]})),even:c((function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e})),odd:c((function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e})),lt:c((function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e})),gt:c((function(e,t,n){for(var r=0>n?n+t:n;++r<t;)e.push(r);return e}))}},E.pseudos.nth=E.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})E.pseudos[x]=s(x);for(x in{submit:!0,reset:!0})E.pseudos[x]=l(x);return d.prototype=E.filters=E.pseudos,E.setFilters=new d,L=t.tokenize=function(e,n){var r,o,i,a,s,l,c,u=z[e+" "];if(u)return n?0:u.slice(0);for(s=e,l=[],c=E.preFilter;s;){for(a in(!r||(o=ce.exec(s)))&&(o&&(s=s.slice(o[0].length)||s),l.push(i=[])),r=!1,(o=ue.exec(s))&&(r=o.shift(),i.push({value:r,type:o[0].replace(le," ")}),s=s.slice(r.length)),E.filter)!(o=he[a].exec(s))||c[a]&&!(o=c[a](o))||(r=o.shift(),i.push({value:r,type:a,matches:o}),s=s.slice(r.length));if(!r)break}return n?s.length:s?t.error(e):z(e,l).slice(0)},S=t.compile=function(e,t){var n,r=[],o=[],i=W[e+" "];if(!i){for(t||(t=L(e)),n=t.length;n--;)(i=y(t[n]))[R]?r.push(i):o.push(i);(i=W(e,b(o,r))).selector=e}return i},T=t.select=function(e,t,n,r){var o,i,a,s,l,c="function"==typeof e&&e,d=!r&&L(e=c.selector||e);if(n=n||[],1===d.length){if((i=d[0]=d[0].slice(0)).length>2&&"ID"===(a=i[0]).type&&w.getById&&9===t.nodeType&&j&&E.relative[i[1].type]){if(!(t=(E.find.ID(a.matches[0].replace(we,Ee),t)||[])[0]))return n;c&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(o=he.needsContext.test(e)?0:i.length;o--&&(a=i[o],!E.relative[s=a.type]);)if((l=E.find[s])&&(r=l(a.matches[0].replace(we,Ee),be.test(i[0].type)&&u(t.parentNode)||t))){if(i.splice(o,1),!(e=r.length&&f(i)))return Z.apply(n,r),n;break}}return(c||S(e,d))(r,t,!j,n,be.test(e)&&u(t.parentNode)||t),n},w.sortStable=R.split("").sort(V).join("")===R,w.detectDuplicates=!!O,D(),w.sortDetached=o((function(e){return 1&e.compareDocumentPosition(_.createElement("div"))})),o((function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")}))||i("type|href|height|width",(function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),w.attributes&&o((function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||i("value",(function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue})),o((function(e){return null==e.getAttribute("disabled")}))||i(ne,(function(e,t,n){var r;return n?void 0:!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null})),t}(r);Q.find=ne,Q.expr=ne.selectors,Q.expr[":"]=Q.expr.pseudos,Q.unique=ne.uniqueSort,Q.text=ne.getText,Q.isXMLDoc=ne.isXML,Q.contains=ne.contains;var re=Q.expr.match.needsContext,oe=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ie=/^.[^:#\[\.,]*$/;Q.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?Q.find.matchesSelector(r,e)?[r]:[]:Q.find.matches(e,Q.grep(t,(function(e){return 1===e.nodeType})))},Q.fn.extend({find:function(e){var t,n=this.length,r=[],o=this;if("string"!=typeof e)return this.pushStack(Q(e).filter((function(){for(t=0;n>t;t++)if(Q.contains(o[t],this))return!0})));for(t=0;n>t;t++)Q.find(e,o[t],r);return(r=this.pushStack(n>1?Q.unique(r):r)).selector=this.selector?this.selector+" "+e:e,r},filter:function(e){return this.pushStack(a(this,e||[],!1))},not:function(e){return this.pushStack(a(this,e||[],!0))},is:function(e){return!!a(this,"string"==typeof e&&re.test(e)?Q(e):e||[],!1).length}});var ae,se=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,le=Q.fn.init=function(e,t){var n,r;if(!e)return this;if("string"==typeof e){if(!(n="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:se.exec(e))||!n[1]&&t)return!t||t.jquery?(t||ae).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof Q?t[0]:t,Q.merge(this,Q.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:Y,!0)),oe.test(n[1])&&Q.isPlainObject(t))for(n in t)Q.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}return(r=Y.getElementById(n[2]))&&r.parentNode&&(this.length=1,this[0]=r),this.context=Y,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):Q.isFunction(e)?void 0!==ae.ready?ae.ready(e):e(Q):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),Q.makeArray(e,this))};le.prototype=Q.fn,ae=Q(Y);var ce=/^(?:parents|prev(?:Until|All))/,ue={children:!0,contents:!0,next:!0,prev:!0};Q.extend({dir:function(e,t,n){for(var r=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&Q(e).is(n))break;r.push(e)}return r},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}}),Q.fn.extend({has:function(e){var t=Q(e,this),n=t.length;return this.filter((function(){for(var e=0;n>e;e++)if(Q.contains(this,t[e]))return!0}))},closest:function(e,t){for(var n,r=0,o=this.length,i=[],a=re.test(e)||"string"!=typeof e?Q(e,t||this.context):0;o>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&Q.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(i.length>1?Q.unique(i):i)},index:function(e){return e?"string"==typeof e?z.call(Q(e),this[0]):z.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(Q.unique(Q.merge(this.get(),Q(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),Q.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return Q.dir(e,"parentNode")},parentsUntil:function(e,t,n){return Q.dir(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return Q.dir(e,"nextSibling")},prevAll:function(e){return Q.dir(e,"previousSibling")},nextUntil:function(e,t,n){return Q.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return Q.dir(e,"previousSibling",n)},siblings:function(e){return Q.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return Q.sibling(e.firstChild)},contents:function(e){return e.contentDocument||Q.merge([],e.childNodes)}},(function(e,t){Q.fn[e]=function(n,r){var o=Q.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(o=Q.filter(r,o)),this.length>1&&(ue[e]||Q.unique(o),ce.test(e)&&o.reverse()),this.pushStack(o)}}));var de,fe=/\S+/g,pe={};Q.Callbacks=function(e){e="string"==typeof e?pe[e]||function(e){var t=pe[e]={};return Q.each(e.match(fe)||[],(function(e,n){t[n]=!0})),t}(e):Q.extend({},e);var t,n,r,o,i,a,s=[],l=!e.once&&[],c=function(d){for(t=e.memory&&d,n=!0,a=o||0,o=0,i=s.length,r=!0;s&&i>a;a++)if(!1===s[a].apply(d[0],d[1])&&e.stopOnFalse){t=!1;break}r=!1,s&&(l?l.length&&c(l.shift()):t?s=[]:u.disable())},u={add:function(){if(s){var n=s.length;!function t(n){Q.each(n,(function(n,r){var o=Q.type(r);"function"===o?e.unique&&u.has(r)||s.push(r):r&&r.length&&"string"!==o&&t(r)}))}(arguments),r?i=s.length:t&&(o=n,c(t))}return this},remove:function(){return s&&Q.each(arguments,(function(e,t){for(var n;(n=Q.inArray(t,s,n))>-1;)s.splice(n,1),r&&(i>=n&&i--,a>=n&&a--)})),this},has:function(e){return e?Q.inArray(e,s)>-1:!(!s||!s.length)},empty:function(){return s=[],i=0,this},disable:function(){return s=l=t=void 0,this},disabled:function(){return!s},lock:function(){return l=void 0,t||u.disable(),this},locked:function(){return!l},fireWith:function(e,t){return!s||n&&!l||(t=[e,(t=t||[]).slice?t.slice():t],r?l.push(t):c(t)),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!n}};return u},Q.extend({Deferred:function(e){var t=[["resolve","done",Q.Callbacks("once memory"),"resolved"],["reject","fail",Q.Callbacks("once memory"),"rejected"],["notify","progress",Q.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var e=arguments;return Q.Deferred((function(n){Q.each(t,(function(t,i){var a=Q.isFunction(e[t])&&e[t];o[i[1]]((function(){var e=a&&a.apply(this,arguments);e&&Q.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[i[0]+"With"](this===r?n.promise():this,a?[e]:arguments)}))})),e=null})).promise()},promise:function(e){return null!=e?Q.extend(e,r):r}},o={};return r.pipe=r.then,Q.each(t,(function(e,i){var a=i[2],s=i[3];r[i[1]]=a.add,s&&a.add((function(){n=s}),t[1^e][2].disable,t[2][2].lock),o[i[0]]=function(){return o[i[0]+"With"](this===o?r:this,arguments),this},o[i[0]+"With"]=a.fireWith})),r.promise(o),e&&e.call(o,o),o},when:function(e){var t,n,r,o=0,i=M.call(arguments),a=i.length,s=1!==a||e&&Q.isFunction(e.promise)?a:0,l=1===s?e:Q.Deferred(),c=function(e,n,r){return function(o){n[e]=this,r[e]=arguments.length>1?M.call(arguments):o,r===t?l.notifyWith(n,r):--s||l.resolveWith(n,r)}};if(a>1)for(t=new Array(a),n=new Array(a),r=new Array(a);a>o;o++)i[o]&&Q.isFunction(i[o].promise)?i[o].promise().done(c(o,r,i)).fail(l.reject).progress(c(o,n,t)):--s;return s||l.resolveWith(r,i),l.promise()}}),Q.fn.ready=function(e){return Q.ready.promise().done(e),this},Q.extend({isReady:!1,readyWait:1,holdReady:function(e){e?Q.readyWait++:Q.ready(!0)},ready:function(e){(!0===e?--Q.readyWait:Q.isReady)||(Q.isReady=!0,!0!==e&&--Q.readyWait>0||(de.resolveWith(Y,[Q]),Q.fn.triggerHandler&&(Q(Y).triggerHandler("ready"),Q(Y).off("ready"))))}}),Q.ready.promise=function(e){return de||(de=Q.Deferred(),"complete"===Y.readyState?setTimeout(Q.ready):(Y.addEventListener("DOMContentLoaded",l,!1),r.addEventListener("load",l,!1))),de.promise(e)},Q.ready.promise();var he=Q.access=function(e,t,n,r,o,i,a){var s=0,l=e.length,c=null==n;if("object"===Q.type(n))for(s in o=!0,n)Q.access(e,t,s,n[s],!0,i,a);else if(void 0!==r&&(o=!0,Q.isFunction(r)||(a=!0),c&&(a?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(Q(e),n)})),t))for(;l>s;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return o?e:c?t.call(e):l?t(e[0],n):i};Q.acceptData=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType},c.uid=1,c.accepts=Q.acceptData,c.prototype={key:function(e){if(!c.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=c.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,Q.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,o=this.key(e),i=this.cache[o];if("string"==typeof t)i[t]=n;else if(Q.isEmptyObject(i))Q.extend(this.cache[o],t);else for(r in t)i[r]=t[r];return i},get:function(e,t){var n=this.cache[this.key(e)];return void 0===t?n:n[t]},access:function(e,t,n){var r;return void 0===t||t&&"string"==typeof t&&void 0===n?void 0!==(r=this.get(e,t))?r:this.get(e,Q.camelCase(t)):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r,o,i=this.key(e),a=this.cache[i];if(void 0===t)this.cache[i]={};else{Q.isArray(t)?r=t.concat(t.map(Q.camelCase)):(o=Q.camelCase(t),r=t in a?[t,o]:(r=o)in a?[r]:r.match(fe)||[]),n=r.length;for(;n--;)delete a[r[n]]}},hasData:function(e){return!Q.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}};var ge=new c,me=new c,ve=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ye=/([A-Z])/g;Q.extend({hasData:function(e){return me.hasData(e)||ge.hasData(e)},data:function(e,t,n){return me.access(e,t,n)},removeData:function(e,t){me.remove(e,t)},_data:function(e,t,n){return ge.access(e,t,n)},_removeData:function(e,t){ge.remove(e,t)}}),Q.fn.extend({data:function(e,t){var n,r,o,i=this[0],a=i&&i.attributes;if(void 0===e){if(this.length&&(o=me.get(i),1===i.nodeType&&!ge.get(i,"hasDataAttrs"))){for(n=a.length;n--;)a[n]&&0===(r=a[n].name).indexOf("data-")&&(r=Q.camelCase(r.slice(5)),u(i,r,o[r]));ge.set(i,"hasDataAttrs",!0)}return o}return"object"==typeof e?this.each((function(){me.set(this,e)})):he(this,(function(t){var n,r=Q.camelCase(e);if(i&&void 0===t){if(void 0!==(n=me.get(i,e)))return n;if(void 0!==(n=me.get(i,r)))return n;if(void 0!==(n=u(i,r,void 0)))return n}else this.each((function(){var n=me.get(this,r);me.set(this,r,t),-1!==e.indexOf("-")&&void 0!==n&&me.set(this,e,t)}))}),null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each((function(){me.remove(this,e)}))}}),Q.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=ge.get(e,t),n&&(!r||Q.isArray(n)?r=ge.access(e,t,Q.makeArray(n)):r.push(n)),r||[]):void 0},dequeue:function(e,t){t=t||"fx";var n=Q.queue(e,t),r=n.length,o=n.shift(),i=Q._queueHooks(e,t);"inprogress"===o&&(o=n.shift(),r--),o&&("fx"===t&&n.unshift("inprogress"),delete i.stop,o.call(e,(function(){Q.dequeue(e,t)}),i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return ge.get(e,n)||ge.access(e,n,{empty:Q.Callbacks("once memory").add((function(){ge.remove(e,[t+"queue",n])}))})}}),Q.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?Q.queue(this[0],e):void 0===t?this:this.each((function(){var n=Q.queue(this,e,t);Q._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&Q.dequeue(this,e)}))},dequeue:function(e){return this.each((function(){Q.dequeue(this,e)}))},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,o=Q.Deferred(),i=this,a=this.length,s=function(){--r||o.resolveWith(i,[i])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";a--;)(n=ge.get(i[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),o.promise(t)}});var be=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,xe=["Top","Right","Bottom","Left"],we=function(e,t){return e=t||e,"none"===Q.css(e,"display")||!Q.contains(e.ownerDocument,e)},Ee=/^(?:checkbox|radio)$/i;!function(){var e=Y.createDocumentFragment().appendChild(Y.createElement("div")),t=Y.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),X.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",X.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var Ce="undefined";X.focusinBubbles="onfocusin"in r;var Ae=/^key/,Le=/^(?:mouse|pointer|contextmenu)|click/,Se=/^(?:focusinfocus|focusoutblur)$/,Te=/^([^.]*)(?:\.(.+)|)$/;Q.event={global:{},add:function(e,t,n,r,o){var i,a,s,l,c,u,d,f,p,h,g,m=ge.get(e);if(m)for(n.handler&&(n=(i=n).handler,o=i.selector),n.guid||(n.guid=Q.guid++),(l=m.events)||(l=m.events={}),(a=m.handle)||(a=m.handle=function(t){return typeof Q!==Ce&&Q.event.triggered!==t.type?Q.event.dispatch.apply(e,arguments):void 0}),c=(t=(t||"").match(fe)||[""]).length;c--;)p=g=(s=Te.exec(t[c])||[])[1],h=(s[2]||"").split(".").sort(),p&&(d=Q.event.special[p]||{},p=(o?d.delegateType:d.bindType)||p,d=Q.event.special[p]||{},u=Q.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&Q.expr.match.needsContext.test(o),namespace:h.join(".")},i),(f=l[p])||((f=l[p]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(p,a,{capture:!1,passive:p.indexOf("touch")>-1&&p.indexOf("scroll")>-1})),d.add&&(d.add.call(e,u),u.handler.guid||(u.handler.guid=n.guid)),o?f.splice(f.delegateCount++,0,u):f.push(u),Q.event.global[p]=!0)},remove:function(e,t,n,r,o){var i,a,s,l,c,u,d,f,p,h,g,m=ge.hasData(e)&&ge.get(e);if(m&&(l=m.events)){for(c=(t=(t||"").match(fe)||[""]).length;c--;)if(p=g=(s=Te.exec(t[c])||[])[1],h=(s[2]||"").split(".").sort(),p){for(d=Q.event.special[p]||{},f=l[p=(r?d.delegateType:d.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=i=f.length;i--;)u=f[i],!o&&g!==u.origType||n&&n.guid!==u.guid||s&&!s.test(u.namespace)||r&&r!==u.selector&&("**"!==r||!u.selector)||(f.splice(i,1),u.selector&&f.delegateCount--,d.remove&&d.remove.call(e,u));a&&!f.length&&(d.teardown&&!1!==d.teardown.call(e,h,m.handle)||Q.removeEvent(e,p,m.handle),delete l[p])}else for(p in l)Q.event.remove(e,p+t[c],n,r,!0);Q.isEmptyObject(l)&&(delete m.handle,ge.remove(e,"events"))}},trigger:function(e,t,n,o){var i,a,s,l,c,u,d,f=[n||Y],p=G.call(e,"type")?e.type:e,h=G.call(e,"namespace")?e.namespace.split("."):[];if(a=s=n=n||Y,3!==n.nodeType&&8!==n.nodeType&&!Se.test(p+Q.event.triggered)&&(p.indexOf(".")>=0&&(h=p.split("."),p=h.shift(),h.sort()),c=p.indexOf(":")<0&&"on"+p,(e=e[Q.expando]?e:new Q.Event(p,"object"==typeof e&&e)).isTrigger=o?2:3,e.namespace=h.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:Q.makeArray(t,[e]),d=Q.event.special[p]||{},o||!d.trigger||!1!==d.trigger.apply(n,t))){if(!o&&!d.noBubble&&!Q.isWindow(n)){for(l=d.delegateType||p,Se.test(l+p)||(a=a.parentNode);a;a=a.parentNode)f.push(a),s=a;s===(n.ownerDocument||Y)&&f.push(s.defaultView||s.parentWindow||r)}for(i=0;(a=f[i++])&&!e.isPropagationStopped();)e.type=i>1?l:d.bindType||p,(u=(ge.get(a,"events")||{})[e.type]&&ge.get(a,"handle"))&&u.apply(a,t),(u=c&&a[c])&&u.apply&&Q.acceptData(a)&&(e.result=u.apply(a,t),!1===e.result&&e.preventDefault());return e.type=p,o||e.isDefaultPrevented()||d._default&&!1!==d._default.apply(f.pop(),t)||!Q.acceptData(n)||c&&Q.isFunction(n[p])&&!Q.isWindow(n)&&((s=n[c])&&(n[c]=null),Q.event.triggered=p,n[p](),Q.event.triggered=void 0,s&&(n[c]=s)),e.result}},dispatch:function(e){e=Q.event.fix(e);var t,n,r,o,i,a=[],s=M.call(arguments),l=(ge.get(this,"events")||{})[e.type]||[],c=Q.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,e)){for(a=Q.event.handlers.call(this,e,l),t=0;(o=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,n=0;(i=o.handlers[n++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,void 0!==(r=((Q.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,s))&&!1===(e.result=r)&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,o,i,a=[],s=t.delegateCount,l=e.target;if(s&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!==this;l=l.parentNode||this)if(!0!==l.disabled||"click"!==e.type){for(r=[],n=0;s>n;n++)void 0===r[o=(i=t[n]).selector+" "]&&(r[o]=i.needsContext?Q(o,this).index(l)>=0:Q.find(o,this,null,[l]).length),r[o]&&r.push(i);r.length&&a.push({elem:l,handlers:r})}return s<t.length&&a.push({elem:this,handlers:t.slice(s)}),a},props:"altKey bubbles cancelable ctrlKey currentTarget 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,r,o,i=t.button;return null==e.pageX&&null!=t.clientX&&(r=(n=e.target.ownerDocument||Y).documentElement,o=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||o&&o.scrollLeft||0)-(r&&r.clientLeft||o&&o.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||o&&o.scrollTop||0)-(r&&r.clientTop||o&&o.clientTop||0)),e.which||void 0===i||(e.which=1&i?1:2&i?3:4&i?2:0),e}},fix:function(e){if(e[Q.expando])return e;var t,n,r,o=e.type,i=e,a=this.fixHooks[o];for(a||(this.fixHooks[o]=a=Le.test(o)?this.mouseHooks:Ae.test(o)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new Q.Event(i),t=r.length;t--;)e[n=r[t]]=i[n];return e.target||(e.target=Y),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,i):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==p()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===p()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&Q.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(e){return Q.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var o=Q.extend(new Q.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?Q.event.trigger(o,null,t):Q.event.dispatch.call(t,o),o.isDefaultPrevented()&&n.preventDefault()}},Q.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},Q.Event=function(e,t){return this instanceof Q.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?d:f):this.type=e,t&&Q.extend(this,t),this.timeStamp=e&&e.timeStamp||Q.now(),void(this[Q.expando]=!0)):new Q.Event(e,t)},Q.Event.prototype={isDefaultPrevented:f,isPropagationStopped:f,isImmediatePropagationStopped:f,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=d,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=d,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=d,e&&e.stopImmediatePropagation&&e.stopImmediatePropagation(),this.stopPropagation()}},Q.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},(function(e,t){Q.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=e.relatedTarget,o=e.handleObj;return(!r||r!==this&&!Q.contains(this,r))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}})),X.focusinBubbles||Q.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){Q.event.simulate(t,e.target,Q.event.fix(e),!0)};Q.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=ge.access(r,t);o||r.addEventListener(e,n,!0),ge.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=ge.access(r,t)-1;o?ge.access(r,t,o):(r.removeEventListener(e,n,!0),ge.remove(r,t))}}})),Q.fn.extend({on:function(e,t,n,r,o){var i,a;if("object"==typeof e){for(a in"string"!=typeof t&&(n=n||t,t=void 0),e)this.on(a,t,n,e[a],o);return this}if(null==n&&null==r?(r=t,n=t=void 0):null==r&&("string"==typeof t?(r=n,n=void 0):(r=n,n=t,t=void 0)),!1===r)r=f;else if(!r)return this;return 1===o&&(i=r,r=function(e){return Q().off(e),i.apply(this,arguments)},r.guid=i.guid||(i.guid=Q.guid++)),this.each((function(){Q.event.add(this,e,r,n,t)}))},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,o;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,Q(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(o in e)this.off(o,t,e[o]);return this}return(!1===t||"function"==typeof t)&&(n=t,t=void 0),!1===n&&(n=f),this.each((function(){Q.event.remove(this,e,n,t)}))},trigger:function(e,t){return this.each((function(){Q.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];return n?Q.event.trigger(e,t,n,!0):void 0}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ke=/<([\w:]+)/,Oe=/<|&#?\w+;/,De=/<(?:script|style|link)/i,_e=/checked\s*(?:[^=]|=\s*.checked.)/i,Pe=/^$|\/(?:java|ecma)script/i,je=/^true\/(.*)/,qe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Ie={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,"",""]};Ie.optgroup=Ie.option,Ie.tbody=Ie.tfoot=Ie.colgroup=Ie.caption=Ie.thead,Ie.th=Ie.td,Q.extend({clone:function(e,t,n){var r,o,i,a,s=e.cloneNode(!0),l=Q.contains(e.ownerDocument,e);if(!(X.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||Q.isXMLDoc(e)))for(a=b(s),r=0,o=(i=b(e)).length;o>r;r++)x(i[r],a[r]);if(t)if(n)for(i=i||b(e),a=a||b(s),r=0,o=i.length;o>r;r++)y(i[r],a[r]);else y(e,s);return(a=b(s,"script")).length>0&&v(a,!l&&b(e,"script")),s},buildFragment:function(e,t,n,r){for(var o,i,a,s,l,c,u=t.createDocumentFragment(),d=[],f=0,p=e.length;p>f;f++)if((o=e[f])||0===o)if("object"===Q.type(o))Q.merge(d,o.nodeType?[o]:o);else if(Oe.test(o)){for(i=i||u.appendChild(t.createElement("div")),a=(ke.exec(o)||["",""])[1].toLowerCase(),s=Ie[a]||Ie._default,i.innerHTML=s[1]+o.replace(Ne,"<$1></$2>")+s[2],c=s[0];c--;)i=i.lastChild;Q.merge(d,i.childNodes),(i=u.firstChild).textContent=""}else d.push(t.createTextNode(o));for(u.textContent="",f=0;o=d[f++];)if((!r||-1===Q.inArray(o,r))&&(l=Q.contains(o.ownerDocument,o),i=b(u.appendChild(o),"script"),l&&v(i),n))for(c=0;o=i[c++];)Pe.test(o.type||"")&&n.push(o);return u},cleanData:function(e){for(var t,n,r,o,i=Q.event.special,a=0;void 0!==(n=e[a]);a++){if(Q.acceptData(n)&&(o=n[ge.expando])&&(t=ge.cache[o])){if(t.events)for(r in t.events)i[r]?Q.event.remove(n,r):Q.removeEvent(n,r,t.handle);ge.cache[o]&&delete ge.cache[o]}delete me.cache[n[me.expando]]}}}),Q.fn.extend({text:function(e){return he(this,(function(e){return void 0===e?Q.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 this.domManip(arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||h(this,e).appendChild(e)}))},prepend:function(){return this.domManip(arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=h(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return this.domManip(arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return this.domManip(arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},remove:function(e,t){for(var n,r=e?Q.filter(e,this):this,o=0;null!=(n=r[o]);o++)t||1!==n.nodeType||Q.cleanData(b(n)),n.parentNode&&(t&&Q.contains(n.ownerDocument,n)&&v(b(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(Q.cleanData(b(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return Q.clone(this,e,t)}))},html:function(e){return he(this,(function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!De.test(e)&&!Ie[(ke.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(Ne,"<$1></$2>");try{for(;r>n;n++)1===(t=this[n]||{}).nodeType&&(Q.cleanData(b(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)}),null,e,arguments.length)},replaceWith:function(){var e=arguments[0];return this.domManip(arguments,(function(t){e=this.parentNode,Q.cleanData(b(this)),e&&e.replaceChild(t,this)})),e&&(e.length||e.nodeType)?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t){e=B.apply([],e);var n,r,o,i,a,s,l=0,c=this.length,u=this,d=c-1,f=e[0],p=Q.isFunction(f);if(p||c>1&&"string"==typeof f&&!X.checkClone&&_e.test(f))return this.each((function(n){var r=u.eq(n);p&&(e[0]=f.call(this,n,r.html())),r.domManip(e,t)}));if(c&&(r=(n=Q.buildFragment(e,this[0].ownerDocument,!1,this)).firstChild,1===n.childNodes.length&&(n=r),r)){for(i=(o=Q.map(b(n,"script"),g)).length;c>l;l++)a=n,l!==d&&(a=Q.clone(a,!0,!0),i&&Q.merge(o,b(a,"script"))),t.call(this[l],a,l);if(i)for(s=o[o.length-1].ownerDocument,Q.map(o,m),l=0;i>l;l++)a=o[l],Pe.test(a.type||"")&&!ge.access(a,"globalEval")&&Q.contains(s,a)&&(a.src?Q._evalUrl&&Q._evalUrl(a.src):Q.globalEval(a.textContent.replace(qe,"")))}return this}}),Q.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},(function(e,t){Q.fn[e]=function(e){for(var n,r=[],o=Q(e),i=o.length-1,a=0;i>=a;a++)n=a===i?this:this.clone(!0),Q(o[a])[t](n),U.apply(r,n.get());return this.pushStack(r)}}));var Fe,$e={},Re=/^margin/,He=new RegExp("^("+be+")(?!px)[a-z%]+$","i"),Me=function(e){return e.ownerDocument.defaultView.getComputedStyle(e,null)};!function(){function e(){a.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",a.innerHTML="",o.appendChild(i);var e=r.getComputedStyle(a,null);t="1%"!==e.top,n="4px"===e.width,o.removeChild(i)}var t,n,o=Y.documentElement,i=Y.createElement("div"),a=Y.createElement("div");a.style&&(a.style.backgroundClip="content-box",a.cloneNode(!0).style.backgroundClip="",X.clearCloneStyle="content-box"===a.style.backgroundClip,i.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",i.appendChild(a),r.getComputedStyle&&Q.extend(X,{pixelPosition:function(){return e(),t},boxSizingReliable:function(){return null==n&&e(),n},reliableMarginRight:function(){var e,t=a.appendChild(Y.createElement("div"));return t.style.cssText=a.style.cssText="-webkit-box-sizing:content-box;-moz-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",o.appendChild(i),e=!parseFloat(r.getComputedStyle(t,null).marginRight),o.removeChild(i),e}}))}(),Q.swap=function(e,t,n,r){var o,i,a={};for(i in t)a[i]=e.style[i],e.style[i]=t[i];for(i in o=n.apply(e,r||[]),t)e.style[i]=a[i];return o};var Be=/^(none|table(?!-c[ea]).+)/,Ue=new RegExp("^("+be+")(.*)$","i"),ze=new RegExp("^([+-])=("+be+")","i"),We={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","O","Moz","ms"];Q.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=C(e,"opacity");return""===n?"1":n}}}},cssNumber:{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,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,i,a,s=Q.camelCase(t),l=e.style;return t=Q.cssProps[s]||(Q.cssProps[s]=L(l,s)),a=Q.cssHooks[t]||Q.cssHooks[s],void 0===n?a&&"get"in a&&void 0!==(o=a.get(e,!1,r))?o:l[t]:("string"==(i=typeof n)&&(o=ze.exec(n))&&(n=(o[1]+1)*o[2]+parseFloat(Q.css(e,t)),i="number"),void(null!=n&&n==n&&("number"!==i||Q.cssNumber[s]||(n+="px"),X.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(l[t]=n))))}},css:function(e,t,n,r){var o,i,a,s=Q.camelCase(t);return t=Q.cssProps[s]||(Q.cssProps[s]=L(e.style,s)),(a=Q.cssHooks[t]||Q.cssHooks[s])&&"get"in a&&(o=a.get(e,!0,n)),void 0===o&&(o=C(e,t,r)),"normal"===o&&t in Ve&&(o=Ve[t]),""===n||n?(i=parseFloat(o),!0===n||Q.isNumeric(i)?i||0:o):o}}),Q.each(["height","width"],(function(e,t){Q.cssHooks[t]={get:function(e,n,r){return n?Be.test(Q.css(e,"display"))&&0===e.offsetWidth?Q.swap(e,We,(function(){return N(e,t,r)})):N(e,t,r):void 0},set:function(e,n,r){var o=r&&Me(e);return S(0,n,r?T(e,t,r,"border-box"===Q.css(e,"boxSizing",!1,o),o):0)}}})),Q.cssHooks.marginRight=A(X.reliableMarginRight,(function(e,t){return t?Q.swap(e,{display:"inline-block"},C,[e,"marginRight"]):void 0})),Q.each({margin:"",padding:"",border:"Width"},(function(e,t){Q.cssHooks[e+t]={expand:function(n){for(var r=0,o={},i="string"==typeof n?n.split(" "):[n];4>r;r++)o[e+xe[r]+t]=i[r]||i[r-2]||i[0];return o}},Re.test(e)||(Q.cssHooks[e+t].set=S)})),Q.fn.extend({css:function(e,t){return he(this,(function(e,t,n){var r,o,i={},a=0;if(Q.isArray(t)){for(r=Me(e),o=t.length;o>a;a++)i[t[a]]=Q.css(e,t[a],!1,r);return i}return void 0!==n?Q.style(e,t,n):Q.css(e,t)}),e,t,arguments.length>1)},show:function(){return k(this,!0)},hide:function(){return k(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each((function(){we(this)?Q(this).show():Q(this).hide()}))}}),Q.Tween=O,O.prototype={constructor:O,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(Q.cssNumber[n]?"":"px")},cur:function(){var e=O.propHooks[this.prop];return e&&e.get?e.get(this):O.propHooks._default.get(this)},run:function(e){var t,n=O.propHooks[this.prop];return this.pos=t=this.options.duration?Q.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):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):O.propHooks._default.set(this),this}},O.prototype.init.prototype=O.prototype,O.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=Q.css(e.elem,e.prop,""))&&"auto"!==t?t:0:e.elem[e.prop]},set:function(e){Q.fx.step[e.prop]?Q.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[Q.cssProps[e.prop]]||Q.cssHooks[e.prop])?Q.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},O.propHooks.scrollTop=O.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},Q.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},Q.fx=O.prototype.init,Q.fx.step={};var Xe,Ye,Je=/^(?:toggle|show|hide)$/,Qe=new RegExp("^(?:([+-])=|)("+be+")([a-z%]*)$","i"),Ke=/queueHooks$/,Ze=[function(e,t,n){var r,o,i,a,s,l,c,u=this,d={},f=e.style,p=e.nodeType&&we(e),h=ge.get(e,"fxshow");for(r in n.queue||(null==(s=Q._queueHooks(e,"fx")).unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always((function(){u.always((function(){s.unqueued--,Q.queue(e,"fx").length||s.empty.fire()}))}))),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[f.overflow,f.overflowX,f.overflowY],"inline"===("none"===(c=Q.css(e,"display"))?ge.get(e,"olddisplay")||E(e.nodeName):c)&&"none"===Q.css(e,"float")&&(f.display="inline-block")),n.overflow&&(f.overflow="hidden",u.always((function(){f.overflow=n.overflow[0],f.overflowX=n.overflow[1],f.overflowY=n.overflow[2]}))),t)if(o=t[r],Je.exec(o)){if(delete t[r],i=i||"toggle"===o,o===(p?"hide":"show")){if("show"!==o||!h||void 0===h[r])continue;p=!0}d[r]=h&&h[r]||Q.style(e,r)}else c=void 0;if(Q.isEmptyObject(d))"inline"===("none"===c?E(e.nodeName):c)&&(f.display=c);else for(r in h?"hidden"in h&&(p=h.hidden):h=ge.access(e,"fxshow",{}),i&&(h.hidden=!p),p?Q(e).show():u.done((function(){Q(e).hide()})),u.done((function(){var t;for(t in ge.remove(e,"fxshow"),d)Q.style(e,t,d[t])})),d)a=P(p?h[r]:0,r,u),r in h||(h[r]=a.start,p&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}],et={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),o=Qe.exec(t),i=o&&o[3]||(Q.cssNumber[e]?"":"px"),a=(Q.cssNumber[e]||"px"!==i&&+r)&&Qe.exec(Q.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==i){i=i||a[3],o=o||[],a=+r||1;do{a/=s=s||".5",Q.style(n.elem,e,a+i)}while(s!==(s=n.cur()/r)&&1!==s&&--l)}return o&&(a=n.start=+a||+r||0,n.unit=i,n.end=o[1]?a+(o[1]+1)*o[2]:+o[2]),n}]};Q.Animation=Q.extend(j,{tweener:function(e,t){Q.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,r=0,o=e.length;o>r;r++)n=e[r],et[n]=et[n]||[],et[n].unshift(t)},prefilter:function(e,t){t?Ze.unshift(e):Ze.push(e)}}),Q.speed=function(e,t,n){var r=e&&"object"==typeof e?Q.extend({},e):{complete:n||!n&&t||Q.isFunction(e)&&e,duration:e,easing:n&&t||t&&!Q.isFunction(t)&&t};return r.duration=Q.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in Q.fx.speeds?Q.fx.speeds[r.duration]:Q.fx.speeds._default,(null==r.queue||!0===r.queue)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){Q.isFunction(r.old)&&r.old.call(this),r.queue&&Q.dequeue(this,r.queue)},r},Q.fn.extend({fadeTo:function(e,t,n,r){return this.filter(we).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var o=Q.isEmptyObject(e),i=Q.speed(t,n,r),a=function(){var t=j(this,Q.extend({},e),i);(o||ge.get(this,"finish"))&&t.stop(!0)};return a.finish=a,o||!1===i.queue?this.each(a):this.queue(i.queue,a)},stop:function(e,t,n){var r=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,o=null!=e&&e+"queueHooks",i=Q.timers,a=ge.get(this);if(o)a[o]&&a[o].stop&&r(a[o]);else for(o in a)a[o]&&a[o].stop&&Ke.test(o)&&r(a[o]);for(o=i.length;o--;)i[o].elem!==this||null!=e&&i[o].queue!==e||(i[o].anim.stop(n),t=!1,i.splice(o,1));(t||!n)&&Q.dequeue(this,e)}))},finish:function(e){return!1!==e&&(e=e||"fx"),this.each((function(){var t,n=ge.get(this),r=n[e+"queue"],o=n[e+"queueHooks"],i=Q.timers,a=r?r.length:0;for(n.finish=!0,Q.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=i.length;t--;)i[t].elem===this&&i[t].queue===e&&(i[t].anim.stop(!0),i.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish}))}}),Q.each(["toggle","show","hide"],(function(e,t){var n=Q.fn[t];Q.fn[t]=function(e,r,o){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(_(t,!0),e,r,o)}})),Q.each({slideDown:_("show"),slideUp:_("hide"),slideToggle:_("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},(function(e,t){Q.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}})),Q.timers=[],Q.fx.tick=function(){var e,t=0,n=Q.timers;for(Xe=Q.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||Q.fx.stop(),Xe=void 0},Q.fx.timer=function(e){Q.timers.push(e),e()?Q.fx.start():Q.timers.pop()},Q.fx.interval=13,Q.fx.start=function(){Ye||(Ye=setInterval(Q.fx.tick,Q.fx.interval))},Q.fx.stop=function(){clearInterval(Ye),Ye=null},Q.fx.speeds={slow:600,fast:200,_default:400},Q.fn.delay=function(e,t){return e=Q.fx&&Q.fx.speeds[e]||e,t=t||"fx",this.queue(t,(function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}}))},function(){var e=Y.createElement("input"),t=Y.createElement("select"),n=t.appendChild(Y.createElement("option"));e.type="checkbox",X.checkOn=""!==e.value,X.optSelected=n.selected,t.disabled=!0,X.optDisabled=!n.disabled,(e=Y.createElement("input")).value="t",e.type="radio",X.radioValue="t"===e.value}();var tt,nt=Q.expr.attrHandle;Q.fn.extend({attr:function(e,t){return he(this,Q.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each((function(){Q.removeAttr(this,e)}))}}),Q.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(e&&3!==i&&8!==i&&2!==i)return typeof e.getAttribute===Ce?Q.prop(e,t,n):(1===i&&Q.isXMLDoc(e)||(t=t.toLowerCase(),r=Q.attrHooks[t]||(Q.expr.match.bool.test(t)?tt:void 0)),void 0===n?r&&"get"in r&&null!==(o=r.get(e,t))?o:null==(o=Q.find.attr(e,t))?void 0:o:null!==n?r&&"set"in r&&void 0!==(o=r.set(e,n,t))?o:(e.setAttribute(t,n+""),n):void Q.removeAttr(e,t))},removeAttr:function(e,t){var n,r,o=0,i=t&&t.match(fe);if(i&&1===e.nodeType)for(;n=i[o++];)r=Q.propFix[n]||n,Q.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!X.radioValue&&"radio"===t&&Q.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}}}),tt={set:function(e,t,n){return!1===t?Q.removeAttr(e,n):e.setAttribute(n,n),n}},Q.each(Q.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=nt[t]||Q.find.attr;nt[t]=function(e,t,r){var o,i;return r||(i=nt[t],nt[t]=o,o=null!=n(e,t,r)?t.toLowerCase():null,nt[t]=i),o}}));var rt=/^(?:input|select|textarea|button)$/i;Q.fn.extend({prop:function(e,t){return he(this,Q.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[Q.propFix[e]||e]}))}}),Q.extend({propFix:{for:"htmlFor",class:"className"},prop:function(e,t,n){var r,o,i=e.nodeType;if(e&&3!==i&&8!==i&&2!==i)return(1!==i||!Q.isXMLDoc(e))&&(t=Q.propFix[t]||t,o=Q.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||rt.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),X.optSelected||(Q.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),Q.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){Q.propFix[this.toLowerCase()]=this}));var ot=/[\t\r\n\f]/g;Q.fn.extend({addClass:function(e){var t,n,r,o,i,a,s="string"==typeof e&&e,l=0,c=this.length;if(Q.isFunction(e))return this.each((function(t){Q(this).addClass(e.call(this,t,this.className))}));if(s)for(t=(e||"").match(fe)||[];c>l;l++)if(r=1===(n=this[l]).nodeType&&(n.className?(" "+n.className+" ").replace(ot," "):" ")){for(i=0;o=t[i++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");a=Q.trim(r),n.className!==a&&(n.className=a)}return this},removeClass:function(e){var t,n,r,o,i,a,s=0===arguments.length||"string"==typeof e&&e,l=0,c=this.length;if(Q.isFunction(e))return this.each((function(t){Q(this).removeClass(e.call(this,t,this.className))}));if(s)for(t=(e||"").match(fe)||[];c>l;l++)if(r=1===(n=this[l]).nodeType&&(n.className?(" "+n.className+" ").replace(ot," "):"")){for(i=0;o=t[i++];)for(;r.indexOf(" "+o+" ")>=0;)r=r.replace(" "+o+" "," ");a=e?Q.trim(r):"",n.className!==a&&(n.className=a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):this.each(Q.isFunction(e)?function(n){Q(this).toggleClass(e.call(this,n,this.className,t),t)}:function(){if("string"===n)for(var t,r=0,o=Q(this),i=e.match(fe)||[];t=i[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else(n===Ce||"boolean"===n)&&(this.className&&ge.set(this,"__className__",this.className),this.className=this.className||!1===e?"":ge.get(this,"__className__")||"")})},hasClass:function(e){for(var t=" "+e+" ",n=0,r=this.length;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(ot," ").indexOf(t)>=0)return!0;return!1}});var it=/\r/g;Q.fn.extend({val:function(e){var t,n,r,o=this[0];return arguments.length?(r=Q.isFunction(e),this.each((function(n){var o;1===this.nodeType&&(null==(o=r?e.call(this,n,Q(this).val()):e)?o="":"number"==typeof o?o+="":Q.isArray(o)&&(o=Q.map(o,(function(e){return null==e?"":e+""}))),(t=Q.valHooks[this.type]||Q.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))}))):o?(t=Q.valHooks[o.type]||Q.valHooks[o.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:"string"==typeof(n=o.value)?n.replace(it,""):null==n?"":n:void 0}}),Q.extend({valHooks:{option:{get:function(e){var t=Q.find.attr(e,"value");return null!=t?t:Q.trim(Q.text(e))}},select:{get:function(e){for(var t,n,r=e.options,o=e.selectedIndex,i="select-one"===e.type||0>o,a=i?null:[],s=i?o+1:r.length,l=0>o?s:i?o:0;s>l;l++)if(!(!(n=r[l]).selected&&l!==o||(X.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&Q.nodeName(n.parentNode,"optgroup"))){if(t=Q(n).val(),i)return t;a.push(t)}return a},set:function(e,t){for(var n,r,o=e.options,i=Q.makeArray(t),a=o.length;a--;)((r=o[a]).selected=Q.inArray(r.value,i)>=0)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),Q.each(["radio","checkbox"],(function(){Q.valHooks[this]={set:function(e,t){return Q.isArray(t)?e.checked=Q.inArray(Q(e).val(),t)>=0:void 0}},X.checkOn||(Q.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),Q.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){Q.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}})),Q.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},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,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var at=Q.now(),st=/\?/;Q.parseJSON=function(e){return JSON.parse(e+"")},Q.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return(!t||t.getElementsByTagName("parsererror").length)&&Q.error("Invalid XML: "+e),t};var lt,ct,ut=/#.*$/,dt=/([?&])_=[^&]*/,ft=/^(.*?):[ \t]*([^\r\n]*)$/gm,pt=/^(?:GET|HEAD)$/,ht=/^\/\//,gt=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,mt={},vt={},yt="*/".concat("*");try{ct=location.href}catch(e){(ct=Y.createElement("a")).href="",ct=ct.href}lt=gt.exec(ct.toLowerCase())||[],Q.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ct,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(lt[1]),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:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":Q.parseJSON,"text xml":Q.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?F(F(e,Q.ajaxSettings),t):F(Q.ajaxSettings,e)},ajaxPrefilter:q(mt),ajaxTransport:q(vt),ajax:function(e,t){function n(e,t,n,a){var l,u,v,y,x,E=t;2!==b&&(b=2,s&&clearTimeout(s),r=void 0,i=a||"",w.readyState=e>0?4:0,l=e>=200&&300>e||304===e,n&&(y=function(e,t,n){for(var r,o,i,a,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(o in s)if(s[o]&&s[o].test(r)){l.unshift(o);break}if(l[0]in n)i=l[0];else{for(o in n){if(!l[0]||e.converters[o+" "+l[0]]){i=o;break}a||(a=o)}i=i||a}return i?(i!==l[0]&&l.unshift(i),n[i]):void 0}(d,w,n)),y=function(e,t,n,r){var o,i,a,s,l,c={},u=e.dataTypes.slice();if(u[1])for(a in e.converters)c[a.toLowerCase()]=e.converters[a];for(i=u.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=i,i=u.shift())if("*"===i)i=l;else if("*"!==l&&l!==i){if(!(a=c[l+" "+i]||c["* "+i]))for(o in c)if((s=o.split(" "))[1]===i&&(a=c[l+" "+s[0]]||c["* "+s[0]])){!0===a?a=c[o]:!0!==c[o]&&(i=s[0],u.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+l+" to "+i}}}return{state:"success",data:t}}(d,y,w,l),l?(d.ifModified&&((x=w.getResponseHeader("Last-Modified"))&&(Q.lastModified[o]=x),(x=w.getResponseHeader("etag"))&&(Q.etag[o]=x)),204===e||"HEAD"===d.type?E="nocontent":304===e?E="notmodified":(E=y.state,u=y.data,l=!(v=y.error))):(v=E,(e||!E)&&(E="error",0>e&&(e=0))),w.status=e,w.statusText=(t||E)+"",l?h.resolveWith(f,[u,E,w]):h.rejectWith(f,[w,E,v]),w.statusCode(m),m=void 0,c&&p.trigger(l?"ajaxSuccess":"ajaxError",[w,d,l?u:v]),g.fireWith(f,[w,E]),c&&(p.trigger("ajaxComplete",[w,d]),--Q.active||Q.event.trigger("ajaxStop")))}"object"==typeof e&&(t=e,e=void 0),t=t||{};var r,o,i,a,s,l,c,u,d=Q.ajaxSetup({},t),f=d.context||d,p=d.context&&(f.nodeType||f.jquery)?Q(f):Q.event,h=Q.Deferred(),g=Q.Callbacks("once memory"),m=d.statusCode||{},v={},y={},b=0,x="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!a)for(a={};t=ft.exec(i);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?i:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=y[n]=y[n]||e,v[e]=t),this},overrideMimeType:function(e){return b||(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else w.always(e[w.status]);return this},abort:function(e){var t=e||x;return r&&r.abort(t),n(0,t),this}};if(h.promise(w).complete=g.add,w.success=w.done,w.error=w.fail,d.url=((e||d.url||ct)+"").replace(ut,"").replace(ht,lt[1]+"//"),d.type=t.method||t.type||d.method||d.type,d.dataTypes=Q.trim(d.dataType||"*").toLowerCase().match(fe)||[""],null==d.crossDomain&&(l=gt.exec(d.url.toLowerCase()),d.crossDomain=!(!l||l[1]===lt[1]&&l[2]===lt[2]&&(l[3]||("http:"===l[1]?"80":"443"))===(lt[3]||("http:"===lt[1]?"80":"443")))),d.data&&d.processData&&"string"!=typeof d.data&&(d.data=Q.param(d.data,d.traditional)),I(mt,d,t,w),2===b)return w;for(u in(c=d.global)&&0==Q.active++&&Q.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!pt.test(d.type),o=d.url,d.hasContent||(d.data&&(o=d.url+=(st.test(o)?"&":"?")+d.data,delete d.data),!1===d.cache&&(d.url=dt.test(o)?o.replace(dt,"$1_="+at++):o+(st.test(o)?"&":"?")+"_="+at++)),d.ifModified&&(Q.lastModified[o]&&w.setRequestHeader("If-Modified-Since",Q.lastModified[o]),Q.etag[o]&&w.setRequestHeader("If-None-Match",Q.etag[o])),(d.data&&d.hasContent&&!1!==d.contentType||t.contentType)&&w.setRequestHeader("Content-Type",d.contentType),w.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)w.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(!1===d.beforeSend.call(f,w,d)||2===b))return w.abort();for(u in x="abort",{success:1,error:1,complete:1})w[u](d[u]);if(r=I(vt,d,t,w)){w.readyState=1,c&&p.trigger("ajaxSend",[w,d]),d.async&&d.timeout>0&&(s=setTimeout((function(){w.abort("timeout")}),d.timeout));try{b=1,r.send(v,n)}catch(e){if(!(2>b))throw e;n(-1,e)}}else n(-1,"No Transport");return w},getJSON:function(e,t,n){return Q.get(e,t,n,"json")},getScript:function(e,t){return Q.get(e,void 0,t,"script")}}),Q.each(["get","post"],(function(e,t){Q[t]=function(e,n,r,o){return Q.isFunction(n)&&(o=o||r,r=n,n=void 0),Q.ajax({url:e,type:t,dataType:o,data:n,success:r})}})),Q.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],(function(e,t){Q.fn[t]=function(e){return this.on(t,e)}})),Q._evalUrl=function(e){return Q.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},Q.fn.extend({wrapAll:function(e){var t;return Q.isFunction(e)?this.each((function(t){Q(this).wrapAll(e.call(this,t))})):(this[0]&&(t=Q(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 this.each(Q.isFunction(e)?function(t){Q(this).wrapInner(e.call(this,t))}:function(){var t=Q(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=Q.isFunction(e);return this.each((function(n){Q(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(){return this.parent().each((function(){Q.nodeName(this,"body")||Q(this).replaceWith(this.childNodes)})).end()}}),Q.expr.filters.hidden=function(e){return e.offsetWidth<=0&&e.offsetHeight<=0},Q.expr.filters.visible=function(e){return!Q.expr.filters.hidden(e)};var bt=/%20/g,xt=/\[\]$/,wt=/\r?\n/g,Et=/^(?:submit|button|image|reset|file)$/i,Ct=/^(?:input|select|textarea|keygen)/i;Q.param=function(e,t){var n,r=[],o=function(e,t){t=Q.isFunction(t)?t():null==t?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=Q.ajaxSettings&&Q.ajaxSettings.traditional),Q.isArray(e)||e.jquery&&!Q.isPlainObject(e))Q.each(e,(function(){o(this.name,this.value)}));else for(n in e)$(n,e[n],t,o);return r.join("&").replace(bt,"+")},Q.fn.extend({serialize:function(){return Q.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=Q.prop(this,"elements");return e?Q.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!Q(this).is(":disabled")&&Ct.test(this.nodeName)&&!Et.test(e)&&(this.checked||!Ee.test(e))})).map((function(e,t){var n=Q(this).val();return null==n?null:Q.isArray(n)?Q.map(n,(function(e){return{name:t.name,value:e.replace(wt,"\r\n")}})):{name:t.name,value:n.replace(wt,"\r\n")}})).get()}}),Q.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(e){}};var At=0,Lt={},St={0:200,1223:204},Tt=Q.ajaxSettings.xhr();r.ActiveXObject&&Q(r).on("unload",(function(){for(var e in Lt)Lt[e]()})),X.cors=!!Tt&&"withCredentials"in Tt,X.ajax=Tt=!!Tt,Q.ajaxTransport((function(e){var t;return X.cors||Tt&&!e.crossDomain?{send:function(n,r){var o,i=e.xhr(),a=++At;if(i.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(o in e.xhrFields)i[o]=e.xhrFields[o];for(o in e.mimeType&&i.overrideMimeType&&i.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest"),n)i.setRequestHeader(o,n[o]);t=function(e){return function(){t&&(delete Lt[a],t=i.onload=i.onerror=null,"abort"===e?i.abort():"error"===e?r(i.status,i.statusText):r(St[i.status]||i.status,i.statusText,"string"==typeof i.responseText?{text:i.responseText}:void 0,i.getAllResponseHeaders()))}},i.onload=t(),i.onerror=t("error"),t=Lt[a]=t("abort");try{i.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}:void 0})),Q.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return Q.globalEval(e),e}}}),Q.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),Q.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain)return{send:function(r,o){t=Q("<script>").prop({async:!0,charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),Y.head.appendChild(t[0])},abort:function(){n&&n()}}}));var Nt=[],kt=/(=)\?(?=&|$)|\?\?/;Q.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Nt.pop()||Q.expando+"_"+at++;return this[e]=!0,e}}),Q.ajaxPrefilter("json jsonp",(function(e,t,n){var o,i,a,s=!1!==e.jsonp&&(kt.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&kt.test(e.data)&&"data");return s||"jsonp"===e.dataTypes[0]?(o=e.jsonpCallback=Q.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(kt,"$1"+o):!1!==e.jsonp&&(e.url+=(st.test(e.url)?"&":"?")+e.jsonp+"="+o),e.converters["script json"]=function(){return a||Q.error(o+" was not called"),a[0]},e.dataTypes[0]="json",i=r[o],r[o]=function(){a=arguments},n.always((function(){r[o]=i,e[o]&&(e.jsonpCallback=t.jsonpCallback,Nt.push(o)),a&&Q.isFunction(i)&&i(a[0]),a=i=void 0})),"script"):void 0})),Q.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||Y;var r=oe.exec(e),o=!n&&[];return r?[t.createElement(r[1])]:(r=Q.buildFragment([e],t,o),o&&o.length&&Q(o).remove(),Q.merge([],r.childNodes))};var Ot=Q.fn.load;Q.fn.load=function(e,t,n){if("string"!=typeof e&&Ot)return Ot.apply(this,arguments);var r,o,i,a=this,s=e.indexOf(" ");return s>=0&&(r=Q.trim(e.slice(s)),e=e.slice(0,s)),Q.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(o="POST"),a.length>0&&Q.ajax({url:e,type:o,dataType:"html",data:t}).done((function(e){i=arguments,a.html(r?Q("<div>").append(Q.parseHTML(e)).find(r):e)})).complete(n&&function(e,t){a.each(n,i||[e.responseText,t,e])}),this},Q.expr.filters.animated=function(e){return Q.grep(Q.timers,(function(t){return e===t.elem})).length};var Dt=r.document.documentElement;Q.offset={setOffset:function(e,t,n){var r,o,i,a,s,l,c=Q.css(e,"position"),u=Q(e),d={};"static"===c&&(e.style.position="relative"),s=u.offset(),i=Q.css(e,"top"),l=Q.css(e,"left"),("absolute"===c||"fixed"===c)&&(i+l).indexOf("auto")>-1?(a=(r=u.position()).top,o=r.left):(a=parseFloat(i)||0,o=parseFloat(l)||0),Q.isFunction(t)&&(t=t.call(e,n,s)),null!=t.top&&(d.top=t.top-s.top+a),null!=t.left&&(d.left=t.left-s.left+o),"using"in t?t.using.call(e,d):u.css(d)}},Q.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){Q.offset.setOffset(this,e,t)}));var t,n,r=this[0],o={top:0,left:0},i=r&&r.ownerDocument;return i?(t=i.documentElement,Q.contains(t,r)?(typeof r.getBoundingClientRect!==Ce&&(o=r.getBoundingClientRect()),n=R(i),{top:o.top+n.pageYOffset-t.clientTop,left:o.left+n.pageXOffset-t.clientLeft}):o):void 0},position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return"fixed"===Q.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),Q.nodeName(e[0],"html")||(r=e.offset()),r.top+=Q.css(e[0],"borderTopWidth",!0),r.left+=Q.css(e[0],"borderLeftWidth",!0)),{top:t.top-r.top-Q.css(n,"marginTop",!0),left:t.left-r.left-Q.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent||Dt;e&&!Q.nodeName(e,"html")&&"static"===Q.css(e,"position");)e=e.offsetParent;return e||Dt}))}}),Q.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},(function(e,t){var n="pageYOffset"===t;Q.fn[e]=function(o){return he(this,(function(e,o,i){var a=R(e);return void 0===i?a?a[t]:e[o]:void(a?a.scrollTo(n?r.pageXOffset:i,n?i:r.pageYOffset):e[o]=i)}),e,o,arguments.length,null)}})),Q.each(["top","left"],(function(e,t){Q.cssHooks[t]=A(X.pixelPosition,(function(e,n){return n?(n=C(e,t),He.test(n)?Q(e).position()[t]+"px":n):void 0}))})),Q.each({Height:"height",Width:"width"},(function(e,t){Q.each({padding:"inner"+e,content:t,"":"outer"+e},(function(n,r){Q.fn[r]=function(r,o){var i=arguments.length&&(n||"boolean"!=typeof r),a=n||(!0===r||!0===o?"margin":"border");return he(this,(function(t,n,r){var o;return Q.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===r?Q.css(t,n,a):Q.style(t,n,r,a)}),t,i?r:void 0,i,null)}}))})),Q.fn.size=function(){return this.length},Q.fn.andSelf=Q.fn.addBack,void 0===(n=function(){return Q}.apply(t,[]))||(e.exports=n);var _t=r.jQuery,Pt=r.$;return Q.noConflict=function(e){return r.$===Q&&(r.$=Pt),e&&r.jQuery===Q&&(r.jQuery=_t),Q},typeof o===Ce&&(r.jQuery=r.$=Q),Q},"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)},264:()=>{function ClosePopup(){$("[data-modaldialog-close]").trigger("click")}agora((function(){$(document).on("click","[data-modaldialog]",(function(){var e=$(this);e.prop("disabled")||(e.prop("disabled",!0),setTimeout((function(){e.prop("disabled",!1)}),2e3),$(this).AgoraDialogModal({AfterLoad:$(this).attr("data-modaldialog-afterLoad")}))})),$(document).on("click","[data-modaldialog-close]",(function(){$(this).AgoraDialogModal({CloseModal:!0}),"clear"==$(this).data("modaldialog-close")&&ClearFormval("[data-request]")})),$(document).on("click","[data-modaldialog-close-form]",(function(){$(this).AgoraDialogModal({CloseModal:!0,AfterLoad:$(this).attr("data-modaldialog-afterLoad")})}))})),function($){function agoraDialog(sender,options){var _defaults={ServiceUrl:"",ModalId:"IBPmodalcontainer",Params:null,Html:null,ParentCss:null,EnableCloseButton:!0,EnableLoader:!0,EnableAjaxHtmlLoad:!1,HideCloseButton:!1,CloseModal:!1,CloseWhenUserPressEscape:!0,Transition:"FadeIn",BeforeLoad:null,AfterLoad:null},_options=$.extend(_defaults,options);if(_options.CloseModal)return $(sender).closest(".agora-mdl-data-dialog-container").trigger("dispose"),$(sender).closest(".agora-mdl-data-dialog-container").removeClass("popup-open"),$(sender).closest(".agora-mdl-data-dialog-container").remove(),void $("body").removeClass("popup-active");function LoadOptions(){IsNotNull(sender.attr("data-modaldialog-src"))&&(_options.ServiceUrl=sender.attr("data-modaldialog-src")),IsNotNull(sender.attr("data-modaldialog-ajax"))&&(_options.EnableAjaxHtmlLoad=sender.attr("data-modaldialog-ajax")),IsNotNull(sender.attr("data-modaldialog-ParentCss"))&&(_options.ParentCss=sender.attr("data-modaldialog-ParentCss")),IsNotNull(sender.attr("data-modaldialog-CloseWhenUserPressEscape"))&&(_options.CloseWhenUserPressEscape="true"==sender.attr("data-modaldialog-CloseWhenUserPressEscape")),IsNotNull(sender.attr("data-modaldialog-HideCloseButton"))&&(_options.HideCloseButton="true"==sender.attr("data-modaldialog-HideCloseButton")),IsNotNull(sender.attr("data-modaldialog-id"))&&(_options.ModalId=sender.attr("data-modaldialog-id")),GetHtml()}function GetHtml(){_options.EnableAjaxHtmlLoad?($("#"+_options.ModalId).remove(),$.ajax({url:_options.ServiceUrl,type:"post",dataType:"html",data:_options.Params,cache:!1,success:function(e){_options.Html=e,BindHtml()},error:function(e){ShowAlert("Unknown Error. Please try later!",3e3,"alert_box",null),_options.EnableLoader&&ShowLoading()},statusCode:{404:function(){ShowAlert("Service not found!",3e3,"alert_box",null),_options.EnableLoader&&ShowLoading()}}})):(_options.AfterLoad&&_options.AfterLoad(),_options.Html=$("#"+sender.attr("data-modaldialog-id")).clone().wrap("#"+sender.attr("data-modaldialog-id")).html()),BindHtml()}function BindHtml(){null!=_options.Html&&($('<div id="'+_options.ModalId+'" class="agora-mdl-data-dialog-container '+_options.ParentCss+'"><div class="agora-mdl-data-dialog-container-body">'+(_options.HideCloseButton?"":'<div data-modaldialog-close="" class="mdl-close"></div>')+_options.Html+'</div><div id="popup" class="mdl-js-snackbar mdl-snackbar"><div class="mdl-snackbar__text"></div><button aria-label="button" class="mdl-snackbar__action" type="button"></button></div> </div>').appendTo("body"),$("#"+_options.ModalId).addClass("popup-open"),$("body").addClass("popup-active"),_options.EnableLoader&&ShowLoading(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom(),$("#"+_options.ModalId).find(".mdl-textfield--floating-label input.mdl-textfield__input:not([placeholder])").attr("placeholder"," "))}_options.AfterLoad&&(_options.AfterLoad=eval("(function() { "+_options.AfterLoad+"("+sender.attr("data-modaldialog-id")+"); })")),_options.EnableLoader&&ShowLoading(),LoadOptions(),$(document).keydown((function(e){"27"==e.keyCode&&_options.CloseWhenUserPressEscape&&($("#"+_options.ModalId).removeClass("popup-open"),$("#"+_options.ModalId).remove(),$("body").removeClass("popup-active"))}))}$.fn.AgoraDialogModal=function(e){return new agoraDialog(this,e)}}(jQuery)},136:()=>{var e=new CustomEvent("onAgoraLoad");function t(e){return null!=e&&null!=e&&e.length>0&&"0"!=e&&0!=e}document.dispatchEvent(e),document.isAgoraLoaded=!0,e=new CustomEvent("onCssLoad"),document.dispatchEvent(e),document.isCssLoaded=!0,function(){function e(e,n,r,o){if(!e.closest("div[contenteditable]").attr("contenteditable")&&void 0!==n||void 0!==r)switch((o=void 0!==o?o:"gallery").toLowerCase()){case"gallery":var i=e.find('[data-sort-object="CMNCMN"]');("undefined"!=i&&null!=i&&i.length>0||!n.match(/(^|\/)(d)?sort\-[a-z]+/g))&&(n=(function(e){var n=e.find('[data-sort-object="CMNCMN"]');if("undefined"!=n&&null!=n&&n.length>0&&t(n.val()))return n.val();return function(e){switch(e){case"PROPERTY":case"PROPERTYRENT":return"/dsort-p";case"AGENT":case"AGENTTEAM":case"OFFICE":return"/sort-n"}return""}("PROPERTY")}(e)+"/"+n.replace("http://","").replace(/(^|\/)(d)?sort\-[a-z]+/g,"")).replace("//","/")),$.ajax({type:"POST",url:"/services/MAX/agoraGetGalleryView.aspx",data:{UrlQuery:n,TypeOfSearch:"SALE",IsContentPage:"true",DemandKey:r},dataType:"html",success:function(i){if(!e.closest("div[contenteditable]").attr("contenteditable")){var a='<section class="result-page" data-ck-propertylist="" data-ck-demand-key="'+r+'" data-ck-property-url="'+n+'" data-ck-demand-layout="'+o+'">'+i+"</section>";e.after(a),e.remove(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom(),$('[data-ck-demand-key="'+r+'"] #propertyGrid').each((function(){$(this).find(".property:not(.init)").each((function(){!function(e){var n=e,r=n.find(".slides");r.attr("data-css-slider","0");var o=n.find("[data-mk]").data("mk"),i=n.find("[data-mlsboard]").data("mlsboard"),a=n.find("[data-detail-url]").data("detail-url"),s=$("[data-pcode]").data("pcode"),l=n.find("[data-mls-photo]").data("mls-photo"),c=n.find("[data-native-tab]").data("native-tab");t(l)||(l="/images/company/"+s+"/NoPhotoImage/image-not-found.jpg");var u=parseInt(r.data("value"),10),d=n.closest("[id]"),f=0==n.length?"un":d.attr("id").replace(/\$/gi,"");(function(e,t,n,r,o,i,a,s){var l=0,c=n+r+o+"_";$('<input type="radio" aria-label="'+c+'slider" name="'+c+'slider" id="'+(c+l)+'" checked />').appendTo(i);var u=$('<div class="nav"></div>'),d=$('<label aria-label="next" aria-controls="myCarousel-items" data-css-slider-nav="propphoto" for="'+(c+(l+1))+'" class="next"><span aria-label="next" class="visuallyhidden">next</span></label>'),f=$('<label aria-label="prev" aria-controls="myCarousel-items" data-css-slider-nav="propphoto" for="'+(c+(parseInt(t,10)-1))+'" class="prev"><span aria-label="prev" class="visuallyhidden">prev</span></label>');if(f.on("click",g),d.on("click",g),f.appendTo(u),d.appendTo(u),"PSB"==$("[data-pcode]").data("pcode"))var p="";else p='target = "_blank"';"undefined"!=s&&""!=s&&1==s&&(p="");var h=$('<li class="slide-container" aria-roledescription="carousel" role="contentinfo"><div class="slide"><div class="Prop_img" role="img" aria-label="bannerImage" style="background-image:url(\''+e+'\');"><a aria-label="'+c+'slider"'+p+'href="'+a+'"></a></div></div></li>');function g(){var e=$(this);f.off("click"),d.off("click"),$.ajax({url:"/services/agoraPropertyPhotos.aspx",data:{mlsboard:r,mlsno:o,container:c},success:function(t){i.append(t),e.trigger("click")}})}h.append(u),h.appendTo(i)})(l,u,f+(new Date).getMilliseconds(),i,o,r,a,c),n.addClass("init")}($(this))}))})),window.agLazy.refresh()}},error:function(){ShowLoading()}});break;case"carousel":$.ajax({type:"POST",url:"/services/agoraGetCarouselItem.aspx",data:{UrlQuery:n,TypeOfSearch:"SALE",IsContentPage:"true",DemandKey:r},dataType:"html",success:function(t){if(!e.closest("div[contenteditable]").attr("contenteditable")){var i='<section class="result-page" data-ck-propertylist="" data-ck-demand-key="'+r+'" data-ck-property-url="'+n+'" data-ck-demand-layout="'+o+'">'+t+"</section>";e.after(i),$('[data-query-list]:not(.init)[data-service-url][data-rt^="CMN"]').each((function(){$(this).trigger("init"),$(this).addClass("init")})),e.remove(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom()}},error:function(){ShowLoading()}})}}$("img[data-demand-key]").each((function(){e($(this),$(this).data("demand-url"),$(this).data("demand-key"),$(this).data("layout"))})),$(document).on("click","[data-ck-href]",null,(function(){e($(this).parents("[data-ck-propertylist]:first"),$(this).data("ck-href"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-key"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-layout"))})),async function(){var e,t,n={languages:[{code:"en",label:"English"},{code:"es",label:"Spanish",localLabel:"Español"},{code:"nl",label:"Dutch",localLabel:"Nederlands"},{code:"pr",label:"Portugese",localLabel:"Português"},{code:"fr",label:"French",localLabel:"Français"}],currencies:[{code:"USD",base:"USD",label:"Dollar",format:"$###,###,###.##"},{code:"AED",base:"USD",label:"United Arab Emirates Dirham",format:"AED###,###,###.##"},{code:"BSD",base:"USD",label:"Bahamian Dollar",format:"B$###,###,###.##"},{code:"CAD",base:"USD",label:"Canadian Dollar",format:"$###,###,###.##"},{code:"DOP",base:"USD",label:"Dominican Peso",format:"RD$###,###,###.##"},{code:"EUR",base:"USD",label:"Euro",format:"€###,###,###.##"},{code:"JMD",base:"USD",label:"Jamaican Dollar",format:"J$###,###,###.##"},{code:"KYD",base:"USD",label:"Cayman Islands Dollar",format:"CI$###,###,###.##"},{code:"MXN",base:"USD",label:"Mexican Peso",format:"$###,###,###.##"},{code:"PAB",base:"USD",label:"Panamanian Balboa",format:"B/.###,###,###.##"}],units:[{code:"imperial",label:"Imperial"},{code:"metric",label:"Metric"}],presets:[{code:"BS",label:"Bahamas",currency:"BSD",language:"en",messurement:"metric"},{code:"CA",label:"Canada",currency:"CAD",language:["en","fr"],messurement:"metric"},{code:"JM",label:"Jamaica",currency:"JMD",language:"en",messurement:"metric"},{code:"KY",label:"Cayman Islands",currency:"KYD",language:"en",messurement:"metric"},{code:"TC",label:"Turks & Caicos Islands",localLabel:"",currency:"USD",language:"en",messurement:"metric"},{code:"US",label:"United States",localLabel:"",currency:"USD",language:"en",messurement:"imperial"},{code:"DY",label:"Dominican Republic",localLabel:"República Dominicana",currency:"USD",language:"en",messurement:"metric"},{code:"ES",label:"Spain",localLabel:"España",currency:"USD",language:"en",messurement:"metric"},{code:"MX",label:"Mexico",localLabel:"México",currency:"MXN",language:"en",messurement:"metric"},{code:"PA",label:"Panama",localLabel:"Panamá",currency:"PAB",language:"en",messurement:"metric"},{code:"NL",label:"Nederlands",localLabel:"Nederland",currency:"EUR",language:"en",messurement:"metric"},{code:"PT",label:"Portugal",currency:"EUR",language:"en",messurement:"metric"}],unitConvertions:[{unit:"SQFT",tragetUnit:"Sq.M",constant:.092903,notation:["Sqft","Sq.Ft","Sq.Ft.","Sq. Ft.","SF"]},{unit:"MI",tragetUnit:"KM",constant:1.60934,notation:["mi","miles","mile"]},{unit:"AC",tragetUnit:"SQM",constant:4046.86,notation:["acre","acres"]},{unit:"LOTSIZE",tragetUnit:"Lot Size",targetNotation:"㎡",constant:4046.86,notation:["Lot Size"]}]},r=null;async function o(){var e=b();if(null==r&&(r=Object.assign({},e)),e?.language==r?.language){r=Object.assign({},e);var t=await async function(){return new Promise((async function(e,t){var n=await async function(){var e=window.localStorage.getItem("LOCALLABELS"),t=null;null!=e&&(t=JSON.parse(e));return t}(),r=b();if(null!=n){var o=new Date;if(o.setHours(o.getHours()-1),new Date(n.updatedOn)>o&&n.Locale.indexOf(r.language)>-1)return void e(n)}(n=await T("/services/agoraClient.ashx",{type:"LABELS"})).updatedOn=new Date,i(n),e(n)}))}();e?.language&&-1==t.Locale.indexOf(e.language)&&(await C("language"),window.location.reload());var n=document.querySelectorAll("[ag-l-k]");n&&n.forEach((function(e){!async function(e,t){var n=e.getAttribute("ag-l-k"),r=null;if(t[n]||s.test(n))if(e.childNodes&&1==e.childNodes.length)if(s.lastIndex=0,s.test(n)){s.lastIndex=0;for(var o=n;null!=(r=s.exec(o));)o=o.replace(r[0],t[r.groups.LabelID]?t[r.groups.LabelID].lbl:"");e.childNodes[0].textContent=o}else e.childNodes[0].textContent=t[n]?t[n].lbl:"";else if(t[n]){var i=document.createElement("span");i.innerHTML=t[n].lbl,l(e,i)}for(var c=0;c<e.attributes.length;c++){var u=e.attributes[c];if(a.lastIndex=0,null!=(r=a.exec(u.name))){for(var d=r.groups.Attribute,f=u.value;null!=(r=s.exec(f));)f=f.replace(r[0],t[r.groups.LabelID]?t[r.groups.LabelID].lbl:"");e.setAttribute(d,f)}}}(e,t.Labels)}))}else window.location.reload()}async function i(e){window.localStorage.setItem("LOCALLABELS",JSON.stringify(e))}var a=/ag\-l\-k\-(?<Attribute>[^\=]+)/gm,s=/\[(?<LabelID>[^\]]+)\]/gm;async function l(e,t){for(var n=0;n<t.childNodes.length;n++)if(t.childNodes[n]?.textContent&&e.childNodes[n]?.textContent)e.childNodes[n].textContent=t.childNodes[n]?.textContent;else{if(!(n<t.childNodes.length&&n<e.childNodes.length))return;l(e.childNodes[n],t.childNodes[n])}}async function c(e){var t,r,o=await async function(){return new Promise((async function(e,t){var n=localStorage.getItem("CONVERTIONRATES"),r=null;if(n&&null!=n){r=JSON.parse(n);var o=new Date;if(o.setDate(o.getDate()-1),new Date(r.updatedOn)>o)return void e(r)}(r=await T("/services/agoraClient.ashx",{type:"CONVERTIONRATES"})).updatedOn=(new Date).toISOString(),localStorage.setItem("CONVERTIONRATES",JSON.stringify(r)),e(r)}))}(),i=b();if(i.currency){var a=o.Rates?.ExchangeRates?.filter((function(e){return e.Code==i.currency}))[0],s=n.currencies.filter((function(e){return e.code==i.currency}))[0];s&&(a.formatter=(t=s.format,r=t.replace(/[#\,\.]+/gi,""),function(e){return r+e.toLocaleString("en-US")}));var l=a.Code,c=e?document.querySelectorAll("[ag-l-p]:not(.is-applied)"):document.querySelectorAll("[ag-l-p]");c&&c.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||(async function(e){if(!e.classList.contains("is-applied")){var t=e.getBoundingClientRect(),n=null,r=null!=(n=e.closest("article"))&&n.length>0?n[0].getBoundingClientRect():e.parentElement?.getBoundingClientRect(),o={y:(r.top+r.bottom)/2,x:(r.left+r.right)/2},i={y:(t.top+t.bottom)/2,x:(t.left+t.right)/2},a="ag-l-p-p";a+="-"+(o.x>i.x?"l":"r"),a+="-"+(o.y>i.y?"b":"t"),e.classList.add(a)}}(e),e.classList.add("is-applied"),async function(e,t,n){var r=null!=e.getAttribute("ag-l-p-c")&&null==e.getAttribute("ag-l-p-o");if(e.getAttribute("ag-l-p-c")==n&&r)return;for(var o=0;o<e.childNodes.length;o++){var i=e.childNodes[o],a=null;if(u.lastIndex=0,i.textContent&&null!=(a=u.exec(i.textContent))){r&&e.setAttribute("ag-l-p-o",a[0]),u.lastIndex=0;var s=Math.round(parseFloat(e.getAttribute("ag-l-p"))*t.Constant);return void(i.textContent=i.textContent.replace(a[0],t.formatter?t.formatter(s):s.toString()))}}}(e,a,l))}))}}var u=/(([^A-z0-9]|[A-Z]|[A-Z]{3})*\s?[0-9\,\.]+)/gm;async function d(e){var t="metric"==b().messurement,n=t?document.querySelectorAll("[ag-l-m]:not(.is-applied)"):document.querySelectorAll("[ag-l-m]");t?setTimeout((function(){n&&n.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||(f(e,e),e.classList.add("is-applied"))}))}),e?500:0):n&&n.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||(e.dispatchEvent(new CustomEvent("ag.language.messurement.revert")),e.classList.remove("is-applied"))}))}async function f(e,t,r,o,i){if(!o||!i){if(function(e){var t=n.unitConvertionSchema.haveValidAttribute(e)?n.unitConvertionSchema.getLabelForAttribute(e).match(n.unitConvertionSchema.notationExpression):null;return null!=t}(e)){var a=n.unitConvertionSchema.getLabelForAttribute(e),s=await p(a,1);n.unitConvertionSchema.setLabelForAttribute(e,s.content);var l=n.unitConvertionSchema.getValueForAttribute(e),c=await h(l,2,s.units[0]);n.unitConvertionSchema.setValueForAttribute(e,c.content),t.addEventListener("ag.language.messurement.revert",(function(){n.unitConvertionSchema.setLabelForAttribute(e,a),n.unitConvertionSchema.setValueForAttribute(e,l)}))}else e?.childNodes?.length>0&&e.childNodes.forEach((async function(e){if(e?.textContent&&function(e){return n.unitConvertionSchema.expression.test(e.textContent)||n.unitConvertionSchema.notationExpression.test(e.textContent)}(e)){var r=e.textContent,o=await p(r);o.success?e.textContent=o.content:(o=await p(e.textContent,1),e.textContent=o.content,f(e.parentElement,t,!1,!0,o.units[0])),t.addEventListener("ag.language.messurement.revert",(function(){e.textContent=r}))}else f(e,t)}));return!1}e?.childNodes?.length>0&&e.childNodes.forEach((async function(e){if(e?.textContent){var n=e.textContent,r=await h(e.textContent,2,i);r.success&&(e.textContent=r.content,t.addEventListener("ag.language.messurement.revert",(function(){e.textContent=n})))}}))}async function p(e,t){var r=[],o=!1;for(var i of(t||(t=0),n.unitConvertions)){var a=await h(e,t,i);e=a.content,o|=a.success,a.success&&r.push(i),n.unitConvertionSchema.notationExpressions[i.unit].lastIndex=-1,n.unitConvertionSchema.notationOnlyExpressions[i.unit].lastIndex=-1}return{content:e,success:o,units:r}}async function h(e,t,r){for(var o=null,i=!1;null!=(o=g(e,r,t));){i=!0;var a=1==t?0:parseFloat(n.unitConvertionSchema.getValue(o.groups.V)),s=o.groups.N,l=o.index,c=l+o[0].length,u=(1!=t?o[0].replaceAll(o.groups.V,n.unitConvertionSchema.formatValue(a*r.constant)):o[0]).replaceAll(s,r.tragetUnit);if(2==t&&r.targetNotation&&(u+=" "+r.targetNotation),e=e.substring(0,l)+u+e.substring(c),2==t)return{content:e,success:i}}return{content:e,success:i}}function g(e,t,r){return 0==r?n.unitConvertionSchema.notationExpressions[t.unit].exec(e):1==r?n.unitConvertionSchema.notationOnlyExpressions[t.unit].exec(e):2==r?(n.unitConvertionSchema.valueExpression.lastIndex=-1,n.unitConvertionSchema.valueExpression.exec(e)):null}async function m(t){y("US").split(" ").map((function(e){t.classList.add(e)})),document.body.addEventListener("ag.language.update",(function(e){t.className=t.className.replace(/fflag\-[A-Z]{1,2}/gi,""),y(e.detail.code).split(" ").map((function(e){t.classList.add(e)}));b()})),t.addEventListener("click",(async function(r){e||(e=await async function(){var e,t,r=new S("span"),o=r.n("span");function i(e){L(t,"Language","language",e,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e?e.localLabel?e.localLabel:e.label:""}))}L(o,"Location","code",n.presets,(function(e,t){e.n("i").a("class",y(t.code)),e.n("b").h(t.localLabel?t.localLabel:t.label)}),(function(t,r){return e.a("class",y(t.code)),i(n.languages.filter((function(e){return Array.isArray(t.language)?t.language.indexOf(e.code)>-1:e.code==t.language}))),r||document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:t})),t.localLabel?t.localLabel:t.label})),e=o.n("i"),t=r.n("span"),i(n.languages),L(r.n("span"),"Currency","currency",n.currencies,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),L(r.n("span"),"Property Messurement","messurement",n.units,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),L(r.n("span"),"Distance Messurement","messurement",n.units,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),r.node.setAttribute("ag-language-select",""),document.body.appendChild(r.node);var a=b();a?.code&&document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:a}));return r}()),r.stopPropagation(),async function(t){var n=t.getBoundingClientRect();e.node.style.top=Math.floor(n.top-8)+"px",e.node.style.right="calc(100% - "+Math.floor(n.right+8)+"px)",e.node.querySelectorAll(".active")?.forEach((function(e){e.classList.remove("active")})),e.node.classList.add("active")}(t),document.body.addEventListener("click",v)}))}function v(t){t.stopPropagation(),null==t.target.closest("[ag-language-select],[ag-language]")&&(document.body.removeEventListener("click",v),async function(t){e.node.classList.remove("active")}(t.target))}function y(e){return"fflag ff-lg fflag-"+e}function b(){var e=window.localStorage.AGLANGUAGE,t={};return e&&""!=e&&(t=JSON.parse(e)),t}var x=null,w=null;function E(e,t){var n=b();if(null==n&&(n={}),!n[e]||n[e]!=t){n[e]=t,window.localStorage.setItem("AGLANGUAGE",JSON.stringify(n)),null!=x&&clearTimeout(C),x=setTimeout((async function(){x=null,await C(e),null!=w&&(w(),w=null)}),100);var r=w;w=function(){null!=r&&r(),document.body.dispatchEvent(new CustomEvent("ag.language.change."+e))}}}async function C(e){var n=b();JSON.stringify(t)!=JSON.stringify(n)&&(t=n,n&&n.code&&await window.agRequest.POST("/services/agoraClient.ashx",Object.assign({type:"SET"},n)))}var A={};function L(t,n,r,o,i,a){var s=n.toLowerCase().replace(/[^A-z0-9]/gi,""),l=!!A["itemList"+s];l||t.h(n);var c=l?A["itemList"+s]:A["itemList"+s]=t.n("span"),u=l?A["itemListValue"+s]:A["itemListValue"+s]=c.n("label");if(u.h("Selected Value"),!l){u.cl((function(t){t.stopPropagation(),e.node.querySelectorAll(".active")?.forEach((function(e){e!=u.node&&e.classList.remove("active")})),u.node.classList.contains("active")?u.node.classList.remove("active"):u.node.classList.add("active")}))}var d=l?A["itemOptions"+s]:A["itemOptions"+s]=c.n("span");d.h(""),o.map((function(e){var t=d.n("label");t.cl((function(){u.node.classList.remove("active"),E(r,e.code),u.h(a(e))})),i(t,e)})),r&&""!=r&&(A["General"+s]||(A["General"+s]=function(e){document.body.dispatchEvent(new CustomEvent("ag.language.update."+s,{detail:e.detail}))},document.body.addEventListener("ag.language.update",A["General"+s])),A["Field"+s]||(A["Field"+s]=function(e){var t=e.detail[r],n=Array.isArray(t)?t[0]:t,i=o.find((function(e,t){return e.code==n}));a&&(E(r,n),u.h(a(i,!0)))},document.body.addEventListener("ag.language.update."+s,A["Field"+s])))}function S(e){return this.node=document.createElement(e),this}async function T(e,t){var n="";for(var r in t)n=n+(""!=n?"&":"")+r+"="+t[r];return e+=e.indexOf("?")>-1?"&":"?"+n,(await fetch(e,{method:"GET",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()}S.prototype.a=function(e,t){return this.node.setAttribute(e,t),this},S.prototype.n=function(e){var t=new S(e);return this.node.appendChild(t.node),t},S.prototype.h=function(e){return this.node.innerHTML=e,this},S.prototype.cl=function(e){return this.node.removeEventListener("click",e),this.node.addEventListener("click",e),this},window.agLanguage={refresh:function(){document.body.dispatchEvent(new CustomEvent("ag.language.refresh.currency"))}},async function(){document.querySelectorAll("[ag-language]").forEach(m);var e=b();if(e?.code)document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:e}));else{for(var t in e=n.presets.filter((function(e){return"US"==e.code}))[0])E(t,Array.isArray(e[t])?e[t][0]:e[t]);document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:e}))}c(!0),e.language&&-1==e.language.indexOf("en")?o():(r=Object.assign({},e),i({Locale:"en_US"})),async function(){document.body.addEventListener("ag.language.change.language",(function(){o()})),document.body.addEventListener("ag.language.change.currency",(function(){c()})),document.body.addEventListener("ag.language.change.messurement",(function(){d()})),document.body.addEventListener("ag.lazy.refresh",(function(){d()})),document.body.addEventListener("ag.language.refresh.currency",(function(){c()}))}(),n.unitConvertionSchema=await async function(){var e="",t="",r={notationExpressions:{},notationOnlyExpressions:{},getValue:function(e){return parseFloat(e.replaceAll(/[^0-9\\.]/gi,""))},formatValue:function(e){return e.toLocaleString("en-US",{maximumFractionDigits:2})},haveValidAttribute:function(e){return!!e.hasAttribute&&e.hasAttribute("data-th")},getLabelForAttribute:function(e){return e.getAttribute?e.getAttribute("data-th"):""},setLabelForAttribute:function(e,t){e.setAttribute&&e.setAttribute("data-th",t)},getValueForAttribute:function(e){return e.innerText},setValueForAttribute:function(e,t){e.innerText=t}};return n.unitConvertions.forEach((function(n){var o="",i="";n.notation.forEach((function(e){i+=(""!=i?"|":"")+"((?<N>"+e.replaceAll(/\s/gi,"\\s").replaceAll(/([^0-9A-z])/gi,"\\$1")+")(\\s|[^A-z]|$))",o+=(""!=o?"|":"")+"((?<V>[0-9\\,\\.]+)(\\n|\\s)*(?<N>"+e.replaceAll(/\s/gi,"\\s").replaceAll(/([^0-9A-z])/gi,"\\$1")+")(\\s|[^A-z]|$))"})),r.notationExpressions[n.unit]=new RegExp(o,"gmi"),r.notationOnlyExpressions[n.unit]=new RegExp(i,"gmi"),e+=(""!=e?"|":"")+"("+o+")",t+=(""!=t?"|":"")+"("+i+")"})),r.expression=new RegExp(e,"gmi"),r.notationExpression=new RegExp(t,"gmi"),r.valueExpression=new RegExp("((?<V>[0-9\\,]+(\\.[0-9]+)?)(\\n|\\s)*)","gmi"),r}(),d(!0)}()}(),$(document).on("change",'[data-ck-propertylist] [data-sort-object="CMNCMN"]',{},(function(){e($(this).parents("[data-ck-propertylist]:first"),$(this).parents("[data-ck-property-url]:first").data("ck-property-url"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-key"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-layout"))}))}(),function(){function e(e){setTimeout((function(){var t=$(e).closest("[data-search-form]"),n=composeUrlQuery({select:t}),r=t.data("search-form"),o=$('[data-sort-object="'+r+'"]'),i=t.data("default-search"),a=t.data("default-sort");if(void 0!==i&&""!=i&&-1==n.indexOf("/address-")&&-1==n.indexOf("/mls-")&&(n+=i),o.length>0){var s=o.val();n+=null!=s&&""!=s?s:""}else void 0!==a&&null!=a&&""!=a&&(n+=a);t.triggerHandler("search",[{query:n}])}),200)}$(document).on("click","[data-search-form] [data-search-button]",{},(function(){e(this)})),$(document).on("keydown","[data-search-form] [data-search-action]",{},(function(t){13==t.keyCode&&e(this)})),$("[data-search-form]").on("search",(function(e,n){var r=$(this),o=r.data("search-prefix"),i=t(o)&&"undefined"!=o?o:function(e){switch(e){case"PROPERTY":return"/properties";case"PROPERTYRENT":return"/property-search-map-on-rent";case"PROPERTYSOLD":return"/property-search-map/sold";case"AGENT":case"AGENTTEAM":return"/real-estate-agents";case"OFFICE":return"/real-estate-offices";case"BLOG":return"/blog/search"}return"/"}(r.data("search-form"));/^\/\//.test((null!=i&&""!=i&&"undefined"!=i?i:"")+n.query)||(window.location=(null!=i&&""!=i&&"undefined"!=i?i:"")+n.query)}))}(),window.agRequest={GET:async function(e,t){var n="";for(var r in t)n=n+(""!=n?"&":"")+r+"="+t[r];return e+=e.indexOf("?")>-1?"&":"?"+n,(await fetch(e,{method:"GET",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()},POST:async function(e,t){var n=new URLSearchParams;for(var r in t)n.append(r,t[r]);return(await fetch(e,{method:"POST",cache:"no-cache",body:n})).json()}},async function(){async function e(){document.querySelectorAll('[data-src]:not(.ag-lazy):not(.no-ag):not([data-src*="{{"])').forEach((function(e,n){e.classList.add("ag-lazy");var r=function(){!async function(e,n){var r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";if(await async function(e){var t=e.getBoundingClientRect(),n=document.body,r=document.documentElement,o=window.pageYOffset||r.scrollTop||n.scrollTop,i=(window.pageXOffset||r.scrollLeft||n.scrollLeft,r.clientTop||n.clientTop||0),a=(r.clientLeft||n.clientLeft,t.top+o-i),s=t.bottom+o-i;let l=o,c=l+window.innerHeight;return s>l&&a<c}(e)){if(null==e)return;var o=await async function(e,n){if(null==n)return null;var r=n.hasAttribute("data-ratio-auto");if(r)return{url:e};var o=await t(n,16,9);if(null==o)return null;var i=/.*\?(.*?(mh|mw)\=(\d+))*/gi.exec(e),a="";null!=n.getAttribute("data-crop")&&(a+="&mode=crop");e.indexOf("/"),0;return null!=i?{url:e,size:o}:{url:`${e}?`+(o.width>0?`mw=${o.width}`+(o.height>0?"&":""):"")+(o.height>0?`mh=${o.height}`:"")+`${a}`,size:o}}(e.getAttribute("data-src"),e);"VIDEO"==e.nodeName?setTimeout((function(){e.setAttribute("src",o.url)}),1e4):"OBJECT"==e.nodeName||"AUDIO"==e.nodeName?e.setAttribute("src",o.url):"IMG"==e.nodeName?(e.addEventListener("load",(function(){e.getAttribute("src")!=r&&e.classList.add("ag-lazy-s")})),e.setAttribute("src",r),null!=o&&(o.size&&(o.size.width>0&&e.setAttribute("width",o.size.width),o.size.height>0&&e.setAttribute("height",o.size.height)),e.setAttribute("src",o.url))):e.style["background-image"]=`url('${o.url}')`,n()}new IntersectionObserver((function(){console.log(e,"View")}),{root:null,rootMargin:"0px",threshold:.1})}(e,(function(){document.body.removeEventListener("ag.lazy",r)}))};document.body.addEventListener("ag.lazy",r),r()}))}async function t(e,n,r){if(null==e)return null;var o=e.getBoundingClientRect(),i=e.getAttribute("data-ratio"),a=null;i&&null!=i&&null!=(a=/^(?<width>[0-9\.]{1,4}):(?<height>[0-9\.]{1,4})$/gi.exec(i))&&(0==(n=parseFloat(a.groups.width))&&(n=-1),0==(r=parseFloat(a.groups.height))&&(r=-1));var s=o.width,l=o.height;return e.classList.contains("ag-lazy")&&(s=e.getAttribute("width"),l=e.getAttribute("height"),null!=s&&null!=s&&""!=s||(s=e.style.width),s=null==s||null==s||""==s?0:parseInt(s.replace(/[^\d]+/gi,"")),l=null==l||null==l||""==l?0:parseInt(l.replace(/[^\d]+/gi,""))),s!=l&&(null==s||null==l||l<s/n*r||s<l/r*n)&&(s>0?l=s/n*r:s=l/r*n),(s>0||n<0)&&(l>0||r<0)?(s=Math.floor(s),l=Math.floor(l),{width:n<0?0:s+(10-s%10),height:r<0?0:l+(10-l%10)}):await t(e.parentElement,n,r)}async function n(){if(null!=document.querySelector(".burger-c")){async function e(){document.querySelector(".burger-c").classList.contains("item-n-2")&&(document.querySelector(".burger-c").classList.remove("item-n-2"),document.querySelector(".burger-c").classList.add("item-n-1"));const e=document.querySelector(".item-uc");document.querySelector(".item-h").querySelector("nav").insertBefore(e,document.querySelector(".item-h").querySelector("nav").firstChild)}window.innerWidth<=1024&&e(),window.innerWidth>1024&&async function(){document.querySelector(".burger-c").classList.contains("item-n-1")&&(document.querySelector(".burger-c").classList.remove("item-n-1"),document.querySelector(".burger-c").classList.add("item-n-2"));const e=document.querySelector(".item-uc");document.querySelector(".item-h").appendChild(e)}(),document.querySelector(".burger-c ~ nav").offsetWidth<document.querySelector(".burger-c ~ nav").scrollWidth&&e()}}document.addEventListener("DOMContentLoaded",(async function(){document.body.addEventListener("ag.lazy.refresh",e),document.body.addEventListener("ag.refresh",e);var t=new CustomEvent("ag.lazy.refresh");document.body.dispatchEvent(t),document.addEventListener("scroll",(function(e){var t=new CustomEvent("ag.lazy");document.body.dispatchEvent(t)})),t=new CustomEvent("ag.lazy"),document.body.dispatchEvent(t),window.agLazy={refresh:function(){var e=new CustomEvent("ag.lazy.refresh");document.body.dispatchEvent(e)},validate:function(){var e=new CustomEvent("ag.lazy");document.body.dispatchEvent(e)}}})),async function(){null!=document.querySelector(".item-acc-i")&&document.querySelectorAll(".item-acc-i").forEach((e=>{const t=e.closest(".item-acc-c");e.classList.contains("open")&&(t.style.maxHeight=t.scrollHeight+"px"),e.addEventListener("click",(()=>{e.classList.toggle("open"),e.classList.contains("open")?t.style.maxHeight=t.scrollHeight+"px":e.classList.contains("open")||(t.style.maxHeight=document.querySelector(".item-acc-i").offsetHeight+"px")}))}))}(),async function(){null!=document.querySelector(".item-tab-b")&&document.querySelectorAll(".item-tab-b").forEach(((e,t)=>{e.addEventListener("click",(()=>{const n=document.querySelectorAll(".item-tab-c"),r=e.parentElement,o=r.parentElement;r.querySelectorAll(".item-tab-b").forEach((e=>{e.classList.remove("active")})),o.querySelectorAll(".item-tab-c").forEach((e=>{e.classList.remove("active"),n[t].classList.add("active")})),e.classList.add("active")}))}))}(),async function(){if(null!=document.querySelector(".item-sea")){document.querySelectorAll(".con-menu a").forEach((function(e){e.addEventListener("click",(function(){document.querySelector(".label-con").setAttribute("data-country",e.innerHTML),e.closest(".item-dr-c").previousElementSibling.classList.contains("active")&&e.closest(".item-dr-c").previousElementSibling.classList.remove("active")}))}));const t=document.querySelectorAll(".item-dr > .item-dr-la");async function e(){window.innerWidth<=1024&&(document.querySelector(".item-onstxt").addEventListener("click",(function(){document.body.classList.add("srch-opnd")})),document.querySelectorAll(".cancel-btn").forEach((function(e){e.addEventListener("click",(function(){document.body.classList.remove("srch-opnd")}))})))}t.forEach(((e,n)=>{e.addEventListener("click",(()=>{var r;r=n,e.classList.toggle("active"),t.forEach(((e,t)=>{t!==r&&e.classList.remove("active")}))}))})),window.addEventListener("mouseup",(function(e){t.forEach((t=>{e.target.closest(".item-dr-la")||e.target.closest(".item-dr-c")||t.classList.remove("active")}))})),document.querySelectorAll(".item-cl").forEach((function(e){e.addEventListener("click",(function(){e.closest(".item-dr-c").previousElementSibling.classList.contains("active")&&e.closest(".item-dr-c").previousElementSibling.classList.remove("active")}))})),e(),window.addEventListener("resize",e)}}(),window.addEventListener("scroll",(async function(){window.scrollY>10?document.body.classList.add("scroll"):document.body.classList.remove("scroll")})),n(),window.addEventListener("resize",n),async function(){var e=document.querySelectorAll(".a-b-1, .a-b-2, .a-b-3, .a-b-4, .a-b-5");null!=e&&e.forEach((e=>{e.addEventListener("click",(function(e){var t=e.offsetX,n=e.offsetY;if(document.getElementsByClassName("ripple").length<10){var r=document.createElement("span");r.classList.add("ripple"),r.style.left=t+"px",r.style.top=n+"px",this.appendChild(r),setTimeout((function(){r.remove()}),1e3)}}))}))}(),async function(){var e=document.querySelectorAll(".video-play");null!=e&&e.forEach((e=>{e.addEventListener("playing",(function(){e.closest("figure").classList.add("no-btn")})),e.addEventListener("pause",(function(){e.closest("figure").classList.remove("no-btn")}))}))}()}(),$(document).on("click","[data-for]",(function(e){try{var t=$(this).data("for");$('[for="'+t+'"]').trigger("click")}catch(e){}})),async function(){var e=!1;async function t(){var e=null;return null!=window.localStorage.getItem("AGUSER")&&(e=JSON.parse(window.localStorage.getItem("AGUSER"))),e}async function n(e){if(null==e)window.localStorage.removeItem("AGUSER"),document.body.dispatchEvent(new CustomEvent("ag.user.clear"));else if(e.Guid){var t={};t.Guid=e.Guid,t.Name=e.Name,t.FirstName=e.FirstName,t.LastName=e.LastName,t.Email=e.Email,t.Phone=e.Phone,t.MobilePhone=e.MobilePhone,window.localStorage.setItem("AGUSER",JSON.stringify(t)),async function(){}()}}async function r(){document.querySelectorAll("[ag-user]").forEach((function(n){!async function(n){n.classList.add("is-applied");n.cloneNode(!0);var r=await t();if(null!=r){!async function(){e?o():document.body.addEventListener("ag.sync.verified.contact",(function(){o()}));document.body.addEventListener("ag.lazy.refresh",(function(){o()})),document.body.addEventListener("ag.user.refresh.collection",(function(){o(!0)})),document.body.addEventListener("ag.user.clear.collection",(function(){window.localStorage.removeItem("AGUSERCOLLECTION3")})),document.body.addEventListener("ag.user.clear",(function(){document.body.dispatchEvent(new CustomEvent("ag.user.clear.collection"))}))}();var a=await async function(e){var t=new i("p");t.a("ag-user","");var n=t.n("button");n.a("class","user-logged-in a-b-1 f-s-2 u-logined s-c-p m-l-16 xa-b-w-l r-b"),n.h(e.Name),n.cl((function(e){return e.preventDefault(),n.node.classList.contains("active")?n.node.classList.remove("active"):n.node.classList.add("active"),!1}));var r=t.n("span");return r.n("span").h("Hi, "+e.Name),r.n("input").a("type","hidden").a("id","CONTACT_GUID").a("value",e.Guid),r.n("a").a("href","/dashboard/default.aspx").h("Dashboard"),r.n("span").a("data-modaldialog-src","/dashboard/EditProfile.aspx").a("data-modaldialog-ajax","true").a("data-modaldialog","").h("Edit Profile"),r.n("a").a("href","/dashboard/SignOut.aspx").a("data-agora-icon","").h("Log out").cl((function(){document.body.dispatchEvent(new CustomEvent("ag.user.out"))})),t.node}(r);n.parentElement.insertBefore(a,n),n.remove()}}(n)}))}async function o(e){var t=await async function(e,t){return new Promise((async function(n,r){var o=null,i=t?null:window.localStorage.getItem("AGUSERCOLLECTION"+e);null==i?(o=await window.agRequest.GET("/services/agoraClient.ashx",{type:"USERCOLLECTION",collectionType:e}),window.localStorage.setItem("AGUSERCOLLECTION"+e,JSON.stringify(o)),n(o)):n(o=JSON.parse(i))}))}(3,e);t.Items.reduce((function(e,t){return e?[...e,...t.Items]:[...t.Items]}),[]).forEach((async function(e){!async function(e,t){var n=document.querySelectorAll('[data-perform-action-url*="pk='+e.PK+'"][data-perform-action-url*="rt='+e.RT+'"]');n.forEach((async function(e){e.setAttribute("ag-user-collection",t)}))}(e,3)}))}function i(e){return this.node=document.createElement(e),this}document.body.addEventListener("ag.user.in",(function(e){n(e.detail)})),document.body.addEventListener("ag.user.out",(function(e){n(null)})),i.prototype.a=function(e,t){return this.node.setAttribute(e,t),this},i.prototype.n=function(e){var t=new i(e);return this.node.appendChild(t.node),t},i.prototype.h=function(e){return this.node.innerHTML=e,this},i.prototype.cl=function(e){return this.node.removeEventListener("click",e),this.node.addEventListener("click",e),this},window.agUser={collection:{refresh:function(){document.body.dispatchEvent(new CustomEvent("ag.user.refresh.collection"))}}},r(),document.body.addEventListener("ag.sync.check",(async function(){var n=await t(),r=window.localStorage.getItem("AGSYNC");null==r||null==n||JSON.parse(r).ContactGuid==n.Guid?(document.body.dispatchEvent(new CustomEvent("ag.sync.verified.contact")),e=!0):document.body.dispatchEvent(new CustomEvent("ag.sync.set",{detail:{contactguid:n.Guid,eventType:"contact"}}))})),document.body.addEventListener("ag.sync.verified",(async function(){document.body.dispatchEvent(new CustomEvent("ag.sync.verified.contact")),e=!0}))}(),async function(){async function e(){var e=window.localStorage.getItem("AGSYNC");if(null!=e){var t=JSON.parse(e),n=new Date(t.updatedOn),r=new Date;if(r.setMinutes(r.getMinutes()-1),n>r)return void document.body.dispatchEvent(new CustomEvent("ag.sync.verified"))}!async function(){var e=await window.agRequest.GET("/services/agoraClient.ashx",{type:"SYNC"});e.updatedOn=new Date,window.localStorage.setItem("AGSYNC",JSON.stringify(e)),document.body.dispatchEvent(new CustomEvent("ag.sync.check"))}()}!async function(){document.body.addEventListener("ag.sync.set",(async function(e){await window.agRequest.POST("/services/agoraClient.ashx",Object.assign({type:"SET"},e.detail)),e.detail?.eventType&&document.body.dispatchEvent(new CustomEvent("ag.sync.verified."+e.detail.eventType))})),document.body.addEventListener("ag.sync.invalid",(async function(e){document.body.dispatchEvent(new CustomEvent("ag.sync.reset")),window.location.reload()})),e()}()}()},368:()=>{(async function(){var systemFunctions={};function Interpolation(e,t,n,r=[],o=[],i=(()=>{})){let a=new RegExp("\\{\\{[^\\}]+\\}\\}","gi"),s=e=>{i()},l="";for(let e of t.getAttributeNames()){let n=t.getAttribute(e);null!=n&&u(n,(n=>{t.setAttribute(e,n),c(t)}))}function c(e){null!=e&&(e.classList.contains("aga-fake-contains")||e.classList.contains("ag-fake-inline-contains"))&&(e.classList.remove("ag-fake-contains"),e.classList.remove("ag-fake-inline-contains"),1==e.childNodes[0].nodeType&&e.childNodes[0].remove())}function u(e,r){let o=e.match(a),i=()=>"",c=()=>{r(i())};if(null!=o){l=e;let r=[],a=!1;o.forEach((e=>{let o=e.substring(2,e.length-2);l=l.replace(e,`\${typeof(${o})!='undefined'&&${o}!=null?${o}:''}`);let i=ExtractVariablesTopLevelIdentifiers(o);r.push(...i.filter((e=>r.indexOf(e)<0))),o!=r[r.length-1]&&Watch(t,n,r[r.length-1],((e,t,n)=>{c()})),IsFunction(systemFunctions,o)?(a=!0,ExtractArgumentVariablesForFunctionFromString(o).forEach((e=>{Watch(t,n,e,((e,t,n)=>{c()}))}))):Watch(t,n,o,((e,t,n)=>{c()}))}));let u=new Function(`try{const {${r.join(",")}} = this; return \`${l}\`; }catch(e){ console.error(e); }return '';`).bind(a?interpolateObject(n):n);i=()=>u();let d=s;s=e=>{c(),d(e)}}}t.childNodes.forEach((t=>{if(t.nodeType==Node.ELEMENT_NODE){Interpolation(e,t,n,r,o,(()=>{}));let i=t;for(let e of i.getAttributeNames()){let t=i.getAttribute(e);null!=t&&u(t,(t=>{i.setAttribute(e,t),c(i)}))}}t.nodeType==Node.TEXT_NODE&&null!=t.textContent&&t.textContent.trim().length>0&&(0==t.textContent.indexOf("{{")&&t.textContent==t.parentElement.innerText?u(t.textContent,(e=>{c(t.parentElement),t.parentElement.innerHTML=e})):u(t.textContent,(e=>{c(t.parentElement),t.textContent=e})))})),s(n)}function interpolateObject(e){return Object.assign(e,systemFunctions)}function PreInterpolation(e,t){null==t&&(t=e);let n=t.hasAttribute("ag-fake");if(n)for(let t of e.getAttributeNames()){let n=e.getAttribute(t);null!=n&&n.indexOf("{{")>-1&&e.setAttribute(t,n.replace(/(\{\{)|(\}\})/gi,"")),e.classList.add("ag-fake-inline-contains")}e.childNodes.forEach((e=>{if(e.nodeType==Node.ELEMENT_NODE&&"OPTION"!=e.nodeName){if(PreInterpolation(e,t),n)for(let t of e.getAttributeNames()){let n=e.getAttribute(t);null!=n&&n.indexOf("{{")>-1&&e.setAttribute(t,n.replace(/(\{\{)|(\}\})/gi,""))}}else if(e.nodeType==Node.TEXT_NODE&&null!=e.textContent&&e.textContent.indexOf("{{")>-1&&e.textContent.trim().length>0){let t=document.createElement("i");t.classList.add("ag-fake");let r=e.parentElement;null==r||r.classList.contains("ag-fake-contains")||(r.insertBefore(t,r.firstChild),r.classList.add("ag-fake-contains"),n&&(e.textContent=e.textContent.replace(/(\{\{)|(\}\})/gi,"")))}}))}function Watch(){}function GetValue(e,t){if(t.indexOf("(")<0&&t.indexOf(".")>-1){let n=t.substring(0,t.indexOf(".")),r=t.substring(t.indexOf(".")+1,t.length);return GetValue(e[n],r)}return t.indexOf("(")>-1?getValueFromFunction(e,t):null!=e?e[t]:void 0}function IsFunction(e,t){return t.indexOf("(")>-1&&"function"==typeof e[getFunctionName(t)]}function GetProxyObject(e){if(void 0===e||null==e)return e;let t={};for(let n in e)SetPropertyToProxyObject(e,t,n);return t}function SetPropertyToProxyObject(e,t,n){"function"==typeof e[n]?t[n]=e[n]:Object.defineProperty(t,n,{get:()=>e[n],set(t){e[n]=t,Notify(null,e,n,!0)},enumerable:!0,configurable:!0})}function SetPropertyDescriptorToProxyObject(e,t,n){Object.defineProperty(e,t,n)}function ConverObjectToArgumentArray(e){let t={arguments:[],values:[]};for(let n in e)t.arguments.push(n),t.values.push(e[n]);return t}function insertAfter(e,t){null!=t.parentNode&&t.parentNode.insertBefore(e,t.nextSibling)}function insertBefore(e,t){t.parentNode.insertBefore(e,t)}let variablesFromStringExpression=new RegExp("((?<string>([\"'`].*?[\"'`]))|(?<boolean>(true|false))|((?<function>[A-z_][A-z0-9.$]+)[(])|(?<identifier>[A-z_][A-z0-9.$]+))","gi"),variableTopLevelIdentifiersExpression=new RegExp("(?<variable>[A-z0-9_\\$]+)(((\\.[^\\s\\=\\&\\|]*)|\\())?","gi");function ExtractVariablesTopLevelIdentifiers(e){let t=[];try{let n=null;for(;null!=(n=variableTopLevelIdentifiersExpression.exec(e));)n.groups&&n.groups.variable&&t.push(n.groups.variable)}catch(e){}return t}function ExtractVariablesFromString(e){let t={functions:[],identifiers:[]};try{let n=null;for(;null!=(n=variablesFromStringExpression.exec(e));)n.groups&&(n.groups.identifier&&t.identifiers.push(n.groups.identifier),n.groups.function&&t.functions.push(n.groups.function))}catch(e){}return t}function ExtractArgumentVariablesForFunctionFromString(e){let t=[],n=e.indexOf("("),r=e.indexOf(")"),o=(n>-1&&e.substring(0,n),e.substring(n+1,r).match(new RegExp("[^,]+","gi")));return null!=o&&o.forEach((e=>{/^(_|[A-z])(_|[A-z]|[0-9]|\$)+$/.test(e.trim())&&t.push(e.trim())})),t}function getFunctionName(e){let t=-1;return(t=e.indexOf("("))>-1?e.substring(0,t):e}function getValueFromFunction(e,t){let n=[],r=t.indexOf("("),o=t.indexOf(")"),i=r>-1?t.substring(0,r):t,a=t.substring(r+1,o).match(new RegExp("[^,]+","gi"));return null!=a&&a.forEach((t=>{n.push(GetValue(e,t))})),"function"==typeof e[i]?e[i].apply(e,n):void 0}function If(e,t,n){t.querySelectorAll("[ag-if]",t).forEach((t=>{let r=[],o=t,i=t.parentElement,a=null,s=[],l="ag-if",c="ag-else-if",u="ag-else";for(;null!=o&&(t==o&&o.hasAttribute(l)||o.hasAttribute(c)||o.hasAttribute(u));){let e=o;e.classList.remove("ag-fake-mask"),o=e.nextElementSibling;let t=e.hasAttribute(l)?l:e.hasAttribute(c)?c:u,n=e.getAttribute(t);e.removeAttribute(t),null!=n&&ExtractVariablesFromString(n).identifiers.forEach((e=>{s.indexOf(e)<0&&s.push(e)})),r.push({node:e.cloneNode(!0),expression:n,position:e.nextSibling,isDefault:t==u}),e.remove()}let d=ConverObjectToArgumentArray(n),f=t=>{d=ConverObjectToArgumentArray(t),null!=a&&a.active.remove();for(let t of r){let r=!1;if(t.isDefault)r=t.isDefault;else{r=new Function(...d.arguments,`return ${t.expression};`)(...d.values)}if(r){a=t;try{let r=p(t.position);if(null!=i){let o=t.node.cloneNode(!0);t.active=o,i.insertBefore(o,r),TransformInternal(e,o,n)}}catch(e){console.log(e)}break}}};function p(e){return null==e||document.contains(e)?e:p(e.previousElementSibling)}for(let e of s)Watch(t,n,e,((e,t,n)=>{t&&f(e)}));f(n)}))}function PreIf(e){let t=e.querySelectorAll("[ag-if]",e),n=e.hasAttribute("ag-fake");t.forEach((e=>{let t=e,r=!1,o="ag-if",i="ag-else-if",a="ag-else";for(;null!=t&&(e==t&&t.hasAttribute(o)||t.hasAttribute(i)||t.hasAttribute(a));){let e=t;!r&&e.hasAttribute("ag-fake")?r=!0:r||!r&&!t.hasAttribute(a)?e.classList.add("ag-fake-mask"):r=!0,n&&(e.removeAttribute(o),e.removeAttribute(i),e.removeAttribute(a)),t=e.nextElementSibling}r||e.classList.remove("ag-fake-mask")}))}function For(html,dom,context){let htmlDocument=html,loops=dom.querySelectorAll("[ag-for]",dom);return loops.forEach((item=>{let fakeItem=item.nextElementSibling,fakeItemCount=0,isfakeItemCountReaded=!1,expression=new RegExp("\\s*([A-z0-9]+)\\s+(in)\\s+([A-z0-9\\.]+)\\s*","gi"),loopConstraint=item.getAttribute("ag-for");if(null==loopConstraint)return;let itratorFinished=item.getAttribute("ag-for-complete"),fieldsAndValue=expression.exec(loopConstraint),itrator=null!=fieldsAndValue?fieldsAndValue[1]:"",collection=null!=fieldsAndValue?fieldsAndValue[3]:"",htmlToClone=item.cloneNode(!0),htmlToCloneParent=item.parentElement,htmlToCloneLocation=item.nextSibling;htmlToClone.removeAttribute("ag-for"),item.remove();let itemElements=[],isDirtyFake=!1,collectionContext=getCollectionObject(context,collection),collectionContextField=getCollectionName(collection);try{SetPropertyDescriptorToProxyObject(collectionContext,`${collectionContextField}$for`,{value:0,writable:!0,enumerable:!0})}catch(e){}let render=e=>{for(let e of itemElements)e.remove();let t=GetValue(e,collection),n=0,r=!1;if(Array.isArray(t)){isDirtyFake=!0,htmlToCloneLocation=removePreFor(fakeItem);for(let e of t){let t=GetProxyObject(context);SetPropertyDescriptorToProxyObject(t,itrator,{get:()=>e,set(t){e=t},enumerable:!0}),SetPropertyDescriptorToProxyObject(t,"row$Index",{value:n+1,writable:!0,enumerable:!0}),SetPropertyDescriptorToProxyObject(t,`${itrator}$Index`,{value:n+1,writable:!0,enumerable:!0});let o=htmlToClone.cloneNode(!0);r?insertAfter(o,itemElements[itemElements.length-1]):(htmlToCloneParent?.insertBefore(o,htmlToCloneLocation),r=!0),TransformInternal(htmlDocument,o,t),itemElements.push(o),n++}try{SetPropertyDescriptorToProxyObject(collectionContext,`${collectionContextField}$for`,{value:Date.now(),writable:!0,enumerable:!0});let e=new CustomEvent("ag-for-completed");htmlToCloneParent?.dispatchEvent(e)}catch(e){}}else void 0===t&&null!=fakeItem&&fakeItem.hasAttribute("ag-for-fake")&&isDirtyFake&&(fakeItem=PreForPartial(fakeItem,htmlToCloneParent,htmlToCloneLocation,fakeItemCount))};if(itratorFinished){let functionName="",value=itratorFinished;if(null!=value&&""!=value){let getParameterName=e=>"this"==e?"sender":e.indexOf(".")>-1?e.replace(".","_"):e,getValue=(e,t)=>{if(t.indexOf("(")<0&&t.indexOf(".")>-1){let n=t.substring(0,t.indexOf(".")),r=t.substring(t.indexOf(".")+1,t.length);return getValue(e[n],r)}return t.indexOf("(")>-1?getValueFromFunction(e,t):e[t]},getFunctionFromCollection=(e,t,n)=>()=>{if(null!=e.__proto__[t])return e.__proto__[t](...n);Object.keys(e).forEach((r=>"object"==typeof e[r]?getFunctionFromCollection(e[r],t,n):"function"==typeof e[r]&&r==t?e[r](...n):void 0))},getValueFromFunction=(e,t)=>{let n=[],r=t.indexOf("("),o=t.indexOf(")"),i=r>-1?t.substring(0,r):t,a=t.substring(r+1,o).match(new RegExp("[^,]+","gi"));return null!=a&&a.forEach((t=>{n.push(getValue(e,t))})),e[i].apply(e,n)};functionName=value.substring(0,value.indexOf("(")>-1?value.indexOf("("):value.length);let expression=new RegExp("(\\((?<params>.*?)\\))");if(expression.test(value)){let paramsString=value.match(expression);if(null!=paramsString&&null!=paramsString&&null!=paramsString.groups){let params=paramsString.groups.params.split(","),paramsItem={};for(let e in params){if("this"==params[e])continue;let t=new RegExp("^(\\'|[0-9])").test(params[e]),n=t?"item_"+e:getParameterName(params[e]);paramsItem[n]=t}Watch(item,collectionContext,`${collectionContextField}$for`,((data,isChange,isUserChange)=>{let args=[];for(var key in params)if("this"==params[key]||"sender"==params[key])args.push(htmlToCloneParent);else if("data"==params[key])args.push(data);else{let paramValue=paramsItem[getParameterName(params[key])]?eval(params[key]):getValue(data,params[key]);args.push(paramValue)}try{if(null!=data[functionName])data[functionName].apply(data,args);else{let e=getFunctionFromCollection(data,functionName,args);null!=e&&e(args)}}catch(e){}}))}}}}function getCollectionObject(e,t){if(t.indexOf("(")<0&&t.indexOf(".")>-1){let n=t.substring(0,t.indexOf(".")),r=t.substring(t.indexOf(".")+1,t.length);return getCollectionObject(e[n],r)}t.indexOf("(");return e}function getCollectionName(e){if(e.indexOf("(")<0&&e.indexOf(".")>-1){e.substring(0,e.indexOf("."));return getCollectionName(e.substring(e.indexOf(".")+1,e.length))}return e}function removePreFor(e){if(null!=e&&e.hasAttribute("ag-for-fake")){htmlToClone.classList.remove("ag-fake-mask");let t=e;for(;null!=t&&t.hasAttribute("ag-for-fake");){isfakeItemCountReaded||fakeItemCount++;let e=t;t=t.nextElementSibling,e.remove()}return isfakeItemCountReaded=!0,t}return e}render(context),Watch(item,context,collection,((e,t,n)=>{t&&render(e)}))})),htmlDocument.innerHTML}function PreForPartial(e,t,n,r){let o=null,i=null,a=!1;for(let s=0;s<r;s++){let r=e.cloneNode(!0);a?insertAfter(r,o):(t?.insertBefore(r,n),a=!0,i=r),o=r}return i}function PreFor(e){e.querySelectorAll("[ag-for][ag-for-fake]:not(.ag-fake-mask)",e).forEach((e=>{if("OPTION"==e.tagName)return;let t=e.cloneNode(!0);t.setAttribute("ag-fake","");let n=1,r=e.getAttribute("ag-for-fake");null!=r?n=parseInt(r):t.setAttribute("ag-for-fake",""),t.removeAttribute("ag-for"),e.removeAttribute("ag-for-fake"),e.classList.add("ag-fake-mask"),PreTransformInternal(t);for(let r=0;r<n;r++)e.parentElement?.appendChild(t.cloneNode(!0))}))}function TransformInternal(e,t,n){For(t,t,n),If(t,t,n),Interpolation(t,t,n)}function PreTransformInternal(e){PreFor(e),PreIf(e),PreInterpolation(e)}async function findRenders(){document.querySelectorAll("[ag-render]:not(.ag-render)").forEach((async function(e,t){attachAction(e)}))}async function attachAction(e){e.classList.add("ag-render");var t=e.getAttribute("ag-render");PreTransformInternal(e);var n="ag.render.hydrate."+t,r=e.innerHTML;document.body.addEventListener(n,(async function(){var n=GetValue(window,t);e.innerHTML=r,TransformInternal(e,e,n)}))}async function requestData(e,t,n){n&&(t=n(t));var r="";for(var o in t)r=r+(""!=r?"&":"")+o+"="+t[o];return e+=e.indexOf("?")>-1?"&":"?"+r,(await fetch(e,{method:"GET",mode:"cors",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()}async function initPage(e,t,n,r,o){n||(n={}),n.PageSize||(n.PageSize=12),n.PageNumber||(n.PageNumber=1);var i=await requestData(t,n,o);window[e]=i,window.agRender.hydrate(e),r&&r(i)}async function nextPage(e,t,n,r,o){n.PageNumber+=1;var i=await requestData(t,n,o);window[e]=i,window.agRender.hydrate(e),r&&r(i)}async function previousPage(e,t,n,r,o){if(n.PageNumber>1){n.PageNumber-=1;var i=await requestData(t,n,o);window[e]=i,window.agRender.hydrate(e),r&&r(i)}}async function morePage(e,t,n,r,o){n.PageNumber+=1;var i=await requestData(t,n,o);window[e].Items.push(...i.Items),window.agRender.hydrate(e),r&&r(i)}async function init(){document.body.addEventListener("ag.render.refresh",findRenders),document.body.addEventListener("ag.refresh",findRenders);var e=new CustomEvent("ag.render.refresh");document.body.dispatchEvent(e),window.agRender={hydrate:function(e){var t=new CustomEvent("ag.render.hydrate."+e);document.body.dispatchEvent(t);t=new CustomEvent("ag.lazy.refresh");document.body.dispatchEvent(t),window.agLanguage.refresh()},next:function(e){var t=new CustomEvent("ag.render."+e+".page.next");document.body.dispatchEvent(t)},previous:function(e){var t=new CustomEvent("ag.render."+e+".page.previous");document.body.dispatchEvent(t)},more:function(e){var t=new CustomEvent("ag.render."+e+".page.more");document.body.dispatchEvent(t)},pagedResult:function(e,t,n,r,o){document.body.addEventListener("ag.render."+e+".page.next",(function(){nextPage(e,t,n,r,o)})),document.body.addEventListener("ag.render."+e+".page.previous",(function(){previousPage(e,t,n,r,o)})),document.body.addEventListener("ag.render."+e+".page.more",(function(){morePage(e,t,n,r,o)})),initPage(e,t,n,r,o)}}}init()})()}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(n.exports,n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};return(()=>{"use strict";__webpack_require__.r(__webpack_exports__);__webpack_require__(440),__webpack_require__(136),__webpack_require__(368),__webpack_require__(264)})(),__webpack_exports__})()));
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQUUydEMsRUFBWWw0QixLQUFTNDNCLG9CQUFvQnJ0QyxFQUFFekQsRUFBU2taLElBQzVFcFgsT0FBT0MsZUFBZS9CLEVBQVNrWixFQUFLLENBQUUwd0IsWUFBWSxFQUFNM25DLElBQUttdkMsRUFBV2w0QixJQUUxRSxFQ05ENDNCLG9CQUFvQnJ0QyxFQUFJLENBQUM0dEMsRUFBS251QixJQUFVcGhCLE9BQU84RixVQUFVMEUsZUFBZW5MLEtBQUtrd0MsRUFBS251QixHQ0NsRjR0QixvQkFBb0J0c0MsRUFBS3hFLElBQ0gsb0JBQVhzeEMsUUFBMEJBLE9BQU9DLGFBQzFDenZDLE9BQU9DLGVBQWUvQixFQUFTc3hDLE9BQU9DLFlBQWEsQ0FBRXRoQyxNQUFPLFdBRTdEbk8sT0FBT0MsZUFBZS9CLEVBQVMsYUFBYyxDQUFFaVEsT0FBTyxHQUFPLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uLi8uLi9BZ29yYSA0LjAvSWRjR2xvYmFsLkFnb3JhLkphdmFTY3JpcHQuUGx1Z0luL01heEpxdWVyeTIuMS4xLmpzIiwid2VicGFjazovLy8uLi9JZGNHbG9iYWwuSUJQLldlYi9qcy9tYXgvRGlhbG9nTW9kYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL0lkY0dsb2JhbC5JQlAuV2ViL2pzL21heC9jb21tb24uanMiLCJ3ZWJwYWNrOi8vLy4uL0lkY0dsb2JhbC5JQlAuV2ViL2pzL21heC9kYXRhYmluZGVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gZmFjdG9yeSgpO1xuXHRcdGZvcih2YXIgaSBpbiBhKSAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZXhwb3J0cyA6IHJvb3QpW2ldID0gYVtpXTtcblx0fVxufSkoc2VsZiwgKCkgPT4ge1xucmV0dXJuICIsIi8qXG4gKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYyLjEuMVxuICogaHR0cDovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCAyMDA1LCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMTQtMDUtMDFUMTc6MTFaXG4gKi9cbiFmdW5jdGlvbihhLGIpe1wib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1hLmRvY3VtZW50P2IoYSwhMCk6ZnVuY3Rpb24oYSl7aWYoIWEuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiKTtyZXR1cm4gYihhKX06YihhKX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7dmFyIGI9YS5sZW5ndGgsYz1fLnR5cGUoYSk7cmV0dXJuXCJmdW5jdGlvblwiPT09Y3x8Xy5pc1dpbmRvdyhhKT8hMToxPT09YS5ub2RlVHlwZSYmYj8hMDpcImFycmF5XCI9PT1jfHwwPT09Ynx8XCJudW1iZXJcIj09dHlwZW9mIGImJmI+MCYmYi0xIGluIGF9ZnVuY3Rpb24gZChhLGIsYyl7aWYoXy5pc0Z1bmN0aW9uKGIpKXJldHVybiBfLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiEhYi5jYWxsKGEsZCxhKSE9PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBfLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYT09PWIhPT1jfSk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGIpe2lmKGhiLnRlc3QoYikpcmV0dXJuIF8uZmlsdGVyKGIsYSxjKTtiPV8uZmlsdGVyKGIsYSl9cmV0dXJuIF8uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBVLmNhbGwoYixhKT49MCE9PWN9KX1mdW5jdGlvbiBlKGEsYil7Zm9yKDsoYT1hW2JdKSYmMSE9PWEubm9kZVR5cGU7KTtyZXR1cm4gYX1mdW5jdGlvbiBmKGEpe3ZhciBiPW9iW2FdPXt9O3JldHVybiBfLmVhY2goYS5tYXRjaChuYil8fFtdLGZ1bmN0aW9uKGEsYyl7YltjXT0hMH0pLGJ9ZnVuY3Rpb24gZygpe1oucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIixnLCExKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsZywhMSksXy5yZWFkeSgpfWZ1bmN0aW9uIGgoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5jYWNoZT17fSwwLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19KSx0aGlzLmV4cGFuZG89Xy5leHBhbmRvK01hdGgucmFuZG9tKCl9ZnVuY3Rpb24gaShhLGIsYyl7dmFyIGQ7aWYodm9pZCAwPT09YyYmMT09PWEubm9kZVR5cGUpaWYoZD1cImRhdGEtXCIrYi5yZXBsYWNlKHViLFwiLSQxXCIpLnRvTG93ZXJDYXNlKCksYz1hLmdldEF0dHJpYnV0ZShkKSxcInN0cmluZ1wiPT10eXBlb2YgYyl7dHJ5e2M9XCJ0cnVlXCI9PT1jPyEwOlwiZmFsc2VcIj09PWM/ITE6XCJudWxsXCI9PT1jP251bGw6K2MrXCJcIj09PWM/K2M6dGIudGVzdChjKT9fLnBhcnNlSlNPTihjKTpjfWNhdGNoKGUpe31zYi5zZXQoYSxiLGMpfWVsc2UgYz12b2lkIDA7cmV0dXJuIGN9ZnVuY3Rpb24gaigpe3JldHVybiEwfWZ1bmN0aW9uIGsoKXtyZXR1cm4hMX1mdW5jdGlvbiBsKCl7dHJ5e3JldHVybiBaLmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYSl7fX1mdW5jdGlvbiBtKGEsYil7cmV0dXJuIF8ubm9kZU5hbWUoYSxcInRhYmxlXCIpJiZfLm5vZGVOYW1lKDExIT09Yi5ub2RlVHlwZT9iOmIuZmlyc3RDaGlsZCxcInRyXCIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0Ym9keVwiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRib2R5XCIpKTphfWZ1bmN0aW9uIG4oYSl7cmV0dXJuIGEudHlwZT0obnVsbCE9PWEuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkrXCIvXCIrYS50eXBlLGF9ZnVuY3Rpb24gbyhhKXt2YXIgYj1LYi5leGVjKGEudHlwZSk7cmV0dXJuIGI/YS50eXBlPWJbMV06YS5yZW1vdmVBdHRyaWJ1dGUoXCJ0eXBlXCIpLGF9ZnVuY3Rpb24gcChhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7ZD5jO2MrKylyYi5zZXQoYVtjXSxcImdsb2JhbEV2YWxcIiwhYnx8cmIuZ2V0KGJbY10sXCJnbG9iYWxFdmFsXCIpKX1mdW5jdGlvbiBxKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtpZigxPT09Yi5ub2RlVHlwZSl7aWYocmIuaGFzRGF0YShhKSYmKGY9cmIuYWNjZXNzKGEpLGc9cmIuc2V0KGIsZiksaj1mLmV2ZW50cykpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50cz17fTtmb3IoZSBpbiBqKWZvcihjPTAsZD1qW2VdLmxlbmd0aDtkPmM7YysrKV8uZXZlbnQuYWRkKGIsZSxqW2VdW2NdKX1zYi5oYXNEYXRhKGEpJiYoaD1zYi5hY2Nlc3MoYSksaT1fLmV4dGVuZCh7fSxoKSxzYi5zZXQoYixpKSl9fWZ1bmN0aW9uIHIoYSxiKXt2YXIgYz1hLmdldEVsZW1lbnRzQnlUYWdOYW1lP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYnx8XCIqXCIpOmEucXVlcnlTZWxlY3RvckFsbD9hLnF1ZXJ5U2VsZWN0b3JBbGwoYnx8XCIqXCIpOltdO3JldHVybiB2b2lkIDA9PT1ifHxiJiZfLm5vZGVOYW1lKGEsYik/Xy5tZXJnZShbYV0sYyk6Y31mdW5jdGlvbiBzKGEsYil7dmFyIGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1wiaW5wdXRcIj09PWMmJnliLnRlc3QoYS50eXBlKT9iLmNoZWNrZWQ9YS5jaGVja2VkOihcImlucHV0XCI9PT1jfHxcInRleHRhcmVhXCI9PT1jKSYmKGIuZGVmYXVsdFZhbHVlPWEuZGVmYXVsdFZhbHVlKX1mdW5jdGlvbiB0KGIsYyl7dmFyIGQsZT1fKGMuY3JlYXRlRWxlbWVudChiKSkuYXBwZW5kVG8oYy5ib2R5KSxmPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUmJihkPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoZVswXSkpP2QuZGlzcGxheTpfLmNzcyhlWzBdLFwiZGlzcGxheVwiKTtyZXR1cm4gZS5kZXRhY2goKSxmfWZ1bmN0aW9uIHUoYSl7dmFyIGI9WixjPU9iW2FdO3JldHVybiBjfHwoYz10KGEsYiksXCJub25lXCIhPT1jJiZjfHwoTmI9KE5ifHxfKFwiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPlwiKSkuYXBwZW5kVG8oYi5kb2N1bWVudEVsZW1lbnQpLGI9TmJbMF0uY29udGVudERvY3VtZW50LGIud3JpdGUoKSxiLmNsb3NlKCksYz10KGEsYiksTmIuZGV0YWNoKCkpLE9iW2FdPWMpLGN9ZnVuY3Rpb24gdihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fFJiKGEpLGMmJihnPWMuZ2V0UHJvcGVydHlWYWx1ZShiKXx8Y1tiXSksYyYmKFwiXCIhPT1nfHxfLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKXx8KGc9Xy5zdHlsZShhLGIpKSxRYi50ZXN0KGcpJiZQYi50ZXN0KGIpJiYoZD1oLndpZHRoLGU9aC5taW5XaWR0aCxmPWgubWF4V2lkdGgsaC5taW5XaWR0aD1oLm1heFdpZHRoPWgud2lkdGg9ZyxnPWMud2lkdGgsaC53aWR0aD1kLGgubWluV2lkdGg9ZSxoLm1heFdpZHRoPWYpKSx2b2lkIDAhPT1nP2crXCJcIjpnfWZ1bmN0aW9uIHcoYSxiKXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEoKT92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19ZnVuY3Rpb24geChhLGIpe2lmKGIgaW4gYSlyZXR1cm4gYjtmb3IodmFyIGM9YlswXS50b1VwcGVyQ2FzZSgpK2Iuc2xpY2UoMSksZD1iLGU9WGIubGVuZ3RoO2UtLTspaWYoYj1YYltlXStjLGIgaW4gYSlyZXR1cm4gYjtyZXR1cm4gZH1mdW5jdGlvbiB5KGEsYixjKXt2YXIgZD1UYi5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsxXS0oY3x8MCkpKyhkWzJdfHxcInB4XCIpOmJ9ZnVuY3Rpb24geihhLGIsYyxkLGUpe2Zvcih2YXIgZj1jPT09KGQ/XCJib3JkZXJcIjpcImNvbnRlbnRcIik/NDpcIndpZHRoXCI9PT1iPzE6MCxnPTA7ND5mO2YrPTIpXCJtYXJnaW5cIj09PWMmJihnKz1fLmNzcyhhLGMrd2JbZl0sITAsZSkpLGQ/KFwiY29udGVudFwiPT09YyYmKGctPV8uY3NzKGEsXCJwYWRkaW5nXCIrd2JbZl0sITAsZSkpLFwibWFyZ2luXCIhPT1jJiYoZy09Xy5jc3MoYSxcImJvcmRlclwiK3diW2ZdK1wiV2lkdGhcIiwhMCxlKSkpOihnKz1fLmNzcyhhLFwicGFkZGluZ1wiK3diW2ZdLCEwLGUpLFwicGFkZGluZ1wiIT09YyYmKGcrPV8uY3NzKGEsXCJib3JkZXJcIit3YltmXStcIldpZHRoXCIsITAsZSkpKTtyZXR1cm4gZ31mdW5jdGlvbiBBKGEsYixjKXt2YXIgZD0hMCxlPVwid2lkdGhcIj09PWI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPVJiKGEpLGc9XCJib3JkZXItYm94XCI9PT1fLmNzcyhhLFwiYm94U2l6aW5nXCIsITEsZik7aWYoMD49ZXx8bnVsbD09ZSl7aWYoZT12KGEsYixmKSwoMD5lfHxudWxsPT1lKSYmKGU9YS5zdHlsZVtiXSksUWIudGVzdChlKSlyZXR1cm4gZTtkPWcmJihZLmJveFNpemluZ1JlbGlhYmxlKCl8fGU9PT1hLnN0eWxlW2JdKSxlPXBhcnNlRmxvYXQoZSl8fDB9cmV0dXJuIGUreihhLGIsY3x8KGc/XCJib3JkZXJcIjpcImNvbnRlbnRcIiksZCxmKStcInB4XCJ9ZnVuY3Rpb24gQihhLGIpe2Zvcih2YXIgYyxkLGUsZj1bXSxnPTAsaD1hLmxlbmd0aDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoZltnXT1yYi5nZXQoZCxcIm9sZGRpc3BsYXlcIiksYz1kLnN0eWxlLmRpc3BsYXksYj8oZltnXXx8XCJub25lXCIhPT1jfHwoZC5zdHlsZS5kaXNwbGF5PVwiXCIpLFwiXCI9PT1kLnN0eWxlLmRpc3BsYXkmJnhiKGQpJiYoZltnXT1yYi5hY2Nlc3MoZCxcIm9sZGRpc3BsYXlcIix1KGQubm9kZU5hbWUpKSkpOihlPXhiKGQpLFwibm9uZVwiPT09YyYmZXx8cmIuc2V0KGQsXCJvbGRkaXNwbGF5XCIsZT9jOl8uY3NzKGQsXCJkaXNwbGF5XCIpKSkpO2ZvcihnPTA7aD5nO2crKylkPWFbZ10sZC5zdHlsZSYmKGImJlwibm9uZVwiIT09ZC5zdHlsZS5kaXNwbGF5JiZcIlwiIT09ZC5zdHlsZS5kaXNwbGF5fHwoZC5zdHlsZS5kaXNwbGF5PWI/ZltnXXx8XCJcIjpcIm5vbmVcIikpO3JldHVybiBhfWZ1bmN0aW9uIEMoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IEMucHJvdG90eXBlLmluaXQoYSxiLGMsZCxlKX1mdW5jdGlvbiBEKCl7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtZYj12b2lkIDB9KSxZYj1fLm5vdygpfWZ1bmN0aW9uIEUoYSxiKXt2YXIgYyxkPTAsZT17aGVpZ2h0OmF9O2ZvcihiPWI/MTowOzQ+ZDtkKz0yLWIpYz13YltkXSxlW1wibWFyZ2luXCIrY109ZVtcInBhZGRpbmdcIitjXT1hO3JldHVybiBiJiYoZS5vcGFjaXR5PWUud2lkdGg9YSksZX1mdW5jdGlvbiBGKGEsYixjKXtmb3IodmFyIGQsZT0oY2NbYl18fFtdKS5jb25jYXQoY2NbXCIqXCJdKSxmPTAsZz1lLmxlbmd0aDtnPmY7ZisrKWlmKGQ9ZVtmXS5jYWxsKGMsYixhKSlyZXR1cm4gZH1mdW5jdGlvbiBHKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGw9dGhpcyxtPXt9LG49YS5zdHlsZSxvPWEubm9kZVR5cGUmJnhiKGEpLHA9cmIuZ2V0KGEsXCJmeHNob3dcIik7Yy5xdWV1ZXx8KGg9Xy5fcXVldWVIb29rcyhhLFwiZnhcIiksbnVsbD09aC51bnF1ZXVlZCYmKGgudW5xdWV1ZWQ9MCxpPWguZW1wdHkuZmlyZSxoLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtoLnVucXVldWVkfHxpKCl9KSxoLnVucXVldWVkKyssbC5hbHdheXMoZnVuY3Rpb24oKXtsLmFsd2F5cyhmdW5jdGlvbigpe2gudW5xdWV1ZWQtLSxfLnF1ZXVlKGEsXCJmeFwiKS5sZW5ndGh8fGguZW1wdHkuZmlyZSgpfSl9KSksMT09PWEubm9kZVR5cGUmJihcImhlaWdodFwiaW4gYnx8XCJ3aWR0aFwiaW4gYikmJihjLm92ZXJmbG93PVtuLm92ZXJmbG93LG4ub3ZlcmZsb3dYLG4ub3ZlcmZsb3dZXSxqPV8uY3NzKGEsXCJkaXNwbGF5XCIpLGs9XCJub25lXCI9PT1qP3JiLmdldChhLFwib2xkZGlzcGxheVwiKXx8dShhLm5vZGVOYW1lKTpqLFwiaW5saW5lXCI9PT1rJiZcIm5vbmVcIj09PV8uY3NzKGEsXCJmbG9hdFwiKSYmKG4uZGlzcGxheT1cImlubGluZS1ibG9ja1wiKSksYy5vdmVyZmxvdyYmKG4ub3ZlcmZsb3c9XCJoaWRkZW5cIixsLmFsd2F5cyhmdW5jdGlvbigpe24ub3ZlcmZsb3c9Yy5vdmVyZmxvd1swXSxuLm92ZXJmbG93WD1jLm92ZXJmbG93WzFdLG4ub3ZlcmZsb3dZPWMub3ZlcmZsb3dbMl19KSk7Zm9yKGQgaW4gYilpZihlPWJbZF0sJGIuZXhlYyhlKSl7aWYoZGVsZXRlIGJbZF0sZj1mfHxcInRvZ2dsZVwiPT09ZSxlPT09KG8/XCJoaWRlXCI6XCJzaG93XCIpKXtpZihcInNob3dcIiE9PWV8fCFwfHx2b2lkIDA9PT1wW2RdKWNvbnRpbnVlO289ITB9bVtkXT1wJiZwW2RdfHxfLnN0eWxlKGEsZCl9ZWxzZSBqPXZvaWQgMDtpZihfLmlzRW1wdHlPYmplY3QobSkpXCJpbmxpbmVcIj09PShcIm5vbmVcIj09PWo/dShhLm5vZGVOYW1lKTpqKSYmKG4uZGlzcGxheT1qKTtlbHNle3A/XCJoaWRkZW5cImluIHAmJihvPXAuaGlkZGVuKTpwPXJiLmFjY2VzcyhhLFwiZnhzaG93XCIse30pLGYmJihwLmhpZGRlbj0hbyksbz9fKGEpLnNob3coKTpsLmRvbmUoZnVuY3Rpb24oKXtfKGEpLmhpZGUoKX0pLGwuZG9uZShmdW5jdGlvbigpe3ZhciBiO3JiLnJlbW92ZShhLFwiZnhzaG93XCIpO2ZvcihiIGluIG0pXy5zdHlsZShhLGIsbVtiXSl9KTtmb3IoZCBpbiBtKWc9RihvP3BbZF06MCxkLGwpLGQgaW4gcHx8KHBbZF09Zy5zdGFydCxvJiYoZy5lbmQ9Zy5zdGFydCxnLnN0YXJ0PVwid2lkdGhcIj09PWR8fFwiaGVpZ2h0XCI9PT1kPzE6MCkpfX1mdW5jdGlvbiBIKGEsYil7dmFyIGMsZCxlLGYsZztmb3IoYyBpbiBhKWlmKGQ9Xy5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxfLmlzQXJyYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0ZSBhW2NdKSxnPV8uY3NzSG9va3NbZF0sZyYmXCJleHBhbmRcImluIGcpe2Y9Zy5leHBhbmQoZiksZGVsZXRlIGFbZF07Zm9yKGMgaW4gZiljIGluIGF8fChhW2NdPWZbY10sYltjXT1lKX1lbHNlIGJbZF09ZX1mdW5jdGlvbiBJKGEsYixjKXt2YXIgZCxlLGY9MCxnPWJjLmxlbmd0aCxoPV8uRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgaS5lbGVtfSksaT1mdW5jdGlvbigpe2lmKGUpcmV0dXJuITE7Zm9yKHZhciBiPVlifHxEKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVuZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdpdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEpfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOl8uZXh0ZW5kKHt9LGIpLG9wdHM6Xy5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVydGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTpZYnx8RCgpLGR1cmF0aW9uOmMuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9Xy5Ud2VlbihhLGoub3B0cyxiLGMsai5vcHRzLnNwZWNpYWxFYXNpbmdbYl18fGoub3B0cy5lYXNpbmcpO3JldHVybiBqLnR3ZWVucy5wdXNoKGQpLGR9LHN0b3A6ZnVuY3Rpb24oYil7dmFyIGM9MCxkPWI/ai50d2VlbnMubGVuZ3RoOjA7aWYoZSlyZXR1cm4gdGhpcztmb3IoZT0hMDtkPmM7YysrKWoudHdlZW5zW2NdLnJ1bigxKTtyZXR1cm4gYj9oLnJlc29sdmVXaXRoKGEsW2osYl0pOmgucmVqZWN0V2l0aChhLFtqLGJdKSx0aGlzfX0pLGs9ai5wcm9wcztmb3IoSChrLGoub3B0cy5zcGVjaWFsRWFzaW5nKTtnPmY7ZisrKWlmKGQ9YmNbZl0uY2FsbChqLGEsayxqLm9wdHMpKXJldHVybiBkO3JldHVybiBfLm1hcChrLEYsaiksXy5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksXy5meC50aW1lcihfLmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxqLnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKX1mdW5jdGlvbiBKKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe1wic3RyaW5nXCIhPXR5cGVvZiBiJiYoYz1iLGI9XCIqXCIpO3ZhciBkLGU9MCxmPWIudG9Mb3dlckNhc2UoKS5tYXRjaChuYil8fFtdO2lmKF8uaXNGdW5jdGlvbihjKSlmb3IoO2Q9ZltlKytdOylcIitcIj09PWRbMF0/KGQ9ZC5zbGljZSgxKXx8XCIqXCIsKGFbZF09YVtkXXx8W10pLnVuc2hpZnQoYykpOihhW2RdPWFbZF18fFtdKS5wdXNoKGMpfX1mdW5jdGlvbiBLKGEsYixjLGQpe2Z1bmN0aW9uIGUoaCl7dmFyIGk7cmV0dXJuIGZbaF09ITAsXy5lYWNoKGFbaF18fFtdLGZ1bmN0aW9uKGEsaCl7dmFyIGo9aChiLGMsZCk7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGp8fGd8fGZbal0/Zz8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGUoaiksITEpfSksaX12YXIgZj17fSxnPWE9PT12YztyZXR1cm4gZShiLmRhdGFUeXBlc1swXSl8fCFmW1wiKlwiXSYmZShcIipcIil9ZnVuY3Rpb24gTChhLGIpe3ZhciBjLGQsZT1fLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGMgaW4gYil2b2lkIDAhPT1iW2NdJiYoKGVbY10/YTpkfHwoZD17fSkpW2NdPWJbY10pO3JldHVybiBkJiZfLmV4dGVuZCghMCxhLGQpLGF9ZnVuY3Rpb24gTShhLGIsYyl7Zm9yKHZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO1wiKlwiPT09aVswXTspaS5zaGlmdCgpLHZvaWQgMD09PWQmJihkPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIikpO2lmKGQpZm9yKGUgaW4gaClpZihoW2VdJiZoW2VdLnRlc3QoZCkpe2kudW5zaGlmdChlKTticmVha31pZihpWzBdaW4gYylmPWlbMF07ZWxzZXtmb3IoZSBpbiBjKXtpZighaVswXXx8YS5jb252ZXJ0ZXJzW2UrXCIgXCIraVswXV0pe2Y9ZTticmVha31nfHwoZz1lKX1mPWZ8fGd9cmV0dXJuIGY/KGYhPT1pWzBdJiZpLnVuc2hpZnQoZiksY1tmXSk6dm9pZCAwfWZ1bmN0aW9uIE4oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2ZvcihmPWsuc2hpZnQoKTtmOylpZihhLnJlc3BvbnNlRmllbGRzW2ZdJiYoY1thLnJlc3BvbnNlRmllbGRzW2ZdXT1iKSwhaSYmZCYmYS5kYXRhRmlsdGVyJiYoYj1hLmRhdGFGaWx0ZXIoYixhLmRhdGFUeXBlKSksaT1mLGY9ay5zaGlmdCgpKWlmKFwiKlwiPT09ZilmPWk7ZWxzZSBpZihcIipcIiE9PWkmJmkhPT1mKXtpZihnPWpbaStcIiBcIitmXXx8altcIiogXCIrZl0sIWcpZm9yKGUgaW4gailpZihoPWUuc3BsaXQoXCIgXCIpLGhbMV09PT1mJiYoZz1qW2krXCIgXCIraFswXV18fGpbXCIqIFwiK2hbMF1dKSl7Zz09PSEwP2c9altlXTpqW2VdIT09ITAmJihmPWhbMF0say51bnNoaWZ0KGhbMV0pKTticmVha31pZihnIT09ITApaWYoZyYmYVtcInRocm93c1wiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZTpcInBhcnNlcmVycm9yXCIsZXJyb3I6Zz9sOlwiTm8gY29udmVyc2lvbiBmcm9tIFwiK2krXCIgdG8gXCIrZn19fXJldHVybntzdGF0ZTpcInN1Y2Nlc3NcIixkYXRhOmJ9fWZ1bmN0aW9uIE8oYSxiLGMsZCl7dmFyIGU7aWYoXy5pc0FycmF5KGIpKV8uZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8emMudGVzdChhKT9kKGEsZSk6TyhhK1wiW1wiKyhcIm9iamVjdFwiPT10eXBlb2YgZT9iOlwiXCIpK1wiXVwiLGUsYyxkKX0pO2Vsc2UgaWYoY3x8XCJvYmplY3RcIiE9PV8udHlwZShiKSlkKGEsYik7ZWxzZSBmb3IoZSBpbiBiKU8oYStcIltcIitlK1wiXVwiLGJbZV0sYyxkKX1mdW5jdGlvbiBQKGEpe3JldHVybiBfLmlzV2luZG93KGEpP2E6OT09PWEubm9kZVR5cGUmJmEuZGVmYXVsdFZpZXd9dmFyIFE9W10sUj1RLnNsaWNlLFM9US5jb25jYXQsVD1RLnB1c2gsVT1RLmluZGV4T2YsVj17fSxXPVYudG9TdHJpbmcsWD1WLmhhc093blByb3BlcnR5LFk9e30sWj1hLmRvY3VtZW50LCQ9XCIyLjEuMVwiLF89ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IF8uZm4uaW5pdChhLGIpfSxhYj0vXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csYmI9L14tbXMtLyxjYj0vLShbXFxkYS16XSkvZ2ksZGI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b1VwcGVyQ2FzZSgpfTtfLmZuPV8ucHJvdG90eXBlPXtqcXVlcnk6JCxjb25zdHJ1Y3RvcjpfLHNlbGVjdG9yOlwiXCIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBSLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YT8wPmE/dGhpc1thK3RoaXMubGVuZ3RoXTp0aGlzW2FdOlIuY2FsbCh0aGlzKX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEpe3ZhciBiPV8ubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGEpO3JldHVybiBiLnByZXZPYmplY3Q9dGhpcyxiLmNvbnRleHQ9dGhpcy5jb250ZXh0LGJ9LGVhY2g6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gXy5lYWNoKHRoaXMsYSxiKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhfLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFIuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5sZW5ndGgsYz0rYSsoMD5hP2I6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGM+PTAmJmI+Yz9bdGhpc1tjXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpfSxwdXNoOlQsc29ydDpRLnNvcnQsc3BsaWNlOlEuc3BsaWNlfSxfLmV4dGVuZD1fLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZixnPWFyZ3VtZW50c1swXXx8e30saD0xLGk9YXJndW1lbnRzLmxlbmd0aCxqPSExO2ZvcihcImJvb2xlYW5cIj09dHlwZW9mIGcmJihqPWcsZz1hcmd1bWVudHNbaF18fHt9LGgrKyksXCJvYmplY3RcIj09dHlwZW9mIGd8fF8uaXNGdW5jdGlvbihnKXx8KGc9e30pLGg9PT1pJiYoZz10aGlzLGgtLSk7aT5oO2grKylpZihudWxsIT0oYT1hcmd1bWVudHNbaF0pKWZvcihiIGluIGEpYz1nW2JdLGQ9YVtiXSxnIT09ZCYmKGomJmQmJihfLmlzUGxhaW5PYmplY3QoZCl8fChlPV8uaXNBcnJheShkKSkpPyhlPyhlPSExLGY9YyYmXy5pc0FycmF5KGMpP2M6W10pOmY9YyYmXy5pc1BsYWluT2JqZWN0KGMpP2M6e30sZ1tiXT1fLmV4dGVuZChqLGYsZCkpOnZvaWQgMCE9PWQmJihnW2JdPWQpKTtyZXR1cm4gZ30sXy5leHRlbmQoe2V4cGFuZG86XCJqUXVlcnlcIisoJCtNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cXEQvZyxcIlwiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihhKX0sbm9vcDpmdW5jdGlvbigpe30saXNGdW5jdGlvbjpmdW5jdGlvbihhKXtyZXR1cm5cImZ1bmN0aW9uXCI9PT1fLnR5cGUoYSl9LGlzQXJyYXk6QXJyYXkuaXNBcnJheSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmYT09PWEud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIV8uaXNBcnJheShhKSYmYS1wYXJzZUZsb2F0KGEpPj0wfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe3JldHVyblwib2JqZWN0XCIhPT1fLnR5cGUoYSl8fGEubm9kZVR5cGV8fF8uaXNXaW5kb3coYSk/ITE6YS5jb25zdHJ1Y3RvciYmIVguY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSxcImlzUHJvdG90eXBlT2ZcIik/ITE6ITB9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI7Zm9yKGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9hK1wiXCI6XCJvYmplY3RcIj09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGE/VltXLmNhbGwoYSldfHxcIm9iamVjdFwiOnR5cGVvZiBhfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGM9ZXZhbDthPV8udHJpbShhKSxhJiYoMT09PWEuaW5kZXhPZihcInVzZSBzdHJpY3RcIik/KGI9Wi5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpLGIudGV4dD1hLFouaGVhZC5hcHBlbmRDaGlsZChiKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpKTpjKGEpKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoYmIsXCJtcy1cIikucmVwbGFjZShjYixkYil9LG5vZGVOYW1lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIudG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihhLGIsZCl7dmFyIGUsZj0wLGc9YS5sZW5ndGgsaD1jKGEpO2lmKGQpe2lmKGgpZm9yKDtnPmYmJihlPWIuYXBwbHkoYVtmXSxkKSxlIT09ITEpO2YrKyk7ZWxzZSBmb3IoZiBpbiBhKWlmKGU9Yi5hcHBseShhW2ZdLGQpLGU9PT0hMSlicmVha31lbHNlIGlmKGgpZm9yKDtnPmYmJihlPWIuY2FsbChhW2ZdLGYsYVtmXSksZSE9PSExKTtmKyspO2Vsc2UgZm9yKGYgaW4gYSlpZihlPWIuY2FsbChhW2ZdLGYsYVtmXSksZT09PSExKWJyZWFrO3JldHVybiBhfSx0cmltOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP1wiXCI6KGErXCJcIikucmVwbGFjZShhYixcIlwiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGQ9Ynx8W107cmV0dXJuIG51bGwhPWEmJihjKE9iamVjdChhKSk/Xy5tZXJnZShkLFwic3RyaW5nXCI9PXR5cGVvZiBhP1thXTphKTpULmNhbGwoZCxhKSksZH0saW5BcnJheTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGw9PWI/LTE6VS5jYWxsKGIsYSxjKX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9K2IubGVuZ3RoLGQ9MCxlPWEubGVuZ3RoO2M+ZDtkKyspYVtlKytdPWJbZF07cmV0dXJuIGEubGVuZ3RoPWUsYX0sZ3JlcDpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkLGU9W10sZj0wLGc9YS5sZW5ndGgsaD0hYztnPmY7ZisrKWQ9IWIoYVtmXSxmKSxkIT09aCYmZS5wdXNoKGFbZl0pO3JldHVybiBlfSxtYXA6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGY9MCxnPWEubGVuZ3RoLGg9YyhhKSxpPVtdO2lmKGgpZm9yKDtnPmY7ZisrKWU9YihhW2ZdLGYsZCksbnVsbCE9ZSYmaS5wdXNoKGUpO2Vsc2UgZm9yKGYgaW4gYSllPWIoYVtmXSxmLGQpLG51bGwhPWUmJmkucHVzaChlKTtyZXR1cm4gUy5hcHBseShbXSxpKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlO3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBiJiYoYz1hW2JdLGI9YSxhPWMpLF8uaXNGdW5jdGlvbihhKT8oZD1SLmNhbGwoYXJndW1lbnRzLDIpLGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShifHx0aGlzLGQuY29uY2F0KFIuY2FsbChhcmd1bWVudHMpKSl9LGUuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxfLmd1aWQrKyxlKTp2b2lkIDB9LG5vdzpEYXRlLm5vdyxzdXBwb3J0Oll9KSxfLmVhY2goXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yXCIuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKGEsYil7VltcIltvYmplY3QgXCIrYitcIl1cIl09Yi50b0xvd2VyQ2FzZSgpfSk7dmFyIGViPS8qXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2MS4xMC4xOVxuICogaHR0cDovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgMjAxMyBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBEYXRlOiAyMDE0LTA0LTE4XG4gKi9cbiAgICBmdW5jdGlvbiAoYSkgeyBmdW5jdGlvbiBiKGEsIGIsIGMsIGQpIHsgdmFyIGUsIGYsIGcsIGgsIGksIGosIGwsIG4sIG8sIHA7IGlmICgoYiA/IGIub3duZXJEb2N1bWVudCB8fCBiIDogTykgIT09IEcgJiYgRihiKSwgYiA9IGIgfHwgRywgYyA9IGMgfHwgW10sICFhIHx8IFwic3RyaW5nXCIgIT0gdHlwZW9mIGEpIHJldHVybiBjOyBpZiAoMSAhPT0gKGggPSBiLm5vZGVUeXBlKSAmJiA5ICE9PSBoKSByZXR1cm4gW107IGlmIChJICYmICFkKSB7IGlmIChlID0gc2IuZXhlYyhhKSkgaWYgKGcgPSBlWzFdKSB7IGlmICg5ID09PSBoKSB7IGlmIChmID0gYi5nZXRFbGVtZW50QnlJZChnKSwgIWYgfHwgIWYucGFyZW50Tm9kZSkgcmV0dXJuIGM7IGlmIChmLmlkID09PSBnKSByZXR1cm4gYy5wdXNoKGYpLCBjIH0gZWxzZSBpZiAoYi5vd25lckRvY3VtZW50ICYmIChmID0gYi5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGcpKSAmJiBNKGIsIGYpICYmIGYuaWQgPT09IGcpIHJldHVybiBjLnB1c2goZiksIGMgfSBlbHNlIHsgaWYgKGVbMl0pIHJldHVybiBfLmFwcGx5KGMsIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSkpLCBjOyBpZiAoKGcgPSBlWzNdKSAmJiB2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSByZXR1cm4gXy5hcHBseShjLCBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZykpLCBjIH0gaWYgKHYucXNhICYmICghSiB8fCAhSi50ZXN0KGEpKSkgeyBpZiAobiA9IGwgPSBOLCBvID0gYiwgcCA9IDkgPT09IGggJiYgYSwgMSA9PT0gaCAmJiBcIm9iamVjdFwiICE9PSBiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHsgZm9yIChqID0geihhKSwgKGwgPSBiLmdldEF0dHJpYnV0ZShcImlkXCIpKSA/IG4gPSBsLnJlcGxhY2UodWIsIFwiXFxcXCQmXCIpIDogYi5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBuKSwgbiA9IFwiW2lkPSdcIiArIG4gKyBcIiddIFwiLCBpID0gai5sZW5ndGg7IGktLTspaltpXSA9IG4gKyBtKGpbaV0pOyBvID0gdGIudGVzdChhKSAmJiBrKGIucGFyZW50Tm9kZSkgfHwgYiwgcCA9IGouam9pbihcIixcIikgfSBpZiAocCkgdHJ5IHsgcmV0dXJuIF8uYXBwbHkoYywgby5xdWVyeVNlbGVjdG9yQWxsKHApKSwgYyB9IGNhdGNoIChxKSB7IH0gZmluYWxseSB7IGwgfHwgYi5yZW1vdmVBdHRyaWJ1dGUoXCJpZFwiKSB9IH0gfSByZXR1cm4gQihhLnJlcGxhY2UoaWIsIFwiJDFcIiksIGIsIGMsIGQpIH0gZnVuY3Rpb24gYygpIHsgZnVuY3Rpb24gYShjLCBkKSB7IHJldHVybiBiLnB1c2goYyArIFwiIFwiKSA+IHcuY2FjaGVMZW5ndGggJiYgZGVsZXRlIGFbYi5zaGlmdCgpXSwgYVtjICsgXCIgXCJdID0gZCB9IHZhciBiID0gW107IHJldHVybiBhIH0gZnVuY3Rpb24gZChhKSB7IHJldHVybiBhW05dID0gITAsIGEgfSBmdW5jdGlvbiBlKGEpIHsgdmFyIGIgPSBHLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7IHRyeSB7IHJldHVybiAhIWEoYikgfSBjYXRjaCAoYykgeyByZXR1cm4gITEgfSBmaW5hbGx5IHsgYi5wYXJlbnROb2RlICYmIGIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKSwgYiA9IG51bGwgfSB9IGZ1bmN0aW9uIGYoYSwgYikgeyBmb3IgKHZhciBjID0gYS5zcGxpdChcInxcIiksIGQgPSBhLmxlbmd0aDsgZC0tOyl3LmF0dHJIYW5kbGVbY1tkXV0gPSBiIH0gZnVuY3Rpb24gZyhhLCBiKSB7IHZhciBjID0gYiAmJiBhLCBkID0gYyAmJiAxID09PSBhLm5vZGVUeXBlICYmIDEgPT09IGIubm9kZVR5cGUgJiYgKH5iLnNvdXJjZUluZGV4IHx8IFcpIC0gKH5hLnNvdXJjZUluZGV4IHx8IFcpOyBpZiAoZCkgcmV0dXJuIGQ7IGlmIChjKSBmb3IgKDsgYyA9IGMubmV4dFNpYmxpbmc7KWlmIChjID09PSBiKSByZXR1cm4gLTE7IHJldHVybiBhID8gMSA6IC0xIH0gZnVuY3Rpb24gaChhKSB7IHJldHVybiBmdW5jdGlvbiAoYikgeyB2YXIgYyA9IGIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsgcmV0dXJuIFwiaW5wdXRcIiA9PT0gYyAmJiBiLnR5cGUgPT09IGEgfSB9IGZ1bmN0aW9uIGkoYSkgeyByZXR1cm4gZnVuY3Rpb24gKGIpIHsgdmFyIGMgPSBiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7IHJldHVybiAoXCJpbnB1dFwiID09PSBjIHx8IFwiYnV0dG9uXCIgPT09IGMpICYmIGIudHlwZSA9PT0gYSB9IH0gZnVuY3Rpb24gaihhKSB7IHJldHVybiBkKGZ1bmN0aW9uIChiKSB7IHJldHVybiBiID0gK2IsIGQoZnVuY3Rpb24gKGMsIGQpIHsgZm9yICh2YXIgZSwgZiA9IGEoW10sIGMubGVuZ3RoLCBiKSwgZyA9IGYubGVuZ3RoOyBnLS07KWNbZSA9IGZbZ11dICYmIChjW2VdID0gIShkW2VdID0gY1tlXSkpIH0pIH0pIH0gZnVuY3Rpb24gayhhKSB7IHJldHVybiBhICYmIHR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBWICYmIGEgfSBmdW5jdGlvbiBsKCkgeyB9IGZ1bmN0aW9uIG0oYSkgeyBmb3IgKHZhciBiID0gMCwgYyA9IGEubGVuZ3RoLCBkID0gXCJcIjsgYyA+IGI7IGIrKylkICs9IGFbYl0udmFsdWU7IHJldHVybiBkIH0gZnVuY3Rpb24gbihhLCBiLCBjKSB7IHZhciBkID0gYi5kaXIsIGUgPSBjICYmIFwicGFyZW50Tm9kZVwiID09PSBkLCBmID0gUSsrOyByZXR1cm4gYi5maXJzdCA/IGZ1bmN0aW9uIChiLCBjLCBmKSB7IGZvciAoOyBiID0gYltkXTspaWYgKDEgPT09IGIubm9kZVR5cGUgfHwgZSkgcmV0dXJuIGEoYiwgYywgZikgfSA6IGZ1bmN0aW9uIChiLCBjLCBnKSB7IHZhciBoLCBpLCBqID0gW1AsIGZdOyBpZiAoZykgeyBmb3IgKDsgYiA9IGJbZF07KWlmICgoMSA9PT0gYi5ub2RlVHlwZSB8fCBlKSAmJiBhKGIsIGMsIGcpKSByZXR1cm4gITAgfSBlbHNlIGZvciAoOyBiID0gYltkXTspaWYgKDEgPT09IGIubm9kZVR5cGUgfHwgZSkgeyBpZiAoaSA9IGJbTl0gfHwgKGJbTl0gPSB7fSksIChoID0gaVtkXSkgJiYgaFswXSA9PT0gUCAmJiBoWzFdID09PSBmKSByZXR1cm4galsyXSA9IGhbMl07IGlmIChpW2RdID0gaiwgalsyXSA9IGEoYiwgYywgZykpIHJldHVybiAhMCB9IH0gfSBmdW5jdGlvbiBvKGEpIHsgcmV0dXJuIGEubGVuZ3RoID4gMSA/IGZ1bmN0aW9uIChiLCBjLCBkKSB7IGZvciAodmFyIGUgPSBhLmxlbmd0aDsgZS0tOylpZiAoIWFbZV0oYiwgYywgZCkpIHJldHVybiAhMTsgcmV0dXJuICEwIH0gOiBhWzBdIH0gZnVuY3Rpb24gcChhLCBjLCBkKSB7IGZvciAodmFyIGUgPSAwLCBmID0gYy5sZW5ndGg7IGYgPiBlOyBlKyspYihhLCBjW2VdLCBkKTsgcmV0dXJuIGQgfSBmdW5jdGlvbiBxKGEsIGIsIGMsIGQsIGUpIHsgZm9yICh2YXIgZiwgZyA9IFtdLCBoID0gMCwgaSA9IGEubGVuZ3RoLCBqID0gbnVsbCAhPSBiOyBpID4gaDsgaCsrKShmID0gYVtoXSkgJiYgKCFjIHx8IGMoZiwgZCwgZSkpICYmIChnLnB1c2goZiksIGogJiYgYi5wdXNoKGgpKTsgcmV0dXJuIGcgfSBmdW5jdGlvbiByKGEsIGIsIGMsIGUsIGYsIGcpIHsgcmV0dXJuIGUgJiYgIWVbTl0gJiYgKGUgPSByKGUpKSwgZiAmJiAhZltOXSAmJiAoZiA9IHIoZiwgZykpLCBkKGZ1bmN0aW9uIChkLCBnLCBoLCBpKSB7IHZhciBqLCBrLCBsLCBtID0gW10sIG4gPSBbXSwgbyA9IGcubGVuZ3RoLCByID0gZCB8fCBwKGIgfHwgXCIqXCIsIGgubm9kZVR5cGUgPyBbaF0gOiBoLCBbXSksIHMgPSAhYSB8fCAhZCAmJiBiID8gciA6IHEociwgbSwgYSwgaCwgaSksIHQgPSBjID8gZiB8fCAoZCA/IGEgOiBvIHx8IGUpID8gW10gOiBnIDogczsgaWYgKGMgJiYgYyhzLCB0LCBoLCBpKSwgZSkgZm9yIChqID0gcSh0LCBuKSwgZShqLCBbXSwgaCwgaSksIGsgPSBqLmxlbmd0aDsgay0tOykobCA9IGpba10pICYmICh0W25ba11dID0gIShzW25ba11dID0gbCkpOyBpZiAoZCkgeyBpZiAoZiB8fCBhKSB7IGlmIChmKSB7IGZvciAoaiA9IFtdLCBrID0gdC5sZW5ndGg7IGstLTspKGwgPSB0W2tdKSAmJiBqLnB1c2goc1trXSA9IGwpOyBmKG51bGwsIHQgPSBbXSwgaiwgaSkgfSBmb3IgKGsgPSB0Lmxlbmd0aDsgay0tOykobCA9IHRba10pICYmIChqID0gZiA/IGJiLmNhbGwoZCwgbCkgOiBtW2tdKSA+IC0xICYmIChkW2pdID0gIShnW2pdID0gbCkpIH0gfSBlbHNlIHQgPSBxKHQgPT09IGcgPyB0LnNwbGljZShvLCB0Lmxlbmd0aCkgOiB0KSwgZiA/IGYobnVsbCwgZywgdCwgaSkgOiBfLmFwcGx5KGcsIHQpIH0pIH0gZnVuY3Rpb24gcyhhKSB7IGZvciAodmFyIGIsIGMsIGQsIGUgPSBhLmxlbmd0aCwgZiA9IHcucmVsYXRpdmVbYVswXS50eXBlXSwgZyA9IGYgfHwgdy5yZWxhdGl2ZVtcIiBcIl0sIGggPSBmID8gMSA6IDAsIGkgPSBuKGZ1bmN0aW9uIChhKSB7IHJldHVybiBhID09PSBiIH0sIGcsICEwKSwgaiA9IG4oZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGJiLmNhbGwoYiwgYSkgPiAtMSB9LCBnLCAhMCksIGsgPSBbZnVuY3Rpb24gKGEsIGMsIGQpIHsgcmV0dXJuICFmICYmIChkIHx8IGMgIT09IEMpIHx8ICgoYiA9IGMpLm5vZGVUeXBlID8gaShhLCBjLCBkKSA6IGooYSwgYywgZCkpIH1dOyBlID4gaDsgaCsrKWlmIChjID0gdy5yZWxhdGl2ZVthW2hdLnR5cGVdKSBrID0gW24obyhrKSwgYyldOyBlbHNlIHsgaWYgKGMgPSB3LmZpbHRlclthW2hdLnR5cGVdLmFwcGx5KG51bGwsIGFbaF0ubWF0Y2hlcyksIGNbTl0pIHsgZm9yIChkID0gKytoOyBlID4gZCAmJiAhdy5yZWxhdGl2ZVthW2RdLnR5cGVdOyBkKyspOyByZXR1cm4gcihoID4gMSAmJiBvKGspLCBoID4gMSAmJiBtKGEuc2xpY2UoMCwgaCAtIDEpLmNvbmNhdCh7IHZhbHVlOiBcIiBcIiA9PT0gYVtoIC0gMl0udHlwZSA/IFwiKlwiIDogXCJcIiB9KSkucmVwbGFjZShpYiwgXCIkMVwiKSwgYywgZCA+IGggJiYgcyhhLnNsaWNlKGgsIGQpKSwgZSA+IGQgJiYgcyhhID0gYS5zbGljZShkKSksIGUgPiBkICYmIG0oYSkpIH0gay5wdXNoKGMpIH0gcmV0dXJuIG8oaykgfSBmdW5jdGlvbiB0KGEsIGMpIHsgdmFyIGUgPSBjLmxlbmd0aCA+IDAsIGYgPSBhLmxlbmd0aCA+IDAsIGcgPSBmdW5jdGlvbiAoZCwgZywgaCwgaSwgaikgeyB2YXIgaywgbCwgbSwgbiA9IDAsIG8gPSBcIjBcIiwgcCA9IGQgJiYgW10sIHIgPSBbXSwgcyA9IEMsIHQgPSBkIHx8IGYgJiYgdy5maW5kLlRBRyhcIipcIiwgaiksIHUgPSBQICs9IG51bGwgPT0gcyA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IC4xLCB2ID0gdC5sZW5ndGg7IGZvciAoaiAmJiAoQyA9IGcgIT09IEcgJiYgZyk7IG8gIT09IHYgJiYgbnVsbCAhPSAoayA9IHRbb10pOyBvKyspIHsgaWYgKGYgJiYgaykgeyBmb3IgKGwgPSAwOyBtID0gYVtsKytdOylpZiAobShrLCBnLCBoKSkgeyBpLnB1c2goayk7IGJyZWFrIH0gaiAmJiAoUCA9IHUpIH0gZSAmJiAoKGsgPSAhbSAmJiBrKSAmJiBuLS0sIGQgJiYgcC5wdXNoKGspKSB9IGlmIChuICs9IG8sIGUgJiYgbyAhPT0gbikgeyBmb3IgKGwgPSAwOyBtID0gY1tsKytdOyltKHAsIHIsIGcsIGgpOyBpZiAoZCkgeyBpZiAobiA+IDApIGZvciAoOyBvLS07KXBbb10gfHwgcltvXSB8fCAocltvXSA9IFouY2FsbChpKSk7IHIgPSBxKHIpIH0gXy5hcHBseShpLCByKSwgaiAmJiAhZCAmJiByLmxlbmd0aCA+IDAgJiYgbiArIGMubGVuZ3RoID4gMSAmJiBiLnVuaXF1ZVNvcnQoaSkgfSByZXR1cm4gaiAmJiAoUCA9IHUsIEMgPSBzKSwgcCB9OyByZXR1cm4gZSA/IGQoZykgOiBnIH0gdmFyIHUsIHYsIHcsIHgsIHksIHosIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEksIEosIEssIEwsIE0sIE4gPSBcInNpenpsZVwiICsgLW5ldyBEYXRlLCBPID0gYS5kb2N1bWVudCwgUCA9IDAsIFEgPSAwLCBSID0gYygpLCBTID0gYygpLCBUID0gYygpLCBVID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgPT09IGIgJiYgKEUgPSAhMCksIDAgfSwgViA9IFwidW5kZWZpbmVkXCIsIFcgPSAxIDw8IDMxLCBYID0ge30uaGFzT3duUHJvcGVydHksIFkgPSBbXSwgWiA9IFkucG9wLCAkID0gWS5wdXNoLCBfID0gWS5wdXNoLCBhYiA9IFkuc2xpY2UsIGJiID0gWS5pbmRleE9mIHx8IGZ1bmN0aW9uIChhKSB7IGZvciAodmFyIGIgPSAwLCBjID0gdGhpcy5sZW5ndGg7IGMgPiBiOyBiKyspaWYgKHRoaXNbYl0gPT09IGEpIHJldHVybiBiOyByZXR1cm4gLTEgfSwgY2IgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsIGRiID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLCBlYiA9IFwiKD86XFxcXFxcXFwufFtcXFxcdy1dfFteXFxcXHgwMC1cXFxceGEwXSkrXCIsIGZiID0gZWIucmVwbGFjZShcIndcIiwgXCJ3I1wiKSwgZ2IgPSBcIlxcXFxbXCIgKyBkYiArIFwiKihcIiArIGViICsgXCIpKD86XCIgKyBkYiArIFwiKihbKl4kfCF+XT89KVwiICsgZGIgKyBcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiICsgZmIgKyBcIikpfClcIiArIGRiICsgXCIqXFxcXF1cIiwgaGIgPSBcIjooXCIgKyBlYiArIFwiKSg/OlxcXFwoKCgnKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGdiICsgXCIpKil8LiopXFxcXCl8KVwiLCBpYiA9IG5ldyBSZWdFeHAoXCJeXCIgKyBkYiArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIGRiICsgXCIrJFwiLCBcImdcIiksIGpiID0gbmV3IFJlZ0V4cChcIl5cIiArIGRiICsgXCIqLFwiICsgZGIgKyBcIipcIiksIGtiID0gbmV3IFJlZ0V4cChcIl5cIiArIGRiICsgXCIqKFs+K35dfFwiICsgZGIgKyBcIilcIiArIGRiICsgXCIqXCIpLCBsYiA9IG5ldyBSZWdFeHAoXCI9XCIgKyBkYiArIFwiKihbXlxcXFxdJ1xcXCJdKj8pXCIgKyBkYiArIFwiKlxcXFxdXCIsIFwiZ1wiKSwgbWIgPSBuZXcgUmVnRXhwKGhiKSwgbmIgPSBuZXcgUmVnRXhwKFwiXlwiICsgZmIgKyBcIiRcIiksIG9iID0geyBJRDogbmV3IFJlZ0V4cChcIl4jKFwiICsgZWIgKyBcIilcIiksIENMQVNTOiBuZXcgUmVnRXhwKFwiXlxcXFwuKFwiICsgZWIgKyBcIilcIiksIFRBRzogbmV3IFJlZ0V4cChcIl4oXCIgKyBlYi5yZXBsYWNlKFwid1wiLCBcIncqXCIpICsgXCIpXCIpLCBBVFRSOiBuZXcgUmVnRXhwKFwiXlwiICsgZ2IpLCBQU0VVRE86IG5ldyBSZWdFeHAoXCJeXCIgKyBoYiksIENISUxEOiBuZXcgUmVnRXhwKFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArIGRiICsgXCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIGRiICsgXCIqKD86KFsrLV18KVwiICsgZGIgKyBcIiooXFxcXGQrKXwpKVwiICsgZGIgKyBcIipcXFxcKXwpXCIsIFwiaVwiKSwgYm9vbDogbmV3IFJlZ0V4cChcIl4oPzpcIiArIGNiICsgXCIpJFwiLCBcImlcIiksIG5lZWRzQ29udGV4dDogbmV3IFJlZ0V4cChcIl5cIiArIGRiICsgXCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICsgZGIgKyBcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyBkYiArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiKSB9LCBwYiA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksIHFiID0gL15oXFxkJC9pLCByYiA9IC9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sIHNiID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sIHRiID0gL1srfl0vLCB1YiA9IC8nfFxcXFwvZywgdmIgPSBuZXcgUmVnRXhwKFwiXFxcXFxcXFwoW1xcXFxkYS1mXXsxLDZ9XCIgKyBkYiArIFwiP3woXCIgKyBkYiArIFwiKXwuKVwiLCBcImlnXCIpLCB3YiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkID0gXCIweFwiICsgYiAtIDY1NTM2OyByZXR1cm4gZCAhPT0gZCB8fCBjID8gYiA6IDAgPiBkID8gU3RyaW5nLmZyb21DaGFyQ29kZShkICsgNjU1MzYpIDogU3RyaW5nLmZyb21DaGFyQ29kZShkID4+IDEwIHwgNTUyOTYsIDEwMjMgJiBkIHwgNTYzMjApIH07IHRyeSB7IF8uYXBwbHkoWSA9IGFiLmNhbGwoTy5jaGlsZE5vZGVzKSwgTy5jaGlsZE5vZGVzKSwgWVtPLmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZSB9IGNhdGNoICh4YikgeyBfID0geyBhcHBseTogWS5sZW5ndGggPyBmdW5jdGlvbiAoYSwgYikgeyAkLmFwcGx5KGEsIGFiLmNhbGwoYikpIH0gOiBmdW5jdGlvbiAoYSwgYikgeyBmb3IgKHZhciBjID0gYS5sZW5ndGgsIGQgPSAwOyBhW2MrK10gPSBiW2QrK107KTsgYS5sZW5ndGggPSBjIC0gMSB9IH0gfSB2ID0gYi5zdXBwb3J0ID0ge30sIHkgPSBiLmlzWE1MID0gZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhICYmIChhLm93bmVyRG9jdW1lbnQgfHwgYSkuZG9jdW1lbnRFbGVtZW50OyByZXR1cm4gYiA/IFwiSFRNTFwiICE9PSBiLm5vZGVOYW1lIDogITEgfSwgRiA9IGIuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYyA9IGEgPyBhLm93bmVyRG9jdW1lbnQgfHwgYSA6IE8sIGQgPSBjLmRlZmF1bHRWaWV3OyByZXR1cm4gYyAhPT0gRyAmJiA5ID09PSBjLm5vZGVUeXBlICYmIGMuZG9jdW1lbnRFbGVtZW50ID8gKEcgPSBjLCBIID0gYy5kb2N1bWVudEVsZW1lbnQsIEkgPSAheShjKSwgZCAmJiBkICE9PSBkLnRvcCAmJiAoZC5hZGRFdmVudExpc3RlbmVyID8gZC5hZGRFdmVudExpc3RlbmVyKFwidW5sb2FkXCIsIGZ1bmN0aW9uICgpIHsgRigpIH0sICExKSA6IGQuYXR0YWNoRXZlbnQgJiYgZC5hdHRhY2hFdmVudChcIm9udW5sb2FkXCIsIGZ1bmN0aW9uICgpIHsgRigpIH0pKSwgdi5hdHRyaWJ1dGVzID0gZShmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5jbGFzc05hbWUgPSBcImlcIiwgIWEuZ2V0QXR0cmlidXRlKFwiY2xhc3NOYW1lXCIpIH0pLCB2LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gZShmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5hcHBlbmRDaGlsZChjLmNyZWF0ZUNvbW1lbnQoXCJcIikpLCAhYS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikubGVuZ3RoIH0pLCB2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSByYi50ZXN0KGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSkgJiYgZShmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5pbm5lckhUTUwgPSBcIjxkaXYgY2xhc3M9J2EnPjwvZGl2PjxkaXYgY2xhc3M9J2EgaSc+PC9kaXY+XCIsIGEuZmlyc3RDaGlsZC5jbGFzc05hbWUgPSBcImlcIiwgMiA9PT0gYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiaVwiKS5sZW5ndGggfSksIHYuZ2V0QnlJZCA9IGUoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIEguYXBwZW5kQ2hpbGQoYSkuaWQgPSBOLCAhYy5nZXRFbGVtZW50c0J5TmFtZSB8fCAhYy5nZXRFbGVtZW50c0J5TmFtZShOKS5sZW5ndGggfSksIHYuZ2V0QnlJZCA/ICh3LmZpbmQuSUQgPSBmdW5jdGlvbiAoYSwgYikgeyBpZiAodHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQgIT09IFYgJiYgSSkgeyB2YXIgYyA9IGIuZ2V0RWxlbWVudEJ5SWQoYSk7IHJldHVybiBjICYmIGMucGFyZW50Tm9kZSA/IFtjXSA6IFtdIH0gfSwgdy5maWx0ZXIuSUQgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEucmVwbGFjZSh2Yiwgd2IpOyByZXR1cm4gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuZ2V0QXR0cmlidXRlKFwiaWRcIikgPT09IGIgfSB9KSA6IChkZWxldGUgdy5maW5kLklELCB3LmZpbHRlci5JRCA9IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS5yZXBsYWNlKHZiLCB3Yik7IHJldHVybiBmdW5jdGlvbiAoYSkgeyB2YXIgYyA9IHR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUgIT09IFYgJiYgYS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7IHJldHVybiBjICYmIGMudmFsdWUgPT09IGIgfSB9KSwgdy5maW5kLlRBRyA9IHYuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPyBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdHlwZW9mIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFYgPyBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpIDogdm9pZCAwIH0gOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYywgZCA9IFtdLCBlID0gMCwgZiA9IGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSk7IGlmIChcIipcIiA9PT0gYSkgeyBmb3IgKDsgYyA9IGZbZSsrXTspMSA9PT0gYy5ub2RlVHlwZSAmJiBkLnB1c2goYyk7IHJldHVybiBkIH0gcmV0dXJuIGYgfSwgdy5maW5kLkNMQVNTID0gdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB0eXBlb2YgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSBWICYmIEkgPyBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYSkgOiB2b2lkIDAgfSwgSyA9IFtdLCBKID0gW10sICh2LnFzYSA9IHJiLnRlc3QoYy5xdWVyeVNlbGVjdG9yQWxsKSkgJiYgKGUoZnVuY3Rpb24gKGEpIHsgYS5pbm5lckhUTUwgPSBcIjxzZWxlY3QgbXNhbGxvd2NsaXA9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIiwgYS5xdWVyeVNlbGVjdG9yQWxsKFwiW21zYWxsb3djbGlwXj0nJ11cIikubGVuZ3RoICYmIEoucHVzaChcIlsqXiRdPVwiICsgZGIgKyBcIiooPzonJ3xcXFwiXFxcIilcIiksIGEucXVlcnlTZWxlY3RvckFsbChcIltzZWxlY3RlZF1cIikubGVuZ3RoIHx8IEoucHVzaChcIlxcXFxbXCIgKyBkYiArIFwiKig/OnZhbHVlfFwiICsgY2IgKyBcIilcIiksIGEucXVlcnlTZWxlY3RvckFsbChcIjpjaGVja2VkXCIpLmxlbmd0aCB8fCBKLnB1c2goXCI6Y2hlY2tlZFwiKSB9KSwgZShmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGMuY3JlYXRlRWxlbWVudChcImlucHV0XCIpOyBiLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIiksIGEuYXBwZW5kQ2hpbGQoYikuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcIkRcIiksIGEucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCAmJiBKLnB1c2goXCJuYW1lXCIgKyBkYiArIFwiKlsqXiR8IX5dPz1cIiksIGEucXVlcnlTZWxlY3RvckFsbChcIjplbmFibGVkXCIpLmxlbmd0aCB8fCBKLnB1c2goXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiKSwgYS5xdWVyeVNlbGVjdG9yQWxsKFwiKiw6eFwiKSwgSi5wdXNoKFwiLC4qOlwiKSB9KSksICh2Lm1hdGNoZXNTZWxlY3RvciA9IHJiLnRlc3QoTCA9IEgubWF0Y2hlcyB8fCBILndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fCBILm1vek1hdGNoZXNTZWxlY3RvciB8fCBILm9NYXRjaGVzU2VsZWN0b3IgfHwgSC5tc01hdGNoZXNTZWxlY3RvcikpICYmIGUoZnVuY3Rpb24gKGEpIHsgdi5kaXNjb25uZWN0ZWRNYXRjaCA9IEwuY2FsbChhLCBcImRpdlwiKSwgTC5jYWxsKGEsIFwiW3MhPScnXTp4XCIpLCBLLnB1c2goXCIhPVwiLCBoYikgfSksIEogPSBKLmxlbmd0aCAmJiBuZXcgUmVnRXhwKEouam9pbihcInxcIikpLCBLID0gSy5sZW5ndGggJiYgbmV3IFJlZ0V4cChLLmpvaW4oXCJ8XCIpKSwgYiA9IHJiLnRlc3QoSC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiksIE0gPSBiIHx8IHJiLnRlc3QoSC5jb250YWlucykgPyBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IDkgPT09IGEubm9kZVR5cGUgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsIGQgPSBiICYmIGIucGFyZW50Tm9kZTsgcmV0dXJuIGEgPT09IGQgfHwgISghZCB8fCAxICE9PSBkLm5vZGVUeXBlIHx8ICEoYy5jb250YWlucyA/IGMuY29udGFpbnMoZCkgOiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIDE2ICYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkKSkpIH0gOiBmdW5jdGlvbiAoYSwgYikgeyBpZiAoYikgZm9yICg7IGIgPSBiLnBhcmVudE5vZGU7KWlmIChiID09PSBhKSByZXR1cm4gITA7IHJldHVybiAhMSB9LCBVID0gYiA/IGZ1bmN0aW9uIChhLCBiKSB7IGlmIChhID09PSBiKSByZXR1cm4gRSA9ICEwLCAwOyB2YXIgZCA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247IHJldHVybiBkID8gZCA6IChkID0gKGEub3duZXJEb2N1bWVudCB8fCBhKSA9PT0gKGIub3duZXJEb2N1bWVudCB8fCBiKSA/IGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgOiAxLCAxICYgZCB8fCAhdi5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKSA9PT0gZCA/IGEgPT09IGMgfHwgYS5vd25lckRvY3VtZW50ID09PSBPICYmIE0oTywgYSkgPyAtMSA6IGIgPT09IGMgfHwgYi5vd25lckRvY3VtZW50ID09PSBPICYmIE0oTywgYikgPyAxIDogRCA/IGJiLmNhbGwoRCwgYSkgLSBiYi5jYWxsKEQsIGIpIDogMCA6IDQgJiBkID8gLTEgOiAxKSB9IDogZnVuY3Rpb24gKGEsIGIpIHsgaWYgKGEgPT09IGIpIHJldHVybiBFID0gITAsIDA7IHZhciBkLCBlID0gMCwgZiA9IGEucGFyZW50Tm9kZSwgaCA9IGIucGFyZW50Tm9kZSwgaSA9IFthXSwgaiA9IFtiXTsgaWYgKCFmIHx8ICFoKSByZXR1cm4gYSA9PT0gYyA/IC0xIDogYiA9PT0gYyA/IDEgOiBmID8gLTEgOiBoID8gMSA6IEQgPyBiYi5jYWxsKEQsIGEpIC0gYmIuY2FsbChELCBiKSA6IDA7IGlmIChmID09PSBoKSByZXR1cm4gZyhhLCBiKTsgZm9yIChkID0gYTsgZCA9IGQucGFyZW50Tm9kZTspaS51bnNoaWZ0KGQpOyBmb3IgKGQgPSBiOyBkID0gZC5wYXJlbnROb2RlOylqLnVuc2hpZnQoZCk7IGZvciAoOyBpW2VdID09PSBqW2VdOyllKys7IHJldHVybiBlID8gZyhpW2VdLCBqW2VdKSA6IGlbZV0gPT09IE8gPyAtMSA6IGpbZV0gPT09IE8gPyAxIDogMCB9LCBjKSA6IEcgfSwgYi5tYXRjaGVzID0gZnVuY3Rpb24gKGEsIGMpIHsgcmV0dXJuIGIoYSwgbnVsbCwgbnVsbCwgYykgfSwgYi5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiAoYSwgYykgeyBpZiAoKGEub3duZXJEb2N1bWVudCB8fCBhKSAhPT0gRyAmJiBGKGEpLCBjID0gYy5yZXBsYWNlKGxiLCBcIj0nJDEnXVwiKSwgISghdi5tYXRjaGVzU2VsZWN0b3IgfHwgIUkgfHwgSyAmJiBLLnRlc3QoYykgfHwgSiAmJiBKLnRlc3QoYykpKSB0cnkgeyB2YXIgZCA9IEwuY2FsbChhLCBjKTsgaWYgKGQgfHwgdi5kaXNjb25uZWN0ZWRNYXRjaCB8fCBhLmRvY3VtZW50ICYmIDExICE9PSBhLmRvY3VtZW50Lm5vZGVUeXBlKSByZXR1cm4gZCB9IGNhdGNoIChlKSB7IH0gcmV0dXJuIGIoYywgRywgbnVsbCwgW2FdKS5sZW5ndGggPiAwIH0sIGIuY29udGFpbnMgPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gKGEub3duZXJEb2N1bWVudCB8fCBhKSAhPT0gRyAmJiBGKGEpLCBNKGEsIGIpIH0sIGIuYXR0ciA9IGZ1bmN0aW9uIChhLCBiKSB7IChhLm93bmVyRG9jdW1lbnQgfHwgYSkgIT09IEcgJiYgRihhKTsgdmFyIGMgPSB3LmF0dHJIYW5kbGVbYi50b0xvd2VyQ2FzZSgpXSwgZCA9IGMgJiYgWC5jYWxsKHcuYXR0ckhhbmRsZSwgYi50b0xvd2VyQ2FzZSgpKSA/IGMoYSwgYiwgIUkpIDogdm9pZCAwOyByZXR1cm4gdm9pZCAwICE9PSBkID8gZCA6IHYuYXR0cmlidXRlcyB8fCAhSSA/IGEuZ2V0QXR0cmlidXRlKGIpIDogKGQgPSBhLmdldEF0dHJpYnV0ZU5vZGUoYikpICYmIGQuc3BlY2lmaWVkID8gZC52YWx1ZSA6IG51bGwgfSwgYi5lcnJvciA9IGZ1bmN0aW9uIChhKSB7IHRocm93IG5ldyBFcnJvcihcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgYSkgfSwgYi51bmlxdWVTb3J0ID0gZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGMgPSBbXSwgZCA9IDAsIGUgPSAwOyBpZiAoRSA9ICF2LmRldGVjdER1cGxpY2F0ZXMsIEQgPSAhdi5zb3J0U3RhYmxlICYmIGEuc2xpY2UoMCksIGEuc29ydChVKSwgRSkgeyBmb3IgKDsgYiA9IGFbZSsrXTspYiA9PT0gYVtlXSAmJiAoZCA9IGMucHVzaChlKSk7IGZvciAoOyBkLS07KWEuc3BsaWNlKGNbZF0sIDEpIH0gcmV0dXJuIEQgPSBudWxsLCBhIH0sIHggPSBiLmdldFRleHQgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYyA9IFwiXCIsIGQgPSAwLCBlID0gYS5ub2RlVHlwZTsgaWYgKGUpIHsgaWYgKDEgPT09IGUgfHwgOSA9PT0gZSB8fCAxMSA9PT0gZSkgeyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgYS50ZXh0Q29udGVudCkgcmV0dXJuIGEudGV4dENvbnRlbnQ7IGZvciAoYSA9IGEuZmlyc3RDaGlsZDsgYTsgYSA9IGEubmV4dFNpYmxpbmcpYyArPSB4KGEpIH0gZWxzZSBpZiAoMyA9PT0gZSB8fCA0ID09PSBlKSByZXR1cm4gYS5ub2RlVmFsdWUgfSBlbHNlIGZvciAoOyBiID0gYVtkKytdOyljICs9IHgoYik7IHJldHVybiBjIH0sIHcgPSBiLnNlbGVjdG9ycyA9IHsgY2FjaGVMZW5ndGg6IDUwLCBjcmVhdGVQc2V1ZG86IGQsIG1hdGNoOiBvYiwgYXR0ckhhbmRsZToge30sIGZpbmQ6IHt9LCByZWxhdGl2ZTogeyBcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogITAgfSwgXCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LCBcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiAhMCB9LCBcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfSB9LCBwcmVGaWx0ZXI6IHsgQVRUUjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGFbMV0gPSBhWzFdLnJlcGxhY2UodmIsIHdiKSwgYVszXSA9IChhWzNdIHx8IGFbNF0gfHwgYVs1XSB8fCBcIlwiKS5yZXBsYWNlKHZiLCB3YiksIFwifj1cIiA9PT0gYVsyXSAmJiAoYVszXSA9IFwiIFwiICsgYVszXSArIFwiIFwiKSwgYS5zbGljZSgwLCA0KSB9LCBDSElMRDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGFbMV0gPSBhWzFdLnRvTG93ZXJDYXNlKCksIFwibnRoXCIgPT09IGFbMV0uc2xpY2UoMCwgMykgPyAoYVszXSB8fCBiLmVycm9yKGFbMF0pLCBhWzRdID0gKyhhWzRdID8gYVs1XSArIChhWzZdIHx8IDEpIDogMiAqIChcImV2ZW5cIiA9PT0gYVszXSB8fCBcIm9kZFwiID09PSBhWzNdKSksIGFbNV0gPSArKGFbN10gKyBhWzhdIHx8IFwib2RkXCIgPT09IGFbM10pKSA6IGFbM10gJiYgYi5lcnJvcihhWzBdKSwgYSB9LCBQU0VVRE86IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBjID0gIWFbNl0gJiYgYVsyXTsgcmV0dXJuIG9iLkNISUxELnRlc3QoYVswXSkgPyBudWxsIDogKGFbM10gPyBhWzJdID0gYVs0XSB8fCBhWzVdIHx8IFwiXCIgOiBjICYmIG1iLnRlc3QoYykgJiYgKGIgPSB6KGMsICEwKSkgJiYgKGIgPSBjLmluZGV4T2YoXCIpXCIsIGMubGVuZ3RoIC0gYikgLSBjLmxlbmd0aCkgJiYgKGFbMF0gPSBhWzBdLnNsaWNlKDAsIGIpLCBhWzJdID0gYy5zbGljZSgwLCBiKSksIGEuc2xpY2UoMCwgMykpIH0gfSwgZmlsdGVyOiB7IFRBRzogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLnJlcGxhY2UodmIsIHdiKS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gXCIqXCIgPT09IGEgPyBmdW5jdGlvbiAoKSB7IHJldHVybiAhMCB9IDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEubm9kZU5hbWUgJiYgYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBiIH0gfSwgQ0xBU1M6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gUlthICsgXCIgXCJdOyByZXR1cm4gYiB8fCAoYiA9IG5ldyBSZWdFeHAoXCIoXnxcIiArIGRiICsgXCIpXCIgKyBhICsgXCIoXCIgKyBkYiArIFwifCQpXCIpKSAmJiBSKGEsIGZ1bmN0aW9uIChhKSB7IHJldHVybiBiLnRlc3QoXCJzdHJpbmdcIiA9PSB0eXBlb2YgYS5jbGFzc05hbWUgJiYgYS5jbGFzc05hbWUgfHwgdHlwZW9mIGEuZ2V0QXR0cmlidXRlICE9PSBWICYmIGEuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIikgfSkgfSwgQVRUUjogZnVuY3Rpb24gKGEsIGMsIGQpIHsgcmV0dXJuIGZ1bmN0aW9uIChlKSB7IHZhciBmID0gYi5hdHRyKGUsIGEpOyByZXR1cm4gbnVsbCA9PSBmID8gXCIhPVwiID09PSBjIDogYyA/IChmICs9IFwiXCIsIFwiPVwiID09PSBjID8gZiA9PT0gZCA6IFwiIT1cIiA9PT0gYyA/IGYgIT09IGQgOiBcIl49XCIgPT09IGMgPyBkICYmIDAgPT09IGYuaW5kZXhPZihkKSA6IFwiKj1cIiA9PT0gYyA/IGQgJiYgZi5pbmRleE9mKGQpID4gLTEgOiBcIiQ9XCIgPT09IGMgPyBkICYmIGYuc2xpY2UoLWQubGVuZ3RoKSA9PT0gZCA6IFwifj1cIiA9PT0gYyA/IChcIiBcIiArIGYgKyBcIiBcIikuaW5kZXhPZihkKSA+IC0xIDogXCJ8PVwiID09PSBjID8gZiA9PT0gZCB8fCBmLnNsaWNlKDAsIGQubGVuZ3RoICsgMSkgPT09IGQgKyBcIi1cIiA6ICExKSA6ICEwIH0gfSwgQ0hJTEQ6IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlKSB7IHZhciBmID0gXCJudGhcIiAhPT0gYS5zbGljZSgwLCAzKSwgZyA9IFwibGFzdFwiICE9PSBhLnNsaWNlKC00KSwgaCA9IFwib2YtdHlwZVwiID09PSBiOyByZXR1cm4gMSA9PT0gZCAmJiAwID09PSBlID8gZnVuY3Rpb24gKGEpIHsgcmV0dXJuICEhYS5wYXJlbnROb2RlIH0gOiBmdW5jdGlvbiAoYiwgYywgaSkgeyB2YXIgaiwgaywgbCwgbSwgbiwgbywgcCA9IGYgIT09IGcgPyBcIm5leHRTaWJsaW5nXCIgOiBcInByZXZpb3VzU2libGluZ1wiLCBxID0gYi5wYXJlbnROb2RlLCByID0gaCAmJiBiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIHMgPSAhaSAmJiAhaDsgaWYgKHEpIHsgaWYgKGYpIHsgZm9yICg7IHA7KSB7IGZvciAobCA9IGI7IGwgPSBsW3BdOylpZiAoaCA/IGwubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gciA6IDEgPT09IGwubm9kZVR5cGUpIHJldHVybiAhMTsgbyA9IHAgPSBcIm9ubHlcIiA9PT0gYSAmJiAhbyAmJiBcIm5leHRTaWJsaW5nXCIgfSByZXR1cm4gITAgfSBpZiAobyA9IFtnID8gcS5maXJzdENoaWxkIDogcS5sYXN0Q2hpbGRdLCBnICYmIHMpIHsgZm9yIChrID0gcVtOXSB8fCAocVtOXSA9IHt9KSwgaiA9IGtbYV0gfHwgW10sIG4gPSBqWzBdID09PSBQICYmIGpbMV0sIG0gPSBqWzBdID09PSBQICYmIGpbMl0sIGwgPSBuICYmIHEuY2hpbGROb2Rlc1tuXTsgbCA9ICsrbiAmJiBsICYmIGxbcF0gfHwgKG0gPSBuID0gMCkgfHwgby5wb3AoKTspaWYgKDEgPT09IGwubm9kZVR5cGUgJiYgKyttICYmIGwgPT09IGIpIHsga1thXSA9IFtQLCBuLCBtXTsgYnJlYWsgfSB9IGVsc2UgaWYgKHMgJiYgKGogPSAoYltOXSB8fCAoYltOXSA9IHt9KSlbYV0pICYmIGpbMF0gPT09IFApIG0gPSBqWzFdOyBlbHNlIGZvciAoOyAobCA9ICsrbiAmJiBsICYmIGxbcF0gfHwgKG0gPSBuID0gMCkgfHwgby5wb3AoKSkgJiYgKChoID8gbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSByIDogMSAhPT0gbC5ub2RlVHlwZSkgfHwgISsrbSB8fCAocyAmJiAoKGxbTl0gfHwgKGxbTl0gPSB7fSkpW2FdID0gW1AsIG1dKSwgbCAhPT0gYikpOyk7IHJldHVybiBtIC09IGUsIG0gPT09IGQgfHwgbSAlIGQgPT09IDAgJiYgbSAvIGQgPj0gMCB9IH0gfSwgUFNFVURPOiBmdW5jdGlvbiAoYSwgYykgeyB2YXIgZSwgZiA9IHcucHNldWRvc1thXSB8fCB3LnNldEZpbHRlcnNbYS50b0xvd2VyQ2FzZSgpXSB8fCBiLmVycm9yKFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIGEpOyByZXR1cm4gZltOXSA/IGYoYykgOiBmLmxlbmd0aCA+IDEgPyAoZSA9IFthLCBhLCBcIlwiLCBjXSwgdy5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSkgPyBkKGZ1bmN0aW9uIChhLCBiKSB7IGZvciAodmFyIGQsIGUgPSBmKGEsIGMpLCBnID0gZS5sZW5ndGg7IGctLTspZCA9IGJiLmNhbGwoYSwgZVtnXSksIGFbZF0gPSAhKGJbZF0gPSBlW2ddKSB9KSA6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBmKGEsIDAsIGUpIH0pIDogZiB9IH0sIHBzZXVkb3M6IHsgbm90OiBkKGZ1bmN0aW9uIChhKSB7IHZhciBiID0gW10sIGMgPSBbXSwgZSA9IEEoYS5yZXBsYWNlKGliLCBcIiQxXCIpKTsgcmV0dXJuIGVbTl0gPyBkKGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IGZvciAodmFyIGYsIGcgPSBlKGEsIG51bGwsIGQsIFtdKSwgaCA9IGEubGVuZ3RoOyBoLS07KShmID0gZ1toXSkgJiYgKGFbaF0gPSAhKGJbaF0gPSBmKSkgfSkgOiBmdW5jdGlvbiAoYSwgZCwgZikgeyByZXR1cm4gYlswXSA9IGEsIGUoYiwgbnVsbCwgZiwgYyksICFjLnBvcCgpIH0gfSksIGhhczogZChmdW5jdGlvbiAoYSkgeyByZXR1cm4gZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGIoYSwgYykubGVuZ3RoID4gMCB9IH0pLCBjb250YWluczogZChmdW5jdGlvbiAoYSkgeyByZXR1cm4gZnVuY3Rpb24gKGIpIHsgcmV0dXJuIChiLnRleHRDb250ZW50IHx8IGIuaW5uZXJUZXh0IHx8IHgoYikpLmluZGV4T2YoYSkgPiAtMSB9IH0pLCBsYW5nOiBkKGZ1bmN0aW9uIChhKSB7IHJldHVybiBuYi50ZXN0KGEgfHwgXCJcIikgfHwgYi5lcnJvcihcInVuc3VwcG9ydGVkIGxhbmc6IFwiICsgYSksIGEgPSBhLnJlcGxhY2UodmIsIHdiKS50b0xvd2VyQ2FzZSgpLCBmdW5jdGlvbiAoYikgeyB2YXIgYzsgZG8gaWYgKGMgPSBJID8gYi5sYW5nIDogYi5nZXRBdHRyaWJ1dGUoXCJ4bWw6bGFuZ1wiKSB8fCBiLmdldEF0dHJpYnV0ZShcImxhbmdcIikpIHJldHVybiBjID0gYy50b0xvd2VyQ2FzZSgpLCBjID09PSBhIHx8IDAgPT09IGMuaW5kZXhPZihhICsgXCItXCIpOyB3aGlsZSAoKGIgPSBiLnBhcmVudE5vZGUpICYmIDEgPT09IGIubm9kZVR5cGUpOyByZXR1cm4gITEgfSB9KSwgdGFyZ2V0OiBmdW5jdGlvbiAoYikgeyB2YXIgYyA9IGEubG9jYXRpb24gJiYgYS5sb2NhdGlvbi5oYXNoOyByZXR1cm4gYyAmJiBjLnNsaWNlKDEpID09PSBiLmlkIH0sIHJvb3Q6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhID09PSBIIH0sIGZvY3VzOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSA9PT0gRy5hY3RpdmVFbGVtZW50ICYmICghRy5oYXNGb2N1cyB8fCBHLmhhc0ZvY3VzKCkpICYmICEhKGEudHlwZSB8fCBhLmhyZWYgfHwgfmEudGFiSW5kZXgpIH0sIGVuYWJsZWQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmRpc2FibGVkID09PSAhMSB9LCBkaXNhYmxlZDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuZGlzYWJsZWQgPT09ICEwIH0sIGNoZWNrZWQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gXCJpbnB1dFwiID09PSBiICYmICEhYS5jaGVja2VkIHx8IFwib3B0aW9uXCIgPT09IGIgJiYgISFhLnNlbGVjdGVkIH0sIHNlbGVjdGVkOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5wYXJlbnROb2RlICYmIGEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LCBhLnNlbGVjdGVkID09PSAhMCB9LCBlbXB0eTogZnVuY3Rpb24gKGEpIHsgZm9yIChhID0gYS5maXJzdENoaWxkOyBhOyBhID0gYS5uZXh0U2libGluZylpZiAoYS5ub2RlVHlwZSA8IDYpIHJldHVybiAhMTsgcmV0dXJuICEwIH0sIHBhcmVudDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuICF3LnBzZXVkb3MuZW1wdHkoYSkgfSwgaGVhZGVyOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gcWIudGVzdChhLm5vZGVOYW1lKSB9LCBpbnB1dDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHBiLnRlc3QoYS5ub2RlTmFtZSkgfSwgYnV0dG9uOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsgcmV0dXJuIFwiaW5wdXRcIiA9PT0gYiAmJiBcImJ1dHRvblwiID09PSBhLnR5cGUgfHwgXCJidXR0b25cIiA9PT0gYiB9LCB0ZXh0OiBmdW5jdGlvbiAoYSkgeyB2YXIgYjsgcmV0dXJuIFwiaW5wdXRcIiA9PT0gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICYmIFwidGV4dFwiID09PSBhLnR5cGUgJiYgKG51bGwgPT0gKGIgPSBhLmdldEF0dHJpYnV0ZShcInR5cGVcIikpIHx8IFwidGV4dFwiID09PSBiLnRvTG93ZXJDYXNlKCkpIH0sIGZpcnN0OiBqKGZ1bmN0aW9uICgpIHsgcmV0dXJuIFswXSB9KSwgbGFzdDogaihmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gW2IgLSAxXSB9KSwgZXE6IGooZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIFswID4gYyA/IGMgKyBiIDogY10gfSksIGV2ZW46IGooZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgYyA9IDA7IGIgPiBjOyBjICs9IDIpYS5wdXNoKGMpOyByZXR1cm4gYSB9KSwgb2RkOiBqKGZ1bmN0aW9uIChhLCBiKSB7IGZvciAodmFyIGMgPSAxOyBiID4gYzsgYyArPSAyKWEucHVzaChjKTsgcmV0dXJuIGEgfSksIGx0OiBqKGZ1bmN0aW9uIChhLCBiLCBjKSB7IGZvciAodmFyIGQgPSAwID4gYyA/IGMgKyBiIDogYzsgLS1kID49IDA7KWEucHVzaChkKTsgcmV0dXJuIGEgfSksIGd0OiBqKGZ1bmN0aW9uIChhLCBiLCBjKSB7IGZvciAodmFyIGQgPSAwID4gYyA/IGMgKyBiIDogYzsgKytkIDwgYjspYS5wdXNoKGQpOyByZXR1cm4gYSB9KSB9IH0sIHcucHNldWRvcy5udGggPSB3LnBzZXVkb3MuZXE7IGZvciAodSBpbiB7IHJhZGlvOiAhMCwgY2hlY2tib3g6ICEwLCBmaWxlOiAhMCwgcGFzc3dvcmQ6ICEwLCBpbWFnZTogITAgfSkgdy5wc2V1ZG9zW3VdID0gaCh1KTsgZm9yICh1IGluIHsgc3VibWl0OiAhMCwgcmVzZXQ6ICEwIH0pIHcucHNldWRvc1t1XSA9IGkodSk7IHJldHVybiBsLnByb3RvdHlwZSA9IHcuZmlsdGVycyA9IHcucHNldWRvcywgdy5zZXRGaWx0ZXJzID0gbmV3IGwsIHogPSBiLnRva2VuaXplID0gZnVuY3Rpb24gKGEsIGMpIHsgdmFyIGQsIGUsIGYsIGcsIGgsIGksIGosIGsgPSBTW2EgKyBcIiBcIl07IGlmIChrKSByZXR1cm4gYyA/IDAgOiBrLnNsaWNlKDApOyBmb3IgKGggPSBhLCBpID0gW10sIGogPSB3LnByZUZpbHRlcjsgaDspIHsgKCFkIHx8IChlID0gamIuZXhlYyhoKSkpICYmIChlICYmIChoID0gaC5zbGljZShlWzBdLmxlbmd0aCkgfHwgaCksIGkucHVzaChmID0gW10pKSwgZCA9ICExLCAoZSA9IGtiLmV4ZWMoaCkpICYmIChkID0gZS5zaGlmdCgpLCBmLnB1c2goeyB2YWx1ZTogZCwgdHlwZTogZVswXS5yZXBsYWNlKGliLCBcIiBcIikgfSksIGggPSBoLnNsaWNlKGQubGVuZ3RoKSk7IGZvciAoZyBpbiB3LmZpbHRlcikgIShlID0gb2JbZ10uZXhlYyhoKSkgfHwgaltnXSAmJiAhKGUgPSBqW2ddKGUpKSB8fCAoZCA9IGUuc2hpZnQoKSwgZi5wdXNoKHsgdmFsdWU6IGQsIHR5cGU6IGcsIG1hdGNoZXM6IGUgfSksIGggPSBoLnNsaWNlKGQubGVuZ3RoKSk7IGlmICghZCkgYnJlYWsgfSByZXR1cm4gYyA/IGgubGVuZ3RoIDogaCA/IGIuZXJyb3IoYSkgOiBTKGEsIGkpLnNsaWNlKDApIH0sIEEgPSBiLmNvbXBpbGUgPSBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYywgZCA9IFtdLCBlID0gW10sIGYgPSBUW2EgKyBcIiBcIl07IGlmICghZikgeyBmb3IgKGIgfHwgKGIgPSB6KGEpKSwgYyA9IGIubGVuZ3RoOyBjLS07KWYgPSBzKGJbY10pLCBmW05dID8gZC5wdXNoKGYpIDogZS5wdXNoKGYpOyBmID0gVChhLCB0KGUsIGQpKSwgZi5zZWxlY3RvciA9IGEgfSByZXR1cm4gZiB9LCBCID0gYi5zZWxlY3QgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyB2YXIgZSwgZiwgZywgaCwgaSwgaiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgYSAmJiBhLCBsID0gIWQgJiYgeihhID0gai5zZWxlY3RvciB8fCBhKTsgaWYgKGMgPSBjIHx8IFtdLCAxID09PSBsLmxlbmd0aCkgeyBpZiAoZiA9IGxbMF0gPSBsWzBdLnNsaWNlKDApLCBmLmxlbmd0aCA+IDIgJiYgXCJJRFwiID09PSAoZyA9IGZbMF0pLnR5cGUgJiYgdi5nZXRCeUlkICYmIDkgPT09IGIubm9kZVR5cGUgJiYgSSAmJiB3LnJlbGF0aXZlW2ZbMV0udHlwZV0pIHsgaWYgKGIgPSAody5maW5kLklEKGcubWF0Y2hlc1swXS5yZXBsYWNlKHZiLCB3YiksIGIpIHx8IFtdKVswXSwgIWIpIHJldHVybiBjOyBqICYmIChiID0gYi5wYXJlbnROb2RlKSwgYSA9IGEuc2xpY2UoZi5zaGlmdCgpLnZhbHVlLmxlbmd0aCkgfSBmb3IgKGUgPSBvYi5uZWVkc0NvbnRleHQudGVzdChhKSA/IDAgOiBmLmxlbmd0aDsgZS0tICYmIChnID0gZltlXSwgIXcucmVsYXRpdmVbaCA9IGcudHlwZV0pOylpZiAoKGkgPSB3LmZpbmRbaF0pICYmIChkID0gaShnLm1hdGNoZXNbMF0ucmVwbGFjZSh2Yiwgd2IpLCB0Yi50ZXN0KGZbMF0udHlwZSkgJiYgayhiLnBhcmVudE5vZGUpIHx8IGIpKSkgeyBpZiAoZi5zcGxpY2UoZSwgMSksIGEgPSBkLmxlbmd0aCAmJiBtKGYpLCAhYSkgcmV0dXJuIF8uYXBwbHkoYywgZCksIGM7IGJyZWFrIH0gfSByZXR1cm4gKGogfHwgQShhLCBsKSkoZCwgYiwgIUksIGMsIHRiLnRlc3QoYSkgJiYgayhiLnBhcmVudE5vZGUpIHx8IGIpLCBjIH0sIHYuc29ydFN0YWJsZSA9IE4uc3BsaXQoXCJcIikuc29ydChVKS5qb2luKFwiXCIpID09PSBOLCB2LmRldGVjdER1cGxpY2F0ZXMgPSAhIUUsIEYoKSwgdi5zb3J0RGV0YWNoZWQgPSBlKGZ1bmN0aW9uIChhKSB7IHJldHVybiAxICYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihHLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpIH0pLCBlKGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nIyc+PC9hPlwiLCBcIiNcIiA9PT0gYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZShcImhyZWZcIikgfSkgfHwgZihcInR5cGV8aHJlZnxoZWlnaHR8d2lkdGhcIiwgZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGMgPyB2b2lkIDAgOiBhLmdldEF0dHJpYnV0ZShiLCBcInR5cGVcIiA9PT0gYi50b0xvd2VyQ2FzZSgpID8gMSA6IDIpIH0pLCB2LmF0dHJpYnV0ZXMgJiYgZShmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCIsIGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCBcIlwiKSwgXCJcIiA9PT0gYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpIH0pIHx8IGYoXCJ2YWx1ZVwiLCBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gYyB8fCBcImlucHV0XCIgIT09IGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA/IHZvaWQgMCA6IGEuZGVmYXVsdFZhbHVlIH0pLCBlKGZ1bmN0aW9uIChhKSB7IHJldHVybiBudWxsID09IGEuZ2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIikgfSkgfHwgZihjYiwgZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQ7IHJldHVybiBjID8gdm9pZCAwIDogYVtiXSA9PT0gITAgPyBiLnRvTG93ZXJDYXNlKCkgOiAoZCA9IGEuZ2V0QXR0cmlidXRlTm9kZShiKSkgJiYgZC5zcGVjaWZpZWQgPyBkLnZhbHVlIDogbnVsbCB9KSwgYiB9KGEpOyBfLmZpbmQgPSBlYiwgXy5leHByID0gZWIuc2VsZWN0b3JzLCBfLmV4cHJbXCI6XCJdID0gXy5leHByLnBzZXVkb3MsIF8udW5pcXVlID0gZWIudW5pcXVlU29ydCwgXy50ZXh0ID0gZWIuZ2V0VGV4dCwgXy5pc1hNTERvYyA9IGViLmlzWE1MLCBfLmNvbnRhaW5zID0gZWIuY29udGFpbnM7IHZhciBmYiA9IF8uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsIGdiID0gL148KFxcdyspXFxzKlxcLz8+KD86PFxcL1xcMT58KSQvLCBoYiA9IC9eLlteOiNcXFtcXC4sXSokLzsgXy5maWx0ZXIgPSBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCA9IGJbMF07IHJldHVybiBjICYmIChhID0gXCI6bm90KFwiICsgYSArIFwiKVwiKSwgMSA9PT0gYi5sZW5ndGggJiYgMSA9PT0gZC5ub2RlVHlwZSA/IF8uZmluZC5tYXRjaGVzU2VsZWN0b3IoZCwgYSkgPyBbZF0gOiBbXSA6IF8uZmluZC5tYXRjaGVzKGEsIF8uZ3JlcChiLCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gMSA9PT0gYS5ub2RlVHlwZSB9KSkgfSwgXy5mbi5leHRlbmQoeyBmaW5kOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYyA9IHRoaXMubGVuZ3RoLCBkID0gW10sIGUgPSB0aGlzOyBpZiAoXCJzdHJpbmdcIiAhPSB0eXBlb2YgYSkgcmV0dXJuIHRoaXMucHVzaFN0YWNrKF8oYSkuZmlsdGVyKGZ1bmN0aW9uICgpIHsgZm9yIChiID0gMDsgYyA+IGI7IGIrKylpZiAoXy5jb250YWlucyhlW2JdLCB0aGlzKSkgcmV0dXJuICEwIH0pKTsgZm9yIChiID0gMDsgYyA+IGI7IGIrKylfLmZpbmQoYSwgZVtiXSwgZCk7IHJldHVybiBkID0gdGhpcy5wdXNoU3RhY2soYyA+IDEgPyBfLnVuaXF1ZShkKSA6IGQpLCBkLnNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciA/IHRoaXMuc2VsZWN0b3IgKyBcIiBcIiArIGEgOiBhLCBkIH0sIGZpbHRlcjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKGQodGhpcywgYSB8fCBbXSwgITEpKSB9LCBub3Q6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLnB1c2hTdGFjayhkKHRoaXMsIGEgfHwgW10sICEwKSkgfSwgaXM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiAhIWQodGhpcywgXCJzdHJpbmdcIiA9PSB0eXBlb2YgYSAmJiBmYi50ZXN0KGEpID8gXyhhKSA6IGEgfHwgW10sICExKS5sZW5ndGggfSB9KTsgdmFyIGliLCBqYiA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSopKSQvLCBrYiA9IF8uZm4uaW5pdCA9IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkOyBpZiAoIWEpIHJldHVybiB0aGlzOyBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgYSkgeyBpZiAoYyA9IFwiPFwiID09PSBhWzBdICYmIFwiPlwiID09PSBhW2EubGVuZ3RoIC0gMV0gJiYgYS5sZW5ndGggPj0gMyA/IFtudWxsLCBhLCBudWxsXSA6IGpiLmV4ZWMoYSksICFjIHx8ICFjWzFdICYmIGIpIHJldHVybiAhYiB8fCBiLmpxdWVyeSA/IChiIHx8IGliKS5maW5kKGEpIDogdGhpcy5jb25zdHJ1Y3RvcihiKS5maW5kKGEpOyBpZiAoY1sxXSkgeyBpZiAoYiA9IGIgaW5zdGFuY2VvZiBfID8gYlswXSA6IGIsIF8ubWVyZ2UodGhpcywgXy5wYXJzZUhUTUwoY1sxXSwgYiAmJiBiLm5vZGVUeXBlID8gYi5vd25lckRvY3VtZW50IHx8IGIgOiBaLCAhMCkpLCBnYi50ZXN0KGNbMV0pICYmIF8uaXNQbGFpbk9iamVjdChiKSkgZm9yIChjIGluIGIpIF8uaXNGdW5jdGlvbih0aGlzW2NdKSA/IHRoaXNbY10oYltjXSkgOiB0aGlzLmF0dHIoYywgYltjXSk7IHJldHVybiB0aGlzIH0gcmV0dXJuIGQgPSBaLmdldEVsZW1lbnRCeUlkKGNbMl0pLCBkICYmIGQucGFyZW50Tm9kZSAmJiAodGhpcy5sZW5ndGggPSAxLCB0aGlzWzBdID0gZCksIHRoaXMuY29udGV4dCA9IFosIHRoaXMuc2VsZWN0b3IgPSBhLCB0aGlzIH0gcmV0dXJuIGEubm9kZVR5cGUgPyAodGhpcy5jb250ZXh0ID0gdGhpc1swXSA9IGEsIHRoaXMubGVuZ3RoID0gMSwgdGhpcykgOiBfLmlzRnVuY3Rpb24oYSkgPyBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBpYi5yZWFkeSA/IGliLnJlYWR5KGEpIDogYShfKSA6ICh2b2lkIDAgIT09IGEuc2VsZWN0b3IgJiYgKHRoaXMuc2VsZWN0b3IgPSBhLnNlbGVjdG9yLCB0aGlzLmNvbnRleHQgPSBhLmNvbnRleHQpLCBfLm1ha2VBcnJheShhLCB0aGlzKSkgfTsga2IucHJvdG90eXBlID0gXy5mbiwgaWIgPSBfKFopOyB2YXIgbGIgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLywgbWIgPSB7IGNoaWxkcmVuOiAhMCwgY29udGVudHM6ICEwLCBuZXh0OiAhMCwgcHJldjogITAgfTsgXy5leHRlbmQoeyBkaXI6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IGZvciAodmFyIGQgPSBbXSwgZSA9IHZvaWQgMCAhPT0gYzsgKGEgPSBhW2JdKSAmJiA5ICE9PSBhLm5vZGVUeXBlOylpZiAoMSA9PT0gYS5ub2RlVHlwZSkgeyBpZiAoZSAmJiBfKGEpLmlzKGMpKSBicmVhazsgZC5wdXNoKGEpIH0gcmV0dXJuIGQgfSwgc2libGluZzogZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgYyA9IFtdOyBhOyBhID0gYS5uZXh0U2libGluZykxID09PSBhLm5vZGVUeXBlICYmIGEgIT09IGIgJiYgYy5wdXNoKGEpOyByZXR1cm4gYyB9IH0pLCBfLmZuLmV4dGVuZCh7IGhhczogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBfKGEsIHRoaXMpLCBjID0gYi5sZW5ndGg7IHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbiAoKSB7IGZvciAodmFyIGEgPSAwOyBjID4gYTsgYSsrKWlmIChfLmNvbnRhaW5zKHRoaXMsIGJbYV0pKSByZXR1cm4gITAgfSkgfSwgY2xvc2VzdDogZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgYywgZCA9IDAsIGUgPSB0aGlzLmxlbmd0aCwgZiA9IFtdLCBnID0gZmIudGVzdChhKSB8fCBcInN0cmluZ1wiICE9IHR5cGVvZiBhID8gXyhhLCBiIHx8IHRoaXMuY29udGV4dCkgOiAwOyBlID4gZDsgZCsrKWZvciAoYyA9IHRoaXNbZF07IGMgJiYgYyAhPT0gYjsgYyA9IGMucGFyZW50Tm9kZSlpZiAoYy5ub2RlVHlwZSA8IDExICYmIChnID8gZy5pbmRleChjKSA+IC0xIDogMSA9PT0gYy5ub2RlVHlwZSAmJiBfLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGMsIGEpKSkgeyBmLnB1c2goYyk7IGJyZWFrIH0gcmV0dXJuIHRoaXMucHVzaFN0YWNrKGYubGVuZ3RoID4gMSA/IF8udW5pcXVlKGYpIDogZikgfSwgaW5kZXg6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhID8gXCJzdHJpbmdcIiA9PSB0eXBlb2YgYSA/IFUuY2FsbChfKGEpLCB0aGlzWzBdKSA6IFUuY2FsbCh0aGlzLCBhLmpxdWVyeSA/IGFbMF0gOiBhKSA6IHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMSB9LCBhZGQ6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB0aGlzLnB1c2hTdGFjayhfLnVuaXF1ZShfLm1lcmdlKHRoaXMuZ2V0KCksIF8oYSwgYikpKSkgfSwgYWRkQmFjazogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHRoaXMuYWRkKG51bGwgPT0gYSA/IHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoYSkpIH0gfSksIF8uZWFjaCh7IHBhcmVudDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLnBhcmVudE5vZGU7IHJldHVybiBiICYmIDExICE9PSBiLm5vZGVUeXBlID8gYiA6IG51bGwgfSwgcGFyZW50czogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIF8uZGlyKGEsIFwicGFyZW50Tm9kZVwiKSB9LCBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBfLmRpcihhLCBcInBhcmVudE5vZGVcIiwgYykgfSwgbmV4dDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGUoYSwgXCJuZXh0U2libGluZ1wiKSB9LCBwcmV2OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gZShhLCBcInByZXZpb3VzU2libGluZ1wiKSB9LCBuZXh0QWxsOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gXy5kaXIoYSwgXCJuZXh0U2libGluZ1wiKSB9LCBwcmV2QWxsOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gXy5kaXIoYSwgXCJwcmV2aW91c1NpYmxpbmdcIikgfSwgbmV4dFVudGlsOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gXy5kaXIoYSwgXCJuZXh0U2libGluZ1wiLCBjKSB9LCBwcmV2VW50aWw6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBfLmRpcihhLCBcInByZXZpb3VzU2libGluZ1wiLCBjKSB9LCBzaWJsaW5nczogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIF8uc2libGluZygoYS5wYXJlbnROb2RlIHx8IHt9KS5maXJzdENoaWxkLCBhKSB9LCBjaGlsZHJlbjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIF8uc2libGluZyhhLmZpcnN0Q2hpbGQpIH0sIGNvbnRlbnRzOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5jb250ZW50RG9jdW1lbnQgfHwgXy5tZXJnZShbXSwgYS5jaGlsZE5vZGVzKSB9IH0sIGZ1bmN0aW9uIChhLCBiKSB7IF8uZm5bYV0gPSBmdW5jdGlvbiAoYywgZCkgeyB2YXIgZSA9IF8ubWFwKHRoaXMsIGIsIGMpOyByZXR1cm4gXCJVbnRpbFwiICE9PSBhLnNsaWNlKC01KSAmJiAoZCA9IGMpLCBkICYmIFwic3RyaW5nXCIgPT0gdHlwZW9mIGQgJiYgKGUgPSBfLmZpbHRlcihkLCBlKSksIHRoaXMubGVuZ3RoID4gMSAmJiAobWJbYV0gfHwgXy51bmlxdWUoZSksIGxiLnRlc3QoYSkgJiYgZS5yZXZlcnNlKCkpLCB0aGlzLnB1c2hTdGFjayhlKSB9IH0pOyB2YXIgbmIgPSAvXFxTKy9nLCBvYiA9IHt9OyBfLkNhbGxiYWNrcyA9IGZ1bmN0aW9uIChhKSB7IGEgPSBcInN0cmluZ1wiID09IHR5cGVvZiBhID8gb2JbYV0gfHwgZihhKSA6IF8uZXh0ZW5kKHt9LCBhKTsgdmFyIGIsIGMsIGQsIGUsIGcsIGgsIGkgPSBbXSwgaiA9ICFhLm9uY2UgJiYgW10sIGsgPSBmdW5jdGlvbiAoZikgeyBmb3IgKGIgPSBhLm1lbW9yeSAmJiBmLCBjID0gITAsIGggPSBlIHx8IDAsIGUgPSAwLCBnID0gaS5sZW5ndGgsIGQgPSAhMDsgaSAmJiBnID4gaDsgaCsrKWlmIChpW2hdLmFwcGx5KGZbMF0sIGZbMV0pID09PSAhMSAmJiBhLnN0b3BPbkZhbHNlKSB7IGIgPSAhMTsgYnJlYWsgfSBkID0gITEsIGkgJiYgKGogPyBqLmxlbmd0aCAmJiBrKGouc2hpZnQoKSkgOiBiID8gaSA9IFtdIDogbC5kaXNhYmxlKCkpIH0sIGwgPSB7IGFkZDogZnVuY3Rpb24gKCkgeyBpZiAoaSkgeyB2YXIgYyA9IGkubGVuZ3RoOyAhZnVuY3Rpb24gZihiKSB7IF8uZWFjaChiLCBmdW5jdGlvbiAoYiwgYykgeyB2YXIgZCA9IF8udHlwZShjKTsgXCJmdW5jdGlvblwiID09PSBkID8gYS51bmlxdWUgJiYgbC5oYXMoYykgfHwgaS5wdXNoKGMpIDogYyAmJiBjLmxlbmd0aCAmJiBcInN0cmluZ1wiICE9PSBkICYmIGYoYykgfSkgfShhcmd1bWVudHMpLCBkID8gZyA9IGkubGVuZ3RoIDogYiAmJiAoZSA9IGMsIGsoYikpIH0gcmV0dXJuIHRoaXMgfSwgcmVtb3ZlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBpICYmIF8uZWFjaChhcmd1bWVudHMsIGZ1bmN0aW9uIChhLCBiKSB7IGZvciAodmFyIGM7IChjID0gXy5pbkFycmF5KGIsIGksIGMpKSA+IC0xOylpLnNwbGljZShjLCAxKSwgZCAmJiAoZyA+PSBjICYmIGctLSwgaCA+PSBjICYmIGgtLSkgfSksIHRoaXMgfSwgaGFzOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSA/IF8uaW5BcnJheShhLCBpKSA+IC0xIDogISghaSB8fCAhaS5sZW5ndGgpIH0sIGVtcHR5OiBmdW5jdGlvbiAoKSB7IHJldHVybiBpID0gW10sIGcgPSAwLCB0aGlzIH0sIGRpc2FibGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgPSBqID0gYiA9IHZvaWQgMCwgdGhpcyB9LCBkaXNhYmxlZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gIWkgfSwgbG9jazogZnVuY3Rpb24gKCkgeyByZXR1cm4gaiA9IHZvaWQgMCwgYiB8fCBsLmRpc2FibGUoKSwgdGhpcyB9LCBsb2NrZWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICFqIH0sIGZpcmVXaXRoOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gIWkgfHwgYyAmJiAhaiB8fCAoYiA9IGIgfHwgW10sIGIgPSBbYSwgYi5zbGljZSA/IGIuc2xpY2UoKSA6IGJdLCBkID8gai5wdXNoKGIpIDogayhiKSksIHRoaXMgfSwgZmlyZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gbC5maXJlV2l0aCh0aGlzLCBhcmd1bWVudHMpLCB0aGlzIH0sIGZpcmVkOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhIWMgfSB9OyByZXR1cm4gbCB9LCBfLmV4dGVuZCh7IERlZmVycmVkOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IFtbXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBfLkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLCBcInJlc29sdmVkXCJdLCBbXCJyZWplY3RcIiwgXCJmYWlsXCIsIF8uQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksIFwicmVqZWN0ZWRcIl0sIFtcIm5vdGlmeVwiLCBcInByb2dyZXNzXCIsIF8uQ2FsbGJhY2tzKFwibWVtb3J5XCIpXV0sIGMgPSBcInBlbmRpbmdcIiwgZCA9IHsgc3RhdGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGMgfSwgYWx3YXlzOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksIHRoaXMgfSwgdGhlbjogZnVuY3Rpb24gKCkgeyB2YXIgYSA9IGFyZ3VtZW50czsgcmV0dXJuIF8uRGVmZXJyZWQoZnVuY3Rpb24gKGMpIHsgXy5lYWNoKGIsIGZ1bmN0aW9uIChiLCBmKSB7IHZhciBnID0gXy5pc0Z1bmN0aW9uKGFbYl0pICYmIGFbYl07IGVbZlsxXV0oZnVuY3Rpb24gKCkgeyB2YXIgYSA9IGcgJiYgZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyBhICYmIF8uaXNGdW5jdGlvbihhLnByb21pc2UpID8gYS5wcm9taXNlKCkuZG9uZShjLnJlc29sdmUpLmZhaWwoYy5yZWplY3QpLnByb2dyZXNzKGMubm90aWZ5KSA6IGNbZlswXSArIFwiV2l0aFwiXSh0aGlzID09PSBkID8gYy5wcm9taXNlKCkgOiB0aGlzLCBnID8gW2FdIDogYXJndW1lbnRzKSB9KSB9KSwgYSA9IG51bGwgfSkucHJvbWlzZSgpIH0sIHByb21pc2U6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBudWxsICE9IGEgPyBfLmV4dGVuZChhLCBkKSA6IGQgfSB9LCBlID0ge307IHJldHVybiBkLnBpcGUgPSBkLnRoZW4sIF8uZWFjaChiLCBmdW5jdGlvbiAoYSwgZikgeyB2YXIgZyA9IGZbMl0sIGggPSBmWzNdOyBkW2ZbMV1dID0gZy5hZGQsIGggJiYgZy5hZGQoZnVuY3Rpb24gKCkgeyBjID0gaCB9LCBiWzEgXiBhXVsyXS5kaXNhYmxlLCBiWzJdWzJdLmxvY2spLCBlW2ZbMF1dID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZVtmWzBdICsgXCJXaXRoXCJdKHRoaXMgPT09IGUgPyBkIDogdGhpcywgYXJndW1lbnRzKSwgdGhpcyB9LCBlW2ZbMF0gKyBcIldpdGhcIl0gPSBnLmZpcmVXaXRoIH0pLCBkLnByb21pc2UoZSksIGEgJiYgYS5jYWxsKGUsIGUpLCBlIH0sIHdoZW46IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBjLCBkLCBlID0gMCwgZiA9IFIuY2FsbChhcmd1bWVudHMpLCBnID0gZi5sZW5ndGgsIGggPSAxICE9PSBnIHx8IGEgJiYgXy5pc0Z1bmN0aW9uKGEucHJvbWlzZSkgPyBnIDogMCwgaSA9IDEgPT09IGggPyBhIDogXy5EZWZlcnJlZCgpLCBqID0gZnVuY3Rpb24gKGEsIGMsIGQpIHsgcmV0dXJuIGZ1bmN0aW9uIChlKSB7IGNbYV0gPSB0aGlzLCBkW2FdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBSLmNhbGwoYXJndW1lbnRzKSA6IGUsIGQgPT09IGIgPyBpLm5vdGlmeVdpdGgoYywgZCkgOiAtLWggfHwgaS5yZXNvbHZlV2l0aChjLCBkKSB9IH07IGlmIChnID4gMSkgZm9yIChiID0gbmV3IEFycmF5KGcpLCBjID0gbmV3IEFycmF5KGcpLCBkID0gbmV3IEFycmF5KGcpOyBnID4gZTsgZSsrKWZbZV0gJiYgXy5pc0Z1bmN0aW9uKGZbZV0ucHJvbWlzZSkgPyBmW2VdLnByb21pc2UoKS5kb25lKGooZSwgZCwgZikpLmZhaWwoaS5yZWplY3QpLnByb2dyZXNzKGooZSwgYywgYikpIDogLS1oOyByZXR1cm4gaCB8fCBpLnJlc29sdmVXaXRoKGQsIGYpLCBpLnByb21pc2UoKSB9IH0pOyB2YXIgcGI7IF8uZm4ucmVhZHkgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gXy5yZWFkeS5wcm9taXNlKCkuZG9uZShhKSwgdGhpcyB9LCBfLmV4dGVuZCh7IGlzUmVhZHk6ICExLCByZWFkeVdhaXQ6IDEsIGhvbGRSZWFkeTogZnVuY3Rpb24gKGEpIHsgYSA/IF8ucmVhZHlXYWl0KysgOiBfLnJlYWR5KCEwKSB9LCByZWFkeTogZnVuY3Rpb24gKGEpIHsgKGEgPT09ICEwID8gLS1fLnJlYWR5V2FpdCA6IF8uaXNSZWFkeSkgfHwgKF8uaXNSZWFkeSA9ICEwLCBhICE9PSAhMCAmJiAtLV8ucmVhZHlXYWl0ID4gMCB8fCAocGIucmVzb2x2ZVdpdGgoWiwgW19dKSwgXy5mbi50cmlnZ2VySGFuZGxlciAmJiAoXyhaKS50cmlnZ2VySGFuZGxlcihcInJlYWR5XCIpLCBfKFopLm9mZihcInJlYWR5XCIpKSkpIH0gfSksIF8ucmVhZHkucHJvbWlzZSA9IGZ1bmN0aW9uIChiKSB7IHJldHVybiBwYiB8fCAocGIgPSBfLkRlZmVycmVkKCksIFwiY29tcGxldGVcIiA9PT0gWi5yZWFkeVN0YXRlID8gc2V0VGltZW91dChfLnJlYWR5KSA6IChaLmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGcsICExKSwgYS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBnLCAhMSkpKSwgcGIucHJvbWlzZShiKSB9LCBfLnJlYWR5LnByb21pc2UoKTsgdmFyIHFiID0gXy5hY2Nlc3MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgZSwgZiwgZykgeyB2YXIgaCA9IDAsIGkgPSBhLmxlbmd0aCwgaiA9IG51bGwgPT0gYzsgaWYgKFwib2JqZWN0XCIgPT09IF8udHlwZShjKSkgeyBlID0gITA7IGZvciAoaCBpbiBjKSBfLmFjY2VzcyhhLCBiLCBoLCBjW2hdLCAhMCwgZiwgZykgfSBlbHNlIGlmICh2b2lkIDAgIT09IGQgJiYgKGUgPSAhMCwgXy5pc0Z1bmN0aW9uKGQpIHx8IChnID0gITApLCBqICYmIChnID8gKGIuY2FsbChhLCBkKSwgYiA9IG51bGwpIDogKGogPSBiLCBiID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGouY2FsbChfKGEpLCBjKSB9KSksIGIpKSBmb3IgKDsgaSA+IGg7IGgrKyliKGFbaF0sIGMsIGcgPyBkIDogZC5jYWxsKGFbaF0sIGgsIGIoYVtoXSwgYykpKTsgcmV0dXJuIGUgPyBhIDogaiA/IGIuY2FsbChhKSA6IGkgPyBiKGFbMF0sIGMpIDogZiB9OyBfLmFjY2VwdERhdGEgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gMSA9PT0gYS5ub2RlVHlwZSB8fCA5ID09PSBhLm5vZGVUeXBlIHx8ICErYS5ub2RlVHlwZSB9LCBoLnVpZCA9IDEsIGguYWNjZXB0cyA9IF8uYWNjZXB0RGF0YSwgaC5wcm90b3R5cGUgPSB7IGtleTogZnVuY3Rpb24gKGEpIHsgaWYgKCFoLmFjY2VwdHMoYSkpIHJldHVybiAwOyB2YXIgYiA9IHt9LCBjID0gYVt0aGlzLmV4cGFuZG9dOyBpZiAoIWMpIHsgYyA9IGgudWlkKys7IHRyeSB7IGJbdGhpcy5leHBhbmRvXSA9IHsgdmFsdWU6IGMgfSwgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYSwgYikgfSBjYXRjaCAoZCkgeyBiW3RoaXMuZXhwYW5kb10gPSBjLCBfLmV4dGVuZChhLCBiKSB9IH0gcmV0dXJuIHRoaXMuY2FjaGVbY10gfHwgKHRoaXMuY2FjaGVbY10gPSB7fSksIGMgfSwgc2V0OiBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCwgZSA9IHRoaXMua2V5KGEpLCBmID0gdGhpcy5jYWNoZVtlXTsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIGIpIGZbYl0gPSBjOyBlbHNlIGlmIChfLmlzRW1wdHlPYmplY3QoZikpIF8uZXh0ZW5kKHRoaXMuY2FjaGVbZV0sIGIpOyBlbHNlIGZvciAoZCBpbiBiKSBmW2RdID0gYltkXTsgcmV0dXJuIGYgfSwgZ2V0OiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IHRoaXMuY2FjaGVbdGhpcy5rZXkoYSldOyByZXR1cm4gdm9pZCAwID09PSBiID8gYyA6IGNbYl0gfSwgYWNjZXNzOiBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZDsgcmV0dXJuIHZvaWQgMCA9PT0gYiB8fCBiICYmIFwic3RyaW5nXCIgPT0gdHlwZW9mIGIgJiYgdm9pZCAwID09PSBjID8gKGQgPSB0aGlzLmdldChhLCBiKSwgdm9pZCAwICE9PSBkID8gZCA6IHRoaXMuZ2V0KGEsIF8uY2FtZWxDYXNlKGIpKSkgOiAodGhpcy5zZXQoYSwgYiwgYyksIHZvaWQgMCAhPT0gYyA/IGMgOiBiKSB9LCByZW1vdmU6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkLCBlLCBmID0gdGhpcy5rZXkoYSksIGcgPSB0aGlzLmNhY2hlW2ZdOyBpZiAodm9pZCAwID09PSBiKSB0aGlzLmNhY2hlW2ZdID0ge307IGVsc2UgeyBfLmlzQXJyYXkoYikgPyBkID0gYi5jb25jYXQoYi5tYXAoXy5jYW1lbENhc2UpKSA6IChlID0gXy5jYW1lbENhc2UoYiksIGIgaW4gZyA/IGQgPSBbYiwgZV0gOiAoZCA9IGUsIGQgPSBkIGluIGcgPyBbZF0gOiBkLm1hdGNoKG5iKSB8fCBbXSkpLCBjID0gZC5sZW5ndGg7IGZvciAoOyBjLS07KWRlbGV0ZSBnW2RbY11dIH0gfSwgaGFzRGF0YTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuICFfLmlzRW1wdHlPYmplY3QodGhpcy5jYWNoZVthW3RoaXMuZXhwYW5kb11dIHx8IHt9KSB9LCBkaXNjYXJkOiBmdW5jdGlvbiAoYSkgeyBhW3RoaXMuZXhwYW5kb10gJiYgZGVsZXRlIHRoaXMuY2FjaGVbYVt0aGlzLmV4cGFuZG9dXSB9IH07IHZhciByYiA9IG5ldyBoLCBzYiA9IG5ldyBoLCB0YiA9IC9eKD86XFx7W1xcd1xcV10qXFx9fFxcW1tcXHdcXFddKlxcXSkkLywgdWIgPSAvKFtBLVpdKS9nOyBfLmV4dGVuZCh7IGhhc0RhdGE6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBzYi5oYXNEYXRhKGEpIHx8IHJiLmhhc0RhdGEoYSkgfSwgZGF0YTogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIHNiLmFjY2VzcyhhLCBiLCBjKSB9LCByZW1vdmVEYXRhOiBmdW5jdGlvbiAoYSwgYikgeyBzYi5yZW1vdmUoYSwgYikgfSwgX2RhdGE6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiByYi5hY2Nlc3MoYSwgYiwgYykgfSwgX3JlbW92ZURhdGE6IGZ1bmN0aW9uIChhLCBiKSB7IHJiLnJlbW92ZShhLCBiKSB9IH0pLCBfLmZuLmV4dGVuZCh7IGRhdGE6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkLCBlLCBmID0gdGhpc1swXSwgZyA9IGYgJiYgZi5hdHRyaWJ1dGVzOyBpZiAodm9pZCAwID09PSBhKSB7IGlmICh0aGlzLmxlbmd0aCAmJiAoZSA9IHNiLmdldChmKSwgMSA9PT0gZi5ub2RlVHlwZSAmJiAhcmIuZ2V0KGYsIFwiaGFzRGF0YUF0dHJzXCIpKSkgeyBmb3IgKGMgPSBnLmxlbmd0aDsgYy0tOylnW2NdICYmIChkID0gZ1tjXS5uYW1lLCAwID09PSBkLmluZGV4T2YoXCJkYXRhLVwiKSAmJiAoZCA9IF8uY2FtZWxDYXNlKGQuc2xpY2UoNSkpLCBpKGYsIGQsIGVbZF0pKSk7IHJiLnNldChmLCBcImhhc0RhdGFBdHRyc1wiLCAhMCkgfSByZXR1cm4gZSB9IHJldHVybiBcIm9iamVjdFwiID09IHR5cGVvZiBhID8gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgc2Iuc2V0KHRoaXMsIGEpIH0pIDogcWIodGhpcywgZnVuY3Rpb24gKGIpIHsgdmFyIGMsIGQgPSBfLmNhbWVsQ2FzZShhKTsgaWYgKGYgJiYgdm9pZCAwID09PSBiKSB7IGlmIChjID0gc2IuZ2V0KGYsIGEpLCB2b2lkIDAgIT09IGMpIHJldHVybiBjOyBpZiAoYyA9IHNiLmdldChmLCBkKSwgdm9pZCAwICE9PSBjKSByZXR1cm4gYzsgaWYgKGMgPSBpKGYsIGQsIHZvaWQgMCksIHZvaWQgMCAhPT0gYykgcmV0dXJuIGMgfSBlbHNlIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBjID0gc2IuZ2V0KHRoaXMsIGQpOyBzYi5zZXQodGhpcywgZCwgYiksIC0xICE9PSBhLmluZGV4T2YoXCItXCIpICYmIHZvaWQgMCAhPT0gYyAmJiBzYi5zZXQodGhpcywgYSwgYikgfSkgfSwgbnVsbCwgYiwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsICEwKSB9LCByZW1vdmVEYXRhOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgc2IucmVtb3ZlKHRoaXMsIGEpIH0pIH0gfSksIF8uZXh0ZW5kKHsgcXVldWU6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkOyByZXR1cm4gYSA/IChiID0gKGIgfHwgXCJmeFwiKSArIFwicXVldWVcIiwgZCA9IHJiLmdldChhLCBiKSwgYyAmJiAoIWQgfHwgXy5pc0FycmF5KGMpID8gZCA9IHJiLmFjY2VzcyhhLCBiLCBfLm1ha2VBcnJheShjKSkgOiBkLnB1c2goYykpLCBkIHx8IFtdKSA6IHZvaWQgMCB9LCBkZXF1ZXVlOiBmdW5jdGlvbiAoYSwgYikgeyBiID0gYiB8fCBcImZ4XCI7IHZhciBjID0gXy5xdWV1ZShhLCBiKSwgZCA9IGMubGVuZ3RoLCBlID0gYy5zaGlmdCgpLCBmID0gXy5fcXVldWVIb29rcyhhLCBiKSwgZyA9IGZ1bmN0aW9uICgpIHsgXy5kZXF1ZXVlKGEsIGIpIH07IFwiaW5wcm9ncmVzc1wiID09PSBlICYmIChlID0gYy5zaGlmdCgpLCBkLS0pLCBlICYmIChcImZ4XCIgPT09IGIgJiYgYy51bnNoaWZ0KFwiaW5wcm9ncmVzc1wiKSwgZGVsZXRlIGYuc3RvcCwgZS5jYWxsKGEsIGcsIGYpKSwgIWQgJiYgZiAmJiBmLmVtcHR5LmZpcmUoKSB9LCBfcXVldWVIb29rczogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMgPSBiICsgXCJxdWV1ZUhvb2tzXCI7IHJldHVybiByYi5nZXQoYSwgYykgfHwgcmIuYWNjZXNzKGEsIGMsIHsgZW1wdHk6IF8uQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIikuYWRkKGZ1bmN0aW9uICgpIHsgcmIucmVtb3ZlKGEsIFtiICsgXCJxdWV1ZVwiLCBjXSkgfSkgfSkgfSB9KSwgXy5mbi5leHRlbmQoeyBxdWV1ZTogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMgPSAyOyByZXR1cm4gXCJzdHJpbmdcIiAhPSB0eXBlb2YgYSAmJiAoYiA9IGEsIGEgPSBcImZ4XCIsIGMtLSksIGFyZ3VtZW50cy5sZW5ndGggPCBjID8gXy5xdWV1ZSh0aGlzWzBdLCBhKSA6IHZvaWQgMCA9PT0gYiA/IHRoaXMgOiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgYyA9IF8ucXVldWUodGhpcywgYSwgYik7IF8uX3F1ZXVlSG9va3ModGhpcywgYSksIFwiZnhcIiA9PT0gYSAmJiBcImlucHJvZ3Jlc3NcIiAhPT0gY1swXSAmJiBfLmRlcXVldWUodGhpcywgYSkgfSkgfSwgZGVxdWV1ZTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IF8uZGVxdWV1ZSh0aGlzLCBhKSB9KSB9LCBjbGVhclF1ZXVlOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5xdWV1ZShhIHx8IFwiZnhcIiwgW10pIH0sIHByb21pc2U6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkID0gMSwgZSA9IF8uRGVmZXJyZWQoKSwgZiA9IHRoaXMsIGcgPSB0aGlzLmxlbmd0aCwgaCA9IGZ1bmN0aW9uICgpIHsgLS1kIHx8IGUucmVzb2x2ZVdpdGgoZiwgW2ZdKSB9OyBmb3IgKFwic3RyaW5nXCIgIT0gdHlwZW9mIGEgJiYgKGIgPSBhLCBhID0gdm9pZCAwKSwgYSA9IGEgfHwgXCJmeFwiOyBnLS07KWMgPSByYi5nZXQoZltnXSwgYSArIFwicXVldWVIb29rc1wiKSwgYyAmJiBjLmVtcHR5ICYmIChkKyssIGMuZW1wdHkuYWRkKGgpKTsgcmV0dXJuIGgoKSwgZS5wcm9taXNlKGIpIH0gfSk7IHZhciB2YiA9IC9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvLnNvdXJjZSwgd2IgPSBbXCJUb3BcIiwgXCJSaWdodFwiLCBcIkJvdHRvbVwiLCBcIkxlZnRcIl0sIHhiID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgPSBiIHx8IGEsIFwibm9uZVwiID09PSBfLmNzcyhhLCBcImRpc3BsYXlcIikgfHwgIV8uY29udGFpbnMoYS5vd25lckRvY3VtZW50LCBhKSB9LCB5YiA9IC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pOyAhZnVuY3Rpb24gKCkgeyB2YXIgYSA9IFouY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBiID0gYS5hcHBlbmRDaGlsZChaLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLCBjID0gWi5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7IGMuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInJhZGlvXCIpLCBjLnNldEF0dHJpYnV0ZShcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIpLCBjLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJ0XCIpLCBiLmFwcGVuZENoaWxkKGMpLCBZLmNoZWNrQ2xvbmUgPSBiLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCwgYi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIiwgWS5ub0Nsb25lQ2hlY2tlZCA9ICEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWUgfSgpOyB2YXIgemIgPSBcInVuZGVmaW5lZFwiOyBZLmZvY3VzaW5CdWJibGVzID0gXCJvbmZvY3VzaW5cIiBpbiBhOyB2YXIgQWIgPSAvXmtleS8sIEJiID0gL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51KXxjbGljay8sIENiID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLCBEYiA9IC9eKFteLl0qKSg/OlxcLiguKyl8KSQvOyBfLmV2ZW50ID0ge1xyXG4gICAgICAgIGdsb2JhbDoge30sIGFkZDogZnVuY3Rpb24gKGEsIGIsIGMsIGQsIGUpIHsgdmFyIGYsIGcsIGgsIGksIGosIGssIGwsIG0sIG4sIG8sIHAsIHEgPSByYi5nZXQoYSk7IGlmIChxKSBmb3IgKGMuaGFuZGxlciAmJiAoZiA9IGMsIGMgPSBmLmhhbmRsZXIsIGUgPSBmLnNlbGVjdG9yKSwgYy5ndWlkIHx8IChjLmd1aWQgPSBfLmd1aWQrKyksIChpID0gcS5ldmVudHMpIHx8IChpID0gcS5ldmVudHMgPSB7fSksIChnID0gcS5oYW5kbGUpIHx8IChnID0gcS5oYW5kbGUgPSBmdW5jdGlvbiAoYikgeyByZXR1cm4gdHlwZW9mIF8gIT09IHpiICYmIF8uZXZlbnQudHJpZ2dlcmVkICE9PSBiLnR5cGUgPyBfLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGEsIGFyZ3VtZW50cykgOiB2b2lkIDAgfSksIGIgPSAoYiB8fCBcIlwiKS5tYXRjaChuYikgfHwgW1wiXCJdLCBqID0gYi5sZW5ndGg7IGotLTspaCA9IERiLmV4ZWMoYltqXSkgfHwgW10sIG4gPSBwID0gaFsxXSwgbyA9IChoWzJdIHx8IFwiXCIpLnNwbGl0KFwiLlwiKS5zb3J0KCksIG4gJiYgKGwgPSBfLmV2ZW50LnNwZWNpYWxbbl0gfHwge30sIG4gPSAoZSA/IGwuZGVsZWdhdGVUeXBlIDogbC5iaW5kVHlwZSkgfHwgbiwgbCA9IF8uZXZlbnQuc3BlY2lhbFtuXSB8fCB7fSwgayA9IF8uZXh0ZW5kKHsgdHlwZTogbiwgb3JpZ1R5cGU6IHAsIGRhdGE6IGQsIGhhbmRsZXI6IGMsIGd1aWQ6IGMuZ3VpZCwgc2VsZWN0b3I6IGUsIG5lZWRzQ29udGV4dDogZSAmJiBfLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoZSksIG5hbWVzcGFjZTogby5qb2luKFwiLlwiKSB9LCBmKSwgKG0gPSBpW25dKSB8fCAobSA9IGlbbl0gPSBbXSwgbS5kZWxlZ2F0ZUNvdW50ID0gMCwgbC5zZXR1cCAmJiBsLnNldHVwLmNhbGwoYSwgZCwgbywgZykgIT09ICExIHx8IGEuYWRkRXZlbnRMaXN0ZW5lciAmJiBhLmFkZEV2ZW50TGlzdGVuZXIobiwgZywgeyBjYXB0dXJlOiBmYWxzZSwgcGFzc2l2ZTogbi5pbmRleE9mKCd0b3VjaCcpID4gLTEgJiYgbi5pbmRleE9mKCdzY3JvbGwnKT4tMX0pKSxsLmFkZCYmKGwuYWRkLmNhbGwoYSxrKSxrLmhhbmRsZXIuZ3VpZHx8KGsuaGFuZGxlci5ndWlkPWMuZ3VpZCkpLGU/bS5zcGxpY2UobS5kZWxlZ2F0ZUNvdW50KyssMCxrKTptLnB1c2goayksXy5ldmVudC5nbG9iYWxbbl09ITApfSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG4sbyxwLHE9cmIuaGFzRGF0YShhKSYmcmIuZ2V0KGEpO2lmKHEmJihpPXEuZXZlbnRzKSl7Zm9yKGI9KGJ8fFwiXCIpLm1hdGNoKG5iKXx8W1wiXCJdLGo9Yi5sZW5ndGg7ai0tOylpZihoPURiLmV4ZWMoYltqXSl8fFtdLG49cD1oWzFdLG89KGhbMl18fFwiXCIpLnNwbGl0KFwiLlwiKS5zb3J0KCksbil7Zm9yKGw9Xy5ldmVudC5zcGVjaWFsW25dfHx7fSxuPShkP2wuZGVsZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxuLG09aVtuXXx8W10saD1oWzJdJiZuZXcgUmVnRXhwKFwiKF58XFxcXC4pXCIrby5qb2luKFwiXFxcXC4oPzouKlxcXFwufClcIikrXCIoXFxcXC58JClcIiksZz1mPW0ubGVuZ3RoO2YtLTspaz1tW2ZdLCFlJiZwIT09ay5vcmlnVHlwZXx8YyYmYy5ndWlkIT09ay5ndWlkfHxoJiYhaC50ZXN0KGsubmFtZXNwYWNlKXx8ZCYmZCE9PWsuc2VsZWN0b3ImJihcIioqXCIhPT1kfHwhay5zZWxlY3Rvcil8fChtLnNwbGljZShmLDEpLGsuc2VsZWN0b3ImJm0uZGVsZWdhdGVDb3VudC0tLGwucmVtb3ZlJiZsLnJlbW92ZS5jYWxsKGEsaykpO2cmJiFtLmxlbmd0aCYmKGwudGVhcmRvd24mJmwudGVhcmRvd24uY2FsbChhLG8scS5oYW5kbGUpIT09ITF8fF8ucmVtb3ZlRXZlbnQoYSxuLHEuaGFuZGxlKSxkZWxldGUgaVtuXSl9ZWxzZSBmb3IobiBpbiBpKV8uZXZlbnQucmVtb3ZlKGEsbitiW2pdLGMsZCwhMCk7Xy5pc0VtcHR5T2JqZWN0KGkpJiYoZGVsZXRlIHEuaGFuZGxlLHJiLnJlbW92ZShhLFwiZXZlbnRzXCIpKX19LHRyaWdnZXI6ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbT1bZHx8Wl0sbj1YLmNhbGwoYixcInR5cGVcIik/Yi50eXBlOmIsbz1YLmNhbGwoYixcIm5hbWVzcGFjZVwiKT9iLm5hbWVzcGFjZS5zcGxpdChcIi5cIik6W107aWYoZz1oPWQ9ZHx8WiwzIT09ZC5ub2RlVHlwZSYmOCE9PWQubm9kZVR5cGUmJiFDYi50ZXN0KG4rXy5ldmVudC50cmlnZ2VyZWQpJiYobi5pbmRleE9mKFwiLlwiKT49MCYmKG89bi5zcGxpdChcIi5cIiksbj1vLnNoaWZ0KCksby5zb3J0KCkpLGo9bi5pbmRleE9mKFwiOlwiKTwwJiZcIm9uXCIrbixiPWJbXy5leHBhbmRvXT9iOm5ldyBfLkV2ZW50KG4sXCJvYmplY3RcIj09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWU/MjozLGIubmFtZXNwYWNlPW8uam9pbihcIi5cIiksYi5uYW1lc3BhY2VfcmU9Yi5uYW1lc3BhY2U/bmV3IFJlZ0V4cChcIihefFxcXFwuKVwiK28uam9pbihcIlxcXFwuKD86LipcXFxcLnwpXCIpK1wiKFxcXFwufCQpXCIpOm51bGwsYi5yZXN1bHQ9dm9pZCAwLGIudGFyZ2V0fHwoYi50YXJnZXQ9ZCksYz1udWxsPT1jP1tiXTpfLm1ha2VBcnJheShjLFtiXSksbD1fLmV2ZW50LnNwZWNpYWxbbl18fHt9LGV8fCFsLnRyaWdnZXJ8fGwudHJpZ2dlci5hcHBseShkLGMpIT09ITEpKXtpZighZSYmIWwubm9CdWJibGUmJiFfLmlzV2luZG93KGQpKXtmb3IoaT1sLmRlbGVnYXRlVHlwZXx8bixDYi50ZXN0KGkrbil8fChnPWcucGFyZW50Tm9kZSk7ZztnPWcucGFyZW50Tm9kZSltLnB1c2goZyksaD1nO1xuaD09PShkLm93bmVyRG9jdW1lbnR8fFopJiZtLnB1c2goaC5kZWZhdWx0Vmlld3x8aC5wYXJlbnRXaW5kb3d8fGEpfWZvcihmPTA7KGc9bVtmKytdKSYmIWIuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspYi50eXBlPWY+MT9pOmwuYmluZFR5cGV8fG4saz0ocmIuZ2V0KGcsXCJldmVudHNcIil8fHt9KVtiLnR5cGVdJiZyYi5nZXQoZyxcImhhbmRsZVwiKSxrJiZrLmFwcGx5KGcsYyksaz1qJiZnW2pdLGsmJmsuYXBwbHkmJl8uYWNjZXB0RGF0YShnKSYmKGIucmVzdWx0PWsuYXBwbHkoZyxjKSxiLnJlc3VsdD09PSExJiZiLnByZXZlbnREZWZhdWx0KCkpO3JldHVybiBiLnR5cGU9bixlfHxiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxsLl9kZWZhdWx0JiZsLl9kZWZhdWx0LmFwcGx5KG0ucG9wKCksYykhPT0hMXx8IV8uYWNjZXB0RGF0YShkKXx8aiYmXy5pc0Z1bmN0aW9uKGRbbl0pJiYhXy5pc1dpbmRvdyhkKSYmKGg9ZFtqXSxoJiYoZFtqXT1udWxsKSxfLmV2ZW50LnRyaWdnZXJlZD1uLGRbbl0oKSxfLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsaCYmKGRbal09aCkpLGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1fLmV2ZW50LmZpeChhKTt2YXIgYixjLGQsZSxmLGc9W10saD1SLmNhbGwoYXJndW1lbnRzKSxpPShyYi5nZXQodGhpcyxcImV2ZW50c1wiKXx8e30pW2EudHlwZV18fFtdLGo9Xy5ldmVudC5zcGVjaWFsW2EudHlwZV18fHt9O2lmKGhbMF09YSxhLmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWoucHJlRGlzcGF0Y2h8fGoucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGEpIT09ITEpe2ZvcihnPV8uZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLGEsaSksYj0wOyhlPWdbYisrXSkmJiFhLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7KWZvcihhLmN1cnJlbnRUYXJnZXQ9ZS5lbGVtLGM9MDsoZj1lLmhhbmRsZXJzW2MrK10pJiYhYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpOykoIWEubmFtZXNwYWNlX3JlfHxhLm5hbWVzcGFjZV9yZS50ZXN0KGYubmFtZXNwYWNlKSkmJihhLmhhbmRsZU9iaj1mLGEuZGF0YT1mLmRhdGEsZD0oKF8uZXZlbnQuc3BlY2lhbFtmLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8Zi5oYW5kbGVyKS5hcHBseShlLmVsZW0saCksdm9pZCAwIT09ZCYmKGEucmVzdWx0PWQpPT09ITEmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSkpO3JldHVybiBqLnBvc3REaXNwYXRjaCYmai5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLGEpLGEucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPVtdLGg9Yi5kZWxlZ2F0ZUNvdW50LGk9YS50YXJnZXQ7aWYoaCYmaS5ub2RlVHlwZSYmKCFhLmJ1dHRvbnx8XCJjbGlja1wiIT09YS50eXBlKSlmb3IoO2khPT10aGlzO2k9aS5wYXJlbnROb2RlfHx0aGlzKWlmKGkuZGlzYWJsZWQhPT0hMHx8XCJjbGlja1wiIT09YS50eXBlKXtmb3IoZD1bXSxjPTA7aD5jO2MrKylmPWJbY10sZT1mLnNlbGVjdG9yK1wiIFwiLHZvaWQgMD09PWRbZV0mJihkW2VdPWYubmVlZHNDb250ZXh0P18oZSx0aGlzKS5pbmRleChpKT49MDpfLmZpbmQoZSx0aGlzLG51bGwsW2ldKS5sZW5ndGgpLGRbZV0mJmQucHVzaChmKTtkLmxlbmd0aCYmZy5wdXNoKHtlbGVtOmksaGFuZGxlcnM6ZH0pfXJldHVybiBoPGIubGVuZ3RoJiZnLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczpiLnNsaWNlKGgpfSksZ30scHJvcHM6XCJhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBldmVudFBoYXNlIG1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2hcIi5zcGxpdChcIiBcIiksZml4SG9va3M6e30sa2V5SG9va3M6e3Byb3BzOlwiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZVwiLnNwbGl0KFwiIFwiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09YS53aGljaCYmKGEud2hpY2g9bnVsbCE9Yi5jaGFyQ29kZT9iLmNoYXJDb2RlOmIua2V5Q29kZSksYX19LG1vdXNlSG9va3M6e3Byb3BzOlwiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50XCIuc3BsaXQoXCIgXCIpLGZpbHRlcjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPWIuYnV0dG9uO3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxsIT1iLmNsaWVudFgmJihjPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fFosZD1jLmRvY3VtZW50RWxlbWVudCxlPWMuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZCYmZC5zY3JvbGxMZWZ0fHxlJiZlLnNjcm9sbExlZnR8fDApLShkJiZkLmNsaWVudExlZnR8fGUmJmUuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGQmJmQuc2Nyb2xsVG9wfHxlJiZlLnNjcm9sbFRvcHx8MCktKGQmJmQuY2xpZW50VG9wfHxlJiZlLmNsaWVudFRvcHx8MCkpLGEud2hpY2h8fHZvaWQgMD09PWZ8fChhLndoaWNoPTEmZj8xOjImZj8zOjQmZj8yOjApLGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtfLmV4cGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZCxlPWEudHlwZSxmPWEsZz10aGlzLmZpeEhvb2tzW2VdO2ZvcihnfHwodGhpcy5maXhIb29rc1tlXT1nPUJiLnRlc3QoZSk/dGhpcy5tb3VzZUhvb2tzOkFiLnRlc3QoZSk/dGhpcy5rZXlIb29rczp7fSksZD1nLnByb3BzP3RoaXMucHJvcHMuY29uY2F0KGcucHJvcHMpOnRoaXMucHJvcHMsYT1uZXcgXy5FdmVudChmKSxiPWQubGVuZ3RoO2ItLTspYz1kW2JdLGFbY109ZltjXTtyZXR1cm4gYS50YXJnZXR8fChhLnRhcmdldD1aKSwzPT09YS50YXJnZXQubm9kZVR5cGUmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSxnLmZpbHRlcj9nLmZpbHRlcihhLGYpOmF9LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzIT09bCgpJiZ0aGlzLmZvY3VzPyh0aGlzLmZvY3VzKCksITEpOnZvaWQgMH0sZGVsZWdhdGVUeXBlOlwiZm9jdXNpblwifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1sKCkmJnRoaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnZvaWQgMH0sZGVsZWdhdGVUeXBlOlwiZm9jdXNvdXRcIn0sY2xpY2s6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm5cImNoZWNrYm94XCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2smJl8ubm9kZU5hbWUodGhpcyxcImlucHV0XCIpPyh0aGlzLmNsaWNrKCksITEpOnZvaWQgMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIF8ubm9kZU5hbWUoYS50YXJnZXQsXCJhXCIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7dm9pZCAwIT09YS5yZXN1bHQmJmEub3JpZ2luYWxFdmVudCYmKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1hLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9Xy5leHRlbmQobmV3IF8uRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtkP18uZXZlbnQudHJpZ2dlcihlLG51bGwsYik6Xy5ldmVudC5kaXNwYXRjaC5jYWxsKGIsZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sXy5yZW1vdmVFdmVudD1mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLCExKX0sXy5FdmVudD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgXy5FdmVudD8oYSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09YS5kZWZhdWx0UHJldmVudGVkJiZhLnJldHVyblZhbHVlPT09ITE/ajprKTp0aGlzLnR5cGU9YSxiJiZfLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWEmJmEudGltZVN0YW1wfHxfLm5vdygpLHZvaWQodGhpc1tfLmV4cGFuZG9dPSEwKSk6bmV3IF8uRXZlbnQoYSxiKX0sXy5FdmVudC5wcm90b3R5cGU9e2lzRGVmYXVsdFByZXZlbnRlZDprLGlzUHJvcGFnYXRpb25TdG9wcGVkOmssaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6ayxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1qLGEmJmEucHJldmVudERlZmF1bHQmJmEucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9aixhJiZhLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9aixhJiZhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sXy5lYWNoKHttb3VzZWVudGVyOlwibW91c2VvdmVyXCIsbW91c2VsZWF2ZTpcIm1vdXNlb3V0XCIscG9pbnRlcmVudGVyOlwicG9pbnRlcm92ZXJcIixwb2ludGVybGVhdmU6XCJwb2ludGVyb3V0XCJ9LGZ1bmN0aW9uKGEsYil7Xy5ldmVudC5zcGVjaWFsW2FdPXtkZWxlZ2F0ZVR5cGU6YixiaW5kVHlwZTpiLGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYyxkPXRoaXMsZT1hLnJlbGF0ZWRUYXJnZXQsZj1hLmhhbmRsZU9iajtyZXR1cm4oIWV8fGUhPT1kJiYhXy5jb250YWlucyhkLGUpKSYmKGEudHlwZT1mLm9yaWdUeXBlLGM9Zi5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhLnR5cGU9YiksY319fSksWS5mb2N1c2luQnViYmxlc3x8Xy5lYWNoKHtmb2N1czpcImZvY3VzaW5cIixibHVyOlwiZm9jdXNvdXRcIn0sZnVuY3Rpb24oYSxiKXt2YXIgYz1mdW5jdGlvbihhKXtfLmV2ZW50LnNpbXVsYXRlKGIsYS50YXJnZXQsXy5ldmVudC5maXgoYSksITApfTtfLmV2ZW50LnNwZWNpYWxbYl09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGU9cmIuYWNjZXNzKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCkscmIuYWNjZXNzKGQsYiwoZXx8MCkrMSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGU9cmIuYWNjZXNzKGQsYiktMTtlP3JiLmFjY2VzcyhkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLHJiLnJlbW92ZShkLGIpKX19fSksXy5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZztpZihcIm9iamVjdFwiPT10eXBlb2YgYSl7XCJzdHJpbmdcIiE9dHlwZW9mIGImJihjPWN8fGIsYj12b2lkIDApO2ZvcihnIGluIGEpdGhpcy5vbihnLGIsYyxhW2ddLGUpO3JldHVybiB0aGlzfWlmKG51bGw9PWMmJm51bGw9PWQ/KGQ9YixjPWI9dm9pZCAwKTpudWxsPT1kJiYoXCJzdHJpbmdcIj09dHlwZW9mIGI/KGQ9YyxjPXZvaWQgMCk6KGQ9YyxjPWIsYj12b2lkIDApKSxkPT09ITEpZD1rO2Vsc2UgaWYoIWQpcmV0dXJuIHRoaXM7cmV0dXJuIDE9PT1lJiYoZj1kLGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIF8oKS5vZmYoYSksZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGQuZ3VpZD1mLmd1aWR8fChmLmd1aWQ9Xy5ndWlkKyspKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtfLmV2ZW50LmFkZCh0aGlzLGEsZCxjLGIpfSl9LG9uZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihhLGIsYyxkLDEpfSxvZmY6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5oYW5kbGVPYmopcmV0dXJuIGQ9YS5oYW5kbGVPYmosXyhhLmRlbGVnYXRlVGFyZ2V0KS5vZmYoZC5uYW1lc3BhY2U/ZC5vcmlnVHlwZStcIi5cIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3IsZC5oYW5kbGVyKSx0aGlzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBhKXtmb3IoZSBpbiBhKXRoaXMub2ZmKGUsYixhW2VdKTtyZXR1cm4gdGhpc31yZXR1cm4oYj09PSExfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBiKSYmKGM9YixiPXZvaWQgMCksYz09PSExJiYoYz1rKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtfLmV2ZW50LnJlbW92ZSh0aGlzLGEsYyxiKX0pfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe18uZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzWzBdO3JldHVybiBjP18uZXZlbnQudHJpZ2dlcihhLGIsYywhMCk6dm9pZCAwfX0pO3ZhciBFYj0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXFx3Ol0rKVtePl0qKVxcLz4vZ2ksRmI9LzwoW1xcdzpdKykvLEdiPS88fCYjP1xcdys7LyxIYj0vPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLEliPS9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksSmI9L14kfFxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxLYj0vXnRydWVcXC8oLiopLyxMYj0vXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2csTWI9e29wdGlvbjpbMSxcIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz5cIixcIjwvc2VsZWN0PlwiXSx0aGVhZDpbMSxcIjx0YWJsZT5cIixcIjwvdGFibGU+XCJdLGNvbDpbMixcIjx0YWJsZT48Y29sZ3JvdXA+XCIsXCI8L2NvbGdyb3VwPjwvdGFibGU+XCJdLHRyOlsyLFwiPHRhYmxlPjx0Ym9keT5cIixcIjwvdGJvZHk+PC90YWJsZT5cIl0sdGQ6WzMsXCI8dGFibGU+PHRib2R5Pjx0cj5cIixcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiXSxfZGVmYXVsdDpbMCxcIlwiLFwiXCJdfTtNYi5vcHRncm91cD1NYi5vcHRpb24sTWIudGJvZHk9TWIudGZvb3Q9TWIuY29sZ3JvdXA9TWIuY2FwdGlvbj1NYi50aGVhZCxNYi50aD1NYi50ZCxfLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jbG9uZU5vZGUoITApLGk9Xy5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsYSk7aWYoIShZLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxfLmlzWE1MRG9jKGEpKSlmb3IoZz1yKGgpLGY9cihhKSxkPTAsZT1mLmxlbmd0aDtlPmQ7ZCsrKXMoZltkXSxnW2RdKTtpZihiKWlmKGMpZm9yKGY9Znx8cihhKSxnPWd8fHIoaCksZD0wLGU9Zi5sZW5ndGg7ZT5kO2QrKylxKGZbZF0sZ1tkXSk7ZWxzZSBxKGEsaCk7cmV0dXJuIGc9cihoLFwic2NyaXB0XCIpLGcubGVuZ3RoPjAmJnAoZywhaSYmcihhLFwic2NyaXB0XCIpKSxofSxidWlsZEZyYWdtZW50OmZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZSxmLGcsaCxpLGosaz1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsPVtdLG09MCxuPWEubGVuZ3RoO24+bTttKyspaWYoZT1hW21dLGV8fDA9PT1lKWlmKFwib2JqZWN0XCI9PT1fLnR5cGUoZSkpXy5tZXJnZShsLGUubm9kZVR5cGU/W2VdOmUpO2Vsc2UgaWYoR2IudGVzdChlKSl7Zm9yKGY9Znx8ay5hcHBlbmRDaGlsZChiLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLGc9KEZiLmV4ZWMoZSl8fFtcIlwiLFwiXCJdKVsxXS50b0xvd2VyQ2FzZSgpLGg9TWJbZ118fE1iLl9kZWZhdWx0LGYuaW5uZXJIVE1MPWhbMV0rZS5yZXBsYWNlKEViLFwiPCQxPjwvJDI+XCIpK2hbMl0saj1oWzBdO2otLTspZj1mLmxhc3RDaGlsZDtfLm1lcmdlKGwsZi5jaGlsZE5vZGVzKSxmPWsuZmlyc3RDaGlsZCxmLnRleHRDb250ZW50PVwiXCJ9ZWxzZSBsLnB1c2goYi5jcmVhdGVUZXh0Tm9kZShlKSk7Zm9yKGsudGV4dENvbnRlbnQ9XCJcIixtPTA7ZT1sW20rK107KWlmKCghZHx8LTE9PT1fLmluQXJyYXkoZSxkKSkmJihpPV8uY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpLGY9cihrLmFwcGVuZENoaWxkKGUpLFwic2NyaXB0XCIpLGkmJnAoZiksYykpZm9yKGo9MDtlPWZbaisrXTspSmIudGVzdChlLnR5cGV8fFwiXCIpJiZjLnB1c2goZSk7cmV0dXJuIGt9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUsZj1fLmV2ZW50LnNwZWNpYWwsZz0wO3ZvaWQgMCE9PShjPWFbZ10pO2crKyl7aWYoXy5hY2NlcHREYXRhKGMpJiYoZT1jW3JiLmV4cGFuZG9dLGUmJihiPXJiLmNhY2hlW2VdKSkpe2lmKGIuZXZlbnRzKWZvcihkIGluIGIuZXZlbnRzKWZbZF0/Xy5ldmVudC5yZW1vdmUoYyxkKTpfLnJlbW92ZUV2ZW50KGMsZCxiLmhhbmRsZSk7cmIuY2FjaGVbZV0mJmRlbGV0ZSByYi5jYWNoZVtlXX1kZWxldGUgc2IuY2FjaGVbY1tzYi5leHBhbmRvXV19fX0pLF8uZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBxYih0aGlzLGZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hP18udGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuZWFjaChmdW5jdGlvbigpeygxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSkmJih0aGlzLnRleHRDb250ZW50PWEpfSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj1tKHRoaXMsYSk7Yi5hcHBlbmRDaGlsZChhKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9bSh0aGlzLGEpO2IuaW5zZXJ0QmVmb3JlKGEsYi5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMubmV4dFNpYmxpbmcpfSl9LHJlbW92ZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPWE/Xy5maWx0ZXIoYSx0aGlzKTp0aGlzLGU9MDtudWxsIT0oYz1kW2VdKTtlKyspYnx8MSE9PWMubm9kZVR5cGV8fF8uY2xlYW5EYXRhKHIoYykpLGMucGFyZW50Tm9kZSYmKGImJl8uY29udGFpbnMoYy5vd25lckRvY3VtZW50LGMpJiZwKHIoYyxcInNjcmlwdFwiKSksYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKykxPT09YS5ub2RlVHlwZSYmKF8uY2xlYW5EYXRhKHIoYSwhMSkpLGEudGV4dENvbnRlbnQ9XCJcIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9bnVsbD09YT8hMTphLGI9bnVsbD09Yj9hOmIsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gXy5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gcWIodGhpcyxmdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdfHx7fSxjPTAsZD10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1hJiYxPT09Yi5ub2RlVHlwZSlyZXR1cm4gYi5pbm5lckhUTUw7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEmJiFIYi50ZXN0KGEpJiYhTWJbKEZiLmV4ZWMoYSl8fFtcIlwiLFwiXCJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxhY2UoRWIsXCI8JDE+PC8kMj5cIik7dHJ5e2Zvcig7ZD5jO2MrKyliPXRoaXNbY118fHt9LDE9PT1iLm5vZGVUeXBlJiYoXy5jbGVhbkRhdGEocihiLCExKSksYi5pbm5lckhUTUw9YSk7Yj0wfWNhdGNoKGUpe319YiYmdGhpcy5lbXB0eSgpLmFwcGVuZChhKX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50c1swXTtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYil7YT10aGlzLnBhcmVudE5vZGUsXy5jbGVhbkRhdGEocih0aGlzKSksYSYmYS5yZXBsYWNlQ2hpbGQoYix0aGlzKX0pLGEmJihhLmxlbmd0aHx8YS5ub2RlVHlwZSk/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlvbihhLGIpe2E9Uy5hcHBseShbXSxhKTt2YXIgYyxkLGUsZixnLGgsaT0wLGo9dGhpcy5sZW5ndGgsaz10aGlzLGw9ai0xLG09YVswXSxwPV8uaXNGdW5jdGlvbihtKTtpZihwfHxqPjEmJlwic3RyaW5nXCI9PXR5cGVvZiBtJiYhWS5jaGVja0Nsb25lJiZJYi50ZXN0KG0pKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9ay5lcShjKTtwJiYoYVswXT1tLmNhbGwodGhpcyxjLGQuaHRtbCgpKSksZC5kb21NYW5pcChhLGIpfSk7aWYoaiYmKGM9Xy5idWlsZEZyYWdtZW50KGEsdGhpc1swXS5vd25lckRvY3VtZW50LCExLHRoaXMpLGQ9Yy5maXJzdENoaWxkLDE9PT1jLmNoaWxkTm9kZXMubGVuZ3RoJiYoYz1kKSxkKSl7Zm9yKGU9Xy5tYXAocihjLFwic2NyaXB0XCIpLG4pLGY9ZS5sZW5ndGg7aj5pO2krKylnPWMsaSE9PWwmJihnPV8uY2xvbmUoZywhMCwhMCksZiYmXy5tZXJnZShlLHIoZyxcInNjcmlwdFwiKSkpLGIuY2FsbCh0aGlzW2ldLGcsaSk7aWYoZilmb3IoaD1lW2UubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsXy5tYXAoZSxvKSxpPTA7Zj5pO2krKylnPWVbaV0sSmIudGVzdChnLnR5cGV8fFwiXCIpJiYhcmIuYWNjZXNzKGcsXCJnbG9iYWxFdmFsXCIpJiZfLmNvbnRhaW5zKGgsZykmJihnLnNyYz9fLl9ldmFsVXJsJiZfLl9ldmFsVXJsKGcuc3JjKTpfLmdsb2JhbEV2YWwoZy50ZXh0Q29udGVudC5yZXBsYWNlKExiLFwiXCIpKSl9cmV0dXJuIHRoaXN9fSksXy5lYWNoKHthcHBlbmRUbzpcImFwcGVuZFwiLHByZXBlbmRUbzpcInByZXBlbmRcIixpbnNlcnRCZWZvcmU6XCJiZWZvcmVcIixpbnNlcnRBZnRlcjpcImFmdGVyXCIscmVwbGFjZUFsbDpcInJlcGxhY2VXaXRoXCJ9LGZ1bmN0aW9uKGEsYil7Xy5mblthXT1mdW5jdGlvbihhKXtmb3IodmFyIGMsZD1bXSxlPV8oYSksZj1lLmxlbmd0aC0xLGc9MDtmPj1nO2crKyljPWc9PT1mP3RoaXM6dGhpcy5jbG9uZSghMCksXyhlW2ddKVtiXShjKSxULmFwcGx5KGQsYy5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQpfX0pO3ZhciBOYixPYj17fSxQYj0vXm1hcmdpbi8sUWI9bmV3IFJlZ0V4cChcIl4oXCIrdmIrXCIpKD8hcHgpW2EteiVdKyRcIixcImlcIiksUmI9ZnVuY3Rpb24oYSl7cmV0dXJuIGEub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGEsbnVsbCl9OyFmdW5jdGlvbigpe2Z1bmN0aW9uIGIoKXtnLnN0eWxlLmNzc1RleHQ9XCItd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjElO3RvcDoxJTtib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3dpZHRoOjRweDtwb3NpdGlvbjphYnNvbHV0ZVwiLGcuaW5uZXJIVE1MPVwiXCIsZS5hcHBlbmRDaGlsZChmKTt2YXIgYj1hLmdldENvbXB1dGVkU3R5bGUoZyxudWxsKTtjPVwiMSVcIiE9PWIudG9wLGQ9XCI0cHhcIj09PWIud2lkdGgsZS5yZW1vdmVDaGlsZChmKX12YXIgYyxkLGU9Wi5kb2N1bWVudEVsZW1lbnQsZj1aLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksZz1aLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7Zy5zdHlsZSYmKGcuc3R5bGUuYmFja2dyb3VuZENsaXA9XCJjb250ZW50LWJveFwiLGcuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD1cIlwiLFkuY2xlYXJDbG9uZVN0eWxlPVwiY29udGVudC1ib3hcIj09PWcuc3R5bGUuYmFja2dyb3VuZENsaXAsZi5zdHlsZS5jc3NUZXh0PVwiYm9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHg7bWFyZ2luLXRvcDoxcHg7cG9zaXRpb246YWJzb2x1dGVcIixmLmFwcGVuZENoaWxkKGcpLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmXy5leHRlbmQoWSx7cGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBiKCksY30sYm94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09ZCYmYigpLGR9LHJlbGlhYmxlTWFyZ2luUmlnaHQ6ZnVuY3Rpb24oKXt2YXIgYixjPWcuYXBwZW5kQ2hpbGQoWi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtyZXR1cm4gYy5zdHlsZS5jc3NUZXh0PWcuc3R5bGUuY3NzVGV4dD1cIi13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MFwiLGMuc3R5bGUubWFyZ2luUmlnaHQ9Yy5zdHlsZS53aWR0aD1cIjBcIixnLnN0eWxlLndpZHRoPVwiMXB4XCIsZS5hcHBlbmRDaGlsZChmKSxiPSFwYXJzZUZsb2F0KGEuZ2V0Q29tcHV0ZWRTdHlsZShjLG51bGwpLm1hcmdpblJpZ2h0KSxlLnJlbW92ZUNoaWxkKGYpLGJ9fSkpfSgpLF8uc3dhcD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4gYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8fFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX07dmFyIFNiPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxUYj1uZXcgUmVnRXhwKFwiXihcIit2YitcIikoLiopJFwiLFwiaVwiKSxVYj1uZXcgUmVnRXhwKFwiXihbKy1dKT0oXCIrdmIrXCIpXCIsXCJpXCIpLFZiPXtwb3NpdGlvbjpcImFic29sdXRlXCIsdmlzaWJpbGl0eTpcImhpZGRlblwiLGRpc3BsYXk6XCJibG9ja1wifSxXYj17bGV0dGVyU3BhY2luZzpcIjBcIixmb250V2VpZ2h0OlwiNDAwXCJ9LFhiPVtcIldlYmtpdFwiLFwiT1wiLFwiTW96XCIsXCJtc1wiXTtfLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPXYoYSxcIm9wYWNpdHlcIik7cmV0dXJuXCJcIj09PWM/XCIxXCI6Y319fX0sY3NzTnVtYmVyOntjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7XCJmbG9hdFwiOlwiY3NzRmxvYXRcIn0sc3R5bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9kZVR5cGUmJjghPT1hLm5vZGVUeXBlJiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1fLmNhbWVsQ2FzZShiKSxpPWEuc3R5bGU7cmV0dXJuIGI9Xy5jc3NQcm9wc1toXXx8KF8uY3NzUHJvcHNbaF09eChpLGgpKSxnPV8uY3NzSG9va3NbYl18fF8uY3NzSG9va3NbaF0sdm9pZCAwPT09Yz9nJiZcImdldFwiaW4gZyYmdm9pZCAwIT09KGU9Zy5nZXQoYSwhMSxkKSk/ZTppW2JdOihmPXR5cGVvZiBjLFwic3RyaW5nXCI9PT1mJiYoZT1VYi5leGVjKGMpKSYmKGM9KGVbMV0rMSkqZVsyXStwYXJzZUZsb2F0KF8uY3NzKGEsYikpLGY9XCJudW1iZXJcIiksbnVsbCE9YyYmYz09PWMmJihcIm51bWJlclwiIT09Znx8Xy5jc3NOdW1iZXJbaF18fChjKz1cInB4XCIpLFkuY2xlYXJDbG9uZVN0eWxlfHxcIlwiIT09Y3x8MCE9PWIuaW5kZXhPZihcImJhY2tncm91bmRcIil8fChpW2JdPVwiaW5oZXJpdFwiKSxnJiZcInNldFwiaW4gZyYmdm9pZCAwPT09KGM9Zy5zZXQoYSxjLGQpKXx8KGlbYl09YykpLHZvaWQgMCl9fSxjc3M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGg9Xy5jYW1lbENhc2UoYik7cmV0dXJuIGI9Xy5jc3NQcm9wc1toXXx8KF8uY3NzUHJvcHNbaF09eChhLnN0eWxlLGgpKSxnPV8uY3NzSG9va3NbYl18fF8uY3NzSG9va3NbaF0sZyYmXCJnZXRcImluIGcmJihlPWcuZ2V0KGEsITAsYykpLHZvaWQgMD09PWUmJihlPXYoYSxiLGQpKSxcIm5vcm1hbFwiPT09ZSYmYiBpbiBXYiYmKGU9V2JbYl0pLFwiXCI9PT1jfHxjPyhmPXBhcnNlRmxvYXQoZSksYz09PSEwfHxfLmlzTnVtZXJpYyhmKT9mfHwwOmUpOmV9fSksXy5lYWNoKFtcImhlaWdodFwiLFwid2lkdGhcIl0sZnVuY3Rpb24oYSxiKXtfLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBjP1NiLnRlc3QoXy5jc3MoYSxcImRpc3BsYXlcIikpJiYwPT09YS5vZmZzZXRXaWR0aD9fLnN3YXAoYSxWYixmdW5jdGlvbigpe3JldHVybiBBKGEsYixkKX0pOkEoYSxiLGQpOnZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1kJiZSYihhKTtyZXR1cm4geShhLGMsZD96KGEsYixkLFwiYm9yZGVyLWJveFwiPT09Xy5jc3MoYSxcImJveFNpemluZ1wiLCExLGUpLGUpOjApfX19KSxfLmNzc0hvb2tzLm1hcmdpblJpZ2h0PXcoWS5yZWxpYWJsZU1hcmdpblJpZ2h0LGZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/Xy5zd2FwKGEse2Rpc3BsYXk6XCJpbmxpbmUtYmxvY2tcIn0sdixbYSxcIm1hcmdpblJpZ2h0XCJdKTp2b2lkIDB9KSxfLmVhY2goe21hcmdpbjpcIlwiLHBhZGRpbmc6XCJcIixib3JkZXI6XCJXaWR0aFwifSxmdW5jdGlvbihhLGIpe18uY3NzSG9va3NbYStiXT17ZXhwYW5kOmZ1bmN0aW9uKGMpe2Zvcih2YXIgZD0wLGU9e30sZj1cInN0cmluZ1wiPT10eXBlb2YgYz9jLnNwbGl0KFwiIFwiKTpbY107ND5kO2QrKyllW2Erd2JbZF0rYl09ZltkXXx8ZltkLTJdfHxmWzBdO3JldHVybiBlfX0sUGIudGVzdChhKXx8KF8uY3NzSG9va3NbYStiXS5zZXQ9eSl9KSxfLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHFiKHRoaXMsZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj17fSxnPTA7aWYoXy5pc0FycmF5KGIpKXtmb3IoZD1SYihhKSxlPWIubGVuZ3RoO2U+ZztnKyspZltiW2ddXT1fLmNzcyhhLGJbZ10sITEsZCk7cmV0dXJuIGZ9cmV0dXJuIHZvaWQgMCE9PWM/Xy5zdHlsZShhLGIsYyk6Xy5jc3MoYSxiKX0sYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gQih0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBCKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oYSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBhP2E/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7eGIodGhpcyk/Xyh0aGlzKS5zaG93KCk6Xyh0aGlzKS5oaWRlKCl9KX19KSxfLlR3ZWVuPUMsQy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkMsaW5pdDpmdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5lbGVtPWEsdGhpcy5wcm9wPWMsdGhpcy5lYXNpbmc9ZXx8XCJzd2luZ1wiLHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwoXy5jc3NOdW1iZXJbY10/XCJcIjpcInB4XCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgYT1DLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBhJiZhLmdldD9hLmdldCh0aGlzKTpDLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihhKXt2YXIgYixjPUMucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMucG9zPWI9dGhpcy5vcHRpb25zLmR1cmF0aW9uP18uZWFzaW5nW3RoaXMuZWFzaW5nXShhLHRoaXMub3B0aW9ucy5kdXJhdGlvbiphLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOmEsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKmIrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksYyYmYy5zZXQ/Yy5zZXQodGhpcyk6Qy5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSxDLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1DLnByb3RvdHlwZSxDLnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gbnVsbD09YS5lbGVtW2EucHJvcF18fGEuZWxlbS5zdHlsZSYmbnVsbCE9YS5lbGVtLnN0eWxlW2EucHJvcF0/KGI9Xy5jc3MoYS5lbGVtLGEucHJvcCxcIlwiKSxiJiZcImF1dG9cIiE9PWI/YjowKTphLmVsZW1bYS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGEpe18uZnguc3RlcFthLnByb3BdP18uZnguc3RlcFthLnByb3BdKGEpOmEuZWxlbS5zdHlsZSYmKG51bGwhPWEuZWxlbS5zdHlsZVtfLmNzc1Byb3BzW2EucHJvcF1dfHxfLmNzc0hvb2tzW2EucHJvcF0pP18uc3R5bGUoYS5lbGVtLGEucHJvcCxhLm5vdythLnVuaXQpOmEuZWxlbVthLnByb3BdPWEubm93fX19LEMucHJvcEhvb2tzLnNjcm9sbFRvcD1DLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oYSl7YS5lbGVtLm5vZGVUeXBlJiZhLmVsZW0ucGFyZW50Tm9kZSYmKGEuZWxlbVthLnByb3BdPWEubm93KX19LF8uZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LHN3aW5nOmZ1bmN0aW9uKGEpe3JldHVybi41LU1hdGguY29zKGEqTWF0aC5QSSkvMn19LF8uZng9Qy5wcm90b3R5cGUuaW5pdCxfLmZ4LnN0ZXA9e307dmFyIFliLFpiLCRiPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxfYj1uZXcgUmVnRXhwKFwiXig/OihbKy1dKT18KShcIit2YitcIikoW2EteiVdKikkXCIsXCJpXCIpLGFjPS9xdWV1ZUhvb2tzJC8sYmM9W0ddLGNjPXtcIipcIjpbZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmNyZWF0ZVR3ZWVuKGEsYiksZD1jLmN1cigpLGU9X2IuZXhlYyhiKSxmPWUmJmVbM118fChfLmNzc051bWJlclthXT9cIlwiOlwicHhcIiksZz0oXy5jc3NOdW1iZXJbYV18fFwicHhcIiE9PWYmJitkKSYmX2IuZXhlYyhfLmNzcyhjLmVsZW0sYSkpLGg9MSxpPTIwO2lmKGcmJmdbM10hPT1mKXtmPWZ8fGdbM10sZT1lfHxbXSxnPStkfHwxO2RvIGg9aHx8XCIuNVwiLGcvPWgsXy5zdHlsZShjLmVsZW0sYSxnK2YpO3doaWxlKGghPT0oaD1jLmN1cigpL2QpJiYxIT09aCYmLS1pKX1yZXR1cm4gZSYmKGc9Yy5zdGFydD0rZ3x8K2R8fDAsYy51bml0PWYsYy5lbmQ9ZVsxXT9nKyhlWzFdKzEpKmVbMl06K2VbMl0pLGN9XX07Xy5BbmltYXRpb249Xy5leHRlbmQoSSx7dHdlZW5lcjpmdW5jdGlvbihhLGIpe18uaXNGdW5jdGlvbihhKT8oYj1hLGE9W1wiKlwiXSk6YT1hLnNwbGl0KFwiIFwiKTtmb3IodmFyIGMsZD0wLGU9YS5sZW5ndGg7ZT5kO2QrKyljPWFbZF0sY2NbY109Y2NbY118fFtdLGNjW2NdLnVuc2hpZnQoYil9LHByZWZpbHRlcjpmdW5jdGlvbihhLGIpe2I/YmMudW5zaGlmdChhKTpiYy5wdXNoKGEpfX0pLF8uc3BlZWQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEmJlwib2JqZWN0XCI9PXR5cGVvZiBhP18uZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8Xy5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFfLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVybiBkLmR1cmF0aW9uPV8uZngub2ZmPzA6XCJudW1iZXJcIj09dHlwZW9mIGQuZHVyYXRpb24/ZC5kdXJhdGlvbjpkLmR1cmF0aW9uIGluIF8uZnguc3BlZWRzP18uZnguc3BlZWRzW2QuZHVyYXRpb25dOl8uZnguc3BlZWRzLl9kZWZhdWx0LChudWxsPT1kLnF1ZXVlfHxkLnF1ZXVlPT09ITApJiYoZC5xdWV1ZT1cImZ4XCIpLGQub2xkPWQuY29tcGxldGUsZC5jb21wbGV0ZT1mdW5jdGlvbigpe18uaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyksZC5xdWV1ZSYmXy5kZXF1ZXVlKHRoaXMsZC5xdWV1ZSl9LGR9LF8uZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuZmlsdGVyKHhiKS5jc3MoXCJvcGFjaXR5XCIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxjLGQpfSxhbmltYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPV8uaXNFbXB0eU9iamVjdChhKSxmPV8uc3BlZWQoYixjLGQpLGc9ZnVuY3Rpb24oKXt2YXIgYj1JKHRoaXMsXy5leHRlbmQoe30sYSksZik7KGV8fHJiLmdldCh0aGlzLFwiZmluaXNoXCIpKSYmYi5zdG9wKCEwKX07cmV0dXJuIGcuZmluaXNoPWcsZXx8Zi5xdWV1ZT09PSExP3RoaXMuZWFjaChnKTp0aGlzLnF1ZXVlKGYucXVldWUsZyl9LHN0b3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuc3RvcDtkZWxldGUgYS5zdG9wLGIoYyl9O3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBhJiYoYz1iLGI9YSxhPXZvaWQgMCksYiYmYSE9PSExJiZ0aGlzLnF1ZXVlKGF8fFwiZnhcIixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ITAsZT1udWxsIT1hJiZhK1wicXVldWVIb29rc1wiLGY9Xy50aW1lcnMsZz1yYi5nZXQodGhpcyk7aWYoZSlnW2VdJiZnW2VdLnN0b3AmJmQoZ1tlXSk7ZWxzZSBmb3IoZSBpbiBnKWdbZV0mJmdbZV0uc3RvcCYmYWMudGVzdChlKSYmZChnW2VdKTtmb3IoZT1mLmxlbmd0aDtlLS07KWZbZV0uZWxlbSE9PXRoaXN8fG51bGwhPWEmJmZbZV0ucXVldWUhPT1hfHwoZltlXS5hbmltLnN0b3AoYyksYj0hMSxmLnNwbGljZShlLDEpKTsoYnx8IWMpJiZfLmRlcXVldWUodGhpcyxhKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT0hMSYmKGE9YXx8XCJmeFwiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYixjPXJiLmdldCh0aGlzKSxkPWNbYStcInF1ZXVlXCJdLGU9Y1thK1wicXVldWVIb29rc1wiXSxmPV8udGltZXJzLGc9ZD9kLmxlbmd0aDowO2ZvcihjLmZpbmlzaD0hMCxfLnF1ZXVlKHRoaXMsYSxbXSksZSYmZS5zdG9wJiZlLnN0b3AuY2FsbCh0aGlzLCEwKSxiPWYubGVuZ3RoO2ItLTspZltiXS5lbGVtPT09dGhpcyYmZltiXS5xdWV1ZT09PWEmJihmW2JdLmFuaW0uc3RvcCghMCksZi5zcGxpY2UoYiwxKSk7Zm9yKGI9MDtnPmI7YisrKWRbYl0mJmRbYl0uZmluaXNoJiZkW2JdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBjLmZpbmlzaH0pfX0pLF8uZWFjaChbXCJ0b2dnbGVcIixcInNob3dcIixcImhpZGVcIl0sZnVuY3Rpb24oYSxiKXt2YXIgYz1fLmZuW2JdO18uZm5bYl09ZnVuY3Rpb24oYSxkLGUpe3JldHVybiBudWxsPT1hfHxcImJvb2xlYW5cIj09dHlwZW9mIGE/Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKEUoYiwhMCksYSxkLGUpfX0pLF8uZWFjaCh7c2xpZGVEb3duOkUoXCJzaG93XCIpLHNsaWRlVXA6RShcImhpZGVcIiksc2xpZGVUb2dnbGU6RShcInRvZ2dsZVwiKSxmYWRlSW46e29wYWNpdHk6XCJzaG93XCJ9LGZhZGVPdXQ6e29wYWNpdHk6XCJoaWRlXCJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6XCJ0b2dnbGVcIn19LGZ1bmN0aW9uKGEsYil7Xy5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxfLnRpbWVycz1bXSxfLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPTAsYz1fLnRpbWVycztmb3IoWWI9Xy5ub3coKTtiPGMubGVuZ3RoO2IrKylhPWNbYl0sYSgpfHxjW2JdIT09YXx8Yy5zcGxpY2UoYi0tLDEpO2MubGVuZ3RofHxfLmZ4LnN0b3AoKSxZYj12b2lkIDB9LF8uZngudGltZXI9ZnVuY3Rpb24oYSl7Xy50aW1lcnMucHVzaChhKSxhKCk/Xy5meC5zdGFydCgpOl8udGltZXJzLnBvcCgpfSxfLmZ4LmludGVydmFsPTEzLF8uZnguc3RhcnQ9ZnVuY3Rpb24oKXtaYnx8KFpiPXNldEludGVydmFsKF8uZngudGljayxfLmZ4LmludGVydmFsKSl9LF8uZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoWmIpLFpiPW51bGx9LF8uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LF8uZm4uZGVsYXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1fLmZ4P18uZnguc3BlZWRzW2FdfHxhOmEsYj1ifHxcImZ4XCIsdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9c2V0VGltZW91dChiLGEpO2Muc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChkKX19KX0sZnVuY3Rpb24oKXt2YXIgYT1aLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKSxiPVouY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKSxjPWIuYXBwZW5kQ2hpbGQoWi5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpKTthLnR5cGU9XCJjaGVja2JveFwiLFkuY2hlY2tPbj1cIlwiIT09YS52YWx1ZSxZLm9wdFNlbGVjdGVkPWMuc2VsZWN0ZWQsYi5kaXNhYmxlZD0hMCxZLm9wdERpc2FibGVkPSFjLmRpc2FibGVkLGE9Wi5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiksYS52YWx1ZT1cInRcIixhLnR5cGU9XCJyYWRpb1wiLFkucmFkaW9WYWx1ZT1cInRcIj09PWEudmFsdWV9KCk7dmFyIGRjLGVjLGZjPV8uZXhwci5hdHRySGFuZGxlO18uZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHFiKHRoaXMsXy5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtfLnJlbW92ZUF0dHIodGhpcyxhKX0pfX0pLF8uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5ub2RlVHlwZTtpZihhJiYzIT09ZiYmOCE9PWYmJjIhPT1mKXJldHVybiB0eXBlb2YgYS5nZXRBdHRyaWJ1dGU9PT16Yj9fLnByb3AoYSxiLGMpOigxPT09ZiYmXy5pc1hNTERvYyhhKXx8KGI9Yi50b0xvd2VyQ2FzZSgpLGQ9Xy5hdHRySG9va3NbYl18fChfLmV4cHIubWF0Y2guYm9vbC50ZXN0KGIpP2VjOmRjKSksdm9pZCAwPT09Yz9kJiZcImdldFwiaW4gZCYmbnVsbCE9PShlPWQuZ2V0KGEsYikpP2U6KGU9Xy5maW5kLmF0dHIoYSxiKSxudWxsPT1lP3ZvaWQgMDplKTpudWxsIT09Yz9kJiZcInNldFwiaW4gZCYmdm9pZCAwIT09KGU9ZC5zZXQoYSxjLGIpKT9lOihhLnNldEF0dHJpYnV0ZShiLGMrXCJcIiksYyk6dm9pZCBfLnJlbW92ZUF0dHIoYSxiKSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxmPWImJmIubWF0Y2gobmIpO2lmKGYmJjE9PT1hLm5vZGVUeXBlKWZvcig7Yz1mW2UrK107KWQ9Xy5wcm9wRml4W2NdfHxjLF8uZXhwci5tYXRjaC5ib29sLnRlc3QoYykmJihhW2RdPSExKSxhLnJlbW92ZUF0dHJpYnV0ZShjKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oYSxiKXtpZighWS5yYWRpb1ZhbHVlJiZcInJhZGlvXCI9PT1iJiZfLm5vZGVOYW1lKGEsXCJpbnB1dFwiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsYiksYyYmKGEudmFsdWU9YyksYn19fX19KSxlYz17c2V0OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYj09PSExP18ucmVtb3ZlQXR0cihhLGMpOmEuc2V0QXR0cmlidXRlKGMsYyksY319LF8uZWFjaChfLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1xcdysvZyksZnVuY3Rpb24oYSxiKXt2YXIgYz1mY1tiXXx8Xy5maW5kLmF0dHI7ZmNbYl09ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGY7cmV0dXJuIGR8fChmPWZjW2JdLGZjW2JdPWUsZT1udWxsIT1jKGEsYixkKT9iLnRvTG93ZXJDYXNlKCk6bnVsbCxmY1tiXT1mKSxlfX0pO3ZhciBnYz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pO18uZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHFiKHRoaXMsXy5wcm9wLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tfLnByb3BGaXhbYV18fGFdfSl9fSksXy5leHRlbmQoe3Byb3BGaXg6e1wiZm9yXCI6XCJodG1sRm9yXCIsXCJjbGFzc1wiOlwiY2xhc3NOYW1lXCJ9LHByb3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnPWEubm9kZVR5cGU7aWYoYSYmMyE9PWcmJjghPT1nJiYyIT09ZylyZXR1cm4gZj0xIT09Z3x8IV8uaXNYTUxEb2MoYSksZiYmKGI9Xy5wcm9wRml4W2JdfHxiLGU9Xy5wcm9wSG9va3NbYl0pLHZvaWQgMCE9PWM/ZSYmXCJzZXRcImluIGUmJnZvaWQgMCE9PShkPWUuc2V0KGEsYyxiKSk/ZDphW2JdPWM6ZSYmXCJnZXRcImluIGUmJm51bGwhPT0oZD1lLmdldChhLGIpKT9kOmFbYl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5oYXNBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKXx8Z2MudGVzdChhLm5vZGVOYW1lKXx8YS5ocmVmP2EudGFiSW5kZXg6LTF9fX19KSxZLm9wdFNlbGVjdGVkfHwoXy5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJmIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH19KSxfLmVhY2goW1widGFiSW5kZXhcIixcInJlYWRPbmx5XCIsXCJtYXhMZW5ndGhcIixcImNlbGxTcGFjaW5nXCIsXCJjZWxsUGFkZGluZ1wiLFwicm93U3BhblwiLFwiY29sU3BhblwiLFwidXNlTWFwXCIsXCJmcmFtZUJvcmRlclwiLFwiY29udGVudEVkaXRhYmxlXCJdLGZ1bmN0aW9uKCl7Xy5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pO3ZhciBoYz0vW1xcdFxcclxcblxcZl0vZztfLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9XCJzdHJpbmdcIj09dHlwZW9mIGEmJmEsaT0wLGo9dGhpcy5sZW5ndGg7aWYoXy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Xyh0aGlzKS5hZGRDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihoKWZvcihiPShhfHxcIlwiKS5tYXRjaChuYil8fFtdO2o+aTtpKyspaWYoYz10aGlzW2ldLGQ9MT09PWMubm9kZVR5cGUmJihjLmNsYXNzTmFtZT8oXCIgXCIrYy5jbGFzc05hbWUrXCIgXCIpLnJlcGxhY2UoaGMsXCIgXCIpOlwiIFwiKSl7Zm9yKGY9MDtlPWJbZisrXTspZC5pbmRleE9mKFwiIFwiK2UrXCIgXCIpPDAmJihkKz1lK1wiIFwiKTtnPV8udHJpbShkKSxjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MD09PWFyZ3VtZW50cy5sZW5ndGh8fFwic3RyaW5nXCI9PXR5cGVvZiBhJiZhLGk9MCxqPXRoaXMubGVuZ3RoO2lmKF8uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe18odGhpcykucmVtb3ZlQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoaClmb3IoYj0oYXx8XCJcIikubWF0Y2gobmIpfHxbXTtqPmk7aSsrKWlmKGM9dGhpc1tpXSxkPTE9PT1jLm5vZGVUeXBlJiYoYy5jbGFzc05hbWU/KFwiIFwiK2MuY2xhc3NOYW1lK1wiIFwiKS5yZXBsYWNlKGhjLFwiIFwiKTpcIlwiKSl7Zm9yKGY9MDtlPWJbZisrXTspZm9yKDtkLmluZGV4T2YoXCIgXCIrZStcIiBcIik+PTA7KWQ9ZC5yZXBsYWNlKFwiIFwiK2UrXCIgXCIsXCIgXCIpO2c9YT9fLnRyaW0oZCk6XCJcIixjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGImJlwic3RyaW5nXCI9PT1jP2I/dGhpcy5hZGRDbGFzcyhhKTp0aGlzLnJlbW92ZUNsYXNzKGEpOnRoaXMuZWFjaChfLmlzRnVuY3Rpb24oYSk/ZnVuY3Rpb24oYyl7Xyh0aGlzKS50b2dnbGVDbGFzcyhhLmNhbGwodGhpcyxjLHRoaXMuY2xhc3NOYW1lLGIpLGIpfTpmdW5jdGlvbigpe2lmKFwic3RyaW5nXCI9PT1jKWZvcih2YXIgYixkPTAsZT1fKHRoaXMpLGY9YS5tYXRjaChuYil8fFtdO2I9ZltkKytdOyllLmhhc0NsYXNzKGIpP2UucmVtb3ZlQ2xhc3MoYik6ZS5hZGRDbGFzcyhiKTtlbHNlKGM9PT16Ynx8XCJib29sZWFuXCI9PT1jKSYmKHRoaXMuY2xhc3NOYW1lJiZyYi5zZXQodGhpcyxcIl9fY2xhc3NOYW1lX19cIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT9cIlwiOnJiLmdldCh0aGlzLFwiX19jbGFzc05hbWVfX1wiKXx8XCJcIil9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVwiIFwiK2ErXCIgXCIsYz0wLGQ9dGhpcy5sZW5ndGg7ZD5jO2MrKylpZigxPT09dGhpc1tjXS5ub2RlVHlwZSYmKFwiIFwiK3RoaXNbY10uY2xhc3NOYW1lK1wiIFwiKS5yZXBsYWNlKGhjLFwiIFwiKS5pbmRleE9mKGIpPj0wKXJldHVybiEwO3JldHVybiExfX0pO3ZhciBpYz0vXFxyL2c7Xy5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBkPV8uaXNGdW5jdGlvbihhKSx0aGlzLmVhY2goZnVuY3Rpb24oYyl7dmFyIGU7MT09PXRoaXMubm9kZVR5cGUmJihlPWQ/YS5jYWxsKHRoaXMsYyxfKHRoaXMpLnZhbCgpKTphLG51bGw9PWU/ZT1cIlwiOlwibnVtYmVyXCI9PXR5cGVvZiBlP2UrPVwiXCI6Xy5pc0FycmF5KGUpJiYoZT1fLm1hcChlLGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP1wiXCI6YStcIlwifSkpLGI9Xy52YWxIb29rc1t0aGlzLnR5cGVdfHxfLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmXCJzZXRcImluIGImJnZvaWQgMCE9PWIuc2V0KHRoaXMsZSxcInZhbHVlXCIpfHwodGhpcy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPV8udmFsSG9va3NbZS50eXBlXXx8Xy52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJlwiZ2V0XCJpbiBiJiZ2b2lkIDAhPT0oYz1iLmdldChlLFwidmFsdWVcIikpP2M6KGM9ZS52YWx1ZSxcInN0cmluZ1wiPT10eXBlb2YgYz9jLnJlcGxhY2UoaWMsXCJcIik6bnVsbD09Yz9cIlwiOmMpfX19KSxfLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPV8uZmluZC5hdHRyKGEsXCJ2YWx1ZVwiKTtyZXR1cm4gbnVsbCE9Yj9iOl8udHJpbShfLnRleHQoYSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVjdGVkSW5kZXgsZj1cInNlbGVjdC1vbmVcIj09PWEudHlwZXx8MD5lLGc9Zj9udWxsOltdLGg9Zj9lKzE6ZC5sZW5ndGgsaT0wPmU/aDpmP2U6MDtoPmk7aSsrKWlmKGM9ZFtpXSwhKCFjLnNlbGVjdGVkJiZpIT09ZXx8KFkub3B0RGlzYWJsZWQ/Yy5kaXNhYmxlZDpudWxsIT09Yy5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSl8fGMucGFyZW50Tm9kZS5kaXNhYmxlZCYmXy5ub2RlTmFtZShjLnBhcmVudE5vZGUsXCJvcHRncm91cFwiKSkpe2lmKGI9XyhjKS52YWwoKSxmKXJldHVybiBiO2cucHVzaChiKX1yZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjLGQsZT1hLm9wdGlvbnMsZj1fLm1ha2VBcnJheShiKSxnPWUubGVuZ3RoO2ctLTspZD1lW2ddLChkLnNlbGVjdGVkPV8uaW5BcnJheShkLnZhbHVlLGYpPj0wKSYmKGM9ITApO3JldHVybiBjfHwoYS5zZWxlY3RlZEluZGV4PS0xKSxmfX19fSksXy5lYWNoKFtcInJhZGlvXCIsXCJjaGVja2JveFwiXSxmdW5jdGlvbigpe18udmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihhLGIpe3JldHVybiBfLmlzQXJyYXkoYik/YS5jaGVja2VkPV8uaW5BcnJheShfKGEpLnZhbCgpLGIpPj0wOnZvaWQgMH19LFkuY2hlY2tPbnx8KF8udmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT09YS5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKT9cIm9uXCI6YS52YWx1ZX0pfSksXy5lYWNoKFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudVwiLnNwbGl0KFwiIFwiKSxmdW5jdGlvbihhLGIpe18uZm5bYl09ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfX0pLF8uZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91c2VsZWF2ZShifHxhKX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoYSxcIioqXCIpOnRoaXMub2ZmKGIsYXx8XCIqKlwiLGMpfX0pO3ZhciBqYz1fLm5vdygpLGtjPS9cXD8vO18ucGFyc2VKU09OPWZ1bmN0aW9uKGEpe3JldHVybiBKU09OLnBhcnNlKGErXCJcIil9LF8ucGFyc2VYTUw9ZnVuY3Rpb24oYSl7dmFyIGIsYztpZighYXx8XCJzdHJpbmdcIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7dHJ5e2M9bmV3IERPTVBhcnNlcixiPWMucGFyc2VGcm9tU3RyaW5nKGEsXCJ0ZXh0L3htbFwiKX1jYXRjaChkKXtiPXZvaWQgMH1yZXR1cm4oIWJ8fGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJwYXJzZXJlcnJvclwiKS5sZW5ndGgpJiZfLmVycm9yKFwiSW52YWxpZCBYTUw6IFwiK2EpLGJ9O3ZhciBsYyxtYyxuYz0vIy4qJC8sb2M9LyhbPyZdKV89W14mXSovLHBjPS9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvZ20scWM9L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8scmM9L14oPzpHRVR8SEVBRCkkLyxzYz0vXlxcL1xcLy8sdGM9L14oW1xcdy4rLV0rOikoPzpcXC9cXC8oPzpbXlxcLz8jXSpAfCkoW15cXC8/IzpdKikoPzo6KFxcZCspfCl8KS8sdWM9e30sdmM9e30sd2M9XCIqL1wiLmNvbmNhdChcIipcIik7dHJ5e21jPWxvY2F0aW9uLmhyZWZ9Y2F0Y2goeGMpe21jPVouY3JlYXRlRWxlbWVudChcImFcIiksbWMuaHJlZj1cIlwiLG1jPW1jLmhyZWZ9bGM9dGMuZXhlYyhtYy50b0xvd2VyQ2FzZSgpKXx8W10sXy5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOm1jLHR5cGU6XCJHRVRcIixpc0xvY2FsOnFjLnRlc3QobGNbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZTpcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLGFjY2VwdHM6e1wiKlwiOndjLHRleHQ6XCJ0ZXh0L3BsYWluXCIsaHRtbDpcInRleHQvaHRtbFwiLHhtbDpcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixqc29uOlwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6XCJyZXNwb25zZVhNTFwiLHRleHQ6XCJyZXNwb25zZVRleHRcIixqc29uOlwicmVzcG9uc2VKU09OXCJ9LGNvbnZlcnRlcnM6e1wiKiB0ZXh0XCI6U3RyaW5nLFwidGV4dCBodG1sXCI6ITAsXCJ0ZXh0IGpzb25cIjpfLnBhcnNlSlNPTixcInRleHQgeG1sXCI6Xy5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/TChMKGEsXy5hamF4U2V0dGluZ3MpLGIpOkwoXy5hamF4U2V0dGluZ3MsYSl9LGFqYXhQcmVmaWx0ZXI6Sih1YyksYWpheFRyYW5zcG9ydDpKKHZjKSxhamF4OmZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIsYyxnKXt2YXIgaSxrLHIscyx1LHc9YjsyIT09dCYmKHQ9MixoJiZjbGVhclRpbWVvdXQoaCksZD12b2lkIDAsZj1nfHxcIlwiLHYucmVhZHlTdGF0ZT1hPjA/NDowLGk9YT49MjAwJiYzMDA+YXx8MzA0PT09YSxjJiYocz1NKGwsdixjKSkscz1OKGwscyx2LGkpLGk/KGwuaWZNb2RpZmllZCYmKHU9di5nZXRSZXNwb25zZUhlYWRlcihcIkxhc3QtTW9kaWZpZWRcIiksdSYmKF8ubGFzdE1vZGlmaWVkW2VdPXUpLHU9di5nZXRSZXNwb25zZUhlYWRlcihcImV0YWdcIiksdSYmKF8uZXRhZ1tlXT11KSksMjA0PT09YXx8XCJIRUFEXCI9PT1sLnR5cGU/dz1cIm5vY29udGVudFwiOjMwND09PWE/dz1cIm5vdG1vZGlmaWVkXCI6KHc9cy5zdGF0ZSxrPXMuZGF0YSxyPXMuZXJyb3IsaT0hcikpOihyPXcsKGF8fCF3KSYmKHc9XCJlcnJvclwiLDA+YSYmKGE9MCkpKSx2LnN0YXR1cz1hLHYuc3RhdHVzVGV4dD0oYnx8dykrXCJcIixpP28ucmVzb2x2ZVdpdGgobSxbayx3LHZdKTpvLnJlamVjdFdpdGgobSxbdix3LHJdKSx2LnN0YXR1c0NvZGUocSkscT12b2lkIDAsaiYmbi50cmlnZ2VyKGk/XCJhamF4U3VjY2Vzc1wiOlwiYWpheEVycm9yXCIsW3YsbCxpP2s6cl0pLHAuZmlyZVdpdGgobSxbdix3XSksaiYmKG4udHJpZ2dlcihcImFqYXhDb21wbGV0ZVwiLFt2LGxdKSwtLV8uYWN0aXZlfHxfLmV2ZW50LnRyaWdnZXIoXCJhamF4U3RvcFwiKSkpfVwib2JqZWN0XCI9PXR5cGVvZiBhJiYoYj1hLGE9dm9pZCAwKSxiPWJ8fHt9O3ZhciBkLGUsZixnLGgsaSxqLGssbD1fLmFqYXhTZXR1cCh7fSxiKSxtPWwuY29udGV4dHx8bCxuPWwuY29udGV4dCYmKG0ubm9kZVR5cGV8fG0uanF1ZXJ5KT9fKG0pOl8uZXZlbnQsbz1fLkRlZmVycmVkKCkscD1fLkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLHE9bC5zdGF0dXNDb2RlfHx7fSxyPXt9LHM9e30sdD0wLHU9XCJjYW5jZWxlZFwiLHY9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihhKXt2YXIgYjtpZigyPT09dCl7aWYoIWcpZm9yKGc9e307Yj1wYy5leGVjKGYpOylnW2JbMV0udG9Mb3dlckNhc2UoKV09YlsyXTtiPWdbYS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4gbnVsbD09Yj9udWxsOmJ9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiAyPT09dD9mOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHR8fChhPXNbY109c1tjXXx8YSxyW2FdPWIpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHR8fChsLm1pbWVUeXBlPWEpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oYSl7dmFyIGI7aWYoYSlpZigyPnQpZm9yKGIgaW4gYSlxW2JdPVtxW2JdLGFbYl1dO2Vsc2Ugdi5hbHdheXMoYVt2LnN0YXR1c10pO3JldHVybiB0aGlzfSxhYm9ydDpmdW5jdGlvbihhKXt2YXIgYj1hfHx1O3JldHVybiBkJiZkLmFib3J0KGIpLGMoMCxiKSx0aGlzfX07aWYoby5wcm9taXNlKHYpLmNvbXBsZXRlPXAuYWRkLHYuc3VjY2Vzcz12LmRvbmUsdi5lcnJvcj12LmZhaWwsbC51cmw9KChhfHxsLnVybHx8bWMpK1wiXCIpLnJlcGxhY2UobmMsXCJcIikucmVwbGFjZShzYyxsY1sxXStcIi8vXCIpLGwudHlwZT1iLm1ldGhvZHx8Yi50eXBlfHxsLm1ldGhvZHx8bC50eXBlLGwuZGF0YVR5cGVzPV8udHJpbShsLmRhdGFUeXBlfHxcIipcIikudG9Mb3dlckNhc2UoKS5tYXRjaChuYil8fFtcIlwiXSxudWxsPT1sLmNyb3NzRG9tYWluJiYoaT10Yy5leGVjKGwudXJsLnRvTG93ZXJDYXNlKCkpLGwuY3Jvc3NEb21haW49ISghaXx8aVsxXT09PWxjWzFdJiZpWzJdPT09bGNbMl0mJihpWzNdfHwoXCJodHRwOlwiPT09aVsxXT9cIjgwXCI6XCI0NDNcIikpPT09KGxjWzNdfHwoXCJodHRwOlwiPT09bGNbMV0/XCI4MFwiOlwiNDQzXCIpKSkpLGwuZGF0YSYmbC5wcm9jZXNzRGF0YSYmXCJzdHJpbmdcIiE9dHlwZW9mIGwuZGF0YSYmKGwuZGF0YT1fLnBhcmFtKGwuZGF0YSxsLnRyYWRpdGlvbmFsKSksSyh1YyxsLGIsdiksMj09PXQpcmV0dXJuIHY7aj1sLmdsb2JhbCxqJiYwPT09Xy5hY3RpdmUrKyYmXy5ldmVudC50cmlnZ2VyKFwiYWpheFN0YXJ0XCIpLGwudHlwZT1sLnR5cGUudG9VcHBlckNhc2UoKSxsLmhhc0NvbnRlbnQ9IXJjLnRlc3QobC50eXBlKSxlPWwudXJsLGwuaGFzQ29udGVudHx8KGwuZGF0YSYmKGU9bC51cmwrPShrYy50ZXN0KGUpP1wiJlwiOlwiP1wiKStsLmRhdGEsZGVsZXRlIGwuZGF0YSksbC5jYWNoZT09PSExJiYobC51cmw9b2MudGVzdChlKT9lLnJlcGxhY2Uob2MsXCIkMV89XCIramMrKyk6ZSsoa2MudGVzdChlKT9cIiZcIjpcIj9cIikrXCJfPVwiK2pjKyspKSxsLmlmTW9kaWZpZWQmJihfLmxhc3RNb2RpZmllZFtlXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKFwiSWYtTW9kaWZpZWQtU2luY2VcIixfLmxhc3RNb2RpZmllZFtlXSksXy5ldGFnW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoXCJJZi1Ob25lLU1hdGNoXCIsXy5ldGFnW2VdKSksKGwuZGF0YSYmbC5oYXNDb250ZW50JiZsLmNvbnRlbnRUeXBlIT09ITF8fGIuY29udGVudFR5cGUpJiZ2LnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIixsLmNvbnRlbnRUeXBlKSx2LnNldFJlcXVlc3RIZWFkZXIoXCJBY2NlcHRcIixsLmRhdGFUeXBlc1swXSYmbC5hY2NlcHRzW2wuZGF0YVR5cGVzWzBdXT9sLmFjY2VwdHNbbC5kYXRhVHlwZXNbMF1dKyhcIipcIiE9PWwuZGF0YVR5cGVzWzBdP1wiLCBcIit3YytcIjsgcT0wLjAxXCI6XCJcIik6bC5hY2NlcHRzW1wiKlwiXSk7Zm9yKGsgaW4gbC5oZWFkZXJzKXYuc2V0UmVxdWVzdEhlYWRlcihrLGwuaGVhZGVyc1trXSk7aWYobC5iZWZvcmVTZW5kJiYobC5iZWZvcmVTZW5kLmNhbGwobSx2LGwpPT09ITF8fDI9PT10KSlyZXR1cm4gdi5hYm9ydCgpO3U9XCJhYm9ydFwiO2ZvcihrIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZba10obFtrXSk7aWYoZD1LKHZjLGwsYix2KSl7di5yZWFkeVN0YXRlPTEsaiYmbi50cmlnZ2VyKFwiYWpheFNlbmRcIixbdixsXSksbC5hc3luYyYmbC50aW1lb3V0PjAmJihoPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KFwidGltZW91dFwiKX0sbC50aW1lb3V0KSk7dHJ5e3Q9MSxkLnNlbmQocixjKX1jYXRjaCh3KXtpZighKDI+dCkpdGhyb3cgdztjKC0xLHcpfX1lbHNlIGMoLTEsXCJObyBUcmFuc3BvcnRcIik7cmV0dXJuIHZ9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBfLmdldChhLGIsYyxcImpzb25cIil9LGdldFNjcmlwdDpmdW5jdGlvbihhLGIpe3JldHVybiBfLmdldChhLHZvaWQgMCxiLFwic2NyaXB0XCIpfX0pLF8uZWFjaChbXCJnZXRcIixcInBvc3RcIl0sZnVuY3Rpb24oYSxiKXtfW2JdPWZ1bmN0aW9uKGEsYyxkLGUpe3JldHVybiBfLmlzRnVuY3Rpb24oYykmJihlPWV8fGQsZD1jLGM9dm9pZCAwKSxfLmFqYXgoe3VybDphLHR5cGU6YixkYXRhVHlwZTplLGRhdGE6YyxzdWNjZXNzOmR9KX19KSxfLmVhY2goW1wiYWpheFN0YXJ0XCIsXCJhamF4U3RvcFwiLFwiYWpheENvbXBsZXRlXCIsXCJhamF4RXJyb3JcIixcImFqYXhTdWNjZXNzXCIsXCJhamF4U2VuZFwiXSxmdW5jdGlvbihhLGIpe18uZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub24oYixhKX19KSxfLl9ldmFsVXJsPWZ1bmN0aW9uKGEpe3JldHVybiBfLmFqYXgoe3VybDphLHR5cGU6XCJHRVRcIixkYXRhVHlwZTpcInNjcmlwdFwiLGFzeW5jOiExLGdsb2JhbDohMSxcInRocm93c1wiOiEwfSl9LF8uZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBfLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe18odGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KToodGhpc1swXSYmKGI9XyhhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpczthLmZpcnN0RWxlbWVudENoaWxkOylhPWEuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcykpLHRoaXMpfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChfLmlzRnVuY3Rpb24oYSk/ZnVuY3Rpb24oYil7Xyh0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfTpmdW5jdGlvbigpe3ZhciBiPV8odGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9Xy5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7Xyh0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe18ubm9kZU5hbWUodGhpcyxcImJvZHlcIil8fF8odGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfX0pLF8uZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aDw9MCYmYS5vZmZzZXRIZWlnaHQ8PTB9LF8uZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oYSl7cmV0dXJuIV8uZXhwci5maWx0ZXJzLmhpZGRlbihhKX07dmFyIHljPS8lMjAvZyx6Yz0vXFxbXFxdJC8sQWM9L1xccj9cXG4vZyxCYz0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksQ2M9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO18ucGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9ZnVuY3Rpb24oYSxiKXtiPV8uaXNGdW5jdGlvbihiKT9iKCk6bnVsbD09Yj9cIlwiOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChiKX07aWYodm9pZCAwPT09YiYmKGI9Xy5hamF4U2V0dGluZ3MmJl8uYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxfLmlzQXJyYXkoYSl8fGEuanF1ZXJ5JiYhXy5pc1BsYWluT2JqZWN0KGEpKV8uZWFjaChhLGZ1bmN0aW9uKCl7ZSh0aGlzLm5hbWUsdGhpcy52YWx1ZSlcbn0pO2Vsc2UgZm9yKGMgaW4gYSlPKGMsYVtjXSxiLGUpO3JldHVybiBkLmpvaW4oXCImXCIpLnJlcGxhY2UoeWMsXCIrXCIpfSxfLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIF8ucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT1fLnByb3AodGhpcyxcImVsZW1lbnRzXCIpO3JldHVybiBhP18ubWFrZUFycmF5KGEpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIV8odGhpcykuaXMoXCI6ZGlzYWJsZWRcIikmJkNjLnRlc3QodGhpcy5ub2RlTmFtZSkmJiFCYy50ZXN0KGEpJiYodGhpcy5jaGVja2VkfHwheWIudGVzdChhKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1fKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1jP251bGw6Xy5pc0FycmF5KGMpP18ubWFwKGMsZnVuY3Rpb24oYSl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFjZShBYyxcIlxcclxcblwiKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKEFjLFwiXFxyXFxuXCIpfX0pLmdldCgpfX0pLF8uYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fWNhdGNoKGEpe319O3ZhciBEYz0wLEVjPXt9LEZjPXswOjIwMCwxMjIzOjIwNH0sR2M9Xy5hamF4U2V0dGluZ3MueGhyKCk7YS5BY3RpdmVYT2JqZWN0JiZfKGEpLm9uKFwidW5sb2FkXCIsZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gRWMpRWNbYV0oKX0pLFkuY29ycz0hIUdjJiZcIndpdGhDcmVkZW50aWFsc1wiaW4gR2MsWS5hamF4PUdjPSEhR2MsXy5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBZLmNvcnN8fEdjJiYhYS5jcm9zc0RvbWFpbj97c2VuZDpmdW5jdGlvbihjLGQpe3ZhciBlLGY9YS54aHIoKSxnPSsrRGM7aWYoZi5vcGVuKGEudHlwZSxhLnVybCxhLmFzeW5jLGEudXNlcm5hbWUsYS5wYXNzd29yZCksYS54aHJGaWVsZHMpZm9yKGUgaW4gYS54aHJGaWVsZHMpZltlXT1hLnhockZpZWxkc1tlXTthLm1pbWVUeXBlJiZmLm92ZXJyaWRlTWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZShhLm1pbWVUeXBlKSxhLmNyb3NzRG9tYWlufHxjW1wiWC1SZXF1ZXN0ZWQtV2l0aFwiXXx8KGNbXCJYLVJlcXVlc3RlZC1XaXRoXCJdPVwiWE1MSHR0cFJlcXVlc3RcIik7Zm9yKGUgaW4gYylmLnNldFJlcXVlc3RIZWFkZXIoZSxjW2VdKTtiPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe2ImJihkZWxldGUgRWNbZ10sYj1mLm9ubG9hZD1mLm9uZXJyb3I9bnVsbCxcImFib3J0XCI9PT1hP2YuYWJvcnQoKTpcImVycm9yXCI9PT1hP2QoZi5zdGF0dXMsZi5zdGF0dXNUZXh0KTpkKEZjW2Yuc3RhdHVzXXx8Zi5zdGF0dXMsZi5zdGF0dXNUZXh0LFwic3RyaW5nXCI9PXR5cGVvZiBmLnJlc3BvbnNlVGV4dD97dGV4dDpmLnJlc3BvbnNlVGV4dH06dm9pZCAwLGYuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LGYub25sb2FkPWIoKSxmLm9uZXJyb3I9YihcImVycm9yXCIpLGI9RWNbZ109YihcImFib3J0XCIpO3RyeXtmLnNlbmQoYS5oYXNDb250ZW50JiZhLmRhdGF8fG51bGwpfWNhdGNoKGgpe2lmKGIpdGhyb3cgaH19LGFib3J0OmZ1bmN0aW9uKCl7YiYmYigpfX06dm9pZCAwfSksXy5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDpcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOntcInRleHQgc2NyaXB0XCI6ZnVuY3Rpb24oYSl7cmV0dXJuIF8uZ2xvYmFsRXZhbChhKSxhfX19KSxfLmFqYXhQcmVmaWx0ZXIoXCJzY3JpcHRcIixmdW5jdGlvbihhKXt2b2lkIDA9PT1hLmNhY2hlJiYoYS5jYWNoZT0hMSksYS5jcm9zc0RvbWFpbiYmKGEudHlwZT1cIkdFVFwiKX0pLF8uYWpheFRyYW5zcG9ydChcInNjcmlwdFwiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBiLGM7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZCxlKXtiPV8oXCI8c2NyaXB0PlwiKS5wcm9wKHthc3luYzohMCxjaGFyc2V0OmEuc2NyaXB0Q2hhcnNldCxzcmM6YS51cmx9KS5vbihcImxvYWQgZXJyb3JcIixjPWZ1bmN0aW9uKGEpe2IucmVtb3ZlKCksYz1udWxsLGEmJmUoXCJlcnJvclwiPT09YS50eXBlPzQwNDoyMDAsYS50eXBlKX0pLFouaGVhZC5hcHBlbmRDaGlsZChiWzBdKX0sYWJvcnQ6ZnVuY3Rpb24oKXtjJiZjKCl9fX19KTt2YXIgSGM9W10sSWM9Lyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztfLmFqYXhTZXR1cCh7anNvbnA6XCJjYWxsYmFja1wiLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgYT1IYy5wb3AoKXx8Xy5leHBhbmRvK1wiX1wiK2pjKys7cmV0dXJuIHRoaXNbYV09ITAsYX19KSxfLmFqYXhQcmVmaWx0ZXIoXCJqc29uIGpzb25wXCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoPWIuanNvbnAhPT0hMSYmKEljLnRlc3QoYi51cmwpP1widXJsXCI6XCJzdHJpbmdcIj09dHlwZW9mIGIuZGF0YSYmIShiLmNvbnRlbnRUeXBlfHxcIlwiKS5pbmRleE9mKFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpJiZJYy50ZXN0KGIuZGF0YSkmJlwiZGF0YVwiKTtyZXR1cm4gaHx8XCJqc29ucFwiPT09Yi5kYXRhVHlwZXNbMF0/KGU9Yi5qc29ucENhbGxiYWNrPV8uaXNGdW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxoP2JbaF09YltoXS5yZXBsYWNlKEljLFwiJDFcIitlKTpiLmpzb25wIT09ITEmJihiLnVybCs9KGtjLnRlc3QoYi51cmwpP1wiJlwiOlwiP1wiKStiLmpzb25wK1wiPVwiK2UpLGIuY29udmVydGVyc1tcInNjcmlwdCBqc29uXCJdPWZ1bmN0aW9uKCl7cmV0dXJuIGd8fF8uZXJyb3IoZStcIiB3YXMgbm90IGNhbGxlZFwiKSxnWzBdfSxiLmRhdGFUeXBlc1swXT1cImpzb25cIixmPWFbZV0sYVtlXT1mdW5jdGlvbigpe2c9YXJndW1lbnRzfSxkLmFsd2F5cyhmdW5jdGlvbigpe2FbZV09ZixiW2VdJiYoYi5qc29ucENhbGxiYWNrPWMuanNvbnBDYWxsYmFjayxIYy5wdXNoKGUpKSxnJiZfLmlzRnVuY3Rpb24oZikmJmYoZ1swXSksZz1mPXZvaWQgMH0pLFwic2NyaXB0XCIpOnZvaWQgMH0pLF8ucGFyc2VIVE1MPWZ1bmN0aW9uKGEsYixjKXtpZighYXx8XCJzdHJpbmdcIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7XCJib29sZWFuXCI9PXR5cGVvZiBiJiYoYz1iLGI9ITEpLGI9Ynx8Wjt2YXIgZD1nYi5leGVjKGEpLGU9IWMmJltdO3JldHVybiBkP1tiLmNyZWF0ZUVsZW1lbnQoZFsxXSldOihkPV8uYnVpbGRGcmFnbWVudChbYV0sYixlKSxlJiZlLmxlbmd0aCYmXyhlKS5yZW1vdmUoKSxfLm1lcmdlKFtdLGQuY2hpbGROb2RlcykpfTt2YXIgSmM9Xy5mbi5sb2FkO18uZm4ubG9hZD1mdW5jdGlvbihhLGIsYyl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGEmJkpjKXJldHVybiBKYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGQsZSxmLGc9dGhpcyxoPWEuaW5kZXhPZihcIiBcIik7cmV0dXJuIGg+PTAmJihkPV8udHJpbShhLnNsaWNlKGgpKSxhPWEuc2xpY2UoMCxoKSksXy5pc0Z1bmN0aW9uKGIpPyhjPWIsYj12b2lkIDApOmImJlwib2JqZWN0XCI9PXR5cGVvZiBiJiYoZT1cIlBPU1RcIiksZy5sZW5ndGg+MCYmXy5hamF4KHt1cmw6YSx0eXBlOmUsZGF0YVR5cGU6XCJodG1sXCIsZGF0YTpifSkuZG9uZShmdW5jdGlvbihhKXtmPWFyZ3VtZW50cyxnLmh0bWwoZD9fKFwiPGRpdj5cIikuYXBwZW5kKF8ucGFyc2VIVE1MKGEpKS5maW5kKGQpOmEpfSkuY29tcGxldGUoYyYmZnVuY3Rpb24oYSxiKXtnLmVhY2goYyxmfHxbYS5yZXNwb25zZVRleHQsYixhXSl9KSx0aGlzfSxfLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gXy5ncmVwKF8udGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofTt2YXIgS2M9YS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7Xy5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaz1fLmNzcyhhLFwicG9zaXRpb25cIiksbD1fKGEpLG09e307XCJzdGF0aWNcIj09PWsmJihhLnN0eWxlLnBvc2l0aW9uPVwicmVsYXRpdmVcIiksaD1sLm9mZnNldCgpLGY9Xy5jc3MoYSxcInRvcFwiKSxpPV8uY3NzKGEsXCJsZWZ0XCIpLGo9KFwiYWJzb2x1dGVcIj09PWt8fFwiZml4ZWRcIj09PWspJiYoZitpKS5pbmRleE9mKFwiYXV0b1wiKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KTooZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksXy5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGgpKSxudWxsIT1iLnRvcCYmKG0udG9wPWIudG9wLWgudG9wK2cpLG51bGwhPWIubGVmdCYmKG0ubGVmdD1iLmxlZnQtaC5sZWZ0K2UpLFwidXNpbmdcImluIGI/Yi51c2luZy5jYWxsKGEsbSk6bC5jc3MobSl9fSxfLmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKGEpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PWE/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oYil7Xy5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsYSxiKX0pO3ZhciBiLGMsZD10aGlzWzBdLGU9e3RvcDowLGxlZnQ6MH0sZj1kJiZkLm93bmVyRG9jdW1lbnQ7aWYoZilyZXR1cm4gYj1mLmRvY3VtZW50RWxlbWVudCxfLmNvbnRhaW5zKGIsZCk/KHR5cGVvZiBkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9PXpiJiYoZT1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxjPVAoZikse3RvcDplLnRvcCtjLnBhZ2VZT2Zmc2V0LWIuY2xpZW50VG9wLGxlZnQ6ZS5sZWZ0K2MucGFnZVhPZmZzZXQtYi5jbGllbnRMZWZ0fSk6ZX0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgYSxiLGM9dGhpc1swXSxkPXt0b3A6MCxsZWZ0OjB9O3JldHVyblwiZml4ZWRcIj09PV8uY3NzKGMsXCJwb3NpdGlvblwiKT9iPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGE9dGhpcy5vZmZzZXRQYXJlbnQoKSxiPXRoaXMub2Zmc2V0KCksXy5ub2RlTmFtZShhWzBdLFwiaHRtbFwiKXx8KGQ9YS5vZmZzZXQoKSksZC50b3ArPV8uY3NzKGFbMF0sXCJib3JkZXJUb3BXaWR0aFwiLCEwKSxkLmxlZnQrPV8uY3NzKGFbMF0sXCJib3JkZXJMZWZ0V2lkdGhcIiwhMCkpLHt0b3A6Yi50b3AtZC50b3AtXy5jc3MoYyxcIm1hcmdpblRvcFwiLCEwKSxsZWZ0OmIubGVmdC1kLmxlZnQtXy5jc3MoYyxcIm1hcmdpbkxlZnRcIiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMub2Zmc2V0UGFyZW50fHxLYzthJiYhXy5ub2RlTmFtZShhLFwiaHRtbFwiKSYmXCJzdGF0aWNcIj09PV8uY3NzKGEsXCJwb3NpdGlvblwiKTspYT1hLm9mZnNldFBhcmVudDtyZXR1cm4gYXx8S2N9KX19KSxfLmVhY2goe3Njcm9sbExlZnQ6XCJwYWdlWE9mZnNldFwiLHNjcm9sbFRvcDpcInBhZ2VZT2Zmc2V0XCJ9LGZ1bmN0aW9uKGIsYyl7dmFyIGQ9XCJwYWdlWU9mZnNldFwiPT09YztfLmZuW2JdPWZ1bmN0aW9uKGUpe3JldHVybiBxYih0aGlzLGZ1bmN0aW9uKGIsZSxmKXt2YXIgZz1QKGIpO3JldHVybiB2b2lkIDA9PT1mP2c/Z1tjXTpiW2VdOnZvaWQoZz9nLnNjcm9sbFRvKGQ/YS5wYWdlWE9mZnNldDpmLGQ/ZjphLnBhZ2VZT2Zmc2V0KTpiW2VdPWYpfSxiLGUsYXJndW1lbnRzLmxlbmd0aCxudWxsKX19KSxfLmVhY2goW1widG9wXCIsXCJsZWZ0XCJdLGZ1bmN0aW9uKGEsYil7Xy5jc3NIb29rc1tiXT13KFkucGl4ZWxQb3NpdGlvbixmdW5jdGlvbihhLGMpe3JldHVybiBjPyhjPXYoYSxiKSxRYi50ZXN0KGMpP18oYSkucG9zaXRpb24oKVtiXStcInB4XCI6Yyk6dm9pZCAwfSl9KSxfLmVhY2goe0hlaWdodDpcImhlaWdodFwiLFdpZHRoOlwid2lkdGhcIn0sZnVuY3Rpb24oYSxiKXtfLmVhY2goe3BhZGRpbmc6XCJpbm5lclwiK2EsY29udGVudDpiLFwiXCI6XCJvdXRlclwiK2F9LGZ1bmN0aW9uKGMsZCl7Xy5mbltkXT1mdW5jdGlvbihkLGUpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGgmJihjfHxcImJvb2xlYW5cIiE9dHlwZW9mIGQpLGc9Y3x8KGQ9PT0hMHx8ZT09PSEwP1wibWFyZ2luXCI6XCJib3JkZXJcIik7cmV0dXJuIHFiKHRoaXMsZnVuY3Rpb24oYixjLGQpe3ZhciBlO3JldHVybiBfLmlzV2luZG93KGIpP2IuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W1wiY2xpZW50XCIrYV06OT09PWIubm9kZVR5cGU/KGU9Yi5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoYi5ib2R5W1wic2Nyb2xsXCIrYV0sZVtcInNjcm9sbFwiK2FdLGIuYm9keVtcIm9mZnNldFwiK2FdLGVbXCJvZmZzZXRcIithXSxlW1wiY2xpZW50XCIrYV0pKTp2b2lkIDA9PT1kP18uY3NzKGIsYyxnKTpfLnN0eWxlKGIsYyxkLGcpfSxiLGY/ZDp2b2lkIDAsZixudWxsKX19KX0pLF8uZm4uc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sXy5mbi5hbmRTZWxmPV8uZm4uYWRkQmFjayxcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZShcImpxdWVyeVwiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIF99KTt2YXIgTGM9YS5qUXVlcnksTWM9YS4kO3JldHVybiBfLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEuJD09PV8mJihhLiQ9TWMpLGImJmEualF1ZXJ5PT09XyYmKGEualF1ZXJ5PUxjKSxffSx0eXBlb2YgYj09PXpiJiYoYS5qUXVlcnk9YS4kPV8pLF99KTtcbiIsIu+7v2Fnb3JhKGZ1bmN0aW9uICgpIHtcclxuICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1tb2RhbGRpYWxvZ11cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB0cmlnZ2VyRWxlbWVudCA9ICQodGhpcyk7XHJcbiAgICAgICAgaWYgKHRyaWdnZXJFbGVtZW50LnByb3AoJ2Rpc2FibGVkJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuOyBcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJpZ2dlckVsZW1lbnQucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdHJpZ2dlckVsZW1lbnQucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XHJcbiAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgJCh0aGlzKS5BZ29yYURpYWxvZ01vZGFsKHsgQWZ0ZXJMb2FkOiAkKHRoaXMpLmF0dHIoJ2RhdGEtbW9kYWxkaWFsb2ctYWZ0ZXJMb2FkJykgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKGRvY3VtZW50KS5vbihcImNsaWNrXCIsIFwiW2RhdGEtbW9kYWxkaWFsb2ctY2xvc2VdXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKHRoaXMpLkFnb3JhRGlhbG9nTW9kYWwoeyBDbG9zZU1vZGFsOiB0cnVlIH0pO1xyXG4gICAgICAgIHZhciBzZW5kZXIgPSAkKHRoaXMpO1xyXG4gICAgICAgIGlmIChzZW5kZXIuZGF0YSgnbW9kYWxkaWFsb2ctY2xvc2UnKSA9PSAnY2xlYXInKVxyXG4gICAgICAgIENsZWFyRm9ybXZhbCgnW2RhdGEtcmVxdWVzdF0nKTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1tb2RhbGRpYWxvZy1jbG9zZS1mb3JtXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJCh0aGlzKS5BZ29yYURpYWxvZ01vZGFsKHsgQ2xvc2VNb2RhbDogdHJ1ZSwgQWZ0ZXJMb2FkOiAkKHRoaXMpLmF0dHIoJ2RhdGEtbW9kYWxkaWFsb2ctYWZ0ZXJMb2FkJykgfSk7XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG4oZnVuY3Rpb24gKCQpIHtcclxuICAgIC8vRm9ybWF0IDogZGF0YS1tb2RhbGRpYWxvZz1cIlwiIGRhdGEtbW9kYWxkaWFsb2ctaWQ9XCJcIiBkYXRhLW1vZGFsZGlhbG9nLWFqYXg9XCJ0cnVlXCIgZGF0YS1tb2RhbGRpYWxvZy1zcmM9XCJcIlxyXG4gICAgJC5mbi5BZ29yYURpYWxvZ01vZGFsID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsgcmV0dXJuIG5ldyBhZ29yYURpYWxvZyh0aGlzLCBvcHRpb25zKTsgfTtcclxuICAgIGZ1bmN0aW9uIGFnb3JhRGlhbG9nKHNlbmRlciwgb3B0aW9ucykge1xyXG4gICAgICAgIHZhciBfZGVmYXVsdHMgPSB7XHJcbiAgICAgICAgICAgIFNlcnZpY2VVcmw6ICcnLFxyXG4gICAgICAgICAgICBNb2RhbElkOiAnSUJQbW9kYWxjb250YWluZXInLFxyXG4gICAgICAgICAgICBQYXJhbXM6IG51bGwsXHJcbiAgICAgICAgICAgIEh0bWw6IG51bGwsXHJcbiAgICAgICAgICAgIFBhcmVudENzczogbnVsbCxcclxuICAgICAgICAgICAgRW5hYmxlQ2xvc2VCdXR0b246IHRydWUsXHJcbiAgICAgICAgICAgIEVuYWJsZUxvYWRlcjogdHJ1ZSxcclxuICAgICAgICAgICAgRW5hYmxlQWpheEh0bWxMb2FkOiBmYWxzZSxcclxuICAgICAgICAgICAgSGlkZUNsb3NlQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgQ2xvc2VNb2RhbDogZmFsc2UsXHJcbiAgICAgICAgICAgIENsb3NlV2hlblVzZXJQcmVzc0VzY2FwZTogdHJ1ZSxcclxuICAgICAgICAgICAgVHJhbnNpdGlvbjogJ0ZhZGVJbicsIC8qIEZhZGVJbiwgQXBwZW5kICovXHJcbiAgICAgICAgICAgIEJlZm9yZUxvYWQ6IG51bGwsXHJcbiAgICAgICAgICAgIEFmdGVyTG9hZDogbnVsbFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF9vcHRpb25zID0gJC5leHRlbmQoX2RlZmF1bHRzLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLkNsb3NlTW9kYWwpIHtcclxuICAgICAgICAgICAgJChzZW5kZXIpLmNsb3Nlc3QoJy5hZ29yYS1tZGwtZGF0YS1kaWFsb2ctY29udGFpbmVyJykudHJpZ2dlcignZGlzcG9zZScpO1xyXG4gICAgICAgICAgICAkKHNlbmRlcikuY2xvc2VzdCgnLmFnb3JhLW1kbC1kYXRhLWRpYWxvZy1jb250YWluZXInKS5yZW1vdmVDbGFzcygncG9wdXAtb3BlbicpO1xyXG4gICAgICAgICAgICAkKHNlbmRlcikuY2xvc2VzdCgnLmFnb3JhLW1kbC1kYXRhLWRpYWxvZy1jb250YWluZXInKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgLy8kKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLnRyaWdnZXIoJ2Rpc3Bvc2UnKTtcclxuICAgICAgICAgICAgLy8kKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLnJlbW92ZUNsYXNzKCdwb3B1cC1vcGVuJyk7XHJcbiAgICAgICAgICAgIC8vJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgJCgnYm9keScpLnJlbW92ZUNsYXNzKCdwb3B1cC1hY3RpdmUnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLkFmdGVyTG9hZCkge1xyXG4gICAgICAgICAgICBfb3B0aW9ucy5BZnRlckxvYWQgPSBldmFsKFwiKGZ1bmN0aW9uKCkgeyBcIiArIF9vcHRpb25zLkFmdGVyTG9hZCArIFwiKFwiICsgc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLWlkXCIpICtcIik7IH0pXCIpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVMb2FkZXIpIFNob3dMb2FkaW5nKCk7XHJcblxyXG4gICAgICAgIExvYWRPcHRpb25zKCk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIExvYWRPcHRpb25zKCkge1xyXG5cclxuICAgICAgICAgICAgaWYgKElzTm90TnVsbChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctc3JjXCIpKSkgX29wdGlvbnMuU2VydmljZVVybCA9IHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1zcmNcIik7XHJcbiAgICAgICAgICAgIGlmIChJc05vdE51bGwoc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLWFqYXhcIikpKSBfb3B0aW9ucy5FbmFibGVBamF4SHRtbExvYWQgPSBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctYWpheFwiKTtcclxuICAgICAgICAgICAgaWYgKElzTm90TnVsbChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctUGFyZW50Q3NzXCIpKSkgX29wdGlvbnMuUGFyZW50Q3NzID0gc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLVBhcmVudENzc1wiKTtcclxuICAgICAgICAgICAgaWYgKElzTm90TnVsbChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctQ2xvc2VXaGVuVXNlclByZXNzRXNjYXBlXCIpKSkgX29wdGlvbnMuQ2xvc2VXaGVuVXNlclByZXNzRXNjYXBlID0gKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1DbG9zZVdoZW5Vc2VyUHJlc3NFc2NhcGVcIikgPT0gJ3RydWUnKTtcclxuICAgICAgICAgICAgaWYgKElzTm90TnVsbChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctSGlkZUNsb3NlQnV0dG9uXCIpKSkgX29wdGlvbnMuSGlkZUNsb3NlQnV0dG9uID0gKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1IaWRlQ2xvc2VCdXR0b25cIikgPT0gJ3RydWUnKTtcclxuICAgICAgICAgICAgaWYgKElzTm90TnVsbChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctaWRcIikpKSBfb3B0aW9ucy5Nb2RhbElkID0gc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLWlkXCIpO1xyXG4gICAgICAgICAgICBHZXRIdG1sKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBHZXRIdG1sKCkge1xyXG5cclxuXHJcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVBamF4SHRtbExvYWQpIHtcclxuICAgICAgICAgICAgICAgIC8vUmVtb3ZlIGlmIHRoZSBjb250YWluZXIgaXMgYWxyZWFkeSBvcGVuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAkKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgLy9HZXQgSHRtbCBGcm9tIFRoZSBTZXJ2aWNlIFVybFxyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IF9vcHRpb25zLlNlcnZpY2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Bvc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnaHRtbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogX29wdGlvbnMuUGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX29wdGlvbnMuSHRtbCA9IHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBCaW5kSHRtbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBTaG93QWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJywgMzAwMCwgJ2FsZXJ0X2JveCcsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlTG9hZGVyKSBTaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dBbGVydCgnU2VydmljZSBub3QgZm91bmQhJywgMzAwMCwgJ2FsZXJ0X2JveCcsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUxvYWRlcikgU2hvd0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkFmdGVyTG9hZCkgX29wdGlvbnMuQWZ0ZXJMb2FkKCk7XHJcbiAgICAgICAgICAgICAgICBfb3B0aW9ucy5IdG1sID0gJCgnIycgKyBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctaWRcIikpLmNsb25lKCkud3JhcCgnIycgKyBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctaWRcIikpLmh0bWwoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgQmluZEh0bWwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIEJpbmRIdG1sKCkge1xyXG4gICAgICAgICAgICBpZiAoX29wdGlvbnMuSHRtbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAvL0NyZWF0ZSBwb3B1cCBjb250YWluZXJcclxuICAgICAgICAgICAgICAgICQoJzxkaXYgaWQ9XCInICsgX29wdGlvbnMuTW9kYWxJZCArICdcIiBjbGFzcz1cImFnb3JhLW1kbC1kYXRhLWRpYWxvZy1jb250YWluZXIgJyArIF9vcHRpb25zLlBhcmVudENzcyArICdcIj48ZGl2IGNsYXNzPVwiYWdvcmEtbWRsLWRhdGEtZGlhbG9nLWNvbnRhaW5lci1ib2R5XCI+JyArKCFfb3B0aW9ucy5IaWRlQ2xvc2VCdXR0b24gPyAnPGRpdiBkYXRhLW1vZGFsZGlhbG9nLWNsb3NlPVwiXCIgY2xhc3M9XCJtZGwtY2xvc2VcIj48L2Rpdj4nIDogJycpICsgX29wdGlvbnMuSHRtbCArICc8L2Rpdj48ZGl2IGlkPVwicG9wdXBcIiBjbGFzcz1cIm1kbC1qcy1zbmFja2JhciBtZGwtc25hY2tiYXJcIj48ZGl2IGNsYXNzPVwibWRsLXNuYWNrYmFyX190ZXh0XCI+PC9kaXY+PGJ1dHRvbiBhcmlhLWxhYmVsPVwiYnV0dG9uXCIgY2xhc3M9XCJtZGwtc25hY2tiYXJfX2FjdGlvblwiIHR5cGU9XCJidXR0b25cIj48L2J1dHRvbj48L2Rpdj4gPC9kaXY+JykuYXBwZW5kVG8oXCJib2R5XCIpO1xyXG4gICAgICAgICAgICAgICAgLy8kKCcuYWdvcmEtbWRsLWRhdGEtZGlhbG9nLWNvbnRhaW5lcicpLmNzcygndG9wJywgKCQod2luZG93KS5zY3JvbGxUb3AoKSkgKyAncHgnKTtcclxuICAgICAgICAgICAgICAgICQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkuYWRkQ2xhc3MoJ3BvcHVwLW9wZW4nKTtcclxuICAgICAgICAgICAgICAgICQoJ2JvZHknKS5hZGRDbGFzcygncG9wdXAtYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAvL0JpbmQgSHRtbFxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUxvYWRlcikgU2hvd0xvYWRpbmcoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoISh0eXBlb2YgKGNvbXBvbmVudEhhbmRsZXIpID09ICd1bmRlZmluZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEhhbmRsZXIudXBncmFkZURvbSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkuZmluZCgnLm1kbC10ZXh0ZmllbGQtLWZsb2F0aW5nLWxhYmVsIGlucHV0Lm1kbC10ZXh0ZmllbGRfX2lucHV0Om5vdChbcGxhY2Vob2xkZXJdKScpLmF0dHIoXCJwbGFjZWhvbGRlclwiLCBcIiAgXCIpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvL2lmIChyZUNhcHRjaGFBZ29yYSkge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5maW5kKCdbZGF0YS1yZWNhcHRjaGEtYWdvcmFdJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyAgICByZUNhcHRjaGFBZ29yYS5pbml0KHJlQ2FwdGNoYUFnb3JhLnJlQ2FwdGNoYUFwcElELCByZUNhcHRjaGFBZ29yYS50b2tlbiwgZmFsc2UsIDEpO1xyXG4gICAgICAgICAgICAgICAgLy99XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQoZG9jdW1lbnQpLmtleWRvd24oZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSBcIjI3XCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5DbG9zZVdoZW5Vc2VyUHJlc3NFc2NhcGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLnJlbW92ZUNsYXNzKCdwb3B1cC1vcGVuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ3BvcHVwLWFjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0pKGpRdWVyeSk7XHJcblxyXG5mdW5jdGlvbiBDbG9zZVBvcHVwKCkge1xyXG4gICAgJCgnW2RhdGEtbW9kYWxkaWFsb2ctY2xvc2VdJykudHJpZ2dlcihcImNsaWNrXCIpO1xyXG59Iiwi77u/dmFyIGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KFwib25BZ29yYUxvYWRcIik7XHJcbmRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG5kb2N1bWVudC5pc0Fnb3JhTG9hZGVkID0gdHJ1ZTtcclxuZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ29uQ3NzTG9hZCcpO1xyXG5kb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuZG9jdW1lbnQuaXNDc3NMb2FkZWQgPSB0cnVlO1xyXG5cclxuRW5hYmxlRGVtYW5kSW1wb3J0KCk7XHJcbkVuYWJsZVNlYXJjaEZvcm0oKTtcclxuXHJcblxyXG4gICAgd2luZG93LmFnUmVxdWVzdCA9IHtcclxuICAgICAgICBHRVQ6IGFzeW5jIGZ1bmN0aW9uIChzZXJ2aWNlVXJsLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZyArICgocXVlcnlTdHJpbmcgIT0gJycgPyAnJicgOiAnJykgKyBrZXkgKyAnPScgKyBkYXRhW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlcnZpY2VVcmwgKz0gc2VydmljZVVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JyArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IGF3YWl0IGZldGNoKHNlcnZpY2VVcmwsIHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgICAgIGNhY2hlOiBcIm5vLWNhY2hlXCIsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QuanNvbigpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgUE9TVDogYXN5bmMgZnVuY3Rpb24gKHNlcnZpY2VVcmwsIGRhdGEpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1EYXRhID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YVtrZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IGF3YWl0IGZldGNoKHNlcnZpY2VVcmwsIHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICBjYWNoZTogXCJuby1jYWNoZVwiLFxyXG4gICAgICAgICAgICAgICAgYm9keTogZm9ybURhdGFcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5qc29uKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG5cclxuLy9MYXp5IGxvYWRlclxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgYXN5bmMgZnVuY3Rpb24gZmluZExhenkoKSB7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc3JjXTpub3QoLmFnLWxhenkpOm5vdCgubm8tYWcpOm5vdChbZGF0YS1zcmMqPVwie3tcIl0pJyk7XHJcblxyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XHJcbiAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnYWctbGF6eScpO1xyXG4gICAgICAgICAgICB2YXIgYWN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYXR0YWNoQWN0aW9uKGl0ZW0sIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FnLmxhenknLCBhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhenknLCBhY3Rpb24pO1xyXG5cclxuICAgICAgICAgICAgYWN0aW9uKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXQoKSB7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGF6eS5yZWZyZXNoJywgZmluZExhenkpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnJlZnJlc2gnLCBmaW5kTGF6eSk7XHJcblxyXG4gICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcubGF6eS5yZWZyZXNoJyk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uIChlKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhenknKTtcclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhenknKTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgd2luZG93LmFnTGF6eSA9IHtcclxuICAgICAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5sYXp5LnJlZnJlc2gnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2YWxpZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5sYXp5Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGF0dGFjaEFjdGlvbihpdGVtLCBzdWNjZXNzKSB7ICAgICAgICAgXHJcbiAgICAgICAgdmFyIGJsYW5rSW1hZ2UgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FRQUFBQzFIQXdDQUFBQUMwbEVRVlI0Mm1Oa1lBQUFBQVlBQWpDQjBDOEFBQUFBU1VWT1JLNUNZSUk9JztcclxuICAgICAgICBpZiAoYXdhaXQgY2hlY2tpc0luVmlld3BvcnQoaXRlbSkpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB2YXIgc3JjVXJsID0gYXdhaXQgZ2V0Rm9ybWF0dGVkSW1hZ2VVcmwoaXRlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJyksIGl0ZW0pO1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnVklERU8nKSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgaXRlbS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHNyY1VybC51cmwpIH0sIDEwMDAwKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnT0JKRUNUJyB8fCBpdGVtLm5vZGVOYW1lID09ICdBVURJTycpXHJcbiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnc3JjJywgc3JjVXJsLnVybClcclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnSU1HJykgeyAgIFxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnc3JjJykgIT0gYmxhbmtJbWFnZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdhZy1sYXp5LXMnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdzcmMnLCBibGFua0ltYWdlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc3JjVXJsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3JjVXJsLnNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY1VybC5zaXplLndpZHRoPjApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBzcmNVcmwuc2l6ZS53aWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNVcmwuc2l6ZS5oZWlnaHQgPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHNyY1VybC5zaXplLmhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdzcmMnLCBzcmNVcmwudXJsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZVsnYmFja2dyb3VuZC1pbWFnZSddID0gYHVybCgnJHtzcmNVcmwudXJsfScpYDtcclxuICAgICAgICAgICAgc3VjY2VzcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHJvb3Q6IG51bGwsXHJcbiAgICAgICAgICAgIHJvb3RNYXJnaW46IFwiMHB4XCIsXHJcbiAgICAgICAgICAgIHRocmVzaG9sZDogMC4xLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhpdGVtLCdWaWV3Jyk7XHJcblxyXG4gICAgICAgIH0sIG9wdGlvbnMpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRGb3JtYXR0ZWRJbWFnZVVybCh1cmwsIGl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgaXNBdXRvID0gaXRlbS5oYXNBdHRyaWJ1dGUoJ2RhdGEtcmF0aW8tYXV0bycpOyAgICAgICAgXHJcbiAgICAgICAgaWYgKGlzQXV0bykgcmV0dXJuIHsgdXJsOiB1cmwgfTsgICAgICAgIFxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gYXdhaXQgZ2V0QmVzdEZpdENvbnRhaW5lcihpdGVtLCAxNiwgOSk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gLy4qXFw/KC4qPyhtaHxtdylcXD0oXFxkKykpKi9naS5leGVjKHVybCk7XHJcbiAgICAgICAgdmFyIGFkZGl0aW9uYWxVcmwgPSAnJzsgICAgICAgIFxyXG4gICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1jcm9wJykgIT0gbnVsbCkgYWRkaXRpb25hbFVybCArPSAnJm1vZGU9Y3JvcCc7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvJykgPT0gMCAmJiBmYWxzZSkge1xyXG4gICAgICAgICAgICB2YXIgcHJvamVjdENvZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1wY29kZScpO1xyXG4gICAgICAgICAgICB1cmwgPSBgaHR0cHM6Ly9jZG4uZGF0YWZsb2F0LmNvbS8ke3Byb2plY3RDb2RlfV9DV1Mke3VybH1gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh1cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0Y2ggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyB1cmw6IHVybCwgc2l6ZTogY3VycmVudCB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHVybDogYCR7dXJsfT9gICsgKGN1cnJlbnQud2lkdGggPiAwID8gYG13PSR7Y3VycmVudC53aWR0aH1gICsgKGN1cnJlbnQuaGVpZ2h0PjA/JyYnOicnKSA6ICcnKSArIChjdXJyZW50LmhlaWdodCA+IDAgPyBgbWg9JHtjdXJyZW50LmhlaWdodH1gIDogJycpICsgYCR7YWRkaXRpb25hbFVybH1gLCBzaXplOiBjdXJyZW50IH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldEJlc3RGaXRDb250YWluZXIoaXRlbSwgZGVmYXVsdFJhdGlvV2lkdGgsIGRlZmF1bHRSYXRpb0hlaWdodCkge1xyXG4gICAgICAgIGlmIChpdGVtID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICB2YXIgcmF0aW8gPSBpdGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1yYXRpbycpO1xyXG4gICAgICAgIHZhciByYXRpb01hdGNoID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHJhdGlvICYmIHJhdGlvICE9IG51bGwgJiYgKHJhdGlvTWF0Y2ggPSAvXig/PHdpZHRoPlswLTlcXC5dezEsNH0pOig/PGhlaWdodD5bMC05XFwuXXsxLDR9KSQvZ2kuZXhlYyhyYXRpbykpICE9IG51bGwpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgZGVmYXVsdFJhdGlvV2lkdGggPSBwYXJzZUZsb2F0KHJhdGlvTWF0Y2guZ3JvdXBzLndpZHRoKTtcclxuICAgICAgICAgICAgZGVmYXVsdFJhdGlvSGVpZ2h0ID0gcGFyc2VGbG9hdChyYXRpb01hdGNoLmdyb3Vwcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFJhdGlvV2lkdGggPT0gMCkgZGVmYXVsdFJhdGlvV2lkdGggPSAtMTtcclxuICAgICAgICAgICAgaWYgKGRlZmF1bHRSYXRpb0hlaWdodCA9PSAwKSBkZWZhdWx0UmF0aW9IZWlnaHQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3aWR0aCA9IGN1cnJlbnQud2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IGN1cnJlbnQuaGVpZ2h0O1xyXG4gICAgICAgIGlmIChpdGVtLmNsYXNzTGlzdC5jb250YWlucygnYWctbGF6eScpKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gaXRlbS5nZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiKTtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gaXRlbS5nZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIik7XHJcbiAgICAgICAgICAgIGlmICh3aWR0aCA9PSB1bmRlZmluZWQgfHwgd2lkdGggPT0gbnVsbCB8fCB3aWR0aCA9PSAnJylcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gaXRlbS5zdHlsZS53aWR0aDtcclxuXHJcbiAgICAgICAgICAgIGlmICh3aWR0aCA9PSB1bmRlZmluZWQgfHwgd2lkdGggPT0gbnVsbCB8fCB3aWR0aCA9PSAnJykgd2lkdGggPSAwO1xyXG4gICAgICAgICAgICBlbHNlIHdpZHRoID0gcGFyc2VJbnQod2lkdGgucmVwbGFjZSgvW15cXGRdKy9naSwgJycpKTtcclxuICAgICAgICAgICAgaWYgKGhlaWdodCA9PSB1bmRlZmluZWQgfHwgaGVpZ2h0ID09IG51bGwgfHwgaGVpZ2h0ID09ICcnKSBoZWlnaHQgPSAwO1xyXG4gICAgICAgICAgICBlbHNlIGhlaWdodCA9IHBhcnNlSW50KGhlaWdodC5yZXBsYWNlKC9bXlxcZF0rL2dpLCAnJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmICh3aWR0aCAhPSBoZWlnaHQgJiYgKCh3aWR0aCA9PSB1bmRlZmluZWQgfHwgaGVpZ2h0ID09IHVuZGVmaW5lZCkgfHwgKGhlaWdodCA8IHdpZHRoIC8gZGVmYXVsdFJhdGlvV2lkdGggKiBkZWZhdWx0UmF0aW9IZWlnaHQpIHx8IHdpZHRoIDwgaGVpZ2h0IC8gZGVmYXVsdFJhdGlvSGVpZ2h0ICogZGVmYXVsdFJhdGlvV2lkdGgpKSB7XHJcbiAgICAgICAgICAgIGlmICh3aWR0aCA+IDApXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSB3aWR0aCAvIGRlZmF1bHRSYXRpb1dpZHRoICogZGVmYXVsdFJhdGlvSGVpZ2h0O1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCAvIGRlZmF1bHRSYXRpb0hlaWdodCAqIGRlZmF1bHRSYXRpb1dpZHRoO1xyXG4gICAgICAgIH0gICAgXHJcblxyXG5cclxuICAgICAgICBpZiAoKHdpZHRoID4gMCB8fCBkZWZhdWx0UmF0aW9XaWR0aDwwICkgJiYgKGhlaWdodCA+IDAgfHwgZGVmYXVsdFJhdGlvSGVpZ2h0PDApICkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGguZmxvb3Iod2lkdGgpO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHdpZHRoOiBkZWZhdWx0UmF0aW9XaWR0aCA8IDAgPyAwIDogd2lkdGggKyAoMTAgLSAod2lkdGggJSAxMCkpLCBoZWlnaHQ6IGRlZmF1bHRSYXRpb0hlaWdodCA8IDAgPyAwIDogaGVpZ2h0ICsgKDEwIC0gKGhlaWdodCAlIDEwKSkgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdldEJlc3RGaXRDb250YWluZXIoaXRlbS5wYXJlbnRFbGVtZW50LCBkZWZhdWx0UmF0aW9XaWR0aCwgZGVmYXVsdFJhdGlvSGVpZ2h0KTsgICAgICAgIFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBtYXBUb0F1dG9TaXplKHdpZHRoLCBoZWlnaHQpIHsgICAgICAgIFxyXG4gICAgICAgIHJldHVybiB7IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGNoZWNraXNJblZpZXdwb3J0KGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgY3VycmVudCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcclxuICAgICAgICB2YXIgZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZhciBzY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jRWwuc2Nyb2xsVG9wIHx8IGJvZHkuc2Nyb2xsVG9wO1xyXG4gICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY0VsLnNjcm9sbExlZnQgfHwgYm9keS5zY3JvbGxMZWZ0O1xyXG5cclxuICAgICAgICB2YXIgY2xpZW50VG9wID0gZG9jRWwuY2xpZW50VG9wIHx8IGJvZHkuY2xpZW50VG9wIHx8IDA7XHJcbiAgICAgICAgdmFyIGNsaWVudExlZnQgPSBkb2NFbC5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8fCAwO1xyXG5cclxuICAgICAgICB2YXIgZWxlbWVudFRvcCA9IGN1cnJlbnQudG9wICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wO1xyXG4gICAgICAgIHZhciBlbGVtZW50Qm90dG9tID0gY3VycmVudC5ib3R0b20gKyBzY3JvbGxUb3AgLSBjbGllbnRUb3A7XHJcblxyXG4gICAgICAgIGxldCB2aWV3cG9ydFRvcCA9IHNjcm9sbFRvcDtcclxuICAgICAgICBsZXQgdmlld3BvcnRCb3R0b20gPSB2aWV3cG9ydFRvcCArIHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gZWxlbWVudEJvdHRvbSA+IHZpZXdwb3J0VG9wICYmIGVsZW1lbnRUb3AgPCB2aWV3cG9ydEJvdHRvbTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBpbml0KTtcclxuXHJcbiAgICAgXHJcblxyXG4gICAgLypBY2NvcmRpb24gSlMqL1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIEFjY29yZGlvbkZuKCkge1xyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWFjYy1pXCIpICE9IG51bGwpIHtcclxuXHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tYWNjLWlcIikuZm9yRWFjaCgoYWNjaXRlbSkgPT4ge1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY2NvcmRpb25JdGVtQm9keSA9IGFjY2l0ZW0uY2xvc2VzdChcIi5pdGVtLWFjYy1jXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhY2NpdGVtLmNsYXNzTGlzdC5jb250YWlucyhcIm9wZW5cIikpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW9uSXRlbUJvZHkuc3R5bGUubWF4SGVpZ2h0ID0gYWNjb3JkaW9uSXRlbUJvZHkuc2Nyb2xsSGVpZ2h0ICsgXCJweFwiO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgYWNjaXRlbS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaXRlbS5jbGFzc0xpc3QudG9nZ2xlKFwib3BlblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2l0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW9uSXRlbUJvZHkuc3R5bGUubWF4SGVpZ2h0ID0gYWNjb3JkaW9uSXRlbUJvZHkuc2Nyb2xsSGVpZ2h0ICsgXCJweFwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhY2NpdGVtLmNsYXNzTGlzdC5jb250YWlucyhcIm9wZW5cIikpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY29yZGlvbkl0ZW1Cb2R5LnN0eWxlLm1heEhlaWdodCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS1hY2MtaVwiKS5vZmZzZXRIZWlnaHQgKyBcInB4XCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICBcclxuICAgIEFjY29yZGlvbkZuKCk7XHJcblxyXG5cclxuICAgIC8qVGFiIEpTKi9cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBUYWJGbigpIHtcclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS10YWItYlwiKSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGFiLWJcIikuZm9yRWFjaCgoYnV0dG9uLCBpbmRleCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGFiLWNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lkZUJhciA9IGJ1dHRvbi5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYnNDb250YWluZXIgPSBzaWRlQmFyLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkZUJhci5xdWVyeVNlbGVjdG9yQWxsKCcuaXRlbS10YWItYicpLmZvckVhY2goYnV0dG9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGFic0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuaXRlbS10YWItYycpLmZvckVhY2godGFiID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1tpbmRleF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgIH1cclxuICAgXHJcbiAgICBUYWJGbigpO1xyXG5cclxuXHJcbiAgICAgXHJcbiAgICAvKlByb3BlcnR5U2VhcmNoQ29udHJvbFdvcmtpbmcgSlMqL1xyXG4gICAgYXN5bmMgZnVuY3Rpb24gUHJvcGVydHlTZWFyY2hDb250cm9sV29ya2luZygpIHtcclxuXHJcblxyXG4gICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLml0ZW0tc2VhXCIpICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jb24tbWVudSBhJykuZm9yRWFjaChmdW5jdGlvbiAobWVudWl0ZW0pIHtcclxuXHJcbiAgICAgICAgICAgICAgICBtZW51aXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxhYmVsLWNvbicpLnNldEF0dHJpYnV0ZSgnZGF0YS1jb3VudHJ5JywgbWVudWl0ZW0uaW5uZXJIVE1MKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lbnVpdGVtLmNsb3Nlc3QoXCIuaXRlbS1kci1jXCIpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0uY2xvc2VzdChcIi5pdGVtLWRyLWNcIikucHJldmlvdXNFbGVtZW50U2libGluZy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRyb3BzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLml0ZW0tZHIgPiAuaXRlbS1kci1sYScpO1xyXG5cclxuICAgICAgICAgICAgZHJvcHMuZm9yRWFjaCgoZHJvcCwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkcm9wLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIFRvZ2dsZUFjdGl2ZShkcm9wLCBpZHgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gVG9nZ2xlQWN0aXZlKGVsLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICBkcm9wcy5mb3JFYWNoKChkcm9wLCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWR4ICE9PSBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkcm9wLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZHJvcHMuZm9yRWFjaCgoZHJvcERpdikgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIShldmVudC50YXJnZXQuY2xvc2VzdChcIi5pdGVtLWRyLWxhXCIpKSAmJiAhKGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiLml0ZW0tZHItY1wiKSkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BEaXYuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pdGVtLWNsJykuZm9yRWFjaChmdW5jdGlvbiAoY2xvc2VidG4pIHtcclxuXHJcbiAgICAgICAgICAgICAgICBjbG9zZWJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbG9zZWJ0bi5jbG9zZXN0KFwiLml0ZW0tZHItY1wiKS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlYnRuLmNsb3Nlc3QoXCIuaXRlbS1kci1jXCIpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBFbmFibGVTZWFyY2hiZWxvd1RhYigpIHtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDEwMjQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLml0ZW0tb25zdHh0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3NyY2gtb3BuZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNhbmNlbC1idG4nKS5mb3JFYWNoKGZ1bmN0aW9uIChjYW5jZWxidG4pIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3NyY2gtb3BuZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICBFbmFibGVTZWFyY2hiZWxvd1RhYigpO1xyXG5cclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIEVuYWJsZVNlYXJjaGJlbG93VGFiKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBQcm9wZXJ0eVNlYXJjaENvbnRyb2xXb3JraW5nKCk7XHJcblxyXG5cclxuXHJcbiAgICAvLyBzY3JvbGwgY2xhc3MgYWRkZWQgaW4gYm9keSB3aGVuIHNjcm9sbGluZ1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIFNjcm9sbGJvZHljbGFzcygpIHtcclxuICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB3aW5kb3cuc2Nyb2xsWTtcclxuICAgICAgICAgICAgaWYgKHNjcm9sbFRvcCA+IDEwKSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3Njcm9sbCcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdzY3JvbGwnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBTY3JvbGxib2R5Y2xhc3MpO1xyXG5cclxuXHJcbiAgICAvLyBCdXJnZXIgbWVudVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBIZWFkZXJCdXJnZXJDaGFuZ2UoKSB7XHJcblxyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBCdXJnZXJBY3RpdmUoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVyZ2VyLWNcIikuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaXRlbS1uLTJcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5yZW1vdmUoXCJpdGVtLW4tMlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5hZGQoXCJpdGVtLW4tMVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtdWNub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLXVjXCIpO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWhcIikucXVlcnlTZWxlY3RvcihcIm5hdlwiKS5pbnNlcnRCZWZvcmUoaXRlbXVjbm9kZSwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWhcIikucXVlcnlTZWxlY3RvcihcIm5hdlwiKS5maXJzdENoaWxkKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIEJ1cmdlckRlYWN0aXZlKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5jb250YWlucyhcIml0ZW0tbi0xXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKS5jbGFzc0xpc3QucmVtb3ZlKFwiaXRlbS1uLTFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKS5jbGFzc0xpc3QuYWRkKFwiaXRlbS1uLTJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXVjbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS11Y1wiKTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS1oXCIpLmFwcGVuZENoaWxkKGl0ZW11Y25vZGUpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSAxMDI0KSB7IEJ1cmdlckFjdGl2ZSgpOyB9XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID4gMTAyNCkgeyBCdXJnZXJEZWFjdGl2ZSgpOyB9XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVyZ2VyLWMgfiBuYXZcIikub2Zmc2V0V2lkdGggPCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jIH4gbmF2XCIpLnNjcm9sbFdpZHRoKSB7IEJ1cmdlckFjdGl2ZSgpOyB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIEhlYWRlckJ1cmdlckNoYW5nZSgpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIEhlYWRlckJ1cmdlckNoYW5nZSk7XHJcblxyXG5cclxuXHJcbiAgICAvLyBSaXBwbGUgZWZmZWN0XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gUmlwcGxlRm4oKSB7XHJcblxyXG4gICAgICAgIHZhciByaXBwbGVidXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5hLWItMSwgLmEtYi0yLCAuYS1iLTMsIC5hLWItNCwgLmEtYi01XCIpO1xyXG5cclxuICAgICAgICBpZiAocmlwcGxlYnV0dG9ucyAhPSBudWxsKSB7XHJcblxyXG5cclxuICAgICAgICAgICAgcmlwcGxlYnV0dG9ucy5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IGUub2Zmc2V0WDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IGUub2Zmc2V0WTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJpcHBsZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyaXBwbGUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJpcHBsZXMubGVuZ3RoIDwgMTApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJpcHBsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlwcGxlLmNsYXNzTGlzdC5hZGQoJ3JpcHBsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByaXBwbGUuc3R5bGUubGVmdCA9IHggKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByaXBwbGUuc3R5bGUudG9wID0geSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQocmlwcGxlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlwcGxlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIFJpcHBsZUZuKCk7XHJcblxyXG5cclxuICAgIC8qSG9tZSBwYWdlIHZpZGVvIHBsYXllciBzY3JpcHQgdG8gaGlkZSBidXR0b24qL1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIFZpZGVvUGxheUZuKCkge1xyXG5cclxuICAgICAgICB2YXIgdmlkZW9FbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIudmlkZW8tcGxheVwiKTtcclxuXHJcblxyXG4gICAgICAgIGlmICh2aWRlb0VsZW1lbnRzICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHZpZGVvRWxlbWVudHMuZm9yRWFjaCh2aWRlbyA9PiB7XHJcbiAgICAgICAgICAgICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvLmNsb3Nlc3QoXCJmaWd1cmVcIikuY2xhc3NMaXN0LmFkZChcIm5vLWJ0blwiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlkZW8uY2xvc2VzdChcImZpZ3VyZVwiKS5jbGFzc0xpc3QucmVtb3ZlKFwibm8tYnRuXCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgVmlkZW9QbGF5Rm4oKTtcclxuXHJcbn0pKCk7XHJcblxyXG5mdW5jdGlvbiBzaG93UHJvcGVydHlHYWxsZXJ5KGNsaWVudENvZGUsIHByb3BlcnR5UlQsIG1sc051bWJlciwgcGhvdG9Db3VudCwgcm9vdENsYXNzKSB7XHJcbiAgICB2YXIgX3NUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQ7XHJcbiAgICB2YXIgX2dDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucHJvcGVydHktZ2FsbGVyeS1jb250YWluZXInKTtcclxuICAgIHZhciBfZ0NvbnRhaW5lckNsb3NlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICBfZ0NvbnRhaW5lckNsb3NlLmNsYXNzTGlzdC5hZGQoJ3Byb3BlcnR5LWdhbGxlcnktY29udGFpbmVyLWNsb3NlJyk7XHJcbiAgICBfZ0NvbnRhaW5lckNsb3NlLnNldEF0dHJpYnV0ZSgndGl0bGUnLCAnQ2xvc2UgUHJvcGVydHkgR2FsbGVyeScpO1xyXG4gICAgX2dDb250YWluZXJDbG9zZS5pbm5lclRleHQgPSAnWCc7XHJcbiAgICBfZ0NvbnRhaW5lckNsb3NlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByb3BlcnR5LWdhbGxlcnktY29udGFpbmVyJykgIT0gbnVsbCkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByb3BlcnR5LWdhbGxlcnktY29udGFpbmVyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIF9zVG9wKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ3Zpc2libGUnO1xyXG4gICAgfSwgdHJ1ZSk7XHJcbiAgICBpZiAoX2dDb250YWluZXIgPT0gbnVsbCkge1xyXG4gICAgICAgIF9nQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgX2dDb250YWluZXIuY2xhc3NMaXN0LmFkZCgncHJvcGVydHktZ2FsbGVyeS1jb250YWluZXInKTtcclxuICAgICAgICBpZiAocm9vdENsYXNzICE9IG1sc051bWJlcikgX2dDb250YWluZXIuY2xhc3NMaXN0LmFkZChyb290Q2xhc3MpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoX2dDb250YWluZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIF9nQ29udGFpbmVyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwicy13LTEwMCBzLXAtciBoZXJvLXNsaWRlclwiPjxpIGNsYXNzPVwibGVmdC1idG5cIj4mbHQ7PC9pPjxkaXYgY2xhc3M9XCJpdGVtLXMgc2hvdy1uYXZcIj48L2Rpdj48aSBjbGFzcz1cInJpZ2h0LWJ0blwiPiZndDs8L2k+PGRpdiBjbGFzcz1cImRvdHMtd3JhcHBlclwiPjwvZGl2PjxkaXYgc3R5bGU9XCJjbGVhcjogYm90aDtcIj48L2Rpdj48L2Rpdj4nO1xyXG4gICAgX2dDb250YWluZXIuYXBwZW5kQ2hpbGQoX2dDb250YWluZXJDbG9zZSk7XHJcblxyXG4gICAgdmFyIF9pdGVtQ29udGFpbmVyID0gX2dDb250YWluZXIucXVlcnlTZWxlY3RvcignLml0ZW0tcycpO1xyXG4gICAgdmFyIF9pdGVtSHRtbCA9IG51bGw7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBob3RvQ291bnQ7IGkrKykge1xyXG4gICAgICAgIF9pdGVtSHRtbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIF9pdGVtSHRtbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIml0ZW1cIj48aW1nIGNsYXNzPVwibGF6eSBzLXctMTAwIHMtaC0xMDAgcy1vZi1jdlwiIGFsdD1cInByb3BlcnR5IHBob3RvICcgKyAoaSArIDEpICsgJ1wiIGRhdGEtc3JjPVwiaHR0cHM6Ly9jZG4uZGF0YWZsb2F0LmNvbS8nICsgY2xpZW50Q29kZSArICdfUFVCTElDL01MU1Bob3Rvcy8nICsgcHJvcGVydHlSVC50b1VwcGVyQ2FzZSgpICsgJy8nICsgbWxzTnVtYmVyICsgJ18nICsgKGkgKyAxKSArICcuanBnXCIgLz48L2Rpdj4nXHJcbiAgICAgICAgX2l0ZW1Db250YWluZXIuYXBwZW5kKF9pdGVtSHRtbC5maXJzdEVsZW1lbnRDaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWdTbGlkZXIoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhdXRvUGxheTogdHJ1ZSxcclxuICAgICAgICAgICAgYXV0b1BsYXlEZWxheTogNTAwMCxcclxuICAgICAgICAgICAgbG9vcDogdHJ1ZSxcclxuICAgICAgICAgICAgc2hvd0J1bGxldHM6IHRydWUsXHJcbiAgICAgICAgICAgIHNob3dDb250cm9sczogdHJ1ZSxcclxuICAgICAgICAgICAgYnVsbGV0Q29udGFpbmVyOiAnLmRvdHMtd3JhcHBlcicsXHJcbiAgICAgICAgICAgIHNob3dCdWxsZXRzQXNUaHVtYjogdHJ1ZSxcclxuICAgICAgICAgICAgaXRlbVdyYXBwZXI6ICcuaXRlbS1zJyxcclxuICAgICAgICAgICAgaXRlbUNvbnRhaW5lcjogJy5pdGVtJyxcclxuICAgICAgICB9LCAnLnByb3BlcnR5LWdhbGxlcnktY29udGFpbmVyJywgZnVuY3Rpb24gKHNsaWRlcikge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcclxuICAgICAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWdTbGlkZXIoc2V0dGluZ3MsIGNvbnRhaW5lciwgb25Jbml0Q29tcGxldGUpIHtcclxuICAgIHZhciBfc2V0dGluZ3MgPSB7XHJcbiAgICAgICAgYXV0b1BsYXk6IGZhbHNlLFxyXG4gICAgICAgIGF1dG9QbGF5RGVsYXk6IDMwMDAsXHJcbiAgICAgICAgbG9vcDogZmFsc2UsXHJcbiAgICAgICAgc2hvd0NvbnRyb2xzOiB0cnVlLFxyXG4gICAgICAgIGJ0bkxlZnQ6ICcubGVmdC1idG4nLFxyXG4gICAgICAgIGJ0blJpZ2h0OiAnLnJpZ2h0LWJ0bicsXHJcbiAgICAgICAgc2hvd0J1bGxldHM6IGZhbHNlLFxyXG4gICAgICAgIHNob3dCdWxsZXRzQXNUaHVtYjogZmFsc2UsXHJcbiAgICAgICAgYnVsbGV0Q29udGFpbmVyOiAnLmJ1bGxldHMnLFxyXG4gICAgICAgIGl0ZW1XcmFwcGVyOiAnLmFneS1jYXJvLWluJyxcclxuICAgICAgICB3cmFwcGVyTWFzazogMCwgLyogSXQgc2hvdWxkIGJlIGluIHBlcmNlbnRhZ2UgMC0xMDAgKi9cclxuICAgICAgICBpdGVtQ29udGFpbmVyOiAnLmFneS1jYXJvLWl0J1xyXG4gICAgfVxyXG4gICAgaWYgKHNldHRpbmdzICE9IG51bGwgJiYgc2V0dGluZ3MgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgX3NldHRpbmdzID0gZXh0ZW5kSnNvbihfc2V0dGluZ3MsIHNldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udGFpbmVyID09IHVuZGVmaW5lZCB8fCBjb250YWluZXIgPT0gbnVsbCkgY29udGFpbmVyID0gJy5hZ3ktY2Fybyc7XHJcbiAgICB2YXIgX3NsaWRlcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGNvbnRhaW5lcik7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IF9zbGlkZXJzICE9IG51bGwgJiYgX3NsaWRlcnMgIT0gdW5kZWZpbmVkICYmIF9zbGlkZXJzLmxlbmd0aCA+IGk7IGkrKykge1xyXG4gICAgICAgIGluaXRTbGlkZXIoX3NsaWRlcnNbaV0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluaXRTbGlkZXIoc2xpZGVyKSB7XHJcbiAgICAgICAgdmFyIF9pdGVtcyA9IHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtV3JhcHBlcik7XHJcbiAgICAgICAgdmFyIF9pdGVtc0NvdW50ID0gX2l0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGwoX3NldHRpbmdzLml0ZW1Db250YWluZXIpLmxlbmd0aDtcclxuICAgICAgICB2YXIgX2l0ZW1XaWR0aCA9IF9pdGVtcy5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyKS5vZmZzZXRXaWR0aDtcclxuICAgICAgICB2YXIgX2l0ZW1zSW5WaWV3UG9ydCA9IE1hdGgucm91bmQoX2l0ZW1zLm9mZnNldFdpZHRoIC8gX2l0ZW1XaWR0aCk7XHJcbiAgICAgICAgdmFyIF9hY3RpdmVTSXRlbUlkeCA9IDAsIF9hY3RpdmVFSXRlbUlkeCA9IF9pdGVtc0NvdW50LCBfYWN0aXZlUGFnZUlkeCA9IDA7XHJcbiAgICAgICAgdmFyIF9idG5MZWZ0ID0gKF9zZXR0aW5ncy5idG5MZWZ0ICE9IG51bGwgJiYgX3NldHRpbmdzLmJ0bkxlZnQgIT0gdW5kZWZpbmVkKSA/IHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idG5MZWZ0KSA6IG51bGw7XHJcbiAgICAgICAgdmFyIF9idG5SaWdodCA9IChfc2V0dGluZ3MuYnRuUmlnaHQgIT0gbnVsbCAmJiBfc2V0dGluZ3MuYnRuUmlnaHQgIT0gdW5kZWZpbmVkKSA/IHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idG5SaWdodCkgOiBudWxsO1xyXG4gICAgICAgIHZhciBfcGF1c2VQbGF5ID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIF9pc0hlcm9TbGlkZXIgPSAoX2l0ZW1zLm9mZnNldFdpZHRoID09IF9pdGVtV2lkdGgpO1xyXG4gICAgICAgIHZhciBfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIF93cmFwcGVyTWFzdFNjcm9sbExlZnQgPSAwO1xyXG5cclxuICAgICAgICBpZiAoIWlzTmFOKF9zZXR0aW5ncy53cmFwcGVyTWFzaykgJiYgX3NldHRpbmdzLndyYXBwZXJNYXNrID4gMCkge1xyXG4gICAgICAgICAgICBfc2V0dGluZ3Mud3JhcHBlck1hc2sgPSBfc2V0dGluZ3Mud3JhcHBlck1hc2sgPiAxMDAgPyAxMDAgOiBfc2V0dGluZ3Mud3JhcHBlck1hc2s7XHJcbiAgICAgICAgICAgIF9pdGVtcy5zdHlsZS5zY3JvbGxQYWRkaW5nID0gX3NldHRpbmdzLndyYXBwZXJNYXNrICsgJyUnO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9pdGVtc0NvdW50ID4gMikge1xyXG4gICAgICAgICAgICAgICAgX21vdmVMYXN0SXRlbVRvRmlyc3RGb3JXcmFwcGVyTWFzayA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfaXRlbUFycmF5ID0gX2l0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGwoX3NldHRpbmdzLml0ZW1Db250YWluZXIpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2l0ZW1BcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBfaXRlbUFycmF5W2ldLmNsYXNzTGlzdC5hZGQoJ2lkeC0nICsgaSk7XHJcbiAgICAgICAgICAgIGlmIChfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrICYmIGkgPT0gX2l0ZW1BcnJheS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICBfaXRlbXMucHJlcGVuZChfaXRlbUFycmF5W2ldKTtcclxuICAgICAgICAgICAgICAgIF93cmFwcGVyTWFzdFNjcm9sbExlZnQgPSBfaXRlbXMuc2Nyb2xsTGVmdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF9idG5MZWZ0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKCFfc2V0dGluZ3Muc2hvd0NvbnRyb2xzKSBfYnRuTGVmdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBfYnRuTGVmdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChfYWN0aXZlU0l0ZW1JZHggPT0gMCAmJiAhX3NldHRpbmdzLmxvb3ApIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGlmIChfYWN0aXZlU0l0ZW1JZHggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5zY3JvbGxMZWZ0ID0gX2l0ZW1XaWR0aCAqIChfaXRlbXNDb3VudCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZUl0ZW1zKF9pdGVtV2lkdGggKiAoX2l0ZW1zQ291bnQgLSBfaXRlbXNJblZpZXdQb3J0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfaXRlbXMuc2Nyb2xsTGVmdCA9IF9pdGVtcy5zY3JvbGxMZWZ0ICsgKC1faXRlbVdpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVJdGVtcygoIV9pc0hlcm9TbGlkZXIpID8gKF9pdGVtcy5zY3JvbGxMZWZ0ICsgKC1faXRlbVdpZHRoKSkgOiAoKF9hY3RpdmVTSXRlbUlkeCAtIDEpICogX2l0ZW1XaWR0aCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfYnRuUmlnaHQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoIV9zZXR0aW5ncy5zaG93Q29udHJvbHMpIF9idG5SaWdodC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBfYnRuUmlnaHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX2FjdGl2ZUVJdGVtSWR4ID09IChfaXRlbXNDb3VudCAtIDEpICYmICFfc2V0dGluZ3MubG9vcCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgaWYgKF9hY3RpdmVFSXRlbUlkeCA9PSAoX2l0ZW1zQ291bnQgLSAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5zY3JvbGxMZWZ0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVJdGVtcyhfd3JhcHBlck1hc3RTY3JvbGxMZWZ0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5zY3JvbGxMZWZ0ID0gX2l0ZW1zLnNjcm9sbExlZnQgKyAoK19pdGVtV2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZUl0ZW1zKCghX2lzSGVyb1NsaWRlcikgPyAoX2l0ZW1zLnNjcm9sbExlZnQgKyAoK19pdGVtV2lkdGgpKSA6ICgoX2FjdGl2ZVNJdGVtSWR4ICsgMSkgKiBfaXRlbVdpZHRoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF9zZXR0aW5ncy5zaG93QnVsbGV0cykge1xyXG4gICAgICAgICAgICBpZiAoc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikgPT0gbnVsbCB8fCBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIF9zZXR0aW5ncy5zaG93QnVsbGV0cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKE1hdGgucm91bmQoX2l0ZW1zQ291bnQgLyBfaXRlbXNJblZpZXdQb3J0KSk7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9idWxsZXQgPSAoIV9zZXR0aW5ncy5zaG93QnVsbGV0c0FzVGh1bWIgJiYgIV9pc0hlcm9TbGlkZXIpID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJykgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgICAgIF9idWxsZXQuY2xhc3NMaXN0LmFkZCgnZG90Jyk7XHJcbiAgICAgICAgICAgICAgICBfYnVsbGV0LmNsYXNzTGlzdC5hZGQoJ2lkeC0nICsgaSk7XHJcbiAgICAgICAgICAgICAgICBfYnVsbGV0LnNldEF0dHJpYnV0ZSgnaWR4JywgaSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3NldHRpbmdzLnNob3dCdWxsZXRzQXNUaHVtYiAmJiBfaXNIZXJvU2xpZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aHVtYkltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aHVtYkltYWdlUyA9IF9pdGVtcy5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIGkgKyAnIGltZycpICE9IG51bGwgPyBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyBpbWcnKSA6IF9pdGVtcy5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIGkgKyAnIHZpZGVvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RodW1iSW1hZ2Uuc2V0QXR0cmlidXRlKCdzcmMnLCAoX3RodW1iSW1hZ2VTLm5vZGVOYW1lID09ICdJTUcnKSA/IF90aHVtYkltYWdlUy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykgOiBfdGh1bWJJbWFnZVMuZ2V0QXR0cmlidXRlKCdkYXRhLXRodW1iJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9idWxsZXQuYXBwZW5kQ2hpbGQoX3RodW1iSW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkgX2J1bGxldC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIF9idWxsZXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRQYWdlKHBhcnNlSW50KGkuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ2lkeCcpKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLmFwcGVuZENoaWxkKF9idWxsZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoX3NldHRpbmdzLmF1dG9QbGF5KSB7XHJcbiAgICAgICAgICAgIGF1dG9QbGF5KCk7XHJcbiAgICAgICAgICAgIF9pdGVtcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCBmdW5jdGlvbiAoKSB7IGlmIChfaXRlbXMub2Zmc2V0V2lkdGggPT0gX2l0ZW1XaWR0aCkgcmV0dXJuOyBfcGF1c2VQbGF5ID0gdHJ1ZTsgfSk7XHJcbiAgICAgICAgICAgIF9pdGVtcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCBmdW5jdGlvbiAoKSB7IGlmIChfaXRlbXMub2Zmc2V0V2lkdGggPT0gX2l0ZW1XaWR0aCkgcmV0dXJuOyBfcGF1c2VQbGF5ID0gZmFsc2U7IH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYXV0b1BsYXkoKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFfcGF1c2VQbGF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2J0blJpZ2h0LmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhdXRvUGxheSgpO1xyXG4gICAgICAgICAgICB9LCBfc2V0dGluZ3MuYXV0b1BsYXlEZWxheSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBsb2FkUGFnZShpZHgpIHtcclxuICAgICAgICAgICAgX2FjdGl2ZVBhZ2VJZHggPSBpZHg7XHJcbiAgICAgICAgICAgIF9zZXR0aW5ncy5hdXRvUGxheSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBfcGF1c2VQbGF5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgX2l0ZW1zLnNjcm9sbExlZnQgPSAoaWR4ICogX2l0ZW1zSW5WaWV3UG9ydCkgKiBfaXRlbVdpZHRoO1xyXG4gICAgICAgICAgICBzZXRBY3RpdmVJdGVtcygoaWR4ICogX2l0ZW1zSW5WaWV3UG9ydCkgKiBfaXRlbVdpZHRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldEFjdGl2ZUl0ZW1zKF9pdGVtcy5zY3JvbGxMZWZ0KTtcclxuICAgICAgICBmdW5jdGlvbiBzZXRBY3RpdmVJdGVtcyhzTGVmdCkge1xyXG4gICAgICAgICAgICBfYWN0aXZlU0l0ZW1JZHggPSBNYXRoLnJvdW5kKChzTGVmdCAtIF93cmFwcGVyTWFzdFNjcm9sbExlZnQpIC8gX2l0ZW1XaWR0aCk7XHJcbiAgICAgICAgICAgIF9hY3RpdmVFSXRlbUlkeCA9IE1hdGgucm91bmQoX2FjdGl2ZVNJdGVtSWR4ICsgX2l0ZW1zSW5WaWV3UG9ydCAtIDEpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfaXRlbXNDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIGlmIChpID49IF9hY3RpdmVTSXRlbUlkeCAmJiBpIDw9IF9hY3RpdmVFSXRlbUlkeCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDw9IF9hY3RpdmVFSXRlbUlkeCAtICgoX21vdmVMYXN0SXRlbVRvRmlyc3RGb3JXcmFwcGVyTWFzaykgPyAxIDogMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1zLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1Db250YWluZXIgKyAnLmlkeC0nICsgaSkuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyB2aWRlbycpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdmlkZW8gPSBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyB2aWRlbycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZpZGVvLnNldEF0dHJpYnV0ZSgnc3JjJywgX3ZpZGVvLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmlkZW8ucGF1c2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92aWRlby5jdXJyZW50VGltZSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmlkZW8ucGxheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3BhdXNlUGxheSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBmdW5jdGlvbiAoZSkgeyBfcGF1c2VQbGF5ID0gZmFsc2U7IH0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfaXRlbXMucXVlcnlTZWxlY3RvckFsbChfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyBpbWcnKS5mb3JFYWNoKGltZyA9PiB7IGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykpOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrICYmIGkgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5xdWVyeVNlbGVjdG9yQWxsKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIChfaXRlbXNDb3VudCAtIDEpICsgJyBpbWcnKS5mb3JFYWNoKGltZyA9PiB7IGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykpOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoX2FjdGl2ZVNJdGVtSWR4ID09IDAgJiYgIV9zZXR0aW5ncy5sb29wKSBfYnRuTGVmdC5jbGFzc0xpc3QuYWRkKCdkaXNhYmxlZCcpOyBlbHNlIF9idG5MZWZ0LmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIGlmIChfYWN0aXZlRUl0ZW1JZHggPT0gKF9pdGVtc0NvdW50IC0gMSkgJiYgIV9zZXR0aW5ncy5sb29wKSBfYnRuUmlnaHQuY2xhc3NMaXN0LmFkZCgnZGlzYWJsZWQnKTsgZWxzZSBfYnRuUmlnaHQuY2xhc3NMaXN0LnJlbW92ZSgnZGlzYWJsZWQnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChfc2V0dGluZ3Muc2hvd0J1bGxldHMpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKE1hdGgucm91bmQoX2l0ZW1zQ291bnQgLyBfaXRlbXNJblZpZXdQb3J0KSk7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IChNYXRoLnJvdW5kKChfYWN0aXZlU0l0ZW1JZHggKyBfaXRlbXNJblZpZXdQb3J0KSAvIF9pdGVtc0luVmlld1BvcnQpIC0gMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lciArICcgLmRvdC5pZHgtJyArIGkpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lciArICcgLmRvdC5pZHgtJyArIGkpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvbkluaXRDb21wbGV0ZSAhPSBudWxsICYmIG9uSW5pdENvbXBsZXRlICE9IHVuZGVmaW5lZCkgb25Jbml0Q29tcGxldGUoc2xpZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBleHRlbmRKc29uKHNEZWZhdWx0LCBjdXN0b20pIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gY3VzdG9tKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXN0b20uaGFzT3duUHJvcGVydHkoa2V5KSkgc0RlZmF1bHRba2V5XSA9IGN1c3RvbVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc0RlZmF1bHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBJc05vdE51bGwoVmFsdWUpIHtcclxuICAgIHJldHVybiBWYWx1ZSAhPSBudWxsICYmIFZhbHVlICE9IHVuZGVmaW5lZCAmJiBWYWx1ZS5sZW5ndGggPiAwICYmIFZhbHVlICE9IFwiMFwiICYmIFZhbHVlICE9IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIElzTm90TnVsbE9ySXNaZXJvKFZhbHVlKSB7XHJcbiAgICByZXR1cm4gVmFsdWUgIT0gbnVsbCAmJiBWYWx1ZSAhPSB1bmRlZmluZWQgJiYgVmFsdWUubGVuZ3RoID4gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gRW5hYmxlU2VhcmNoRm9ybSgpIHtcclxuICAgIGZ1bmN0aW9uIHNlYXJjaEFjdG9uKHNlbmRlcikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgJHNlbmRlciA9ICQoc2VuZGVyKTtcclxuICAgICAgICAgICAgdmFyICRmb3JtID0gJHNlbmRlci5jbG9zZXN0KCdbZGF0YS1zZWFyY2gtZm9ybV0nKTtcclxuICAgICAgICAgICAgdmFyIF91cmxRdWVyeSA9IGNvbXBvc2VVcmxRdWVyeSh7IHNlbGVjdDogJGZvcm0gfSk7XHJcbiAgICAgICAgICAgIHZhciBfcnQgPSAkZm9ybS5kYXRhKCdzZWFyY2gtZm9ybScpO1xyXG4gICAgICAgICAgICB2YXIgJHNvcnQgPSAkKCdbZGF0YS1zb3J0LW9iamVjdD1cIicgKyBfcnQgKyAnXCJdJyk7XHJcbiAgICAgICAgICAgIHZhciBfZGVmYXVsdCA9ICRmb3JtLmRhdGEoJ2RlZmF1bHQtc2VhcmNoJyk7XHJcbiAgICAgICAgICAgIHZhciBfZGVmYXVsdFNvcnQgPSAkZm9ybS5kYXRhKCdkZWZhdWx0LXNvcnQnKTtcclxuICAgICAgICAgICAgaWYgKCh0eXBlb2YgKF9kZWZhdWx0KSAhPSAndW5kZWZpbmVkJyAmJiBfZGVmYXVsdCAhPSAnJyAmJiBfdXJsUXVlcnkuaW5kZXhPZignL2FkZHJlc3MtJykgPT0gLTEgJiYgX3VybFF1ZXJ5LmluZGV4T2YoJy9tbHMtJykgPT0gLTEpKSBfdXJsUXVlcnkgKz0gX2RlZmF1bHQ7XHJcbiAgICAgICAgICAgIGlmICgkc29ydC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3NvcnRWYWx1ZSA9ICRzb3J0LnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgX3VybFF1ZXJ5ICs9IF9zb3J0VmFsdWUgIT0gbnVsbCAmJiBfc29ydFZhbHVlICE9ICcnID8gX3NvcnRWYWx1ZSA6ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiAoX2RlZmF1bHRTb3J0KSAhPSAndW5kZWZpbmVkJyAmJiBfZGVmYXVsdFNvcnQgIT0gbnVsbCAmJiBfZGVmYXVsdFNvcnQgIT0gJycpIF91cmxRdWVyeSArPSBfZGVmYXVsdFNvcnQ7XHJcbiAgICAgICAgICAgICRmb3JtLnRyaWdnZXJIYW5kbGVyKCdzZWFyY2gnLCBbeyBxdWVyeTogX3VybFF1ZXJ5IH1dKTtcclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1zZWFyY2gtZm9ybV0gW2RhdGEtc2VhcmNoLWJ1dHRvbl0nLCB7fSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNlYXJjaEFjdG9uKHRoaXMpO1xyXG4gICAgfSk7XHJcbiAgICAkKGRvY3VtZW50KS5vbigna2V5ZG93bicsICdbZGF0YS1zZWFyY2gtZm9ybV0gW2RhdGEtc2VhcmNoLWFjdGlvbl0nLCB7fSwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzKVxyXG4gICAgICAgICAgICBzZWFyY2hBY3Rvbih0aGlzKTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoJ1tkYXRhLXNlYXJjaC1mb3JtXScpLm9uKCdzZWFyY2gnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgIHZhciAkc2VuZGVyID0gJCh0aGlzKTtcclxuICAgICAgICB2YXIgJHByZWZpeCA9ICRzZW5kZXIuZGF0YSgnc2VhcmNoLXByZWZpeCcpO1xyXG4gICAgICAgIHZhciBfcHJlZml4ID0gKElzTm90TnVsbCgkcHJlZml4KSAmJiAkcHJlZml4ICE9ICd1bmRlZmluZWQnKSA/ICRwcmVmaXggOiBHZXRTZWFyY2hQcmVmaXhGb3JSZWNvcmRUeXBlKCRzZW5kZXIuZGF0YSgnc2VhcmNoLWZvcm0nKSk7XHJcbiAgICAgICAgdmFyIHBhdHRlcm4gPSAvXlxcL1xcLy87XHJcbiAgICAgICAgaWYgKCFwYXR0ZXJuLnRlc3QoKF9wcmVmaXggIT0gbnVsbCAmJiBfcHJlZml4ICE9ICcnICYmIF9wcmVmaXggIT0gJ3VuZGVmaW5lZCcgPyBfcHJlZml4IDogJycpICsgZGF0YS5xdWVyeSkpXHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IChfcHJlZml4ICE9IG51bGwgJiYgX3ByZWZpeCAhPSAnJyAmJiBfcHJlZml4ICE9ICd1bmRlZmluZWQnID8gX3ByZWZpeCA6ICcnKSArIGRhdGEucXVlcnk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gR2V0U2VhcmNoUHJlZml4Rm9yUmVjb3JkVHlwZShyZWNvcmRUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHJlY29yZFR5cGUpIHtcclxuICAgICAgICBjYXNlICdQUk9QRVJUWSc6IHJldHVybiAnL3Byb3BlcnRpZXMnO1xyXG4gICAgICAgIGNhc2UgJ1BST1BFUlRZUkVOVCc6IHJldHVybiAnL3Byb3BlcnR5LXNlYXJjaC1tYXAtb24tcmVudCc7XHJcbiAgICAgICAgY2FzZSAnUFJPUEVSVFlTT0xEJzogcmV0dXJuICcvcHJvcGVydHktc2VhcmNoLW1hcC9zb2xkJztcclxuICAgICAgICBjYXNlICdBR0VOVCc6IHJldHVybiAnL3JlYWwtZXN0YXRlLWFnZW50cyc7XHJcbiAgICAgICAgY2FzZSAnT0ZGSUNFJzogcmV0dXJuICcvcmVhbC1lc3RhdGUtb2ZmaWNlcyc7XHJcbiAgICAgICAgY2FzZSAnQkxPRyc6IHJldHVybiAnL2Jsb2cvc2VhcmNoJztcclxuICAgICAgICBjYXNlICdBR0VOVFRFQU0nOiByZXR1cm4gJy9yZWFsLWVzdGF0ZS1hZ2VudHMnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcvJztcclxufVxyXG5mdW5jdGlvbiBHZXREZWZhdWx0U29ydEZvclJlY29yZFR5cGUocmVjb3JkVHlwZSkge1xyXG4gICAgc3dpdGNoIChyZWNvcmRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSAnUFJPUEVSVFknOiByZXR1cm4gJy9kc29ydC1wJztcclxuICAgICAgICBjYXNlICdQUk9QRVJUWVJFTlQnOiByZXR1cm4gJy9kc29ydC1wJztcclxuICAgICAgICBjYXNlICdBR0VOVCc6IHJldHVybiAnL3NvcnQtbic7XHJcbiAgICAgICAgY2FzZSAnQUdFTlRURUFNJzogcmV0dXJuICcvc29ydC1uJztcclxuICAgICAgICBjYXNlICdPRkZJQ0UnOiByZXR1cm4gJy9zb3J0LW4nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gaW5pdE1hcERlZmF1bHQoKSB7XHJcbiAgICBpZiAod2luZG93Lm9uTWFwTG9hZGVkKSB3aW5kb3cub25NYXBMb2FkZWQoKTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIEVuYWJsZURlbWFuZEltcG9ydCgpIHtcclxuICAgIF9pbml0KCk7XHJcbiAgICBmdW5jdGlvbiBfaW5pdCgpIHtcclxuICAgICAgICAkKFwiaW1nW2RhdGEtZGVtYW5kLWtleV1cIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIEdldFByb3BlcnRpZXMoJCh0aGlzKSwgJCh0aGlzKS5kYXRhKCdkZW1hbmQtdXJsJyksICQodGhpcykuZGF0YSgnZGVtYW5kLWtleScpLCAkKHRoaXMpLmRhdGEoJ2xheW91dCcpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1jay1ocmVmXScsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBHZXRQcm9wZXJ0aWVzKCQodGhpcykucGFyZW50cygnW2RhdGEtY2stcHJvcGVydHlsaXN0XTpmaXJzdCcpLCAkKHRoaXMpLmRhdGEoJ2NrLWhyZWYnKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eWxpc3RdOmZpcnN0JykuZGF0YSgnY2stZGVtYW5kLWtleScpLCAkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWNrLXByb3BlcnR5bGlzdF06Zmlyc3QnKS5kYXRhKCdjay1kZW1hbmQtbGF5b3V0JykpO1xyXG4gICAgfSk7XHJcblxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHNlbGVjdG9yRWxlbWVudDtcclxuICAgIHZhciBjdXJyZW50U2V0dGluZ3M7XHJcbiAgICB2YXIgbGFuZ3VhZ2VTb3VyY2VzID0ge1xyXG4gICAgICAgIGxhbmd1YWdlczogW1xyXG4gICAgICAgICAgICB7IGNvZGU6ICdlbicsIGxhYmVsOiAnRW5nbGlzaCcgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnZXMnLCBsYWJlbDogJ1NwYW5pc2gnLCBsb2NhbExhYmVsOiAnRXNwYcOxb2wnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ25sJywgbGFiZWw6ICdEdXRjaCcsIGxvY2FsTGFiZWw6ICdOZWRlcmxhbmRzJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdwcicsIGxhYmVsOiAnUG9ydHVnZXNlJywgbG9jYWxMYWJlbDogJ1BvcnR1Z3XDqnMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ2ZyJywgbGFiZWw6ICdGcmVuY2gnLCBsb2NhbExhYmVsOidGcmFuw6dhaXMnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjdXJyZW5jaWVzOiBbXHJcbiAgICAgICAgICAgIHsgY29kZTogJ1VTRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0RvbGxhcicsIGZvcm1hdDogJyQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnQUVEJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnVW5pdGVkIEFyYWIgRW1pcmF0ZXMgRGlyaGFtJywgZm9ybWF0OiAnQUVEIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0JTRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0JhaGFtaWFuIERvbGxhcicsIGZvcm1hdDogJ0IkIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0NBRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0NhbmFkaWFuIERvbGxhcicsIGZvcm1hdDogJyQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnRE9QJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnRG9taW5pY2FuIFBlc28nLCBmb3JtYXQ6ICdSRCQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnRVVSJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnRXVybycsIGZvcm1hdDogJ+KCrCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdKTUQnLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdKYW1haWNhbiBEb2xsYXInLCBmb3JtYXQ6ICdKJCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdLWUQnLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdDYXltYW4gSXNsYW5kcyBEb2xsYXInLCBmb3JtYXQ6ICdDSSQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnTVhOJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnTWV4aWNhbiBQZXNvJywgZm9ybWF0OiAnJCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdQQUInLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdQYW5hbWFuaWFuIEJhbGJvYScsIGZvcm1hdDogJ0IvLiMjIywjIyMsIyMjLiMjJyB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bml0czogW1xyXG4gICAgICAgICAgICB7IGNvZGU6ICdpbXBlcmlhbCcsIGxhYmVsOiAnSW1wZXJpYWwnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ21ldHJpYycsIGxhYmVsOiAnTWV0cmljJyB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICBwcmVzZXRzOiBbXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0JTJywgbGFiZWw6ICdCYWhhbWFzJywgY3VycmVuY3k6ICdCU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0NBJywgbGFiZWw6ICdDYW5hZGEnLCBjdXJyZW5jeTogJ0NBRCcsIGxhbmd1YWdlOiBbJ2VuJywgJ2ZyJ10sIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdKTScsIGxhYmVsOiAnSmFtYWljYScsIGN1cnJlbmN5OiAnSk1EJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdLWScsIGxhYmVsOiAnQ2F5bWFuIElzbGFuZHMnLCBjdXJyZW5jeTogJ0tZRCcsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnVEMnLCBsYWJlbDogJ1R1cmtzICYgQ2FpY29zIElzbGFuZHMnLCBsb2NhbExhYmVsOiAnJywgY3VycmVuY3k6ICdVU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ1VTJywgbGFiZWw6ICdVbml0ZWQgU3RhdGVzJywgbG9jYWxMYWJlbDogJycsIGN1cnJlbmN5OiAnVVNEJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnaW1wZXJpYWwnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0RZJywgbGFiZWw6ICdEb21pbmljYW4gUmVwdWJsaWMnLCBsb2NhbExhYmVsOiAnUmVww7pibGljYSBEb21pbmljYW5hJywgY3VycmVuY3k6ICdVU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0VTJywgbGFiZWw6ICdTcGFpbicsIGxvY2FsTGFiZWw6ICdFc3Bhw7FhJywgY3VycmVuY3k6ICdVU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ01YJywgbGFiZWw6ICdNZXhpY28nLCBsb2NhbExhYmVsOiAnTcOpeGljbycsIGN1cnJlbmN5OiAnTVhOJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdQQScsIGxhYmVsOiAnUGFuYW1hJywgbG9jYWxMYWJlbDogJ1BhbmFtw6EnLCBjdXJyZW5jeTogJ1BBQicsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnTkwnLCBsYWJlbDogJ05lZGVybGFuZHMnLCBsb2NhbExhYmVsOiAnTmVkZXJsYW5kJywgY3VycmVuY3k6ICdFVVInLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ1BUJywgbGFiZWw6ICdQb3J0dWdhbCcsIGN1cnJlbmN5OiAnRVVSJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG5cclxuICAgICAgICBdLFxyXG4gICAgICAgIHVuaXRDb252ZXJ0aW9uczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB1bml0OiAnU1FGVCcsXHJcbiAgICAgICAgICAgICAgICB0cmFnZXRVbml0OiAnU3EuTScsICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3RhbnQ6IDAuMDkyOTAzLFxyXG4gICAgICAgICAgICAgICAgbm90YXRpb246IFsnU3FmdCcsICdTcS5GdCcsICdTcS5GdC4nLCAnU3EuIEZ0LicsICdTRiddXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHVuaXQ6ICdNSScsXHJcbiAgICAgICAgICAgICAgICB0cmFnZXRVbml0OiAnS00nLFxyXG4gICAgICAgICAgICAgICAgY29uc3RhbnQ6IDEuNjA5MzQsXHJcbiAgICAgICAgICAgICAgICBub3RhdGlvbjpbJ21pJywnbWlsZXMnLCdtaWxlJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdDogJ0FDJyxcclxuICAgICAgICAgICAgICAgIHRyYWdldFVuaXQ6ICdTUU0nLFxyXG4gICAgICAgICAgICAgICAgY29uc3RhbnQ6IDQwNDYuODYsXHJcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogWydhY3JlJywgJ2FjcmVzJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdDogJ0xPVFNJWkUnLFxyXG4gICAgICAgICAgICAgICAgdHJhZ2V0VW5pdDogJ0xvdCBTaXplJyxcclxuICAgICAgICAgICAgICAgIHRhcmdldE5vdGF0aW9uOiAn446hJyxcclxuICAgICAgICAgICAgICAgIGNvbnN0YW50OiA0MDQ2Ljg2LFxyXG4gICAgICAgICAgICAgICAgbm90YXRpb246IFsnTG90IFNpemUnXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG5cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciByZWNlbnRTdGF0ZSA9IG51bGw7XHJcbiAgICB2YXIgdW5pdENvbnZlcnRpb25TY2hlbWEgPSBudWxsOyAgICBcclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBpbml0KCkge1xyXG4gICAgICAgIHZhciBjaGFuZ2VMYW5ndWFnZU5vZGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWxhbmd1YWdlXScpO1xyXG4gICAgICAgIGNoYW5nZUxhbmd1YWdlTm9kZXMuZm9yRWFjaChlbmFibGVMYW5ndWFnZVNlbGVjdG9yKTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuICAgICAgICBpZiAoY3VycmVudD8uY29kZSlcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UudXBkYXRlJywgeyBkZXRhaWw6IGN1cnJlbnQgfSkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50ID0gbGFuZ3VhZ2VTb3VyY2VzLnByZXNldHMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLmNvZGUgPT0gJ1VTJzsgfSlbMF07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgc2V0KGtleSwgQXJyYXkuaXNBcnJheShjdXJyZW50W2tleV0pID8gY3VycmVudFtrZXldWzBdIDogY3VycmVudFtrZXldKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UudXBkYXRlJywgeyBkZXRhaWw6IGN1cnJlbnQgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB1cGRhdGVQcmljZSh0cnVlKTsgICAgICAgICAgXHJcbiAgICAgICAgaWYgKGN1cnJlbnQubGFuZ3VhZ2UgJiYgY3VycmVudC5sYW5ndWFnZS5pbmRleE9mKCdlbicpID09IC0xKVxyXG4gICAgICAgICAgICB1cGRhdGVMYW5ndWFnZSgpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZWNlbnRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnQpO1xyXG4gICAgICAgICAgICBzZXRMYW5ndWFnZVRvU3RvcmUoeyBMb2NhbGU6ICdlbl9VUycgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaEFjdGlvbnMoKTtcclxuICAgICAgICBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEgPSBhd2FpdCBidWlsZFVuaXRDb252ZXJ0aW9uU2NoZW1hKCk7XHJcbiAgICAgICAgdXBkYXRlTWVzc3VyZW1lbnQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gYnVpbGRVbml0Q29udmVydGlvblNjaGVtYSgpIHtcclxuICAgICAgICB2YXIgZXhwcmVzc2lvblN0cmluZyA9ICcnO1xyXG4gICAgICAgIHZhciBub3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgPSAnJztcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICBub3RhdGlvbkV4cHJlc3Npb25zOiB7fSxcclxuICAgICAgICAgICAgbm90YXRpb25Pbmx5RXhwcmVzc2lvbnM6IHt9LFxyXG4gICAgICAgICAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZUFsbCgvW14wLTlcXFxcLl0vZ2ksICcnKSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZm9ybWF0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycseyBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDIgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGhhdmVWYWxpZEF0dHJpYnV0ZTogZnVuY3Rpb24gKGl0ZW0pIHsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5oYXNBdHRyaWJ1dGUgPyBpdGVtLmhhc0F0dHJpYnV0ZSgnZGF0YS10aCcpIDogZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldExhYmVsRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0QXR0cmlidXRlP2l0ZW0uZ2V0QXR0cmlidXRlKCdkYXRhLXRoJyk6Jyc7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldExhYmVsRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAoaXRlbSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnNldEF0dHJpYnV0ZSlcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnZGF0YS10aCcsIHZhbHVlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0VmFsdWVGb3JBdHRyaWJ1dGU6IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pbm5lclRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldFZhbHVlRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAoaXRlbSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uaW5uZXJUZXh0ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICB2YXIgc3ViRXhwcmVzc2lvblN0cmluZyA9ICcnLCBzdWJOb3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgaXRlbS5ub3RhdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChub3RhdGlvbkl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHN1Yk5vdGF0aW9uRXhwcmVzc2lvblN0cmluZyArPSAoc3ViTm90YXRpb25FeHByZXNzaW9uU3RyaW5nICE9ICcnID8gJ3wnIDogJycpICsgJygoPzxOPicgKyBub3RhdGlvbkl0ZW0ucmVwbGFjZUFsbCgvXFxzL2dpLCAnXFxcXHMnKS5yZXBsYWNlQWxsKC8oW14wLTlBLXpdKS9naSwgJ1xcXFwkMScpICsgJykoXFxcXHN8W15BLXpdfCQpKSc7XHJcbiAgICAgICAgICAgICAgICBzdWJFeHByZXNzaW9uU3RyaW5nICs9IChzdWJFeHByZXNzaW9uU3RyaW5nICE9ICcnID8gJ3wnIDogJycpICsgJygoPzxWPlswLTlcXFxcLFxcXFwuXSspKFxcXFxufFxcXFxzKSooPzxOPicgKyBub3RhdGlvbkl0ZW0ucmVwbGFjZUFsbCgvXFxzL2dpLCAnXFxcXHMnKS5yZXBsYWNlQWxsKC8oW14wLTlBLXpdKS9naSwnXFxcXCQxJykgKyAnKShcXFxcc3xbXkEtel18JCkpJztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5ub3RhdGlvbkV4cHJlc3Npb25zW2l0ZW0udW5pdF0gPSBuZXcgUmVnRXhwKHN1YkV4cHJlc3Npb25TdHJpbmcsICdnbWknKTtcclxuICAgICAgICAgICAgcmVzdWx0Lm5vdGF0aW9uT25seUV4cHJlc3Npb25zW2l0ZW0udW5pdF0gPSBuZXcgUmVnRXhwKHN1Yk5vdGF0aW9uRXhwcmVzc2lvblN0cmluZywgJ2dtaScpO1xyXG4gICAgICAgICAgICBleHByZXNzaW9uU3RyaW5nICs9IChleHByZXNzaW9uU3RyaW5nICE9ICcnID8gJ3wnIDogJycpICsgJygnICsgc3ViRXhwcmVzc2lvblN0cmluZyArICcpJzsgICAgICAgICAgICBcclxuICAgICAgICAgICAgbm90YXRpb25FeHByZXNzaW9uU3RyaW5nICs9IChub3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgIT0gJycgPyAnfCcgOiAnJykgKyAnKCcgKyBzdWJOb3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgKyAnKSc7IFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlc3VsdC5leHByZXNzaW9uID0gbmV3IFJlZ0V4cChleHByZXNzaW9uU3RyaW5nLCAnZ21pJyk7XHJcbiAgICAgICAgcmVzdWx0Lm5vdGF0aW9uRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAobm90YXRpb25FeHByZXNzaW9uU3RyaW5nLCAnZ21pJyk7XHJcbiAgICAgICAgcmVzdWx0LnZhbHVlRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoJygoPzxWPlswLTlcXFxcLF0rKFxcXFwuWzAtOV0rKT8pKFxcXFxufFxcXFxzKSopJywgJ2dtaScpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gYXR0YWNoQWN0aW9ucygpIHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLmNoYW5nZS5sYW5ndWFnZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlTGFuZ3VhZ2UoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLmNoYW5nZS5jdXJyZW5jeScsIGZ1bmN0aW9uICgpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdXBkYXRlUHJpY2UoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLmNoYW5nZS5tZXNzdXJlbWVudCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlTWVzc3VyZW1lbnQoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhenkucmVmcmVzaCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlTWVzc3VyZW1lbnQoKTtcclxuICAgICAgICB9KTsgICAgICAgIFxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UucmVmcmVzaC5jdXJyZW5jeScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlUHJpY2UoKTsgICAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgIH0gICAgXHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTGFuZ3VhZ2UoKSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuICAgICAgICBpZiAocmVjZW50U3RhdGUgPT0gbnVsbCkgcmVjZW50U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50KTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY3VycmVudD8ubGFuZ3VhZ2UgIT0gcmVjZW50U3RhdGU/Lmxhbmd1YWdlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVjZW50U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50KTtcclxuXHJcbiAgICAgICAgdmFyIGxhYmVscyA9IGF3YWl0IGdldExhbmd1YWdlTGFiZWxzKCk7ICAgICAgICAgICBcclxuICAgICAgICBpZiAoY3VycmVudD8ubGFuZ3VhZ2UgJiYgbGFiZWxzLkxvY2FsZS5pbmRleE9mKGN1cnJlbnQubGFuZ3VhZ2UpID09IC0xKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHVwZGF0ZVRvU2VydmVyKCdsYW5ndWFnZScpOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsYWJlbHNUb0NoYW5nZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1sLWtdJyk7XHJcbiAgICAgICAgaWYgKGxhYmVsc1RvQ2hhbmdlKVxyXG4gICAgICAgICAgICBsYWJlbHNUb0NoYW5nZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7IHVwZGF0ZUxhbmd1YWdlTGFiZWwoaXRlbSwgbGFiZWxzLkxhYmVscyk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldExhbmd1YWdlTGFiZWxzRnJvbVN0b3JlKCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50TGFiZWxzU3RyaW5nID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdMT0NBTExBQkVMUycpO1xyXG4gICAgICAgIHZhciBjdXJyZW50TGFiZWxzID0gbnVsbDtcclxuICAgICAgICBpZiAoY3VycmVudExhYmVsc1N0cmluZyAhPSBudWxsKVxyXG4gICAgICAgICAgICBjdXJyZW50TGFiZWxzID0gSlNPTi5wYXJzZShjdXJyZW50TGFiZWxzU3RyaW5nKTtcclxuICAgICAgICByZXR1cm4gY3VycmVudExhYmVscztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBzZXRMYW5ndWFnZVRvU3RvcmUoY3VycmVudExhYmVscykge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTE9DQUxMQUJFTFMnLCBKU09OLnN0cmluZ2lmeShjdXJyZW50TGFiZWxzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VMYWJlbHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRMYWJlbHMgPSBhd2FpdCBnZXRMYW5ndWFnZUxhYmVsc0Zyb21TdG9yZSgpO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudExhYmVscyAhPSBudWxsKSB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdmFyIGV4cGlyeSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBleHBpcnkuc2V0SG91cnMoZXhwaXJ5LmdldEhvdXJzKCkgLSAxKTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXcgRGF0ZShjdXJyZW50TGFiZWxzLnVwZGF0ZWRPbikgPiBleHBpcnkgJiYgY3VycmVudExhYmVscy5Mb2NhbGUuaW5kZXhPZihjdXJyZW50Lmxhbmd1YWdlKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjdXJyZW50TGFiZWxzKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudExhYmVscyA9IGF3YWl0IEdFVCgnL3NlcnZpY2VzL2Fnb3JhQ2xpZW50LmFzaHgnLCB7IHR5cGU6ICdMQUJFTFMnIH0pO1xyXG4gICAgICAgICAgICBjdXJyZW50TGFiZWxzLnVwZGF0ZWRPbiA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIHNldExhbmd1YWdlVG9TdG9yZShjdXJyZW50TGFiZWxzKTtcclxuICAgICAgICAgICAgcmVzb2x2ZShjdXJyZW50TGFiZWxzKTtcclxuICAgICAgICB9KTsgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHZhciBleHByZXNzaW9uRm9yQXR0cmlidXRlID0gL2FnXFwtbFxcLWtcXC0oPzxBdHRyaWJ1dGU+W15cXD1dKykvZ207XHJcbiAgICB2YXIgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlID0gL1xcWyg/PExhYmVsSUQ+W15cXF1dKylcXF0vZ207XHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVMYW5ndWFnZUxhYmVsKGl0ZW0sIGxhYmVscykge1xyXG4gICAgICAgIHZhciBrZXkgPSBpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1rJyk7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gbnVsbDtcclxuICAgICAgICBpZiAobGFiZWxzW2tleV0gfHwgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZE5vZGVzICYmIGl0ZW0uY2hpbGROb2Rlcy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLmxhc3RJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25Gb3JBdHRyaWJ1dGVWYWx1ZS5sYXN0SW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Q29udGVudCA9IGtleTsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBleHByZXNzaW9uRm9yQXR0cmlidXRlVmFsdWUuZXhlYyh0ZXh0Q29udGVudCkpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudC5yZXBsYWNlKG1hdGNoWzBdLCBsYWJlbHNbbWF0Y2guZ3JvdXBzLkxhYmVsSURdID8gbGFiZWxzW21hdGNoLmdyb3Vwcy5MYWJlbElEXS5sYmwgOiAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jaGlsZE5vZGVzWzBdLnRleHRDb250ZW50ID0gdGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGROb2Rlc1swXS50ZXh0Q29udGVudCA9IGxhYmVsc1trZXldID8gbGFiZWxzW2tleV0ubGJsIDogJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobGFiZWxzW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZHVtbXlOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGR1bW15Tm9kZS5pbm5lckhUTUwgPSBsYWJlbHNba2V5XS5sYmw7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hIdG1sV2l0aExhYmVsKGl0ZW0sIGR1bW15Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW0uYXR0cmlidXRlcy5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSBpdGVtLmF0dHJpYnV0ZXNbaV07ICAgICAgICAgIFxyXG4gICAgICAgICAgICBleHByZXNzaW9uRm9yQXR0cmlidXRlLmxhc3RJbmRleCA9IDA7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICgobWF0Y2ggPSBleHByZXNzaW9uRm9yQXR0cmlidXRlLmV4ZWMoYXR0cmlidXRlLm5hbWUpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlSWRlbnRpZmllciA9IG1hdGNoLmdyb3Vwcy5BdHRyaWJ1dGU7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGUudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLmV4ZWMoYXR0cmlidXRlVmFsdWUpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS5yZXBsYWNlKG1hdGNoWzBdLCBsYWJlbHNbbWF0Y2guZ3JvdXBzLkxhYmVsSURdP2xhYmVsc1ttYXRjaC5ncm91cHMuTGFiZWxJRF0ubGJsOicnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKGF0dHJpYnV0ZUlkZW50aWZpZXIsIGF0dHJpYnV0ZVZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBtYXRjaEh0bWxXaXRoTGFiZWwoaXRlbSwgZG9tKSB7ICAgICAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChkb20uY2hpbGROb2Rlc1tpXT8udGV4dENvbnRlbnQgJiYgaXRlbS5jaGlsZE5vZGVzW2ldPy50ZXh0Q29udGVudClcclxuICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGROb2Rlc1tpXS50ZXh0Q29udGVudCA9IGRvbS5jaGlsZE5vZGVzW2ldPy50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaSA8IGRvbS5jaGlsZE5vZGVzLmxlbmd0aCAmJiBpIDwgaXRlbS5jaGlsZE5vZGVzLmxlbmd0aClcclxuICAgICAgICAgICAgICAgIG1hdGNoSHRtbFdpdGhMYWJlbChpdGVtLmNoaWxkTm9kZXNbaV0sIGRvbS5jaGlsZE5vZGVzW2ldKTtcclxuICAgICAgICAgICAgZWxzZSByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByaWNlKGlzSW5pdCkge1xyXG4gICAgICAgIHZhciBjdXJyZW5jaWVzID0gYXdhaXQgZ2V0Q29udmVydGlvblJhdGVzKCk7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuICAgICAgICBpZiAoY3VycmVudC5jdXJyZW5jeSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVuY3kgPSBjdXJyZW5jaWVzLlJhdGVzPy5FeGNoYW5nZVJhdGVzPy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGl0ZW0uQ29kZSA9PSBjdXJyZW50LmN1cnJlbmN5OyB9KVswXTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbmN5TWV0YSA9IGxhbmd1YWdlU291cmNlcy5jdXJyZW5jaWVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5jb2RlID09IGN1cnJlbnQuY3VycmVuY3k7IH0pWzBdO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVuY3lNZXRhKVxyXG4gICAgICAgICAgICAgICAgY3VycmVuY3kuZm9ybWF0dGVyID0gY29udmVydEZvcm1hdFRvRXhwcmVzc2lvbihjdXJyZW5jeU1ldGEuZm9ybWF0KTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRDdXJyZW5jeSA9IGN1cnJlbmN5LkNvZGU7XHJcbiAgICAgICAgICAgIHZhciBwcmljZVRvQ2hhbmdlID0gaXNJbml0ID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtcF06bm90KC5pcy1hcHBsaWVkKScpIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtcF0nKTtcclxuICAgICAgICAgICAgaWYgKHByaWNlVG9DaGFuZ2UpXHJcbiAgICAgICAgICAgICAgICBwcmljZVRvQ2hhbmdlLmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGl0ZW0pIHsgaWYgKGl0ZW0uaW5uZXJIVE1MLmluZGV4T2YoJ3t7JykgPiAtMSkgcmV0dXJuOyB1cGRhdGVJdGVtT2Zmc2V0Q2xhc3MoaXRlbSk7IGl0ZW0uY2xhc3NMaXN0LmFkZCgnaXMtYXBwbGllZCcpOyB1cGRhdGVQcmljZUZvckl0ZW0oaXRlbSwgY3VycmVuY3ksIGN1cnJlbnRDdXJyZW5jeSk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVJdGVtT2Zmc2V0Q2xhc3MoaXRlbSkge1xyXG4gICAgICAgIGlmICghaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLWFwcGxpZWQnKSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudE9mZnNldCA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRDb2xsZWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIHBhcmVudE9mZnNldCA9IChwYXJlbnRDb2xsZWN0aW9uID0gaXRlbS5jbG9zZXN0KCdhcnRpY2xlJykpICE9IG51bGwgJiYgcGFyZW50Q29sbGVjdGlvbi5sZW5ndGggPiAwID8gcGFyZW50Q29sbGVjdGlvblswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IGl0ZW0ucGFyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRQb2ludHMgPSB7IHk6IChwYXJlbnRPZmZzZXQudG9wICsgcGFyZW50T2Zmc2V0LmJvdHRvbSkgLyAyLCB4OiAocGFyZW50T2Zmc2V0LmxlZnQgKyBwYXJlbnRPZmZzZXQucmlnaHQpIC8gMiB9O1xyXG4gICAgICAgICAgICB2YXIgaXRlbVBvaW50cyA9IHsgeTogKGN1cnJlbnRPZmZzZXQudG9wICsgY3VycmVudE9mZnNldC5ib3R0b20pIC8gMiwgeDogKGN1cnJlbnRPZmZzZXQubGVmdCArIGN1cnJlbnRPZmZzZXQucmlnaHQpIC8gMiB9O1xyXG4gICAgICAgICAgICB2YXIgY2xhc3NBeGlzID0gJ2FnLWwtcC1wJztcclxuICAgICAgICAgICAgY2xhc3NBeGlzICs9ICctJyArIChwYXJlbnRQb2ludHMueCA+IGl0ZW1Qb2ludHMueCA/ICdsJyA6ICdyJyk7XHJcbiAgICAgICAgICAgIGNsYXNzQXhpcyArPSAnLScgKyAocGFyZW50UG9pbnRzLnkgPiBpdGVtUG9pbnRzLnkgPyAnYicgOiAndCcpO1xyXG4gICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NBeGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0Q29udmVydGlvblJhdGVzKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHZhciBjb252ZXJ0aW9uUmF0ZXNTdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQ09OVkVSVElPTlJBVEVTJyk7XHJcbiAgICAgICAgICAgIHZhciBjb252ZXJ0aW9uUmF0ZXMgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoY29udmVydGlvblJhdGVzU3RvcmVkICYmIGNvbnZlcnRpb25SYXRlc1N0b3JlZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29udmVydGlvblJhdGVzID0gSlNPTi5wYXJzZShjb252ZXJ0aW9uUmF0ZXNTdG9yZWQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGV4cGlyeSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBleHBpcnkuc2V0RGF0ZShleHBpcnkuZ2V0RGF0ZSgpIC0gMSk7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKG5ldyBEYXRlKGNvbnZlcnRpb25SYXRlcy51cGRhdGVkT24pID4gZXhwaXJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjb252ZXJ0aW9uUmF0ZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb252ZXJ0aW9uUmF0ZXMgPSBhd2FpdCBHRVQoJy9zZXJ2aWNlcy9hZ29yYUNsaWVudC5hc2h4JywgeyB0eXBlOiAnQ09OVkVSVElPTlJBVEVTJyB9KTtcclxuICAgICAgICAgICAgY29udmVydGlvblJhdGVzLnVwZGF0ZWRPbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0NPTlZFUlRJT05SQVRFUycsIEpTT04uc3RyaW5naWZ5KGNvbnZlcnRpb25SYXRlcykpO1xyXG4gICAgICAgICAgICByZXNvbHZlKGNvbnZlcnRpb25SYXRlcyk7XHJcbiAgICAgICAgfSk7ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZXhwcmVzc2lvbkZvclByaWNlID0gLygoW15BLXowLTldfFtBLVpdfFtBLVpdezN9KSpcXHM/WzAtOVxcLFxcLl0rKS9nbTtcclxuXHJcbiAgICBmdW5jdGlvbiBjb252ZXJ0Rm9ybWF0VG9FeHByZXNzaW9uKGZvcm1hdCkge1xyXG4gICAgICAgIHZhciBmb3JtYXRTdHJpbmcgPSBmb3JtYXQucmVwbGFjZSgvWyNcXCxcXC5dKy9naSwnJyk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFN0cmluZyArIG51bWJlci50b0xvY2FsZVN0cmluZygnZW4tVVMnKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByaWNlRm9ySXRlbShpdGVtLCBjdXJyZW5jeSwgY3VycmVudEN1cnJlbmN5KSB7ICAgICAgICBcclxuICAgICAgICB2YXIgaXNEZWZhdWx0Q3VycmVuY3lDaGFuZ2UgPSBpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wLWMnKSAhPSBudWxsICYmIGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAtbycpID09IG51bGw7IFxyXG4gICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wLWMnKSA9PSBjdXJyZW50Q3VycmVuY3kgJiYgaXNEZWZhdWx0Q3VycmVuY3lDaGFuZ2UpIHJldHVybjsgICAgICAgIFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gaXRlbS5jaGlsZE5vZGVzW2ldLCBtYXRjaCA9IG51bGw7XHJcbiAgICAgICAgICAgIGV4cHJlc3Npb25Gb3JQcmljZS5sYXN0SW5kZXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAobm9kZS50ZXh0Q29udGVudCAmJiAobWF0Y2ggPSBleHByZXNzaW9uRm9yUHJpY2UuZXhlYyhub2RlLnRleHRDb250ZW50KSkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmYXVsdEN1cnJlbmN5Q2hhbmdlKSBpdGVtLnNldEF0dHJpYnV0ZSgnYWctbC1wLW8nLCBtYXRjaFswXSk7XHJcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uRm9yUHJpY2UubGFzdEluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIHZhciBwcmljZUNvbnZlcnRlZCA9IE1hdGgucm91bmQocGFyc2VGbG9hdChpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wJykpICogY3VycmVuY3kuQ29uc3RhbnQpOyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50LnJlcGxhY2UobWF0Y2hbMF0sIGN1cnJlbmN5LmZvcm1hdHRlciA/IGN1cnJlbmN5LmZvcm1hdHRlcihwcmljZUNvbnZlcnRlZCkgOiBwcmljZUNvbnZlcnRlZC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZU1lc3N1cmVtZW50KGlzSW5pdCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7XHJcbiAgICAgICAgdmFyIGlzQXBwbGllZCA9IGN1cnJlbnQubWVzc3VyZW1lbnQgPT0gJ21ldHJpYyc7XHJcbiAgICAgICAgdmFyIG1lc3N1cmVtZW50c1RvQ2hhbmdlID0gaXNBcHBsaWVkID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtbV06bm90KC5pcy1hcHBsaWVkKScpIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtbV0nKTtcclxuICAgICAgICBpZiAoaXNBcHBsaWVkKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1lc3N1cmVtZW50c1RvQ2hhbmdlKSBtZXNzdXJlbWVudHNUb0NoYW5nZS5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChpdGVtKSB7IGlmIChpdGVtLmlubmVySFRNTC5pbmRleE9mKCd7eycpID4gLTEpIHJldHVybjsgdXBkYXRlSXRlbU1lc3N1cmVtZW50KGl0ZW0sIGl0ZW0pOyBpdGVtLmNsYXNzTGlzdC5hZGQoJ2lzLWFwcGxpZWQnKTsgfSk7XHJcbiAgICAgICAgICAgIH0sIGlzSW5pdD81MDA6MCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG1lc3N1cmVtZW50c1RvQ2hhbmdlKSBtZXNzdXJlbWVudHNUb0NoYW5nZS5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChpdGVtKSB7IGlmIChpdGVtLmlubmVySFRNTC5pbmRleE9mKCd7eycpID4gLTEpIHJldHVybjsgaXRlbS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UubWVzc3VyZW1lbnQucmV2ZXJ0JykpOyBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFwcGxpZWQnKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUl0ZW1NZXNzdXJlbWVudChpdGVtLHJvb3RFbGVtZW50LCBpc0luaXQsIGlzVW5pdEZvdW5kLCB1bml0KSB7XHJcblxyXG4gICAgICAgIGlmIChpc1VuaXRGb3VuZCAmJiB1bml0KSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZE5vZGVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmNoaWxkTm9kZXMuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoY2hpbGROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZT8udGV4dENvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUZXh0ID0gY2hpbGROb2RlLnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZVJlc3VsdCA9IGF3YWl0IHJlcGxhY2VNZXNzdXJlbWVudFdpdGhVbml0KGNoaWxkTm9kZS50ZXh0Q29udGVudCwgMiwgdW5pdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS50ZXh0Q29udGVudCA9IHJlcGxhY2VSZXN1bHQuY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLm1lc3N1cmVtZW50LnJldmVydCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUudGV4dENvbnRlbnQgPSBjdXJyZW50VGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmluZE1lc3N1cmVtZW50RnJvbUF0dHJpYnV0ZShpdGVtKSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudExhYmVsID0gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmdldExhYmVsRm9yQXR0cmlidXRlKGl0ZW0pO1xyXG4gICAgICAgICAgICB2YXIgbGFiZWxSZXBsYWNlUmVzdWx0ID0gYXdhaXQgcmVwbGFjZU1lc3N1cmVtZW50KGN1cnJlbnRMYWJlbCwgMSk7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5zZXRMYWJlbEZvckF0dHJpYnV0ZShpdGVtLCBsYWJlbFJlcGxhY2VSZXN1bHQuY29udGVudCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEuZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoaXRlbSk7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZVJlcGxhY2VSZXN1bHQgPSBhd2FpdCByZXBsYWNlTWVzc3VyZW1lbnRXaXRoVW5pdChjdXJyZW50VmFsdWUsIDIsIGxhYmVsUmVwbGFjZVJlc3VsdC51bml0c1swXSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5zZXRWYWx1ZUZvckF0dHJpYnV0ZShpdGVtLCB2YWx1ZVJlcGxhY2VSZXN1bHQuY29udGVudCk7XHJcbiAgICAgICAgICAgIHJvb3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLm1lc3N1cmVtZW50LnJldmVydCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5zZXRMYWJlbEZvckF0dHJpYnV0ZShpdGVtLCBjdXJyZW50TGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLnNldFZhbHVlRm9yQXR0cmlidXRlKGl0ZW0sIGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZE5vZGVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmNoaWxkTm9kZXMuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoY2hpbGROb2RlKSB7ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlPy50ZXh0Q29udGVudCAmJiBmaW5kTWVzc3VyZW1lbnRGcm9tTm9kZShjaGlsZE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VGV4dCA9IGNoaWxkTm9kZS50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcGxhY2VSZXN1bHQgPSBhd2FpdCByZXBsYWNlTWVzc3VyZW1lbnQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwbGFjZVJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUudGV4dENvbnRlbnQgPSByZXBsYWNlUmVzdWx0LmNvbnRlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVJlc3VsdCA9IGF3YWl0IHJlcGxhY2VNZXNzdXJlbWVudChjaGlsZE5vZGUudGV4dENvbnRlbnQsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLnRleHRDb250ZW50ID0gcmVwbGFjZVJlc3VsdC5jb250ZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW1NZXNzdXJlbWVudChjaGlsZE5vZGUucGFyZW50RWxlbWVudCwgcm9vdEVsZW1lbnQsIGZhbHNlLCB0cnVlLCByZXBsYWNlUmVzdWx0LnVuaXRzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdhZy5sYW5ndWFnZS5tZXNzdXJlbWVudC5yZXZlcnQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUudGV4dENvbnRlbnQgPSBjdXJyZW50VGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbU1lc3N1cmVtZW50KGNoaWxkTm9kZSwgcm9vdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmaW5kTWVzc3VyZW1lbnRGcm9tTm9kZShpdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5leHByZXNzaW9uLnRlc3QoaXRlbS50ZXh0Q29udGVudCkgfHwgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLm5vdGF0aW9uRXhwcmVzc2lvbi50ZXN0KGl0ZW0udGV4dENvbnRlbnQpOyAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZmluZE1lc3N1cmVtZW50RnJvbUF0dHJpYnV0ZShpdGVtKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgdmFyIG1hdGNoID0gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmhhdmVWYWxpZEF0dHJpYnV0ZShpdGVtKSA/IGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5nZXRMYWJlbEZvckF0dHJpYnV0ZShpdGVtKS5tYXRjaChsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEubm90YXRpb25FeHByZXNzaW9uKSA6IG51bGw7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIHJldHVybiBtYXRjaCAhPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VNZXNzdXJlbWVudChjb250ZW50LCBtb2RlKSB7XHJcbiAgICAgICAgdmFyIHVuaXRzID0gW107XHJcbiAgICAgICAgdmFyIHJlcGxhY2VTdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFtb2RlKSBtb2RlID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpdGVtIG9mIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvbnMpIHtcclxuICAgICAgICAgICAgdmFyIHJlcGxhY2VVbml0UmVzdWx0ID0gYXdhaXQgcmVwbGFjZU1lc3N1cmVtZW50V2l0aFVuaXQoY29udGVudCwgbW9kZSwgaXRlbSk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSByZXBsYWNlVW5pdFJlc3VsdC5jb250ZW50O1xyXG4gICAgICAgICAgICByZXBsYWNlU3VjY2VzcyB8PSByZXBsYWNlVW5pdFJlc3VsdC5zdWNjZXNzO1xyXG4gICAgICAgICAgICBpZiAocmVwbGFjZVVuaXRSZXN1bHQuc3VjY2VzcylcclxuICAgICAgICAgICAgICAgIHVuaXRzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5ub3RhdGlvbkV4cHJlc3Npb25zW2l0ZW0udW5pdF0ubGFzdEluZGV4ID0gLTE7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5ub3RhdGlvbk9ubHlFeHByZXNzaW9uc1tpdGVtLnVuaXRdLmxhc3RJbmRleCA9IC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBjb250ZW50OiBjb250ZW50LCBzdWNjZXNzOiByZXBsYWNlU3VjY2VzcywgdW5pdHM6IHVuaXRzIH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZU1lc3N1cmVtZW50V2l0aFVuaXQoY29udGVudCwgbW9kZSwgaXRlbSkge1xyXG4gICAgICAgIHZhciBtYXRjaCA9IG51bGw7XHJcbiAgICAgICAgdmFyIG1hdGNoU3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgIHdoaWxlICgobWF0Y2ggPSBnZXRSZXBsYWNlTWVzc3VyZW1lbnRFeHByZXNzaW9uTWF0Y2goY29udGVudCwgaXRlbSwgbW9kZSkpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0Y2hTdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gbW9kZSA9PSAxID8gMCA6IHBhcnNlRmxvYXQobGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmdldFZhbHVlKG1hdGNoLmdyb3Vwcy5WKSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciB1bml0ID0gbWF0Y2guZ3JvdXBzLk47XHJcbiAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gbWF0Y2guaW5kZXg7XHJcbiAgICAgICAgICAgIHZhciBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciBtYXRjaFZhbHVlID0gKG1vZGUgIT0gMSA/IG1hdGNoWzBdLnJlcGxhY2VBbGwobWF0Y2guZ3JvdXBzLlYsIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5mb3JtYXRWYWx1ZSgodmFsdWUgKiBpdGVtLmNvbnN0YW50KSkpIDogbWF0Y2hbMF0pLnJlcGxhY2VBbGwodW5pdCwgaXRlbS50cmFnZXRVbml0KTtcclxuICAgICAgICAgICAgaWYgKG1vZGUgPT0gMiAmJiBpdGVtLnRhcmdldE5vdGF0aW9uKSBtYXRjaFZhbHVlICs9ICcgJyArIGl0ZW0udGFyZ2V0Tm90YXRpb247XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZygwLCBzdGFydEluZGV4KSArIG1hdGNoVmFsdWUgKyBjb250ZW50LnN1YnN0cmluZyhlbmRJbmRleCk7XHJcbiAgICAgICAgICAgIGlmIChtb2RlID09IDIpIHJldHVybiB7IGNvbnRlbnQ6IGNvbnRlbnQsIHN1Y2Nlc3M6IG1hdGNoU3VjY2VzcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBjb250ZW50OiBjb250ZW50LCBzdWNjZXNzOiBtYXRjaFN1Y2Nlc3MgfTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRSZXBsYWNlTWVzc3VyZW1lbnRFeHByZXNzaW9uTWF0Y2godmFsdWUsIGl0ZW0sIG1vZGUpIHtcclxuICAgICAgICBpZiAobW9kZSA9PSAwKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEubm90YXRpb25FeHByZXNzaW9uc1tpdGVtLnVuaXRdLmV4ZWModmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSAxKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEubm90YXRpb25Pbmx5RXhwcmVzc2lvbnNbaXRlbS51bml0XS5leGVjKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gMikge1xyXG4gICAgICAgICAgICBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEudmFsdWVFeHByZXNzaW9uLmxhc3RJbmRleCA9IC0xO1xyXG4gICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLnZhbHVlRXhwcmVzc2lvbi5leGVjKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGVuYWJsZUxhbmd1YWdlU2VsZWN0b3IoaXRlbSkge1xyXG4gICAgICAgIGdldEZsYWdDc3NDbGFzcygnVVMnKS5zcGxpdCgnICcpLm1hcChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7IGl0ZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOyB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLnVwZGF0ZScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGl0ZW0uY2xhc3NOYW1lID0gaXRlbS5jbGFzc05hbWUucmVwbGFjZSgvZmZsYWdcXC1bQS1aXXsxLDJ9L2dpLCAnJyk7XHJcbiAgICAgICAgICAgIGdldEZsYWdDc3NDbGFzcyhlLmRldGFpbC5jb2RlKS5zcGxpdCgnICcpLm1hcChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7IGl0ZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOyB9KTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmICghc2VsZWN0b3JFbGVtZW50KSBzZWxlY3RvckVsZW1lbnQgPSBhd2FpdCByZW5kZXJMYW5ndWFnZVNlbGVjdG9yKCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGVuZ2FnZUxhbmd1YWdlU2VsZWN0b3IoaXRlbSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBkaXNlbmdhZ2VBY3Rpb25MaXN0ZW5lcik7XHJcbiAgICAgICAgfSk7ICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZGlzZW5nYWdlQWN0aW9uTGlzdGVuZXIoZSkgeyAgICAgICAgXHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBpZiAoZS50YXJnZXQuY2xvc2VzdCgnW2FnLWxhbmd1YWdlLXNlbGVjdF0sW2FnLWxhbmd1YWdlXScpID09IG51bGwpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGRpc2VuZ2FnZUFjdGlvbkxpc3RlbmVyKTtcclxuICAgICAgICAgICAgZGlzZW5nYWdlTGFuZ3VhZ2VTZWxlY3RvcihlLnRhcmdldCk7XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZW5nYWdlTGFuZ3VhZ2VTZWxlY3RvcihpdGVtKSB7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUuc3R5bGUudG9wID0gTWF0aC5mbG9vcihwb3NpdGlvbi50b3AgLSA4KSArICdweCc7XHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUuc3R5bGUucmlnaHQgPSAnY2FsYygxMDAlIC0gJyArIE1hdGguZmxvb3IocG9zaXRpb24ucmlnaHQgKyA4KSArICdweCknO1xyXG4gICAgICAgIHNlbGVjdG9yRWxlbWVudC5ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5hY3RpdmUnKT8uZm9yRWFjaChmdW5jdGlvbiAoYWN0aXZlSXRlbSkgeyBhY3RpdmVJdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOyB9KVxyXG4gICAgICAgIHNlbGVjdG9yRWxlbWVudC5ub2RlLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGRpc2VuZ2FnZUxhbmd1YWdlU2VsZWN0b3IoaXRlbSkgeyAgICAgICAgXHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0RmxhZ0Nzc0NsYXNzKGNvZGUpIHtcclxuICAgICAgICByZXR1cm4gJ2ZmbGFnIGZmLWxnIGZmbGFnLScgKyBjb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldCgpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSB3aW5kb3cubG9jYWxTdG9yYWdlWydBR0xBTkdVQUdFJ107XHJcbiAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHt9O1xyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPSAnJykgY3VycmVudFZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdXBkYXRlVG9zZXJ2ZXJDYWxsID0gbnVsbDtcclxuICAgIHZhciB1cGRhdGVTdWNjZXMgPSBudWxsO1xyXG5cclxuICAgIGZ1bmN0aW9uIHNldChmaWVsZCwgdmFsdWUpIHsgICAgICAgIFxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7ICAgICAgICBcclxuICAgICAgICBpZiAoY3VycmVudCA9PSB1bmRlZmluZWQpIGN1cnJlbnQgPSB7fTtcclxuICAgICAgICBpZiAoY3VycmVudFtmaWVsZF0gJiYgY3VycmVudFtmaWVsZF0gPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICBjdXJyZW50W2ZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQUdMQU5HVUFHRScsIEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpKTtcclxuXHJcbiAgICAgICAgLy9UaHJvdHRsaW5nXHJcbiAgICAgICAgaWYgKHVwZGF0ZVRvc2VydmVyQ2FsbCAhPSBudWxsKSBjbGVhclRpbWVvdXQodXBkYXRlVG9TZXJ2ZXIpO1xyXG4gICAgICAgIHVwZGF0ZVRvc2VydmVyQ2FsbCA9IHNldFRpbWVvdXQoYXN5bmMgZnVuY3Rpb24gKCkgeyB1cGRhdGVUb3NlcnZlckNhbGwgPSBudWxsOyBhd2FpdCB1cGRhdGVUb1NlcnZlcihmaWVsZCk7IGlmICh1cGRhdGVTdWNjZXMgIT0gbnVsbCkgeyB1cGRhdGVTdWNjZXMoKTsgdXBkYXRlU3VjY2VzID0gbnVsbDsgfSB9LCAxMDApO1xyXG4gICAgICAgIHZhciBvbGRVcGRhdGVTdWNjZXNzID0gdXBkYXRlU3VjY2VzO1xyXG4gICAgICAgIHVwZGF0ZVN1Y2NlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG9sZFVwZGF0ZVN1Y2Nlc3MgIT0gbnVsbCkgb2xkVXBkYXRlU3VjY2VzcygpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS5jaGFuZ2UuJyArIGZpZWxkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVRvU2VydmVyKGZpZWxkKSB7ICAgICAgICBcclxuICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShjdXJyZW50U2V0dGluZ3MpICE9IEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTZXR0aW5ncyA9IGN1cnJlbnQ7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgd2luZG93LmFnUmVxdWVzdC5QT1NUKCcvc2VydmljZXMvYWdvcmFDbGllbnQuYXNoeCcsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiAnU0VUJyB9LCBjdXJyZW50KSk7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlbmRlckxhbmd1YWdlU2VsZWN0b3IoKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBuZXcgYygnc3BhbicpO1xyXG4gICAgICAgIHZhciBsb2NhdGlvbkVsZW1lbnQgPSBlbGVtZW50Lm4oJ3NwYW4nKTsgICAgICAgIFxyXG4gICAgICAgIHZhciBsb2NhdGlvbkZsYWc7XHJcbiAgICAgICAgdmFyIGxhbmd1YWdlRWxlbWVudDtcclxuICAgICAgICBmdW5jdGlvbiByZW5kZXJMYW5ndWFnZUVsZW1lbnQobGFuZ3VhZ2VzKSB7ICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlbmRlckNob2ljZUxpc3QobGFuZ3VhZ2VFbGVtZW50LCAnTGFuZ3VhZ2UnLCAnbGFuZ3VhZ2UnLCBsYW5ndWFnZXMsIGZ1bmN0aW9uIChpdGVtRWxlbWVudCwgc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbUVsZW1lbnQuaChzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsKTtcclxuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2VJdGVtPyhzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsKTonJztcclxuICAgICAgICAgICAgfSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlckNob2ljZUxpc3QobG9jYXRpb25FbGVtZW50LCAnTG9jYXRpb24nLCdjb2RlJywgbGFuZ3VhZ2VTb3VyY2VzLnByZXNldHMsIGZ1bmN0aW9uIChpdGVtRWxlbWVudCwgc291cmNlSXRlbSkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpdGVtRWxlbWVudC5uKCdpJykuYSgnY2xhc3MnLCBnZXRGbGFnQ3NzQ2xhc3Moc291cmNlSXRlbS5jb2RlKSk7XHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50Lm4oJ2InKS5oKHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWwpO1xyXG5cclxuICAgICAgICB9LCBmdW5jdGlvbiAoc291cmNlSXRlbSxpc0V2ZW50KSB7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uRmxhZy5hKCdjbGFzcycsIGdldEZsYWdDc3NDbGFzcyhzb3VyY2VJdGVtLmNvZGUpKTtcclxuICAgICAgICAgICAgcmVuZGVyTGFuZ3VhZ2VFbGVtZW50KGxhbmd1YWdlU291cmNlcy5sYW5ndWFnZXMuZmlsdGVyKGZ1bmN0aW9uIChsYW5ndWFnZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc291cmNlSXRlbS5sYW5ndWFnZSkgPyBzb3VyY2VJdGVtLmxhbmd1YWdlLmluZGV4T2YobGFuZ3VhZ2UuY29kZSkgPiAtMSA6IGxhbmd1YWdlLmNvZGUgPT0gc291cmNlSXRlbS5sYW5ndWFnZTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICBpZiAoIWlzRXZlbnQpXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUnLCB7IGRldGFpbDogc291cmNlSXRlbSB9KSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvY2F0aW9uRmxhZyA9IGxvY2F0aW9uRWxlbWVudC5uKCdpJyk7XHJcblxyXG4gICAgICAgIGxhbmd1YWdlRWxlbWVudCA9IGVsZW1lbnQubignc3BhbicpOyAgICAgXHJcblxyXG4gICAgICAgIHJlbmRlckxhbmd1YWdlRWxlbWVudChsYW5ndWFnZVNvdXJjZXMubGFuZ3VhZ2VzKTtcclxuXHJcbiAgICAgICAgdmFyIGN1cnJlbmN5RWxlbWVudCA9IGVsZW1lbnQubignc3BhbicpO1xyXG4gICAgICAgIHJlbmRlckNob2ljZUxpc3QoY3VycmVuY3lFbGVtZW50LCAnQ3VycmVuY3knLCAnY3VycmVuY3knLCBsYW5ndWFnZVNvdXJjZXMuY3VycmVuY2llcywgZnVuY3Rpb24gKGl0ZW1FbGVtZW50LCBzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50Lmgoc291cmNlSXRlbS5sb2NhbExhYmVsID8gc291cmNlSXRlbS5sb2NhbExhYmVsIDogc291cmNlSXRlbS5sYWJlbCk7XHJcbiAgICAgICAgfSwgZnVuY3Rpb24gKHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWw7XHJcbiAgICAgICAgfSk7ICBcclxuXHJcbiAgICAgICAgdmFyIHByb3BlcnR5TWVzc3VyZW1lbnRFbGVtZW50ID0gZWxlbWVudC5uKCdzcGFuJyk7XHJcbiAgICAgICAgcmVuZGVyQ2hvaWNlTGlzdChwcm9wZXJ0eU1lc3N1cmVtZW50RWxlbWVudCwgJ1Byb3BlcnR5IE1lc3N1cmVtZW50JywgJ21lc3N1cmVtZW50JywgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRzLCBmdW5jdGlvbiAoaXRlbUVsZW1lbnQsIHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgaXRlbUVsZW1lbnQuaChzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsKTtcclxuICAgICAgICB9LCBmdW5jdGlvbiAoc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc291cmNlSXRlbS5sb2NhbExhYmVsID8gc291cmNlSXRlbS5sb2NhbExhYmVsIDogc291cmNlSXRlbS5sYWJlbDtcclxuICAgICAgICB9KTsgIFxyXG5cclxuICAgICAgICB2YXIgZGlzdGFuY2VNZXNzdXJlbWVudEVsZW1lbnQgPSBlbGVtZW50Lm4oJ3NwYW4nKTtcclxuICAgICAgICByZW5kZXJDaG9pY2VMaXN0KGRpc3RhbmNlTWVzc3VyZW1lbnRFbGVtZW50LCAnRGlzdGFuY2UgTWVzc3VyZW1lbnQnLCAnbWVzc3VyZW1lbnQnLCBsYW5ndWFnZVNvdXJjZXMudW5pdHMsIGZ1bmN0aW9uIChpdGVtRWxlbWVudCwgc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICBpdGVtRWxlbWVudC5oKHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWwpO1xyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsO1xyXG4gICAgICAgIH0pOyAgICAgICAgICBcclxuXHJcbiAgICAgICAgZWxlbWVudC5ub2RlLnNldEF0dHJpYnV0ZSgnYWctbGFuZ3VhZ2Utc2VsZWN0JywnJyk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50Lm5vZGUpO1xyXG5cclxuICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50Py5jb2RlKVxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUnLCB7IGRldGFpbDogY3VycmVudCB9KSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnMgPSB7fTtcclxuXHJcbiAgICBmdW5jdGlvbiByZW5kZXJDaG9pY2VMaXN0KGl0ZW0sIHRpdGxlLCBmaWVsZCwgc291cmNlLCByZW5kZXJJdGVtLCBzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICB2YXIgZmllbGRLZXkgPSB0aXRsZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teQS16MC05XS9naSwgJycpO1xyXG4gICAgICAgIHZhciByZW5kZXJFeGlzdCA9IHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ2l0ZW1MaXN0JyArIGZpZWxkS2V5XSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICBpZiAoIXJlbmRlckV4aXN0KVxyXG4gICAgICAgICAgICBpdGVtLmgodGl0bGUpO1xyXG4gICAgICAgIHZhciBpdGVtTGlzdCA9IHJlbmRlckV4aXN0ID8gcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3QnICsgZmllbGRLZXldIDogKHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ2l0ZW1MaXN0JyArIGZpZWxkS2V5XSA9IGl0ZW0ubignc3BhbicpKTtcclxuICAgICAgICB2YXIgaXRlbUxpc3RWYWx1ZSA9IHJlbmRlckV4aXN0ID8gcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3RWYWx1ZScgKyBmaWVsZEtleV0gOiAocmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3RWYWx1ZScgKyBmaWVsZEtleV0gPSBpdGVtTGlzdC5uKCdsYWJlbCcpKTtcclxuICAgICAgICBpdGVtTGlzdFZhbHVlLmgoJ1NlbGVjdGVkIFZhbHVlJyk7XHJcbiAgICAgICAgaWYgKCFyZW5kZXJFeGlzdCkge1xyXG4gICAgICAgICAgICB2YXIgaXRlbUNsaWNrRnVuY3Rpb24gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHNlbGVjdG9yRWxlbWVudC5ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5hY3RpdmUnKT8uZm9yRWFjaChmdW5jdGlvbiAoYWN0aXZlSXRlbSkgeyBpZiAoYWN0aXZlSXRlbSAhPSBpdGVtTGlzdFZhbHVlLm5vZGUpIGFjdGl2ZUl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1MaXN0VmFsdWUubm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSBpdGVtTGlzdFZhbHVlLm5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGl0ZW1MaXN0VmFsdWUubm9kZS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaXRlbUxpc3RWYWx1ZS5jbChpdGVtQ2xpY2tGdW5jdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpdGVtT3B0aW9ucyA9IHJlbmRlckV4aXN0ID8gcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbU9wdGlvbnMnICsgZmllbGRLZXldIDogKHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ2l0ZW1PcHRpb25zJyArIGZpZWxkS2V5XSA9IGl0ZW1MaXN0Lm4oJ3NwYW4nKSk7XHJcbiAgICAgICAgaXRlbU9wdGlvbnMuaCgnJyk7XHJcbiAgICAgICAgc291cmNlLm1hcChmdW5jdGlvbiAoc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICB2YXIgY2hvaWNlSXRlbSA9IGl0ZW1PcHRpb25zLm4oJ2xhYmVsJyk7XHJcbiAgICAgICAgICAgIGNob2ljZUl0ZW0uY2woZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaXRlbUxpc3RWYWx1ZS5ub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgc2V0KGZpZWxkLCBzb3VyY2VJdGVtLmNvZGUpO1xyXG4gICAgICAgICAgICAgICAgaXRlbUxpc3RWYWx1ZS5oKHNlbGVjdGVkSXRlbShzb3VyY2VJdGVtKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZW5kZXJJdGVtKGNob2ljZUl0ZW0sIHNvdXJjZUl0ZW0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQgIT0gJycpIHsgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIGlmICghcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snR2VuZXJhbCcgKyBmaWVsZEtleV0pIHtcclxuICAgICAgICAgICAgICAgIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ0dlbmVyYWwnICsgZmllbGRLZXldID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUuJyArIGZpZWxkS2V5LCB7IGRldGFpbDogZS5kZXRhaWwgfSkpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLnVwZGF0ZScsIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ0dlbmVyYWwnICsgZmllbGRLZXldKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFyZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydGaWVsZCcgKyBmaWVsZEtleV0pIHtcclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydGaWVsZCcgKyBmaWVsZEtleV0gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50SXRlbSA9IGUuZGV0YWlsO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBjdXJyZW50SXRlbVtmaWVsZF07ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSA/IGN1cnJlbnRWYWx1ZVswXSA6IGN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRJdGVtRnJvbVNvdXJjZSA9IHNvdXJjZS5maW5kKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmNvZGUgPT0gc2VsZWN0ZWRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldChmaWVsZCwgc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0VmFsdWUuaChzZWxlY3RlZEl0ZW0oc2VsZWN0ZWRJdGVtRnJvbVNvdXJjZSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYW5ndWFnZS51cGRhdGUuJyArIGZpZWxkS2V5LCByZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydGaWVsZCcgKyBmaWVsZEtleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjKG5hbWUpIHtcclxuICAgICAgICB0aGlzLm5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLmEgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLm5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLm4gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBpdGVtID0gbmV3IGMobmFtZSk7XHJcbiAgICAgICAgdGhpcy5ub2RlLmFwcGVuZENoaWxkKGl0ZW0ubm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9ICAgIFxyXG5cclxuICAgIGMucHJvdG90eXBlLmggPSBmdW5jdGlvbiAodGV4dCkgeyAgICAgICAgXHJcbiAgICAgICAgdGhpcy5ub2RlLmlubmVySFRNTCA9IHRleHQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUuY2wgPSBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYWN0aW9uKTtcclxuICAgICAgICB0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhY3Rpb24pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIEdFVChzZXJ2aWNlVXJsLCBkYXRhKSB7XHJcbiAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gJyc7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZyArICgocXVlcnlTdHJpbmcgIT0gJycgPyAnJicgOiAnJykgKyBrZXkgKyAnPScgKyBkYXRhW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXJ2aWNlVXJsICs9IHNlcnZpY2VVcmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycgKyBxdWVyeVN0cmluZztcclxuICAgICAgICB2YXIgcmVxdWVzdCA9IGF3YWl0IGZldGNoKHNlcnZpY2VVcmwsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBjYWNoZTogXCJuby1jYWNoZVwiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVxdWVzdC5qc29uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgd2luZG93LmFnTGFuZ3VhZ2UgPSB7XHJcbiAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS5yZWZyZXNoLmN1cnJlbmN5JykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgaW5pdCgpO1xyXG5cclxufSkoKTtcclxuXHJcblxyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnW2RhdGEtY2stcHJvcGVydHlsaXN0XSBbZGF0YS1zb3J0LW9iamVjdD1cIkNNTkNNTlwiXScsIHt9LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgR2V0UHJvcGVydGllcygkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWNrLXByb3BlcnR5bGlzdF06Zmlyc3QnKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eS11cmxdOmZpcnN0JykuZGF0YSgnY2stcHJvcGVydHktdXJsJyksICQodGhpcykucGFyZW50cygnW2RhdGEtY2stcHJvcGVydHlsaXN0XTpmaXJzdCcpLmRhdGEoJ2NrLWRlbWFuZC1rZXknKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eWxpc3RdOmZpcnN0JykuZGF0YSgnY2stZGVtYW5kLWxheW91dCcpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIEdldFByb3BlcnRpZXMoJHRoaXMsIHVybCwgZGVtYW5kS2V5LCBsYXlvdXQpIHtcclxuICAgICAgICB2YXIgaXNFZGl0TW9kZSA9ICR0aGlzLmNsb3Nlc3QoJ2Rpdltjb250ZW50ZWRpdGFibGVdJykuYXR0cignY29udGVudGVkaXRhYmxlJyk7XHJcbiAgICAgICAgaWYgKCFpc0VkaXRNb2RlICYmIHR5cGVvZiAodXJsKSAhPSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgKGRlbWFuZEtleSkgIT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgLy9TaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICBsYXlvdXQgPSAodHlwZW9mIChsYXlvdXQpICE9ICd1bmRlZmluZWQnID8gbGF5b3V0IDogXCJnYWxsZXJ5XCIpO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGxheW91dC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZ2FsbGVyeVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciAkc29ydCA9ICR0aGlzLmZpbmQoJ1tkYXRhLXNvcnQtb2JqZWN0PVwiQ01OQ01OXCJdJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgkc29ydCAhPSAndW5kZWZpbmVkJyAmJiAkc29ydCAhPSBudWxsICYmICRzb3J0Lmxlbmd0aCA+IDApIHx8ICF1cmwubWF0Y2goLyhefFxcLykoZCk/c29ydFxcLVthLXpdKy9nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gKF9nZXRDTU5DTU5Tb3J0QnkoJHRoaXMpICsgJy8nICsgKHVybC5yZXBsYWNlKCdodHRwOi8vJywgJycpLnJlcGxhY2UoLyhefFxcLykoZCk/c29ydFxcLVthLXpdKy9nLCAnJykpKS5yZXBsYWNlKCcvLycsICcvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvc2VydmljZXMvTUFYL2Fnb3JhR2V0R2FsbGVyeVZpZXcuYXNweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgVXJsUXVlcnk6IHVybCwgVHlwZU9mU2VhcmNoOiAnU0FMRScsIElzQ29udGVudFBhZ2U6IFwidHJ1ZVwiLCBEZW1hbmRLZXk6IGRlbWFuZEtleSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2h0bWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0VkaXRNb2RlID0gJHRoaXMuY2xvc2VzdCgnZGl2W2NvbnRlbnRlZGl0YWJsZV0nKS5hdHRyKCdjb250ZW50ZWRpdGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFZGl0TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkaHRtbCA9ICc8c2VjdGlvbiBjbGFzcz1cInJlc3VsdC1wYWdlXCIgZGF0YS1jay1wcm9wZXJ0eWxpc3Q9XCJcIiBkYXRhLWNrLWRlbWFuZC1rZXk9XCInICsgZGVtYW5kS2V5ICsgJ1wiIGRhdGEtY2stcHJvcGVydHktdXJsPVwiJyArIHVybCArICdcIiBkYXRhLWNrLWRlbWFuZC1sYXlvdXQ9XCInICsgbGF5b3V0ICsgJ1wiPicgKyByZXNwb25zZSArICc8L3NlY3Rpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5hZnRlcigkaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodHlwZW9mIChjb21wb25lbnRIYW5kbGVyKSA9PSAndW5kZWZpbmVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SGFuZGxlci51cGdyYWRlRG9tKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ1tkYXRhLWNrLWRlbWFuZC1rZXk9XCInICsgZGVtYW5kS2V5ICsgJ1wiXSAjcHJvcGVydHlHcmlkJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnByb3BlcnR5Om5vdCguaW5pdCknKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFByb3BlcnR5SW1hZ2VHYWxsZXJ5KCQodGhpcykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWdMYXp5LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJjYXJvdXNlbFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnL3NlcnZpY2VzL2Fnb3JhR2V0Q2Fyb3VzZWxJdGVtLmFzcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IFVybFF1ZXJ5OiB1cmwsIFR5cGVPZlNlYXJjaDogJ1NBTEUnLCBJc0NvbnRlbnRQYWdlOiBcInRydWVcIiwgRGVtYW5kS2V5OiBkZW1hbmRLZXkgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdodG1sJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNFZGl0TW9kZSA9ICR0aGlzLmNsb3Nlc3QoJ2Rpdltjb250ZW50ZWRpdGFibGVdJykuYXR0cignY29udGVudGVkaXRhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGh0bWwgPSAnPHNlY3Rpb24gY2xhc3M9XCJyZXN1bHQtcGFnZVwiIGRhdGEtY2stcHJvcGVydHlsaXN0PVwiXCIgZGF0YS1jay1kZW1hbmQta2V5PVwiJyArIGRlbWFuZEtleSArICdcIiBkYXRhLWNrLXByb3BlcnR5LXVybD1cIicgKyB1cmwgKyAnXCIgZGF0YS1jay1kZW1hbmQtbGF5b3V0PVwiJyArIGxheW91dCArICdcIj4nICsgcmVzcG9uc2UgKyAnPC9zZWN0aW9uPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuYWZ0ZXIoJGh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ1tkYXRhLXF1ZXJ5LWxpc3RdOm5vdCguaW5pdClbZGF0YS1zZXJ2aWNlLXVybF1bZGF0YS1ydF49XCJDTU5cIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS50cmlnZ2VyKCdpbml0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2luaXQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0eXBlb2YgKGNvbXBvbmVudEhhbmRsZXIpID09ICd1bmRlZmluZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRIYW5kbGVyLnVwZ3JhZGVEb20oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gX2dldENNTkNNTlNvcnRCeSgkcGFyZW50KSB7XHJcbiAgICAgICAgdmFyICRzb3J0ID0gJHBhcmVudC5maW5kKCdbZGF0YS1zb3J0LW9iamVjdD1cIkNNTkNNTlwiXScpO1xyXG4gICAgICAgIGlmICgkc29ydCAhPSAndW5kZWZpbmVkJyAmJiAkc29ydCAhPSBudWxsICYmICRzb3J0Lmxlbmd0aCA+IDAgJiYgSXNOb3ROdWxsKCRzb3J0LnZhbCgpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJHNvcnQudmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBHZXREZWZhdWx0U29ydEZvclJlY29yZFR5cGUoJ1BST1BFUlRZJyk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gR2V0UHJvcGVydHlJbWFnZUdhbGxlcnkoJHRoaXMpIHtcclxuICAgIHZhciAkaXRlbUNvbnRleHQgPSAkdGhpcztcclxuICAgIHZhciAkc2xpZGVDb250ZXh0ID0gJGl0ZW1Db250ZXh0LmZpbmQoJy5zbGlkZXMnKTtcclxuICAgICRzbGlkZUNvbnRleHQuYXR0cignZGF0YS1jc3Mtc2xpZGVyJywgJzAnKTtcclxuICAgIHZhciBtbHNOdW1iZXIgPSAkaXRlbUNvbnRleHQuZmluZCgnW2RhdGEtbWtdJykuZGF0YSgnbWsnKTtcclxuICAgIHZhciBtbHNCb2FyZCA9ICRpdGVtQ29udGV4dC5maW5kKCdbZGF0YS1tbHNib2FyZF0nKS5kYXRhKCdtbHNib2FyZCcpO1xyXG4gICAgdmFyIHVybCA9ICRpdGVtQ29udGV4dC5maW5kKCdbZGF0YS1kZXRhaWwtdXJsXScpLmRhdGEoJ2RldGFpbC11cmwnKTtcclxuICAgIHZhciBwcm9qZWN0Q29kZSA9ICQoJ1tkYXRhLXBjb2RlXScpLmRhdGEoJ3Bjb2RlJyk7XHJcbiAgICB2YXIgaW1hZ2VUZW1wbGF0ZSA9ICRpdGVtQ29udGV4dC5maW5kKCdbZGF0YS1tbHMtcGhvdG9dJykuZGF0YSgnbWxzLXBob3RvJyk7XHJcbiAgICB2YXIgbmF0aXZlVGFiID0gJGl0ZW1Db250ZXh0LmZpbmQoJ1tkYXRhLW5hdGl2ZS10YWJdJykuZGF0YSgnbmF0aXZlLXRhYicpO1xyXG4gICAgaWYgKCFJc05vdE51bGwoaW1hZ2VUZW1wbGF0ZSkpIGltYWdlVGVtcGxhdGUgPSAnL2ltYWdlcy9jb21wYW55LycgKyBwcm9qZWN0Q29kZSArICcvTm9QaG90b0ltYWdlL2ltYWdlLW5vdC1mb3VuZC5qcGcnO1xyXG4gICAgdmFyIGNvdW50ID0gcGFyc2VJbnQoJHNsaWRlQ29udGV4dC5kYXRhKCd2YWx1ZScpLCAxMCk7XHJcbiAgICB2YXIgJGl0ZW1XaXRoSURDb250ZXh0ID0gJGl0ZW1Db250ZXh0LmNsb3Nlc3QoJ1tpZF0nKTtcclxuICAgIHZhciB1SUQgPSAkaXRlbUNvbnRleHQubGVuZ3RoID09IDAgPyBcInVuXCIgOiAkaXRlbVdpdGhJRENvbnRleHQuYXR0cignaWQnKS5yZXBsYWNlKC9cXCQvZ2ksICcnKTtcclxuICAgIGJ1aWxkRmlyc3RUZW1wbGF0ZShpbWFnZVRlbXBsYXRlLCBjb3VudCwgdUlEICsgbmV3IERhdGUoKS5nZXRNaWxsaXNlY29uZHMoKSwgbWxzQm9hcmQsIG1sc051bWJlciwgJHNsaWRlQ29udGV4dCwgdXJsLCBuYXRpdmVUYWIpO1xyXG4gICAgJGl0ZW1Db250ZXh0LmFkZENsYXNzKCdpbml0Jyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJ1aWxkRmlyc3RUZW1wbGF0ZSh0ZW1wbGF0ZSwgY291bnQsIHVJRCwgbWxzQm9hcmQsIG1sc051bWJlciwgJHNsaWRlQ29udGV4dCwgdXJsLCBuYXRpdmVUYWIpIHtcclxuICAgIHZhciBpID0gMCwgcHJlZml4ID0gKHVJRCArIG1sc0JvYXJkICsgbWxzTnVtYmVyICsgJ18nKTtcclxuICAgICQoJzxpbnB1dCB0eXBlPVwicmFkaW9cIiBhcmlhLWxhYmVsPVwiJyArIChwcmVmaXggKyAnc2xpZGVyJykgKyAnXCIgIG5hbWU9XCInICsgKHByZWZpeCArICdzbGlkZXInKSArICdcIiBpZD1cIicgKyAocHJlZml4ICsgaSkgKyAnXCIgY2hlY2tlZCAvPicpLmFwcGVuZFRvKCRzbGlkZUNvbnRleHQpO1xyXG4gICAgdmFyICRuYXZpZ2F0aW9ucyA9ICQoJzxkaXYgY2xhc3M9XCJuYXZcIj48L2Rpdj4nKTtcclxuICAgIC8vdmFyICRuZXh0ID0gJCgnPGxhYmVsIGRhdGEtY3NzLXNsaWRlci1uYXY9XCJwcm9wcGhvdG9cIiBmb3I9XCInICsgKHByZWZpeCArIChpICsgMSkpICsgJ1wiIGNsYXNzPVwibmV4dFwiPjwvbGFiZWw+Jyk7XHJcbiAgICAvL3ZhciAkcHJldiA9ICQoJzxsYWJlbCBkYXRhLWNzcy1zbGlkZXItbmF2PVwicHJvcHBob3RvXCIgZm9yPVwiJyArIChwcmVmaXggKyAocGFyc2VJbnQoY291bnQsIDEwKSAtIDEpKSArICdcIiBjbGFzcz1cInByZXZcIj48L2xhYmVsPicpO1xyXG4gICAgdmFyICRuZXh0ID0gJCgnPGxhYmVsIGFyaWEtbGFiZWw9XCJuZXh0XCIgYXJpYS1jb250cm9scz1cIm15Q2Fyb3VzZWwtaXRlbXNcIiBkYXRhLWNzcy1zbGlkZXItbmF2PVwicHJvcHBob3RvXCIgZm9yPVwiJyArIChwcmVmaXggKyAoaSArIDEpKSArICdcIiAgY2xhc3M9XCJuZXh0XCI+PHNwYW4gYXJpYS1sYWJlbD1cIm5leHRcIiBjbGFzcz1cInZpc3VhbGx5aGlkZGVuXCI+bmV4dDwvc3Bhbj48L2xhYmVsPicpO1xyXG4gICAgdmFyICRwcmV2ID0gJCgnPGxhYmVsIGFyaWEtbGFiZWw9XCJwcmV2XCIgYXJpYS1jb250cm9scz1cIm15Q2Fyb3VzZWwtaXRlbXNcIiBkYXRhLWNzcy1zbGlkZXItbmF2PVwicHJvcHBob3RvXCIgZm9yPVwiJyArIChwcmVmaXggKyAocGFyc2VJbnQoY291bnQsIDEwKSAtIDEpKSArICdcIiBjbGFzcz1cInByZXZcIj48c3BhbiBhcmlhLWxhYmVsPVwicHJldlwiIGNsYXNzPVwidmlzdWFsbHloaWRkZW5cIj5wcmV2PC9zcGFuPjwvbGFiZWw+Jyk7XHJcbiAgICAkcHJldi5vbignY2xpY2snLCBfbG9hZE1vcmUpO1xyXG4gICAgJG5leHQub24oJ2NsaWNrJywgX2xvYWRNb3JlKTtcclxuICAgICRwcmV2LmFwcGVuZFRvKCRuYXZpZ2F0aW9ucyk7XHJcbiAgICAkbmV4dC5hcHBlbmRUbygkbmF2aWdhdGlvbnMpO1xyXG4gICAgaWYgKCQoJ1tkYXRhLXBjb2RlXScpLmRhdGEoJ3Bjb2RlJykgPT0gJ1BTQicpIHsgdmFyIHRhcmdldCA9ICcnOyB9IGVsc2UgeyB2YXIgdGFyZ2V0ID0gJ3RhcmdldCA9IFwiX2JsYW5rXCInOyB9XHJcbiAgICBpZiAobmF0aXZlVGFiICE9ICd1bmRlZmluZWQnICYmIG5hdGl2ZVRhYiAhPSAnJyAmJiBuYXRpdmVUYWIgPT0gMSlcclxuICAgICAgICB0YXJnZXQgPSAnJztcclxuICAgIHZhciAkbm9kZSA9ICQoJzxsaSBjbGFzcz1cInNsaWRlLWNvbnRhaW5lclwiIGFyaWEtcm9sZWRlc2NyaXB0aW9uPVwiY2Fyb3VzZWxcIiByb2xlPVwiY29udGVudGluZm9cIj48ZGl2IGNsYXNzPVwic2xpZGVcIj48ZGl2IGNsYXNzPVwiUHJvcF9pbWdcIiByb2xlPVwiaW1nXCIgYXJpYS1sYWJlbD1cImJhbm5lckltYWdlXCIgIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTp1cmwoXFwnJyArIHRlbXBsYXRlICsgJ1xcJyk7XCI+PGEgYXJpYS1sYWJlbD1cIicgKyAocHJlZml4ICsgJ3NsaWRlcicpICsgJ1wiJyArIHRhcmdldCArICdocmVmPVwiJyArIHVybCArICdcIj48L2E+PC9kaXY+PC9kaXY+PC9saT4nKTtcclxuICAgICRub2RlLmFwcGVuZCgkbmF2aWdhdGlvbnMpO1xyXG4gICAgJG5vZGUuYXBwZW5kVG8oJHNsaWRlQ29udGV4dCk7XHJcbiAgICBmdW5jdGlvbiBfbG9hZE1vcmUoKSB7XHJcbiAgICAgICAgdmFyICRzZW5kZXIgPSAkKHRoaXMpO1xyXG4gICAgICAgICRwcmV2Lm9mZignY2xpY2snKTtcclxuICAgICAgICAkbmV4dC5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJC5hamF4KHsgdXJsOiAnL3NlcnZpY2VzL2Fnb3JhUHJvcGVydHlQaG90b3MuYXNweCcsIGRhdGE6IHsgbWxzYm9hcmQ6IG1sc0JvYXJkLCBtbHNubzogbWxzTnVtYmVyLCBjb250YWluZXI6IHByZWZpeCB9LCBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHsgJHNsaWRlQ29udGV4dC5hcHBlbmQocmVzcG9uc2UpOyAkc2VuZGVyLnRyaWdnZXIoJ2NsaWNrJyk7IH0gfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIEFEQSBDb21wbGFpbmNlcyAvLyBjYW5jZWwgYnV0dG9uIHdvcmtpbmdcclxuJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIltkYXRhLWZvcl1cIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdmFyIF9mb3IgPSAkKHRoaXMpLmRhdGEoJ2ZvcicpO1xyXG4gICAgICAgICQoJ1tmb3I9XCInICsgX2ZvciArICdcIl0nKS50cmlnZ2VyKFwiY2xpY2tcIik7XHJcbiAgICB9IGNhdGNoIChlKSB7IH1cclxufSk7XHJcbi8vIEVORFxyXG5cclxuKGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgaXNTeW5jZWQgPSBmYWxzZTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnVzZXIuaW4nLCBmdW5jdGlvbiAoZSkge1xyXG5cclxuICAgICAgICBzZXQoZS5kZXRhaWwpO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcudXNlci5vdXQnLCBmdW5jdGlvbiAoZSkge1xyXG5cclxuICAgICAgICBzZXQobnVsbCk7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0KCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gbnVsbDtcclxuICAgICAgICBpZiAod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdBR1VTRVInKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBKU09OLnBhcnNlKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQUdVU0VSJykpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHNldCh1c2VyKSB7XHJcbiAgICAgICAgaWYgKHVzZXIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ0FHVVNFUicpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy51c2VyLmNsZWFyJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHVzZXIuR3VpZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxvY2FsVXNlciA9IHt9O1xyXG4gICAgICAgICAgICAgICAgbG9jYWxVc2VyLkd1aWQgPSB1c2VyLkd1aWQ7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFVzZXIuTmFtZSA9IHVzZXIuTmFtZTtcclxuICAgICAgICAgICAgICAgIGxvY2FsVXNlci5GaXJzdE5hbWUgPSB1c2VyLkZpcnN0TmFtZTtcclxuICAgICAgICAgICAgICAgIGxvY2FsVXNlci5MYXN0TmFtZSA9IHVzZXIuTGFzdE5hbWU7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFVzZXIuRW1haWwgPSB1c2VyLkVtYWlsO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxVc2VyLlBob25lID0gdXNlci5QaG9uZTtcclxuICAgICAgICAgICAgICAgIGxvY2FsVXNlci5Nb2JpbGVQaG9uZSA9IHVzZXIuTW9iaWxlUGhvbmU7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0FHVVNFUicsIEpTT04uc3RyaW5naWZ5KGxvY2FsVXNlcikpO1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZW5kZXIoKSB7ICAgICAgICBcclxuICAgICAgICB2YXIgdXNlclN0YXRlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy11c2VyXScpO1xyXG4gICAgICAgIHVzZXJTdGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgeyByZW5kZXJTdGF0ZXMoaXRlbSk7IH0pOyBcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZW5kZXJTdGF0ZXMoaXRlbSkge1xyXG5cclxuICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoJ2lzLWFwcGxpZWQnKTsgICAgICAgIFxyXG4gICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBpdGVtLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICB2YXIgY3VycmVudCA9IGF3YWl0IGdldCgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaW5pdFByb3BlcnR5Q29sbGVjdGlvbigpO1xyXG4gICAgICAgICAgICB2YXIgbG9nZ2luZWROb2RlID0gYXdhaXQgZ2V0TG9naW5lZEl0ZW0oY3VycmVudCk7XHJcbiAgICAgICAgICAgIGl0ZW0ucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUobG9nZ2luZWROb2RlLCBpdGVtKTtcclxuICAgICAgICAgICAgaXRlbS5yZW1vdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gaW5pdFByb3BlcnR5Q29sbGVjdGlvbigpIHsgICAgICAgIFxyXG4gICAgICAgIGlmIChpc1N5bmNlZCkge1xyXG4gICAgICAgICAgICB1cGRhdGVQcm9wZXJ0eUNvbGxlY3Rpb24oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnN5bmMudmVyaWZpZWQuY29udGFjdCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnR5Q29sbGVjdGlvbigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYXp5LnJlZnJlc2gnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVByb3BlcnR5Q29sbGVjdGlvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcudXNlci5yZWZyZXNoLmNvbGxlY3Rpb24nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVByb3BlcnR5Q29sbGVjdGlvbih0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnVzZXIuY2xlYXIuY29sbGVjdGlvbicsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdBR1VTRVJDT0xMRUNUSU9OMycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcudXNlci5jbGVhcicsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcudXNlci5jbGVhci5jb2xsZWN0aW9uJykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5Q29sbGVjdGlvbihpc0ZvcmNlZCkge1xyXG4gICAgICAgIHZhciBjb2xsZWN0aW9uVHlwZSA9IDM7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gYXdhaXQgZ2V0UHJvcGVydHlDb2xsZWN0aW9uKGNvbGxlY3Rpb25UeXBlLCBpc0ZvcmNlZCk7XHJcbiAgICAgICAgdmFyIGl0ZW1zRXh0cmFjdGVkID0gaXRlbXMuSXRlbXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IFsuLi5yZXN1bHQsIC4uLmN1cnJlbnQuSXRlbXNdIDogWy4uLmN1cnJlbnQuSXRlbXNdO1xyXG4gICAgICAgIH0sIFtdKTtcclxuICAgICAgICBpdGVtc0V4dHJhY3RlZC5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHJlbmRlclByb3BlcnR5Q29sbGVjdGlvbkl0ZW0oaXRlbSwgY29sbGVjdGlvblR5cGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlbmRlclByb3BlcnR5Q29sbGVjdGlvbkl0ZW0oaXRlbSx0eXBlKSB7XHJcbiAgICAgICAgdmFyIGl0ZW1Eb20gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1wZXJmb3JtLWFjdGlvbi11cmwqPVwicGs9JyArIGl0ZW0uUEsgKyAnXCJdW2RhdGEtcGVyZm9ybS1hY3Rpb24tdXJsKj1cInJ0PScgKyBpdGVtLlJUICsgJ1wiXScpOyAgICAgICAgXHJcbiAgICAgICAgaXRlbURvbS5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uKGRvbSkge1xyXG4gICAgICAgICAgICBkb20uc2V0QXR0cmlidXRlKCdhZy11c2VyLWNvbGxlY3Rpb24nLCB0eXBlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRQcm9wZXJ0eUNvbGxlY3Rpb24oY29sbGVjdGlvblR5cGUsIGlzRm9yY2VkKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5Q29sbGVjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eUNvbGxlY3Rpb25TdHJpbmcgPSBpc0ZvcmNlZCA/IG51bGwgOiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0FHVVNFUkNPTExFQ1RJT04nICsgY29sbGVjdGlvblR5cGUpO1xyXG4gICAgICAgICAgICBpZiAocHJvcGVydHlDb2xsZWN0aW9uU3RyaW5nICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5Q29sbGVjdGlvbiA9IEpTT04ucGFyc2UocHJvcGVydHlDb2xsZWN0aW9uU3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocHJvcGVydHlDb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcm9wZXJ0eUNvbGxlY3Rpb24gPSBhd2FpdCB3aW5kb3cuYWdSZXF1ZXN0LkdFVCgnL3NlcnZpY2VzL2Fnb3JhQ2xpZW50LmFzaHgnLCB7IHR5cGU6ICdVU0VSQ09MTEVDVElPTicsIGNvbGxlY3Rpb25UeXBlOiBjb2xsZWN0aW9uVHlwZSB9KTtcclxuICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdBR1VTRVJDT0xMRUNUSU9OJyArIGNvbGxlY3Rpb25UeXBlLCBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eUNvbGxlY3Rpb24pKTtcclxuICAgICAgICAgICAgcmVzb2x2ZShwcm9wZXJ0eUNvbGxlY3Rpb24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRMb2dpbmVkSXRlbShjb250YWN0KSB7XHJcbiAgICAgICAgdmFyIHdyYXBwZXIgPSBuZXcgYygncCcpO1xyXG4gICAgICAgIHdyYXBwZXIuYSgnYWctdXNlcicsJycpO1xyXG4gICAgICAgIHZhciB1c2VyQ29udGFpbmVyID0gd3JhcHBlci5uKCdidXR0b24nKTtcclxuICAgICAgICB1c2VyQ29udGFpbmVyLmEoJ2NsYXNzJywgJ3VzZXItbG9nZ2VkLWluIGEtYi0xIGYtcy0yIHUtbG9naW5lZCBzLWMtcCBtLWwtMTYgeGEtYi13LWwgci1iJyk7XHJcbiAgICAgICAgdXNlckNvbnRhaW5lci5oKGNvbnRhY3QuTmFtZSk7XHJcbiAgICAgICAgdXNlckNvbnRhaW5lci5jbChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGlmICh1c2VyQ29udGFpbmVyLm5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSkge1xyXG4gICAgICAgICAgICAgICAgdXNlckNvbnRhaW5lci5ub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXNlckNvbnRhaW5lci5ub2RlLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHdyYXBwZXIubignc3BhbicpO1xyXG4gICAgICAgIG9wdGlvbnMubignc3BhbicpLmgoJ0hpLCAnICsgY29udGFjdC5OYW1lKTtcclxuICAgICAgICBvcHRpb25zLm4oJ2lucHV0JykuYSgndHlwZScsICdoaWRkZW4nKS5hKCdpZCcsICdDT05UQUNUX0dVSUQnKS5hKCd2YWx1ZScsIGNvbnRhY3QuR3VpZCk7XHJcbiAgICAgICAgb3B0aW9ucy5uKCdhJykuYSgnaHJlZicsICcvZGFzaGJvYXJkL2RlZmF1bHQuYXNweCcpLmgoJ0Rhc2hib2FyZCcpO1xyXG4gICAgICAgIG9wdGlvbnMubignc3BhbicpLmEoJ2RhdGEtbW9kYWxkaWFsb2ctc3JjJywgJy9kYXNoYm9hcmQvRWRpdFByb2ZpbGUuYXNweCcpLmEoJ2RhdGEtbW9kYWxkaWFsb2ctYWpheCcsICd0cnVlJykuYSgnZGF0YS1tb2RhbGRpYWxvZycsJycpLmgoJ0VkaXQgUHJvZmlsZScpO1xyXG4gICAgICAgIG9wdGlvbnMubignYScpLmEoJ2hyZWYnLCAnL2Rhc2hib2FyZC9TaWduT3V0LmFzcHgnKS5hKCdkYXRhLWFnb3JhLWljb24nLCAn7qSxJykuaCgnTG9nIG91dCcpLmNsKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcudXNlci5vdXQnKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHdyYXBwZXIubm9kZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjKG5hbWUpIHtcclxuICAgICAgICB0aGlzLm5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLmEgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLm5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLm4gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBpdGVtID0gbmV3IGMobmFtZSk7XHJcbiAgICAgICAgdGhpcy5ub2RlLmFwcGVuZENoaWxkKGl0ZW0ubm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUuaCA9IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5ub2RlLmlubmVySFRNTCA9IHRleHQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUuY2wgPSBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYWN0aW9uKTtcclxuICAgICAgICB0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhY3Rpb24pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XHJcbiAgICAgICAgcmVuZGVyKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5zeW5jLmNoZWNrJywgYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IGF3YWl0IGdldCgpO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFZhbHVlc1N0cmluZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQUdTWU5DJyk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWVzU3RyaW5nICE9IG51bGwgJiYgY3VycmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gSlNPTi5wYXJzZShjdXJyZW50VmFsdWVzU3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUuQ29udGFjdEd1aWQgIT0gY3VycmVudC5HdWlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy5zZXQnLCB7IGRldGFpbDogeyBjb250YWN0Z3VpZDogY3VycmVudC5HdWlkLCBldmVudFR5cGU6ICdjb250YWN0JyB9IH0pKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy52ZXJpZmllZC5jb250YWN0JykpO1xyXG4gICAgICAgICAgICBpc1N5bmNlZCA9IHRydWU7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcuc3luYy52ZXJpZmllZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy52ZXJpZmllZC5jb250YWN0JykpO1xyXG4gICAgICAgICAgICBpc1N5bmNlZCA9IHRydWU7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgd2luZG93LmFnVXNlciA9IHtcclxuICAgICAgICBjb2xsZWN0aW9uOiB7XHJcbiAgICAgICAgICAgIHJlZnJlc2g6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnVzZXIucmVmcmVzaC5jb2xsZWN0aW9uJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpbml0KCk7XHJcblxyXG59KSgpO1xyXG5cclxuKGFzeW5jIGZ1bmN0aW9uICgpIHsgICAgXHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JTeW5jKCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50VmFsdWVzU3RyaW5nID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdBR1NZTkMnKTtcclxuICAgICAgICBpZiAoY3VycmVudFZhbHVlc1N0cmluZyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBKU09OLnBhcnNlKGN1cnJlbnRWYWx1ZXNTdHJpbmcpO1xyXG4gICAgICAgICAgICB2YXIgdXBkYXRlZE9uID0gbmV3IERhdGUoY3VycmVudFZhbHVlLnVwZGF0ZWRPbik7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50RGF0ZVRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBjdXJyZW50RGF0ZVRpbWUuc2V0TWludXRlcyhjdXJyZW50RGF0ZVRpbWUuZ2V0TWludXRlcygpIC0gMSk7XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGVkT24gPiBjdXJyZW50RGF0ZVRpbWUpIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnN5bmMudmVyaWZpZWQnKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICAgICAgICAgICAgICBcclxuICAgICAgICByZWFkRnJvbVNlcnZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlYWRGcm9tU2VydmVyKCkge1xyXG4gICAgICAgIHZhciBkYXRhVG9SZXZpZXcgPSBhd2FpdCB3aW5kb3cuYWdSZXF1ZXN0LkdFVCgnL3NlcnZpY2VzL2Fnb3JhQ2xpZW50LmFzaHgnLCB7IHR5cGU6ICdTWU5DJyB9KTtcclxuICAgICAgICBkYXRhVG9SZXZpZXcudXBkYXRlZE9uID0gbmV3IERhdGUoKTtcclxuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0FHU1lOQycsIEpTT04uc3RyaW5naWZ5KGRhdGFUb1JldmlldykpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnN5bmMuY2hlY2snKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gaW5pdCgpIHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnN5bmMuc2V0JywgYXN5bmMgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgYXdhaXQgd2luZG93LmFnUmVxdWVzdC5QT1NUKCcvc2VydmljZXMvYWdvcmFDbGllbnQuYXNoeCcsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiAnU0VUJyB9LCBlLmRldGFpbCkpO1xyXG4gICAgICAgICAgICBpZiAoZS5kZXRhaWw/LmV2ZW50VHlwZSlcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnN5bmMudmVyaWZpZWQuJyArIGUuZGV0YWlsLmV2ZW50VHlwZSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnN5bmMuaW52YWxpZCcsIGFzeW5jIGZ1bmN0aW9uIChlKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnN5bmMucmVzZXQnKSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2hlY2tGb3JTeW5jKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpO1xyXG59KSgpO1xyXG5cclxuXHJcblxyXG5cclxuIiwi77u/XHJcbi8vIEludGVyIHBvbGF0aW9uXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIHN5c3RlbUZ1bmN0aW9ucyA9IHt9O1xyXG5cclxuICAgIGZ1bmN0aW9uIEludGVycG9sYXRpb24oaHRtbCwgZG9tLCBjb250ZXh0LCBmdW5jdGlvbkFyZ3NMaXRlcmFscyA9IFtdLCBmdW5jdGlvbkFyZ3NWYWx1ZXMgPSBbXSwgcGFyZW50UmVuZGVyRnVuY3Rpb24gPSAoKSA9PiB7IH0pIHtcclxuICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoJ1xcXFx7XFxcXHtbXlxcXFx9XStcXFxcfVxcXFx9JywgJ2dpJyk7XHJcbiAgICAgICAgbGV0IHJlbmRlckZ1bmN0aW9ucyA9IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHBhcmVudFJlbmRlckZ1bmN0aW9uKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgdGVtcGxhdGVTdHJpbmcgPSAnJztcclxuXHJcbiAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlIG9mIGRvbS5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGRvbS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGJ1aWxkUmVuZGVyRnVuY3Rpb24odmFsdWUsIChjb250ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFuUHJlSW50ZXJwb2xhdGlvbihkb20pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRvbS5jaGlsZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcclxuICAgICAgICAgICAgICAgIEludGVycG9sYXRpb24oaHRtbCwgbm9kZSwgY29udGV4dCwgZnVuY3Rpb25BcmdzTGl0ZXJhbHMsIGZ1bmN0aW9uQXJnc1ZhbHVlcywgKCkgPT4geyB9KTtcclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZERvbSA9IG5vZGU7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgb2YgY2hpbGREb20uZ2V0QXR0cmlidXRlTmFtZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGNoaWxkRG9tLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUmVuZGVyRnVuY3Rpb24odmFsdWUsIChjb250ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERvbS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCBjb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUHJlSW50ZXJwb2xhdGlvbihjaGlsZERvbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gTm9kZS5URVhUX05PREUgJiYgbm9kZS50ZXh0Q29udGVudCAhPSBudWxsICYmIG5vZGUudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLnRleHRDb250ZW50LmluZGV4T2YoJ3t7JykgPT0gMCAmJiBub2RlLnRleHRDb250ZW50ID09IG5vZGUucGFyZW50RWxlbWVudC5pbm5lclRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBidWlsZFJlbmRlckZ1bmN0aW9uKG5vZGUudGV4dENvbnRlbnQsIChjb250ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUHJlSW50ZXJwb2xhdGlvbihub2RlLnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudEVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRSZW5kZXJGdW5jdGlvbihub2RlLnRleHRDb250ZW50LCAoY29udGVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhblByZUludGVycG9sYXRpb24obm9kZS5wYXJlbnRFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50ZXh0Q29udGVudCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY2xlYW5QcmVJbnRlcnBvbGF0aW9uKG5vZGUpIHtcclxuICAgICAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCAmJiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ2FnYS1mYWtlLWNvbnRhaW5zJykgfHwgbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ2FnLWZha2UtaW5saW5lLWNvbnRhaW5zJykpKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWZha2UtY29udGFpbnMnKTtcclxuICAgICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWctZmFrZS1pbmxpbmUtY29udGFpbnMnKTtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkTm9kZXNbMF0ubm9kZVR5cGUgPT0gMSlcclxuICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkTm9kZXNbMF0ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkUmVuZGVyRnVuY3Rpb24oaW5wdXRUZXh0LCByZW5kZXIpIHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBpbnB1dFRleHQubWF0Y2goZXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgIGxldCByZW5kZXJCbG9jayA9ICgpID0+IHsgcmV0dXJuICcnOyB9O1xyXG4gICAgICAgICAgICBsZXQgcmVuZGVyVGVtcGxhdGUgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXIocmVuZGVyQmxvY2soKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBpZiAobWF0Y2hlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVN0cmluZyA9IGlucHV0VGV4dDtcclxuICAgICAgICAgICAgICAgIGxldCB2YXJpYWJsZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGxldCBpc1N5c3RlbUZ1bmN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBtYXRjaGVzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaWRlbnRpZmllciA9IGl0ZW0uc3Vic3RyaW5nKDIsIGl0ZW0ubGVuZ3RoIC0gMik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVTdHJpbmcgPSB0ZW1wbGF0ZVN0cmluZy5yZXBsYWNlKGl0ZW0sIGBcXCR7dHlwZW9mKCR7aWRlbnRpZmllcn0pIT0ndW5kZWZpbmVkJyYmJHtpZGVudGlmaWVyfSE9bnVsbD8ke2lkZW50aWZpZXJ9OicnfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBsb2NhbFZhcmlhYmxlcyA9IEV4dHJhY3RWYXJpYWJsZXNUb3BMZXZlbElkZW50aWZpZXJzKGlkZW50aWZpZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKC4uLmxvY2FsVmFyaWFibGVzLmZpbHRlcigoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFibGVzLmluZGV4T2YoeCkgPCAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllciAhPSB2YXJpYWJsZXNbdmFyaWFibGVzLmxlbmd0aCAtIDFdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXYXRjaChkb20sIGNvbnRleHQsIHZhcmlhYmxlc1t2YXJpYWJsZXMubGVuZ3RoIC0gMV0sIChkYXRhLCBpc0NoYW5nZSwgaWRlbnRpZmllcikgPT4geyByZW5kZXJUZW1wbGF0ZSgpOyB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKElzRnVuY3Rpb24oc3lzdGVtRnVuY3Rpb25zLCBpZGVudGlmaWVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1N5c3RlbUZ1bmN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmFjdEFyZ3VtZW50VmFyaWFibGVzRm9yRnVuY3Rpb25Gcm9tU3RyaW5nKGlkZW50aWZpZXIpLmZvckVhY2goYXJndW1lbnRJdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhdGNoKGRvbSwgY29udGV4dCwgYXJndW1lbnRJdGVtLCAoZGF0YSwgaXNDaGFuZ2UsIGlkZW50aWZpZXIpID0+IHsgcmVuZGVyVGVtcGxhdGUoKTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXYXRjaChkb20sIGNvbnRleHQsIGlkZW50aWZpZXIsIChkYXRhLCBpc0NoYW5nZSwgaWRlbnRpZmllcikgPT4geyByZW5kZXJUZW1wbGF0ZSgpOyB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcmVuZGVyRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oYHRyeXtjb25zdCB7JHt2YXJpYWJsZXMuam9pbignLCcpfX0gPSB0aGlzOyByZXR1cm4gXFxgJHt0ZW1wbGF0ZVN0cmluZ31cXGA7IH1jYXRjaChlKXsgY29uc29sZS5lcnJvcihlKTsgfXJldHVybiAnJztgKS5iaW5kKGlzU3lzdGVtRnVuY3Rpb24gPyBpbnRlcnBvbGF0ZU9iamVjdChjb250ZXh0KSA6IGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyQmxvY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlckZ1bmN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UmVuZGVyRnVuY3Rpb25zID0gcmVuZGVyRnVuY3Rpb25zO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyRnVuY3Rpb25zID0gKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJUZW1wbGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJGdW5jdGlvbnMoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJGdW5jdGlvbnMoY29udGV4dCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGludGVycG9sYXRlT2JqZWN0KGNvbnRleHQpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihjb250ZXh0LCBzeXN0ZW1GdW5jdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIFByZUludGVycG9sYXRpb24oZG9tLCByb290RG9tKSB7XHJcbiAgICAgICAgaWYgKHJvb3REb20gPT0gbnVsbClcclxuICAgICAgICAgICAgcm9vdERvbSA9IGRvbTtcclxuICAgICAgICBsZXQgaXNNYXNrZWQgPSByb290RG9tLmhhc0F0dHJpYnV0ZSgnYWctZmFrZScpO1xyXG5cclxuICAgICAgICBpZiAoaXNNYXNrZWQpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlIG9mIGRvbS5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBkb20uZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5pbmRleE9mKCd7eycpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb20uc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUucmVwbGFjZSgvKFxce1xceyl8KFxcfVxcfSkvZ2ksIFwiXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRvbS5jbGFzc0xpc3QuYWRkKCdhZy1mYWtlLWlubGluZS1jb250YWlucycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkb20uY2hpbGROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUubm9kZU5hbWUgIT0gJ09QVElPTicpIHtcclxuICAgICAgICAgICAgICAgIFByZUludGVycG9sYXRpb24obm9kZSwgcm9vdERvbSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNNYXNrZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgb2Ygbm9kZS5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmluZGV4T2YoJ3t7JykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZS5yZXBsYWNlKC8oXFx7XFx7KXwoXFx9XFx9KS9naSwgXCJcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUubm9kZVR5cGUgPT0gTm9kZS5URVhUX05PREUgJiYgbm9kZS50ZXh0Q29udGVudCAhPSBudWxsICYmIG5vZGUudGV4dENvbnRlbnQuaW5kZXhPZigne3snKSA+IC0xICYmIG5vZGUudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxldCBmYWtlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKTtcclxuICAgICAgICAgICAgICAgIGZha2VFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2FnLWZha2UnKTtcclxuICAgICAgICAgICAgICAgIGxldCBwYXJlbnQgPSBub2RlLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50ICE9IG51bGwgJiYgIXBhcmVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2FnLWZha2UtY29udGFpbnMnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZmFrZUVsZW1lbnQsIHBhcmVudC5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuY2xhc3NMaXN0LmFkZCgnYWctZmFrZS1jb250YWlucycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01hc2tlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50ZXh0Q29udGVudCA9IG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSgvKFxce1xceyl8KFxcfVxcfSkvZ2ksIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIFdhdGNoKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBHZXRWYWx1ZShpdGVtLCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICBpZiAocHJvcGVydHlOYW1lLmluZGV4T2YoJygnKSA8IDAgJiYgcHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50UHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykpO1xyXG4gICAgICAgICAgICBsZXQgc3ViUHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgKyAxLCBwcm9wZXJ0eU5hbWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgcmV0dXJuIEdldFZhbHVlKGl0ZW1bY3VycmVudFByb3BlcnR5XSwgc3ViUHJvcGVydHkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBpc0Z1bmN0aW9uID0gcHJvcGVydHlOYW1lLmluZGV4T2YoJygnKSA+IC0xO1xyXG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbilcclxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZUZyb21GdW5jdGlvbihpdGVtLCBwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbSAhPSB1bmRlZmluZWQgPyBpdGVtW3Byb3BlcnR5TmFtZV0gOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIElzRnVuY3Rpb24oaXRlbSwgcHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPiAtMSAmJiB0eXBlb2YgKGl0ZW1bZ2V0RnVuY3Rpb25OYW1lKHByb3BlcnR5TmFtZSldKSA9PSAnZnVuY3Rpb24nO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIEdldFByb3h5T2JqZWN0KGl0ZW0pIHtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiAoaXRlbSkgPT0gJ3VuZGVmaW5lZCcgfHwgaXRlbSA9PSBudWxsKSByZXR1cm4gaXRlbTtcclxuXHJcbiAgICAgICAgbGV0IHByb3h5T2JqZWN0ID0ge307XHJcblxyXG4gICAgICAgIGZvciAobGV0IGl0ZW1Qcm9wZXJ0eSBpbiBpdGVtKVxyXG4gICAgICAgICAgICBTZXRQcm9wZXJ0eVRvUHJveHlPYmplY3QoaXRlbSwgcHJveHlPYmplY3QsIGl0ZW1Qcm9wZXJ0eSk7XHJcblxyXG4gICAgICAgIC8vTGlua0l0ZW0oaXRlbSxwcm94eU9iamVjdCk7XHJcblxyXG4gICAgICAgIHJldHVybiBwcm94eU9iamVjdDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBTZXRQcm9wZXJ0eVRvUHJveHlPYmplY3QoaXRlbSwgcHJveHlPYmplY3QsIHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgKGl0ZW1bcHJvcGVydHlOYW1lXSkgPT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICAgICAgcHJveHlPYmplY3RbcHJvcGVydHlOYW1lXSA9IGl0ZW1bcHJvcGVydHlOYW1lXTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eU9iamVjdCwgcHJvcGVydHlOYW1lLCB7IGdldCgpIHsgcmV0dXJuIGl0ZW1bcHJvcGVydHlOYW1lXTsgfSwgc2V0KHZhbHVlKSB7IGl0ZW1bcHJvcGVydHlOYW1lXSA9IHZhbHVlOyBOb3RpZnkobnVsbCwgaXRlbSwgcHJvcGVydHlOYW1lLCB0cnVlKTsgfSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIFNldFByb3BlcnR5RGVzY3JpcHRvclRvUHJveHlPYmplY3QocHJveHlPYmplY3QsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlEZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHByb3BlcnR5RGVzY3JpcHRvcik7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gQ29udmVyT2JqZWN0VG9Bcmd1bWVudEFycmF5KGl0ZW0pIHtcclxuXHJcbiAgICAgICAgbGV0IGNvbnZlcnRlZFZhbHVlcyA9IHsgYXJndW1lbnRzOiBbXSwgdmFsdWVzOiBbXSB9O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gaXRlbSkge1xyXG4gICAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZXMuYXJndW1lbnRzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgY29udmVydGVkVmFsdWVzLnZhbHVlcy5wdXNoKGl0ZW1ba2V5XSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY29udmVydGVkVmFsdWVzO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluc2VydEFmdGVyKGVsLCByZWZlcmVuY2VOb2RlKSB7XHJcbiAgICAgICAgaWYgKHJlZmVyZW5jZU5vZGUucGFyZW50Tm9kZSAhPSBudWxsKVxyXG4gICAgICAgICAgICByZWZlcmVuY2VOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsLCByZWZlcmVuY2VOb2RlLm5leHRTaWJsaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbnNlcnRCZWZvcmUoZWwsIHJlZmVyZW5jZU5vZGUpIHtcclxuICAgICAgICByZWZlcmVuY2VOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsLCByZWZlcmVuY2VOb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdmFyaWFibGVzRnJvbVN0cmluZ0V4cHJlc3Npb24gPSBuZXcgUmVnRXhwKCcoKD88c3RyaW5nPihbXFxcIlxcJ1xcYF0uKj9bXFxcIlxcJ1xcYF0pKXwoPzxib29sZWFuPih0cnVlfGZhbHNlKSl8KCg/PGZ1bmN0aW9uPltBLXpfXVtBLXowLTlcXC5cXCRdKylbXFwoXSl8KD88aWRlbnRpZmllcj5bQS16X11bQS16MC05XFwuXFwkXSspKScsICdnaScpO1xyXG4gICAgbGV0IHZhcmlhYmxlVG9wTGV2ZWxJZGVudGlmaWVyc0V4cHJlc3Npb24gPSBuZXcgUmVnRXhwKCcoPzx2YXJpYWJsZT5bQS16MC05X1xcXFwkXSspKCgoXFxcXC5bXlxcXFxzXFxcXD1cXFxcJlxcXFx8XSopfFxcXFwoKSk/JywgJ2dpJyk7XHJcblxyXG4gICAgZnVuY3Rpb24gRXh0cmFjdFZhcmlhYmxlc1RvcExldmVsSWRlbnRpZmllcnModmFsdWF0aW9uU3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2ggPSBudWxsO1xyXG4gICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gdmFyaWFibGVUb3BMZXZlbElkZW50aWZpZXJzRXhwcmVzc2lvbi5leGVjKHZhbHVhdGlvblN0cmluZykpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaC5ncm91cHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2guZ3JvdXBzLnZhcmlhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG1hdGNoLmdyb3Vwcy52YXJpYWJsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBFeHRyYWN0VmFyaWFibGVzRnJvbVN0cmluZyh2YWx1YXRpb25TdHJpbmcpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0geyBmdW5jdGlvbnM6IFtdLCBpZGVudGlmaWVyczogW10gfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoID0gbnVsbDtcclxuICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IHZhcmlhYmxlc0Zyb21TdHJpbmdFeHByZXNzaW9uLmV4ZWModmFsdWF0aW9uU3RyaW5nKSkgIT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaC5ncm91cHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2guZ3JvdXBzLmlkZW50aWZpZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pZGVudGlmaWVycy5wdXNoKG1hdGNoLmdyb3Vwcy5pZGVudGlmaWVyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2guZ3JvdXBzLmZ1bmN0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZnVuY3Rpb25zLnB1c2gobWF0Y2guZ3JvdXBzLmZ1bmN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gRXh0cmFjdEFyZ3VtZW50VmFyaWFibGVzRm9yRnVuY3Rpb25Gcm9tU3RyaW5nKHZhbHVhdGlvblN0cmluZykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHMgPSBbXTtcclxuICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHNTdGFydCA9IHZhbHVhdGlvblN0cmluZy5pbmRleE9mKCcoJyk7XHJcbiAgICAgICAgbGV0IGZ1bmN0aW9uQXJndW1lbnRzRW5kID0gdmFsdWF0aW9uU3RyaW5nLmluZGV4T2YoJyknKTtcclxuICAgICAgICBsZXQgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25Bcmd1bWVudHNTdGFydCA+IC0xID8gdmFsdWF0aW9uU3RyaW5nLnN1YnN0cmluZygwLCBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0KSA6IHZhbHVhdGlvblN0cmluZztcclxuICAgICAgICBsZXQgYXJndW1lbnRzU3RyaW5nID0gdmFsdWF0aW9uU3RyaW5nLnN1YnN0cmluZyhmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ICsgMSwgZnVuY3Rpb25Bcmd1bWVudHNFbmQpO1xyXG4gICAgICAgIGxldCBtYXRjaGVzID0gYXJndW1lbnRzU3RyaW5nLm1hdGNoKG5ldyBSZWdFeHAoJ1teLF0rJywgJ2dpJykpO1xyXG4gICAgICAgIGlmIChtYXRjaGVzICE9IG51bGwpXHJcbiAgICAgICAgICAgIG1hdGNoZXMuZm9yRWFjaCgoYXJndW1lbnRJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoL14oX3xbQS16XSkoX3xbQS16XXxbMC05XXxcXCQpKyQvLnRlc3QoYXJndW1lbnRJdGVtLnRyaW0oKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJndW1lbnRJdGVtLnRyaW0oKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWUocHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgbGV0IG9wZW5JbmRleCA9IC0xO1xyXG4gICAgICAgIGlmICgob3BlbkluZGV4ID0gcHJvcGVydHlOYW1lLmluZGV4T2YoJygnKSkgPiAtMSkgcmV0dXJuIHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgb3BlbkluZGV4KTtcclxuICAgICAgICByZXR1cm4gcHJvcGVydHlOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFZhbHVlRnJvbUZ1bmN0aW9uKGl0ZW0sIHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgIGxldCBmdW5jdGlvbkFyZ3VtZW50cyA9IFtdO1xyXG4gICAgICAgIGxldCBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ID0gcHJvcGVydHlOYW1lLmluZGV4T2YoJygnKTtcclxuICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHNFbmQgPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZignKScpO1xyXG4gICAgICAgIGxldCBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ID4gLTEgPyBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQpIDogcHJvcGVydHlOYW1lO1xyXG4gICAgICAgIGxldCBhcmd1bWVudHNTdHJpbmcgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQgKyAxLCBmdW5jdGlvbkFyZ3VtZW50c0VuZCk7XHJcbiAgICAgICAgbGV0IG1hdGNoZXMgPSBhcmd1bWVudHNTdHJpbmcubWF0Y2gobmV3IFJlZ0V4cCgnW14sXSsnLCAnZ2knKSk7XHJcbiAgICAgICAgaWYgKG1hdGNoZXMgIT0gbnVsbClcclxuICAgICAgICAgICAgbWF0Y2hlcy5mb3JFYWNoKChhcmd1bWVudEl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uQXJndW1lbnRzLnB1c2goR2V0VmFsdWUoaXRlbSwgYXJndW1lbnRJdGVtKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgKGl0ZW1bZnVuY3Rpb25OYW1lXSkgPT0gJ2Z1bmN0aW9uJyA/IGl0ZW1bZnVuY3Rpb25OYW1lXS5hcHBseShpdGVtLCBmdW5jdGlvbkFyZ3VtZW50cykgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIElmKGh0bWwsIGRvbSwgY29udGV4dCkge1xyXG4gICAgICAgIGxldCBodG1sRG9jdW1lbnQgPSBodG1sO1xyXG4gICAgICAgIGxldCBpZnMgPSBkb20ucXVlcnlTZWxlY3RvckFsbCgnW2FnLWlmXScsIGRvbSk7XHJcbiAgICAgICAgaWZzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgbGV0IG5vZGVzQW5kQ29uZGl0aW9uID0gW107XHJcbiAgICAgICAgICAgIGxldCBuZXh0Tm9kZSA9IGl0ZW07XHJcbiAgICAgICAgICAgIGxldCBpdGVtUGFyZW50ID0gaXRlbS5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICBsZXQgYWN0aXZlTm9kZUFuZENvbmRpdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBpZGVudGlmaWVyc1VzZWQgPSBbXTtcclxuICAgICAgICAgICAgbGV0IEF0dHJpYnV0ZXMgPSB7XHJcbiAgICAgICAgICAgICAgICBJZjogXCJhZy1pZlwiLFxyXG4gICAgICAgICAgICAgICAgRWxzZUlmOiBcImFnLWVsc2UtaWZcIixcclxuICAgICAgICAgICAgICAgIEVsc2U6IFwiYWctZWxzZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hpbGUgKG5leHROb2RlICE9IG51bGwgJiYgKChpdGVtID09IG5leHROb2RlICYmIG5leHROb2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLklmKSkgfHwgbmV4dE5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuRWxzZUlmKSB8fCBuZXh0Tm9kZS5oYXNBdHRyaWJ1dGUoQXR0cmlidXRlcy5FbHNlKSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBub2RlID0gbmV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWZha2UtbWFzaycpO1xyXG4gICAgICAgICAgICAgICAgbmV4dE5vZGUgPSAobm9kZS5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGF0dHJpYnV0ZVRvUmVhZCA9IG5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuSWYpID8gQXR0cmlidXRlcy5JZiA6IG5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuRWxzZUlmKSA/IEF0dHJpYnV0ZXMuRWxzZUlmIDogQXR0cmlidXRlcy5FbHNlO1xyXG4gICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVUb1JlYWQpO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlVG9SZWFkKTtcclxuICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgRXh0cmFjdFZhcmlhYmxlc0Zyb21TdHJpbmcoZXhwcmVzc2lvbikuaWRlbnRpZmllcnMuZm9yRWFjaChpZGVudGlmaWVyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJzVXNlZC5pbmRleE9mKGlkZW50aWZpZXIpIDwgMCkgaWRlbnRpZmllcnNVc2VkLnB1c2goaWRlbnRpZmllcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBub2Rlc0FuZENvbmRpdGlvbi5wdXNoKHsgbm9kZTogKG5vZGUuY2xvbmVOb2RlKHRydWUpKSwgZXhwcmVzc2lvbjogZXhwcmVzc2lvbiwgcG9zaXRpb246IG5vZGUubmV4dFNpYmxpbmcsIGlzRGVmYXVsdDogYXR0cmlidXRlVG9SZWFkID09IEF0dHJpYnV0ZXMuRWxzZSB9KTtcclxuICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHZhbHVhdGlvbkZ1bmN0aW9uQXJndW1lbnRzID0gQ29udmVyT2JqZWN0VG9Bcmd1bWVudEFycmF5KGNvbnRleHQpO1xyXG4gICAgICAgICAgICBsZXQgcmVuZGVyID0gKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhbHVhdGlvbkZ1bmN0aW9uQXJndW1lbnRzID0gQ29udmVyT2JqZWN0VG9Bcmd1bWVudEFycmF5KGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZU5vZGVBbmRDb25kaXRpb24gIT0gbnVsbCkgKGFjdGl2ZU5vZGVBbmRDb25kaXRpb24uYWN0aXZlKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IG5vZGVBbmRDb25kaXRpb24gb2Ygbm9kZXNBbmRDb25kaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlQW5kQ29uZGl0aW9uLmlzRGVmYXVsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWF0aW9uRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oLi4udmFsdWF0aW9uRnVuY3Rpb25Bcmd1bWVudHMuYXJndW1lbnRzLCBgcmV0dXJuICR7bm9kZUFuZENvbmRpdGlvbi5leHByZXNzaW9ufTtgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWF0aW9uRnVuY3Rpb24oLi4udmFsdWF0aW9uRnVuY3Rpb25Bcmd1bWVudHMudmFsdWVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBub2RlQW5kQ29uZGl0aW9uLmlzRGVmYXVsdDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZU5vZGVBbmRDb25kaXRpb24gPSBub2RlQW5kQ29uZGl0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluc2VydFBvc3Rpb24gPSBmaW5kRG9tUG9zaXRpb24obm9kZUFuZENvbmRpdGlvbi5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVBhcmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvbmFsTm9kZSA9IG5vZGVBbmRDb25kaXRpb24ubm9kZS5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUFuZENvbmRpdGlvbi5hY3RpdmUgPSBjb25kaXRpb25hbE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVBhcmVudC5pbnNlcnRCZWZvcmUoY29uZGl0aW9uYWxOb2RlLCBpbnNlcnRQb3N0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1JbnRlcm5hbChodG1sLCBjb25kaXRpb25hbE5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IGNvbnNvbGUubG9nKGUpOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gZmluZERvbVBvc2l0aW9uKGRvbSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvbSAhPSBudWxsICYmICFkb2N1bWVudC5jb250YWlucyhkb20pKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5kRG9tUG9zaXRpb24oZG9tLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaWRlbnRpZmllciBvZiBpZGVudGlmaWVyc1VzZWQpIHtcclxuICAgICAgICAgICAgICAgIFdhdGNoKGl0ZW0sIGNvbnRleHQsIGlkZW50aWZpZXIsIChkYXRhLCBpc0NoYW5nZSwgaXNVc2VyQ2hhbmdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2hhbmdlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXIoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZW5kZXIoY29udGV4dCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBQcmVJZihkb20pIHtcclxuICAgICAgICBsZXQgaWZzID0gZG9tLnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1pZl0nLCBkb20pO1xyXG4gICAgICAgIGxldCBpc0Zha2UgPSBkb20uaGFzQXR0cmlidXRlKCdhZy1mYWtlJyk7XHJcbiAgICAgICAgaWZzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgbGV0IG5leHROb2RlID0gaXRlbTtcclxuICAgICAgICAgICAgbGV0IGlkZW50aWZpZXJzVXNlZCA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgZmFrZUZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBBdHRyaWJ1dGVzID0ge1xyXG4gICAgICAgICAgICAgICAgSWY6IFwiYWctaWZcIixcclxuICAgICAgICAgICAgICAgIEVsc2VJZjogXCJhZy1lbHNlLWlmXCIsXHJcbiAgICAgICAgICAgICAgICBFbHNlOiBcImFnLWVsc2VcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlIChuZXh0Tm9kZSAhPSBudWxsICYmICgoaXRlbSA9PSBuZXh0Tm9kZSAmJiBuZXh0Tm9kZS5oYXNBdHRyaWJ1dGUoQXR0cmlidXRlcy5JZikpIHx8IG5leHROb2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLkVsc2VJZikgfHwgbmV4dE5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuRWxzZSkpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IG5leHROb2RlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmYWtlRm91bmQgJiYgbm9kZS5oYXNBdHRyaWJ1dGUoJ2FnLWZha2UnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZha2VGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZha2VGb3VuZCB8fCAoIWZha2VGb3VuZCAmJiAhbmV4dE5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuRWxzZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKCdhZy1mYWtlLW1hc2snKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFrZUZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChpc0Zha2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShBdHRyaWJ1dGVzLklmKTtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShBdHRyaWJ1dGVzLkVsc2VJZik7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoQXR0cmlidXRlcy5FbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG5leHROb2RlID0gKG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWZha2VGb3VuZClcclxuICAgICAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnYWctZmFrZS1tYXNrJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vL0ZvclxyXG5cclxuICAgIGZ1bmN0aW9uIEZvcihodG1sLCBkb20sIGNvbnRleHQpIHtcclxuICAgICAgICBsZXQgaHRtbERvY3VtZW50ID0gaHRtbDtcclxuICAgICAgICBsZXQgbG9vcHMgPSBkb20ucXVlcnlTZWxlY3RvckFsbCgnW2FnLWZvcl0nLCBkb20pO1xyXG4gICAgICAgIGxvb3BzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgbGV0IGZha2VJdGVtID0gaXRlbS5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgIGxldCBmYWtlSXRlbUNvdW50ID0gMDtcclxuICAgICAgICAgICAgbGV0IGlzZmFrZUl0ZW1Db3VudFJlYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoJ1xcXFxzKihbQS16MC05XSspXFxcXHMrKGluKVxcXFxzKyhbQS16MC05XFxcXC5dKylcXFxccyonLCAnZ2knKTtcclxuICAgICAgICAgICAgbGV0IGxvb3BDb25zdHJhaW50ID0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWZvcicpO1xyXG4gICAgICAgICAgICBpZiAobG9vcENvbnN0cmFpbnQgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBsZXQgaXRyYXRvckZpbmlzaGVkID0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWZvci1jb21wbGV0ZScpO1xyXG4gICAgICAgICAgICBsZXQgZmllbGRzQW5kVmFsdWUgPSBleHByZXNzaW9uLmV4ZWMobG9vcENvbnN0cmFpbnQpO1xyXG4gICAgICAgICAgICBsZXQgaXRyYXRvciA9IGZpZWxkc0FuZFZhbHVlICE9IG51bGwgPyBmaWVsZHNBbmRWYWx1ZVsxXSA6IFwiXCI7XHJcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZmllbGRzQW5kVmFsdWUgIT0gbnVsbCA/IGZpZWxkc0FuZFZhbHVlWzNdIDogXCJcIjsgICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IGh0bWxUb0Nsb25lID0gaXRlbS5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgIGxldCBodG1sVG9DbG9uZVBhcmVudCA9IGl0ZW0ucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgbGV0IGh0bWxUb0Nsb25lTG9jYXRpb24gPSBpdGVtLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAoaHRtbFRvQ2xvbmUpLnJlbW92ZUF0dHJpYnV0ZSgnYWctZm9yJyk7XHJcbiAgICAgICAgICAgIGl0ZW0ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIGxldCBpdGVtRWxlbWVudHMgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGlzRGlydHlGYWtlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uQ29udGV4dCA9IGdldENvbGxlY3Rpb25PYmplY3QoY29udGV4dCwgY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uQ29udGV4dEZpZWxkID0gZ2V0Q29sbGVjdGlvbk5hbWUoY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBTZXRQcm9wZXJ0eURlc2NyaXB0b3JUb1Byb3h5T2JqZWN0KGNvbGxlY3Rpb25Db250ZXh0LCBgJHtjb2xsZWN0aW9uQ29udGV4dEZpZWxkfSRmb3JgLCB7IHZhbHVlOiAwLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIGxldCByZW5kZXIgPSAoZGF0YSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW1FbGVtZW50IG9mIGl0ZW1FbGVtZW50cylcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbUVsZW1lbnQpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBpdGVtc0NvbGxlY3Rpb24gPSBHZXRWYWx1ZShkYXRhLCBjb2xsZWN0aW9uKVxyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW1JbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXNGaXJzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXNDb2xsZWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzRGlydHlGYWtlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBodG1sVG9DbG9uZUxvY2F0aW9uID0gcmVtb3ZlUHJlRm9yKGZha2VJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtRnJvbUNvbGxlY3Rpb24gb2YgaXRlbXNDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZXh0T2JqZWN0ID0gR2V0UHJveHlPYmplY3QoY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNldFByb3BlcnR5RGVzY3JpcHRvclRvUHJveHlPYmplY3QoY29udGV4dE9iamVjdCwgaXRyYXRvciwgeyBnZXQoKSB7IHJldHVybiBpdGVtRnJvbUNvbGxlY3Rpb247IH0sIHNldCh2YWx1ZSkgeyBpdGVtRnJvbUNvbGxlY3Rpb24gPSB2YWx1ZTsgfSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgU2V0UHJvcGVydHlEZXNjcmlwdG9yVG9Qcm94eU9iamVjdChjb250ZXh0T2JqZWN0LCBgcm93JEluZGV4YCwgeyB2YWx1ZTogaXRlbUluZGV4ICsgMSwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNldFByb3BlcnR5RGVzY3JpcHRvclRvUHJveHlPYmplY3QoY29udGV4dE9iamVjdCwgYCR7aXRyYXRvcn0kSW5kZXhgLCB7IHZhbHVlOiBpdGVtSW5kZXggKyAxLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSXRyYXRvcjonLCBjb250ZXh0T2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNsb25lZEVsZW1lbnQgPSBodG1sVG9DbG9uZS5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNGaXJzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbFRvQ2xvbmVQYXJlbnQ/Lmluc2VydEJlZm9yZShjbG9uZWRFbGVtZW50LCBodG1sVG9DbG9uZUxvY2F0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmlyc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEFmdGVyKGNsb25lZEVsZW1lbnQsIGl0ZW1FbGVtZW50c1tpdGVtRWxlbWVudHMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1JbnRlcm5hbChodG1sRG9jdW1lbnQsIGNsb25lZEVsZW1lbnQsIGNvbnRleHRPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRWxlbWVudHMucHVzaChjbG9uZWRFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNldFByb3BlcnR5RGVzY3JpcHRvclRvUHJveHlPYmplY3QoY29sbGVjdGlvbkNvbnRleHQsIGAke2NvbGxlY3Rpb25Db250ZXh0RmllbGR9JGZvcmAsIHsgdmFsdWU6IERhdGUubm93KCksIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLWZvci1jb21wbGV0ZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbFRvQ2xvbmVQYXJlbnQ/LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKGl0ZW1zQ29sbGVjdGlvbikgPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmFrZUl0ZW0gIT0gbnVsbCAmJiBmYWtlSXRlbS5oYXNBdHRyaWJ1dGUoJ2FnLWZvci1mYWtlJykgJiYgaXNEaXJ0eUZha2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFrZUl0ZW0gPSBQcmVGb3JQYXJ0aWFsKGZha2VJdGVtLCBodG1sVG9DbG9uZVBhcmVudCwgaHRtbFRvQ2xvbmVMb2NhdGlvbiwgZmFrZUl0ZW1Db3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRyYXRvckZpbmlzaGVkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZnVuY3Rpb25OYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBpdHJhdG9yRmluaXNoZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnZXRQYXJhbWV0ZXJOYW1lID0gKG5hbWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gJ3RoaXMnKSByZXR1cm4gJ3NlbmRlcic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lLmluZGV4T2YoJy4nKSA+IC0xKSByZXR1cm4gbmFtZS5yZXBsYWNlKFwiLlwiLCAnXycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnZXRWYWx1ZSA9IChpdGVtLCBwcm9wZXJ0eU5hbWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPCAwICYmIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgcHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3ViUHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgKyAxLCBwcm9wZXJ0eU5hbWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZShpdGVtW2N1cnJlbnRQcm9wZXJ0eV0sIHN1YlByb3BlcnR5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0Z1bmN0aW9uID0gcHJvcGVydHlOYW1lLmluZGV4T2YoJygnKSA+IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlRnJvbUZ1bmN0aW9uKGl0ZW0sIHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bcHJvcGVydHlOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdldEZ1bmN0aW9uRnJvbUNvbGxlY3Rpb24gPSAoY29udGV4dCwgbmFtZSwgYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuX19wcm90b19fW25hbWVdICE9IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fX3Byb3RvX19bbmFtZV0oLi4uYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoY29udGV4dFtpdGVtXSkgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEZ1bmN0aW9uRnJvbUNvbGxlY3Rpb24oY29udGV4dFtpdGVtXSwgbmFtZSwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKGNvbnRleHRbaXRlbV0pID09ICdmdW5jdGlvbicgJiYgaXRlbSA9PSBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtpdGVtXSguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ2V0VmFsdWVGcm9tRnVuY3Rpb24gPSAoaXRlbSwgcHJvcGVydHlOYW1lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jdGlvbkFyZ3VtZW50cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHNTdGFydCA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jdGlvbkFyZ3VtZW50c0VuZCA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcpJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ID4gLTEgPyBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQpIDogcHJvcGVydHlOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJndW1lbnRzU3RyaW5nID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyhmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ICsgMSwgZnVuY3Rpb25Bcmd1bWVudHNFbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGFyZ3VtZW50c1N0cmluZy5tYXRjaChuZXcgUmVnRXhwKCdbXixdKycsICdnaScpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuZm9yRWFjaCgoYXJndW1lbnRJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Bcmd1bWVudHMucHVzaChnZXRWYWx1ZShpdGVtLCBhcmd1bWVudEl0ZW0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmdW5jdGlvbk5hbWVdLmFwcGx5KGl0ZW0sIGZ1bmN0aW9uQXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSA9IHZhbHVlLnN1YnN0cmluZygwLCB2YWx1ZS5pbmRleE9mKCcoJykgPiAtMSA/IHZhbHVlLmluZGV4T2YoJygnKSA6IHZhbHVlLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKCcoXFxcXCgoPzxwYXJhbXM+Lio/KVxcXFwpKScpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtc1N0cmluZyA9IHZhbHVlLm1hdGNoKGV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zU3RyaW5nICE9IHVuZGVmaW5lZCAmJiBwYXJhbXNTdHJpbmcgIT0gbnVsbCAmJiBwYXJhbXNTdHJpbmcuZ3JvdXBzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHBhcmFtc1N0cmluZy5ncm91cHMucGFyYW1zLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zSXRlbSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcGFyYW0gaW4gcGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtc1twYXJhbV0gPT0gJ3RoaXMnKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNQYXJhbVZhbHVlID0gKG5ldyBSZWdFeHAoJ14oXFxcXFxcJ3xbMC05XSknKS50ZXN0KHBhcmFtc1twYXJhbV0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1OYW1lID0gIWlzUGFyYW1WYWx1ZSA/IGdldFBhcmFtZXRlck5hbWUocGFyYW1zW3BhcmFtXSkgOiAnaXRlbV8nICsgcGFyYW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zSXRlbVtwYXJhbU5hbWVdID0gaXNQYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhdGNoKGl0ZW0sIGNvbGxlY3Rpb25Db250ZXh0LCBgJHtjb2xsZWN0aW9uQ29udGV4dEZpZWxkfSRmb3JgLCAoZGF0YSwgaXNDaGFuZ2UsIGlzVXNlckNoYW5nZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcmdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zW2tleV0gPT0gJ3RoaXMnIHx8IHBhcmFtc1trZXldID09ICdzZW5kZXInKSBhcmdzLnB1c2goaHRtbFRvQ2xvbmVQYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXJhbXNba2V5XSA9PSAnZGF0YScpIGFyZ3MucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1WYWx1ZSA9ICFwYXJhbXNJdGVtW2dldFBhcmFtZXRlck5hbWUocGFyYW1zW2tleV0pXSA/IGdldFZhbHVlKGRhdGEsIHBhcmFtc1trZXldKSA6IGV2YWwocGFyYW1zW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHBhcmFtVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2Z1bmN0aW9uTmFtZV0gIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtmdW5jdGlvbk5hbWVdLmFwcGx5KGRhdGEsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50RnVuY3Rpb24gPSBnZXRGdW5jdGlvbkZyb21Db2xsZWN0aW9uKGRhdGEsIGZ1bmN0aW9uTmFtZSwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZ1bmN0aW9uICE9IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb24oYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVuZGVyKGNvbnRleHQpO1xyXG4gICAgICAgICAgICBXYXRjaChpdGVtLCBjb250ZXh0LCBjb2xsZWN0aW9uLCAoZGF0YSwgaXNDaGFuZ2UsIGlzVXNlckNoYW5nZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQ2hhbmdlKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcihkYXRhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRDb2xsZWN0aW9uT2JqZWN0KGl0ZW0sIHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPCAwICYmIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzdWJQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcocHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSArIDEsIHByb3BlcnR5TmFtZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRDb2xsZWN0aW9uT2JqZWN0KGl0ZW1bY3VycmVudFByb3BlcnR5XSwgc3ViUHJvcGVydHkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaXNGdW5jdGlvbiA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPiAtMTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q29sbGVjdGlvbk5hbWUocHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lLmluZGV4T2YoJygnKSA8IDAgJiYgcHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgcHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1YlByb3BlcnR5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyhwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpICsgMSwgcHJvcGVydHlOYW1lLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldENvbGxlY3Rpb25OYW1lKHN1YlByb3BlcnR5KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5TmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlUHJlRm9yKGZha2VJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmFrZUl0ZW0gIT0gbnVsbCAmJiBmYWtlSXRlbS5oYXNBdHRyaWJ1dGUoJ2FnLWZvci1mYWtlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBodG1sVG9DbG9uZS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1mYWtlLW1hc2snKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dEl0ZW0gPSBmYWtlSXRlbTtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV4dEl0ZW0gIT0gbnVsbCAmJiBuZXh0SXRlbS5oYXNBdHRyaWJ1dGUoJ2FnLWZvci1mYWtlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc2Zha2VJdGVtQ291bnRSZWFkZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWtlSXRlbUNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvbGROZXh0ID0gbmV4dEl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJdGVtID0gbmV4dEl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbGROZXh0LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpc2Zha2VJdGVtQ291bnRSZWFkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0SXRlbTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWtlSXRlbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gaHRtbERvY3VtZW50LmlubmVySFRNTDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBQcmVGb3JQYXJ0aWFsKGl0ZW0sIHBhcmVudCwgbG9jYXRpb24sIGNvdW50KSB7XHJcbiAgICAgICAgbGV0IGxhc3RJdGVtID0gbnVsbCwgZmlyc3RJdGVtID0gbnVsbDtcclxuICAgICAgICBsZXQgaXNGaXJzdCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgZmFrZUl0ZW0gPSBpdGVtLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgaWYgKCFpc0ZpcnN0KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQ/Lmluc2VydEJlZm9yZShmYWtlSXRlbSwgbG9jYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgaXNGaXJzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBmaXJzdEl0ZW0gPSBmYWtlSXRlbTtcclxuICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICBpbnNlcnRBZnRlcihmYWtlSXRlbSwgbGFzdEl0ZW0pO1xyXG4gICAgICAgICAgICBsYXN0SXRlbSA9IGZha2VJdGVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlyc3RJdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIFByZUZvcihkb20pIHtcclxuICAgICAgICBsZXQgbG9vcHMgPSBkb20ucXVlcnlTZWxlY3RvckFsbCgnW2FnLWZvcl1bYWctZm9yLWZha2VdOm5vdCguYWctZmFrZS1tYXNrKScsIGRvbSk7XHJcbiAgICAgICAgbG9vcHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS50YWdOYW1lID09IFwiT1BUSU9OXCIpIHJldHVybjtcclxuICAgICAgICAgICAgbGV0IGNsb25lSXRlbSA9IGl0ZW0uY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICBjbG9uZUl0ZW0uc2V0QXR0cmlidXRlKCdhZy1mYWtlJywgJycpO1xyXG4gICAgICAgICAgICBsZXQgY2xvbmVJdGVtQ291bnQgPSAxO1xyXG4gICAgICAgICAgICBsZXQgY2xvbmVJdGVtQ291bnRTdHJpbmcgPSBpdGVtLmdldEF0dHJpYnV0ZSgnYWctZm9yLWZha2UnKTtcclxuICAgICAgICAgICAgaWYgKGNsb25lSXRlbUNvdW50U3RyaW5nICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICBjbG9uZUl0ZW1Db3VudCA9IHBhcnNlSW50KGNsb25lSXRlbUNvdW50U3RyaW5nKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgY2xvbmVJdGVtLnNldEF0dHJpYnV0ZSgnYWctZm9yLWZha2UnLCAnJyk7XHJcbiAgICAgICAgICAgIGNsb25lSXRlbS5yZW1vdmVBdHRyaWJ1dGUoJ2FnLWZvcicpO1xyXG4gICAgICAgICAgICBpdGVtLnJlbW92ZUF0dHJpYnV0ZSgnYWctZm9yLWZha2UnKTtcclxuICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdhZy1mYWtlLW1hc2snKTtcclxuICAgICAgICAgICAgUHJlVHJhbnNmb3JtSW50ZXJuYWwoY2xvbmVJdGVtKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbG9uZUl0ZW1Db3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnBhcmVudEVsZW1lbnQ/LmFwcGVuZENoaWxkKGNsb25lSXRlbS5jbG9uZU5vZGUodHJ1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gVHJhbnNmb3JtSW50ZXJuYWwoaHRtbCwgZG9tLCBjb250ZXh0KSB7XHJcblxyXG4gICAgICAgIEZvcihkb20sIGRvbSwgY29udGV4dCk7XHJcbiAgICAgICAgSWYoZG9tLCBkb20sIGNvbnRleHQpO1xyXG4gICAgICAgIEludGVycG9sYXRpb24oZG9tLCBkb20sIGNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIFByZVRyYW5zZm9ybUludGVybmFsKGRvbSkge1xyXG5cclxuICAgICAgICBQcmVGb3IoZG9tKTtcclxuICAgICAgICBQcmVJZihkb20pO1xyXG4gICAgICAgIFByZUludGVycG9sYXRpb24oZG9tKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBmaW5kUmVuZGVycygpIHtcclxuICAgICAgICB2YXIgcmVuZGVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1yZW5kZXJdOm5vdCguYWctcmVuZGVyKScpO1xyXG4gICAgICAgIHJlbmRlcnMuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcclxuXHJcbiAgICAgICAgICAgIGF0dGFjaEFjdGlvbihpdGVtKTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gYXR0YWNoQWN0aW9uKGl0ZW0pIHtcclxuXHJcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdhZy1yZW5kZXInKTtcclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdEZ1bmN0aW9uID0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLXJlbmRlcicpO1xyXG5cclxuICAgICAgICBQcmVUcmFuc2Zvcm1JbnRlcm5hbChpdGVtKTtcclxuXHJcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9ICdhZy5yZW5kZXIuaHlkcmF0ZS4nICsgcmVzdWx0RnVuY3Rpb247XHJcblxyXG4gICAgICAgIHZhciBpdGVtSHRtbCA9IGl0ZW0uaW5uZXJIVE1MO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBhc3luYyBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gR2V0VmFsdWUod2luZG93LCByZXN1bHRGdW5jdGlvbik7XHJcblxyXG4gICAgICAgICAgICBpdGVtLmlubmVySFRNTCA9IGl0ZW1IdG1sO1xyXG5cclxuICAgICAgICAgICAgVHJhbnNmb3JtSW50ZXJuYWwoaXRlbSwgaXRlbSwgcmVzdWx0KTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3REYXRhKHNlcnZpY2VVcmwsIGRhdGEsIHByb2Nlc3NSZXF1ZXN0RGF0YSkge1xyXG4gICAgICAgIGlmIChwcm9jZXNzUmVxdWVzdERhdGEpXHJcbiAgICAgICAgICAgIGRhdGEgPSBwcm9jZXNzUmVxdWVzdERhdGEoZGF0YSk7XHJcblxyXG4gICAgICAgIHZhciBxdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcgKygocXVlcnlTdHJpbmcgIT0gJycgPyAnJicgOiAnJykgKyBrZXkgKyAnPScgKyBkYXRhW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXJ2aWNlVXJsICs9IHNlcnZpY2VVcmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycgKyBxdWVyeVN0cmluZztcclxuICAgICAgICB2YXIgcmVxdWVzdCA9IGF3YWl0IGZldGNoKHNlcnZpY2VVcmwsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBtb2RlOiBcImNvcnNcIixcclxuICAgICAgICAgICAgY2FjaGU6IFwibm8tY2FjaGVcIixcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlcXVlc3QuanNvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXRQYWdlKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpIHtcclxuICAgICAgICBpZiAoIWRhdGEpIGRhdGEgPSB7fTtcclxuICAgICAgICBpZiAoIWRhdGEuUGFnZVNpemUpIGRhdGEuUGFnZVNpemUgPSAxMjtcclxuICAgICAgICBpZiAoIWRhdGEuUGFnZU51bWJlcikgZGF0YS5QYWdlTnVtYmVyID0gMTtcclxuICAgICAgICB2YXIgcGFnZWREYXRhID0gYXdhaXQgcmVxdWVzdERhdGEoc2VydmljZVVybCwgZGF0YSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICB3aW5kb3dbcmVuZGVyTmFtZV0gPSBwYWdlZERhdGE7ICAgICAgICBcclxuICAgICAgICB3aW5kb3cuYWdSZW5kZXIuaHlkcmF0ZShyZW5kZXJOYW1lKTtcclxuICAgICAgICBpZiAocmVuZGVyQ29tcGxldGUpXHJcbiAgICAgICAgICAgIHJlbmRlckNvbXBsZXRlKHBhZ2VkRGF0YSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIG5leHRQYWdlKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpIHtcclxuICAgICAgICBkYXRhLlBhZ2VOdW1iZXIgKz0gMTtcclxuICAgICAgICB2YXIgcGFnZWREYXRhID0gYXdhaXQgcmVxdWVzdERhdGEoc2VydmljZVVybCwgZGF0YSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICB3aW5kb3dbcmVuZGVyTmFtZV0gPSBwYWdlZERhdGE7ICAgICAgICBcclxuICAgICAgICB3aW5kb3cuYWdSZW5kZXIuaHlkcmF0ZShyZW5kZXJOYW1lKTtcclxuICAgICAgICBpZiAocmVuZGVyQ29tcGxldGUpXHJcbiAgICAgICAgICAgIHJlbmRlckNvbXBsZXRlKHBhZ2VkRGF0YSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHByZXZpb3VzUGFnZShyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKSB7XHJcbiAgICAgICAgaWYgKGRhdGEuUGFnZU51bWJlciA+IDEpIHtcclxuICAgICAgICAgICAgZGF0YS5QYWdlTnVtYmVyIC09IDE7XHJcbiAgICAgICAgICAgIHZhciBwYWdlZERhdGEgPSBhd2FpdCByZXF1ZXN0RGF0YShzZXJ2aWNlVXJsLCBkYXRhLCBwcm9jZXNzUmVxdWVzdERhdGEpO1xyXG4gICAgICAgICAgICB3aW5kb3dbcmVuZGVyTmFtZV0gPSBwYWdlZERhdGE7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZ1JlbmRlci5oeWRyYXRlKHJlbmRlck5hbWUpO1xyXG4gICAgICAgICAgICBpZiAocmVuZGVyQ29tcGxldGUpXHJcbiAgICAgICAgICAgICAgICByZW5kZXJDb21wbGV0ZShwYWdlZERhdGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gbW9yZVBhZ2UocmVuZGVyTmFtZSwgc2VydmljZVVybCwgZGF0YSwgcmVuZGVyQ29tcGxldGUsIHByb2Nlc3NSZXF1ZXN0RGF0YSkge1xyXG4gICAgICAgIGRhdGEuUGFnZU51bWJlciArPSAxO1xyXG4gICAgICAgIHZhciBwYWdlZERhdGEgPSBhd2FpdCByZXF1ZXN0RGF0YShzZXJ2aWNlVXJsLCBkYXRhLCBwcm9jZXNzUmVxdWVzdERhdGEpO1xyXG4gICAgICAgIHdpbmRvd1tyZW5kZXJOYW1lXS5JdGVtcy5wdXNoKC4uLnBhZ2VkRGF0YS5JdGVtcyk7XHJcbiAgICAgICAgd2luZG93LmFnUmVuZGVyLmh5ZHJhdGUocmVuZGVyTmFtZSk7XHJcbiAgICAgICAgaWYgKHJlbmRlckNvbXBsZXRlKVxyXG4gICAgICAgICAgICByZW5kZXJDb21wbGV0ZShwYWdlZERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXQoKSB7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcucmVuZGVyLnJlZnJlc2gnLCBmaW5kUmVuZGVycyk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcucmVmcmVzaCcsIGZpbmRSZW5kZXJzKTtcclxuXHJcbiAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5yZW5kZXIucmVmcmVzaCcpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG5cclxuICAgICAgICB3aW5kb3cuYWdSZW5kZXIgPSB7XHJcblxyXG4gICAgICAgICAgICBoeWRyYXRlOiBmdW5jdGlvbiAocmVuZGVyTmFtZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBldmVudE5hbWUgPSAnYWcucmVuZGVyLmh5ZHJhdGUuJyArIHJlbmRlck5hbWU7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTsgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW52b2tlOicgKyBldmVudE5hbWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcubGF6eS5yZWZyZXNoJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWdMYW5ndWFnZS5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAocmVuZGVyTmFtZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcucmVuZGVyLicgKyByZW5kZXJOYW1lICsgJy5wYWdlLm5leHQnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG5cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIHByZXZpb3VzOiBmdW5jdGlvbiAocmVuZGVyTmFtZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcucmVuZGVyLicgKyByZW5kZXJOYW1lICsgJy5wYWdlLnByZXZpb3VzJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBtb3JlOiBmdW5jdGlvbiAocmVuZGVyTmFtZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcucmVuZGVyLicgKyByZW5kZXJOYW1lICsgJy5wYWdlLm1vcmUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG5cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIHBhZ2VkUmVzdWx0OiBmdW5jdGlvbiAocmVuZGVyTmFtZSwgc2VydmljZVVybCwgZGF0YSwgcmVuZGVyQ29tcGxldGUsIHByb2Nlc3NSZXF1ZXN0RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5yZW5kZXIuJyArIHJlbmRlck5hbWUgKyAnLnBhZ2UubmV4dCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0UGFnZShyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5yZW5kZXIuJyArIHJlbmRlck5hbWUgKyAnLnBhZ2UucHJldmlvdXMnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNQYWdlKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnJlbmRlci4nICsgcmVuZGVyTmFtZSArICcucGFnZS5tb3JlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vcmVQYWdlKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5pdFBhZ2UocmVuZGVyTmFtZSwgc2VydmljZVVybCwgZGF0YSwgcmVuZGVyQ29tcGxldGUsIHByb2Nlc3NSZXF1ZXN0RGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCk7XHJcblxyXG59KSgpO1xyXG5cclxuXHJcblxyXG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07Il0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsImEiLCJpIiwic2VsZiIsImIiLCJ3aW5kb3ciLCJ0aGlzIiwiYyIsImxlbmd0aCIsIl8iLCJ0eXBlIiwiaXNXaW5kb3ciLCJub2RlVHlwZSIsImQiLCJpc0Z1bmN0aW9uIiwiZ3JlcCIsImNhbGwiLCJoYiIsInRlc3QiLCJmaWx0ZXIiLCJVIiwiZSIsImciLCJaIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlYWR5IiwiaCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY2FjaGUiLCJnZXQiLCJleHBhbmRvIiwiTWF0aCIsInJhbmRvbSIsInJlcGxhY2UiLCJ1YiIsInRvTG93ZXJDYXNlIiwiZ2V0QXR0cmlidXRlIiwidGIiLCJwYXJzZUpTT04iLCJzYiIsInNldCIsImoiLCJrIiwibCIsImFjdGl2ZUVsZW1lbnQiLCJtIiwibm9kZU5hbWUiLCJmaXJzdENoaWxkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJhcHBlbmRDaGlsZCIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwibiIsIm8iLCJLYiIsImV4ZWMiLCJyZW1vdmVBdHRyaWJ1dGUiLCJwIiwicmIiLCJxIiwiZiIsImhhc0RhdGEiLCJhY2Nlc3MiLCJldmVudHMiLCJoYW5kbGUiLCJldmVudCIsImFkZCIsImV4dGVuZCIsInIiLCJxdWVyeVNlbGVjdG9yQWxsIiwibWVyZ2UiLCJzIiwieWIiLCJjaGVja2VkIiwiZGVmYXVsdFZhbHVlIiwidCIsImFwcGVuZFRvIiwiYm9keSIsImdldERlZmF1bHRDb21wdXRlZFN0eWxlIiwiZGlzcGxheSIsImNzcyIsImRldGFjaCIsInUiLCJPYiIsIk5iIiwiZG9jdW1lbnRFbGVtZW50IiwiY29udGVudERvY3VtZW50Iiwid3JpdGUiLCJjbG9zZSIsInYiLCJzdHlsZSIsIlJiIiwiZ2V0UHJvcGVydHlWYWx1ZSIsImNvbnRhaW5zIiwiUWIiLCJQYiIsIndpZHRoIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsInciLCJhcHBseSIsImFyZ3VtZW50cyIsIngiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiWGIiLCJ5IiwiVGIiLCJtYXgiLCJ6Iiwid2IiLCJBIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJZIiwiYm94U2l6aW5nUmVsaWFibGUiLCJwYXJzZUZsb2F0IiwiQiIsInhiIiwiQyIsInByb3RvdHlwZSIsImluaXQiLCJEIiwic2V0VGltZW91dCIsIlliIiwibm93IiwiRSIsImhlaWdodCIsIm9wYWNpdHkiLCJGIiwiY2MiLCJjb25jYXQiLCJJIiwiYmMiLCJEZWZlcnJlZCIsImFsd2F5cyIsImVsZW0iLCJzdGFydFRpbWUiLCJkdXJhdGlvbiIsInR3ZWVucyIsInJ1biIsIm5vdGlmeVdpdGgiLCJyZXNvbHZlV2l0aCIsInByb21pc2UiLCJwcm9wcyIsIm9wdHMiLCJzcGVjaWFsRWFzaW5nIiwib3JpZ2luYWxQcm9wZXJ0aWVzIiwib3JpZ2luYWxPcHRpb25zIiwiY3JlYXRlVHdlZW4iLCJUd2VlbiIsImVhc2luZyIsInB1c2giLCJzdG9wIiwicmVqZWN0V2l0aCIsImNhbWVsQ2FzZSIsImlzQXJyYXkiLCJjc3NIb29rcyIsImV4cGFuZCIsIkgiLCJtYXAiLCJzdGFydCIsImZ4IiwidGltZXIiLCJhbmltIiwicXVldWUiLCJwcm9ncmVzcyIsImRvbmUiLCJjb21wbGV0ZSIsImZhaWwiLCJKIiwibWF0Y2giLCJuYiIsInVuc2hpZnQiLCJLIiwiZWFjaCIsImRhdGFUeXBlcyIsInZjIiwiTCIsImFqYXhTZXR0aW5ncyIsImZsYXRPcHRpb25zIiwiTyIsInpjIiwiUCIsImRlZmF1bHRWaWV3IiwiUSIsIlIiLCJTIiwiVCIsImluZGV4T2YiLCJWIiwiVyIsInRvU3RyaW5nIiwiWCIsImhhc093blByb3BlcnR5IiwiZG9jdW1lbnQiLCIkIiwiZm4iLCJhYiIsImJiIiwiY2IiLCJkYiIsImpxdWVyeSIsImNvbnN0cnVjdG9yIiwic2VsZWN0b3IiLCJ0b0FycmF5IiwicHVzaFN0YWNrIiwicHJldk9iamVjdCIsImNvbnRleHQiLCJmaXJzdCIsImVxIiwibGFzdCIsImVuZCIsInNvcnQiLCJzcGxpY2UiLCJpc1BsYWluT2JqZWN0IiwiaXNSZWFkeSIsImVycm9yIiwiRXJyb3IiLCJub29wIiwiQXJyYXkiLCJpc051bWVyaWMiLCJpc0VtcHR5T2JqZWN0IiwiZ2xvYmFsRXZhbCIsImV2YWwiLCJ0cmltIiwidGV4dCIsImhlYWQiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJtYWtlQXJyYXkiLCJpbkFycmF5IiwiZ3VpZCIsInByb3h5IiwiRGF0ZSIsInN1cHBvcnQiLCJzcGxpdCIsImViIiwiRyIsImdldEVsZW1lbnRCeUlkIiwiaWQiLCJNIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInFzYSIsIk4iLCJzZXRBdHRyaWJ1dGUiLCJqb2luIiwiaWIiLCJjYWNoZUxlbmd0aCIsInNoaWZ0IiwiYXR0ckhhbmRsZSIsInNvdXJjZUluZGV4IiwibmV4dFNpYmxpbmciLCJ2YWx1ZSIsImRpciIsInJlbGF0aXZlIiwibWF0Y2hlcyIsImZpbmQiLCJUQUciLCJ1bmlxdWVTb3J0IiwicG9wIiwiZmIiLCJnYiIsIlJlZ0V4cCIsImpiIiwia2IiLCJsYiIsIm1iIiwib2IiLCJJRCIsIkNMQVNTIiwiQVRUUiIsIlBTRVVETyIsIkNISUxEIiwiYm9vbCIsIm5lZWRzQ29udGV4dCIsInBiIiwicWIiLCJ2YiIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImNoaWxkTm9kZXMiLCJpc1hNTCIsInNldERvY3VtZW50IiwidG9wIiwiYWRkRXZlbnRMaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiYXR0cmlidXRlcyIsImNsYXNzTmFtZSIsImNyZWF0ZUNvbW1lbnQiLCJpbm5lckhUTUwiLCJnZXRCeUlkIiwiZ2V0RWxlbWVudHNCeU5hbWUiLCJnZXRBdHRyaWJ1dGVOb2RlIiwibWF0Y2hlc1NlbGVjdG9yIiwid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwibW96TWF0Y2hlc1NlbGVjdG9yIiwib01hdGNoZXNTZWxlY3RvciIsIm1zTWF0Y2hlc1NlbGVjdG9yIiwiZGlzY29ubmVjdGVkTWF0Y2giLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsInNvcnREZXRhY2hlZCIsImF0dHIiLCJzcGVjaWZpZWQiLCJkZXRlY3REdXBsaWNhdGVzIiwic29ydFN0YWJsZSIsImdldFRleHQiLCJ0ZXh0Q29udGVudCIsIm5vZGVWYWx1ZSIsInNlbGVjdG9ycyIsImNyZWF0ZVBzZXVkbyIsInByZUZpbHRlciIsImxhc3RDaGlsZCIsInBzZXVkb3MiLCJzZXRGaWx0ZXJzIiwibm90IiwiaGFzIiwiaW5uZXJUZXh0IiwibGFuZyIsInRhcmdldCIsImxvY2F0aW9uIiwiaGFzaCIsImZvY3VzIiwiaGFzRm9jdXMiLCJocmVmIiwidGFiSW5kZXgiLCJlbmFibGVkIiwiZGlzYWJsZWQiLCJzZWxlY3RlZCIsInNlbGVjdGVkSW5kZXgiLCJlbXB0eSIsInBhcmVudCIsImhlYWRlciIsImlucHV0IiwiYnV0dG9uIiwiZXZlbiIsIm9kZCIsImx0IiwiZ3QiLCJudGgiLCJyYWRpbyIsImNoZWNrYm94IiwiZmlsZSIsInBhc3N3b3JkIiwiaW1hZ2UiLCJzdWJtaXQiLCJyZXNldCIsImZpbHRlcnMiLCJ0b2tlbml6ZSIsImNvbXBpbGUiLCJzZWxlY3QiLCJleHByIiwidW5pcXVlIiwiaXNYTUxEb2MiLCJpcyIsInBhcnNlSFRNTCIsImNoaWxkcmVuIiwiY29udGVudHMiLCJuZXh0IiwicHJldiIsInNpYmxpbmciLCJjbG9zZXN0IiwiaW5kZXgiLCJwcmV2QWxsIiwiYWRkQmFjayIsInBhcmVudHMiLCJwYXJlbnRzVW50aWwiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldlVudGlsIiwic2libGluZ3MiLCJyZXZlcnNlIiwiQ2FsbGJhY2tzIiwib25jZSIsIm1lbW9yeSIsInN0b3BPbkZhbHNlIiwiZGlzYWJsZSIsInJlbW92ZSIsImxvY2siLCJsb2NrZWQiLCJmaXJlV2l0aCIsImZpcmUiLCJmaXJlZCIsInN0YXRlIiwidGhlbiIsInJlc29sdmUiLCJyZWplY3QiLCJub3RpZnkiLCJwaXBlIiwid2hlbiIsInJlYWR5V2FpdCIsImhvbGRSZWFkeSIsInRyaWdnZXJIYW5kbGVyIiwib2ZmIiwicmVhZHlTdGF0ZSIsImFjY2VwdERhdGEiLCJ1aWQiLCJhY2NlcHRzIiwia2V5IiwiZGVmaW5lUHJvcGVydGllcyIsImRpc2NhcmQiLCJkYXRhIiwicmVtb3ZlRGF0YSIsIl9kYXRhIiwiX3JlbW92ZURhdGEiLCJuYW1lIiwiZGVxdWV1ZSIsIl9xdWV1ZUhvb2tzIiwiY2xlYXJRdWV1ZSIsInNvdXJjZSIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJjaGVja0Nsb25lIiwiY2xvbmVOb2RlIiwibm9DbG9uZUNoZWNrZWQiLCJ6YiIsImZvY3VzaW5CdWJibGVzIiwiQWIiLCJCYiIsIkNiIiwiRGIiLCJnbG9iYWwiLCJoYW5kbGVyIiwidHJpZ2dlcmVkIiwiZGlzcGF0Y2giLCJzcGVjaWFsIiwiZGVsZWdhdGVUeXBlIiwiYmluZFR5cGUiLCJvcmlnVHlwZSIsIm5hbWVzcGFjZSIsImRlbGVnYXRlQ291bnQiLCJzZXR1cCIsImNhcHR1cmUiLCJwYXNzaXZlIiwidGVhcmRvd24iLCJyZW1vdmVFdmVudCIsInRyaWdnZXIiLCJFdmVudCIsImlzVHJpZ2dlciIsIm5hbWVzcGFjZV9yZSIsInJlc3VsdCIsIm5vQnViYmxlIiwicGFyZW50V2luZG93IiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJwcmV2ZW50RGVmYXVsdCIsImlzRGVmYXVsdFByZXZlbnRlZCIsIl9kZWZhdWx0IiwiZml4IiwiZGVsZWdhdGVUYXJnZXQiLCJwcmVEaXNwYXRjaCIsImhhbmRsZXJzIiwiY3VycmVudFRhcmdldCIsImlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIiwiaGFuZGxlT2JqIiwic3RvcFByb3BhZ2F0aW9uIiwicG9zdERpc3BhdGNoIiwiZml4SG9va3MiLCJrZXlIb29rcyIsIndoaWNoIiwiY2hhckNvZGUiLCJrZXlDb2RlIiwibW91c2VIb29rcyIsInBhZ2VYIiwiY2xpZW50WCIsInNjcm9sbExlZnQiLCJjbGllbnRMZWZ0IiwicGFnZVkiLCJjbGllbnRZIiwic2Nyb2xsVG9wIiwiY2xpZW50VG9wIiwibG9hZCIsImJsdXIiLCJjbGljayIsImJlZm9yZXVubG9hZCIsIm9yaWdpbmFsRXZlbnQiLCJyZXR1cm5WYWx1ZSIsInNpbXVsYXRlIiwiaXNTaW11bGF0ZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGltZVN0YW1wIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJyZWxhdGVkVGFyZ2V0Iiwib24iLCJvbmUiLCJFYiIsIkZiIiwiR2IiLCJIYiIsIkliIiwiSmIiLCJMYiIsIk1iIiwib3B0aW9uIiwidGhlYWQiLCJjb2wiLCJ0ciIsInRkIiwib3B0Z3JvdXAiLCJ0Ym9keSIsInRmb290IiwiY29sZ3JvdXAiLCJjYXB0aW9uIiwidGgiLCJjbG9uZSIsImJ1aWxkRnJhZ21lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImNsZWFuRGF0YSIsImFwcGVuZCIsImRvbU1hbmlwIiwicHJlcGVuZCIsImluc2VydEJlZm9yZSIsImJlZm9yZSIsImFmdGVyIiwiaHRtbCIsInJlcGxhY2VXaXRoIiwicmVwbGFjZUNoaWxkIiwic3JjIiwiX2V2YWxVcmwiLCJwcmVwZW5kVG8iLCJpbnNlcnRBZnRlciIsInJlcGxhY2VBbGwiLCJnZXRDb21wdXRlZFN0eWxlIiwiY3NzVGV4dCIsImJhY2tncm91bmRDbGlwIiwiY2xlYXJDbG9uZVN0eWxlIiwicGl4ZWxQb3NpdGlvbiIsInJlbGlhYmxlTWFyZ2luUmlnaHQiLCJtYXJnaW5SaWdodCIsInN3YXAiLCJTYiIsIlViIiwiVmIiLCJwb3NpdGlvbiIsInZpc2liaWxpdHkiLCJXYiIsImxldHRlclNwYWNpbmciLCJmb250V2VpZ2h0IiwiY3NzTnVtYmVyIiwiY29sdW1uQ291bnQiLCJmaWxsT3BhY2l0eSIsImZsZXhHcm93IiwiZmxleFNocmluayIsImxpbmVIZWlnaHQiLCJvcmRlciIsIm9ycGhhbnMiLCJ3aWRvd3MiLCJ6SW5kZXgiLCJ6b29tIiwiY3NzUHJvcHMiLCJtYXJnaW4iLCJwYWRkaW5nIiwiYm9yZGVyIiwic2hvdyIsImhpZGUiLCJ0b2dnbGUiLCJwcm9wIiwib3B0aW9ucyIsImN1ciIsInVuaXQiLCJwcm9wSG9va3MiLCJwb3MiLCJzdGVwIiwibGluZWFyIiwic3dpbmciLCJjb3MiLCJQSSIsIlpiIiwiJGIiLCJfYiIsImFjIiwidW5xdWV1ZWQiLCJvdmVyZmxvdyIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImhpZGRlbiIsIkFuaW1hdGlvbiIsInR3ZWVuZXIiLCJwcmVmaWx0ZXIiLCJzcGVlZCIsInNwZWVkcyIsIm9sZCIsImZhZGVUbyIsImFuaW1hdGUiLCJmaW5pc2giLCJ0aW1lcnMiLCJzbGlkZURvd24iLCJzbGlkZVVwIiwic2xpZGVUb2dnbGUiLCJmYWRlSW4iLCJmYWRlT3V0IiwiZmFkZVRvZ2dsZSIsInRpY2siLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInNsb3ciLCJmYXN0IiwiZGVsYXkiLCJjbGVhclRpbWVvdXQiLCJjaGVja09uIiwib3B0U2VsZWN0ZWQiLCJvcHREaXNhYmxlZCIsInJhZGlvVmFsdWUiLCJlYyIsImZjIiwicmVtb3ZlQXR0ciIsImF0dHJIb29rcyIsImRjIiwicHJvcEZpeCIsImdjIiwicmVtb3ZlUHJvcCIsImhhc0F0dHJpYnV0ZSIsImhjIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInRvZ2dsZUNsYXNzIiwiaGFzQ2xhc3MiLCJpYyIsInZhbCIsInZhbEhvb2tzIiwiaG92ZXIiLCJiaW5kIiwidW5iaW5kIiwiZGVsZWdhdGUiLCJ1bmRlbGVnYXRlIiwiamMiLCJrYyIsIkpTT04iLCJwYXJzZSIsInBhcnNlWE1MIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwibGMiLCJtYyIsIm5jIiwib2MiLCJwYyIsInJjIiwic2MiLCJ0YyIsInVjIiwid2MiLCJ4YyIsImFjdGl2ZSIsImxhc3RNb2RpZmllZCIsImV0YWciLCJ1cmwiLCJpc0xvY2FsIiwicHJvY2Vzc0RhdGEiLCJhc3luYyIsImNvbnRlbnRUeXBlIiwieG1sIiwianNvbiIsInJlc3BvbnNlRmllbGRzIiwiY29udmVydGVycyIsImFqYXhTZXR1cCIsImFqYXhQcmVmaWx0ZXIiLCJhamF4VHJhbnNwb3J0IiwiYWpheCIsIm1pbWVUeXBlIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJkYXRhRmlsdGVyIiwiZGF0YVR5cGUiLCJpZk1vZGlmaWVkIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInN0YXR1c0NvZGUiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwib3ZlcnJpZGVNaW1lVHlwZSIsImFib3J0Iiwic3VjY2VzcyIsIm1ldGhvZCIsImNyb3NzRG9tYWluIiwicGFyYW0iLCJ0cmFkaXRpb25hbCIsImhhc0NvbnRlbnQiLCJoZWFkZXJzIiwiYmVmb3JlU2VuZCIsInRpbWVvdXQiLCJzZW5kIiwiZ2V0SlNPTiIsImdldFNjcmlwdCIsIndyYXBBbGwiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIndyYXBJbm5lciIsIndyYXAiLCJ1bndyYXAiLCJ2aXNpYmxlIiwieWMiLCJBYyIsIkJjIiwiQ2MiLCJlbmNvZGVVUklDb21wb25lbnQiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVBcnJheSIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwiRGMiLCJFYyIsIkZjIiwiR2MiLCJBY3RpdmVYT2JqZWN0IiwiY29ycyIsIm9wZW4iLCJ1c2VybmFtZSIsInhockZpZWxkcyIsIm9ubG9hZCIsIm9uZXJyb3IiLCJyZXNwb25zZVRleHQiLCJzY3JpcHQiLCJjaGFyc2V0Iiwic2NyaXB0Q2hhcnNldCIsIkhjIiwiSWMiLCJqc29ucCIsImpzb25wQ2FsbGJhY2siLCJKYyIsImFuaW1hdGVkIiwiS2MiLCJvZmZzZXQiLCJzZXRPZmZzZXQiLCJsZWZ0IiwidXNpbmciLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJwYWdlWU9mZnNldCIsInBhZ2VYT2Zmc2V0Iiwib2Zmc2V0UGFyZW50Iiwic2Nyb2xsVG8iLCJIZWlnaHQiLCJXaWR0aCIsImNvbnRlbnQiLCJzaXplIiwiYW5kU2VsZiIsIkxjIiwialF1ZXJ5IiwiTWMiLCJub0NvbmZsaWN0IiwiQ2xvc2VQb3B1cCIsImFnb3JhIiwidHJpZ2dlckVsZW1lbnQiLCJBZ29yYURpYWxvZ01vZGFsIiwiQWZ0ZXJMb2FkIiwiQ2xvc2VNb2RhbCIsIkNsZWFyRm9ybXZhbCIsImFnb3JhRGlhbG9nIiwic2VuZGVyIiwiX2RlZmF1bHRzIiwiU2VydmljZVVybCIsIk1vZGFsSWQiLCJQYXJhbXMiLCJIdG1sIiwiUGFyZW50Q3NzIiwiRW5hYmxlQ2xvc2VCdXR0b24iLCJFbmFibGVMb2FkZXIiLCJFbmFibGVBamF4SHRtbExvYWQiLCJIaWRlQ2xvc2VCdXR0b24iLCJDbG9zZVdoZW5Vc2VyUHJlc3NFc2NhcGUiLCJUcmFuc2l0aW9uIiwiQmVmb3JlTG9hZCIsIl9vcHRpb25zIiwiTG9hZE9wdGlvbnMiLCJJc05vdE51bGwiLCJHZXRIdG1sIiwicmVzcG9uc2UiLCJCaW5kSHRtbCIsIlNob3dBbGVydCIsIlNob3dMb2FkaW5nIiwiY29tcG9uZW50SGFuZGxlciIsInVwZ3JhZGVEb20iLCJrZXlkb3duIiwiQ3VzdG9tRXZlbnQiLCJWYWx1ZSIsInVuZGVmaW5lZCIsImRpc3BhdGNoRXZlbnQiLCJpc0Fnb3JhTG9hZGVkIiwiaXNDc3NMb2FkZWQiLCJHZXRQcm9wZXJ0aWVzIiwiJHRoaXMiLCJkZW1hbmRLZXkiLCJsYXlvdXQiLCIkc29ydCIsIiRwYXJlbnQiLCJyZWNvcmRUeXBlIiwiR2V0RGVmYXVsdFNvcnRGb3JSZWNvcmRUeXBlIiwiX2dldENNTkNNTlNvcnRCeSIsIlVybFF1ZXJ5IiwiVHlwZU9mU2VhcmNoIiwiSXNDb250ZW50UGFnZSIsIkRlbWFuZEtleSIsIiRodG1sIiwiJGl0ZW1Db250ZXh0IiwiJHNsaWRlQ29udGV4dCIsIm1sc051bWJlciIsIm1sc0JvYXJkIiwicHJvamVjdENvZGUiLCJpbWFnZVRlbXBsYXRlIiwibmF0aXZlVGFiIiwiY291bnQiLCJwYXJzZUludCIsIiRpdGVtV2l0aElEQ29udGV4dCIsInVJRCIsInRlbXBsYXRlIiwicHJlZml4IiwiJG5hdmlnYXRpb25zIiwiJG5leHQiLCIkcHJldiIsIl9sb2FkTW9yZSIsIiRub2RlIiwiJHNlbmRlciIsIm1sc2JvYXJkIiwibWxzbm8iLCJjb250YWluZXIiLCJidWlsZEZpcnN0VGVtcGxhdGUiLCJnZXRNaWxsaXNlY29uZHMiLCJHZXRQcm9wZXJ0eUltYWdlR2FsbGVyeSIsImFnTGF6eSIsInJlZnJlc2giLCJzZWxlY3RvckVsZW1lbnQiLCJjdXJyZW50U2V0dGluZ3MiLCJsYW5ndWFnZVNvdXJjZXMiLCJsYW5ndWFnZXMiLCJjb2RlIiwibGFiZWwiLCJsb2NhbExhYmVsIiwiY3VycmVuY2llcyIsImJhc2UiLCJmb3JtYXQiLCJ1bml0cyIsInByZXNldHMiLCJjdXJyZW5jeSIsImxhbmd1YWdlIiwibWVzc3VyZW1lbnQiLCJ1bml0Q29udmVydGlvbnMiLCJ0cmFnZXRVbml0IiwiY29uc3RhbnQiLCJub3RhdGlvbiIsInRhcmdldE5vdGF0aW9uIiwicmVjZW50U3RhdGUiLCJ1cGRhdGVMYW5ndWFnZSIsImN1cnJlbnQiLCJhc3NpZ24iLCJsYWJlbHMiLCJQcm9taXNlIiwiY3VycmVudExhYmVscyIsImN1cnJlbnRMYWJlbHNTdHJpbmciLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiZ2V0TGFuZ3VhZ2VMYWJlbHNGcm9tU3RvcmUiLCJleHBpcnkiLCJzZXRIb3VycyIsImdldEhvdXJzIiwidXBkYXRlZE9uIiwiTG9jYWxlIiwiR0VUIiwic2V0TGFuZ3VhZ2VUb1N0b3JlIiwiZ2V0TGFuZ3VhZ2VMYWJlbHMiLCJ1cGRhdGVUb1NlcnZlciIsInJlbG9hZCIsImxhYmVsc1RvQ2hhbmdlIiwiZm9yRWFjaCIsIml0ZW0iLCJleHByZXNzaW9uRm9yQXR0cmlidXRlVmFsdWUiLCJsYXN0SW5kZXgiLCJncm91cHMiLCJMYWJlbElEIiwibGJsIiwiZHVtbXlOb2RlIiwibWF0Y2hIdG1sV2l0aExhYmVsIiwiYXR0cmlidXRlIiwiZXhwcmVzc2lvbkZvckF0dHJpYnV0ZSIsImF0dHJpYnV0ZUlkZW50aWZpZXIiLCJBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVWYWx1ZSIsInVwZGF0ZUxhbmd1YWdlTGFiZWwiLCJMYWJlbHMiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwiZG9tIiwidXBkYXRlUHJpY2UiLCJpc0luaXQiLCJmb3JtYXRTdHJpbmciLCJjb252ZXJ0aW9uUmF0ZXNTdG9yZWQiLCJjb252ZXJ0aW9uUmF0ZXMiLCJzZXREYXRlIiwiZ2V0RGF0ZSIsInRvSVNPU3RyaW5nIiwiZ2V0Q29udmVydGlvblJhdGVzIiwiUmF0ZXMiLCJFeGNoYW5nZVJhdGVzIiwiQ29kZSIsImN1cnJlbmN5TWV0YSIsImZvcm1hdHRlciIsIm51bWJlciIsInRvTG9jYWxlU3RyaW5nIiwiY3VycmVudEN1cnJlbmN5IiwicHJpY2VUb0NoYW5nZSIsImNsYXNzTGlzdCIsImN1cnJlbnRPZmZzZXQiLCJwYXJlbnRDb2xsZWN0aW9uIiwicGFyZW50T2Zmc2V0IiwicGFyZW50RWxlbWVudCIsInBhcmVudFBvaW50cyIsImJvdHRvbSIsInJpZ2h0IiwiaXRlbVBvaW50cyIsImNsYXNzQXhpcyIsInVwZGF0ZUl0ZW1PZmZzZXRDbGFzcyIsImlzRGVmYXVsdEN1cnJlbmN5Q2hhbmdlIiwibm9kZSIsImV4cHJlc3Npb25Gb3JQcmljZSIsInByaWNlQ29udmVydGVkIiwicm91bmQiLCJDb25zdGFudCIsInVwZGF0ZVByaWNlRm9ySXRlbSIsInVwZGF0ZU1lc3N1cmVtZW50IiwiaXNBcHBsaWVkIiwibWVzc3VyZW1lbnRzVG9DaGFuZ2UiLCJ1cGRhdGVJdGVtTWVzc3VyZW1lbnQiLCJyb290RWxlbWVudCIsImlzVW5pdEZvdW5kIiwidW5pdENvbnZlcnRpb25TY2hlbWEiLCJoYXZlVmFsaWRBdHRyaWJ1dGUiLCJnZXRMYWJlbEZvckF0dHJpYnV0ZSIsIm5vdGF0aW9uRXhwcmVzc2lvbiIsImZpbmRNZXNzdXJlbWVudEZyb21BdHRyaWJ1dGUiLCJjdXJyZW50TGFiZWwiLCJsYWJlbFJlcGxhY2VSZXN1bHQiLCJyZXBsYWNlTWVzc3VyZW1lbnQiLCJzZXRMYWJlbEZvckF0dHJpYnV0ZSIsImN1cnJlbnRWYWx1ZSIsImdldFZhbHVlRm9yQXR0cmlidXRlIiwidmFsdWVSZXBsYWNlUmVzdWx0IiwicmVwbGFjZU1lc3N1cmVtZW50V2l0aFVuaXQiLCJzZXRWYWx1ZUZvckF0dHJpYnV0ZSIsImNoaWxkTm9kZSIsImV4cHJlc3Npb24iLCJmaW5kTWVzc3VyZW1lbnRGcm9tTm9kZSIsImN1cnJlbnRUZXh0IiwicmVwbGFjZVJlc3VsdCIsIm1vZGUiLCJyZXBsYWNlU3VjY2VzcyIsInJlcGxhY2VVbml0UmVzdWx0Iiwibm90YXRpb25FeHByZXNzaW9ucyIsIm5vdGF0aW9uT25seUV4cHJlc3Npb25zIiwibWF0Y2hTdWNjZXNzIiwiZ2V0UmVwbGFjZU1lc3N1cmVtZW50RXhwcmVzc2lvbk1hdGNoIiwiZ2V0VmFsdWUiLCJzdGFydEluZGV4IiwiZW5kSW5kZXgiLCJtYXRjaFZhbHVlIiwiZm9ybWF0VmFsdWUiLCJzdWJzdHJpbmciLCJ2YWx1ZUV4cHJlc3Npb24iLCJlbmFibGVMYW5ndWFnZVNlbGVjdG9yIiwiZ2V0RmxhZ0Nzc0NsYXNzIiwiZGV0YWlsIiwibG9jYXRpb25GbGFnIiwibGFuZ3VhZ2VFbGVtZW50IiwiZWxlbWVudCIsImxvY2F0aW9uRWxlbWVudCIsInJlbmRlckxhbmd1YWdlRWxlbWVudCIsInJlbmRlckNob2ljZUxpc3QiLCJpdGVtRWxlbWVudCIsInNvdXJjZUl0ZW0iLCJpc0V2ZW50IiwicmVuZGVyTGFuZ3VhZ2VTZWxlY3RvciIsImZsb29yIiwiYWN0aXZlSXRlbSIsImVuZ2FnZUxhbmd1YWdlU2VsZWN0b3IiLCJkaXNlbmdhZ2VBY3Rpb25MaXN0ZW5lciIsImRpc2VuZ2FnZUxhbmd1YWdlU2VsZWN0b3IiLCJ1cGRhdGVUb3NlcnZlckNhbGwiLCJ1cGRhdGVTdWNjZXMiLCJmaWVsZCIsIm9sZFVwZGF0ZVN1Y2Nlc3MiLCJhZ1JlcXVlc3QiLCJQT1NUIiwicmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9ucyIsInRpdGxlIiwicmVuZGVySXRlbSIsInNlbGVjdGVkSXRlbSIsImZpZWxkS2V5IiwicmVuZGVyRXhpc3QiLCJpdGVtTGlzdCIsIml0ZW1MaXN0VmFsdWUiLCJjbCIsIml0ZW1PcHRpb25zIiwiY2hvaWNlSXRlbSIsInNlbGVjdGVkVmFsdWUiLCJzZWxlY3RlZEl0ZW1Gcm9tU291cmNlIiwic2VydmljZVVybCIsInF1ZXJ5U3RyaW5nIiwiZmV0Y2giLCJhY3Rpb24iLCJhZ0xhbmd1YWdlIiwiYXR0YWNoQWN0aW9ucyIsImV4cHJlc3Npb25TdHJpbmciLCJub3RhdGlvbkV4cHJlc3Npb25TdHJpbmciLCJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiLCJzdWJFeHByZXNzaW9uU3RyaW5nIiwic3ViTm90YXRpb25FeHByZXNzaW9uU3RyaW5nIiwibm90YXRpb25JdGVtIiwiYnVpbGRVbml0Q29udmVydGlvblNjaGVtYSIsIkVuYWJsZURlbWFuZEltcG9ydCIsInNlYXJjaEFjdG9uIiwiJGZvcm0iLCJfdXJsUXVlcnkiLCJjb21wb3NlVXJsUXVlcnkiLCJfcnQiLCJfZGVmYXVsdFNvcnQiLCJfc29ydFZhbHVlIiwicXVlcnkiLCIkcHJlZml4IiwiX3ByZWZpeCIsIkdldFNlYXJjaFByZWZpeEZvclJlY29yZFR5cGUiLCJFbmFibGVTZWFyY2hGb3JtIiwiZm9ybURhdGEiLCJVUkxTZWFyY2hQYXJhbXMiLCJmaW5kTGF6eSIsImJsYW5rSW1hZ2UiLCJkb2NFbCIsImVsZW1lbnRUb3AiLCJlbGVtZW50Qm90dG9tIiwidmlld3BvcnRUb3AiLCJ2aWV3cG9ydEJvdHRvbSIsImlubmVySGVpZ2h0IiwiY2hlY2tpc0luVmlld3BvcnQiLCJzcmNVcmwiLCJpc0F1dG8iLCJnZXRCZXN0Rml0Q29udGFpbmVyIiwiYWRkaXRpb25hbFVybCIsImdldEZvcm1hdHRlZEltYWdlVXJsIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJjb25zb2xlIiwibG9nIiwicm9vdE1hcmdpbiIsInRocmVzaG9sZCIsImF0dGFjaEFjdGlvbiIsImRlZmF1bHRSYXRpb1dpZHRoIiwiZGVmYXVsdFJhdGlvSGVpZ2h0IiwicmF0aW8iLCJyYXRpb01hdGNoIiwiSGVhZGVyQnVyZ2VyQ2hhbmdlIiwicXVlcnlTZWxlY3RvciIsIkJ1cmdlckFjdGl2ZSIsIml0ZW11Y25vZGUiLCJpbm5lcldpZHRoIiwiQnVyZ2VyRGVhY3RpdmUiLCJzY3JvbGxXaWR0aCIsImN1c3RvbUV2ZW50IiwidmFsaWRhdGUiLCJhY2NpdGVtIiwiYWNjb3JkaW9uSXRlbUJvZHkiLCJtYXhIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJBY2NvcmRpb25GbiIsInNpZGVCYXIiLCJ0YWJzQ29udGFpbmVyIiwidGFiIiwiVGFiRm4iLCJtZW51aXRlbSIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJkcm9wcyIsIkVuYWJsZVNlYXJjaGJlbG93VGFiIiwiY2FuY2VsYnRuIiwiZHJvcCIsImlkeCIsImRyb3BEaXYiLCJjbG9zZWJ0biIsIlByb3BlcnR5U2VhcmNoQ29udHJvbFdvcmtpbmciLCJzY3JvbGxZIiwicmlwcGxlYnV0dG9ucyIsImVsIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJyaXBwbGUiLCJSaXBwbGVGbiIsInZpZGVvRWxlbWVudHMiLCJ2aWRlbyIsIlZpZGVvUGxheUZuIiwiX2ZvciIsImlzU3luY2VkIiwidXNlciIsInJlbW92ZUl0ZW0iLCJHdWlkIiwibG9jYWxVc2VyIiwiTmFtZSIsIkZpcnN0TmFtZSIsIkxhc3ROYW1lIiwiRW1haWwiLCJQaG9uZSIsIk1vYmlsZVBob25lIiwidXBkYXRlIiwicmVuZGVyIiwidXBkYXRlUHJvcGVydHlDb2xsZWN0aW9uIiwiaW5pdFByb3BlcnR5Q29sbGVjdGlvbiIsImxvZ2dpbmVkTm9kZSIsImNvbnRhY3QiLCJ3cmFwcGVyIiwidXNlckNvbnRhaW5lciIsImdldExvZ2luZWRJdGVtIiwicmVuZGVyU3RhdGVzIiwiaXNGb3JjZWQiLCJpdGVtcyIsImNvbGxlY3Rpb25UeXBlIiwicHJvcGVydHlDb2xsZWN0aW9uIiwicHJvcGVydHlDb2xsZWN0aW9uU3RyaW5nIiwiZ2V0UHJvcGVydHlDb2xsZWN0aW9uIiwiSXRlbXMiLCJyZWR1Y2UiLCJpdGVtRG9tIiwiUEsiLCJSVCIsInJlbmRlclByb3BlcnR5Q29sbGVjdGlvbkl0ZW0iLCJhZ1VzZXIiLCJjb2xsZWN0aW9uIiwiY3VycmVudFZhbHVlc1N0cmluZyIsIkNvbnRhY3RHdWlkIiwiY29udGFjdGd1aWQiLCJldmVudFR5cGUiLCJjaGVja0ZvclN5bmMiLCJjdXJyZW50RGF0ZVRpbWUiLCJzZXRNaW51dGVzIiwiZ2V0TWludXRlcyIsImRhdGFUb1JldmlldyIsInJlYWRGcm9tU2VydmVyIiwic3lzdGVtRnVuY3Rpb25zIiwiSW50ZXJwb2xhdGlvbiIsImZ1bmN0aW9uQXJnc0xpdGVyYWxzIiwiZnVuY3Rpb25BcmdzVmFsdWVzIiwicGFyZW50UmVuZGVyRnVuY3Rpb24iLCJyZW5kZXJGdW5jdGlvbnMiLCJ0ZW1wbGF0ZVN0cmluZyIsImdldEF0dHJpYnV0ZU5hbWVzIiwiYnVpbGRSZW5kZXJGdW5jdGlvbiIsImNsZWFuUHJlSW50ZXJwb2xhdGlvbiIsImlucHV0VGV4dCIsInJlbmRlckJsb2NrIiwicmVuZGVyVGVtcGxhdGUiLCJ2YXJpYWJsZXMiLCJpc1N5c3RlbUZ1bmN0aW9uIiwiaWRlbnRpZmllciIsImxvY2FsVmFyaWFibGVzIiwiRXh0cmFjdFZhcmlhYmxlc1RvcExldmVsSWRlbnRpZmllcnMiLCJXYXRjaCIsImlzQ2hhbmdlIiwiSXNGdW5jdGlvbiIsIkV4dHJhY3RBcmd1bWVudFZhcmlhYmxlc0ZvckZ1bmN0aW9uRnJvbVN0cmluZyIsImFyZ3VtZW50SXRlbSIsInJlbmRlckZ1bmN0aW9uIiwiRnVuY3Rpb24iLCJpbnRlcnBvbGF0ZU9iamVjdCIsImN1cnJlbnRSZW5kZXJGdW5jdGlvbnMiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiY2hpbGREb20iLCJURVhUX05PREUiLCJQcmVJbnRlcnBvbGF0aW9uIiwicm9vdERvbSIsImlzTWFza2VkIiwiZmFrZUVsZW1lbnQiLCJHZXRWYWx1ZSIsInByb3BlcnR5TmFtZSIsImN1cnJlbnRQcm9wZXJ0eSIsInN1YlByb3BlcnR5IiwiZ2V0VmFsdWVGcm9tRnVuY3Rpb24iLCJnZXRGdW5jdGlvbk5hbWUiLCJHZXRQcm94eU9iamVjdCIsInByb3h5T2JqZWN0IiwiaXRlbVByb3BlcnR5IiwiU2V0UHJvcGVydHlUb1Byb3h5T2JqZWN0IiwiTm90aWZ5IiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIlNldFByb3BlcnR5RGVzY3JpcHRvclRvUHJveHlPYmplY3QiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJDb252ZXJPYmplY3RUb0FyZ3VtZW50QXJyYXkiLCJjb252ZXJ0ZWRWYWx1ZXMiLCJ2YWx1ZXMiLCJyZWZlcmVuY2VOb2RlIiwidmFyaWFibGVzRnJvbVN0cmluZ0V4cHJlc3Npb24iLCJ2YXJpYWJsZVRvcExldmVsSWRlbnRpZmllcnNFeHByZXNzaW9uIiwidmFsdWF0aW9uU3RyaW5nIiwidmFyaWFibGUiLCJFeHRyYWN0VmFyaWFibGVzRnJvbVN0cmluZyIsImZ1bmN0aW9ucyIsImlkZW50aWZpZXJzIiwiZnVuY3Rpb24iLCJmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0IiwiZnVuY3Rpb25Bcmd1bWVudHNFbmQiLCJvcGVuSW5kZXgiLCJmdW5jdGlvbkFyZ3VtZW50cyIsImZ1bmN0aW9uTmFtZSIsIklmIiwibm9kZXNBbmRDb25kaXRpb24iLCJuZXh0Tm9kZSIsIml0ZW1QYXJlbnQiLCJhY3RpdmVOb2RlQW5kQ29uZGl0aW9uIiwiaWRlbnRpZmllcnNVc2VkIiwiQXR0cmlidXRlcyIsImF0dHJpYnV0ZVRvUmVhZCIsImlzRGVmYXVsdCIsInZhbHVhdGlvbkZ1bmN0aW9uQXJndW1lbnRzIiwibm9kZUFuZENvbmRpdGlvbiIsInZhbHVhdGlvbkZ1bmN0aW9uIiwiaW5zZXJ0UG9zdGlvbiIsImZpbmREb21Qb3NpdGlvbiIsImNvbmRpdGlvbmFsTm9kZSIsIlRyYW5zZm9ybUludGVybmFsIiwiaXNVc2VyQ2hhbmdlIiwiUHJlSWYiLCJpZnMiLCJpc0Zha2UiLCJmYWtlRm91bmQiLCJGb3IiLCJodG1sRG9jdW1lbnQiLCJsb29wcyIsImZha2VJdGVtIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiZmFrZUl0ZW1Db3VudCIsImlzZmFrZUl0ZW1Db3VudFJlYWRlZCIsImxvb3BDb25zdHJhaW50IiwiaXRyYXRvckZpbmlzaGVkIiwiZmllbGRzQW5kVmFsdWUiLCJpdHJhdG9yIiwiaHRtbFRvQ2xvbmUiLCJodG1sVG9DbG9uZVBhcmVudCIsImh0bWxUb0Nsb25lTG9jYXRpb24iLCJpdGVtRWxlbWVudHMiLCJpc0RpcnR5RmFrZSIsImNvbGxlY3Rpb25Db250ZXh0IiwiZ2V0Q29sbGVjdGlvbk9iamVjdCIsImNvbGxlY3Rpb25Db250ZXh0RmllbGQiLCJnZXRDb2xsZWN0aW9uTmFtZSIsIndyaXRhYmxlIiwiaXRlbXNDb2xsZWN0aW9uIiwiaXRlbUluZGV4IiwiaXNGaXJzdCIsInJlbW92ZVByZUZvciIsIml0ZW1Gcm9tQ29sbGVjdGlvbiIsImNvbnRleHRPYmplY3QiLCJjbG9uZWRFbGVtZW50IiwiUHJlRm9yUGFydGlhbCIsImdldFBhcmFtZXRlck5hbWUiLCJnZXRGdW5jdGlvbkZyb21Db2xsZWN0aW9uIiwiYXJncyIsIl9fcHJvdG9fXyIsImtleXMiLCJwYXJhbXNTdHJpbmciLCJwYXJhbXMiLCJwYXJhbXNJdGVtIiwiaXNQYXJhbVZhbHVlIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImN1cnJlbnRGdW5jdGlvbiIsIm5leHRJdGVtIiwib2xkTmV4dCIsImxhc3RJdGVtIiwiZmlyc3RJdGVtIiwiUHJlRm9yIiwidGFnTmFtZSIsImNsb25lSXRlbSIsImNsb25lSXRlbUNvdW50IiwiY2xvbmVJdGVtQ291bnRTdHJpbmciLCJQcmVUcmFuc2Zvcm1JbnRlcm5hbCIsImZpbmRSZW5kZXJzIiwicmVzdWx0RnVuY3Rpb24iLCJldmVudE5hbWUiLCJpdGVtSHRtbCIsInJlcXVlc3REYXRhIiwicHJvY2Vzc1JlcXVlc3REYXRhIiwiaW5pdFBhZ2UiLCJyZW5kZXJOYW1lIiwicmVuZGVyQ29tcGxldGUiLCJQYWdlU2l6ZSIsIlBhZ2VOdW1iZXIiLCJwYWdlZERhdGEiLCJhZ1JlbmRlciIsImh5ZHJhdGUiLCJuZXh0UGFnZSIsInByZXZpb3VzUGFnZSIsIm1vcmVQYWdlIiwicHJldmlvdXMiLCJtb3JlIiwicGFnZWRSZXN1bHQiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImRlZmluaXRpb24iLCJvYmoiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyJdLCJzb3VyY2VSb290IjoiIn0=
1
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var a in n)("object"==typeof exports?exports:e)[a]=n[a]}}(self,(()=>(()=>{var __webpack_modules__={264:()=>{function ClosePopup(){$("[data-modaldialog-close]").trigger("click")}agora((function(){$(document).on("click","[data-modaldialog]",(function(){var e=$(this);e.prop("disabled")||(e.prop("disabled",!0),setTimeout((function(){e.prop("disabled",!1)}),2e3),$(this).AgoraDialogModal({AfterLoad:$(this).attr("data-modaldialog-afterLoad")}))})),$(document).on("click","[data-modaldialog-close]",(function(){$(this).AgoraDialogModal({CloseModal:!0}),"clear"==$(this).data("modaldialog-close")&&ClearFormval("[data-request]")})),$(document).on("click","[data-modaldialog-close-form]",(function(){$(this).AgoraDialogModal({CloseModal:!0,AfterLoad:$(this).attr("data-modaldialog-afterLoad")})}))})),function($){function agoraDialog(sender,options){var _defaults={ServiceUrl:"",ModalId:"IBPmodalcontainer",Params:null,Html:null,ParentCss:null,EnableCloseButton:!0,EnableLoader:!0,EnableAjaxHtmlLoad:!1,HideCloseButton:!1,CloseModal:!1,CloseWhenUserPressEscape:!0,Transition:"FadeIn",BeforeLoad:null,AfterLoad:null},_options=$.extend(_defaults,options);if(_options.CloseModal)return $(sender).closest(".agora-mdl-data-dialog-container").trigger("dispose"),$(sender).closest(".agora-mdl-data-dialog-container").removeClass("popup-open"),$(sender).closest(".agora-mdl-data-dialog-container").remove(),void $("body").removeClass("popup-active");function LoadOptions(){IsNotNull(sender.attr("data-modaldialog-src"))&&(_options.ServiceUrl=sender.attr("data-modaldialog-src")),IsNotNull(sender.attr("data-modaldialog-ajax"))&&(_options.EnableAjaxHtmlLoad=sender.attr("data-modaldialog-ajax")),IsNotNull(sender.attr("data-modaldialog-ParentCss"))&&(_options.ParentCss=sender.attr("data-modaldialog-ParentCss")),IsNotNull(sender.attr("data-modaldialog-CloseWhenUserPressEscape"))&&(_options.CloseWhenUserPressEscape="true"==sender.attr("data-modaldialog-CloseWhenUserPressEscape")),IsNotNull(sender.attr("data-modaldialog-HideCloseButton"))&&(_options.HideCloseButton="true"==sender.attr("data-modaldialog-HideCloseButton")),IsNotNull(sender.attr("data-modaldialog-id"))&&(_options.ModalId=sender.attr("data-modaldialog-id")),GetHtml()}function GetHtml(){_options.EnableAjaxHtmlLoad?($("#"+_options.ModalId).remove(),$.ajax({url:_options.ServiceUrl,type:"post",dataType:"html",data:_options.Params,cache:!1,success:function(e){_options.Html=e,BindHtml()},error:function(e){ShowAlert("Unknown Error. Please try later!",3e3,"alert_box",null),_options.EnableLoader&&ShowLoading()},statusCode:{404:function(){ShowAlert("Service not found!",3e3,"alert_box",null),_options.EnableLoader&&ShowLoading()}}})):(_options.AfterLoad&&_options.AfterLoad(),_options.Html=$("#"+sender.attr("data-modaldialog-id")).clone().wrap("#"+sender.attr("data-modaldialog-id")).html()),BindHtml()}function BindHtml(){null!=_options.Html&&($('<div id="'+_options.ModalId+'" class="agora-mdl-data-dialog-container '+_options.ParentCss+'"><div class="agora-mdl-data-dialog-container-body">'+(_options.HideCloseButton?"":'<div data-modaldialog-close="" class="mdl-close"></div>')+_options.Html+'</div><div id="popup" class="mdl-js-snackbar mdl-snackbar"><div class="mdl-snackbar__text"></div><button aria-label="button" class="mdl-snackbar__action" type="button"></button></div> </div>').appendTo("body"),$("#"+_options.ModalId).addClass("popup-open"),$("body").addClass("popup-active"),_options.EnableLoader&&ShowLoading(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom(),$("#"+_options.ModalId).find(".mdl-textfield--floating-label input.mdl-textfield__input:not([placeholder])").attr("placeholder"," "))}_options.AfterLoad&&(_options.AfterLoad=eval("(function() { "+_options.AfterLoad+"("+sender.attr("data-modaldialog-id")+"); })")),_options.EnableLoader&&ShowLoading(),LoadOptions(),$(document).keydown((function(e){"27"==e.keyCode&&_options.CloseWhenUserPressEscape&&($("#"+_options.ModalId).removeClass("popup-open"),$("#"+_options.ModalId).remove(),$("body").removeClass("popup-active"))}))}$.fn.AgoraDialogModal=function(e){return new agoraDialog(this,e)}}(jQuery)},136:()=>{var e=new CustomEvent("onAgoraLoad");function t(e){return null!=e&&null!=e&&e.length>0&&"0"!=e&&0!=e}document.dispatchEvent(e),document.isAgoraLoaded=!0,e=new CustomEvent("onCssLoad"),document.dispatchEvent(e),document.isCssLoaded=!0,function(){function e(e,n,a,o){if(!e.closest("div[contenteditable]").attr("contenteditable")&&void 0!==n||void 0!==a)switch((o=void 0!==o?o:"gallery").toLowerCase()){case"gallery":var r=e.find('[data-sort-object="CMNCMN"]');("undefined"!=r&&null!=r&&r.length>0||!n.match(/(^|\/)(d)?sort\-[a-z]+/g))&&(n=(function(e){var n=e.find('[data-sort-object="CMNCMN"]');if("undefined"!=n&&null!=n&&n.length>0&&t(n.val()))return n.val();return function(e){switch(e){case"PROPERTY":case"PROPERTYRENT":return"/dsort-p";case"AGENT":case"AGENTTEAM":case"OFFICE":return"/sort-n"}return""}("PROPERTY")}(e)+"/"+n.replace("http://","").replace(/(^|\/)(d)?sort\-[a-z]+/g,"")).replace("//","/")),$.ajax({type:"POST",url:"/services/MAX/agoraGetGalleryView.aspx",data:{UrlQuery:n,TypeOfSearch:"SALE",IsContentPage:"true",DemandKey:a},dataType:"html",success:function(r){if(!e.closest("div[contenteditable]").attr("contenteditable")){var i='<section class="result-page" data-ck-propertylist="" data-ck-demand-key="'+a+'" data-ck-property-url="'+n+'" data-ck-demand-layout="'+o+'">'+r+"</section>";e.after(i),e.remove(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom(),$('[data-ck-demand-key="'+a+'"] #propertyGrid').each((function(){$(this).find(".property:not(.init)").each((function(){!function(e){var n=e,a=n.find(".slides");a.attr("data-css-slider","0");var o=n.find("[data-mk]").data("mk"),r=n.find("[data-mlsboard]").data("mlsboard"),i=n.find("[data-detail-url]").data("detail-url"),l=$("[data-pcode]").data("pcode"),s=n.find("[data-mls-photo]").data("mls-photo"),c=n.find("[data-native-tab]").data("native-tab");t(s)||(s="/images/company/"+l+"/NoPhotoImage/image-not-found.jpg");var u=parseInt(a.data("value"),10),d=n.closest("[id]"),f=0==n.length?"un":d.attr("id").replace(/\$/gi,"");(function(e,t,n,a,o,r,i,l){var s=0,c=n+a+o+"_";$('<input type="radio" aria-label="'+c+'slider" name="'+c+'slider" id="'+(c+s)+'" checked />').appendTo(r);var u=$('<div class="nav"></div>'),d=$('<label aria-label="next" aria-controls="myCarousel-items" data-css-slider-nav="propphoto" for="'+(c+(s+1))+'" class="next"><span aria-label="next" class="visuallyhidden">next</span></label>'),f=$('<label aria-label="prev" aria-controls="myCarousel-items" data-css-slider-nav="propphoto" for="'+(c+(parseInt(t,10)-1))+'" class="prev"><span aria-label="prev" class="visuallyhidden">prev</span></label>');if(f.on("click",p),d.on("click",p),f.appendTo(u),d.appendTo(u),"PSB"==$("[data-pcode]").data("pcode"))var m="";else m='target = "_blank"';"undefined"!=l&&""!=l&&1==l&&(m="");var g=$('<li class="slide-container" aria-roledescription="carousel" role="contentinfo"><div class="slide"><div class="Prop_img" role="img" aria-label="bannerImage" style="background-image:url(\''+e+'\');"><a aria-label="'+c+'slider"'+m+'href="'+i+'"></a></div></div></li>');function p(){var e=$(this);f.off("click"),d.off("click"),$.ajax({url:"/services/agoraPropertyPhotos.aspx",data:{mlsboard:a,mlsno:o,container:c},success:function(t){r.append(t),e.trigger("click")}})}g.append(u),g.appendTo(r)})(s,u,f+(new Date).getMilliseconds(),r,o,a,i,c),n.addClass("init")}($(this))}))})),window.agLazy.refresh()}},error:function(){ShowLoading()}});break;case"carousel":$.ajax({type:"POST",url:"/services/agoraGetCarouselItem.aspx",data:{UrlQuery:n,TypeOfSearch:"SALE",IsContentPage:"true",DemandKey:a},dataType:"html",success:function(t){if(!e.closest("div[contenteditable]").attr("contenteditable")){var r='<section class="result-page" data-ck-propertylist="" data-ck-demand-key="'+a+'" data-ck-property-url="'+n+'" data-ck-demand-layout="'+o+'">'+t+"</section>";e.after(r),$('[data-query-list]:not(.init)[data-service-url][data-rt^="CMN"]').each((function(){$(this).trigger("init"),$(this).addClass("init")})),e.remove(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom()}},error:function(){ShowLoading()}})}}$("img[data-demand-key]").each((function(){e($(this),$(this).data("demand-url"),$(this).data("demand-key"),$(this).data("layout"))})),$(document).on("click","[data-ck-href]",null,(function(){e($(this).parents("[data-ck-propertylist]:first"),$(this).data("ck-href"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-key"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-layout"))})),async function(){var e,t,n={languages:[{code:"en",label:"English"},{code:"es",label:"Spanish",localLabel:"Español"},{code:"nl",label:"Dutch",localLabel:"Nederlands"},{code:"pr",label:"Portugese",localLabel:"Português"},{code:"fr",label:"French",localLabel:"Français"}],currencies:[{code:"USD",base:"USD",label:"Dollar",format:"$###,###,###.##"},{code:"AED",base:"USD",label:"United Arab Emirates Dirham",format:"AED###,###,###.##"},{code:"BSD",base:"USD",label:"Bahamian Dollar",format:"B$###,###,###.##"},{code:"CAD",base:"USD",label:"Canadian Dollar",format:"$###,###,###.##"},{code:"DOP",base:"USD",label:"Dominican Peso",format:"RD$###,###,###.##"},{code:"EUR",base:"USD",label:"Euro",format:"€###,###,###.##"},{code:"JMD",base:"USD",label:"Jamaican Dollar",format:"J$###,###,###.##"},{code:"KYD",base:"USD",label:"Cayman Islands Dollar",format:"CI$###,###,###.##"},{code:"MXN",base:"USD",label:"Mexican Peso",format:"$###,###,###.##"},{code:"PAB",base:"USD",label:"Panamanian Balboa",format:"B/.###,###,###.##"}],units:[{code:"imperial",label:"Imperial"},{code:"metric",label:"Metric"}],presets:[{code:"BS",label:"Bahamas",currency:"BSD",language:"en",messurement:"metric"},{code:"CA",label:"Canada",currency:"CAD",language:["en","fr"],messurement:"metric"},{code:"JM",label:"Jamaica",currency:"JMD",language:"en",messurement:"metric"},{code:"KY",label:"Cayman Islands",currency:"KYD",language:"en",messurement:"metric"},{code:"TC",label:"Turks & Caicos Islands",localLabel:"",currency:"USD",language:"en",messurement:"metric"},{code:"US",label:"United States",localLabel:"",currency:"USD",language:"en",messurement:"imperial"},{code:"DY",label:"Dominican Republic",localLabel:"República Dominicana",currency:"USD",language:"en",messurement:"metric"},{code:"ES",label:"Spain",localLabel:"España",currency:"USD",language:"en",messurement:"metric"},{code:"MX",label:"Mexico",localLabel:"México",currency:"MXN",language:"en",messurement:"metric"},{code:"PA",label:"Panama",localLabel:"Panamá",currency:"PAB",language:"en",messurement:"metric"},{code:"NL",label:"Nederlands",localLabel:"Nederland",currency:"EUR",language:"en",messurement:"metric"},{code:"PT",label:"Portugal",currency:"EUR",language:"en",messurement:"metric"}],unitConvertions:[{unit:"SQFT",tragetUnit:"Sq.M",constant:.092903,notation:["Sqft","Sq.Ft","Sq.Ft.","Sq. Ft.","SF"]},{unit:"MI",tragetUnit:"KM",constant:1.60934,notation:["mi","miles","mile"]},{unit:"AC",tragetUnit:"SQM",constant:4046.86,notation:["acre","acres"]},{unit:"LOTSIZE",tragetUnit:"Lot Size",targetNotation:"㎡",constant:4046.86,notation:["Lot Size"]}]},a=null;async function o(){var e=y();if(null==a&&(a=Object.assign({},e)),e?.language==a?.language){a=Object.assign({},e);var t=await async function(){return new Promise((async function(e,t){var n=await async function(){var e=window.localStorage.getItem("LOCALLABELS"),t=null;null!=e&&(t=JSON.parse(e));return t}(),a=y();if(null!=n){var o=new Date;if(o.setHours(o.getHours()-1),new Date(n.updatedOn)>o&&n.Locale.indexOf(a.language)>-1)return void e(n)}(n=await _("/services/agoraClient.ashx",{type:"LABELS"})).updatedOn=new Date,r(n),e(n)}))}();e?.language&&-1==t.Locale.indexOf(e.language)&&(await A("language"),window.location.reload());var n=document.querySelectorAll("[ag-l-k]");n&&n.forEach((function(e){!async function(e,t){var n=e.getAttribute("ag-l-k"),a=null;if(t[n]||l.test(n))if(e.childNodes&&1==e.childNodes.length)if(l.lastIndex=0,l.test(n)){l.lastIndex=0;for(var o=n;null!=(a=l.exec(o));)o=o.replace(a[0],t[a.groups.LabelID]?t[a.groups.LabelID].lbl:"");e.childNodes[0].textContent=o}else e.childNodes[0].textContent=t[n]?t[n].lbl:"";else if(t[n]){var r=document.createElement("span");r.innerHTML=t[n].lbl,s(e,r)}for(var c=0;c<e.attributes.length;c++){var u=e.attributes[c];if(i.lastIndex=0,null!=(a=i.exec(u.name))){for(var d=a.groups.Attribute,f=u.value;null!=(a=l.exec(f));)f=f.replace(a[0],t[a.groups.LabelID]?t[a.groups.LabelID].lbl:"");e.setAttribute(d,f)}}}(e,t.Labels)}))}else window.location.reload()}async function r(e){window.localStorage.setItem("LOCALLABELS",JSON.stringify(e))}var i=/ag\-l\-k\-(?<Attribute>[^\=]+)/gm,l=/\[(?<LabelID>[^\]]+)\]/gm;async function s(e,t){for(var n=0;n<t.childNodes.length;n++)if(t.childNodes[n]?.textContent&&e.childNodes[n]?.textContent)e.childNodes[n].textContent=t.childNodes[n]?.textContent;else{if(!(n<t.childNodes.length&&n<e.childNodes.length))return;s(e.childNodes[n],t.childNodes[n])}}async function c(e){var t,a,o=await async function(){return new Promise((async function(e,t){var n=localStorage.getItem("CONVERTIONRATES"),a=null;if(n&&null!=n){a=JSON.parse(n);var o=new Date;if(o.setDate(o.getDate()-1),new Date(a.updatedOn)>o)return void e(a)}(a=await _("/services/agoraClient.ashx",{type:"CONVERTIONRATES"})).updatedOn=(new Date).toISOString(),localStorage.setItem("CONVERTIONRATES",JSON.stringify(a)),e(a)}))}(),r=y();if(r.currency){var i=o.Rates?.ExchangeRates?.filter((function(e){return e.Code==r.currency}))[0],l=n.currencies.filter((function(e){return e.code==r.currency}))[0];l&&(i.formatter=(t=l.format,a=t.replace(/[#\,\.]+/gi,""),function(e){return a+e.toLocaleString("en-US")}));var s=i.Code,c=e?document.querySelectorAll("[ag-l-p]:not(.is-applied)"):document.querySelectorAll("[ag-l-p]");c&&c.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||(async function(e){if(!e.classList.contains("is-applied")){var t=e.getBoundingClientRect(),n=null,a=null!=(n=e.closest("article"))&&n.length>0?n[0].getBoundingClientRect():e.parentElement?.getBoundingClientRect(),o={y:(a.top+a.bottom)/2,x:(a.left+a.right)/2},r={y:(t.top+t.bottom)/2,x:(t.left+t.right)/2},i="ag-l-p-p";i+="-"+(o.x>r.x?"l":"r"),i+="-"+(o.y>r.y?"b":"t"),e.classList.add(i)}}(e),e.classList.add("is-applied"),async function(e,t,n){var a=null!=e.getAttribute("ag-l-p-c")&&null==e.getAttribute("ag-l-p-o");if(e.getAttribute("ag-l-p-c")==n&&a)return;for(var o=0;o<e.childNodes.length;o++){var r=e.childNodes[o],i=null;if(u.lastIndex=0,r.textContent&&null!=(i=u.exec(r.textContent))){a&&e.setAttribute("ag-l-p-o",i[0]),u.lastIndex=0;var l=Math.round(parseFloat(e.getAttribute("ag-l-p"))*t.Constant);return void(r.textContent=r.textContent.replace(i[0],t.formatter?t.formatter(l):l.toString()))}}}(e,i,s))}))}}var u=/(([^A-z0-9]|[A-Z]|[A-Z]{3})*\s?[0-9\,\.]+)/gm;async function d(e){var t="metric"==y().messurement,n=t?document.querySelectorAll("[ag-l-m]:not(.is-applied)"):document.querySelectorAll("[ag-l-m]");t?setTimeout((function(){n&&n.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||(f(e,e),e.classList.add("is-applied"))}))}),e?500:0):n&&n.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||(e.dispatchEvent(new CustomEvent("ag.language.messurement.revert")),e.classList.remove("is-applied"))}))}async function f(e,t,a,o,r){if(!o||!r){if(function(e){var t=n.unitConvertionSchema.haveValidAttribute(e)?n.unitConvertionSchema.getLabelForAttribute(e).match(n.unitConvertionSchema.notationExpression):null;return null!=t}(e)){var i=n.unitConvertionSchema.getLabelForAttribute(e),l=await m(i,1);n.unitConvertionSchema.setLabelForAttribute(e,l.content);var s=n.unitConvertionSchema.getValueForAttribute(e),c=await g(s,2,l.units[0]);n.unitConvertionSchema.setValueForAttribute(e,c.content),t.addEventListener("ag.language.messurement.revert",(function(){n.unitConvertionSchema.setLabelForAttribute(e,i),n.unitConvertionSchema.setValueForAttribute(e,s)}))}else e?.childNodes?.length>0&&e.childNodes.forEach((async function(e){if(e?.textContent&&function(e){return n.unitConvertionSchema.expression.test(e.textContent)||n.unitConvertionSchema.notationExpression.test(e.textContent)}(e)){var a=e.textContent,o=await m(a);o.success?e.textContent=o.content:(o=await m(e.textContent,1),e.textContent=o.content,f(e.parentElement,t,!1,!0,o.units[0])),t.addEventListener("ag.language.messurement.revert",(function(){e.textContent=a}))}else f(e,t)}));return!1}e?.childNodes?.length>0&&e.childNodes.forEach((async function(e){if(e?.textContent){var n=e.textContent,a=await g(e.textContent,2,r);a.success&&(e.textContent=a.content,t.addEventListener("ag.language.messurement.revert",(function(){e.textContent=n})))}}))}async function m(e,t){var a=[],o=!1;for(var r of(t||(t=0),n.unitConvertions)){var i=await g(e,t,r);e=i.content,o|=i.success,i.success&&a.push(r),n.unitConvertionSchema.notationExpressions[r.unit].lastIndex=-1,n.unitConvertionSchema.notationOnlyExpressions[r.unit].lastIndex=-1}return{content:e,success:o,units:a}}async function g(e,t,a){for(var o=null,r=!1;null!=(o=p(e,a,t));){r=!0;var i=1==t?0:parseFloat(n.unitConvertionSchema.getValue(o.groups.V)),l=o.groups.N,s=o.index,c=s+o[0].length,u=(1!=t?o[0].replaceAll(o.groups.V,n.unitConvertionSchema.formatValue(i*a.constant)):o[0]).replaceAll(l,a.tragetUnit);if(2==t&&a.targetNotation&&(u+=" "+a.targetNotation),e=e.substring(0,s)+u+e.substring(c),2==t)return{content:e,success:r}}return{content:e,success:r}}function p(e,t,a){return 0==a?n.unitConvertionSchema.notationExpressions[t.unit].exec(e):1==a?n.unitConvertionSchema.notationOnlyExpressions[t.unit].exec(e):2==a?(n.unitConvertionSchema.valueExpression.lastIndex=-1,n.unitConvertionSchema.valueExpression.exec(e)):null}async function h(t){b("US").split(" ").map((function(e){t.classList.add(e)})),document.body.addEventListener("ag.language.update",(function(e){t.className=t.className.replace(/fflag\-[A-Z]{1,2}/gi,""),b(e.detail.code).split(" ").map((function(e){t.classList.add(e)}));y()})),t.addEventListener("click",(async function(a){e||(e=await async function(){var e,t,a=new S("span"),o=a.n("span");function r(e){C(t,"Language","language",e,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e?e.localLabel?e.localLabel:e.label:""}))}C(o,"Location","code",n.presets,(function(e,t){e.n("i").a("class",b(t.code)),e.n("b").h(t.localLabel?t.localLabel:t.label)}),(function(t,a){return e.a("class",b(t.code)),r(n.languages.filter((function(e){return Array.isArray(t.language)?t.language.indexOf(e.code)>-1:e.code==t.language}))),a||document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:t})),t.localLabel?t.localLabel:t.label})),e=o.n("i"),t=a.n("span"),r(n.languages),C(a.n("span"),"Currency","currency",n.currencies,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),C(a.n("span"),"Property Messurement","messurement",n.units,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),C(a.n("span"),"Distance Messurement","messurement",n.units,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),a.node.setAttribute("ag-language-select",""),document.body.appendChild(a.node);var i=y();i?.code&&document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:i}));return a}()),a.stopPropagation(),async function(t){var n=t.getBoundingClientRect();e.node.style.top=Math.floor(n.top-8)+"px",e.node.style.right="calc(100% - "+Math.floor(n.right+8)+"px)",e.node.querySelectorAll(".active")?.forEach((function(e){e.classList.remove("active")})),e.node.classList.add("active")}(t),document.body.addEventListener("click",v)}))}function v(t){t.stopPropagation(),null==t.target.closest("[ag-language-select],[ag-language]")&&(document.body.removeEventListener("click",v),async function(t){e.node.classList.remove("active")}(t.target))}function b(e){return"fflag ff-lg fflag-"+e}function y(){var e=window.localStorage.AGLANGUAGE,t={};return e&&""!=e&&(t=JSON.parse(e)),t}var E=null,L=null;function w(e,t){var n=y();if(null==n&&(n={}),!n[e]||n[e]!=t){n[e]=t,window.localStorage.setItem("AGLANGUAGE",JSON.stringify(n)),null!=E&&clearTimeout(A),E=setTimeout((async function(){E=null,await A(e),null!=L&&(L(),L=null)}),100);var a=L;L=function(){null!=a&&a(),document.body.dispatchEvent(new CustomEvent("ag.language.change."+e))}}}async function A(e){var n=y();JSON.stringify(t)!=JSON.stringify(n)&&(t=n,n&&n.code&&await window.agRequest.POST("/services/agoraClient.ashx",Object.assign({type:"SET"},n)))}var x={};function C(t,n,a,o,r,i){var l=n.toLowerCase().replace(/[^A-z0-9]/gi,""),s=!!x["itemList"+l];s||t.h(n);var c=s?x["itemList"+l]:x["itemList"+l]=t.n("span"),u=s?x["itemListValue"+l]:x["itemListValue"+l]=c.n("label");if(u.h("Selected Value"),!s){u.cl((function(t){t.stopPropagation(),e.node.querySelectorAll(".active")?.forEach((function(e){e!=u.node&&e.classList.remove("active")})),u.node.classList.contains("active")?u.node.classList.remove("active"):u.node.classList.add("active")}))}var d=s?x["itemOptions"+l]:x["itemOptions"+l]=c.n("span");d.h(""),o.map((function(e){var t=d.n("label");t.cl((function(){u.node.classList.remove("active"),w(a,e.code),u.h(i(e))})),r(t,e)})),a&&""!=a&&(x["General"+l]||(x["General"+l]=function(e){document.body.dispatchEvent(new CustomEvent("ag.language.update."+l,{detail:e.detail}))},document.body.addEventListener("ag.language.update",x["General"+l])),x["Field"+l]||(x["Field"+l]=function(e){var t=e.detail[a],n=Array.isArray(t)?t[0]:t,r=o.find((function(e,t){return e.code==n}));i&&(w(a,n),u.h(i(r,!0)))},document.body.addEventListener("ag.language.update."+l,x["Field"+l])))}function S(e){return this.node=document.createElement(e),this}async function _(e,t){var n="";for(var a in t)n=n+(""!=n?"&":"")+a+"="+t[a];return e+=e.indexOf("?")>-1?"&":"?"+n,(await fetch(e,{method:"GET",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()}S.prototype.a=function(e,t){return this.node.setAttribute(e,t),this},S.prototype.n=function(e){var t=new S(e);return this.node.appendChild(t.node),t},S.prototype.h=function(e){return this.node.innerHTML=e,this},S.prototype.cl=function(e){return this.node.removeEventListener("click",e),this.node.addEventListener("click",e),this},window.agLanguage={refresh:function(){document.body.dispatchEvent(new CustomEvent("ag.language.refresh.currency"))}},async function(){document.querySelectorAll("[ag-language]").forEach(h);var e=y();if(e?.code)document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:e}));else{for(var t in e=n.presets.filter((function(e){return"US"==e.code}))[0])w(t,Array.isArray(e[t])?e[t][0]:e[t]);document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:e}))}c(!0),e.language&&-1==e.language.indexOf("en")?o():(a=Object.assign({},e),r({Locale:"en_US"})),async function(){document.body.addEventListener("ag.language.change.language",(function(){o()})),document.body.addEventListener("ag.language.change.currency",(function(){c()})),document.body.addEventListener("ag.language.change.messurement",(function(){d()})),document.body.addEventListener("ag.lazy.refresh",(function(){d()})),document.body.addEventListener("ag.language.refresh.currency",(function(){c()}))}(),n.unitConvertionSchema=await async function(){var e="",t="",a={notationExpressions:{},notationOnlyExpressions:{},getValue:function(e){return parseFloat(e.replaceAll(/[^0-9\\.]/gi,""))},formatValue:function(e){return e.toLocaleString("en-US",{maximumFractionDigits:2})},haveValidAttribute:function(e){return!!e.hasAttribute&&e.hasAttribute("data-th")},getLabelForAttribute:function(e){return e.getAttribute?e.getAttribute("data-th"):""},setLabelForAttribute:function(e,t){e.setAttribute&&e.setAttribute("data-th",t)},getValueForAttribute:function(e){return e.innerText},setValueForAttribute:function(e,t){e.innerText=t}};return n.unitConvertions.forEach((function(n){var o="",r="";n.notation.forEach((function(e){r+=(""!=r?"|":"")+"((?<N>"+e.replaceAll(/\s/gi,"\\s").replaceAll(/([^0-9A-z])/gi,"\\$1")+")(\\s|[^A-z]|$))",o+=(""!=o?"|":"")+"((?<V>[0-9\\,\\.]+)(\\n|\\s)*(?<N>"+e.replaceAll(/\s/gi,"\\s").replaceAll(/([^0-9A-z])/gi,"\\$1")+")(\\s|[^A-z]|$))"})),a.notationExpressions[n.unit]=new RegExp(o,"gmi"),a.notationOnlyExpressions[n.unit]=new RegExp(r,"gmi"),e+=(""!=e?"|":"")+"("+o+")",t+=(""!=t?"|":"")+"("+r+")"})),a.expression=new RegExp(e,"gmi"),a.notationExpression=new RegExp(t,"gmi"),a.valueExpression=new RegExp("((?<V>[0-9\\,]+(\\.[0-9]+)?)(\\n|\\s)*)","gmi"),a}(),d(!0)}()}(),$(document).on("change",'[data-ck-propertylist] [data-sort-object="CMNCMN"]',{},(function(){e($(this).parents("[data-ck-propertylist]:first"),$(this).parents("[data-ck-property-url]:first").data("ck-property-url"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-key"),$(this).parents("[data-ck-propertylist]:first").data("ck-demand-layout"))}))}(),function(){function e(e){setTimeout((function(){var t=$(e).closest("[data-search-form]"),n=composeUrlQuery({select:t}),a=t.data("search-form"),o=$('[data-sort-object="'+a+'"]'),r=t.data("default-search"),i=t.data("default-sort");if(void 0!==r&&""!=r&&-1==n.indexOf("/address-")&&-1==n.indexOf("/mls-")&&(n+=r),o.length>0){var l=o.val();n+=null!=l&&""!=l?l:""}else void 0!==i&&null!=i&&""!=i&&(n+=i);t.triggerHandler("search",[{query:n}])}),200)}$(document).on("click","[data-search-form] [data-search-button]",{},(function(){e(this)})),$(document).on("keydown","[data-search-form] [data-search-action]",{},(function(t){13==t.keyCode&&e(this)})),$("[data-search-form]").on("search",(function(e,n){var a=$(this),o=a.data("search-prefix"),r=t(o)&&"undefined"!=o?o:function(e){switch(e){case"PROPERTY":return"/properties";case"PROPERTYRENT":return"/property-search-map-on-rent";case"PROPERTYSOLD":return"/property-search-map/sold";case"AGENT":case"AGENTTEAM":return"/real-estate-agents";case"OFFICE":return"/real-estate-offices";case"BLOG":return"/blog/search"}return"/"}(a.data("search-form"));/^\/\//.test((null!=r&&""!=r&&"undefined"!=r?r:"")+n.query)||(window.location=(null!=r&&""!=r&&"undefined"!=r?r:"")+n.query)}))}(),window.agRequest={GET:async function(e,t){var n="";for(var a in t)n=n+(""!=n?"&":"")+a+"="+t[a];return e+=e.indexOf("?")>-1?"&":"?"+n,(await fetch(e,{method:"GET",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()},POST:async function(e,t){var n=new URLSearchParams;for(var a in t)n.append(a,t[a]);return(await fetch(e,{method:"POST",cache:"no-cache",body:n})).json()}},async function(){async function e(){document.querySelectorAll('[data-src]:not(.ag-lazy):not(.no-ag):not([data-src*="{{"])').forEach((function(e,n){e.classList.add("ag-lazy");var a=function(){!async function(e,n){var a="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";if(await async function(e){var t=e.getBoundingClientRect(),n=document.body,a=document.documentElement,o=window.pageYOffset||a.scrollTop||n.scrollTop,r=(window.pageXOffset||a.scrollLeft||n.scrollLeft,a.clientTop||n.clientTop||0),i=(a.clientLeft||n.clientLeft,t.top+o-r),l=t.bottom+o-r;let s=o,c=s+window.innerHeight;return l>s&&i<c}(e)){if(null==e)return;var o=await async function(e,n){if(null==n)return null;var a=n.hasAttribute("data-ratio-auto");if(a)return{url:e};var o=await t(n,16,9);if(null==o)return null;var r=/.*\?(.*?(mh|mw)\=(\d+))*/gi.exec(e),i="";null!=n.getAttribute("data-crop")&&(i+="&mode=crop");e.indexOf("/"),0;return null!=r?{url:e,size:o}:{url:`${e}?`+(o.width>0?`mw=${o.width}`+(o.height>0?"&":""):"")+(o.height>0?`mh=${o.height}`:"")+`${i}`,size:o}}(e.getAttribute("data-src"),e);"VIDEO"==e.nodeName?setTimeout((function(){e.setAttribute("src",o.url)}),1e4):"OBJECT"==e.nodeName||"AUDIO"==e.nodeName?e.setAttribute("src",o.url):"IMG"==e.nodeName?(e.addEventListener("load",(function(){e.getAttribute("src")!=a&&e.classList.add("ag-lazy-s")})),e.setAttribute("src",a),null!=o&&(o.size&&(o.size.width>0&&e.setAttribute("width",o.size.width),o.size.height>0&&e.setAttribute("height",o.size.height)),e.setAttribute("src",o.url))):e.style["background-image"]=`url('${o.url}')`,n()}new IntersectionObserver((function(){console.log(e,"View")}),{root:null,rootMargin:"0px",threshold:.1})}(e,(function(){document.body.removeEventListener("ag.lazy",a)}))};document.body.addEventListener("ag.lazy",a),a()}))}async function t(e,n,a){if(null==e)return null;var o=e.getBoundingClientRect(),r=e.getAttribute("data-ratio"),i=null;r&&null!=r&&null!=(i=/^(?<width>[0-9\.]{1,4}):(?<height>[0-9\.]{1,4})$/gi.exec(r))&&(0==(n=parseFloat(i.groups.width))&&(n=-1),0==(a=parseFloat(i.groups.height))&&(a=-1));var l=o.width,s=o.height;return e.classList.contains("ag-lazy")&&(l=e.getAttribute("width"),s=e.getAttribute("height"),null!=l&&null!=l&&""!=l||(l=e.style.width),l=null==l||null==l||""==l?0:parseInt(l.replace(/[^\d]+/gi,"")),s=null==s||null==s||""==s?0:parseInt(s.replace(/[^\d]+/gi,""))),l!=s&&(null==l||null==s||s<l/n*a||l<s/a*n)&&(l>0?s=l/n*a:l=s/a*n),(l>0||n<0)&&(s>0||a<0)?(l=Math.floor(l),s=Math.floor(s),{width:n<0?0:l+(10-l%10),height:a<0?0:s+(10-s%10)}):await t(e.parentElement,n,a)}async function n(){if(null!=document.querySelector(".burger-c")){async function e(){document.querySelector(".burger-c").classList.contains("item-n-2")&&(document.querySelector(".burger-c").classList.remove("item-n-2"),document.querySelector(".burger-c").classList.add("item-n-1"));const e=document.querySelector(".item-uc");document.querySelector(".item-h").querySelector("nav").insertBefore(e,document.querySelector(".item-h").querySelector("nav").firstChild)}window.innerWidth<=1024&&e(),window.innerWidth>1024&&async function(){document.querySelector(".burger-c").classList.contains("item-n-1")&&(document.querySelector(".burger-c").classList.remove("item-n-1"),document.querySelector(".burger-c").classList.add("item-n-2"));const e=document.querySelector(".item-uc");document.querySelector(".item-h").appendChild(e)}(),document.querySelector(".burger-c ~ nav").offsetWidth<document.querySelector(".burger-c ~ nav").scrollWidth&&e()}}document.addEventListener("DOMContentLoaded",(async function(){document.body.addEventListener("ag.lazy.refresh",e),document.body.addEventListener("ag.refresh",e);var t=new CustomEvent("ag.lazy.refresh");document.body.dispatchEvent(t),document.addEventListener("scroll",(function(e){var t=new CustomEvent("ag.lazy");document.body.dispatchEvent(t)})),t=new CustomEvent("ag.lazy"),document.body.dispatchEvent(t),window.agLazy={refresh:function(){var e=new CustomEvent("ag.lazy.refresh");document.body.dispatchEvent(e)},validate:function(){var e=new CustomEvent("ag.lazy");document.body.dispatchEvent(e)}}})),async function(){null!=document.querySelector(".item-acc-i")&&document.querySelectorAll(".item-acc-i").forEach((e=>{const t=e.closest(".item-acc-c");e.classList.contains("open")&&(t.style.maxHeight=t.scrollHeight+"px"),e.addEventListener("click",(()=>{e.classList.toggle("open"),e.classList.contains("open")?t.style.maxHeight=t.scrollHeight+"px":e.classList.contains("open")||(t.style.maxHeight=document.querySelector(".item-acc-i").offsetHeight+"px")}))}))}(),async function(){null!=document.querySelector(".item-tab-b")&&document.querySelectorAll(".item-tab-b").forEach(((e,t)=>{e.addEventListener("click",(()=>{const n=document.querySelectorAll(".item-tab-c"),a=e.parentElement,o=a.parentElement;a.querySelectorAll(".item-tab-b").forEach((e=>{e.classList.remove("active")})),o.querySelectorAll(".item-tab-c").forEach((e=>{e.classList.remove("active"),n[t].classList.add("active")})),e.classList.add("active")}))}))}(),async function(){if(null!=document.querySelector(".item-sea")){document.querySelectorAll(".con-menu a").forEach((function(e){e.addEventListener("click",(function(){document.querySelector(".label-con").setAttribute("data-country",e.innerHTML),e.closest(".item-dr-c").previousElementSibling.classList.contains("active")&&e.closest(".item-dr-c").previousElementSibling.classList.remove("active")}))}));const t=document.querySelectorAll(".item-dr > .item-dr-la");async function e(){window.innerWidth<=1024&&(document.querySelector(".item-onstxt").addEventListener("click",(function(){document.body.classList.add("srch-opnd")})),document.querySelectorAll(".cancel-btn").forEach((function(e){e.addEventListener("click",(function(){document.body.classList.remove("srch-opnd")}))})))}t.forEach(((e,n)=>{e.addEventListener("click",(()=>{var a;a=n,e.classList.toggle("active"),t.forEach(((e,t)=>{t!==a&&e.classList.remove("active")}))}))})),window.addEventListener("mouseup",(function(e){t.forEach((t=>{e.target.closest(".item-dr-la")||e.target.closest(".item-dr-c")||t.classList.remove("active")}))})),document.querySelectorAll(".item-cl").forEach((function(e){e.addEventListener("click",(function(){e.closest(".item-dr-c").previousElementSibling.classList.contains("active")&&e.closest(".item-dr-c").previousElementSibling.classList.remove("active")}))})),e(),window.addEventListener("resize",e)}}(),window.addEventListener("scroll",(async function(){window.scrollY>10?document.body.classList.add("scroll"):document.body.classList.remove("scroll")})),n(),window.addEventListener("resize",n),async function(){var e=document.querySelectorAll(".a-b-1, .a-b-2, .a-b-3, .a-b-4, .a-b-5");null!=e&&e.forEach((e=>{e.addEventListener("click",(function(e){var t=e.offsetX,n=e.offsetY;if(document.getElementsByClassName("ripple").length<10){var a=document.createElement("span");a.classList.add("ripple"),a.style.left=t+"px",a.style.top=n+"px",this.appendChild(a),setTimeout((function(){a.remove()}),1e3)}}))}))}(),async function(){var e=document.querySelectorAll(".video-play");null!=e&&e.forEach((e=>{e.addEventListener("playing",(function(){e.closest("figure").classList.add("no-btn")})),e.addEventListener("pause",(function(){e.closest("figure").classList.remove("no-btn")}))}))}()}(),$(document).on("click","[data-for]",(function(e){try{var t=$(this).data("for");$('[for="'+t+'"]').trigger("click")}catch(e){}})),async function(){var e=!1;async function t(){var e=null;return null!=window.localStorage.getItem("AGUSER")&&(e=JSON.parse(window.localStorage.getItem("AGUSER"))),e}async function n(e){if(null==e)window.localStorage.removeItem("AGUSER"),document.body.dispatchEvent(new CustomEvent("ag.user.clear"));else if(e.Guid){var t={};t.Guid=e.Guid,t.Name=e.Name,t.FirstName=e.FirstName,t.LastName=e.LastName,t.Email=e.Email,t.Phone=e.Phone,t.MobilePhone=e.MobilePhone,window.localStorage.setItem("AGUSER",JSON.stringify(t)),async function(){}()}}async function a(){document.querySelectorAll("[ag-user]").forEach((function(n){!async function(n){n.classList.add("is-applied");n.cloneNode(!0);var a=await t();if(null!=a){!async function(){e?o():document.body.addEventListener("ag.sync.verified.contact",(function(){o()}));document.body.addEventListener("ag.lazy.refresh",(function(){o()})),document.body.addEventListener("ag.user.refresh.collection",(function(){o(!0)})),document.body.addEventListener("ag.user.clear.collection",(function(){window.localStorage.removeItem("AGUSERCOLLECTION3")})),document.body.addEventListener("ag.user.clear",(function(){document.body.dispatchEvent(new CustomEvent("ag.user.clear.collection"))}))}();var i=await async function(e){var t=new r("p");t.a("ag-user","");var n=t.n("button");n.a("class","user-logged-in a-b-1 f-s-2 u-logined s-c-p m-l-16 xa-b-w-l r-b"),n.h(e.Name),n.cl((function(e){return e.preventDefault(),n.node.classList.contains("active")?n.node.classList.remove("active"):n.node.classList.add("active"),!1}));var a=t.n("span");return a.n("span").h("Hi, "+e.Name),a.n("input").a("type","hidden").a("id","CONTACT_GUID").a("value",e.Guid),a.n("a").a("href","/dashboard/default.aspx").h("Dashboard"),a.n("span").a("data-modaldialog-src","/dashboard/EditProfile.aspx").a("data-modaldialog-ajax","true").a("data-modaldialog","").h("Edit Profile"),a.n("a").a("href","/dashboard/SignOut.aspx").a("data-agora-icon","").h("Log out").cl((function(){document.body.dispatchEvent(new CustomEvent("ag.user.out"))})),t.node}(a);n.parentElement.insertBefore(i,n),n.remove()}}(n)}))}async function o(e){var t=await async function(e,t){return new Promise((async function(n,a){var o=null,r=t?null:window.localStorage.getItem("AGUSERCOLLECTION"+e);null==r?(o=await window.agRequest.GET("/services/agoraClient.ashx",{type:"USERCOLLECTION",collectionType:e}),window.localStorage.setItem("AGUSERCOLLECTION"+e,JSON.stringify(o)),n(o)):n(o=JSON.parse(r))}))}(3,e);t.Items.reduce((function(e,t){return e?[...e,...t.Items]:[...t.Items]}),[]).forEach((async function(e){!async function(e,t){var n=document.querySelectorAll('[data-perform-action-url*="pk='+e.PK+'"][data-perform-action-url*="rt='+e.RT+'"]');n.forEach((async function(e){e.setAttribute("ag-user-collection",t)}))}(e,3)}))}function r(e){return this.node=document.createElement(e),this}document.body.addEventListener("ag.user.in",(function(e){n(e.detail)})),document.body.addEventListener("ag.user.out",(function(e){n(null)})),r.prototype.a=function(e,t){return this.node.setAttribute(e,t),this},r.prototype.n=function(e){var t=new r(e);return this.node.appendChild(t.node),t},r.prototype.h=function(e){return this.node.innerHTML=e,this},r.prototype.cl=function(e){return this.node.removeEventListener("click",e),this.node.addEventListener("click",e),this},window.agUser={collection:{refresh:function(){document.body.dispatchEvent(new CustomEvent("ag.user.refresh.collection"))}}},a(),document.body.addEventListener("ag.sync.check",(async function(){var n=await t(),a=window.localStorage.getItem("AGSYNC");null==a||null==n||JSON.parse(a).ContactGuid==n.Guid?(document.body.dispatchEvent(new CustomEvent("ag.sync.verified.contact")),e=!0):document.body.dispatchEvent(new CustomEvent("ag.sync.set",{detail:{contactguid:n.Guid,eventType:"contact"}}))})),document.body.addEventListener("ag.sync.verified",(async function(){document.body.dispatchEvent(new CustomEvent("ag.sync.verified.contact")),e=!0}))}(),async function(){async function e(){var e=window.localStorage.getItem("AGSYNC");if(null!=e){var t=JSON.parse(e),n=new Date(t.updatedOn),a=new Date;if(a.setMinutes(a.getMinutes()-1),n>a)return void document.body.dispatchEvent(new CustomEvent("ag.sync.verified"))}!async function(){var e=await window.agRequest.GET("/services/agoraClient.ashx",{type:"SYNC"});e.updatedOn=new Date,window.localStorage.setItem("AGSYNC",JSON.stringify(e)),document.body.dispatchEvent(new CustomEvent("ag.sync.check"))}()}!async function(){document.body.addEventListener("ag.sync.set",(async function(e){await window.agRequest.POST("/services/agoraClient.ashx",Object.assign({type:"SET"},e.detail)),e.detail?.eventType&&document.body.dispatchEvent(new CustomEvent("ag.sync.verified."+e.detail.eventType))})),document.body.addEventListener("ag.sync.invalid",(async function(e){document.body.dispatchEvent(new CustomEvent("ag.sync.reset")),window.location.reload()})),e()}()}()},368:()=>{(async function(){var systemFunctions={};function Interpolation(e,t,n,a=[],o=[],r=(()=>{})){let i=new RegExp("\\{\\{[^\\}]+\\}\\}","gi"),l=e=>{r()},s="";for(let e of t.getAttributeNames()){let n=t.getAttribute(e);null!=n&&u(n,(n=>{t.setAttribute(e,n),c(t)}))}function c(e){null!=e&&(e.classList.contains("aga-fake-contains")||e.classList.contains("ag-fake-inline-contains"))&&(e.classList.remove("ag-fake-contains"),e.classList.remove("ag-fake-inline-contains"),1==e.childNodes[0].nodeType&&e.childNodes[0].remove())}function u(e,a){let o=e.match(i),r=()=>"",c=()=>{a(r())};if(null!=o){s=e;let a=[],i=!1;o.forEach((e=>{let o=e.substring(2,e.length-2);s=s.replace(e,`\${typeof(${o})!='undefined'&&${o}!=null?${o}:''}`);let r=ExtractVariablesTopLevelIdentifiers(o);a.push(...r.filter((e=>a.indexOf(e)<0))),o!=a[a.length-1]&&Watch(t,n,a[a.length-1],((e,t,n)=>{c()})),IsFunction(systemFunctions,o)?(i=!0,ExtractArgumentVariablesForFunctionFromString(o).forEach((e=>{Watch(t,n,e,((e,t,n)=>{c()}))}))):Watch(t,n,o,((e,t,n)=>{c()}))}));let u=new Function(`try{const {${a.join(",")}} = this; return \`${s}\`; }catch(e){ console.error(e); }return '';`).bind(i?interpolateObject(n):n);r=()=>u();let d=l;l=e=>{c(),d(e)}}}t.childNodes.forEach((t=>{if(t.nodeType==Node.ELEMENT_NODE){Interpolation(e,t,n,a,o,(()=>{}));let r=t;for(let e of r.getAttributeNames()){let t=r.getAttribute(e);null!=t&&u(t,(t=>{r.setAttribute(e,t),c(r)}))}}t.nodeType==Node.TEXT_NODE&&null!=t.textContent&&t.textContent.trim().length>0&&(0==t.textContent.indexOf("{{")&&t.textContent==t.parentElement.innerText?u(t.textContent,(e=>{c(t.parentElement),t.parentElement.innerHTML=e})):u(t.textContent,(e=>{c(t.parentElement),t.textContent=e})))})),l(n)}function interpolateObject(e){return Object.assign(e,systemFunctions)}function PreInterpolation(e,t){null==t&&(t=e);let n=t.hasAttribute("ag-fake");if(n)for(let t of e.getAttributeNames()){let n=e.getAttribute(t);null!=n&&n.indexOf("{{")>-1&&e.setAttribute(t,n.replace(/(\{\{)|(\}\})/gi,"")),e.classList.add("ag-fake-inline-contains")}e.childNodes.forEach((e=>{if(e.nodeType==Node.ELEMENT_NODE&&"OPTION"!=e.nodeName){if(PreInterpolation(e,t),n)for(let t of e.getAttributeNames()){let n=e.getAttribute(t);null!=n&&n.indexOf("{{")>-1&&e.setAttribute(t,n.replace(/(\{\{)|(\}\})/gi,""))}}else if(e.nodeType==Node.TEXT_NODE&&null!=e.textContent&&e.textContent.indexOf("{{")>-1&&e.textContent.trim().length>0){let t=document.createElement("i");t.classList.add("ag-fake");let a=e.parentElement;null==a||a.classList.contains("ag-fake-contains")||(a.insertBefore(t,a.firstChild),a.classList.add("ag-fake-contains"),n&&(e.textContent=e.textContent.replace(/(\{\{)|(\}\})/gi,"")))}}))}function Watch(){}function GetValue(e,t){if(t.indexOf("(")<0&&t.indexOf(".")>-1){let n=t.substring(0,t.indexOf(".")),a=t.substring(t.indexOf(".")+1,t.length);return GetValue(e[n],a)}return t.indexOf("(")>-1?getValueFromFunction(e,t):null!=e?e[t]:void 0}function IsFunction(e,t){return t.indexOf("(")>-1&&"function"==typeof e[getFunctionName(t)]}function GetProxyObject(e){if(void 0===e||null==e)return e;let t={};for(let n in e)SetPropertyToProxyObject(e,t,n);return t}function SetPropertyToProxyObject(e,t,n){"function"==typeof e[n]?t[n]=e[n]:Object.defineProperty(t,n,{get:()=>e[n],set(t){e[n]=t,Notify(null,e,n,!0)},enumerable:!0,configurable:!0})}function SetPropertyDescriptorToProxyObject(e,t,n){Object.defineProperty(e,t,n)}function ConverObjectToArgumentArray(e){let t={arguments:[],values:[]};for(let n in e)t.arguments.push(n),t.values.push(e[n]);return t}function insertAfter(e,t){null!=t.parentNode&&t.parentNode.insertBefore(e,t.nextSibling)}function insertBefore(e,t){t.parentNode.insertBefore(e,t)}let variablesFromStringExpression=new RegExp("((?<string>([\"'`].*?[\"'`]))|(?<boolean>(true|false))|((?<function>[A-z_][A-z0-9.$]+)[(])|(?<identifier>[A-z_][A-z0-9.$]+))","gi"),variableTopLevelIdentifiersExpression=new RegExp("(?<variable>[A-z0-9_\\$]+)(((\\.[^\\s\\=\\&\\|]*)|\\())?","gi");function ExtractVariablesTopLevelIdentifiers(e){let t=[];try{let n=null;for(;null!=(n=variableTopLevelIdentifiersExpression.exec(e));)n.groups&&n.groups.variable&&t.push(n.groups.variable)}catch(e){}return t}function ExtractVariablesFromString(e){let t={functions:[],identifiers:[]};try{let n=null;for(;null!=(n=variablesFromStringExpression.exec(e));)n.groups&&(n.groups.identifier&&t.identifiers.push(n.groups.identifier),n.groups.function&&t.functions.push(n.groups.function))}catch(e){}return t}function ExtractArgumentVariablesForFunctionFromString(e){let t=[],n=e.indexOf("("),a=e.indexOf(")"),o=(n>-1&&e.substring(0,n),e.substring(n+1,a).match(new RegExp("[^,]+","gi")));return null!=o&&o.forEach((e=>{/^(_|[A-z])(_|[A-z]|[0-9]|\$)+$/.test(e.trim())&&t.push(e.trim())})),t}function getFunctionName(e){let t=-1;return(t=e.indexOf("("))>-1?e.substring(0,t):e}function getValueFromFunction(e,t){let n=[],a=t.indexOf("("),o=t.indexOf(")"),r=a>-1?t.substring(0,a):t,i=t.substring(a+1,o).match(new RegExp("[^,]+","gi"));return null!=i&&i.forEach((t=>{n.push(GetValue(e,t))})),"function"==typeof e[r]?e[r].apply(e,n):void 0}function If(e,t,n){t.querySelectorAll("[ag-if]",t).forEach((t=>{let a=[],o=t,r=t.parentElement,i=null,l=[],s="ag-if",c="ag-else-if",u="ag-else";for(;null!=o&&(t==o&&o.hasAttribute(s)||o.hasAttribute(c)||o.hasAttribute(u));){let e=o;e.classList.remove("ag-fake-mask"),o=e.nextElementSibling;let t=e.hasAttribute(s)?s:e.hasAttribute(c)?c:u,n=e.getAttribute(t);e.removeAttribute(t),null!=n&&ExtractVariablesFromString(n).identifiers.forEach((e=>{l.indexOf(e)<0&&l.push(e)})),a.push({node:e.cloneNode(!0),expression:n,position:e.nextSibling,isDefault:t==u}),e.remove()}let d=ConverObjectToArgumentArray(n),f=t=>{d=ConverObjectToArgumentArray(t),null!=i&&i.active.remove();for(let t of a){let a=!1;if(t.isDefault)a=t.isDefault;else{a=new Function(...d.arguments,`return ${t.expression};`)(...d.values)}if(a){i=t;try{let a=m(t.position);if(null!=r){let o=t.node.cloneNode(!0);t.active=o,r.insertBefore(o,a),TransformInternal(e,o,n)}}catch(e){console.log(e)}break}}};function m(e){return null==e||document.contains(e)?e:m(e.previousElementSibling)}for(let e of l)Watch(t,n,e,((e,t,n)=>{t&&f(e)}));f(n)}))}function PreIf(e){let t=e.querySelectorAll("[ag-if]",e),n=e.hasAttribute("ag-fake");t.forEach((e=>{let t=e,a=!1,o="ag-if",r="ag-else-if",i="ag-else";for(;null!=t&&(e==t&&t.hasAttribute(o)||t.hasAttribute(r)||t.hasAttribute(i));){let e=t;!a&&e.hasAttribute("ag-fake")?a=!0:a||!a&&!t.hasAttribute(i)?e.classList.add("ag-fake-mask"):a=!0,n&&(e.removeAttribute(o),e.removeAttribute(r),e.removeAttribute(i)),t=e.nextElementSibling}a||e.classList.remove("ag-fake-mask")}))}function For(html,dom,context){let htmlDocument=html,loops=dom.querySelectorAll("[ag-for]",dom);return loops.forEach((item=>{let fakeItem=item.nextElementSibling,fakeItemCount=0,isfakeItemCountReaded=!1,expression=new RegExp("\\s*([A-z0-9]+)\\s+(in)\\s+([A-z0-9\\.]+)\\s*","gi"),loopConstraint=item.getAttribute("ag-for");if(null==loopConstraint)return;let itratorFinished=item.getAttribute("ag-for-complete"),fieldsAndValue=expression.exec(loopConstraint),itrator=null!=fieldsAndValue?fieldsAndValue[1]:"",collection=null!=fieldsAndValue?fieldsAndValue[3]:"",htmlToClone=item.cloneNode(!0),htmlToCloneParent=item.parentElement,htmlToCloneLocation=item.nextSibling;htmlToClone.removeAttribute("ag-for"),item.remove();let itemElements=[],isDirtyFake=!1,collectionContext=getCollectionObject(context,collection),collectionContextField=getCollectionName(collection);try{SetPropertyDescriptorToProxyObject(collectionContext,`${collectionContextField}$for`,{value:0,writable:!0,enumerable:!0})}catch(e){}let render=e=>{for(let e of itemElements)e.remove();let t=GetValue(e,collection),n=0,a=!1;if(Array.isArray(t)){isDirtyFake=!0,htmlToCloneLocation=removePreFor(fakeItem);for(let e of t){let t=GetProxyObject(context);SetPropertyDescriptorToProxyObject(t,itrator,{get:()=>e,set(t){e=t},enumerable:!0}),SetPropertyDescriptorToProxyObject(t,"row$Index",{value:n+1,writable:!0,enumerable:!0}),SetPropertyDescriptorToProxyObject(t,`${itrator}$Index`,{value:n+1,writable:!0,enumerable:!0});let o=htmlToClone.cloneNode(!0);a?insertAfter(o,itemElements[itemElements.length-1]):(htmlToCloneParent?.insertBefore(o,htmlToCloneLocation),a=!0),TransformInternal(htmlDocument,o,t),itemElements.push(o),n++}try{SetPropertyDescriptorToProxyObject(collectionContext,`${collectionContextField}$for`,{value:Date.now(),writable:!0,enumerable:!0});let e=new CustomEvent("ag-for-completed");htmlToCloneParent?.dispatchEvent(e)}catch(e){}}else void 0===t&&null!=fakeItem&&fakeItem.hasAttribute("ag-for-fake")&&isDirtyFake&&(fakeItem=PreForPartial(fakeItem,htmlToCloneParent,htmlToCloneLocation,fakeItemCount))};if(itratorFinished){let functionName="",value=itratorFinished;if(null!=value&&""!=value){let getParameterName=e=>"this"==e?"sender":e.indexOf(".")>-1?e.replace(".","_"):e,getValue=(e,t)=>{if(t.indexOf("(")<0&&t.indexOf(".")>-1){let n=t.substring(0,t.indexOf(".")),a=t.substring(t.indexOf(".")+1,t.length);return getValue(e[n],a)}return t.indexOf("(")>-1?getValueFromFunction(e,t):e[t]},getFunctionFromCollection=(e,t,n)=>()=>{if(null!=e.__proto__[t])return e.__proto__[t](...n);Object.keys(e).forEach((a=>"object"==typeof e[a]?getFunctionFromCollection(e[a],t,n):"function"==typeof e[a]&&a==t?e[a](...n):void 0))},getValueFromFunction=(e,t)=>{let n=[],a=t.indexOf("("),o=t.indexOf(")"),r=a>-1?t.substring(0,a):t,i=t.substring(a+1,o).match(new RegExp("[^,]+","gi"));return null!=i&&i.forEach((t=>{n.push(getValue(e,t))})),e[r].apply(e,n)};functionName=value.substring(0,value.indexOf("(")>-1?value.indexOf("("):value.length);let expression=new RegExp("(\\((?<params>.*?)\\))");if(expression.test(value)){let paramsString=value.match(expression);if(null!=paramsString&&null!=paramsString&&null!=paramsString.groups){let params=paramsString.groups.params.split(","),paramsItem={};for(let e in params){if("this"==params[e])continue;let t=new RegExp("^(\\'|[0-9])").test(params[e]),n=t?"item_"+e:getParameterName(params[e]);paramsItem[n]=t}Watch(item,collectionContext,`${collectionContextField}$for`,((data,isChange,isUserChange)=>{let args=[];for(var key in params)if("this"==params[key]||"sender"==params[key])args.push(htmlToCloneParent);else if("data"==params[key])args.push(data);else{let paramValue=paramsItem[getParameterName(params[key])]?eval(params[key]):getValue(data,params[key]);args.push(paramValue)}try{if(null!=data[functionName])data[functionName].apply(data,args);else{let e=getFunctionFromCollection(data,functionName,args);null!=e&&e(args)}}catch(e){}}))}}}}function getCollectionObject(e,t){if(t.indexOf("(")<0&&t.indexOf(".")>-1){let n=t.substring(0,t.indexOf(".")),a=t.substring(t.indexOf(".")+1,t.length);return getCollectionObject(e[n],a)}t.indexOf("(");return e}function getCollectionName(e){if(e.indexOf("(")<0&&e.indexOf(".")>-1){e.substring(0,e.indexOf("."));return getCollectionName(e.substring(e.indexOf(".")+1,e.length))}return e}function removePreFor(e){if(null!=e&&e.hasAttribute("ag-for-fake")){htmlToClone.classList.remove("ag-fake-mask");let t=e;for(;null!=t&&t.hasAttribute("ag-for-fake");){isfakeItemCountReaded||fakeItemCount++;let e=t;t=t.nextElementSibling,e.remove()}return isfakeItemCountReaded=!0,t}return e}render(context),Watch(item,context,collection,((e,t,n)=>{t&&render(e)}))})),htmlDocument.innerHTML}function PreForPartial(e,t,n,a){let o=null,r=null,i=!1;for(let l=0;l<a;l++){let a=e.cloneNode(!0);i?insertAfter(a,o):(t?.insertBefore(a,n),i=!0,r=a),o=a}return r}function PreFor(e){e.querySelectorAll("[ag-for][ag-for-fake]:not(.ag-fake-mask)",e).forEach((e=>{if("OPTION"==e.tagName)return;let t=e.cloneNode(!0);t.setAttribute("ag-fake","");let n=1,a=e.getAttribute("ag-for-fake");null!=a?n=parseInt(a):t.setAttribute("ag-for-fake",""),t.removeAttribute("ag-for"),e.removeAttribute("ag-for-fake"),e.classList.add("ag-fake-mask"),PreTransformInternal(t);for(let a=0;a<n;a++)e.parentElement?.appendChild(t.cloneNode(!0))}))}function TransformInternal(e,t,n){For(t,t,n),If(t,t,n),Interpolation(t,t,n)}function PreTransformInternal(e){PreFor(e),PreIf(e),PreInterpolation(e)}async function findRenders(){document.querySelectorAll("[ag-render]:not(.ag-render)").forEach((async function(e,t){attachAction(e)}))}async function attachAction(e){e.classList.add("ag-render");var t=e.getAttribute("ag-render");PreTransformInternal(e);var n="ag.render.hydrate."+t,a=e.innerHTML;document.body.addEventListener(n,(async function(){var n=GetValue(window,t);e.innerHTML=a,TransformInternal(e,e,n)}))}async function requestData(e,t,n){n&&(t=n(t));var a="";for(var o in t)a=a+(""!=a?"&":"")+o+"="+t[o];return e+=e.indexOf("?")>-1?"&":"?"+a,(await fetch(e,{method:"GET",mode:"cors",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()}async function initPage(e,t,n,a,o){n||(n={}),n.PageSize||(n.PageSize=12),n.PageNumber||(n.PageNumber=1);var r=await requestData(t,n,o);window[e]=r,window.agRender.hydrate(e),a&&a(r)}async function nextPage(e,t,n,a,o){n.PageNumber+=1;var r=await requestData(t,n,o);window[e]=r,window.agRender.hydrate(e),a&&a(r)}async function previousPage(e,t,n,a,o){if(n.PageNumber>1){n.PageNumber-=1;var r=await requestData(t,n,o);window[e]=r,window.agRender.hydrate(e),a&&a(r)}}async function morePage(e,t,n,a,o){n.PageNumber+=1;var r=await requestData(t,n,o);window[e].Items.push(...r.Items),window.agRender.hydrate(e),a&&a(r)}async function init(){document.body.addEventListener("ag.render.refresh",findRenders),document.body.addEventListener("ag.refresh",findRenders);var e=new CustomEvent("ag.render.refresh");document.body.dispatchEvent(e),window.agRender={hydrate:function(e){var t=new CustomEvent("ag.render.hydrate."+e);document.body.dispatchEvent(t);t=new CustomEvent("ag.lazy.refresh");document.body.dispatchEvent(t),window.agLanguage.refresh()},next:function(e){var t=new CustomEvent("ag.render."+e+".page.next");document.body.dispatchEvent(t)},previous:function(e){var t=new CustomEvent("ag.render."+e+".page.previous");document.body.dispatchEvent(t)},more:function(e){var t=new CustomEvent("ag.render."+e+".page.more");document.body.dispatchEvent(t)},pagedResult:function(e,t,n,a,o){document.body.addEventListener("ag.render."+e+".page.next",(function(){nextPage(e,t,n,a,o)})),document.body.addEventListener("ag.render."+e+".page.previous",(function(){previousPage(e,t,n,a,o)})),document.body.addEventListener("ag.render."+e+".page.more",(function(){morePage(e,t,n,a,o)})),initPage(e,t,n,a,o)}}}init()})()}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};return(()=>{"use strict";__webpack_require__.r(__webpack_exports__);__webpack_require__(136),__webpack_require__(368),__webpack_require__(264)})(),__webpack_exports__})()));
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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b0JBQW9CTSxFQUFFRixFQUFRLENBQUV6c0IsRUFBR3lzQixJQUM1QkEsQ0FBTSxFQ0xkSixvQkFBb0JNLEVBQUksQ0FBQy9zQixFQUFTZ3RCLEtBQ2pDLElBQUksSUFBSW5oQixLQUFPbWhCLEVBQ1hQLG9CQUFvQlEsRUFBRUQsRUFBWW5oQixLQUFTNGdCLG9CQUFvQlEsRUFBRWp0QixFQUFTNkwsSUFDNUU3QixPQUFPMmEsZUFBZTNrQixFQUFTNkwsRUFBSyxDQUFFZ1osWUFBWSxFQUFNOWEsSUFBS2lqQixFQUFXbmhCLElBRTFFLEVDTkQ0Z0Isb0JBQW9CUSxFQUFJLENBQUNDLEVBQUtuc0IsSUFBVWlKLE9BQU9tTixVQUFVZ1csZUFBZUMsS0FBS0YsRUFBS25zQixHQ0NsRjByQixvQkFBb0JZLEVBQUtydEIsSUFDSCxvQkFBWHN0QixRQUEwQkEsT0FBT0MsYUFDMUN2akIsT0FBTzJhLGVBQWUza0IsRUFBU3N0QixPQUFPQyxZQUFhLENBQUVwZ0IsTUFBTyxXQUU3RG5ELE9BQU8yYSxlQUFlM2tCLEVBQVMsYUFBYyxDQUFFbU4sT0FBTyxHQUFPLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy8uLi9JZGNHbG9iYWwuSUJQLldlYi9qcy9tYXgvRGlhbG9nTW9kYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL0lkY0dsb2JhbC5JQlAuV2ViL2pzL21heC9jb21tb24uanMiLCJ3ZWJwYWNrOi8vLy4uL0lkY0dsb2JhbC5JQlAuV2ViL2pzL21heC9kYXRhYmluZGVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gZmFjdG9yeSgpO1xuXHRcdGZvcih2YXIgaSBpbiBhKSAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZXhwb3J0cyA6IHJvb3QpW2ldID0gYVtpXTtcblx0fVxufSkoc2VsZiwgKCkgPT4ge1xucmV0dXJuICIsIu+7v2Fnb3JhKGZ1bmN0aW9uICgpIHtcclxuICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1tb2RhbGRpYWxvZ11cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB0cmlnZ2VyRWxlbWVudCA9ICQodGhpcyk7XHJcbiAgICAgICAgaWYgKHRyaWdnZXJFbGVtZW50LnByb3AoJ2Rpc2FibGVkJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuOyBcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJpZ2dlckVsZW1lbnQucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdHJpZ2dlckVsZW1lbnQucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XHJcbiAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgJCh0aGlzKS5BZ29yYURpYWxvZ01vZGFsKHsgQWZ0ZXJMb2FkOiAkKHRoaXMpLmF0dHIoJ2RhdGEtbW9kYWxkaWFsb2ctYWZ0ZXJMb2FkJykgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKGRvY3VtZW50KS5vbihcImNsaWNrXCIsIFwiW2RhdGEtbW9kYWxkaWFsb2ctY2xvc2VdXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKHRoaXMpLkFnb3JhRGlhbG9nTW9kYWwoeyBDbG9zZU1vZGFsOiB0cnVlIH0pO1xyXG4gICAgICAgIHZhciBzZW5kZXIgPSAkKHRoaXMpO1xyXG4gICAgICAgIGlmIChzZW5kZXIuZGF0YSgnbW9kYWxkaWFsb2ctY2xvc2UnKSA9PSAnY2xlYXInKVxyXG4gICAgICAgIENsZWFyRm9ybXZhbCgnW2RhdGEtcmVxdWVzdF0nKTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1tb2RhbGRpYWxvZy1jbG9zZS1mb3JtXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJCh0aGlzKS5BZ29yYURpYWxvZ01vZGFsKHsgQ2xvc2VNb2RhbDogdHJ1ZSwgQWZ0ZXJMb2FkOiAkKHRoaXMpLmF0dHIoJ2RhdGEtbW9kYWxkaWFsb2ctYWZ0ZXJMb2FkJykgfSk7XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG4oZnVuY3Rpb24gKCQpIHtcclxuICAgIC8vRm9ybWF0IDogZGF0YS1tb2RhbGRpYWxvZz1cIlwiIGRhdGEtbW9kYWxkaWFsb2ctaWQ9XCJcIiBkYXRhLW1vZGFsZGlhbG9nLWFqYXg9XCJ0cnVlXCIgZGF0YS1tb2RhbGRpYWxvZy1zcmM9XCJcIlxyXG4gICAgJC5mbi5BZ29yYURpYWxvZ01vZGFsID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsgcmV0dXJuIG5ldyBhZ29yYURpYWxvZyh0aGlzLCBvcHRpb25zKTsgfTtcclxuICAgIGZ1bmN0aW9uIGFnb3JhRGlhbG9nKHNlbmRlciwgb3B0aW9ucykge1xyXG4gICAgICAgIHZhciBfZGVmYXVsdHMgPSB7XHJcbiAgICAgICAgICAgIFNlcnZpY2VVcmw6ICcnLFxyXG4gICAgICAgICAgICBNb2RhbElkOiAnSUJQbW9kYWxjb250YWluZXInLFxyXG4gICAgICAgICAgICBQYXJhbXM6IG51bGwsXHJcbiAgICAgICAgICAgIEh0bWw6IG51bGwsXHJcbiAgICAgICAgICAgIFBhcmVudENzczogbnVsbCxcclxuICAgICAgICAgICAgRW5hYmxlQ2xvc2VCdXR0b246IHRydWUsXHJcbiAgICAgICAgICAgIEVuYWJsZUxvYWRlcjogdHJ1ZSxcclxuICAgICAgICAgICAgRW5hYmxlQWpheEh0bWxMb2FkOiBmYWxzZSxcclxuICAgICAgICAgICAgSGlkZUNsb3NlQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgQ2xvc2VNb2RhbDogZmFsc2UsXHJcbiAgICAgICAgICAgIENsb3NlV2hlblVzZXJQcmVzc0VzY2FwZTogdHJ1ZSxcclxuICAgICAgICAgICAgVHJhbnNpdGlvbjogJ0ZhZGVJbicsIC8qIEZhZGVJbiwgQXBwZW5kICovXHJcbiAgICAgICAgICAgIEJlZm9yZUxvYWQ6IG51bGwsXHJcbiAgICAgICAgICAgIEFmdGVyTG9hZDogbnVsbFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF9vcHRpb25zID0gJC5leHRlbmQoX2RlZmF1bHRzLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLkNsb3NlTW9kYWwpIHtcclxuICAgICAgICAgICAgJChzZW5kZXIpLmNsb3Nlc3QoJy5hZ29yYS1tZGwtZGF0YS1kaWFsb2ctY29udGFpbmVyJykudHJpZ2dlcignZGlzcG9zZScpO1xyXG4gICAgICAgICAgICAkKHNlbmRlcikuY2xvc2VzdCgnLmFnb3JhLW1kbC1kYXRhLWRpYWxvZy1jb250YWluZXInKS5yZW1vdmVDbGFzcygncG9wdXAtb3BlbicpO1xyXG4gICAgICAgICAgICAkKHNlbmRlcikuY2xvc2VzdCgnLmFnb3JhLW1kbC1kYXRhLWRpYWxvZy1jb250YWluZXInKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgLy8kKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLnRyaWdnZXIoJ2Rpc3Bvc2UnKTtcclxuICAgICAgICAgICAgLy8kKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLnJlbW92ZUNsYXNzKCdwb3B1cC1vcGVuJyk7XHJcbiAgICAgICAgICAgIC8vJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgJCgnYm9keScpLnJlbW92ZUNsYXNzKCdwb3B1cC1hY3RpdmUnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLkFmdGVyTG9hZCkge1xyXG4gICAgICAgICAgICBfb3B0aW9ucy5BZnRlckxvYWQgPSBldmFsKFwiKGZ1bmN0aW9uKCkgeyBcIiArIF9vcHRpb25zLkFmdGVyTG9hZCArIFwiKFwiICsgc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLWlkXCIpICtcIik7IH0pXCIpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVMb2FkZXIpIFNob3dMb2FkaW5nKCk7XHJcblxyXG4gICAgICAgIExvYWRPcHRpb25zKCk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIExvYWRPcHRpb25zKCkge1xyXG5cclxuICAgICAgICAgICAgaWYgKElzTm90TnVsbChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctc3JjXCIpKSkgX29wdGlvbnMuU2VydmljZVVybCA9IHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1zcmNcIik7XHJcbiAgICAgICAgICAgIGlmIChJc05vdE51bGwoc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLWFqYXhcIikpKSBfb3B0aW9ucy5FbmFibGVBamF4SHRtbExvYWQgPSBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctYWpheFwiKTtcclxuICAgICAgICAgICAgaWYgKElzTm90TnVsbChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctUGFyZW50Q3NzXCIpKSkgX29wdGlvbnMuUGFyZW50Q3NzID0gc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLVBhcmVudENzc1wiKTtcclxuICAgICAgICAgICAgaWYgKElzTm90TnVsbChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctQ2xvc2VXaGVuVXNlclByZXNzRXNjYXBlXCIpKSkgX29wdGlvbnMuQ2xvc2VXaGVuVXNlclByZXNzRXNjYXBlID0gKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1DbG9zZVdoZW5Vc2VyUHJlc3NFc2NhcGVcIikgPT0gJ3RydWUnKTtcclxuICAgICAgICAgICAgaWYgKElzTm90TnVsbChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctSGlkZUNsb3NlQnV0dG9uXCIpKSkgX29wdGlvbnMuSGlkZUNsb3NlQnV0dG9uID0gKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1IaWRlQ2xvc2VCdXR0b25cIikgPT0gJ3RydWUnKTtcclxuICAgICAgICAgICAgaWYgKElzTm90TnVsbChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctaWRcIikpKSBfb3B0aW9ucy5Nb2RhbElkID0gc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLWlkXCIpO1xyXG4gICAgICAgICAgICBHZXRIdG1sKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBHZXRIdG1sKCkge1xyXG5cclxuXHJcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVBamF4SHRtbExvYWQpIHtcclxuICAgICAgICAgICAgICAgIC8vUmVtb3ZlIGlmIHRoZSBjb250YWluZXIgaXMgYWxyZWFkeSBvcGVuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAkKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgLy9HZXQgSHRtbCBGcm9tIFRoZSBTZXJ2aWNlIFVybFxyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IF9vcHRpb25zLlNlcnZpY2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Bvc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnaHRtbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogX29wdGlvbnMuUGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX29wdGlvbnMuSHRtbCA9IHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBCaW5kSHRtbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBTaG93QWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJywgMzAwMCwgJ2FsZXJ0X2JveCcsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlTG9hZGVyKSBTaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dBbGVydCgnU2VydmljZSBub3QgZm91bmQhJywgMzAwMCwgJ2FsZXJ0X2JveCcsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUxvYWRlcikgU2hvd0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkFmdGVyTG9hZCkgX29wdGlvbnMuQWZ0ZXJMb2FkKCk7XHJcbiAgICAgICAgICAgICAgICBfb3B0aW9ucy5IdG1sID0gJCgnIycgKyBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctaWRcIikpLmNsb25lKCkud3JhcCgnIycgKyBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctaWRcIikpLmh0bWwoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgQmluZEh0bWwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIEJpbmRIdG1sKCkge1xyXG4gICAgICAgICAgICBpZiAoX29wdGlvbnMuSHRtbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAvL0NyZWF0ZSBwb3B1cCBjb250YWluZXJcclxuICAgICAgICAgICAgICAgICQoJzxkaXYgaWQ9XCInICsgX29wdGlvbnMuTW9kYWxJZCArICdcIiBjbGFzcz1cImFnb3JhLW1kbC1kYXRhLWRpYWxvZy1jb250YWluZXIgJyArIF9vcHRpb25zLlBhcmVudENzcyArICdcIj48ZGl2IGNsYXNzPVwiYWdvcmEtbWRsLWRhdGEtZGlhbG9nLWNvbnRhaW5lci1ib2R5XCI+JyArKCFfb3B0aW9ucy5IaWRlQ2xvc2VCdXR0b24gPyAnPGRpdiBkYXRhLW1vZGFsZGlhbG9nLWNsb3NlPVwiXCIgY2xhc3M9XCJtZGwtY2xvc2VcIj48L2Rpdj4nIDogJycpICsgX29wdGlvbnMuSHRtbCArICc8L2Rpdj48ZGl2IGlkPVwicG9wdXBcIiBjbGFzcz1cIm1kbC1qcy1zbmFja2JhciBtZGwtc25hY2tiYXJcIj48ZGl2IGNsYXNzPVwibWRsLXNuYWNrYmFyX190ZXh0XCI+PC9kaXY+PGJ1dHRvbiBhcmlhLWxhYmVsPVwiYnV0dG9uXCIgY2xhc3M9XCJtZGwtc25hY2tiYXJfX2FjdGlvblwiIHR5cGU9XCJidXR0b25cIj48L2J1dHRvbj48L2Rpdj4gPC9kaXY+JykuYXBwZW5kVG8oXCJib2R5XCIpO1xyXG4gICAgICAgICAgICAgICAgLy8kKCcuYWdvcmEtbWRsLWRhdGEtZGlhbG9nLWNvbnRhaW5lcicpLmNzcygndG9wJywgKCQod2luZG93KS5zY3JvbGxUb3AoKSkgKyAncHgnKTtcclxuICAgICAgICAgICAgICAgICQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkuYWRkQ2xhc3MoJ3BvcHVwLW9wZW4nKTtcclxuICAgICAgICAgICAgICAgICQoJ2JvZHknKS5hZGRDbGFzcygncG9wdXAtYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAvL0JpbmQgSHRtbFxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUxvYWRlcikgU2hvd0xvYWRpbmcoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoISh0eXBlb2YgKGNvbXBvbmVudEhhbmRsZXIpID09ICd1bmRlZmluZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEhhbmRsZXIudXBncmFkZURvbSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkuZmluZCgnLm1kbC10ZXh0ZmllbGQtLWZsb2F0aW5nLWxhYmVsIGlucHV0Lm1kbC10ZXh0ZmllbGRfX2lucHV0Om5vdChbcGxhY2Vob2xkZXJdKScpLmF0dHIoXCJwbGFjZWhvbGRlclwiLCBcIiAgXCIpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvL2lmIChyZUNhcHRjaGFBZ29yYSkge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5maW5kKCdbZGF0YS1yZWNhcHRjaGEtYWdvcmFdJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyAgICByZUNhcHRjaGFBZ29yYS5pbml0KHJlQ2FwdGNoYUFnb3JhLnJlQ2FwdGNoYUFwcElELCByZUNhcHRjaGFBZ29yYS50b2tlbiwgZmFsc2UsIDEpO1xyXG4gICAgICAgICAgICAgICAgLy99XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQoZG9jdW1lbnQpLmtleWRvd24oZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSBcIjI3XCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5DbG9zZVdoZW5Vc2VyUHJlc3NFc2NhcGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLnJlbW92ZUNsYXNzKCdwb3B1cC1vcGVuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ3BvcHVwLWFjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0pKGpRdWVyeSk7XHJcblxyXG5mdW5jdGlvbiBDbG9zZVBvcHVwKCkge1xyXG4gICAgJCgnW2RhdGEtbW9kYWxkaWFsb2ctY2xvc2VdJykudHJpZ2dlcihcImNsaWNrXCIpO1xyXG59Iiwi77u/dmFyIGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KFwib25BZ29yYUxvYWRcIik7XHJcbmRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG5kb2N1bWVudC5pc0Fnb3JhTG9hZGVkID0gdHJ1ZTtcclxuZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ29uQ3NzTG9hZCcpO1xyXG5kb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuZG9jdW1lbnQuaXNDc3NMb2FkZWQgPSB0cnVlO1xyXG5cclxuRW5hYmxlRGVtYW5kSW1wb3J0KCk7XHJcbkVuYWJsZVNlYXJjaEZvcm0oKTtcclxuXHJcblxyXG4gICAgd2luZG93LmFnUmVxdWVzdCA9IHtcclxuICAgICAgICBHRVQ6IGFzeW5jIGZ1bmN0aW9uIChzZXJ2aWNlVXJsLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciBxdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZyArICgocXVlcnlTdHJpbmcgIT0gJycgPyAnJicgOiAnJykgKyBrZXkgKyAnPScgKyBkYXRhW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlcnZpY2VVcmwgKz0gc2VydmljZVVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JyArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IGF3YWl0IGZldGNoKHNlcnZpY2VVcmwsIHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgICAgIGNhY2hlOiBcIm5vLWNhY2hlXCIsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QuanNvbigpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgUE9TVDogYXN5bmMgZnVuY3Rpb24gKHNlcnZpY2VVcmwsIGRhdGEpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1EYXRhID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YVtrZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IGF3YWl0IGZldGNoKHNlcnZpY2VVcmwsIHtcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICBjYWNoZTogXCJuby1jYWNoZVwiLFxyXG4gICAgICAgICAgICAgICAgYm9keTogZm9ybURhdGFcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5qc29uKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG5cclxuLy9MYXp5IGxvYWRlclxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgYXN5bmMgZnVuY3Rpb24gZmluZExhenkoKSB7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc3JjXTpub3QoLmFnLWxhenkpOm5vdCgubm8tYWcpOm5vdChbZGF0YS1zcmMqPVwie3tcIl0pJyk7XHJcblxyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XHJcbiAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnYWctbGF6eScpO1xyXG4gICAgICAgICAgICB2YXIgYWN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYXR0YWNoQWN0aW9uKGl0ZW0sIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FnLmxhenknLCBhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhenknLCBhY3Rpb24pO1xyXG5cclxuICAgICAgICAgICAgYWN0aW9uKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXQoKSB7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGF6eS5yZWZyZXNoJywgZmluZExhenkpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnJlZnJlc2gnLCBmaW5kTGF6eSk7XHJcblxyXG4gICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcubGF6eS5yZWZyZXNoJyk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uIChlKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhenknKTtcclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhenknKTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgd2luZG93LmFnTGF6eSA9IHtcclxuICAgICAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5sYXp5LnJlZnJlc2gnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2YWxpZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5sYXp5Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGF0dGFjaEFjdGlvbihpdGVtLCBzdWNjZXNzKSB7ICAgICAgICAgXHJcbiAgICAgICAgdmFyIGJsYW5rSW1hZ2UgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FRQUFBQzFIQXdDQUFBQUMwbEVRVlI0Mm1Oa1lBQUFBQVlBQWpDQjBDOEFBQUFBU1VWT1JLNUNZSUk9JztcclxuICAgICAgICBpZiAoYXdhaXQgY2hlY2tpc0luVmlld3BvcnQoaXRlbSkpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB2YXIgc3JjVXJsID0gYXdhaXQgZ2V0Rm9ybWF0dGVkSW1hZ2VVcmwoaXRlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJyksIGl0ZW0pO1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnVklERU8nKSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgaXRlbS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHNyY1VybC51cmwpIH0sIDEwMDAwKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnT0JKRUNUJyB8fCBpdGVtLm5vZGVOYW1lID09ICdBVURJTycpXHJcbiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnc3JjJywgc3JjVXJsLnVybClcclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnSU1HJykgeyAgIFxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnc3JjJykgIT0gYmxhbmtJbWFnZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdhZy1sYXp5LXMnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdzcmMnLCBibGFua0ltYWdlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc3JjVXJsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3JjVXJsLnNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY1VybC5zaXplLndpZHRoPjApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBzcmNVcmwuc2l6ZS53aWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNVcmwuc2l6ZS5oZWlnaHQgPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHNyY1VybC5zaXplLmhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdzcmMnLCBzcmNVcmwudXJsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZVsnYmFja2dyb3VuZC1pbWFnZSddID0gYHVybCgnJHtzcmNVcmwudXJsfScpYDtcclxuICAgICAgICAgICAgc3VjY2VzcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHJvb3Q6IG51bGwsXHJcbiAgICAgICAgICAgIHJvb3RNYXJnaW46IFwiMHB4XCIsXHJcbiAgICAgICAgICAgIHRocmVzaG9sZDogMC4xLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhpdGVtLCdWaWV3Jyk7XHJcblxyXG4gICAgICAgIH0sIG9wdGlvbnMpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRGb3JtYXR0ZWRJbWFnZVVybCh1cmwsIGl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgaXNBdXRvID0gaXRlbS5oYXNBdHRyaWJ1dGUoJ2RhdGEtcmF0aW8tYXV0bycpOyAgICAgICAgXHJcbiAgICAgICAgaWYgKGlzQXV0bykgcmV0dXJuIHsgdXJsOiB1cmwgfTsgICAgICAgIFxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gYXdhaXQgZ2V0QmVzdEZpdENvbnRhaW5lcihpdGVtLCAxNiwgOSk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gLy4qXFw/KC4qPyhtaHxtdylcXD0oXFxkKykpKi9naS5leGVjKHVybCk7XHJcbiAgICAgICAgdmFyIGFkZGl0aW9uYWxVcmwgPSAnJzsgICAgICAgIFxyXG4gICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1jcm9wJykgIT0gbnVsbCkgYWRkaXRpb25hbFVybCArPSAnJm1vZGU9Y3JvcCc7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvJykgPT0gMCAmJiBmYWxzZSkge1xyXG4gICAgICAgICAgICB2YXIgcHJvamVjdENvZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1wY29kZScpO1xyXG4gICAgICAgICAgICB1cmwgPSBgaHR0cHM6Ly9jZG4uZGF0YWZsb2F0LmNvbS8ke3Byb2plY3RDb2RlfV9DV1Mke3VybH1gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh1cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0Y2ggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyB1cmw6IHVybCwgc2l6ZTogY3VycmVudCB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHVybDogYCR7dXJsfT9gICsgKGN1cnJlbnQud2lkdGggPiAwID8gYG13PSR7Y3VycmVudC53aWR0aH1gICsgKGN1cnJlbnQuaGVpZ2h0PjA/JyYnOicnKSA6ICcnKSArIChjdXJyZW50LmhlaWdodCA+IDAgPyBgbWg9JHtjdXJyZW50LmhlaWdodH1gIDogJycpICsgYCR7YWRkaXRpb25hbFVybH1gLCBzaXplOiBjdXJyZW50IH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldEJlc3RGaXRDb250YWluZXIoaXRlbSwgZGVmYXVsdFJhdGlvV2lkdGgsIGRlZmF1bHRSYXRpb0hlaWdodCkge1xyXG4gICAgICAgIGlmIChpdGVtID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICB2YXIgcmF0aW8gPSBpdGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1yYXRpbycpO1xyXG4gICAgICAgIHZhciByYXRpb01hdGNoID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHJhdGlvICYmIHJhdGlvICE9IG51bGwgJiYgKHJhdGlvTWF0Y2ggPSAvXig/PHdpZHRoPlswLTlcXC5dezEsNH0pOig/PGhlaWdodD5bMC05XFwuXXsxLDR9KSQvZ2kuZXhlYyhyYXRpbykpICE9IG51bGwpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgZGVmYXVsdFJhdGlvV2lkdGggPSBwYXJzZUZsb2F0KHJhdGlvTWF0Y2guZ3JvdXBzLndpZHRoKTtcclxuICAgICAgICAgICAgZGVmYXVsdFJhdGlvSGVpZ2h0ID0gcGFyc2VGbG9hdChyYXRpb01hdGNoLmdyb3Vwcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFJhdGlvV2lkdGggPT0gMCkgZGVmYXVsdFJhdGlvV2lkdGggPSAtMTtcclxuICAgICAgICAgICAgaWYgKGRlZmF1bHRSYXRpb0hlaWdodCA9PSAwKSBkZWZhdWx0UmF0aW9IZWlnaHQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3aWR0aCA9IGN1cnJlbnQud2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IGN1cnJlbnQuaGVpZ2h0O1xyXG4gICAgICAgIGlmIChpdGVtLmNsYXNzTGlzdC5jb250YWlucygnYWctbGF6eScpKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gaXRlbS5nZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiKTtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gaXRlbS5nZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIik7XHJcbiAgICAgICAgICAgIGlmICh3aWR0aCA9PSB1bmRlZmluZWQgfHwgd2lkdGggPT0gbnVsbCB8fCB3aWR0aCA9PSAnJylcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gaXRlbS5zdHlsZS53aWR0aDtcclxuXHJcbiAgICAgICAgICAgIGlmICh3aWR0aCA9PSB1bmRlZmluZWQgfHwgd2lkdGggPT0gbnVsbCB8fCB3aWR0aCA9PSAnJykgd2lkdGggPSAwO1xyXG4gICAgICAgICAgICBlbHNlIHdpZHRoID0gcGFyc2VJbnQod2lkdGgucmVwbGFjZSgvW15cXGRdKy9naSwgJycpKTtcclxuICAgICAgICAgICAgaWYgKGhlaWdodCA9PSB1bmRlZmluZWQgfHwgaGVpZ2h0ID09IG51bGwgfHwgaGVpZ2h0ID09ICcnKSBoZWlnaHQgPSAwO1xyXG4gICAgICAgICAgICBlbHNlIGhlaWdodCA9IHBhcnNlSW50KGhlaWdodC5yZXBsYWNlKC9bXlxcZF0rL2dpLCAnJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmICh3aWR0aCAhPSBoZWlnaHQgJiYgKCh3aWR0aCA9PSB1bmRlZmluZWQgfHwgaGVpZ2h0ID09IHVuZGVmaW5lZCkgfHwgKGhlaWdodCA8IHdpZHRoIC8gZGVmYXVsdFJhdGlvV2lkdGggKiBkZWZhdWx0UmF0aW9IZWlnaHQpIHx8IHdpZHRoIDwgaGVpZ2h0IC8gZGVmYXVsdFJhdGlvSGVpZ2h0ICogZGVmYXVsdFJhdGlvV2lkdGgpKSB7XHJcbiAgICAgICAgICAgIGlmICh3aWR0aCA+IDApXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSB3aWR0aCAvIGRlZmF1bHRSYXRpb1dpZHRoICogZGVmYXVsdFJhdGlvSGVpZ2h0O1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCAvIGRlZmF1bHRSYXRpb0hlaWdodCAqIGRlZmF1bHRSYXRpb1dpZHRoO1xyXG4gICAgICAgIH0gICAgXHJcblxyXG5cclxuICAgICAgICBpZiAoKHdpZHRoID4gMCB8fCBkZWZhdWx0UmF0aW9XaWR0aDwwICkgJiYgKGhlaWdodCA+IDAgfHwgZGVmYXVsdFJhdGlvSGVpZ2h0PDApICkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGguZmxvb3Iod2lkdGgpO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHdpZHRoOiBkZWZhdWx0UmF0aW9XaWR0aCA8IDAgPyAwIDogd2lkdGggKyAoMTAgLSAod2lkdGggJSAxMCkpLCBoZWlnaHQ6IGRlZmF1bHRSYXRpb0hlaWdodCA8IDAgPyAwIDogaGVpZ2h0ICsgKDEwIC0gKGhlaWdodCAlIDEwKSkgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdldEJlc3RGaXRDb250YWluZXIoaXRlbS5wYXJlbnRFbGVtZW50LCBkZWZhdWx0UmF0aW9XaWR0aCwgZGVmYXVsdFJhdGlvSGVpZ2h0KTsgICAgICAgIFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBtYXBUb0F1dG9TaXplKHdpZHRoLCBoZWlnaHQpIHsgICAgICAgIFxyXG4gICAgICAgIHJldHVybiB7IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGNoZWNraXNJblZpZXdwb3J0KGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgY3VycmVudCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcclxuICAgICAgICB2YXIgZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZhciBzY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jRWwuc2Nyb2xsVG9wIHx8IGJvZHkuc2Nyb2xsVG9wO1xyXG4gICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY0VsLnNjcm9sbExlZnQgfHwgYm9keS5zY3JvbGxMZWZ0O1xyXG5cclxuICAgICAgICB2YXIgY2xpZW50VG9wID0gZG9jRWwuY2xpZW50VG9wIHx8IGJvZHkuY2xpZW50VG9wIHx8IDA7XHJcbiAgICAgICAgdmFyIGNsaWVudExlZnQgPSBkb2NFbC5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8fCAwO1xyXG5cclxuICAgICAgICB2YXIgZWxlbWVudFRvcCA9IGN1cnJlbnQudG9wICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wO1xyXG4gICAgICAgIHZhciBlbGVtZW50Qm90dG9tID0gY3VycmVudC5ib3R0b20gKyBzY3JvbGxUb3AgLSBjbGllbnRUb3A7XHJcblxyXG4gICAgICAgIGxldCB2aWV3cG9ydFRvcCA9IHNjcm9sbFRvcDtcclxuICAgICAgICBsZXQgdmlld3BvcnRCb3R0b20gPSB2aWV3cG9ydFRvcCArIHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gZWxlbWVudEJvdHRvbSA+IHZpZXdwb3J0VG9wICYmIGVsZW1lbnRUb3AgPCB2aWV3cG9ydEJvdHRvbTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBpbml0KTtcclxuXHJcbiAgICAgXHJcblxyXG4gICAgLypBY2NvcmRpb24gSlMqL1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIEFjY29yZGlvbkZuKCkge1xyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWFjYy1pXCIpICE9IG51bGwpIHtcclxuXHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tYWNjLWlcIikuZm9yRWFjaCgoYWNjaXRlbSkgPT4ge1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY2NvcmRpb25JdGVtQm9keSA9IGFjY2l0ZW0uY2xvc2VzdChcIi5pdGVtLWFjYy1jXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhY2NpdGVtLmNsYXNzTGlzdC5jb250YWlucyhcIm9wZW5cIikpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW9uSXRlbUJvZHkuc3R5bGUubWF4SGVpZ2h0ID0gYWNjb3JkaW9uSXRlbUJvZHkuc2Nyb2xsSGVpZ2h0ICsgXCJweFwiO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgYWNjaXRlbS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaXRlbS5jbGFzc0xpc3QudG9nZ2xlKFwib3BlblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2l0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW9uSXRlbUJvZHkuc3R5bGUubWF4SGVpZ2h0ID0gYWNjb3JkaW9uSXRlbUJvZHkuc2Nyb2xsSGVpZ2h0ICsgXCJweFwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhY2NpdGVtLmNsYXNzTGlzdC5jb250YWlucyhcIm9wZW5cIikpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY29yZGlvbkl0ZW1Cb2R5LnN0eWxlLm1heEhlaWdodCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS1hY2MtaVwiKS5vZmZzZXRIZWlnaHQgKyBcInB4XCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICBcclxuICAgIEFjY29yZGlvbkZuKCk7XHJcblxyXG5cclxuICAgIC8qVGFiIEpTKi9cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBUYWJGbigpIHtcclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS10YWItYlwiKSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGFiLWJcIikuZm9yRWFjaCgoYnV0dG9uLCBpbmRleCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGFiLWNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lkZUJhciA9IGJ1dHRvbi5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYnNDb250YWluZXIgPSBzaWRlQmFyLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkZUJhci5xdWVyeVNlbGVjdG9yQWxsKCcuaXRlbS10YWItYicpLmZvckVhY2goYnV0dG9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGFic0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuaXRlbS10YWItYycpLmZvckVhY2godGFiID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1tpbmRleF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgIH1cclxuICAgXHJcbiAgICBUYWJGbigpO1xyXG5cclxuXHJcbiAgICAgXHJcbiAgICAvKlByb3BlcnR5U2VhcmNoQ29udHJvbFdvcmtpbmcgSlMqL1xyXG4gICAgYXN5bmMgZnVuY3Rpb24gUHJvcGVydHlTZWFyY2hDb250cm9sV29ya2luZygpIHtcclxuXHJcblxyXG4gICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLml0ZW0tc2VhXCIpICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jb24tbWVudSBhJykuZm9yRWFjaChmdW5jdGlvbiAobWVudWl0ZW0pIHtcclxuXHJcbiAgICAgICAgICAgICAgICBtZW51aXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxhYmVsLWNvbicpLnNldEF0dHJpYnV0ZSgnZGF0YS1jb3VudHJ5JywgbWVudWl0ZW0uaW5uZXJIVE1MKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lbnVpdGVtLmNsb3Nlc3QoXCIuaXRlbS1kci1jXCIpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0uY2xvc2VzdChcIi5pdGVtLWRyLWNcIikucHJldmlvdXNFbGVtZW50U2libGluZy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRyb3BzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLml0ZW0tZHIgPiAuaXRlbS1kci1sYScpO1xyXG5cclxuICAgICAgICAgICAgZHJvcHMuZm9yRWFjaCgoZHJvcCwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkcm9wLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIFRvZ2dsZUFjdGl2ZShkcm9wLCBpZHgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gVG9nZ2xlQWN0aXZlKGVsLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICBkcm9wcy5mb3JFYWNoKChkcm9wLCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWR4ICE9PSBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkcm9wLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZHJvcHMuZm9yRWFjaCgoZHJvcERpdikgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIShldmVudC50YXJnZXQuY2xvc2VzdChcIi5pdGVtLWRyLWxhXCIpKSAmJiAhKGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiLml0ZW0tZHItY1wiKSkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BEaXYuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pdGVtLWNsJykuZm9yRWFjaChmdW5jdGlvbiAoY2xvc2VidG4pIHtcclxuXHJcbiAgICAgICAgICAgICAgICBjbG9zZWJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbG9zZWJ0bi5jbG9zZXN0KFwiLml0ZW0tZHItY1wiKS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlYnRuLmNsb3Nlc3QoXCIuaXRlbS1kci1jXCIpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBFbmFibGVTZWFyY2hiZWxvd1RhYigpIHtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDEwMjQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLml0ZW0tb25zdHh0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3NyY2gtb3BuZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNhbmNlbC1idG4nKS5mb3JFYWNoKGZ1bmN0aW9uIChjYW5jZWxidG4pIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3NyY2gtb3BuZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICBFbmFibGVTZWFyY2hiZWxvd1RhYigpO1xyXG5cclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIEVuYWJsZVNlYXJjaGJlbG93VGFiKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBQcm9wZXJ0eVNlYXJjaENvbnRyb2xXb3JraW5nKCk7XHJcblxyXG5cclxuXHJcbiAgICAvLyBzY3JvbGwgY2xhc3MgYWRkZWQgaW4gYm9keSB3aGVuIHNjcm9sbGluZ1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIFNjcm9sbGJvZHljbGFzcygpIHtcclxuICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB3aW5kb3cuc2Nyb2xsWTtcclxuICAgICAgICAgICAgaWYgKHNjcm9sbFRvcCA+IDEwKSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3Njcm9sbCcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdzY3JvbGwnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBTY3JvbGxib2R5Y2xhc3MpO1xyXG5cclxuXHJcbiAgICAvLyBCdXJnZXIgbWVudVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBIZWFkZXJCdXJnZXJDaGFuZ2UoKSB7XHJcblxyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBCdXJnZXJBY3RpdmUoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVyZ2VyLWNcIikuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaXRlbS1uLTJcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5yZW1vdmUoXCJpdGVtLW4tMlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5hZGQoXCJpdGVtLW4tMVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtdWNub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLXVjXCIpO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWhcIikucXVlcnlTZWxlY3RvcihcIm5hdlwiKS5pbnNlcnRCZWZvcmUoaXRlbXVjbm9kZSwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWhcIikucXVlcnlTZWxlY3RvcihcIm5hdlwiKS5maXJzdENoaWxkKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIEJ1cmdlckRlYWN0aXZlKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5jb250YWlucyhcIml0ZW0tbi0xXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKS5jbGFzc0xpc3QucmVtb3ZlKFwiaXRlbS1uLTFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKS5jbGFzc0xpc3QuYWRkKFwiaXRlbS1uLTJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXVjbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS11Y1wiKTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS1oXCIpLmFwcGVuZENoaWxkKGl0ZW11Y25vZGUpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSAxMDI0KSB7IEJ1cmdlckFjdGl2ZSgpOyB9XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID4gMTAyNCkgeyBCdXJnZXJEZWFjdGl2ZSgpOyB9XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVyZ2VyLWMgfiBuYXZcIikub2Zmc2V0V2lkdGggPCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jIH4gbmF2XCIpLnNjcm9sbFdpZHRoKSB7IEJ1cmdlckFjdGl2ZSgpOyB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIEhlYWRlckJ1cmdlckNoYW5nZSgpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIEhlYWRlckJ1cmdlckNoYW5nZSk7XHJcblxyXG5cclxuXHJcbiAgICAvLyBSaXBwbGUgZWZmZWN0XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gUmlwcGxlRm4oKSB7XHJcblxyXG4gICAgICAgIHZhciByaXBwbGVidXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5hLWItMSwgLmEtYi0yLCAuYS1iLTMsIC5hLWItNCwgLmEtYi01XCIpO1xyXG5cclxuICAgICAgICBpZiAocmlwcGxlYnV0dG9ucyAhPSBudWxsKSB7XHJcblxyXG5cclxuICAgICAgICAgICAgcmlwcGxlYnV0dG9ucy5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IGUub2Zmc2V0WDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IGUub2Zmc2V0WTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJpcHBsZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyaXBwbGUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJpcHBsZXMubGVuZ3RoIDwgMTApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJpcHBsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlwcGxlLmNsYXNzTGlzdC5hZGQoJ3JpcHBsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByaXBwbGUuc3R5bGUubGVmdCA9IHggKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByaXBwbGUuc3R5bGUudG9wID0geSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQocmlwcGxlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlwcGxlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIFJpcHBsZUZuKCk7XHJcblxyXG5cclxuICAgIC8qSG9tZSBwYWdlIHZpZGVvIHBsYXllciBzY3JpcHQgdG8gaGlkZSBidXR0b24qL1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIFZpZGVvUGxheUZuKCkge1xyXG5cclxuICAgICAgICB2YXIgdmlkZW9FbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIudmlkZW8tcGxheVwiKTtcclxuXHJcblxyXG4gICAgICAgIGlmICh2aWRlb0VsZW1lbnRzICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHZpZGVvRWxlbWVudHMuZm9yRWFjaCh2aWRlbyA9PiB7XHJcbiAgICAgICAgICAgICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvLmNsb3Nlc3QoXCJmaWd1cmVcIikuY2xhc3NMaXN0LmFkZChcIm5vLWJ0blwiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlkZW8uY2xvc2VzdChcImZpZ3VyZVwiKS5jbGFzc0xpc3QucmVtb3ZlKFwibm8tYnRuXCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgVmlkZW9QbGF5Rm4oKTtcclxuXHJcbn0pKCk7XHJcblxyXG5mdW5jdGlvbiBzaG93UHJvcGVydHlHYWxsZXJ5KGNsaWVudENvZGUsIHByb3BlcnR5UlQsIG1sc051bWJlciwgcGhvdG9Db3VudCwgcm9vdENsYXNzKSB7XHJcbiAgICB2YXIgX3NUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQ7XHJcbiAgICB2YXIgX2dDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucHJvcGVydHktZ2FsbGVyeS1jb250YWluZXInKTtcclxuICAgIHZhciBfZ0NvbnRhaW5lckNsb3NlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICBfZ0NvbnRhaW5lckNsb3NlLmNsYXNzTGlzdC5hZGQoJ3Byb3BlcnR5LWdhbGxlcnktY29udGFpbmVyLWNsb3NlJyk7XHJcbiAgICBfZ0NvbnRhaW5lckNsb3NlLnNldEF0dHJpYnV0ZSgndGl0bGUnLCAnQ2xvc2UgUHJvcGVydHkgR2FsbGVyeScpO1xyXG4gICAgX2dDb250YWluZXJDbG9zZS5pbm5lclRleHQgPSAnWCc7XHJcbiAgICBfZ0NvbnRhaW5lckNsb3NlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByb3BlcnR5LWdhbGxlcnktY29udGFpbmVyJykgIT0gbnVsbCkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByb3BlcnR5LWdhbGxlcnktY29udGFpbmVyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIF9zVG9wKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ3Zpc2libGUnO1xyXG4gICAgfSwgdHJ1ZSk7XHJcbiAgICBpZiAoX2dDb250YWluZXIgPT0gbnVsbCkge1xyXG4gICAgICAgIF9nQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgX2dDb250YWluZXIuY2xhc3NMaXN0LmFkZCgncHJvcGVydHktZ2FsbGVyeS1jb250YWluZXInKTtcclxuICAgICAgICBpZiAocm9vdENsYXNzICE9IG1sc051bWJlcikgX2dDb250YWluZXIuY2xhc3NMaXN0LmFkZChyb290Q2xhc3MpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoX2dDb250YWluZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIF9nQ29udGFpbmVyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwicy13LTEwMCBzLXAtciBoZXJvLXNsaWRlclwiPjxpIGNsYXNzPVwibGVmdC1idG5cIj4mbHQ7PC9pPjxkaXYgY2xhc3M9XCJpdGVtLXMgc2hvdy1uYXZcIj48L2Rpdj48aSBjbGFzcz1cInJpZ2h0LWJ0blwiPiZndDs8L2k+PGRpdiBjbGFzcz1cImRvdHMtd3JhcHBlclwiPjwvZGl2PjxkaXYgc3R5bGU9XCJjbGVhcjogYm90aDtcIj48L2Rpdj48L2Rpdj4nO1xyXG4gICAgX2dDb250YWluZXIuYXBwZW5kQ2hpbGQoX2dDb250YWluZXJDbG9zZSk7XHJcblxyXG4gICAgdmFyIF9pdGVtQ29udGFpbmVyID0gX2dDb250YWluZXIucXVlcnlTZWxlY3RvcignLml0ZW0tcycpO1xyXG4gICAgdmFyIF9pdGVtSHRtbCA9IG51bGw7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBob3RvQ291bnQ7IGkrKykge1xyXG4gICAgICAgIF9pdGVtSHRtbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIF9pdGVtSHRtbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIml0ZW1cIj48aW1nIGNsYXNzPVwibGF6eSBzLXctMTAwIHMtaC0xMDAgcy1vZi1jdlwiIGFsdD1cInByb3BlcnR5IHBob3RvICcgKyAoaSArIDEpICsgJ1wiIGRhdGEtc3JjPVwiaHR0cHM6Ly9jZG4uZGF0YWZsb2F0LmNvbS8nICsgY2xpZW50Q29kZSArICdfUFVCTElDL01MU1Bob3Rvcy8nICsgcHJvcGVydHlSVC50b1VwcGVyQ2FzZSgpICsgJy8nICsgbWxzTnVtYmVyICsgJ18nICsgKGkgKyAxKSArICcuanBnXCIgLz48L2Rpdj4nXHJcbiAgICAgICAgX2l0ZW1Db250YWluZXIuYXBwZW5kKF9pdGVtSHRtbC5maXJzdEVsZW1lbnRDaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWdTbGlkZXIoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhdXRvUGxheTogdHJ1ZSxcclxuICAgICAgICAgICAgYXV0b1BsYXlEZWxheTogNTAwMCxcclxuICAgICAgICAgICAgbG9vcDogdHJ1ZSxcclxuICAgICAgICAgICAgc2hvd0J1bGxldHM6IHRydWUsXHJcbiAgICAgICAgICAgIHNob3dDb250cm9sczogdHJ1ZSxcclxuICAgICAgICAgICAgYnVsbGV0Q29udGFpbmVyOiAnLmRvdHMtd3JhcHBlcicsXHJcbiAgICAgICAgICAgIHNob3dCdWxsZXRzQXNUaHVtYjogdHJ1ZSxcclxuICAgICAgICAgICAgaXRlbVdyYXBwZXI6ICcuaXRlbS1zJyxcclxuICAgICAgICAgICAgaXRlbUNvbnRhaW5lcjogJy5pdGVtJyxcclxuICAgICAgICB9LCAnLnByb3BlcnR5LWdhbGxlcnktY29udGFpbmVyJywgZnVuY3Rpb24gKHNsaWRlcikge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcclxuICAgICAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWdTbGlkZXIoc2V0dGluZ3MsIGNvbnRhaW5lciwgb25Jbml0Q29tcGxldGUpIHtcclxuICAgIHZhciBfc2V0dGluZ3MgPSB7XHJcbiAgICAgICAgYXV0b1BsYXk6IGZhbHNlLFxyXG4gICAgICAgIGF1dG9QbGF5RGVsYXk6IDMwMDAsXHJcbiAgICAgICAgbG9vcDogZmFsc2UsXHJcbiAgICAgICAgc2hvd0NvbnRyb2xzOiB0cnVlLFxyXG4gICAgICAgIGJ0bkxlZnQ6ICcubGVmdC1idG4nLFxyXG4gICAgICAgIGJ0blJpZ2h0OiAnLnJpZ2h0LWJ0bicsXHJcbiAgICAgICAgc2hvd0J1bGxldHM6IGZhbHNlLFxyXG4gICAgICAgIHNob3dCdWxsZXRzQXNUaHVtYjogZmFsc2UsXHJcbiAgICAgICAgYnVsbGV0Q29udGFpbmVyOiAnLmJ1bGxldHMnLFxyXG4gICAgICAgIGl0ZW1XcmFwcGVyOiAnLmFneS1jYXJvLWluJyxcclxuICAgICAgICB3cmFwcGVyTWFzazogMCwgLyogSXQgc2hvdWxkIGJlIGluIHBlcmNlbnRhZ2UgMC0xMDAgKi9cclxuICAgICAgICBpdGVtQ29udGFpbmVyOiAnLmFneS1jYXJvLWl0J1xyXG4gICAgfVxyXG4gICAgaWYgKHNldHRpbmdzICE9IG51bGwgJiYgc2V0dGluZ3MgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgX3NldHRpbmdzID0gZXh0ZW5kSnNvbihfc2V0dGluZ3MsIHNldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udGFpbmVyID09IHVuZGVmaW5lZCB8fCBjb250YWluZXIgPT0gbnVsbCkgY29udGFpbmVyID0gJy5hZ3ktY2Fybyc7XHJcbiAgICB2YXIgX3NsaWRlcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGNvbnRhaW5lcik7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IF9zbGlkZXJzICE9IG51bGwgJiYgX3NsaWRlcnMgIT0gdW5kZWZpbmVkICYmIF9zbGlkZXJzLmxlbmd0aCA+IGk7IGkrKykge1xyXG4gICAgICAgIGluaXRTbGlkZXIoX3NsaWRlcnNbaV0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluaXRTbGlkZXIoc2xpZGVyKSB7XHJcbiAgICAgICAgdmFyIF9pdGVtcyA9IHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtV3JhcHBlcik7XHJcbiAgICAgICAgdmFyIF9pdGVtc0NvdW50ID0gX2l0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGwoX3NldHRpbmdzLml0ZW1Db250YWluZXIpLmxlbmd0aDtcclxuICAgICAgICB2YXIgX2l0ZW1XaWR0aCA9IF9pdGVtcy5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyKS5vZmZzZXRXaWR0aDtcclxuICAgICAgICB2YXIgX2l0ZW1zSW5WaWV3UG9ydCA9IE1hdGgucm91bmQoX2l0ZW1zLm9mZnNldFdpZHRoIC8gX2l0ZW1XaWR0aCk7XHJcbiAgICAgICAgdmFyIF9hY3RpdmVTSXRlbUlkeCA9IDAsIF9hY3RpdmVFSXRlbUlkeCA9IF9pdGVtc0NvdW50LCBfYWN0aXZlUGFnZUlkeCA9IDA7XHJcbiAgICAgICAgdmFyIF9idG5MZWZ0ID0gKF9zZXR0aW5ncy5idG5MZWZ0ICE9IG51bGwgJiYgX3NldHRpbmdzLmJ0bkxlZnQgIT0gdW5kZWZpbmVkKSA/IHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idG5MZWZ0KSA6IG51bGw7XHJcbiAgICAgICAgdmFyIF9idG5SaWdodCA9IChfc2V0dGluZ3MuYnRuUmlnaHQgIT0gbnVsbCAmJiBfc2V0dGluZ3MuYnRuUmlnaHQgIT0gdW5kZWZpbmVkKSA/IHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idG5SaWdodCkgOiBudWxsO1xyXG4gICAgICAgIHZhciBfcGF1c2VQbGF5ID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIF9pc0hlcm9TbGlkZXIgPSAoX2l0ZW1zLm9mZnNldFdpZHRoID09IF9pdGVtV2lkdGgpO1xyXG4gICAgICAgIHZhciBfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIF93cmFwcGVyTWFzdFNjcm9sbExlZnQgPSAwO1xyXG5cclxuICAgICAgICBpZiAoIWlzTmFOKF9zZXR0aW5ncy53cmFwcGVyTWFzaykgJiYgX3NldHRpbmdzLndyYXBwZXJNYXNrID4gMCkge1xyXG4gICAgICAgICAgICBfc2V0dGluZ3Mud3JhcHBlck1hc2sgPSBfc2V0dGluZ3Mud3JhcHBlck1hc2sgPiAxMDAgPyAxMDAgOiBfc2V0dGluZ3Mud3JhcHBlck1hc2s7XHJcbiAgICAgICAgICAgIF9pdGVtcy5zdHlsZS5zY3JvbGxQYWRkaW5nID0gX3NldHRpbmdzLndyYXBwZXJNYXNrICsgJyUnO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9pdGVtc0NvdW50ID4gMikge1xyXG4gICAgICAgICAgICAgICAgX21vdmVMYXN0SXRlbVRvRmlyc3RGb3JXcmFwcGVyTWFzayA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfaXRlbUFycmF5ID0gX2l0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGwoX3NldHRpbmdzLml0ZW1Db250YWluZXIpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2l0ZW1BcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBfaXRlbUFycmF5W2ldLmNsYXNzTGlzdC5hZGQoJ2lkeC0nICsgaSk7XHJcbiAgICAgICAgICAgIGlmIChfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrICYmIGkgPT0gX2l0ZW1BcnJheS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICBfaXRlbXMucHJlcGVuZChfaXRlbUFycmF5W2ldKTtcclxuICAgICAgICAgICAgICAgIF93cmFwcGVyTWFzdFNjcm9sbExlZnQgPSBfaXRlbXMuc2Nyb2xsTGVmdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF9idG5MZWZ0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKCFfc2V0dGluZ3Muc2hvd0NvbnRyb2xzKSBfYnRuTGVmdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBfYnRuTGVmdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChfYWN0aXZlU0l0ZW1JZHggPT0gMCAmJiAhX3NldHRpbmdzLmxvb3ApIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGlmIChfYWN0aXZlU0l0ZW1JZHggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5zY3JvbGxMZWZ0ID0gX2l0ZW1XaWR0aCAqIChfaXRlbXNDb3VudCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZUl0ZW1zKF9pdGVtV2lkdGggKiAoX2l0ZW1zQ291bnQgLSBfaXRlbXNJblZpZXdQb3J0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfaXRlbXMuc2Nyb2xsTGVmdCA9IF9pdGVtcy5zY3JvbGxMZWZ0ICsgKC1faXRlbVdpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVJdGVtcygoIV9pc0hlcm9TbGlkZXIpID8gKF9pdGVtcy5zY3JvbGxMZWZ0ICsgKC1faXRlbVdpZHRoKSkgOiAoKF9hY3RpdmVTSXRlbUlkeCAtIDEpICogX2l0ZW1XaWR0aCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfYnRuUmlnaHQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoIV9zZXR0aW5ncy5zaG93Q29udHJvbHMpIF9idG5SaWdodC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBfYnRuUmlnaHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX2FjdGl2ZUVJdGVtSWR4ID09IChfaXRlbXNDb3VudCAtIDEpICYmICFfc2V0dGluZ3MubG9vcCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgaWYgKF9hY3RpdmVFSXRlbUlkeCA9PSAoX2l0ZW1zQ291bnQgLSAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5zY3JvbGxMZWZ0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVJdGVtcyhfd3JhcHBlck1hc3RTY3JvbGxMZWZ0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5zY3JvbGxMZWZ0ID0gX2l0ZW1zLnNjcm9sbExlZnQgKyAoK19pdGVtV2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZUl0ZW1zKCghX2lzSGVyb1NsaWRlcikgPyAoX2l0ZW1zLnNjcm9sbExlZnQgKyAoK19pdGVtV2lkdGgpKSA6ICgoX2FjdGl2ZVNJdGVtSWR4ICsgMSkgKiBfaXRlbVdpZHRoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF9zZXR0aW5ncy5zaG93QnVsbGV0cykge1xyXG4gICAgICAgICAgICBpZiAoc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikgPT0gbnVsbCB8fCBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIF9zZXR0aW5ncy5zaG93QnVsbGV0cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKE1hdGgucm91bmQoX2l0ZW1zQ291bnQgLyBfaXRlbXNJblZpZXdQb3J0KSk7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9idWxsZXQgPSAoIV9zZXR0aW5ncy5zaG93QnVsbGV0c0FzVGh1bWIgJiYgIV9pc0hlcm9TbGlkZXIpID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJykgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgICAgIF9idWxsZXQuY2xhc3NMaXN0LmFkZCgnZG90Jyk7XHJcbiAgICAgICAgICAgICAgICBfYnVsbGV0LmNsYXNzTGlzdC5hZGQoJ2lkeC0nICsgaSk7XHJcbiAgICAgICAgICAgICAgICBfYnVsbGV0LnNldEF0dHJpYnV0ZSgnaWR4JywgaSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3NldHRpbmdzLnNob3dCdWxsZXRzQXNUaHVtYiAmJiBfaXNIZXJvU2xpZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aHVtYkltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aHVtYkltYWdlUyA9IF9pdGVtcy5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIGkgKyAnIGltZycpICE9IG51bGwgPyBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyBpbWcnKSA6IF9pdGVtcy5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIGkgKyAnIHZpZGVvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RodW1iSW1hZ2Uuc2V0QXR0cmlidXRlKCdzcmMnLCAoX3RodW1iSW1hZ2VTLm5vZGVOYW1lID09ICdJTUcnKSA/IF90aHVtYkltYWdlUy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykgOiBfdGh1bWJJbWFnZVMuZ2V0QXR0cmlidXRlKCdkYXRhLXRodW1iJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9idWxsZXQuYXBwZW5kQ2hpbGQoX3RodW1iSW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkgX2J1bGxldC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIF9idWxsZXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRQYWdlKHBhcnNlSW50KGkuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ2lkeCcpKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLmFwcGVuZENoaWxkKF9idWxsZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoX3NldHRpbmdzLmF1dG9QbGF5KSB7XHJcbiAgICAgICAgICAgIGF1dG9QbGF5KCk7XHJcbiAgICAgICAgICAgIF9pdGVtcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCBmdW5jdGlvbiAoKSB7IGlmIChfaXRlbXMub2Zmc2V0V2lkdGggPT0gX2l0ZW1XaWR0aCkgcmV0dXJuOyBfcGF1c2VQbGF5ID0gdHJ1ZTsgfSk7XHJcbiAgICAgICAgICAgIF9pdGVtcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCBmdW5jdGlvbiAoKSB7IGlmIChfaXRlbXMub2Zmc2V0V2lkdGggPT0gX2l0ZW1XaWR0aCkgcmV0dXJuOyBfcGF1c2VQbGF5ID0gZmFsc2U7IH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYXV0b1BsYXkoKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFfcGF1c2VQbGF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2J0blJpZ2h0LmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhdXRvUGxheSgpO1xyXG4gICAgICAgICAgICB9LCBfc2V0dGluZ3MuYXV0b1BsYXlEZWxheSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBsb2FkUGFnZShpZHgpIHtcclxuICAgICAgICAgICAgX2FjdGl2ZVBhZ2VJZHggPSBpZHg7XHJcbiAgICAgICAgICAgIF9zZXR0aW5ncy5hdXRvUGxheSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBfcGF1c2VQbGF5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgX2l0ZW1zLnNjcm9sbExlZnQgPSAoaWR4ICogX2l0ZW1zSW5WaWV3UG9ydCkgKiBfaXRlbVdpZHRoO1xyXG4gICAgICAgICAgICBzZXRBY3RpdmVJdGVtcygoaWR4ICogX2l0ZW1zSW5WaWV3UG9ydCkgKiBfaXRlbVdpZHRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldEFjdGl2ZUl0ZW1zKF9pdGVtcy5zY3JvbGxMZWZ0KTtcclxuICAgICAgICBmdW5jdGlvbiBzZXRBY3RpdmVJdGVtcyhzTGVmdCkge1xyXG4gICAgICAgICAgICBfYWN0aXZlU0l0ZW1JZHggPSBNYXRoLnJvdW5kKChzTGVmdCAtIF93cmFwcGVyTWFzdFNjcm9sbExlZnQpIC8gX2l0ZW1XaWR0aCk7XHJcbiAgICAgICAgICAgIF9hY3RpdmVFSXRlbUlkeCA9IE1hdGgucm91bmQoX2FjdGl2ZVNJdGVtSWR4ICsgX2l0ZW1zSW5WaWV3UG9ydCAtIDEpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfaXRlbXNDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIGlmIChpID49IF9hY3RpdmVTSXRlbUlkeCAmJiBpIDw9IF9hY3RpdmVFSXRlbUlkeCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDw9IF9hY3RpdmVFSXRlbUlkeCAtICgoX21vdmVMYXN0SXRlbVRvRmlyc3RGb3JXcmFwcGVyTWFzaykgPyAxIDogMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1zLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1Db250YWluZXIgKyAnLmlkeC0nICsgaSkuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyB2aWRlbycpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdmlkZW8gPSBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyB2aWRlbycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZpZGVvLnNldEF0dHJpYnV0ZSgnc3JjJywgX3ZpZGVvLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmlkZW8ucGF1c2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92aWRlby5jdXJyZW50VGltZSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmlkZW8ucGxheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3BhdXNlUGxheSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBmdW5jdGlvbiAoZSkgeyBfcGF1c2VQbGF5ID0gZmFsc2U7IH0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfaXRlbXMucXVlcnlTZWxlY3RvckFsbChfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyBpbWcnKS5mb3JFYWNoKGltZyA9PiB7IGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykpOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrICYmIGkgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5xdWVyeVNlbGVjdG9yQWxsKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIChfaXRlbXNDb3VudCAtIDEpICsgJyBpbWcnKS5mb3JFYWNoKGltZyA9PiB7IGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykpOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoX2FjdGl2ZVNJdGVtSWR4ID09IDAgJiYgIV9zZXR0aW5ncy5sb29wKSBfYnRuTGVmdC5jbGFzc0xpc3QuYWRkKCdkaXNhYmxlZCcpOyBlbHNlIF9idG5MZWZ0LmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIGlmIChfYWN0aXZlRUl0ZW1JZHggPT0gKF9pdGVtc0NvdW50IC0gMSkgJiYgIV9zZXR0aW5ncy5sb29wKSBfYnRuUmlnaHQuY2xhc3NMaXN0LmFkZCgnZGlzYWJsZWQnKTsgZWxzZSBfYnRuUmlnaHQuY2xhc3NMaXN0LnJlbW92ZSgnZGlzYWJsZWQnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChfc2V0dGluZ3Muc2hvd0J1bGxldHMpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKE1hdGgucm91bmQoX2l0ZW1zQ291bnQgLyBfaXRlbXNJblZpZXdQb3J0KSk7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IChNYXRoLnJvdW5kKChfYWN0aXZlU0l0ZW1JZHggKyBfaXRlbXNJblZpZXdQb3J0KSAvIF9pdGVtc0luVmlld1BvcnQpIC0gMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lciArICcgLmRvdC5pZHgtJyArIGkpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lciArICcgLmRvdC5pZHgtJyArIGkpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvbkluaXRDb21wbGV0ZSAhPSBudWxsICYmIG9uSW5pdENvbXBsZXRlICE9IHVuZGVmaW5lZCkgb25Jbml0Q29tcGxldGUoc2xpZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBleHRlbmRKc29uKHNEZWZhdWx0LCBjdXN0b20pIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gY3VzdG9tKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXN0b20uaGFzT3duUHJvcGVydHkoa2V5KSkgc0RlZmF1bHRba2V5XSA9IGN1c3RvbVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc0RlZmF1bHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBJc05vdE51bGwoVmFsdWUpIHtcclxuICAgIHJldHVybiBWYWx1ZSAhPSBudWxsICYmIFZhbHVlICE9IHVuZGVmaW5lZCAmJiBWYWx1ZS5sZW5ndGggPiAwICYmIFZhbHVlICE9IFwiMFwiICYmIFZhbHVlICE9IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIElzTm90TnVsbE9ySXNaZXJvKFZhbHVlKSB7XHJcbiAgICByZXR1cm4gVmFsdWUgIT0gbnVsbCAmJiBWYWx1ZSAhPSB1bmRlZmluZWQgJiYgVmFsdWUubGVuZ3RoID4gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gRW5hYmxlU2VhcmNoRm9ybSgpIHtcclxuICAgIGZ1bmN0aW9uIHNlYXJjaEFjdG9uKHNlbmRlcikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgJHNlbmRlciA9ICQoc2VuZGVyKTtcclxuICAgICAgICAgICAgdmFyICRmb3JtID0gJHNlbmRlci5jbG9zZXN0KCdbZGF0YS1zZWFyY2gtZm9ybV0nKTtcclxuICAgICAgICAgICAgdmFyIF91cmxRdWVyeSA9IGNvbXBvc2VVcmxRdWVyeSh7IHNlbGVjdDogJGZvcm0gfSk7XHJcbiAgICAgICAgICAgIHZhciBfcnQgPSAkZm9ybS5kYXRhKCdzZWFyY2gtZm9ybScpO1xyXG4gICAgICAgICAgICB2YXIgJHNvcnQgPSAkKCdbZGF0YS1zb3J0LW9iamVjdD1cIicgKyBfcnQgKyAnXCJdJyk7XHJcbiAgICAgICAgICAgIHZhciBfZGVmYXVsdCA9ICRmb3JtLmRhdGEoJ2RlZmF1bHQtc2VhcmNoJyk7XHJcbiAgICAgICAgICAgIHZhciBfZGVmYXVsdFNvcnQgPSAkZm9ybS5kYXRhKCdkZWZhdWx0LXNvcnQnKTtcclxuICAgICAgICAgICAgaWYgKCh0eXBlb2YgKF9kZWZhdWx0KSAhPSAndW5kZWZpbmVkJyAmJiBfZGVmYXVsdCAhPSAnJyAmJiBfdXJsUXVlcnkuaW5kZXhPZignL2FkZHJlc3MtJykgPT0gLTEgJiYgX3VybFF1ZXJ5LmluZGV4T2YoJy9tbHMtJykgPT0gLTEpKSBfdXJsUXVlcnkgKz0gX2RlZmF1bHQ7XHJcbiAgICAgICAgICAgIGlmICgkc29ydC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3NvcnRWYWx1ZSA9ICRzb3J0LnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgX3VybFF1ZXJ5ICs9IF9zb3J0VmFsdWUgIT0gbnVsbCAmJiBfc29ydFZhbHVlICE9ICcnID8gX3NvcnRWYWx1ZSA6ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiAoX2RlZmF1bHRTb3J0KSAhPSAndW5kZWZpbmVkJyAmJiBfZGVmYXVsdFNvcnQgIT0gbnVsbCAmJiBfZGVmYXVsdFNvcnQgIT0gJycpIF91cmxRdWVyeSArPSBfZGVmYXVsdFNvcnQ7XHJcbiAgICAgICAgICAgICRmb3JtLnRyaWdnZXJIYW5kbGVyKCdzZWFyY2gnLCBbeyBxdWVyeTogX3VybFF1ZXJ5IH1dKTtcclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1zZWFyY2gtZm9ybV0gW2RhdGEtc2VhcmNoLWJ1dHRvbl0nLCB7fSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNlYXJjaEFjdG9uKHRoaXMpO1xyXG4gICAgfSk7XHJcbiAgICAkKGRvY3VtZW50KS5vbigna2V5ZG93bicsICdbZGF0YS1zZWFyY2gtZm9ybV0gW2RhdGEtc2VhcmNoLWFjdGlvbl0nLCB7fSwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzKVxyXG4gICAgICAgICAgICBzZWFyY2hBY3Rvbih0aGlzKTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoJ1tkYXRhLXNlYXJjaC1mb3JtXScpLm9uKCdzZWFyY2gnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgIHZhciAkc2VuZGVyID0gJCh0aGlzKTtcclxuICAgICAgICB2YXIgJHByZWZpeCA9ICRzZW5kZXIuZGF0YSgnc2VhcmNoLXByZWZpeCcpO1xyXG4gICAgICAgIHZhciBfcHJlZml4ID0gKElzTm90TnVsbCgkcHJlZml4KSAmJiAkcHJlZml4ICE9ICd1bmRlZmluZWQnKSA/ICRwcmVmaXggOiBHZXRTZWFyY2hQcmVmaXhGb3JSZWNvcmRUeXBlKCRzZW5kZXIuZGF0YSgnc2VhcmNoLWZvcm0nKSk7XHJcbiAgICAgICAgdmFyIHBhdHRlcm4gPSAvXlxcL1xcLy87XHJcbiAgICAgICAgaWYgKCFwYXR0ZXJuLnRlc3QoKF9wcmVmaXggIT0gbnVsbCAmJiBfcHJlZml4ICE9ICcnICYmIF9wcmVmaXggIT0gJ3VuZGVmaW5lZCcgPyBfcHJlZml4IDogJycpICsgZGF0YS5xdWVyeSkpXHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IChfcHJlZml4ICE9IG51bGwgJiYgX3ByZWZpeCAhPSAnJyAmJiBfcHJlZml4ICE9ICd1bmRlZmluZWQnID8gX3ByZWZpeCA6ICcnKSArIGRhdGEucXVlcnk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gR2V0U2VhcmNoUHJlZml4Rm9yUmVjb3JkVHlwZShyZWNvcmRUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHJlY29yZFR5cGUpIHtcclxuICAgICAgICBjYXNlICdQUk9QRVJUWSc6IHJldHVybiAnL3Byb3BlcnRpZXMnO1xyXG4gICAgICAgIGNhc2UgJ1BST1BFUlRZUkVOVCc6IHJldHVybiAnL3Byb3BlcnR5LXNlYXJjaC1tYXAtb24tcmVudCc7XHJcbiAgICAgICAgY2FzZSAnUFJPUEVSVFlTT0xEJzogcmV0dXJuICcvcHJvcGVydHktc2VhcmNoLW1hcC9zb2xkJztcclxuICAgICAgICBjYXNlICdBR0VOVCc6IHJldHVybiAnL3JlYWwtZXN0YXRlLWFnZW50cyc7XHJcbiAgICAgICAgY2FzZSAnT0ZGSUNFJzogcmV0dXJuICcvcmVhbC1lc3RhdGUtb2ZmaWNlcyc7XHJcbiAgICAgICAgY2FzZSAnQkxPRyc6IHJldHVybiAnL2Jsb2cvc2VhcmNoJztcclxuICAgICAgICBjYXNlICdBR0VOVFRFQU0nOiByZXR1cm4gJy9yZWFsLWVzdGF0ZS1hZ2VudHMnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcvJztcclxufVxyXG5mdW5jdGlvbiBHZXREZWZhdWx0U29ydEZvclJlY29yZFR5cGUocmVjb3JkVHlwZSkge1xyXG4gICAgc3dpdGNoIChyZWNvcmRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSAnUFJPUEVSVFknOiByZXR1cm4gJy9kc29ydC1wJztcclxuICAgICAgICBjYXNlICdQUk9QRVJUWVJFTlQnOiByZXR1cm4gJy9kc29ydC1wJztcclxuICAgICAgICBjYXNlICdBR0VOVCc6IHJldHVybiAnL3NvcnQtbic7XHJcbiAgICAgICAgY2FzZSAnQUdFTlRURUFNJzogcmV0dXJuICcvc29ydC1uJztcclxuICAgICAgICBjYXNlICdPRkZJQ0UnOiByZXR1cm4gJy9zb3J0LW4nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gaW5pdE1hcERlZmF1bHQoKSB7XHJcbiAgICBpZiAod2luZG93Lm9uTWFwTG9hZGVkKSB3aW5kb3cub25NYXBMb2FkZWQoKTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIEVuYWJsZURlbWFuZEltcG9ydCgpIHtcclxuICAgIF9pbml0KCk7XHJcbiAgICBmdW5jdGlvbiBfaW5pdCgpIHtcclxuICAgICAgICAkKFwiaW1nW2RhdGEtZGVtYW5kLWtleV1cIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIEdldFByb3BlcnRpZXMoJCh0aGlzKSwgJCh0aGlzKS5kYXRhKCdkZW1hbmQtdXJsJyksICQodGhpcykuZGF0YSgnZGVtYW5kLWtleScpLCAkKHRoaXMpLmRhdGEoJ2xheW91dCcpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1jay1ocmVmXScsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBHZXRQcm9wZXJ0aWVzKCQodGhpcykucGFyZW50cygnW2RhdGEtY2stcHJvcGVydHlsaXN0XTpmaXJzdCcpLCAkKHRoaXMpLmRhdGEoJ2NrLWhyZWYnKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eWxpc3RdOmZpcnN0JykuZGF0YSgnY2stZGVtYW5kLWtleScpLCAkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWNrLXByb3BlcnR5bGlzdF06Zmlyc3QnKS5kYXRhKCdjay1kZW1hbmQtbGF5b3V0JykpO1xyXG4gICAgfSk7XHJcblxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHNlbGVjdG9yRWxlbWVudDtcclxuICAgIHZhciBjdXJyZW50U2V0dGluZ3M7XHJcbiAgICB2YXIgbGFuZ3VhZ2VTb3VyY2VzID0ge1xyXG4gICAgICAgIGxhbmd1YWdlczogW1xyXG4gICAgICAgICAgICB7IGNvZGU6ICdlbicsIGxhYmVsOiAnRW5nbGlzaCcgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnZXMnLCBsYWJlbDogJ1NwYW5pc2gnLCBsb2NhbExhYmVsOiAnRXNwYcOxb2wnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ25sJywgbGFiZWw6ICdEdXRjaCcsIGxvY2FsTGFiZWw6ICdOZWRlcmxhbmRzJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdwcicsIGxhYmVsOiAnUG9ydHVnZXNlJywgbG9jYWxMYWJlbDogJ1BvcnR1Z3XDqnMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ2ZyJywgbGFiZWw6ICdGcmVuY2gnLCBsb2NhbExhYmVsOidGcmFuw6dhaXMnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjdXJyZW5jaWVzOiBbXHJcbiAgICAgICAgICAgIHsgY29kZTogJ1VTRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0RvbGxhcicsIGZvcm1hdDogJyQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnQUVEJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnVW5pdGVkIEFyYWIgRW1pcmF0ZXMgRGlyaGFtJywgZm9ybWF0OiAnQUVEIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0JTRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0JhaGFtaWFuIERvbGxhcicsIGZvcm1hdDogJ0IkIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0NBRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0NhbmFkaWFuIERvbGxhcicsIGZvcm1hdDogJyQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnRE9QJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnRG9taW5pY2FuIFBlc28nLCBmb3JtYXQ6ICdSRCQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnRVVSJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnRXVybycsIGZvcm1hdDogJ+KCrCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdKTUQnLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdKYW1haWNhbiBEb2xsYXInLCBmb3JtYXQ6ICdKJCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdLWUQnLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdDYXltYW4gSXNsYW5kcyBEb2xsYXInLCBmb3JtYXQ6ICdDSSQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnTVhOJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnTWV4aWNhbiBQZXNvJywgZm9ybWF0OiAnJCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdQQUInLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdQYW5hbWFuaWFuIEJhbGJvYScsIGZvcm1hdDogJ0IvLiMjIywjIyMsIyMjLiMjJyB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bml0czogW1xyXG4gICAgICAgICAgICB7IGNvZGU6ICdpbXBlcmlhbCcsIGxhYmVsOiAnSW1wZXJpYWwnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ21ldHJpYycsIGxhYmVsOiAnTWV0cmljJyB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICBwcmVzZXRzOiBbXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0JTJywgbGFiZWw6ICdCYWhhbWFzJywgY3VycmVuY3k6ICdCU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0NBJywgbGFiZWw6ICdDYW5hZGEnLCBjdXJyZW5jeTogJ0NBRCcsIGxhbmd1YWdlOiBbJ2VuJywgJ2ZyJ10sIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdKTScsIGxhYmVsOiAnSmFtYWljYScsIGN1cnJlbmN5OiAnSk1EJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdLWScsIGxhYmVsOiAnQ2F5bWFuIElzbGFuZHMnLCBjdXJyZW5jeTogJ0tZRCcsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnVEMnLCBsYWJlbDogJ1R1cmtzICYgQ2FpY29zIElzbGFuZHMnLCBsb2NhbExhYmVsOiAnJywgY3VycmVuY3k6ICdVU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ1VTJywgbGFiZWw6ICdVbml0ZWQgU3RhdGVzJywgbG9jYWxMYWJlbDogJycsIGN1cnJlbmN5OiAnVVNEJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnaW1wZXJpYWwnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0RZJywgbGFiZWw6ICdEb21pbmljYW4gUmVwdWJsaWMnLCBsb2NhbExhYmVsOiAnUmVww7pibGljYSBEb21pbmljYW5hJywgY3VycmVuY3k6ICdVU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0VTJywgbGFiZWw6ICdTcGFpbicsIGxvY2FsTGFiZWw6ICdFc3Bhw7FhJywgY3VycmVuY3k6ICdVU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ01YJywgbGFiZWw6ICdNZXhpY28nLCBsb2NhbExhYmVsOiAnTcOpeGljbycsIGN1cnJlbmN5OiAnTVhOJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdQQScsIGxhYmVsOiAnUGFuYW1hJywgbG9jYWxMYWJlbDogJ1BhbmFtw6EnLCBjdXJyZW5jeTogJ1BBQicsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnTkwnLCBsYWJlbDogJ05lZGVybGFuZHMnLCBsb2NhbExhYmVsOiAnTmVkZXJsYW5kJywgY3VycmVuY3k6ICdFVVInLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ1BUJywgbGFiZWw6ICdQb3J0dWdhbCcsIGN1cnJlbmN5OiAnRVVSJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG5cclxuICAgICAgICBdLFxyXG4gICAgICAgIHVuaXRDb252ZXJ0aW9uczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB1bml0OiAnU1FGVCcsXHJcbiAgICAgICAgICAgICAgICB0cmFnZXRVbml0OiAnU3EuTScsICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3RhbnQ6IDAuMDkyOTAzLFxyXG4gICAgICAgICAgICAgICAgbm90YXRpb246IFsnU3FmdCcsICdTcS5GdCcsICdTcS5GdC4nLCAnU3EuIEZ0LicsICdTRiddXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHVuaXQ6ICdNSScsXHJcbiAgICAgICAgICAgICAgICB0cmFnZXRVbml0OiAnS00nLFxyXG4gICAgICAgICAgICAgICAgY29uc3RhbnQ6IDEuNjA5MzQsXHJcbiAgICAgICAgICAgICAgICBub3RhdGlvbjpbJ21pJywnbWlsZXMnLCdtaWxlJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdDogJ0FDJyxcclxuICAgICAgICAgICAgICAgIHRyYWdldFVuaXQ6ICdTUU0nLFxyXG4gICAgICAgICAgICAgICAgY29uc3RhbnQ6IDQwNDYuODYsXHJcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogWydhY3JlJywgJ2FjcmVzJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdDogJ0xPVFNJWkUnLFxyXG4gICAgICAgICAgICAgICAgdHJhZ2V0VW5pdDogJ0xvdCBTaXplJyxcclxuICAgICAgICAgICAgICAgIHRhcmdldE5vdGF0aW9uOiAn446hJyxcclxuICAgICAgICAgICAgICAgIGNvbnN0YW50OiA0MDQ2Ljg2LFxyXG4gICAgICAgICAgICAgICAgbm90YXRpb246IFsnTG90IFNpemUnXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG5cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciByZWNlbnRTdGF0ZSA9IG51bGw7XHJcbiAgICB2YXIgdW5pdENvbnZlcnRpb25TY2hlbWEgPSBudWxsOyAgICBcclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBpbml0KCkge1xyXG4gICAgICAgIHZhciBjaGFuZ2VMYW5ndWFnZU5vZGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWxhbmd1YWdlXScpO1xyXG4gICAgICAgIGNoYW5nZUxhbmd1YWdlTm9kZXMuZm9yRWFjaChlbmFibGVMYW5ndWFnZVNlbGVjdG9yKTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuICAgICAgICBpZiAoY3VycmVudD8uY29kZSlcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UudXBkYXRlJywgeyBkZXRhaWw6IGN1cnJlbnQgfSkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50ID0gbGFuZ3VhZ2VTb3VyY2VzLnByZXNldHMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLmNvZGUgPT0gJ1VTJzsgfSlbMF07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgc2V0KGtleSwgQXJyYXkuaXNBcnJheShjdXJyZW50W2tleV0pID8gY3VycmVudFtrZXldWzBdIDogY3VycmVudFtrZXldKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UudXBkYXRlJywgeyBkZXRhaWw6IGN1cnJlbnQgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB1cGRhdGVQcmljZSh0cnVlKTsgICAgICAgICAgXHJcbiAgICAgICAgaWYgKGN1cnJlbnQubGFuZ3VhZ2UgJiYgY3VycmVudC5sYW5ndWFnZS5pbmRleE9mKCdlbicpID09IC0xKVxyXG4gICAgICAgICAgICB1cGRhdGVMYW5ndWFnZSgpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZWNlbnRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnQpO1xyXG4gICAgICAgICAgICBzZXRMYW5ndWFnZVRvU3RvcmUoeyBMb2NhbGU6ICdlbl9VUycgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaEFjdGlvbnMoKTtcclxuICAgICAgICBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEgPSBhd2FpdCBidWlsZFVuaXRDb252ZXJ0aW9uU2NoZW1hKCk7XHJcbiAgICAgICAgdXBkYXRlTWVzc3VyZW1lbnQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gYnVpbGRVbml0Q29udmVydGlvblNjaGVtYSgpIHtcclxuICAgICAgICB2YXIgZXhwcmVzc2lvblN0cmluZyA9ICcnO1xyXG4gICAgICAgIHZhciBub3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgPSAnJztcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICBub3RhdGlvbkV4cHJlc3Npb25zOiB7fSxcclxuICAgICAgICAgICAgbm90YXRpb25Pbmx5RXhwcmVzc2lvbnM6IHt9LFxyXG4gICAgICAgICAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZUFsbCgvW14wLTlcXFxcLl0vZ2ksICcnKSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZm9ybWF0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycseyBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDIgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGhhdmVWYWxpZEF0dHJpYnV0ZTogZnVuY3Rpb24gKGl0ZW0pIHsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5oYXNBdHRyaWJ1dGUgPyBpdGVtLmhhc0F0dHJpYnV0ZSgnZGF0YS10aCcpIDogZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldExhYmVsRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0QXR0cmlidXRlP2l0ZW0uZ2V0QXR0cmlidXRlKCdkYXRhLXRoJyk6Jyc7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldExhYmVsRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAoaXRlbSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnNldEF0dHJpYnV0ZSlcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnZGF0YS10aCcsIHZhbHVlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0VmFsdWVGb3JBdHRyaWJ1dGU6IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pbm5lclRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldFZhbHVlRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAoaXRlbSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uaW5uZXJUZXh0ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICB2YXIgc3ViRXhwcmVzc2lvblN0cmluZyA9ICcnLCBzdWJOb3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgaXRlbS5ub3RhdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChub3RhdGlvbkl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHN1Yk5vdGF0aW9uRXhwcmVzc2lvblN0cmluZyArPSAoc3ViTm90YXRpb25FeHByZXNzaW9uU3RyaW5nICE9ICcnID8gJ3wnIDogJycpICsgJygoPzxOPicgKyBub3RhdGlvbkl0ZW0ucmVwbGFjZUFsbCgvXFxzL2dpLCAnXFxcXHMnKS5yZXBsYWNlQWxsKC8oW14wLTlBLXpdKS9naSwgJ1xcXFwkMScpICsgJykoXFxcXHN8W15BLXpdfCQpKSc7XHJcbiAgICAgICAgICAgICAgICBzdWJFeHByZXNzaW9uU3RyaW5nICs9IChzdWJFeHByZXNzaW9uU3RyaW5nICE9ICcnID8gJ3wnIDogJycpICsgJygoPzxWPlswLTlcXFxcLFxcXFwuXSspKFxcXFxufFxcXFxzKSooPzxOPicgKyBub3RhdGlvbkl0ZW0ucmVwbGFjZUFsbCgvXFxzL2dpLCAnXFxcXHMnKS5yZXBsYWNlQWxsKC8oW14wLTlBLXpdKS9naSwnXFxcXCQxJykgKyAnKShcXFxcc3xbXkEtel18JCkpJztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5ub3RhdGlvbkV4cHJlc3Npb25zW2l0ZW0udW5pdF0gPSBuZXcgUmVnRXhwKHN1YkV4cHJlc3Npb25TdHJpbmcsICdnbWknKTtcclxuICAgICAgICAgICAgcmVzdWx0Lm5vdGF0aW9uT25seUV4cHJlc3Npb25zW2l0ZW0udW5pdF0gPSBuZXcgUmVnRXhwKHN1Yk5vdGF0aW9uRXhwcmVzc2lvblN0cmluZywgJ2dtaScpO1xyXG4gICAgICAgICAgICBleHByZXNzaW9uU3RyaW5nICs9IChleHByZXNzaW9uU3RyaW5nICE9ICcnID8gJ3wnIDogJycpICsgJygnICsgc3ViRXhwcmVzc2lvblN0cmluZyArICcpJzsgICAgICAgICAgICBcclxuICAgICAgICAgICAgbm90YXRpb25FeHByZXNzaW9uU3RyaW5nICs9IChub3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgIT0gJycgPyAnfCcgOiAnJykgKyAnKCcgKyBzdWJOb3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgKyAnKSc7IFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlc3VsdC5leHByZXNzaW9uID0gbmV3IFJlZ0V4cChleHByZXNzaW9uU3RyaW5nLCAnZ21pJyk7XHJcbiAgICAgICAgcmVzdWx0Lm5vdGF0aW9uRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAobm90YXRpb25FeHByZXNzaW9uU3RyaW5nLCAnZ21pJyk7XHJcbiAgICAgICAgcmVzdWx0LnZhbHVlRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoJygoPzxWPlswLTlcXFxcLF0rKFxcXFwuWzAtOV0rKT8pKFxcXFxufFxcXFxzKSopJywgJ2dtaScpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gYXR0YWNoQWN0aW9ucygpIHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLmNoYW5nZS5sYW5ndWFnZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlTGFuZ3VhZ2UoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLmNoYW5nZS5jdXJyZW5jeScsIGZ1bmN0aW9uICgpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdXBkYXRlUHJpY2UoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLmNoYW5nZS5tZXNzdXJlbWVudCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlTWVzc3VyZW1lbnQoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhenkucmVmcmVzaCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlTWVzc3VyZW1lbnQoKTtcclxuICAgICAgICB9KTsgICAgICAgIFxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UucmVmcmVzaC5jdXJyZW5jeScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlUHJpY2UoKTsgICAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgIH0gICAgXHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTGFuZ3VhZ2UoKSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuICAgICAgICBpZiAocmVjZW50U3RhdGUgPT0gbnVsbCkgcmVjZW50U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50KTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY3VycmVudD8ubGFuZ3VhZ2UgIT0gcmVjZW50U3RhdGU/Lmxhbmd1YWdlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVjZW50U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50KTtcclxuXHJcbiAgICAgICAgdmFyIGxhYmVscyA9IGF3YWl0IGdldExhbmd1YWdlTGFiZWxzKCk7ICAgICAgICAgICBcclxuICAgICAgICBpZiAoY3VycmVudD8ubGFuZ3VhZ2UgJiYgbGFiZWxzLkxvY2FsZS5pbmRleE9mKGN1cnJlbnQubGFuZ3VhZ2UpID09IC0xKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHVwZGF0ZVRvU2VydmVyKCdsYW5ndWFnZScpOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsYWJlbHNUb0NoYW5nZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1sLWtdJyk7XHJcbiAgICAgICAgaWYgKGxhYmVsc1RvQ2hhbmdlKVxyXG4gICAgICAgICAgICBsYWJlbHNUb0NoYW5nZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7IHVwZGF0ZUxhbmd1YWdlTGFiZWwoaXRlbSwgbGFiZWxzLkxhYmVscyk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldExhbmd1YWdlTGFiZWxzRnJvbVN0b3JlKCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50TGFiZWxzU3RyaW5nID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdMT0NBTExBQkVMUycpO1xyXG4gICAgICAgIHZhciBjdXJyZW50TGFiZWxzID0gbnVsbDtcclxuICAgICAgICBpZiAoY3VycmVudExhYmVsc1N0cmluZyAhPSBudWxsKVxyXG4gICAgICAgICAgICBjdXJyZW50TGFiZWxzID0gSlNPTi5wYXJzZShjdXJyZW50TGFiZWxzU3RyaW5nKTtcclxuICAgICAgICByZXR1cm4gY3VycmVudExhYmVscztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBzZXRMYW5ndWFnZVRvU3RvcmUoY3VycmVudExhYmVscykge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTE9DQUxMQUJFTFMnLCBKU09OLnN0cmluZ2lmeShjdXJyZW50TGFiZWxzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VMYWJlbHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRMYWJlbHMgPSBhd2FpdCBnZXRMYW5ndWFnZUxhYmVsc0Zyb21TdG9yZSgpO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudExhYmVscyAhPSBudWxsKSB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdmFyIGV4cGlyeSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBleHBpcnkuc2V0SG91cnMoZXhwaXJ5LmdldEhvdXJzKCkgLSAxKTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXcgRGF0ZShjdXJyZW50TGFiZWxzLnVwZGF0ZWRPbikgPiBleHBpcnkgJiYgY3VycmVudExhYmVscy5Mb2NhbGUuaW5kZXhPZihjdXJyZW50Lmxhbmd1YWdlKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjdXJyZW50TGFiZWxzKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudExhYmVscyA9IGF3YWl0IEdFVCgnL3NlcnZpY2VzL2Fnb3JhQ2xpZW50LmFzaHgnLCB7IHR5cGU6ICdMQUJFTFMnIH0pO1xyXG4gICAgICAgICAgICBjdXJyZW50TGFiZWxzLnVwZGF0ZWRPbiA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIHNldExhbmd1YWdlVG9TdG9yZShjdXJyZW50TGFiZWxzKTtcclxuICAgICAgICAgICAgcmVzb2x2ZShjdXJyZW50TGFiZWxzKTtcclxuICAgICAgICB9KTsgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHZhciBleHByZXNzaW9uRm9yQXR0cmlidXRlID0gL2FnXFwtbFxcLWtcXC0oPzxBdHRyaWJ1dGU+W15cXD1dKykvZ207XHJcbiAgICB2YXIgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlID0gL1xcWyg/PExhYmVsSUQ+W15cXF1dKylcXF0vZ207XHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVMYW5ndWFnZUxhYmVsKGl0ZW0sIGxhYmVscykge1xyXG4gICAgICAgIHZhciBrZXkgPSBpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1rJyk7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gbnVsbDtcclxuICAgICAgICBpZiAobGFiZWxzW2tleV0gfHwgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZE5vZGVzICYmIGl0ZW0uY2hpbGROb2Rlcy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLmxhc3RJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25Gb3JBdHRyaWJ1dGVWYWx1ZS5sYXN0SW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Q29udGVudCA9IGtleTsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBleHByZXNzaW9uRm9yQXR0cmlidXRlVmFsdWUuZXhlYyh0ZXh0Q29udGVudCkpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudC5yZXBsYWNlKG1hdGNoWzBdLCBsYWJlbHNbbWF0Y2guZ3JvdXBzLkxhYmVsSURdID8gbGFiZWxzW21hdGNoLmdyb3Vwcy5MYWJlbElEXS5sYmwgOiAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jaGlsZE5vZGVzWzBdLnRleHRDb250ZW50ID0gdGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGROb2Rlc1swXS50ZXh0Q29udGVudCA9IGxhYmVsc1trZXldID8gbGFiZWxzW2tleV0ubGJsIDogJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobGFiZWxzW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZHVtbXlOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGR1bW15Tm9kZS5pbm5lckhUTUwgPSBsYWJlbHNba2V5XS5sYmw7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hIdG1sV2l0aExhYmVsKGl0ZW0sIGR1bW15Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW0uYXR0cmlidXRlcy5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSBpdGVtLmF0dHJpYnV0ZXNbaV07ICAgICAgICAgIFxyXG4gICAgICAgICAgICBleHByZXNzaW9uRm9yQXR0cmlidXRlLmxhc3RJbmRleCA9IDA7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICgobWF0Y2ggPSBleHByZXNzaW9uRm9yQXR0cmlidXRlLmV4ZWMoYXR0cmlidXRlLm5hbWUpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlSWRlbnRpZmllciA9IG1hdGNoLmdyb3Vwcy5BdHRyaWJ1dGU7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGUudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLmV4ZWMoYXR0cmlidXRlVmFsdWUpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS5yZXBsYWNlKG1hdGNoWzBdLCBsYWJlbHNbbWF0Y2guZ3JvdXBzLkxhYmVsSURdP2xhYmVsc1ttYXRjaC5ncm91cHMuTGFiZWxJRF0ubGJsOicnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKGF0dHJpYnV0ZUlkZW50aWZpZXIsIGF0dHJpYnV0ZVZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBtYXRjaEh0bWxXaXRoTGFiZWwoaXRlbSwgZG9tKSB7ICAgICAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChkb20uY2hpbGROb2Rlc1tpXT8udGV4dENvbnRlbnQgJiYgaXRlbS5jaGlsZE5vZGVzW2ldPy50ZXh0Q29udGVudClcclxuICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGROb2Rlc1tpXS50ZXh0Q29udGVudCA9IGRvbS5jaGlsZE5vZGVzW2ldPy50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaSA8IGRvbS5jaGlsZE5vZGVzLmxlbmd0aCAmJiBpIDwgaXRlbS5jaGlsZE5vZGVzLmxlbmd0aClcclxuICAgICAgICAgICAgICAgIG1hdGNoSHRtbFdpdGhMYWJlbChpdGVtLmNoaWxkTm9kZXNbaV0sIGRvbS5jaGlsZE5vZGVzW2ldKTtcclxuICAgICAgICAgICAgZWxzZSByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByaWNlKGlzSW5pdCkge1xyXG4gICAgICAgIHZhciBjdXJyZW5jaWVzID0gYXdhaXQgZ2V0Q29udmVydGlvblJhdGVzKCk7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuICAgICAgICBpZiAoY3VycmVudC5jdXJyZW5jeSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVuY3kgPSBjdXJyZW5jaWVzLlJhdGVzPy5FeGNoYW5nZVJhdGVzPy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGl0ZW0uQ29kZSA9PSBjdXJyZW50LmN1cnJlbmN5OyB9KVswXTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbmN5TWV0YSA9IGxhbmd1YWdlU291cmNlcy5jdXJyZW5jaWVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5jb2RlID09IGN1cnJlbnQuY3VycmVuY3k7IH0pWzBdO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVuY3lNZXRhKVxyXG4gICAgICAgICAgICAgICAgY3VycmVuY3kuZm9ybWF0dGVyID0gY29udmVydEZvcm1hdFRvRXhwcmVzc2lvbihjdXJyZW5jeU1ldGEuZm9ybWF0KTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRDdXJyZW5jeSA9IGN1cnJlbmN5LkNvZGU7XHJcbiAgICAgICAgICAgIHZhciBwcmljZVRvQ2hhbmdlID0gaXNJbml0ID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtcF06bm90KC5pcy1hcHBsaWVkKScpIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtcF0nKTtcclxuICAgICAgICAgICAgaWYgKHByaWNlVG9DaGFuZ2UpXHJcbiAgICAgICAgICAgICAgICBwcmljZVRvQ2hhbmdlLmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGl0ZW0pIHsgaWYgKGl0ZW0uaW5uZXJIVE1MLmluZGV4T2YoJ3t7JykgPiAtMSkgcmV0dXJuOyB1cGRhdGVJdGVtT2Zmc2V0Q2xhc3MoaXRlbSk7IGl0ZW0uY2xhc3NMaXN0LmFkZCgnaXMtYXBwbGllZCcpOyB1cGRhdGVQcmljZUZvckl0ZW0oaXRlbSwgY3VycmVuY3ksIGN1cnJlbnRDdXJyZW5jeSk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVJdGVtT2Zmc2V0Q2xhc3MoaXRlbSkge1xyXG4gICAgICAgIGlmICghaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLWFwcGxpZWQnKSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudE9mZnNldCA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRDb2xsZWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIHBhcmVudE9mZnNldCA9IChwYXJlbnRDb2xsZWN0aW9uID0gaXRlbS5jbG9zZXN0KCdhcnRpY2xlJykpICE9IG51bGwgJiYgcGFyZW50Q29sbGVjdGlvbi5sZW5ndGggPiAwID8gcGFyZW50Q29sbGVjdGlvblswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IGl0ZW0ucGFyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRQb2ludHMgPSB7IHk6IChwYXJlbnRPZmZzZXQudG9wICsgcGFyZW50T2Zmc2V0LmJvdHRvbSkgLyAyLCB4OiAocGFyZW50T2Zmc2V0LmxlZnQgKyBwYXJlbnRPZmZzZXQucmlnaHQpIC8gMiB9O1xyXG4gICAgICAgICAgICB2YXIgaXRlbVBvaW50cyA9IHsgeTogKGN1cnJlbnRPZmZzZXQudG9wICsgY3VycmVudE9mZnNldC5ib3R0b20pIC8gMiwgeDogKGN1cnJlbnRPZmZzZXQubGVmdCArIGN1cnJlbnRPZmZzZXQucmlnaHQpIC8gMiB9O1xyXG4gICAgICAgICAgICB2YXIgY2xhc3NBeGlzID0gJ2FnLWwtcC1wJztcclxuICAgICAgICAgICAgY2xhc3NBeGlzICs9ICctJyArIChwYXJlbnRQb2ludHMueCA+IGl0ZW1Qb2ludHMueCA/ICdsJyA6ICdyJyk7XHJcbiAgICAgICAgICAgIGNsYXNzQXhpcyArPSAnLScgKyAocGFyZW50UG9pbnRzLnkgPiBpdGVtUG9pbnRzLnkgPyAnYicgOiAndCcpO1xyXG4gICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NBeGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0Q29udmVydGlvblJhdGVzKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHZhciBjb252ZXJ0aW9uUmF0ZXNTdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQ09OVkVSVElPTlJBVEVTJyk7XHJcbiAgICAgICAgICAgIHZhciBjb252ZXJ0aW9uUmF0ZXMgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoY29udmVydGlvblJhdGVzU3RvcmVkICYmIGNvbnZlcnRpb25SYXRlc1N0b3JlZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29udmVydGlvblJhdGVzID0gSlNPTi5wYXJzZShjb252ZXJ0aW9uUmF0ZXNTdG9yZWQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGV4cGlyeSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBleHBpcnkuc2V0RGF0ZShleHBpcnkuZ2V0RGF0ZSgpIC0gMSk7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKG5ldyBEYXRlKGNvbnZlcnRpb25SYXRlcy51cGRhdGVkT24pID4gZXhwaXJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjb252ZXJ0aW9uUmF0ZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb252ZXJ0aW9uUmF0ZXMgPSBhd2FpdCBHRVQoJy9zZXJ2aWNlcy9hZ29yYUNsaWVudC5hc2h4JywgeyB0eXBlOiAnQ09OVkVSVElPTlJBVEVTJyB9KTtcclxuICAgICAgICAgICAgY29udmVydGlvblJhdGVzLnVwZGF0ZWRPbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0NPTlZFUlRJT05SQVRFUycsIEpTT04uc3RyaW5naWZ5KGNvbnZlcnRpb25SYXRlcykpO1xyXG4gICAgICAgICAgICByZXNvbHZlKGNvbnZlcnRpb25SYXRlcyk7XHJcbiAgICAgICAgfSk7ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZXhwcmVzc2lvbkZvclByaWNlID0gLygoW15BLXowLTldfFtBLVpdfFtBLVpdezN9KSpcXHM/WzAtOVxcLFxcLl0rKS9nbTtcclxuXHJcbiAgICBmdW5jdGlvbiBjb252ZXJ0Rm9ybWF0VG9FeHByZXNzaW9uKGZvcm1hdCkge1xyXG4gICAgICAgIHZhciBmb3JtYXRTdHJpbmcgPSBmb3JtYXQucmVwbGFjZSgvWyNcXCxcXC5dKy9naSwnJyk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFN0cmluZyArIG51bWJlci50b0xvY2FsZVN0cmluZygnZW4tVVMnKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByaWNlRm9ySXRlbShpdGVtLCBjdXJyZW5jeSwgY3VycmVudEN1cnJlbmN5KSB7ICAgICAgICBcclxuICAgICAgICB2YXIgaXNEZWZhdWx0Q3VycmVuY3lDaGFuZ2UgPSBpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wLWMnKSAhPSBudWxsICYmIGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAtbycpID09IG51bGw7IFxyXG4gICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wLWMnKSA9PSBjdXJyZW50Q3VycmVuY3kgJiYgaXNEZWZhdWx0Q3VycmVuY3lDaGFuZ2UpIHJldHVybjsgICAgICAgIFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gaXRlbS5jaGlsZE5vZGVzW2ldLCBtYXRjaCA9IG51bGw7XHJcbiAgICAgICAgICAgIGV4cHJlc3Npb25Gb3JQcmljZS5sYXN0SW5kZXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAobm9kZS50ZXh0Q29udGVudCAmJiAobWF0Y2ggPSBleHByZXNzaW9uRm9yUHJpY2UuZXhlYyhub2RlLnRleHRDb250ZW50KSkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmYXVsdEN1cnJlbmN5Q2hhbmdlKSBpdGVtLnNldEF0dHJpYnV0ZSgnYWctbC1wLW8nLCBtYXRjaFswXSk7XHJcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uRm9yUHJpY2UubGFzdEluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIHZhciBwcmljZUNvbnZlcnRlZCA9IE1hdGgucm91bmQocGFyc2VGbG9hdChpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wJykpICogY3VycmVuY3kuQ29uc3RhbnQpOyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50LnJlcGxhY2UobWF0Y2hbMF0sIGN1cnJlbmN5LmZvcm1hdHRlciA/IGN1cnJlbmN5LmZvcm1hdHRlcihwcmljZUNvbnZlcnRlZCkgOiBwcmljZUNvbnZlcnRlZC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZU1lc3N1cmVtZW50KGlzSW5pdCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7XHJcbiAgICAgICAgdmFyIGlzQXBwbGllZCA9IGN1cnJlbnQubWVzc3VyZW1lbnQgPT0gJ21ldHJpYyc7XHJcbiAgICAgICAgdmFyIG1lc3N1cmVtZW50c1RvQ2hhbmdlID0gaXNBcHBsaWVkID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtbV06bm90KC5pcy1hcHBsaWVkKScpIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtbV0nKTtcclxuICAgICAgICBpZiAoaXNBcHBsaWVkKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1lc3N1cmVtZW50c1RvQ2hhbmdlKSBtZXNzdXJlbWVudHNUb0NoYW5nZS5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChpdGVtKSB7IGlmIChpdGVtLmlubmVySFRNTC5pbmRleE9mKCd7eycpID4gLTEpIHJldHVybjsgdXBkYXRlSXRlbU1lc3N1cmVtZW50KGl0ZW0sIGl0ZW0pOyBpdGVtLmNsYXNzTGlzdC5hZGQoJ2lzLWFwcGxpZWQnKTsgfSk7XHJcbiAgICAgICAgICAgIH0sIGlzSW5pdD81MDA6MCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG1lc3N1cmVtZW50c1RvQ2hhbmdlKSBtZXNzdXJlbWVudHNUb0NoYW5nZS5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChpdGVtKSB7IGlmIChpdGVtLmlubmVySFRNTC5pbmRleE9mKCd7eycpID4gLTEpIHJldHVybjsgaXRlbS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UubWVzc3VyZW1lbnQucmV2ZXJ0JykpOyBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFwcGxpZWQnKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUl0ZW1NZXNzdXJlbWVudChpdGVtLHJvb3RFbGVtZW50LCBpc0luaXQsIGlzVW5pdEZvdW5kLCB1bml0KSB7XHJcblxyXG4gICAgICAgIGlmIChpc1VuaXRGb3VuZCAmJiB1bml0KSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZE5vZGVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmNoaWxkTm9kZXMuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoY2hpbGROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZT8udGV4dENvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUZXh0ID0gY2hpbGROb2RlLnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZVJlc3VsdCA9IGF3YWl0IHJlcGxhY2VNZXNzdXJlbWVudFdpdGhVbml0KGNoaWxkTm9kZS50ZXh0Q29udGVudCwgMiwgdW5pdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS50ZXh0Q29udGVudCA9IHJlcGxhY2VSZXN1bHQuY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLm1lc3N1cmVtZW50LnJldmVydCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUudGV4dENvbnRlbnQgPSBjdXJyZW50VGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmluZE1lc3N1cmVtZW50RnJvbUF0dHJpYnV0ZShpdGVtKSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudExhYmVsID0gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmdldExhYmVsRm9yQXR0cmlidXRlKGl0ZW0pO1xyXG4gICAgICAgICAgICB2YXIgbGFiZWxSZXBsYWNlUmVzdWx0ID0gYXdhaXQgcmVwbGFjZU1lc3N1cmVtZW50KGN1cnJlbnRMYWJlbCwgMSk7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5zZXRMYWJlbEZvckF0dHJpYnV0ZShpdGVtLCBsYWJlbFJlcGxhY2VSZXN1bHQuY29udGVudCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEuZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoaXRlbSk7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZVJlcGxhY2VSZXN1bHQgPSBhd2FpdCByZXBsYWNlTWVzc3VyZW1lbnRXaXRoVW5pdChjdXJyZW50VmFsdWUsIDIsIGxhYmVsUmVwbGFjZVJlc3VsdC51bml0c1swXSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5zZXRWYWx1ZUZvckF0dHJpYnV0ZShpdGVtLCB2YWx1ZVJlcGxhY2VSZXN1bHQuY29udGVudCk7XHJcbiAgICAgICAgICAgIHJvb3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLm1lc3N1cmVtZW50LnJldmVydCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5zZXRMYWJlbEZvckF0dHJpYnV0ZShpdGVtLCBjdXJyZW50TGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLnNldFZhbHVlRm9yQXR0cmlidXRlKGl0ZW0sIGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZE5vZGVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmNoaWxkTm9kZXMuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoY2hpbGROb2RlKSB7ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlPy50ZXh0Q29udGVudCAmJiBmaW5kTWVzc3VyZW1lbnRGcm9tTm9kZShjaGlsZE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VGV4dCA9IGNoaWxkTm9kZS50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcGxhY2VSZXN1bHQgPSBhd2FpdCByZXBsYWNlTWVzc3VyZW1lbnQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwbGFjZVJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUudGV4dENvbnRlbnQgPSByZXBsYWNlUmVzdWx0LmNvbnRlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVJlc3VsdCA9IGF3YWl0IHJlcGxhY2VNZXNzdXJlbWVudChjaGlsZE5vZGUudGV4dENvbnRlbnQsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLnRleHRDb250ZW50ID0gcmVwbGFjZVJlc3VsdC5jb250ZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW1NZXNzdXJlbWVudChjaGlsZE5vZGUucGFyZW50RWxlbWVudCwgcm9vdEVsZW1lbnQsIGZhbHNlLCB0cnVlLCByZXBsYWNlUmVzdWx0LnVuaXRzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdhZy5sYW5ndWFnZS5tZXNzdXJlbWVudC5yZXZlcnQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUudGV4dENvbnRlbnQgPSBjdXJyZW50VGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbU1lc3N1cmVtZW50KGNoaWxkTm9kZSwgcm9vdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmaW5kTWVzc3VyZW1lbnRGcm9tTm9kZShpdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5leHByZXNzaW9uLnRlc3QoaXRlbS50ZXh0Q29udGVudCkgfHwgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLm5vdGF0aW9uRXhwcmVzc2lvbi50ZXN0KGl0ZW0udGV4dENvbnRlbnQpOyAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZmluZE1lc3N1cmVtZW50RnJvbUF0dHJpYnV0ZShpdGVtKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgdmFyIG1hdGNoID0gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmhhdmVWYWxpZEF0dHJpYnV0ZShpdGVtKSA/IGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5nZXRMYWJlbEZvckF0dHJpYnV0ZShpdGVtKS5tYXRjaChsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEubm90YXRpb25FeHByZXNzaW9uKSA6IG51bGw7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIHJldHVybiBtYXRjaCAhPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VNZXNzdXJlbWVudChjb250ZW50LCBtb2RlKSB7XHJcbiAgICAgICAgdmFyIHVuaXRzID0gW107XHJcbiAgICAgICAgdmFyIHJlcGxhY2VTdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFtb2RlKSBtb2RlID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpdGVtIG9mIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvbnMpIHtcclxuICAgICAgICAgICAgdmFyIHJlcGxhY2VVbml0UmVzdWx0ID0gYXdhaXQgcmVwbGFjZU1lc3N1cmVtZW50V2l0aFVuaXQoY29udGVudCwgbW9kZSwgaXRlbSk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSByZXBsYWNlVW5pdFJlc3VsdC5jb250ZW50O1xyXG4gICAgICAgICAgICByZXBsYWNlU3VjY2VzcyB8PSByZXBsYWNlVW5pdFJlc3VsdC5zdWNjZXNzO1xyXG4gICAgICAgICAgICBpZiAocmVwbGFjZVVuaXRSZXN1bHQuc3VjY2VzcylcclxuICAgICAgICAgICAgICAgIHVuaXRzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5ub3RhdGlvbkV4cHJlc3Npb25zW2l0ZW0udW5pdF0ubGFzdEluZGV4ID0gLTE7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5ub3RhdGlvbk9ubHlFeHByZXNzaW9uc1tpdGVtLnVuaXRdLmxhc3RJbmRleCA9IC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBjb250ZW50OiBjb250ZW50LCBzdWNjZXNzOiByZXBsYWNlU3VjY2VzcywgdW5pdHM6IHVuaXRzIH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZU1lc3N1cmVtZW50V2l0aFVuaXQoY29udGVudCwgbW9kZSwgaXRlbSkge1xyXG4gICAgICAgIHZhciBtYXRjaCA9IG51bGw7XHJcbiAgICAgICAgdmFyIG1hdGNoU3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgIHdoaWxlICgobWF0Y2ggPSBnZXRSZXBsYWNlTWVzc3VyZW1lbnRFeHByZXNzaW9uTWF0Y2goY29udGVudCwgaXRlbSwgbW9kZSkpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0Y2hTdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gbW9kZSA9PSAxID8gMCA6IHBhcnNlRmxvYXQobGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmdldFZhbHVlKG1hdGNoLmdyb3Vwcy5WKSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciB1bml0ID0gbWF0Y2guZ3JvdXBzLk47XHJcbiAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gbWF0Y2guaW5kZXg7XHJcbiAgICAgICAgICAgIHZhciBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciBtYXRjaFZhbHVlID0gKG1vZGUgIT0gMSA/IG1hdGNoWzBdLnJlcGxhY2VBbGwobWF0Y2guZ3JvdXBzLlYsIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5mb3JtYXRWYWx1ZSgodmFsdWUgKiBpdGVtLmNvbnN0YW50KSkpIDogbWF0Y2hbMF0pLnJlcGxhY2VBbGwodW5pdCwgaXRlbS50cmFnZXRVbml0KTtcclxuICAgICAgICAgICAgaWYgKG1vZGUgPT0gMiAmJiBpdGVtLnRhcmdldE5vdGF0aW9uKSBtYXRjaFZhbHVlICs9ICcgJyArIGl0ZW0udGFyZ2V0Tm90YXRpb247XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZygwLCBzdGFydEluZGV4KSArIG1hdGNoVmFsdWUgKyBjb250ZW50LnN1YnN0cmluZyhlbmRJbmRleCk7XHJcbiAgICAgICAgICAgIGlmIChtb2RlID09IDIpIHJldHVybiB7IGNvbnRlbnQ6IGNvbnRlbnQsIHN1Y2Nlc3M6IG1hdGNoU3VjY2VzcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBjb250ZW50OiBjb250ZW50LCBzdWNjZXNzOiBtYXRjaFN1Y2Nlc3MgfTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRSZXBsYWNlTWVzc3VyZW1lbnRFeHByZXNzaW9uTWF0Y2godmFsdWUsIGl0ZW0sIG1vZGUpIHtcclxuICAgICAgICBpZiAobW9kZSA9PSAwKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEubm90YXRpb25FeHByZXNzaW9uc1tpdGVtLnVuaXRdLmV4ZWModmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSAxKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEubm90YXRpb25Pbmx5RXhwcmVzc2lvbnNbaXRlbS51bml0XS5leGVjKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gMikge1xyXG4gICAgICAgICAgICBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEudmFsdWVFeHByZXNzaW9uLmxhc3RJbmRleCA9IC0xO1xyXG4gICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLnZhbHVlRXhwcmVzc2lvbi5leGVjKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGVuYWJsZUxhbmd1YWdlU2VsZWN0b3IoaXRlbSkge1xyXG4gICAgICAgIGdldEZsYWdDc3NDbGFzcygnVVMnKS5zcGxpdCgnICcpLm1hcChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7IGl0ZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOyB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLnVwZGF0ZScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGl0ZW0uY2xhc3NOYW1lID0gaXRlbS5jbGFzc05hbWUucmVwbGFjZSgvZmZsYWdcXC1bQS1aXXsxLDJ9L2dpLCAnJyk7XHJcbiAgICAgICAgICAgIGdldEZsYWdDc3NDbGFzcyhlLmRldGFpbC5jb2RlKS5zcGxpdCgnICcpLm1hcChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7IGl0ZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOyB9KTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmICghc2VsZWN0b3JFbGVtZW50KSBzZWxlY3RvckVsZW1lbnQgPSBhd2FpdCByZW5kZXJMYW5ndWFnZVNlbGVjdG9yKCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGVuZ2FnZUxhbmd1YWdlU2VsZWN0b3IoaXRlbSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBkaXNlbmdhZ2VBY3Rpb25MaXN0ZW5lcik7XHJcbiAgICAgICAgfSk7ICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZGlzZW5nYWdlQWN0aW9uTGlzdGVuZXIoZSkgeyAgICAgICAgXHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBpZiAoZS50YXJnZXQuY2xvc2VzdCgnW2FnLWxhbmd1YWdlLXNlbGVjdF0sW2FnLWxhbmd1YWdlXScpID09IG51bGwpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGRpc2VuZ2FnZUFjdGlvbkxpc3RlbmVyKTtcclxuICAgICAgICAgICAgZGlzZW5nYWdlTGFuZ3VhZ2VTZWxlY3RvcihlLnRhcmdldCk7XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZW5nYWdlTGFuZ3VhZ2VTZWxlY3RvcihpdGVtKSB7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUuc3R5bGUudG9wID0gTWF0aC5mbG9vcihwb3NpdGlvbi50b3AgLSA4KSArICdweCc7XHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUuc3R5bGUucmlnaHQgPSAnY2FsYygxMDAlIC0gJyArIE1hdGguZmxvb3IocG9zaXRpb24ucmlnaHQgKyA4KSArICdweCknO1xyXG4gICAgICAgIHNlbGVjdG9yRWxlbWVudC5ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5hY3RpdmUnKT8uZm9yRWFjaChmdW5jdGlvbiAoYWN0aXZlSXRlbSkgeyBhY3RpdmVJdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOyB9KVxyXG4gICAgICAgIHNlbGVjdG9yRWxlbWVudC5ub2RlLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGRpc2VuZ2FnZUxhbmd1YWdlU2VsZWN0b3IoaXRlbSkgeyAgICAgICAgXHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0RmxhZ0Nzc0NsYXNzKGNvZGUpIHtcclxuICAgICAgICByZXR1cm4gJ2ZmbGFnIGZmLWxnIGZmbGFnLScgKyBjb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldCgpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSB3aW5kb3cubG9jYWxTdG9yYWdlWydBR0xBTkdVQUdFJ107XHJcbiAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHt9O1xyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPSAnJykgY3VycmVudFZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdXBkYXRlVG9zZXJ2ZXJDYWxsID0gbnVsbDtcclxuICAgIHZhciB1cGRhdGVTdWNjZXMgPSBudWxsO1xyXG5cclxuICAgIGZ1bmN0aW9uIHNldChmaWVsZCwgdmFsdWUpIHsgICAgICAgIFxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7ICAgICAgICBcclxuICAgICAgICBpZiAoY3VycmVudCA9PSB1bmRlZmluZWQpIGN1cnJlbnQgPSB7fTtcclxuICAgICAgICBpZiAoY3VycmVudFtmaWVsZF0gJiYgY3VycmVudFtmaWVsZF0gPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICBjdXJyZW50W2ZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQUdMQU5HVUFHRScsIEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpKTtcclxuXHJcbiAgICAgICAgLy9UaHJvdHRsaW5nXHJcbiAgICAgICAgaWYgKHVwZGF0ZVRvc2VydmVyQ2FsbCAhPSBudWxsKSBjbGVhclRpbWVvdXQodXBkYXRlVG9TZXJ2ZXIpO1xyXG4gICAgICAgIHVwZGF0ZVRvc2VydmVyQ2FsbCA9IHNldFRpbWVvdXQoYXN5bmMgZnVuY3Rpb24gKCkgeyB1cGRhdGVUb3NlcnZlckNhbGwgPSBudWxsOyBhd2FpdCB1cGRhdGVUb1NlcnZlcihmaWVsZCk7IGlmICh1cGRhdGVTdWNjZXMgIT0gbnVsbCkgeyB1cGRhdGVTdWNjZXMoKTsgdXBkYXRlU3VjY2VzID0gbnVsbDsgfSB9LCAxMDApO1xyXG4gICAgICAgIHZhciBvbGRVcGRhdGVTdWNjZXNzID0gdXBkYXRlU3VjY2VzO1xyXG4gICAgICAgIHVwZGF0ZVN1Y2NlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG9sZFVwZGF0ZVN1Y2Nlc3MgIT0gbnVsbCkgb2xkVXBkYXRlU3VjY2VzcygpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS5jaGFuZ2UuJyArIGZpZWxkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVRvU2VydmVyKGZpZWxkKSB7ICAgICAgICBcclxuICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShjdXJyZW50U2V0dGluZ3MpICE9IEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTZXR0aW5ncyA9IGN1cnJlbnQ7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgd2luZG93LmFnUmVxdWVzdC5QT1NUKCcvc2VydmljZXMvYWdvcmFDbGllbnQuYXNoeCcsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiAnU0VUJyB9LCBjdXJyZW50KSk7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlbmRlckxhbmd1YWdlU2VsZWN0b3IoKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBuZXcgYygnc3BhbicpO1xyXG4gICAgICAgIHZhciBsb2NhdGlvbkVsZW1lbnQgPSBlbGVtZW50Lm4oJ3NwYW4nKTsgICAgICAgIFxyXG4gICAgICAgIHZhciBsb2NhdGlvbkZsYWc7XHJcbiAgICAgICAgdmFyIGxhbmd1YWdlRWxlbWVudDtcclxuICAgICAgICBmdW5jdGlvbiByZW5kZXJMYW5ndWFnZUVsZW1lbnQobGFuZ3VhZ2VzKSB7ICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlbmRlckNob2ljZUxpc3QobGFuZ3VhZ2VFbGVtZW50LCAnTGFuZ3VhZ2UnLCAnbGFuZ3VhZ2UnLCBsYW5ndWFnZXMsIGZ1bmN0aW9uIChpdGVtRWxlbWVudCwgc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbUVsZW1lbnQuaChzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsKTtcclxuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2VJdGVtPyhzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsKTonJztcclxuICAgICAgICAgICAgfSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlckNob2ljZUxpc3QobG9jYXRpb25FbGVtZW50LCAnTG9jYXRpb24nLCdjb2RlJywgbGFuZ3VhZ2VTb3VyY2VzLnByZXNldHMsIGZ1bmN0aW9uIChpdGVtRWxlbWVudCwgc291cmNlSXRlbSkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpdGVtRWxlbWVudC5uKCdpJykuYSgnY2xhc3MnLCBnZXRGbGFnQ3NzQ2xhc3Moc291cmNlSXRlbS5jb2RlKSk7XHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50Lm4oJ2InKS5oKHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWwpO1xyXG5cclxuICAgICAgICB9LCBmdW5jdGlvbiAoc291cmNlSXRlbSxpc0V2ZW50KSB7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uRmxhZy5hKCdjbGFzcycsIGdldEZsYWdDc3NDbGFzcyhzb3VyY2VJdGVtLmNvZGUpKTtcclxuICAgICAgICAgICAgcmVuZGVyTGFuZ3VhZ2VFbGVtZW50KGxhbmd1YWdlU291cmNlcy5sYW5ndWFnZXMuZmlsdGVyKGZ1bmN0aW9uIChsYW5ndWFnZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc291cmNlSXRlbS5sYW5ndWFnZSkgPyBzb3VyY2VJdGVtLmxhbmd1YWdlLmluZGV4T2YobGFuZ3VhZ2UuY29kZSkgPiAtMSA6IGxhbmd1YWdlLmNvZGUgPT0gc291cmNlSXRlbS5sYW5ndWFnZTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICBpZiAoIWlzRXZlbnQpXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUnLCB7IGRldGFpbDogc291cmNlSXRlbSB9KSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvY2F0aW9uRmxhZyA9IGxvY2F0aW9uRWxlbWVudC5uKCdpJyk7XHJcblxyXG4gICAgICAgIGxhbmd1YWdlRWxlbWVudCA9IGVsZW1lbnQubignc3BhbicpOyAgICAgXHJcblxyXG4gICAgICAgIHJlbmRlckxhbmd1YWdlRWxlbWVudChsYW5ndWFnZVNvdXJjZXMubGFuZ3VhZ2VzKTtcclxuXHJcbiAgICAgICAgdmFyIGN1cnJlbmN5RWxlbWVudCA9IGVsZW1lbnQubignc3BhbicpO1xyXG4gICAgICAgIHJlbmRlckNob2ljZUxpc3QoY3VycmVuY3lFbGVtZW50LCAnQ3VycmVuY3knLCAnY3VycmVuY3knLCBsYW5ndWFnZVNvdXJjZXMuY3VycmVuY2llcywgZnVuY3Rpb24gKGl0ZW1FbGVtZW50LCBzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50Lmgoc291cmNlSXRlbS5sb2NhbExhYmVsID8gc291cmNlSXRlbS5sb2NhbExhYmVsIDogc291cmNlSXRlbS5sYWJlbCk7XHJcbiAgICAgICAgfSwgZnVuY3Rpb24gKHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWw7XHJcbiAgICAgICAgfSk7ICBcclxuXHJcbiAgICAgICAgdmFyIHByb3BlcnR5TWVzc3VyZW1lbnRFbGVtZW50ID0gZWxlbWVudC5uKCdzcGFuJyk7XHJcbiAgICAgICAgcmVuZGVyQ2hvaWNlTGlzdChwcm9wZXJ0eU1lc3N1cmVtZW50RWxlbWVudCwgJ1Byb3BlcnR5IE1lc3N1cmVtZW50JywgJ21lc3N1cmVtZW50JywgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRzLCBmdW5jdGlvbiAoaXRlbUVsZW1lbnQsIHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgaXRlbUVsZW1lbnQuaChzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsKTtcclxuICAgICAgICB9LCBmdW5jdGlvbiAoc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc291cmNlSXRlbS5sb2NhbExhYmVsID8gc291cmNlSXRlbS5sb2NhbExhYmVsIDogc291cmNlSXRlbS5sYWJlbDtcclxuICAgICAgICB9KTsgIFxyXG5cclxuICAgICAgICB2YXIgZGlzdGFuY2VNZXNzdXJlbWVudEVsZW1lbnQgPSBlbGVtZW50Lm4oJ3NwYW4nKTtcclxuICAgICAgICByZW5kZXJDaG9pY2VMaXN0KGRpc3RhbmNlTWVzc3VyZW1lbnRFbGVtZW50LCAnRGlzdGFuY2UgTWVzc3VyZW1lbnQnLCAnbWVzc3VyZW1lbnQnLCBsYW5ndWFnZVNvdXJjZXMudW5pdHMsIGZ1bmN0aW9uIChpdGVtRWxlbWVudCwgc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICBpdGVtRWxlbWVudC5oKHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWwpO1xyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsO1xyXG4gICAgICAgIH0pOyAgICAgICAgICBcclxuXHJcbiAgICAgICAgZWxlbWVudC5ub2RlLnNldEF0dHJpYnV0ZSgnYWctbGFuZ3VhZ2Utc2VsZWN0JywnJyk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50Lm5vZGUpO1xyXG5cclxuICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50Py5jb2RlKVxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUnLCB7IGRldGFpbDogY3VycmVudCB9KSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnMgPSB7fTtcclxuXHJcbiAgICBmdW5jdGlvbiByZW5kZXJDaG9pY2VMaXN0KGl0ZW0sIHRpdGxlLCBmaWVsZCwgc291cmNlLCByZW5kZXJJdGVtLCBzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICB2YXIgZmllbGRLZXkgPSB0aXRsZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teQS16MC05XS9naSwgJycpO1xyXG4gICAgICAgIHZhciByZW5kZXJFeGlzdCA9IHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ2l0ZW1MaXN0JyArIGZpZWxkS2V5XSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICBpZiAoIXJlbmRlckV4aXN0KVxyXG4gICAgICAgICAgICBpdGVtLmgodGl0bGUpO1xyXG4gICAgICAgIHZhciBpdGVtTGlzdCA9IHJlbmRlckV4aXN0ID8gcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3QnICsgZmllbGRLZXldIDogKHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ2l0ZW1MaXN0JyArIGZpZWxkS2V5XSA9IGl0ZW0ubignc3BhbicpKTtcclxuICAgICAgICB2YXIgaXRlbUxpc3RWYWx1ZSA9IHJlbmRlckV4aXN0ID8gcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3RWYWx1ZScgKyBmaWVsZEtleV0gOiAocmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3RWYWx1ZScgKyBmaWVsZEtleV0gPSBpdGVtTGlzdC5uKCdsYWJlbCcpKTtcclxuICAgICAgICBpdGVtTGlzdFZhbHVlLmgoJ1NlbGVjdGVkIFZhbHVlJyk7XHJcbiAgICAgICAgaWYgKCFyZW5kZXJFeGlzdCkge1xyXG4gICAgICAgICAgICB2YXIgaXRlbUNsaWNrRnVuY3Rpb24gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHNlbGVjdG9yRWxlbWVudC5ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5hY3RpdmUnKT8uZm9yRWFjaChmdW5jdGlvbiAoYWN0aXZlSXRlbSkgeyBpZiAoYWN0aXZlSXRlbSAhPSBpdGVtTGlzdFZhbHVlLm5vZGUpIGFjdGl2ZUl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1MaXN0VmFsdWUubm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSBpdGVtTGlzdFZhbHVlLm5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGl0ZW1MaXN0VmFsdWUubm9kZS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaXRlbUxpc3RWYWx1ZS5jbChpdGVtQ2xpY2tGdW5jdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpdGVtT3B0aW9ucyA9IHJlbmRlckV4aXN0ID8gcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbU9wdGlvbnMnICsgZmllbGRLZXldIDogKHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ2l0ZW1PcHRpb25zJyArIGZpZWxkS2V5XSA9IGl0ZW1MaXN0Lm4oJ3NwYW4nKSk7XHJcbiAgICAgICAgaXRlbU9wdGlvbnMuaCgnJyk7XHJcbiAgICAgICAgc291cmNlLm1hcChmdW5jdGlvbiAoc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICB2YXIgY2hvaWNlSXRlbSA9IGl0ZW1PcHRpb25zLm4oJ2xhYmVsJyk7XHJcbiAgICAgICAgICAgIGNob2ljZUl0ZW0uY2woZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaXRlbUxpc3RWYWx1ZS5ub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgc2V0KGZpZWxkLCBzb3VyY2VJdGVtLmNvZGUpO1xyXG4gICAgICAgICAgICAgICAgaXRlbUxpc3RWYWx1ZS5oKHNlbGVjdGVkSXRlbShzb3VyY2VJdGVtKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZW5kZXJJdGVtKGNob2ljZUl0ZW0sIHNvdXJjZUl0ZW0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQgIT0gJycpIHsgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIGlmICghcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snR2VuZXJhbCcgKyBmaWVsZEtleV0pIHtcclxuICAgICAgICAgICAgICAgIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ0dlbmVyYWwnICsgZmllbGRLZXldID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUuJyArIGZpZWxkS2V5LCB7IGRldGFpbDogZS5kZXRhaWwgfSkpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLnVwZGF0ZScsIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ0dlbmVyYWwnICsgZmllbGRLZXldKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFyZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydGaWVsZCcgKyBmaWVsZEtleV0pIHtcclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydGaWVsZCcgKyBmaWVsZEtleV0gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50SXRlbSA9IGUuZGV0YWlsO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBjdXJyZW50SXRlbVtmaWVsZF07ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSA/IGN1cnJlbnRWYWx1ZVswXSA6IGN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRJdGVtRnJvbVNvdXJjZSA9IHNvdXJjZS5maW5kKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmNvZGUgPT0gc2VsZWN0ZWRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldChmaWVsZCwgc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0VmFsdWUuaChzZWxlY3RlZEl0ZW0oc2VsZWN0ZWRJdGVtRnJvbVNvdXJjZSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYW5ndWFnZS51cGRhdGUuJyArIGZpZWxkS2V5LCByZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydGaWVsZCcgKyBmaWVsZEtleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjKG5hbWUpIHtcclxuICAgICAgICB0aGlzLm5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLmEgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLm5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLm4gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBpdGVtID0gbmV3IGMobmFtZSk7XHJcbiAgICAgICAgdGhpcy5ub2RlLmFwcGVuZENoaWxkKGl0ZW0ubm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9ICAgIFxyXG5cclxuICAgIGMucHJvdG90eXBlLmggPSBmdW5jdGlvbiAodGV4dCkgeyAgICAgICAgXHJcbiAgICAgICAgdGhpcy5ub2RlLmlubmVySFRNTCA9IHRleHQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUuY2wgPSBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYWN0aW9uKTtcclxuICAgICAgICB0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhY3Rpb24pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIEdFVChzZXJ2aWNlVXJsLCBkYXRhKSB7XHJcbiAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gJyc7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZyArICgocXVlcnlTdHJpbmcgIT0gJycgPyAnJicgOiAnJykgKyBrZXkgKyAnPScgKyBkYXRhW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXJ2aWNlVXJsICs9IHNlcnZpY2VVcmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycgKyBxdWVyeVN0cmluZztcclxuICAgICAgICB2YXIgcmVxdWVzdCA9IGF3YWl0IGZldGNoKHNlcnZpY2VVcmwsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBjYWNoZTogXCJuby1jYWNoZVwiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVxdWVzdC5qc29uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgd2luZG93LmFnTGFuZ3VhZ2UgPSB7XHJcbiAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS5yZWZyZXNoLmN1cnJlbmN5JykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgaW5pdCgpO1xyXG5cclxufSkoKTtcclxuXHJcblxyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnW2RhdGEtY2stcHJvcGVydHlsaXN0XSBbZGF0YS1zb3J0LW9iamVjdD1cIkNNTkNNTlwiXScsIHt9LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgR2V0UHJvcGVydGllcygkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWNrLXByb3BlcnR5bGlzdF06Zmlyc3QnKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eS11cmxdOmZpcnN0JykuZGF0YSgnY2stcHJvcGVydHktdXJsJyksICQodGhpcykucGFyZW50cygnW2RhdGEtY2stcHJvcGVydHlsaXN0XTpmaXJzdCcpLmRhdGEoJ2NrLWRlbWFuZC1rZXknKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eWxpc3RdOmZpcnN0JykuZGF0YSgnY2stZGVtYW5kLWxheW91dCcpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIEdldFByb3BlcnRpZXMoJHRoaXMsIHVybCwgZGVtYW5kS2V5LCBsYXlvdXQpIHtcclxuICAgICAgICB2YXIgaXNFZGl0TW9kZSA9ICR0aGlzLmNsb3Nlc3QoJ2Rpdltjb250ZW50ZWRpdGFibGVdJykuYXR0cignY29udGVudGVkaXRhYmxlJyk7XHJcbiAgICAgICAgaWYgKCFpc0VkaXRNb2RlICYmIHR5cGVvZiAodXJsKSAhPSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgKGRlbWFuZEtleSkgIT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgLy9TaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICBsYXlvdXQgPSAodHlwZW9mIChsYXlvdXQpICE9ICd1bmRlZmluZWQnID8gbGF5b3V0IDogXCJnYWxsZXJ5XCIpO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGxheW91dC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZ2FsbGVyeVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciAkc29ydCA9ICR0aGlzLmZpbmQoJ1tkYXRhLXNvcnQtb2JqZWN0PVwiQ01OQ01OXCJdJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgkc29ydCAhPSAndW5kZWZpbmVkJyAmJiAkc29ydCAhPSBudWxsICYmICRzb3J0Lmxlbmd0aCA+IDApIHx8ICF1cmwubWF0Y2goLyhefFxcLykoZCk/c29ydFxcLVthLXpdKy9nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gKF9nZXRDTU5DTU5Tb3J0QnkoJHRoaXMpICsgJy8nICsgKHVybC5yZXBsYWNlKCdodHRwOi8vJywgJycpLnJlcGxhY2UoLyhefFxcLykoZCk/c29ydFxcLVthLXpdKy9nLCAnJykpKS5yZXBsYWNlKCcvLycsICcvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvc2VydmljZXMvTUFYL2Fnb3JhR2V0R2FsbGVyeVZpZXcuYXNweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgVXJsUXVlcnk6IHVybCwgVHlwZU9mU2VhcmNoOiAnU0FMRScsIElzQ29udGVudFBhZ2U6IFwidHJ1ZVwiLCBEZW1hbmRLZXk6IGRlbWFuZEtleSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2h0bWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0VkaXRNb2RlID0gJHRoaXMuY2xvc2VzdCgnZGl2W2NvbnRlbnRlZGl0YWJsZV0nKS5hdHRyKCdjb250ZW50ZWRpdGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFZGl0TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkaHRtbCA9ICc8c2VjdGlvbiBjbGFzcz1cInJlc3VsdC1wYWdlXCIgZGF0YS1jay1wcm9wZXJ0eWxpc3Q9XCJcIiBkYXRhLWNrLWRlbWFuZC1rZXk9XCInICsgZGVtYW5kS2V5ICsgJ1wiIGRhdGEtY2stcHJvcGVydHktdXJsPVwiJyArIHVybCArICdcIiBkYXRhLWNrLWRlbWFuZC1sYXlvdXQ9XCInICsgbGF5b3V0ICsgJ1wiPicgKyByZXNwb25zZSArICc8L3NlY3Rpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5hZnRlcigkaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodHlwZW9mIChjb21wb25lbnRIYW5kbGVyKSA9PSAndW5kZWZpbmVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SGFuZGxlci51cGdyYWRlRG9tKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ1tkYXRhLWNrLWRlbWFuZC1rZXk9XCInICsgZGVtYW5kS2V5ICsgJ1wiXSAjcHJvcGVydHlHcmlkJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnByb3BlcnR5Om5vdCguaW5pdCknKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFByb3BlcnR5SW1hZ2VHYWxsZXJ5KCQodGhpcykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWdMYXp5LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJjYXJvdXNlbFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnL3NlcnZpY2VzL2Fnb3JhR2V0Q2Fyb3VzZWxJdGVtLmFzcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IFVybFF1ZXJ5OiB1cmwsIFR5cGVPZlNlYXJjaDogJ1NBTEUnLCBJc0NvbnRlbnRQYWdlOiBcInRydWVcIiwgRGVtYW5kS2V5OiBkZW1hbmRLZXkgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdodG1sJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNFZGl0TW9kZSA9ICR0aGlzLmNsb3Nlc3QoJ2Rpdltjb250ZW50ZWRpdGFibGVdJykuYXR0cignY29udGVudGVkaXRhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGh0bWwgPSAnPHNlY3Rpb24gY2xhc3M9XCJyZXN1bHQtcGFnZVwiIGRhdGEtY2stcHJvcGVydHlsaXN0PVwiXCIgZGF0YS1jay1kZW1hbmQta2V5PVwiJyArIGRlbWFuZEtleSArICdcIiBkYXRhLWNrLXByb3BlcnR5LXVybD1cIicgKyB1cmwgKyAnXCIgZGF0YS1jay1kZW1hbmQtbGF5b3V0PVwiJyArIGxheW91dCArICdcIj4nICsgcmVzcG9uc2UgKyAnPC9zZWN0aW9uPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuYWZ0ZXIoJGh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ1tkYXRhLXF1ZXJ5LWxpc3RdOm5vdCguaW5pdClbZGF0YS1zZXJ2aWNlLXVybF1bZGF0YS1ydF49XCJDTU5cIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS50cmlnZ2VyKCdpbml0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2luaXQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0eXBlb2YgKGNvbXBvbmVudEhhbmRsZXIpID09ICd1bmRlZmluZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRIYW5kbGVyLnVwZ3JhZGVEb20oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gX2dldENNTkNNTlNvcnRCeSgkcGFyZW50KSB7XHJcbiAgICAgICAgdmFyICRzb3J0ID0gJHBhcmVudC5maW5kKCdbZGF0YS1zb3J0LW9iamVjdD1cIkNNTkNNTlwiXScpO1xyXG4gICAgICAgIGlmICgkc29ydCAhPSAndW5kZWZpbmVkJyAmJiAkc29ydCAhPSBudWxsICYmICRzb3J0Lmxlbmd0aCA+IDAgJiYgSXNOb3ROdWxsKCRzb3J0LnZhbCgpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJHNvcnQudmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBHZXREZWZhdWx0U29ydEZvclJlY29yZFR5cGUoJ1BST1BFUlRZJyk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gR2V0UHJvcGVydHlJbWFnZUdhbGxlcnkoJHRoaXMpIHtcclxuICAgIHZhciAkaXRlbUNvbnRleHQgPSAkdGhpcztcclxuICAgIHZhciAkc2xpZGVDb250ZXh0ID0gJGl0ZW1Db250ZXh0LmZpbmQoJy5zbGlkZXMnKTtcclxuICAgICRzbGlkZUNvbnRleHQuYXR0cignZGF0YS1jc3Mtc2xpZGVyJywgJzAnKTtcclxuICAgIHZhciBtbHNOdW1iZXIgPSAkaXRlbUNvbnRleHQuZmluZCgnW2RhdGEtbWtdJykuZGF0YSgnbWsnKTtcclxuICAgIHZhciBtbHNCb2FyZCA9ICRpdGVtQ29udGV4dC5maW5kKCdbZGF0YS1tbHNib2FyZF0nKS5kYXRhKCdtbHNib2FyZCcpO1xyXG4gICAgdmFyIHVybCA9ICRpdGVtQ29udGV4dC5maW5kKCdbZGF0YS1kZXRhaWwtdXJsXScpLmRhdGEoJ2RldGFpbC11cmwnKTtcclxuICAgIHZhciBwcm9qZWN0Q29kZSA9ICQoJ1tkYXRhLXBjb2RlXScpLmRhdGEoJ3Bjb2RlJyk7XHJcbiAgICB2YXIgaW1hZ2VUZW1wbGF0ZSA9ICRpdGVtQ29udGV4dC5maW5kKCdbZGF0YS1tbHMtcGhvdG9dJykuZGF0YSgnbWxzLXBob3RvJyk7XHJcbiAgICB2YXIgbmF0aXZlVGFiID0gJGl0ZW1Db250ZXh0LmZpbmQoJ1tkYXRhLW5hdGl2ZS10YWJdJykuZGF0YSgnbmF0aXZlLXRhYicpO1xyXG4gICAgaWYgKCFJc05vdE51bGwoaW1hZ2VUZW1wbGF0ZSkpIGltYWdlVGVtcGxhdGUgPSAnL2ltYWdlcy9jb21wYW55LycgKyBwcm9qZWN0Q29kZSArICcvTm9QaG90b0ltYWdlL2ltYWdlLW5vdC1mb3VuZC5qcGcnO1xyXG4gICAgdmFyIGNvdW50ID0gcGFyc2VJbnQoJHNsaWRlQ29udGV4dC5kYXRhKCd2YWx1ZScpLCAxMCk7XHJcbiAgICB2YXIgJGl0ZW1XaXRoSURDb250ZXh0ID0gJGl0ZW1Db250ZXh0LmNsb3Nlc3QoJ1tpZF0nKTtcclxuICAgIHZhciB1SUQgPSAkaXRlbUNvbnRleHQubGVuZ3RoID09IDAgPyBcInVuXCIgOiAkaXRlbVdpdGhJRENvbnRleHQuYXR0cignaWQnKS5yZXBsYWNlKC9cXCQvZ2ksICcnKTtcclxuICAgIGJ1aWxkRmlyc3RUZW1wbGF0ZShpbWFnZVRlbXBsYXRlLCBjb3VudCwgdUlEICsgbmV3IERhdGUoKS5nZXRNaWxsaXNlY29uZHMoKSwgbWxzQm9hcmQsIG1sc051bWJlciwgJHNsaWRlQ29udGV4dCwgdXJsLCBuYXRpdmVUYWIpO1xyXG4gICAgJGl0ZW1Db250ZXh0LmFkZENsYXNzKCdpbml0Jyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJ1aWxkRmlyc3RUZW1wbGF0ZSh0ZW1wbGF0ZSwgY291bnQsIHVJRCwgbWxzQm9hcmQsIG1sc051bWJlciwgJHNsaWRlQ29udGV4dCwgdXJsLCBuYXRpdmVUYWIpIHtcclxuICAgIHZhciBpID0gMCwgcHJlZml4ID0gKHVJRCArIG1sc0JvYXJkICsgbWxzTnVtYmVyICsgJ18nKTtcclxuICAgICQoJzxpbnB1dCB0eXBlPVwicmFkaW9cIiBhcmlhLWxhYmVsPVwiJyArIChwcmVmaXggKyAnc2xpZGVyJykgKyAnXCIgIG5hbWU9XCInICsgKHByZWZpeCArICdzbGlkZXInKSArICdcIiBpZD1cIicgKyAocHJlZml4ICsgaSkgKyAnXCIgY2hlY2tlZCAvPicpLmFwcGVuZFRvKCRzbGlkZUNvbnRleHQpO1xyXG4gICAgdmFyICRuYXZpZ2F0aW9ucyA9ICQoJzxkaXYgY2xhc3M9XCJuYXZcIj48L2Rpdj4nKTtcclxuICAgIC8vdmFyICRuZXh0ID0gJCgnPGxhYmVsIGRhdGEtY3NzLXNsaWRlci1uYXY9XCJwcm9wcGhvdG9cIiBmb3I9XCInICsgKHByZWZpeCArIChpICsgMSkpICsgJ1wiIGNsYXNzPVwibmV4dFwiPjwvbGFiZWw+Jyk7XHJcbiAgICAvL3ZhciAkcHJldiA9ICQoJzxsYWJlbCBkYXRhLWNzcy1zbGlkZXItbmF2PVwicHJvcHBob3RvXCIgZm9yPVwiJyArIChwcmVmaXggKyAocGFyc2VJbnQoY291bnQsIDEwKSAtIDEpKSArICdcIiBjbGFzcz1cInByZXZcIj48L2xhYmVsPicpO1xyXG4gICAgdmFyICRuZXh0ID0gJCgnPGxhYmVsIGFyaWEtbGFiZWw9XCJuZXh0XCIgYXJpYS1jb250cm9scz1cIm15Q2Fyb3VzZWwtaXRlbXNcIiBkYXRhLWNzcy1zbGlkZXItbmF2PVwicHJvcHBob3RvXCIgZm9yPVwiJyArIChwcmVmaXggKyAoaSArIDEpKSArICdcIiAgY2xhc3M9XCJuZXh0XCI+PHNwYW4gYXJpYS1sYWJlbD1cIm5leHRcIiBjbGFzcz1cInZpc3VhbGx5aGlkZGVuXCI+bmV4dDwvc3Bhbj48L2xhYmVsPicpO1xyXG4gICAgdmFyICRwcmV2ID0gJCgnPGxhYmVsIGFyaWEtbGFiZWw9XCJwcmV2XCIgYXJpYS1jb250cm9scz1cIm15Q2Fyb3VzZWwtaXRlbXNcIiBkYXRhLWNzcy1zbGlkZXItbmF2PVwicHJvcHBob3RvXCIgZm9yPVwiJyArIChwcmVmaXggKyAocGFyc2VJbnQoY291bnQsIDEwKSAtIDEpKSArICdcIiBjbGFzcz1cInByZXZcIj48c3BhbiBhcmlhLWxhYmVsPVwicHJldlwiIGNsYXNzPVwidmlzdWFsbHloaWRkZW5cIj5wcmV2PC9zcGFuPjwvbGFiZWw+Jyk7XHJcbiAgICAkcHJldi5vbignY2xpY2snLCBfbG9hZE1vcmUpO1xyXG4gICAgJG5leHQub24oJ2NsaWNrJywgX2xvYWRNb3JlKTtcclxuICAgICRwcmV2LmFwcGVuZFRvKCRuYXZpZ2F0aW9ucyk7XHJcbiAgICAkbmV4dC5hcHBlbmRUbygkbmF2aWdhdGlvbnMpO1xyXG4gICAgaWYgKCQoJ1tkYXRhLXBjb2RlXScpLmRhdGEoJ3Bjb2RlJykgPT0gJ1BTQicpIHsgdmFyIHRhcmdldCA9ICcnOyB9IGVsc2UgeyB2YXIgdGFyZ2V0ID0gJ3RhcmdldCA9IFwiX2JsYW5rXCInOyB9XHJcbiAgICBpZiAobmF0aXZlVGFiICE9ICd1bmRlZmluZWQnICYmIG5hdGl2ZVRhYiAhPSAnJyAmJiBuYXRpdmVUYWIgPT0gMSlcclxuICAgICAgICB0YXJnZXQgPSAnJztcclxuICAgIHZhciAkbm9kZSA9ICQoJzxsaSBjbGFzcz1cInNsaWRlLWNvbnRhaW5lclwiIGFyaWEtcm9sZWRlc2NyaXB0aW9uPVwiY2Fyb3VzZWxcIiByb2xlPVwiY29udGVudGluZm9cIj48ZGl2IGNsYXNzPVwic2xpZGVcIj48ZGl2IGNsYXNzPVwiUHJvcF9pbWdcIiByb2xlPVwiaW1nXCIgYXJpYS1sYWJlbD1cImJhbm5lckltYWdlXCIgIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTp1cmwoXFwnJyArIHRlbXBsYXRlICsgJ1xcJyk7XCI+PGEgYXJpYS1sYWJlbD1cIicgKyAocHJlZml4ICsgJ3NsaWRlcicpICsgJ1wiJyArIHRhcmdldCArICdocmVmPVwiJyArIHVybCArICdcIj48L2E+PC9kaXY+PC9kaXY+PC9saT4nKTtcclxuICAgICRub2RlLmFwcGVuZCgkbmF2aWdhdGlvbnMpO1xyXG4gICAgJG5vZGUuYXBwZW5kVG8oJHNsaWRlQ29udGV4dCk7XHJcbiAgICBmdW5jdGlvbiBfbG9hZE1vcmUoKSB7XHJcbiAgICAgICAgdmFyICRzZW5kZXIgPSAkKHRoaXMpO1xyXG4gICAgICAgICRwcmV2Lm9mZignY2xpY2snKTtcclxuICAgICAgICAkbmV4dC5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJC5hamF4KHsgdXJsOiAnL3NlcnZpY2VzL2Fnb3JhUHJvcGVydHlQaG90b3MuYXNweCcsIGRhdGE6IHsgbWxzYm9hcmQ6IG1sc0JvYXJkLCBtbHNubzogbWxzTnVtYmVyLCBjb250YWluZXI6IHByZWZpeCB9LCBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHsgJHNsaWRlQ29udGV4dC5hcHBlbmQocmVzcG9uc2UpOyAkc2VuZGVyLnRyaWdnZXIoJ2NsaWNrJyk7IH0gfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIEFEQSBDb21wbGFpbmNlcyAvLyBjYW5jZWwgYnV0dG9uIHdvcmtpbmdcclxuJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIltkYXRhLWZvcl1cIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdmFyIF9mb3IgPSAkKHRoaXMpLmRhdGEoJ2ZvcicpO1xyXG4gICAgICAgICQoJ1tmb3I9XCInICsgX2ZvciArICdcIl0nKS50cmlnZ2VyKFwiY2xpY2tcIik7XHJcbiAgICB9IGNhdGNoIChlKSB7IH1cclxufSk7XHJcbi8vIEVORFxyXG5cclxuKGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgaXNTeW5jZWQgPSBmYWxzZTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnVzZXIuaW4nLCBmdW5jdGlvbiAoZSkge1xyXG5cclxuICAgICAgICBzZXQoZS5kZXRhaWwpO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcudXNlci5vdXQnLCBmdW5jdGlvbiAoZSkge1xyXG5cclxuICAgICAgICBzZXQobnVsbCk7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0KCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gbnVsbDtcclxuICAgICAgICBpZiAod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdBR1VTRVInKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBKU09OLnBhcnNlKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQUdVU0VSJykpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHNldCh1c2VyKSB7XHJcbiAgICAgICAgaWYgKHVzZXIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ0FHVVNFUicpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy51c2VyLmNsZWFyJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHVzZXIuR3VpZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxvY2FsVXNlciA9IHt9O1xyXG4gICAgICAgICAgICAgICAgbG9jYWxVc2VyLkd1aWQgPSB1c2VyLkd1aWQ7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFVzZXIuTmFtZSA9IHVzZXIuTmFtZTtcclxuICAgICAgICAgICAgICAgIGxvY2FsVXNlci5GaXJzdE5hbWUgPSB1c2VyLkZpcnN0TmFtZTtcclxuICAgICAgICAgICAgICAgIGxvY2FsVXNlci5MYXN0TmFtZSA9IHVzZXIuTGFzdE5hbWU7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFVzZXIuRW1haWwgPSB1c2VyLkVtYWlsO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxVc2VyLlBob25lID0gdXNlci5QaG9uZTtcclxuICAgICAgICAgICAgICAgIGxvY2FsVXNlci5Nb2JpbGVQaG9uZSA9IHVzZXIuTW9iaWxlUGhvbmU7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0FHVVNFUicsIEpTT04uc3RyaW5naWZ5KGxvY2FsVXNlcikpO1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZW5kZXIoKSB7ICAgICAgICBcclxuICAgICAgICB2YXIgdXNlclN0YXRlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy11c2VyXScpO1xyXG4gICAgICAgIHVzZXJTdGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgeyByZW5kZXJTdGF0ZXMoaXRlbSk7IH0pOyBcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZW5kZXJTdGF0ZXMoaXRlbSkge1xyXG5cclxuICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoJ2lzLWFwcGxpZWQnKTsgICAgICAgIFxyXG4gICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBpdGVtLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICB2YXIgY3VycmVudCA9IGF3YWl0IGdldCgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaW5pdFByb3BlcnR5Q29sbGVjdGlvbigpO1xyXG4gICAgICAgICAgICB2YXIgbG9nZ2luZWROb2RlID0gYXdhaXQgZ2V0TG9naW5lZEl0ZW0oY3VycmVudCk7XHJcbiAgICAgICAgICAgIGl0ZW0ucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUobG9nZ2luZWROb2RlLCBpdGVtKTtcclxuICAgICAgICAgICAgaXRlbS5yZW1vdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gaW5pdFByb3BlcnR5Q29sbGVjdGlvbigpIHsgICAgICAgIFxyXG4gICAgICAgIGlmIChpc1N5bmNlZCkge1xyXG4gICAgICAgICAgICB1cGRhdGVQcm9wZXJ0eUNvbGxlY3Rpb24oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnN5bmMudmVyaWZpZWQuY29udGFjdCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnR5Q29sbGVjdGlvbigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYXp5LnJlZnJlc2gnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVByb3BlcnR5Q29sbGVjdGlvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcudXNlci5yZWZyZXNoLmNvbGxlY3Rpb24nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVByb3BlcnR5Q29sbGVjdGlvbih0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnVzZXIuY2xlYXIuY29sbGVjdGlvbicsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdBR1VTRVJDT0xMRUNUSU9OMycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcudXNlci5jbGVhcicsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcudXNlci5jbGVhci5jb2xsZWN0aW9uJykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5Q29sbGVjdGlvbihpc0ZvcmNlZCkge1xyXG4gICAgICAgIHZhciBjb2xsZWN0aW9uVHlwZSA9IDM7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gYXdhaXQgZ2V0UHJvcGVydHlDb2xsZWN0aW9uKGNvbGxlY3Rpb25UeXBlLCBpc0ZvcmNlZCk7XHJcbiAgICAgICAgdmFyIGl0ZW1zRXh0cmFjdGVkID0gaXRlbXMuSXRlbXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IFsuLi5yZXN1bHQsIC4uLmN1cnJlbnQuSXRlbXNdIDogWy4uLmN1cnJlbnQuSXRlbXNdO1xyXG4gICAgICAgIH0sIFtdKTtcclxuICAgICAgICBpdGVtc0V4dHJhY3RlZC5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHJlbmRlclByb3BlcnR5Q29sbGVjdGlvbkl0ZW0oaXRlbSwgY29sbGVjdGlvblR5cGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlbmRlclByb3BlcnR5Q29sbGVjdGlvbkl0ZW0oaXRlbSx0eXBlKSB7XHJcbiAgICAgICAgdmFyIGl0ZW1Eb20gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1wZXJmb3JtLWFjdGlvbi11cmwqPVwicGs9JyArIGl0ZW0uUEsgKyAnXCJdW2RhdGEtcGVyZm9ybS1hY3Rpb24tdXJsKj1cInJ0PScgKyBpdGVtLlJUICsgJ1wiXScpOyAgICAgICAgXHJcbiAgICAgICAgaXRlbURvbS5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uKGRvbSkge1xyXG4gICAgICAgICAgICBkb20uc2V0QXR0cmlidXRlKCdhZy11c2VyLWNvbGxlY3Rpb24nLCB0eXBlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRQcm9wZXJ0eUNvbGxlY3Rpb24oY29sbGVjdGlvblR5cGUsIGlzRm9yY2VkKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5Q29sbGVjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eUNvbGxlY3Rpb25TdHJpbmcgPSBpc0ZvcmNlZCA/IG51bGwgOiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0FHVVNFUkNPTExFQ1RJT04nICsgY29sbGVjdGlvblR5cGUpO1xyXG4gICAgICAgICAgICBpZiAocHJvcGVydHlDb2xsZWN0aW9uU3RyaW5nICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5Q29sbGVjdGlvbiA9IEpTT04ucGFyc2UocHJvcGVydHlDb2xsZWN0aW9uU3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocHJvcGVydHlDb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcm9wZXJ0eUNvbGxlY3Rpb24gPSBhd2FpdCB3aW5kb3cuYWdSZXF1ZXN0LkdFVCgnL3NlcnZpY2VzL2Fnb3JhQ2xpZW50LmFzaHgnLCB7IHR5cGU6ICdVU0VSQ09MTEVDVElPTicsIGNvbGxlY3Rpb25UeXBlOiBjb2xsZWN0aW9uVHlwZSB9KTtcclxuICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdBR1VTRVJDT0xMRUNUSU9OJyArIGNvbGxlY3Rpb25UeXBlLCBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eUNvbGxlY3Rpb24pKTtcclxuICAgICAgICAgICAgcmVzb2x2ZShwcm9wZXJ0eUNvbGxlY3Rpb24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRMb2dpbmVkSXRlbShjb250YWN0KSB7XHJcbiAgICAgICAgdmFyIHdyYXBwZXIgPSBuZXcgYygncCcpO1xyXG4gICAgICAgIHdyYXBwZXIuYSgnYWctdXNlcicsJycpO1xyXG4gICAgICAgIHZhciB1c2VyQ29udGFpbmVyID0gd3JhcHBlci5uKCdidXR0b24nKTtcclxuICAgICAgICB1c2VyQ29udGFpbmVyLmEoJ2NsYXNzJywgJ3VzZXItbG9nZ2VkLWluIGEtYi0xIGYtcy0yIHUtbG9naW5lZCBzLWMtcCBtLWwtMTYgeGEtYi13LWwgci1iJyk7XHJcbiAgICAgICAgdXNlckNvbnRhaW5lci5oKGNvbnRhY3QuTmFtZSk7XHJcbiAgICAgICAgdXNlckNvbnRhaW5lci5jbChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGlmICh1c2VyQ29udGFpbmVyLm5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSkge1xyXG4gICAgICAgICAgICAgICAgdXNlckNvbnRhaW5lci5ub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXNlckNvbnRhaW5lci5ub2RlLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHdyYXBwZXIubignc3BhbicpO1xyXG4gICAgICAgIG9wdGlvbnMubignc3BhbicpLmgoJ0hpLCAnICsgY29udGFjdC5OYW1lKTtcclxuICAgICAgICBvcHRpb25zLm4oJ2lucHV0JykuYSgndHlwZScsICdoaWRkZW4nKS5hKCdpZCcsICdDT05UQUNUX0dVSUQnKS5hKCd2YWx1ZScsIGNvbnRhY3QuR3VpZCk7XHJcbiAgICAgICAgb3B0aW9ucy5uKCdhJykuYSgnaHJlZicsICcvZGFzaGJvYXJkL2RlZmF1bHQuYXNweCcpLmgoJ0Rhc2hib2FyZCcpO1xyXG4gICAgICAgIG9wdGlvbnMubignc3BhbicpLmEoJ2RhdGEtbW9kYWxkaWFsb2ctc3JjJywgJy9kYXNoYm9hcmQvRWRpdFByb2ZpbGUuYXNweCcpLmEoJ2RhdGEtbW9kYWxkaWFsb2ctYWpheCcsICd0cnVlJykuYSgnZGF0YS1tb2RhbGRpYWxvZycsJycpLmgoJ0VkaXQgUHJvZmlsZScpO1xyXG4gICAgICAgIG9wdGlvbnMubignYScpLmEoJ2hyZWYnLCAnL2Rhc2hib2FyZC9TaWduT3V0LmFzcHgnKS5hKCdkYXRhLWFnb3JhLWljb24nLCAn7qSxJykuaCgnTG9nIG91dCcpLmNsKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcudXNlci5vdXQnKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHdyYXBwZXIubm9kZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjKG5hbWUpIHtcclxuICAgICAgICB0aGlzLm5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLmEgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLm5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLm4gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBpdGVtID0gbmV3IGMobmFtZSk7XHJcbiAgICAgICAgdGhpcy5ub2RlLmFwcGVuZENoaWxkKGl0ZW0ubm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUuaCA9IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5ub2RlLmlubmVySFRNTCA9IHRleHQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUuY2wgPSBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYWN0aW9uKTtcclxuICAgICAgICB0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhY3Rpb24pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XHJcbiAgICAgICAgcmVuZGVyKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5zeW5jLmNoZWNrJywgYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IGF3YWl0IGdldCgpO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFZhbHVlc1N0cmluZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQUdTWU5DJyk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWVzU3RyaW5nICE9IG51bGwgJiYgY3VycmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gSlNPTi5wYXJzZShjdXJyZW50VmFsdWVzU3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUuQ29udGFjdEd1aWQgIT0gY3VycmVudC5HdWlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy5zZXQnLCB7IGRldGFpbDogeyBjb250YWN0Z3VpZDogY3VycmVudC5HdWlkLCBldmVudFR5cGU6ICdjb250YWN0JyB9IH0pKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy52ZXJpZmllZC5jb250YWN0JykpO1xyXG4gICAgICAgICAgICBpc1N5bmNlZCA9IHRydWU7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcuc3luYy52ZXJpZmllZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy52ZXJpZmllZC5jb250YWN0JykpO1xyXG4gICAgICAgICAgICBpc1N5bmNlZCA9IHRydWU7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgd2luZG93LmFnVXNlciA9IHtcclxuICAgICAgICBjb2xsZWN0aW9uOiB7XHJcbiAgICAgICAgICAgIHJlZnJlc2g6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnVzZXIucmVmcmVzaC5jb2xsZWN0aW9uJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpbml0KCk7XHJcblxyXG59KSgpO1xyXG5cclxuKGFzeW5jIGZ1bmN0aW9uICgpIHsgICAgXHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JTeW5jKCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50VmFsdWVzU3RyaW5nID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdBR1NZTkMnKTtcclxuICAgICAgICBpZiAoY3VycmVudFZhbHVlc1N0cmluZyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBKU09OLnBhcnNlKGN1cnJlbnRWYWx1ZXNTdHJpbmcpO1xyXG4gICAgICAgICAgICB2YXIgdXBkYXRlZE9uID0gbmV3IERhdGUoY3VycmVudFZhbHVlLnVwZGF0ZWRPbik7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50RGF0ZVRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBjdXJyZW50RGF0ZVRpbWUuc2V0TWludXRlcyhjdXJyZW50RGF0ZVRpbWUuZ2V0TWludXRlcygpIC0gMSk7XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGVkT24gPiBjdXJyZW50RGF0ZVRpbWUpIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnN5bmMudmVyaWZpZWQnKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICAgICAgICAgICAgICBcclxuICAgICAgICByZWFkRnJvbVNlcnZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlYWRGcm9tU2VydmVyKCkge1xyXG4gICAgICAgIHZhciBkYXRhVG9SZXZpZXcgPSBhd2FpdCB3aW5kb3cuYWdSZXF1ZXN0LkdFVCgnL3NlcnZpY2VzL2Fnb3JhQ2xpZW50LmFzaHgnLCB7IHR5cGU6ICdTWU5DJyB9KTtcclxuICAgICAgICBkYXRhVG9SZXZpZXcudXBkYXRlZE9uID0gbmV3IERhdGUoKTtcclxuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0FHU1lOQycsIEpTT04uc3RyaW5naWZ5KGRhdGFUb1JldmlldykpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnN5bmMuY2hlY2snKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gaW5pdCgpIHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnN5bmMuc2V0JywgYXN5bmMgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgYXdhaXQgd2luZG93LmFnUmVxdWVzdC5QT1NUKCcvc2VydmljZXMvYWdvcmFDbGllbnQuYXNoeCcsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiAnU0VUJyB9LCBlLmRldGFpbCkpO1xyXG4gICAgICAgICAgICBpZiAoZS5kZXRhaWw/LmV2ZW50VHlwZSlcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnN5bmMudmVyaWZpZWQuJyArIGUuZGV0YWlsLmV2ZW50VHlwZSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnN5bmMuaW52YWxpZCcsIGFzeW5jIGZ1bmN0aW9uIChlKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnN5bmMucmVzZXQnKSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2hlY2tGb3JTeW5jKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpO1xyXG59KSgpO1xyXG5cclxuXHJcblxyXG5cclxuIiwi77u/XHJcbi8vIEludGVyIHBvbGF0aW9uXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIHN5c3RlbUZ1bmN0aW9ucyA9IHt9O1xyXG5cclxuICAgIGZ1bmN0aW9uIEludGVycG9sYXRpb24oaHRtbCwgZG9tLCBjb250ZXh0LCBmdW5jdGlvbkFyZ3NMaXRlcmFscyA9IFtdLCBmdW5jdGlvbkFyZ3NWYWx1ZXMgPSBbXSwgcGFyZW50UmVuZGVyRnVuY3Rpb24gPSAoKSA9PiB7IH0pIHtcclxuICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoJ1xcXFx7XFxcXHtbXlxcXFx9XStcXFxcfVxcXFx9JywgJ2dpJyk7XHJcbiAgICAgICAgbGV0IHJlbmRlckZ1bmN0aW9ucyA9IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHBhcmVudFJlbmRlckZ1bmN0aW9uKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgdGVtcGxhdGVTdHJpbmcgPSAnJztcclxuXHJcbiAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlIG9mIGRvbS5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGRvbS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGJ1aWxkUmVuZGVyRnVuY3Rpb24odmFsdWUsIChjb250ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFuUHJlSW50ZXJwb2xhdGlvbihkb20pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRvbS5jaGlsZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcclxuICAgICAgICAgICAgICAgIEludGVycG9sYXRpb24oaHRtbCwgbm9kZSwgY29udGV4dCwgZnVuY3Rpb25BcmdzTGl0ZXJhbHMsIGZ1bmN0aW9uQXJnc1ZhbHVlcywgKCkgPT4geyB9KTtcclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZERvbSA9IG5vZGU7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgb2YgY2hpbGREb20uZ2V0QXR0cmlidXRlTmFtZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGNoaWxkRG9tLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUmVuZGVyRnVuY3Rpb24odmFsdWUsIChjb250ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERvbS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCBjb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUHJlSW50ZXJwb2xhdGlvbihjaGlsZERvbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gTm9kZS5URVhUX05PREUgJiYgbm9kZS50ZXh0Q29udGVudCAhPSBudWxsICYmIG5vZGUudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLnRleHRDb250ZW50LmluZGV4T2YoJ3t7JykgPT0gMCAmJiBub2RlLnRleHRDb250ZW50ID09IG5vZGUucGFyZW50RWxlbWVudC5pbm5lclRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBidWlsZFJlbmRlckZ1bmN0aW9uKG5vZGUudGV4dENvbnRlbnQsIChjb250ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUHJlSW50ZXJwb2xhdGlvbihub2RlLnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudEVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRSZW5kZXJGdW5jdGlvbihub2RlLnRleHRDb250ZW50LCAoY29udGVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhblByZUludGVycG9sYXRpb24obm9kZS5wYXJlbnRFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50ZXh0Q29udGVudCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY2xlYW5QcmVJbnRlcnBvbGF0aW9uKG5vZGUpIHtcclxuICAgICAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCAmJiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ2FnYS1mYWtlLWNvbnRhaW5zJykgfHwgbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ2FnLWZha2UtaW5saW5lLWNvbnRhaW5zJykpKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWZha2UtY29udGFpbnMnKTtcclxuICAgICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWctZmFrZS1pbmxpbmUtY29udGFpbnMnKTtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkTm9kZXNbMF0ubm9kZVR5cGUgPT0gMSlcclxuICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkTm9kZXNbMF0ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkUmVuZGVyRnVuY3Rpb24oaW5wdXRUZXh0LCByZW5kZXIpIHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBpbnB1dFRleHQubWF0Y2goZXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgIGxldCByZW5kZXJCbG9jayA9ICgpID0+IHsgcmV0dXJuICcnOyB9O1xyXG4gICAgICAgICAgICBsZXQgcmVuZGVyVGVtcGxhdGUgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXIocmVuZGVyQmxvY2soKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBpZiAobWF0Y2hlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVN0cmluZyA9IGlucHV0VGV4dDtcclxuICAgICAgICAgICAgICAgIGxldCB2YXJpYWJsZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGxldCBpc1N5c3RlbUZ1bmN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBtYXRjaGVzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaWRlbnRpZmllciA9IGl0ZW0uc3Vic3RyaW5nKDIsIGl0ZW0ubGVuZ3RoIC0gMik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVTdHJpbmcgPSB0ZW1wbGF0ZVN0cmluZy5yZXBsYWNlKGl0ZW0sIGBcXCR7dHlwZW9mKCR7aWRlbnRpZmllcn0pIT0ndW5kZWZpbmVkJyYmJHtpZGVudGlmaWVyfSE9bnVsbD8ke2lkZW50aWZpZXJ9OicnfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBsb2NhbFZhcmlhYmxlcyA9IEV4dHJhY3RWYXJpYWJsZXNUb3BMZXZlbElkZW50aWZpZXJzKGlkZW50aWZpZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKC4uLmxvY2FsVmFyaWFibGVzLmZpbHRlcigoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFibGVzLmluZGV4T2YoeCkgPCAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllciAhPSB2YXJpYWJsZXNbdmFyaWFibGVzLmxlbmd0aCAtIDFdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXYXRjaChkb20sIGNvbnRleHQsIHZhcmlhYmxlc1t2YXJpYWJsZXMubGVuZ3RoIC0gMV0sIChkYXRhLCBpc0NoYW5nZSwgaWRlbnRpZmllcikgPT4geyByZW5kZXJUZW1wbGF0ZSgpOyB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKElzRnVuY3Rpb24oc3lzdGVtRnVuY3Rpb25zLCBpZGVudGlmaWVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1N5c3RlbUZ1bmN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgRXh0cmFjdEFyZ3VtZW50VmFyaWFibGVzRm9yRnVuY3Rpb25Gcm9tU3RyaW5nKGlkZW50aWZpZXIpLmZvckVhY2goYXJndW1lbnRJdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhdGNoKGRvbSwgY29udGV4dCwgYXJndW1lbnRJdGVtLCAoZGF0YSwgaXNDaGFuZ2UsIGlkZW50aWZpZXIpID0+IHsgcmVuZGVyVGVtcGxhdGUoKTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXYXRjaChkb20sIGNvbnRleHQsIGlkZW50aWZpZXIsIChkYXRhLCBpc0NoYW5nZSwgaWRlbnRpZmllcikgPT4geyByZW5kZXJUZW1wbGF0ZSgpOyB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcmVuZGVyRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oYHRyeXtjb25zdCB7JHt2YXJpYWJsZXMuam9pbignLCcpfX0gPSB0aGlzOyByZXR1cm4gXFxgJHt0ZW1wbGF0ZVN0cmluZ31cXGA7IH1jYXRjaChlKXsgY29uc29sZS5lcnJvcihlKTsgfXJldHVybiAnJztgKS5iaW5kKGlzU3lzdGVtRnVuY3Rpb24gPyBpbnRlcnBvbGF0ZU9iamVjdChjb250ZXh0KSA6IGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyQmxvY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlckZ1bmN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UmVuZGVyRnVuY3Rpb25zID0gcmVuZGVyRnVuY3Rpb25zO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyRnVuY3Rpb25zID0gKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJUZW1wbGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJGdW5jdGlvbnMoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJGdW5jdGlvbnMoY29udGV4dCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGludGVycG9sYXRlT2JqZWN0KGNvbnRleHQpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihjb250ZXh0LCBzeXN0ZW1GdW5jdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIFByZUludGVycG9sYXRpb24oZG9tLCByb290RG9tKSB7XHJcbiAgICAgICAgaWYgKHJvb3REb20gPT0gbnVsbClcclxuICAgICAgICAgICAgcm9vdERvbSA9IGRvbTtcclxuICAgICAgICBsZXQgaXNNYXNrZWQgPSByb290RG9tLmhhc0F0dHJpYnV0ZSgnYWctZmFrZScpO1xyXG5cclxuICAgICAgICBpZiAoaXNNYXNrZWQpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlIG9mIGRvbS5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBkb20uZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5pbmRleE9mKCd7eycpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb20uc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUucmVwbGFjZSgvKFxce1xceyl8KFxcfVxcfSkvZ2ksIFwiXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRvbS5jbGFzc0xpc3QuYWRkKCdhZy1mYWtlLWlubGluZS1jb250YWlucycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkb20uY2hpbGROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUubm9kZU5hbWUgIT0gJ09QVElPTicpIHtcclxuICAgICAgICAgICAgICAgIFByZUludGVycG9sYXRpb24obm9kZSwgcm9vdERvbSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNNYXNrZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgb2Ygbm9kZS5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmluZGV4T2YoJ3t7JykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZS5yZXBsYWNlKC8oXFx7XFx7KXwoXFx9XFx9KS9naSwgXCJcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUubm9kZVR5cGUgPT0gTm9kZS5URVhUX05PREUgJiYgbm9kZS50ZXh0Q29udGVudCAhPSBudWxsICYmIG5vZGUudGV4dENvbnRlbnQuaW5kZXhPZigne3snKSA+IC0xICYmIG5vZGUudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxldCBmYWtlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKTtcclxuICAgICAgICAgICAgICAgIGZha2VFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2FnLWZha2UnKTtcclxuICAgICAgICAgICAgICAgIGxldCBwYXJlbnQgPSBub2RlLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50ICE9IG51bGwgJiYgIXBhcmVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2FnLWZha2UtY29udGFpbnMnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZmFrZUVsZW1lbnQsIHBhcmVudC5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuY2xhc3NMaXN0LmFkZCgnYWctZmFrZS1jb250YWlucycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01hc2tlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50ZXh0Q29udGVudCA9IG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSgvKFxce1xceyl8KFxcfVxcfSkvZ2ksIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIFdhdGNoKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBHZXRWYWx1ZShpdGVtLCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICBpZiAocHJvcGVydHlOYW1lLmluZGV4T2YoJygnKSA8IDAgJiYgcHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50UHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykpO1xyXG4gICAgICAgICAgICBsZXQgc3ViUHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgKyAxLCBwcm9wZXJ0eU5hbWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgcmV0dXJuIEdldFZhbHVlKGl0ZW1bY3VycmVudFByb3BlcnR5XSwgc3ViUHJvcGVydHkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBpc0Z1bmN0aW9uID0gcHJvcGVydHlOYW1lLmluZGV4T2YoJygnKSA+IC0xO1xyXG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbilcclxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZUZyb21GdW5jdGlvbihpdGVtLCBwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbSAhPSB1bmRlZmluZWQgPyBpdGVtW3Byb3BlcnR5TmFtZV0gOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIElzRnVuY3Rpb24oaXRlbSwgcHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPiAtMSAmJiB0eXBlb2YgKGl0ZW1bZ2V0RnVuY3Rpb25OYW1lKHByb3BlcnR5TmFtZSldKSA9PSAnZnVuY3Rpb24nO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIEdldFByb3h5T2JqZWN0KGl0ZW0pIHtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiAoaXRlbSkgPT0gJ3VuZGVmaW5lZCcgfHwgaXRlbSA9PSBudWxsKSByZXR1cm4gaXRlbTtcclxuXHJcbiAgICAgICAgbGV0IHByb3h5T2JqZWN0ID0ge307XHJcblxyXG4gICAgICAgIGZvciAobGV0IGl0ZW1Qcm9wZXJ0eSBpbiBpdGVtKVxyXG4gICAgICAgICAgICBTZXRQcm9wZXJ0eVRvUHJveHlPYmplY3QoaXRlbSwgcHJveHlPYmplY3QsIGl0ZW1Qcm9wZXJ0eSk7XHJcblxyXG4gICAgICAgIC8vTGlua0l0ZW0oaXRlbSxwcm94eU9iamVjdCk7XHJcblxyXG4gICAgICAgIHJldHVybiBwcm94eU9iamVjdDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBTZXRQcm9wZXJ0eVRvUHJveHlPYmplY3QoaXRlbSwgcHJveHlPYmplY3QsIHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgKGl0ZW1bcHJvcGVydHlOYW1lXSkgPT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICAgICAgcHJveHlPYmplY3RbcHJvcGVydHlOYW1lXSA9IGl0ZW1bcHJvcGVydHlOYW1lXTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eU9iamVjdCwgcHJvcGVydHlOYW1lLCB7IGdldCgpIHsgcmV0dXJuIGl0ZW1bcHJvcGVydHlOYW1lXTsgfSwgc2V0KHZhbHVlKSB7IGl0ZW1bcHJvcGVydHlOYW1lXSA9IHZhbHVlOyBOb3RpZnkobnVsbCwgaXRlbSwgcHJvcGVydHlOYW1lLCB0cnVlKTsgfSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIFNldFByb3BlcnR5RGVzY3JpcHRvclRvUHJveHlPYmplY3QocHJveHlPYmplY3QsIHByb3BlcnR5TmFtZSwgcHJvcGVydHlEZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHByb3BlcnR5RGVzY3JpcHRvcik7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gQ29udmVyT2JqZWN0VG9Bcmd1bWVudEFycmF5KGl0ZW0pIHtcclxuXHJcbiAgICAgICAgbGV0IGNvbnZlcnRlZFZhbHVlcyA9IHsgYXJndW1lbnRzOiBbXSwgdmFsdWVzOiBbXSB9O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gaXRlbSkge1xyXG4gICAgICAgICAgICBjb252ZXJ0ZWRWYWx1ZXMuYXJndW1lbnRzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgY29udmVydGVkVmFsdWVzLnZhbHVlcy5wdXNoKGl0ZW1ba2V5XSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY29udmVydGVkVmFsdWVzO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluc2VydEFmdGVyKGVsLCByZWZlcmVuY2VOb2RlKSB7XHJcbiAgICAgICAgaWYgKHJlZmVyZW5jZU5vZGUucGFyZW50Tm9kZSAhPSBudWxsKVxyXG4gICAgICAgICAgICByZWZlcmVuY2VOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsLCByZWZlcmVuY2VOb2RlLm5leHRTaWJsaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbnNlcnRCZWZvcmUoZWwsIHJlZmVyZW5jZU5vZGUpIHtcclxuICAgICAgICByZWZlcmVuY2VOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsLCByZWZlcmVuY2VOb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdmFyaWFibGVzRnJvbVN0cmluZ0V4cHJlc3Npb24gPSBuZXcgUmVnRXhwKCcoKD88c3RyaW5nPihbXFxcIlxcJ1xcYF0uKj9bXFxcIlxcJ1xcYF0pKXwoPzxib29sZWFuPih0cnVlfGZhbHNlKSl8KCg/PGZ1bmN0aW9uPltBLXpfXVtBLXowLTlcXC5cXCRdKylbXFwoXSl8KD88aWRlbnRpZmllcj5bQS16X11bQS16MC05XFwuXFwkXSspKScsICdnaScpO1xyXG4gICAgbGV0IHZhcmlhYmxlVG9wTGV2ZWxJZGVudGlmaWVyc0V4cHJlc3Npb24gPSBuZXcgUmVnRXhwKCcoPzx2YXJpYWJsZT5bQS16MC05X1xcXFwkXSspKCgoXFxcXC5bXlxcXFxzXFxcXD1cXFxcJlxcXFx8XSopfFxcXFwoKSk/JywgJ2dpJyk7XHJcblxyXG4gICAgZnVuY3Rpb24gRXh0cmFjdFZhcmlhYmxlc1RvcExldmVsSWRlbnRpZmllcnModmFsdWF0aW9uU3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2ggPSBudWxsO1xyXG4gICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gdmFyaWFibGVUb3BMZXZlbElkZW50aWZpZXJzRXhwcmVzc2lvbi5leGVjKHZhbHVhdGlvblN0cmluZykpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaC5ncm91cHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2guZ3JvdXBzLnZhcmlhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG1hdGNoLmdyb3Vwcy52YXJpYWJsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBFeHRyYWN0VmFyaWFibGVzRnJvbVN0cmluZyh2YWx1YXRpb25TdHJpbmcpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0geyBmdW5jdGlvbnM6IFtdLCBpZGVudGlmaWVyczogW10gfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoID0gbnVsbDtcclxuICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IHZhcmlhYmxlc0Zyb21TdHJpbmdFeHByZXNzaW9uLmV4ZWModmFsdWF0aW9uU3RyaW5nKSkgIT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaC5ncm91cHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2guZ3JvdXBzLmlkZW50aWZpZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pZGVudGlmaWVycy5wdXNoKG1hdGNoLmdyb3Vwcy5pZGVudGlmaWVyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2guZ3JvdXBzLmZ1bmN0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZnVuY3Rpb25zLnB1c2gobWF0Y2guZ3JvdXBzLmZ1bmN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gRXh0cmFjdEFyZ3VtZW50VmFyaWFibGVzRm9yRnVuY3Rpb25Gcm9tU3RyaW5nKHZhbHVhdGlvblN0cmluZykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHMgPSBbXTtcclxuICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHNTdGFydCA9IHZhbHVhdGlvblN0cmluZy5pbmRleE9mKCcoJyk7XHJcbiAgICAgICAgbGV0IGZ1bmN0aW9uQXJndW1lbnRzRW5kID0gdmFsdWF0aW9uU3RyaW5nLmluZGV4T2YoJyknKTtcclxuICAgICAgICBsZXQgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25Bcmd1bWVudHNTdGFydCA+IC0xID8gdmFsdWF0aW9uU3RyaW5nLnN1YnN0cmluZygwLCBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0KSA6IHZhbHVhdGlvblN0cmluZztcclxuICAgICAgICBsZXQgYXJndW1lbnRzU3RyaW5nID0gdmFsdWF0aW9uU3RyaW5nLnN1YnN0cmluZyhmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ICsgMSwgZnVuY3Rpb25Bcmd1bWVudHNFbmQpO1xyXG4gICAgICAgIGxldCBtYXRjaGVzID0gYXJndW1lbnRzU3RyaW5nLm1hdGNoKG5ldyBSZWdFeHAoJ1teLF0rJywgJ2dpJykpO1xyXG4gICAgICAgIGlmIChtYXRjaGVzICE9IG51bGwpXHJcbiAgICAgICAgICAgIG1hdGNoZXMuZm9yRWFjaCgoYXJndW1lbnRJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoL14oX3xbQS16XSkoX3xbQS16XXxbMC05XXxcXCQpKyQvLnRlc3QoYXJndW1lbnRJdGVtLnRyaW0oKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJndW1lbnRJdGVtLnRyaW0oKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWUocHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgbGV0IG9wZW5JbmRleCA9IC0xO1xyXG4gICAgICAgIGlmICgob3BlbkluZGV4ID0gcHJvcGVydHlOYW1lLmluZGV4T2YoJygnKSkgPiAtMSkgcmV0dXJuIHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgb3BlbkluZGV4KTtcclxuICAgICAgICByZXR1cm4gcHJvcGVydHlOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFZhbHVlRnJvbUZ1bmN0aW9uKGl0ZW0sIHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgIGxldCBmdW5jdGlvbkFyZ3VtZW50cyA9IFtdO1xyXG4gICAgICAgIGxldCBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ID0gcHJvcGVydHlOYW1lLmluZGV4T2YoJygnKTtcclxuICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHNFbmQgPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZignKScpO1xyXG4gICAgICAgIGxldCBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ID4gLTEgPyBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQpIDogcHJvcGVydHlOYW1lO1xyXG4gICAgICAgIGxldCBhcmd1bWVudHNTdHJpbmcgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQgKyAxLCBmdW5jdGlvbkFyZ3VtZW50c0VuZCk7XHJcbiAgICAgICAgbGV0IG1hdGNoZXMgPSBhcmd1bWVudHNTdHJpbmcubWF0Y2gobmV3IFJlZ0V4cCgnW14sXSsnLCAnZ2knKSk7XHJcbiAgICAgICAgaWYgKG1hdGNoZXMgIT0gbnVsbClcclxuICAgICAgICAgICAgbWF0Y2hlcy5mb3JFYWNoKChhcmd1bWVudEl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uQXJndW1lbnRzLnB1c2goR2V0VmFsdWUoaXRlbSwgYXJndW1lbnRJdGVtKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgKGl0ZW1bZnVuY3Rpb25OYW1lXSkgPT0gJ2Z1bmN0aW9uJyA/IGl0ZW1bZnVuY3Rpb25OYW1lXS5hcHBseShpdGVtLCBmdW5jdGlvbkFyZ3VtZW50cykgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIElmKGh0bWwsIGRvbSwgY29udGV4dCkge1xyXG4gICAgICAgIGxldCBodG1sRG9jdW1lbnQgPSBodG1sO1xyXG4gICAgICAgIGxldCBpZnMgPSBkb20ucXVlcnlTZWxlY3RvckFsbCgnW2FnLWlmXScsIGRvbSk7XHJcbiAgICAgICAgaWZzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgbGV0IG5vZGVzQW5kQ29uZGl0aW9uID0gW107XHJcbiAgICAgICAgICAgIGxldCBuZXh0Tm9kZSA9IGl0ZW07XHJcbiAgICAgICAgICAgIGxldCBpdGVtUGFyZW50ID0gaXRlbS5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICBsZXQgYWN0aXZlTm9kZUFuZENvbmRpdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBpZGVudGlmaWVyc1VzZWQgPSBbXTtcclxuICAgICAgICAgICAgbGV0IEF0dHJpYnV0ZXMgPSB7XHJcbiAgICAgICAgICAgICAgICBJZjogXCJhZy1pZlwiLFxyXG4gICAgICAgICAgICAgICAgRWxzZUlmOiBcImFnLWVsc2UtaWZcIixcclxuICAgICAgICAgICAgICAgIEVsc2U6IFwiYWctZWxzZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hpbGUgKG5leHROb2RlICE9IG51bGwgJiYgKChpdGVtID09IG5leHROb2RlICYmIG5leHROb2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLklmKSkgfHwgbmV4dE5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuRWxzZUlmKSB8fCBuZXh0Tm9kZS5oYXNBdHRyaWJ1dGUoQXR0cmlidXRlcy5FbHNlKSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBub2RlID0gbmV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWZha2UtbWFzaycpO1xyXG4gICAgICAgICAgICAgICAgbmV4dE5vZGUgPSAobm9kZS5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGF0dHJpYnV0ZVRvUmVhZCA9IG5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuSWYpID8gQXR0cmlidXRlcy5JZiA6IG5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuRWxzZUlmKSA/IEF0dHJpYnV0ZXMuRWxzZUlmIDogQXR0cmlidXRlcy5FbHNlO1xyXG4gICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVUb1JlYWQpO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlVG9SZWFkKTtcclxuICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgRXh0cmFjdFZhcmlhYmxlc0Zyb21TdHJpbmcoZXhwcmVzc2lvbikuaWRlbnRpZmllcnMuZm9yRWFjaChpZGVudGlmaWVyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJzVXNlZC5pbmRleE9mKGlkZW50aWZpZXIpIDwgMCkgaWRlbnRpZmllcnNVc2VkLnB1c2goaWRlbnRpZmllcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBub2Rlc0FuZENvbmRpdGlvbi5wdXNoKHsgbm9kZTogKG5vZGUuY2xvbmVOb2RlKHRydWUpKSwgZXhwcmVzc2lvbjogZXhwcmVzc2lvbiwgcG9zaXRpb246IG5vZGUubmV4dFNpYmxpbmcsIGlzRGVmYXVsdDogYXR0cmlidXRlVG9SZWFkID09IEF0dHJpYnV0ZXMuRWxzZSB9KTtcclxuICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHZhbHVhdGlvbkZ1bmN0aW9uQXJndW1lbnRzID0gQ29udmVyT2JqZWN0VG9Bcmd1bWVudEFycmF5KGNvbnRleHQpO1xyXG4gICAgICAgICAgICBsZXQgcmVuZGVyID0gKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhbHVhdGlvbkZ1bmN0aW9uQXJndW1lbnRzID0gQ29udmVyT2JqZWN0VG9Bcmd1bWVudEFycmF5KGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZU5vZGVBbmRDb25kaXRpb24gIT0gbnVsbCkgKGFjdGl2ZU5vZGVBbmRDb25kaXRpb24uYWN0aXZlKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IG5vZGVBbmRDb25kaXRpb24gb2Ygbm9kZXNBbmRDb25kaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlQW5kQ29uZGl0aW9uLmlzRGVmYXVsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWF0aW9uRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oLi4udmFsdWF0aW9uRnVuY3Rpb25Bcmd1bWVudHMuYXJndW1lbnRzLCBgcmV0dXJuICR7bm9kZUFuZENvbmRpdGlvbi5leHByZXNzaW9ufTtgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWF0aW9uRnVuY3Rpb24oLi4udmFsdWF0aW9uRnVuY3Rpb25Bcmd1bWVudHMudmFsdWVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBub2RlQW5kQ29uZGl0aW9uLmlzRGVmYXVsdDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZU5vZGVBbmRDb25kaXRpb24gPSBub2RlQW5kQ29uZGl0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluc2VydFBvc3Rpb24gPSBmaW5kRG9tUG9zaXRpb24obm9kZUFuZENvbmRpdGlvbi5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVBhcmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvbmFsTm9kZSA9IG5vZGVBbmRDb25kaXRpb24ubm9kZS5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUFuZENvbmRpdGlvbi5hY3RpdmUgPSBjb25kaXRpb25hbE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVBhcmVudC5pbnNlcnRCZWZvcmUoY29uZGl0aW9uYWxOb2RlLCBpbnNlcnRQb3N0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1JbnRlcm5hbChodG1sLCBjb25kaXRpb25hbE5vZGUsIGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IGNvbnNvbGUubG9nKGUpOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gZmluZERvbVBvc2l0aW9uKGRvbSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvbSAhPSBudWxsICYmICFkb2N1bWVudC5jb250YWlucyhkb20pKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5kRG9tUG9zaXRpb24oZG9tLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaWRlbnRpZmllciBvZiBpZGVudGlmaWVyc1VzZWQpIHtcclxuICAgICAgICAgICAgICAgIFdhdGNoKGl0ZW0sIGNvbnRleHQsIGlkZW50aWZpZXIsIChkYXRhLCBpc0NoYW5nZSwgaXNVc2VyQ2hhbmdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2hhbmdlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXIoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZW5kZXIoY29udGV4dCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBQcmVJZihkb20pIHtcclxuICAgICAgICBsZXQgaWZzID0gZG9tLnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1pZl0nLCBkb20pO1xyXG4gICAgICAgIGxldCBpc0Zha2UgPSBkb20uaGFzQXR0cmlidXRlKCdhZy1mYWtlJyk7XHJcbiAgICAgICAgaWZzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgbGV0IG5leHROb2RlID0gaXRlbTtcclxuICAgICAgICAgICAgbGV0IGlkZW50aWZpZXJzVXNlZCA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgZmFrZUZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBBdHRyaWJ1dGVzID0ge1xyXG4gICAgICAgICAgICAgICAgSWY6IFwiYWctaWZcIixcclxuICAgICAgICAgICAgICAgIEVsc2VJZjogXCJhZy1lbHNlLWlmXCIsXHJcbiAgICAgICAgICAgICAgICBFbHNlOiBcImFnLWVsc2VcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlIChuZXh0Tm9kZSAhPSBudWxsICYmICgoaXRlbSA9PSBuZXh0Tm9kZSAmJiBuZXh0Tm9kZS5oYXNBdHRyaWJ1dGUoQXR0cmlidXRlcy5JZikpIHx8IG5leHROb2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLkVsc2VJZikgfHwgbmV4dE5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuRWxzZSkpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IG5leHROb2RlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmYWtlRm91bmQgJiYgbm9kZS5oYXNBdHRyaWJ1dGUoJ2FnLWZha2UnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZha2VGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZha2VGb3VuZCB8fCAoIWZha2VGb3VuZCAmJiAhbmV4dE5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuRWxzZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKCdhZy1mYWtlLW1hc2snKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFrZUZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChpc0Zha2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShBdHRyaWJ1dGVzLklmKTtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShBdHRyaWJ1dGVzLkVsc2VJZik7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoQXR0cmlidXRlcy5FbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG5leHROb2RlID0gKG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWZha2VGb3VuZClcclxuICAgICAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnYWctZmFrZS1tYXNrJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vL0ZvclxyXG5cclxuICAgIGZ1bmN0aW9uIEZvcihodG1sLCBkb20sIGNvbnRleHQpIHtcclxuICAgICAgICBsZXQgaHRtbERvY3VtZW50ID0gaHRtbDtcclxuICAgICAgICBsZXQgbG9vcHMgPSBkb20ucXVlcnlTZWxlY3RvckFsbCgnW2FnLWZvcl0nLCBkb20pO1xyXG4gICAgICAgIGxvb3BzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgbGV0IGZha2VJdGVtID0gaXRlbS5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgIGxldCBmYWtlSXRlbUNvdW50ID0gMDtcclxuICAgICAgICAgICAgbGV0IGlzZmFrZUl0ZW1Db3VudFJlYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoJ1xcXFxzKihbQS16MC05XSspXFxcXHMrKGluKVxcXFxzKyhbQS16MC05XFxcXC5dKylcXFxccyonLCAnZ2knKTtcclxuICAgICAgICAgICAgbGV0IGxvb3BDb25zdHJhaW50ID0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWZvcicpO1xyXG4gICAgICAgICAgICBpZiAobG9vcENvbnN0cmFpbnQgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBsZXQgaXRyYXRvckZpbmlzaGVkID0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWZvci1jb21wbGV0ZScpO1xyXG4gICAgICAgICAgICBsZXQgZmllbGRzQW5kVmFsdWUgPSBleHByZXNzaW9uLmV4ZWMobG9vcENvbnN0cmFpbnQpO1xyXG4gICAgICAgICAgICBsZXQgaXRyYXRvciA9IGZpZWxkc0FuZFZhbHVlICE9IG51bGwgPyBmaWVsZHNBbmRWYWx1ZVsxXSA6IFwiXCI7XHJcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZmllbGRzQW5kVmFsdWUgIT0gbnVsbCA/IGZpZWxkc0FuZFZhbHVlWzNdIDogXCJcIjsgICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IGh0bWxUb0Nsb25lID0gaXRlbS5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgIGxldCBodG1sVG9DbG9uZVBhcmVudCA9IGl0ZW0ucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgbGV0IGh0bWxUb0Nsb25lTG9jYXRpb24gPSBpdGVtLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAoaHRtbFRvQ2xvbmUpLnJlbW92ZUF0dHJpYnV0ZSgnYWctZm9yJyk7XHJcbiAgICAgICAgICAgIGl0ZW0ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIGxldCBpdGVtRWxlbWVudHMgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGlzRGlydHlGYWtlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uQ29udGV4dCA9IGdldENvbGxlY3Rpb25PYmplY3QoY29udGV4dCwgY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uQ29udGV4dEZpZWxkID0gZ2V0Q29sbGVjdGlvbk5hbWUoY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBTZXRQcm9wZXJ0eURlc2NyaXB0b3JUb1Byb3h5T2JqZWN0KGNvbGxlY3Rpb25Db250ZXh0LCBgJHtjb2xsZWN0aW9uQ29udGV4dEZpZWxkfSRmb3JgLCB7IHZhbHVlOiAwLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIGxldCByZW5kZXIgPSAoZGF0YSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW1FbGVtZW50IG9mIGl0ZW1FbGVtZW50cylcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbUVsZW1lbnQpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBpdGVtc0NvbGxlY3Rpb24gPSBHZXRWYWx1ZShkYXRhLCBjb2xsZWN0aW9uKVxyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW1JbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXNGaXJzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXNDb2xsZWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzRGlydHlGYWtlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBodG1sVG9DbG9uZUxvY2F0aW9uID0gcmVtb3ZlUHJlRm9yKGZha2VJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtRnJvbUNvbGxlY3Rpb24gb2YgaXRlbXNDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZXh0T2JqZWN0ID0gR2V0UHJveHlPYmplY3QoY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNldFByb3BlcnR5RGVzY3JpcHRvclRvUHJveHlPYmplY3QoY29udGV4dE9iamVjdCwgaXRyYXRvciwgeyBnZXQoKSB7IHJldHVybiBpdGVtRnJvbUNvbGxlY3Rpb247IH0sIHNldCh2YWx1ZSkgeyBpdGVtRnJvbUNvbGxlY3Rpb24gPSB2YWx1ZTsgfSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgU2V0UHJvcGVydHlEZXNjcmlwdG9yVG9Qcm94eU9iamVjdChjb250ZXh0T2JqZWN0LCBgcm93JEluZGV4YCwgeyB2YWx1ZTogaXRlbUluZGV4ICsgMSwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNldFByb3BlcnR5RGVzY3JpcHRvclRvUHJveHlPYmplY3QoY29udGV4dE9iamVjdCwgYCR7aXRyYXRvcn0kSW5kZXhgLCB7IHZhbHVlOiBpdGVtSW5kZXggKyAxLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSXRyYXRvcjonLCBjb250ZXh0T2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNsb25lZEVsZW1lbnQgPSBodG1sVG9DbG9uZS5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNGaXJzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbFRvQ2xvbmVQYXJlbnQ/Lmluc2VydEJlZm9yZShjbG9uZWRFbGVtZW50LCBodG1sVG9DbG9uZUxvY2F0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmlyc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEFmdGVyKGNsb25lZEVsZW1lbnQsIGl0ZW1FbGVtZW50c1tpdGVtRWxlbWVudHMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1JbnRlcm5hbChodG1sRG9jdW1lbnQsIGNsb25lZEVsZW1lbnQsIGNvbnRleHRPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRWxlbWVudHMucHVzaChjbG9uZWRFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNldFByb3BlcnR5RGVzY3JpcHRvclRvUHJveHlPYmplY3QoY29sbGVjdGlvbkNvbnRleHQsIGAke2NvbGxlY3Rpb25Db250ZXh0RmllbGR9JGZvcmAsIHsgdmFsdWU6IERhdGUubm93KCksIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLWZvci1jb21wbGV0ZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbFRvQ2xvbmVQYXJlbnQ/LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKGl0ZW1zQ29sbGVjdGlvbikgPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmFrZUl0ZW0gIT0gbnVsbCAmJiBmYWtlSXRlbS5oYXNBdHRyaWJ1dGUoJ2FnLWZvci1mYWtlJykgJiYgaXNEaXJ0eUZha2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFrZUl0ZW0gPSBQcmVGb3JQYXJ0aWFsKGZha2VJdGVtLCBodG1sVG9DbG9uZVBhcmVudCwgaHRtbFRvQ2xvbmVMb2NhdGlvbiwgZmFrZUl0ZW1Db3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRyYXRvckZpbmlzaGVkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZnVuY3Rpb25OYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBpdHJhdG9yRmluaXNoZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnZXRQYXJhbWV0ZXJOYW1lID0gKG5hbWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gJ3RoaXMnKSByZXR1cm4gJ3NlbmRlcic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lLmluZGV4T2YoJy4nKSA+IC0xKSByZXR1cm4gbmFtZS5yZXBsYWNlKFwiLlwiLCAnXycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnZXRWYWx1ZSA9IChpdGVtLCBwcm9wZXJ0eU5hbWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPCAwICYmIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgcHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3ViUHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgKyAxLCBwcm9wZXJ0eU5hbWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZShpdGVtW2N1cnJlbnRQcm9wZXJ0eV0sIHN1YlByb3BlcnR5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0Z1bmN0aW9uID0gcHJvcGVydHlOYW1lLmluZGV4T2YoJygnKSA+IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlRnJvbUZ1bmN0aW9uKGl0ZW0sIHByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bcHJvcGVydHlOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdldEZ1bmN0aW9uRnJvbUNvbGxlY3Rpb24gPSAoY29udGV4dCwgbmFtZSwgYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuX19wcm90b19fW25hbWVdICE9IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fX3Byb3RvX19bbmFtZV0oLi4uYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoY29udGV4dFtpdGVtXSkgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEZ1bmN0aW9uRnJvbUNvbGxlY3Rpb24oY29udGV4dFtpdGVtXSwgbmFtZSwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKGNvbnRleHRbaXRlbV0pID09ICdmdW5jdGlvbicgJiYgaXRlbSA9PSBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dFtpdGVtXSguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ2V0VmFsdWVGcm9tRnVuY3Rpb24gPSAoaXRlbSwgcHJvcGVydHlOYW1lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jdGlvbkFyZ3VtZW50cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHNTdGFydCA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jdGlvbkFyZ3VtZW50c0VuZCA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcpJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ID4gLTEgPyBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQpIDogcHJvcGVydHlOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJndW1lbnRzU3RyaW5nID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyhmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ICsgMSwgZnVuY3Rpb25Bcmd1bWVudHNFbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IGFyZ3VtZW50c1N0cmluZy5tYXRjaChuZXcgUmVnRXhwKCdbXixdKycsICdnaScpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuZm9yRWFjaCgoYXJndW1lbnRJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Bcmd1bWVudHMucHVzaChnZXRWYWx1ZShpdGVtLCBhcmd1bWVudEl0ZW0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmdW5jdGlvbk5hbWVdLmFwcGx5KGl0ZW0sIGZ1bmN0aW9uQXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSA9IHZhbHVlLnN1YnN0cmluZygwLCB2YWx1ZS5pbmRleE9mKCcoJykgPiAtMSA/IHZhbHVlLmluZGV4T2YoJygnKSA6IHZhbHVlLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKCcoXFxcXCgoPzxwYXJhbXM+Lio/KVxcXFwpKScpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtc1N0cmluZyA9IHZhbHVlLm1hdGNoKGV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zU3RyaW5nICE9IHVuZGVmaW5lZCAmJiBwYXJhbXNTdHJpbmcgIT0gbnVsbCAmJiBwYXJhbXNTdHJpbmcuZ3JvdXBzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHBhcmFtc1N0cmluZy5ncm91cHMucGFyYW1zLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zSXRlbSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcGFyYW0gaW4gcGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtc1twYXJhbV0gPT0gJ3RoaXMnKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNQYXJhbVZhbHVlID0gKG5ldyBSZWdFeHAoJ14oXFxcXFxcJ3xbMC05XSknKS50ZXN0KHBhcmFtc1twYXJhbV0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1OYW1lID0gIWlzUGFyYW1WYWx1ZSA/IGdldFBhcmFtZXRlck5hbWUocGFyYW1zW3BhcmFtXSkgOiAnaXRlbV8nICsgcGFyYW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zSXRlbVtwYXJhbU5hbWVdID0gaXNQYXJhbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhdGNoKGl0ZW0sIGNvbGxlY3Rpb25Db250ZXh0LCBgJHtjb2xsZWN0aW9uQ29udGV4dEZpZWxkfSRmb3JgLCAoZGF0YSwgaXNDaGFuZ2UsIGlzVXNlckNoYW5nZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcmdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zW2tleV0gPT0gJ3RoaXMnIHx8IHBhcmFtc1trZXldID09ICdzZW5kZXInKSBhcmdzLnB1c2goaHRtbFRvQ2xvbmVQYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXJhbXNba2V5XSA9PSAnZGF0YScpIGFyZ3MucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1WYWx1ZSA9ICFwYXJhbXNJdGVtW2dldFBhcmFtZXRlck5hbWUocGFyYW1zW2tleV0pXSA/IGdldFZhbHVlKGRhdGEsIHBhcmFtc1trZXldKSA6IGV2YWwocGFyYW1zW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKHBhcmFtVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2Z1bmN0aW9uTmFtZV0gIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtmdW5jdGlvbk5hbWVdLmFwcGx5KGRhdGEsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50RnVuY3Rpb24gPSBnZXRGdW5jdGlvbkZyb21Db2xsZWN0aW9uKGRhdGEsIGZ1bmN0aW9uTmFtZSwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZ1bmN0aW9uICE9IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb24oYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVuZGVyKGNvbnRleHQpO1xyXG4gICAgICAgICAgICBXYXRjaChpdGVtLCBjb250ZXh0LCBjb2xsZWN0aW9uLCAoZGF0YSwgaXNDaGFuZ2UsIGlzVXNlckNoYW5nZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQ2hhbmdlKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcihkYXRhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRDb2xsZWN0aW9uT2JqZWN0KGl0ZW0sIHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPCAwICYmIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzdWJQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcocHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSArIDEsIHByb3BlcnR5TmFtZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRDb2xsZWN0aW9uT2JqZWN0KGl0ZW1bY3VycmVudFByb3BlcnR5XSwgc3ViUHJvcGVydHkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaXNGdW5jdGlvbiA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPiAtMTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q29sbGVjdGlvbk5hbWUocHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lLmluZGV4T2YoJygnKSA8IDAgJiYgcHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgcHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1YlByb3BlcnR5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyhwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpICsgMSwgcHJvcGVydHlOYW1lLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldENvbGxlY3Rpb25OYW1lKHN1YlByb3BlcnR5KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5TmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlUHJlRm9yKGZha2VJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmFrZUl0ZW0gIT0gbnVsbCAmJiBmYWtlSXRlbS5oYXNBdHRyaWJ1dGUoJ2FnLWZvci1mYWtlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBodG1sVG9DbG9uZS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1mYWtlLW1hc2snKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dEl0ZW0gPSBmYWtlSXRlbTtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV4dEl0ZW0gIT0gbnVsbCAmJiBuZXh0SXRlbS5oYXNBdHRyaWJ1dGUoJ2FnLWZvci1mYWtlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc2Zha2VJdGVtQ291bnRSZWFkZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWtlSXRlbUNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvbGROZXh0ID0gbmV4dEl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJdGVtID0gbmV4dEl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbGROZXh0LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpc2Zha2VJdGVtQ291bnRSZWFkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0SXRlbTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWtlSXRlbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gaHRtbERvY3VtZW50LmlubmVySFRNTDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBQcmVGb3JQYXJ0aWFsKGl0ZW0sIHBhcmVudCwgbG9jYXRpb24sIGNvdW50KSB7XHJcbiAgICAgICAgbGV0IGxhc3RJdGVtID0gbnVsbCwgZmlyc3RJdGVtID0gbnVsbDtcclxuICAgICAgICBsZXQgaXNGaXJzdCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgZmFrZUl0ZW0gPSBpdGVtLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgaWYgKCFpc0ZpcnN0KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQ/Lmluc2VydEJlZm9yZShmYWtlSXRlbSwgbG9jYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgaXNGaXJzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBmaXJzdEl0ZW0gPSBmYWtlSXRlbTtcclxuICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICBpbnNlcnRBZnRlcihmYWtlSXRlbSwgbGFzdEl0ZW0pO1xyXG4gICAgICAgICAgICBsYXN0SXRlbSA9IGZha2VJdGVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlyc3RJdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIFByZUZvcihkb20pIHtcclxuICAgICAgICBsZXQgbG9vcHMgPSBkb20ucXVlcnlTZWxlY3RvckFsbCgnW2FnLWZvcl1bYWctZm9yLWZha2VdOm5vdCguYWctZmFrZS1tYXNrKScsIGRvbSk7XHJcbiAgICAgICAgbG9vcHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS50YWdOYW1lID09IFwiT1BUSU9OXCIpIHJldHVybjtcclxuICAgICAgICAgICAgbGV0IGNsb25lSXRlbSA9IGl0ZW0uY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICBjbG9uZUl0ZW0uc2V0QXR0cmlidXRlKCdhZy1mYWtlJywgJycpO1xyXG4gICAgICAgICAgICBsZXQgY2xvbmVJdGVtQ291bnQgPSAxO1xyXG4gICAgICAgICAgICBsZXQgY2xvbmVJdGVtQ291bnRTdHJpbmcgPSBpdGVtLmdldEF0dHJpYnV0ZSgnYWctZm9yLWZha2UnKTtcclxuICAgICAgICAgICAgaWYgKGNsb25lSXRlbUNvdW50U3RyaW5nICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICBjbG9uZUl0ZW1Db3VudCA9IHBhcnNlSW50KGNsb25lSXRlbUNvdW50U3RyaW5nKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgY2xvbmVJdGVtLnNldEF0dHJpYnV0ZSgnYWctZm9yLWZha2UnLCAnJyk7XHJcbiAgICAgICAgICAgIGNsb25lSXRlbS5yZW1vdmVBdHRyaWJ1dGUoJ2FnLWZvcicpO1xyXG4gICAgICAgICAgICBpdGVtLnJlbW92ZUF0dHJpYnV0ZSgnYWctZm9yLWZha2UnKTtcclxuICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdhZy1mYWtlLW1hc2snKTtcclxuICAgICAgICAgICAgUHJlVHJhbnNmb3JtSW50ZXJuYWwoY2xvbmVJdGVtKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbG9uZUl0ZW1Db3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnBhcmVudEVsZW1lbnQ/LmFwcGVuZENoaWxkKGNsb25lSXRlbS5jbG9uZU5vZGUodHJ1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gVHJhbnNmb3JtSW50ZXJuYWwoaHRtbCwgZG9tLCBjb250ZXh0KSB7XHJcblxyXG4gICAgICAgIEZvcihkb20sIGRvbSwgY29udGV4dCk7XHJcbiAgICAgICAgSWYoZG9tLCBkb20sIGNvbnRleHQpO1xyXG4gICAgICAgIEludGVycG9sYXRpb24oZG9tLCBkb20sIGNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIFByZVRyYW5zZm9ybUludGVybmFsKGRvbSkge1xyXG5cclxuICAgICAgICBQcmVGb3IoZG9tKTtcclxuICAgICAgICBQcmVJZihkb20pO1xyXG4gICAgICAgIFByZUludGVycG9sYXRpb24oZG9tKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBmaW5kUmVuZGVycygpIHtcclxuICAgICAgICB2YXIgcmVuZGVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1yZW5kZXJdOm5vdCguYWctcmVuZGVyKScpO1xyXG4gICAgICAgIHJlbmRlcnMuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcclxuXHJcbiAgICAgICAgICAgIGF0dGFjaEFjdGlvbihpdGVtKTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gYXR0YWNoQWN0aW9uKGl0ZW0pIHtcclxuXHJcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdhZy1yZW5kZXInKTtcclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdEZ1bmN0aW9uID0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLXJlbmRlcicpO1xyXG5cclxuICAgICAgICBQcmVUcmFuc2Zvcm1JbnRlcm5hbChpdGVtKTtcclxuXHJcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9ICdhZy5yZW5kZXIuaHlkcmF0ZS4nICsgcmVzdWx0RnVuY3Rpb247XHJcblxyXG4gICAgICAgIHZhciBpdGVtSHRtbCA9IGl0ZW0uaW5uZXJIVE1MO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBhc3luYyBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gR2V0VmFsdWUod2luZG93LCByZXN1bHRGdW5jdGlvbik7XHJcblxyXG4gICAgICAgICAgICBpdGVtLmlubmVySFRNTCA9IGl0ZW1IdG1sO1xyXG5cclxuICAgICAgICAgICAgVHJhbnNmb3JtSW50ZXJuYWwoaXRlbSwgaXRlbSwgcmVzdWx0KTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3REYXRhKHNlcnZpY2VVcmwsIGRhdGEsIHByb2Nlc3NSZXF1ZXN0RGF0YSkge1xyXG4gICAgICAgIGlmIChwcm9jZXNzUmVxdWVzdERhdGEpXHJcbiAgICAgICAgICAgIGRhdGEgPSBwcm9jZXNzUmVxdWVzdERhdGEoZGF0YSk7XHJcblxyXG4gICAgICAgIHZhciBxdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcgKygocXVlcnlTdHJpbmcgIT0gJycgPyAnJicgOiAnJykgKyBrZXkgKyAnPScgKyBkYXRhW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXJ2aWNlVXJsICs9IHNlcnZpY2VVcmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycgKyBxdWVyeVN0cmluZztcclxuICAgICAgICB2YXIgcmVxdWVzdCA9IGF3YWl0IGZldGNoKHNlcnZpY2VVcmwsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBtb2RlOiBcImNvcnNcIixcclxuICAgICAgICAgICAgY2FjaGU6IFwibm8tY2FjaGVcIixcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlcXVlc3QuanNvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXRQYWdlKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpIHtcclxuICAgICAgICBpZiAoIWRhdGEpIGRhdGEgPSB7fTtcclxuICAgICAgICBpZiAoIWRhdGEuUGFnZVNpemUpIGRhdGEuUGFnZVNpemUgPSAxMjtcclxuICAgICAgICBpZiAoIWRhdGEuUGFnZU51bWJlcikgZGF0YS5QYWdlTnVtYmVyID0gMTtcclxuICAgICAgICB2YXIgcGFnZWREYXRhID0gYXdhaXQgcmVxdWVzdERhdGEoc2VydmljZVVybCwgZGF0YSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICB3aW5kb3dbcmVuZGVyTmFtZV0gPSBwYWdlZERhdGE7ICAgICAgICBcclxuICAgICAgICB3aW5kb3cuYWdSZW5kZXIuaHlkcmF0ZShyZW5kZXJOYW1lKTtcclxuICAgICAgICBpZiAocmVuZGVyQ29tcGxldGUpXHJcbiAgICAgICAgICAgIHJlbmRlckNvbXBsZXRlKHBhZ2VkRGF0YSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIG5leHRQYWdlKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpIHtcclxuICAgICAgICBkYXRhLlBhZ2VOdW1iZXIgKz0gMTtcclxuICAgICAgICB2YXIgcGFnZWREYXRhID0gYXdhaXQgcmVxdWVzdERhdGEoc2VydmljZVVybCwgZGF0YSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICB3aW5kb3dbcmVuZGVyTmFtZV0gPSBwYWdlZERhdGE7ICAgICAgICBcclxuICAgICAgICB3aW5kb3cuYWdSZW5kZXIuaHlkcmF0ZShyZW5kZXJOYW1lKTtcclxuICAgICAgICBpZiAocmVuZGVyQ29tcGxldGUpXHJcbiAgICAgICAgICAgIHJlbmRlckNvbXBsZXRlKHBhZ2VkRGF0YSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHByZXZpb3VzUGFnZShyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKSB7XHJcbiAgICAgICAgaWYgKGRhdGEuUGFnZU51bWJlciA+IDEpIHtcclxuICAgICAgICAgICAgZGF0YS5QYWdlTnVtYmVyIC09IDE7XHJcbiAgICAgICAgICAgIHZhciBwYWdlZERhdGEgPSBhd2FpdCByZXF1ZXN0RGF0YShzZXJ2aWNlVXJsLCBkYXRhLCBwcm9jZXNzUmVxdWVzdERhdGEpO1xyXG4gICAgICAgICAgICB3aW5kb3dbcmVuZGVyTmFtZV0gPSBwYWdlZERhdGE7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZ1JlbmRlci5oeWRyYXRlKHJlbmRlck5hbWUpO1xyXG4gICAgICAgICAgICBpZiAocmVuZGVyQ29tcGxldGUpXHJcbiAgICAgICAgICAgICAgICByZW5kZXJDb21wbGV0ZShwYWdlZERhdGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gbW9yZVBhZ2UocmVuZGVyTmFtZSwgc2VydmljZVVybCwgZGF0YSwgcmVuZGVyQ29tcGxldGUsIHByb2Nlc3NSZXF1ZXN0RGF0YSkge1xyXG4gICAgICAgIGRhdGEuUGFnZU51bWJlciArPSAxO1xyXG4gICAgICAgIHZhciBwYWdlZERhdGEgPSBhd2FpdCByZXF1ZXN0RGF0YShzZXJ2aWNlVXJsLCBkYXRhLCBwcm9jZXNzUmVxdWVzdERhdGEpO1xyXG4gICAgICAgIHdpbmRvd1tyZW5kZXJOYW1lXS5JdGVtcy5wdXNoKC4uLnBhZ2VkRGF0YS5JdGVtcyk7XHJcbiAgICAgICAgd2luZG93LmFnUmVuZGVyLmh5ZHJhdGUocmVuZGVyTmFtZSk7XHJcbiAgICAgICAgaWYgKHJlbmRlckNvbXBsZXRlKVxyXG4gICAgICAgICAgICByZW5kZXJDb21wbGV0ZShwYWdlZERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXQoKSB7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcucmVuZGVyLnJlZnJlc2gnLCBmaW5kUmVuZGVycyk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcucmVmcmVzaCcsIGZpbmRSZW5kZXJzKTtcclxuXHJcbiAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5yZW5kZXIucmVmcmVzaCcpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG5cclxuICAgICAgICB3aW5kb3cuYWdSZW5kZXIgPSB7XHJcblxyXG4gICAgICAgICAgICBoeWRyYXRlOiBmdW5jdGlvbiAocmVuZGVyTmFtZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBldmVudE5hbWUgPSAnYWcucmVuZGVyLmh5ZHJhdGUuJyArIHJlbmRlck5hbWU7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTsgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW52b2tlOicgKyBldmVudE5hbWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcubGF6eS5yZWZyZXNoJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWdMYW5ndWFnZS5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAocmVuZGVyTmFtZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcucmVuZGVyLicgKyByZW5kZXJOYW1lICsgJy5wYWdlLm5leHQnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG5cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIHByZXZpb3VzOiBmdW5jdGlvbiAocmVuZGVyTmFtZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcucmVuZGVyLicgKyByZW5kZXJOYW1lICsgJy5wYWdlLnByZXZpb3VzJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBtb3JlOiBmdW5jdGlvbiAocmVuZGVyTmFtZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcucmVuZGVyLicgKyByZW5kZXJOYW1lICsgJy5wYWdlLm1vcmUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG5cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIHBhZ2VkUmVzdWx0OiBmdW5jdGlvbiAocmVuZGVyTmFtZSwgc2VydmljZVVybCwgZGF0YSwgcmVuZGVyQ29tcGxldGUsIHByb2Nlc3NSZXF1ZXN0RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5yZW5kZXIuJyArIHJlbmRlck5hbWUgKyAnLnBhZ2UubmV4dCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0UGFnZShyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5yZW5kZXIuJyArIHJlbmRlck5hbWUgKyAnLnBhZ2UucHJldmlvdXMnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNQYWdlKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnJlbmRlci4nICsgcmVuZGVyTmFtZSArICcucGFnZS5tb3JlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vcmVQYWdlKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5pdFBhZ2UocmVuZGVyTmFtZSwgc2VydmljZVVybCwgZGF0YSwgcmVuZGVyQ29tcGxldGUsIHByb2Nlc3NSZXF1ZXN0RGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCk7XHJcblxyXG59KSgpO1xyXG5cclxuXHJcblxyXG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07Il0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsImEiLCJpIiwic2VsZiIsIkNsb3NlUG9wdXAiLCIkIiwidHJpZ2dlciIsImFnb3JhIiwiZG9jdW1lbnQiLCJvbiIsInRyaWdnZXJFbGVtZW50IiwidGhpcyIsInByb3AiLCJzZXRUaW1lb3V0IiwiQWdvcmFEaWFsb2dNb2RhbCIsIkFmdGVyTG9hZCIsImF0dHIiLCJDbG9zZU1vZGFsIiwiZGF0YSIsIkNsZWFyRm9ybXZhbCIsImFnb3JhRGlhbG9nIiwic2VuZGVyIiwib3B0aW9ucyIsIl9kZWZhdWx0cyIsIlNlcnZpY2VVcmwiLCJNb2RhbElkIiwiUGFyYW1zIiwiSHRtbCIsIlBhcmVudENzcyIsIkVuYWJsZUNsb3NlQnV0dG9uIiwiRW5hYmxlTG9hZGVyIiwiRW5hYmxlQWpheEh0bWxMb2FkIiwiSGlkZUNsb3NlQnV0dG9uIiwiQ2xvc2VXaGVuVXNlclByZXNzRXNjYXBlIiwiVHJhbnNpdGlvbiIsIkJlZm9yZUxvYWQiLCJfb3B0aW9ucyIsImV4dGVuZCIsImNsb3Nlc3QiLCJyZW1vdmVDbGFzcyIsInJlbW92ZSIsIkxvYWRPcHRpb25zIiwiSXNOb3ROdWxsIiwiR2V0SHRtbCIsImFqYXgiLCJ1cmwiLCJ0eXBlIiwiZGF0YVR5cGUiLCJjYWNoZSIsInN1Y2Nlc3MiLCJyZXNwb25zZSIsIkJpbmRIdG1sIiwiZXJyb3IiLCJTaG93QWxlcnQiLCJTaG93TG9hZGluZyIsInN0YXR1c0NvZGUiLCJjbG9uZSIsIndyYXAiLCJodG1sIiwiYXBwZW5kVG8iLCJhZGRDbGFzcyIsImNvbXBvbmVudEhhbmRsZXIiLCJ1cGdyYWRlRG9tIiwiZmluZCIsImV2YWwiLCJrZXlkb3duIiwiZSIsImtleUNvZGUiLCJmbiIsImpRdWVyeSIsImV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJWYWx1ZSIsInVuZGVmaW5lZCIsImxlbmd0aCIsImRpc3BhdGNoRXZlbnQiLCJpc0Fnb3JhTG9hZGVkIiwiaXNDc3NMb2FkZWQiLCJHZXRQcm9wZXJ0aWVzIiwiJHRoaXMiLCJkZW1hbmRLZXkiLCJsYXlvdXQiLCJ0b0xvd2VyQ2FzZSIsIiRzb3J0IiwibWF0Y2giLCIkcGFyZW50IiwidmFsIiwicmVjb3JkVHlwZSIsIkdldERlZmF1bHRTb3J0Rm9yUmVjb3JkVHlwZSIsIl9nZXRDTU5DTU5Tb3J0QnkiLCJyZXBsYWNlIiwiVXJsUXVlcnkiLCJUeXBlT2ZTZWFyY2giLCJJc0NvbnRlbnRQYWdlIiwiRGVtYW5kS2V5IiwiJGh0bWwiLCJhZnRlciIsImVhY2giLCIkaXRlbUNvbnRleHQiLCIkc2xpZGVDb250ZXh0IiwibWxzTnVtYmVyIiwibWxzQm9hcmQiLCJwcm9qZWN0Q29kZSIsImltYWdlVGVtcGxhdGUiLCJuYXRpdmVUYWIiLCJjb3VudCIsInBhcnNlSW50IiwiJGl0ZW1XaXRoSURDb250ZXh0IiwidUlEIiwidGVtcGxhdGUiLCJwcmVmaXgiLCIkbmF2aWdhdGlvbnMiLCIkbmV4dCIsIiRwcmV2IiwiX2xvYWRNb3JlIiwidGFyZ2V0IiwiJG5vZGUiLCIkc2VuZGVyIiwib2ZmIiwibWxzYm9hcmQiLCJtbHNubyIsImNvbnRhaW5lciIsImFwcGVuZCIsImJ1aWxkRmlyc3RUZW1wbGF0ZSIsIkRhdGUiLCJnZXRNaWxsaXNlY29uZHMiLCJHZXRQcm9wZXJ0eUltYWdlR2FsbGVyeSIsIndpbmRvdyIsImFnTGF6eSIsInJlZnJlc2giLCJwYXJlbnRzIiwic2VsZWN0b3JFbGVtZW50IiwiY3VycmVudFNldHRpbmdzIiwibGFuZ3VhZ2VTb3VyY2VzIiwibGFuZ3VhZ2VzIiwiY29kZSIsImxhYmVsIiwibG9jYWxMYWJlbCIsImN1cnJlbmNpZXMiLCJiYXNlIiwiZm9ybWF0IiwidW5pdHMiLCJwcmVzZXRzIiwiY3VycmVuY3kiLCJsYW5ndWFnZSIsIm1lc3N1cmVtZW50IiwidW5pdENvbnZlcnRpb25zIiwidW5pdCIsInRyYWdldFVuaXQiLCJjb25zdGFudCIsIm5vdGF0aW9uIiwidGFyZ2V0Tm90YXRpb24iLCJyZWNlbnRTdGF0ZSIsImFzeW5jIiwidXBkYXRlTGFuZ3VhZ2UiLCJjdXJyZW50IiwiZ2V0IiwiT2JqZWN0IiwiYXNzaWduIiwibGFiZWxzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJjdXJyZW50TGFiZWxzIiwiY3VycmVudExhYmVsc1N0cmluZyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJnZXRMYW5ndWFnZUxhYmVsc0Zyb21TdG9yZSIsImV4cGlyeSIsInNldEhvdXJzIiwiZ2V0SG91cnMiLCJ1cGRhdGVkT24iLCJMb2NhbGUiLCJpbmRleE9mIiwiR0VUIiwic2V0TGFuZ3VhZ2VUb1N0b3JlIiwiZ2V0TGFuZ3VhZ2VMYWJlbHMiLCJ1cGRhdGVUb1NlcnZlciIsImxvY2F0aW9uIiwicmVsb2FkIiwibGFiZWxzVG9DaGFuZ2UiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsIml0ZW0iLCJrZXkiLCJnZXRBdHRyaWJ1dGUiLCJleHByZXNzaW9uRm9yQXR0cmlidXRlVmFsdWUiLCJ0ZXN0IiwiY2hpbGROb2RlcyIsImxhc3RJbmRleCIsInRleHRDb250ZW50IiwiZXhlYyIsImdyb3VwcyIsIkxhYmVsSUQiLCJsYmwiLCJkdW1teU5vZGUiLCJjcmVhdGVFbGVtZW50IiwiaW5uZXJIVE1MIiwibWF0Y2hIdG1sV2l0aExhYmVsIiwiYXR0cmlidXRlcyIsImF0dHJpYnV0ZSIsImV4cHJlc3Npb25Gb3JBdHRyaWJ1dGUiLCJuYW1lIiwiYXR0cmlidXRlSWRlbnRpZmllciIsIkF0dHJpYnV0ZSIsImF0dHJpYnV0ZVZhbHVlIiwidmFsdWUiLCJzZXRBdHRyaWJ1dGUiLCJ1cGRhdGVMYW5ndWFnZUxhYmVsIiwiTGFiZWxzIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsImRvbSIsInVwZGF0ZVByaWNlIiwiaXNJbml0IiwiZm9ybWF0U3RyaW5nIiwiY29udmVydGlvblJhdGVzU3RvcmVkIiwiY29udmVydGlvblJhdGVzIiwic2V0RGF0ZSIsImdldERhdGUiLCJ0b0lTT1N0cmluZyIsImdldENvbnZlcnRpb25SYXRlcyIsIlJhdGVzIiwiRXhjaGFuZ2VSYXRlcyIsImZpbHRlciIsIkNvZGUiLCJjdXJyZW5jeU1ldGEiLCJmb3JtYXR0ZXIiLCJudW1iZXIiLCJ0b0xvY2FsZVN0cmluZyIsImN1cnJlbnRDdXJyZW5jeSIsInByaWNlVG9DaGFuZ2UiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImN1cnJlbnRPZmZzZXQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJwYXJlbnRDb2xsZWN0aW9uIiwicGFyZW50T2Zmc2V0IiwicGFyZW50RWxlbWVudCIsInBhcmVudFBvaW50cyIsInkiLCJ0b3AiLCJib3R0b20iLCJ4IiwibGVmdCIsInJpZ2h0IiwiaXRlbVBvaW50cyIsImNsYXNzQXhpcyIsImFkZCIsInVwZGF0ZUl0ZW1PZmZzZXRDbGFzcyIsImlzRGVmYXVsdEN1cnJlbmN5Q2hhbmdlIiwibm9kZSIsImV4cHJlc3Npb25Gb3JQcmljZSIsInByaWNlQ29udmVydGVkIiwiTWF0aCIsInJvdW5kIiwicGFyc2VGbG9hdCIsIkNvbnN0YW50IiwidG9TdHJpbmciLCJ1cGRhdGVQcmljZUZvckl0ZW0iLCJ1cGRhdGVNZXNzdXJlbWVudCIsImlzQXBwbGllZCIsIm1lc3N1cmVtZW50c1RvQ2hhbmdlIiwidXBkYXRlSXRlbU1lc3N1cmVtZW50Iiwicm9vdEVsZW1lbnQiLCJpc1VuaXRGb3VuZCIsInVuaXRDb252ZXJ0aW9uU2NoZW1hIiwiaGF2ZVZhbGlkQXR0cmlidXRlIiwiZ2V0TGFiZWxGb3JBdHRyaWJ1dGUiLCJub3RhdGlvbkV4cHJlc3Npb24iLCJmaW5kTWVzc3VyZW1lbnRGcm9tQXR0cmlidXRlIiwiY3VycmVudExhYmVsIiwibGFiZWxSZXBsYWNlUmVzdWx0IiwicmVwbGFjZU1lc3N1cmVtZW50Iiwic2V0TGFiZWxGb3JBdHRyaWJ1dGUiLCJjb250ZW50IiwiY3VycmVudFZhbHVlIiwiZ2V0VmFsdWVGb3JBdHRyaWJ1dGUiLCJ2YWx1ZVJlcGxhY2VSZXN1bHQiLCJyZXBsYWNlTWVzc3VyZW1lbnRXaXRoVW5pdCIsInNldFZhbHVlRm9yQXR0cmlidXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImNoaWxkTm9kZSIsImV4cHJlc3Npb24iLCJmaW5kTWVzc3VyZW1lbnRGcm9tTm9kZSIsImN1cnJlbnRUZXh0IiwicmVwbGFjZVJlc3VsdCIsIm1vZGUiLCJyZXBsYWNlU3VjY2VzcyIsInJlcGxhY2VVbml0UmVzdWx0IiwicHVzaCIsIm5vdGF0aW9uRXhwcmVzc2lvbnMiLCJub3RhdGlvbk9ubHlFeHByZXNzaW9ucyIsIm1hdGNoU3VjY2VzcyIsImdldFJlcGxhY2VNZXNzdXJlbWVudEV4cHJlc3Npb25NYXRjaCIsImdldFZhbHVlIiwiViIsIk4iLCJzdGFydEluZGV4IiwiaW5kZXgiLCJlbmRJbmRleCIsIm1hdGNoVmFsdWUiLCJyZXBsYWNlQWxsIiwiZm9ybWF0VmFsdWUiLCJzdWJzdHJpbmciLCJ2YWx1ZUV4cHJlc3Npb24iLCJlbmFibGVMYW5ndWFnZVNlbGVjdG9yIiwiZ2V0RmxhZ0Nzc0NsYXNzIiwic3BsaXQiLCJtYXAiLCJjbGFzc05hbWUiLCJib2R5IiwiZGV0YWlsIiwibG9jYXRpb25GbGFnIiwibGFuZ3VhZ2VFbGVtZW50IiwiZWxlbWVudCIsImMiLCJsb2NhdGlvbkVsZW1lbnQiLCJuIiwicmVuZGVyTGFuZ3VhZ2VFbGVtZW50IiwicmVuZGVyQ2hvaWNlTGlzdCIsIml0ZW1FbGVtZW50Iiwic291cmNlSXRlbSIsImgiLCJpc0V2ZW50IiwiQXJyYXkiLCJpc0FycmF5IiwiYXBwZW5kQ2hpbGQiLCJyZW5kZXJMYW5ndWFnZVNlbGVjdG9yIiwic3RvcFByb3BhZ2F0aW9uIiwicG9zaXRpb24iLCJzdHlsZSIsImZsb29yIiwiYWN0aXZlSXRlbSIsImVuZ2FnZUxhbmd1YWdlU2VsZWN0b3IiLCJkaXNlbmdhZ2VBY3Rpb25MaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkaXNlbmdhZ2VMYW5ndWFnZVNlbGVjdG9yIiwidXBkYXRlVG9zZXJ2ZXJDYWxsIiwidXBkYXRlU3VjY2VzIiwic2V0IiwiZmllbGQiLCJjbGVhclRpbWVvdXQiLCJvbGRVcGRhdGVTdWNjZXNzIiwiYWdSZXF1ZXN0IiwiUE9TVCIsInJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnMiLCJ0aXRsZSIsInNvdXJjZSIsInJlbmRlckl0ZW0iLCJzZWxlY3RlZEl0ZW0iLCJmaWVsZEtleSIsInJlbmRlckV4aXN0IiwiaXRlbUxpc3QiLCJpdGVtTGlzdFZhbHVlIiwiY2wiLCJpdGVtT3B0aW9ucyIsImNob2ljZUl0ZW0iLCJzZWxlY3RlZFZhbHVlIiwic2VsZWN0ZWRJdGVtRnJvbVNvdXJjZSIsInNlcnZpY2VVcmwiLCJxdWVyeVN0cmluZyIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImpzb24iLCJwcm90b3R5cGUiLCJ0ZXh0IiwiYWN0aW9uIiwiYWdMYW5ndWFnZSIsImF0dGFjaEFjdGlvbnMiLCJleHByZXNzaW9uU3RyaW5nIiwibm90YXRpb25FeHByZXNzaW9uU3RyaW5nIiwicmVzdWx0IiwibWF4aW11bUZyYWN0aW9uRGlnaXRzIiwiaGFzQXR0cmlidXRlIiwiaW5uZXJUZXh0Iiwic3ViRXhwcmVzc2lvblN0cmluZyIsInN1Yk5vdGF0aW9uRXhwcmVzc2lvblN0cmluZyIsIm5vdGF0aW9uSXRlbSIsIlJlZ0V4cCIsImJ1aWxkVW5pdENvbnZlcnRpb25TY2hlbWEiLCJpbml0IiwiRW5hYmxlRGVtYW5kSW1wb3J0Iiwic2VhcmNoQWN0b24iLCIkZm9ybSIsIl91cmxRdWVyeSIsImNvbXBvc2VVcmxRdWVyeSIsInNlbGVjdCIsIl9ydCIsIl9kZWZhdWx0IiwiX2RlZmF1bHRTb3J0IiwiX3NvcnRWYWx1ZSIsInRyaWdnZXJIYW5kbGVyIiwicXVlcnkiLCIkcHJlZml4IiwiX3ByZWZpeCIsIkdldFNlYXJjaFByZWZpeEZvclJlY29yZFR5cGUiLCJFbmFibGVTZWFyY2hGb3JtIiwiZm9ybURhdGEiLCJVUkxTZWFyY2hQYXJhbXMiLCJmaW5kTGF6eSIsImJsYW5rSW1hZ2UiLCJkb2NFbCIsImRvY3VtZW50RWxlbWVudCIsInNjcm9sbFRvcCIsInBhZ2VZT2Zmc2V0IiwiY2xpZW50VG9wIiwicGFnZVhPZmZzZXQiLCJzY3JvbGxMZWZ0IiwiZWxlbWVudFRvcCIsImNsaWVudExlZnQiLCJlbGVtZW50Qm90dG9tIiwidmlld3BvcnRUb3AiLCJ2aWV3cG9ydEJvdHRvbSIsImlubmVySGVpZ2h0IiwiY2hlY2tpc0luVmlld3BvcnQiLCJzcmNVcmwiLCJpc0F1dG8iLCJnZXRCZXN0Rml0Q29udGFpbmVyIiwiYWRkaXRpb25hbFVybCIsInNpemUiLCJ3aWR0aCIsImhlaWdodCIsImdldEZvcm1hdHRlZEltYWdlVXJsIiwibm9kZU5hbWUiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsImNvbnNvbGUiLCJsb2ciLCJyb290TWFyZ2luIiwidGhyZXNob2xkIiwiYXR0YWNoQWN0aW9uIiwiZGVmYXVsdFJhdGlvV2lkdGgiLCJkZWZhdWx0UmF0aW9IZWlnaHQiLCJyYXRpbyIsInJhdGlvTWF0Y2giLCJIZWFkZXJCdXJnZXJDaGFuZ2UiLCJxdWVyeVNlbGVjdG9yIiwiQnVyZ2VyQWN0aXZlIiwiaXRlbXVjbm9kZSIsImluc2VydEJlZm9yZSIsImZpcnN0Q2hpbGQiLCJpbm5lcldpZHRoIiwiQnVyZ2VyRGVhY3RpdmUiLCJvZmZzZXRXaWR0aCIsInNjcm9sbFdpZHRoIiwiY3VzdG9tRXZlbnQiLCJ2YWxpZGF0ZSIsImFjY2l0ZW0iLCJhY2NvcmRpb25JdGVtQm9keSIsIm1heEhlaWdodCIsInNjcm9sbEhlaWdodCIsInRvZ2dsZSIsIm9mZnNldEhlaWdodCIsIkFjY29yZGlvbkZuIiwiYnV0dG9uIiwiY29udGVudHMiLCJzaWRlQmFyIiwidGFic0NvbnRhaW5lciIsInRhYiIsIlRhYkZuIiwibWVudWl0ZW0iLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwiZHJvcHMiLCJFbmFibGVTZWFyY2hiZWxvd1RhYiIsImNhbmNlbGJ0biIsImRyb3AiLCJpZHgiLCJkcm9wRGl2IiwiY2xvc2VidG4iLCJQcm9wZXJ0eVNlYXJjaENvbnRyb2xXb3JraW5nIiwic2Nyb2xsWSIsInJpcHBsZWJ1dHRvbnMiLCJlbCIsIm9mZnNldFgiLCJvZmZzZXRZIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInJpcHBsZSIsIlJpcHBsZUZuIiwidmlkZW9FbGVtZW50cyIsInZpZGVvIiwiVmlkZW9QbGF5Rm4iLCJfZm9yIiwiaXNTeW5jZWQiLCJ1c2VyIiwicmVtb3ZlSXRlbSIsIkd1aWQiLCJsb2NhbFVzZXIiLCJOYW1lIiwiRmlyc3ROYW1lIiwiTGFzdE5hbWUiLCJFbWFpbCIsIlBob25lIiwiTW9iaWxlUGhvbmUiLCJ1cGRhdGUiLCJyZW5kZXIiLCJjbG9uZU5vZGUiLCJ1cGRhdGVQcm9wZXJ0eUNvbGxlY3Rpb24iLCJpbml0UHJvcGVydHlDb2xsZWN0aW9uIiwibG9nZ2luZWROb2RlIiwiY29udGFjdCIsIndyYXBwZXIiLCJ1c2VyQ29udGFpbmVyIiwicHJldmVudERlZmF1bHQiLCJnZXRMb2dpbmVkSXRlbSIsInJlbmRlclN0YXRlcyIsImlzRm9yY2VkIiwiaXRlbXMiLCJjb2xsZWN0aW9uVHlwZSIsInByb3BlcnR5Q29sbGVjdGlvbiIsInByb3BlcnR5Q29sbGVjdGlvblN0cmluZyIsImdldFByb3BlcnR5Q29sbGVjdGlvbiIsIkl0ZW1zIiwicmVkdWNlIiwiaXRlbURvbSIsIlBLIiwiUlQiLCJyZW5kZXJQcm9wZXJ0eUNvbGxlY3Rpb25JdGVtIiwiYWdVc2VyIiwiY29sbGVjdGlvbiIsImN1cnJlbnRWYWx1ZXNTdHJpbmciLCJDb250YWN0R3VpZCIsImNvbnRhY3RndWlkIiwiZXZlbnRUeXBlIiwiY2hlY2tGb3JTeW5jIiwiY3VycmVudERhdGVUaW1lIiwic2V0TWludXRlcyIsImdldE1pbnV0ZXMiLCJkYXRhVG9SZXZpZXciLCJyZWFkRnJvbVNlcnZlciIsInN5c3RlbUZ1bmN0aW9ucyIsIkludGVycG9sYXRpb24iLCJjb250ZXh0IiwiZnVuY3Rpb25BcmdzTGl0ZXJhbHMiLCJmdW5jdGlvbkFyZ3NWYWx1ZXMiLCJwYXJlbnRSZW5kZXJGdW5jdGlvbiIsInJlbmRlckZ1bmN0aW9ucyIsInRlbXBsYXRlU3RyaW5nIiwiZ2V0QXR0cmlidXRlTmFtZXMiLCJidWlsZFJlbmRlckZ1bmN0aW9uIiwiY2xlYW5QcmVJbnRlcnBvbGF0aW9uIiwibm9kZVR5cGUiLCJpbnB1dFRleHQiLCJtYXRjaGVzIiwicmVuZGVyQmxvY2siLCJyZW5kZXJUZW1wbGF0ZSIsInZhcmlhYmxlcyIsImlzU3lzdGVtRnVuY3Rpb24iLCJpZGVudGlmaWVyIiwibG9jYWxWYXJpYWJsZXMiLCJFeHRyYWN0VmFyaWFibGVzVG9wTGV2ZWxJZGVudGlmaWVycyIsIldhdGNoIiwiaXNDaGFuZ2UiLCJJc0Z1bmN0aW9uIiwiRXh0cmFjdEFyZ3VtZW50VmFyaWFibGVzRm9yRnVuY3Rpb25Gcm9tU3RyaW5nIiwiYXJndW1lbnRJdGVtIiwicmVuZGVyRnVuY3Rpb24iLCJGdW5jdGlvbiIsImpvaW4iLCJiaW5kIiwiaW50ZXJwb2xhdGVPYmplY3QiLCJjdXJyZW50UmVuZGVyRnVuY3Rpb25zIiwiTm9kZSIsIkVMRU1FTlRfTk9ERSIsImNoaWxkRG9tIiwiVEVYVF9OT0RFIiwidHJpbSIsIlByZUludGVycG9sYXRpb24iLCJyb290RG9tIiwiaXNNYXNrZWQiLCJmYWtlRWxlbWVudCIsInBhcmVudCIsIkdldFZhbHVlIiwicHJvcGVydHlOYW1lIiwiY3VycmVudFByb3BlcnR5Iiwic3ViUHJvcGVydHkiLCJnZXRWYWx1ZUZyb21GdW5jdGlvbiIsImdldEZ1bmN0aW9uTmFtZSIsIkdldFByb3h5T2JqZWN0IiwicHJveHlPYmplY3QiLCJpdGVtUHJvcGVydHkiLCJTZXRQcm9wZXJ0eVRvUHJveHlPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIk5vdGlmeSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJTZXRQcm9wZXJ0eURlc2NyaXB0b3JUb1Byb3h5T2JqZWN0IiwicHJvcGVydHlEZXNjcmlwdG9yIiwiQ29udmVyT2JqZWN0VG9Bcmd1bWVudEFycmF5IiwiY29udmVydGVkVmFsdWVzIiwiYXJndW1lbnRzIiwidmFsdWVzIiwiaW5zZXJ0QWZ0ZXIiLCJyZWZlcmVuY2VOb2RlIiwicGFyZW50Tm9kZSIsIm5leHRTaWJsaW5nIiwidmFyaWFibGVzRnJvbVN0cmluZ0V4cHJlc3Npb24iLCJ2YXJpYWJsZVRvcExldmVsSWRlbnRpZmllcnNFeHByZXNzaW9uIiwidmFsdWF0aW9uU3RyaW5nIiwidmFyaWFibGUiLCJFeHRyYWN0VmFyaWFibGVzRnJvbVN0cmluZyIsImZ1bmN0aW9ucyIsImlkZW50aWZpZXJzIiwiZnVuY3Rpb24iLCJmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0IiwiZnVuY3Rpb25Bcmd1bWVudHNFbmQiLCJvcGVuSW5kZXgiLCJmdW5jdGlvbkFyZ3VtZW50cyIsImZ1bmN0aW9uTmFtZSIsImFwcGx5IiwiSWYiLCJub2Rlc0FuZENvbmRpdGlvbiIsIm5leHROb2RlIiwiaXRlbVBhcmVudCIsImFjdGl2ZU5vZGVBbmRDb25kaXRpb24iLCJpZGVudGlmaWVyc1VzZWQiLCJBdHRyaWJ1dGVzIiwiYXR0cmlidXRlVG9SZWFkIiwicmVtb3ZlQXR0cmlidXRlIiwiaXNEZWZhdWx0IiwidmFsdWF0aW9uRnVuY3Rpb25Bcmd1bWVudHMiLCJub2RlQW5kQ29uZGl0aW9uIiwidmFsdWF0aW9uRnVuY3Rpb24iLCJpbnNlcnRQb3N0aW9uIiwiZmluZERvbVBvc2l0aW9uIiwiY29uZGl0aW9uYWxOb2RlIiwiYWN0aXZlIiwiVHJhbnNmb3JtSW50ZXJuYWwiLCJpc1VzZXJDaGFuZ2UiLCJQcmVJZiIsImlmcyIsImlzRmFrZSIsImZha2VGb3VuZCIsIkZvciIsImh0bWxEb2N1bWVudCIsImxvb3BzIiwiZmFrZUl0ZW0iLCJuZXh0RWxlbWVudFNpYmxpbmciLCJmYWtlSXRlbUNvdW50IiwiaXNmYWtlSXRlbUNvdW50UmVhZGVkIiwibG9vcENvbnN0cmFpbnQiLCJpdHJhdG9yRmluaXNoZWQiLCJmaWVsZHNBbmRWYWx1ZSIsIml0cmF0b3IiLCJodG1sVG9DbG9uZSIsImh0bWxUb0Nsb25lUGFyZW50IiwiaHRtbFRvQ2xvbmVMb2NhdGlvbiIsIml0ZW1FbGVtZW50cyIsImlzRGlydHlGYWtlIiwiY29sbGVjdGlvbkNvbnRleHQiLCJnZXRDb2xsZWN0aW9uT2JqZWN0IiwiY29sbGVjdGlvbkNvbnRleHRGaWVsZCIsImdldENvbGxlY3Rpb25OYW1lIiwid3JpdGFibGUiLCJpdGVtc0NvbGxlY3Rpb24iLCJpdGVtSW5kZXgiLCJpc0ZpcnN0IiwicmVtb3ZlUHJlRm9yIiwiaXRlbUZyb21Db2xsZWN0aW9uIiwiY29udGV4dE9iamVjdCIsImNsb25lZEVsZW1lbnQiLCJub3ciLCJQcmVGb3JQYXJ0aWFsIiwiZ2V0UGFyYW1ldGVyTmFtZSIsImdldEZ1bmN0aW9uRnJvbUNvbGxlY3Rpb24iLCJhcmdzIiwiX19wcm90b19fIiwia2V5cyIsInBhcmFtc1N0cmluZyIsInBhcmFtcyIsInBhcmFtc0l0ZW0iLCJwYXJhbSIsImlzUGFyYW1WYWx1ZSIsInBhcmFtTmFtZSIsInBhcmFtVmFsdWUiLCJjdXJyZW50RnVuY3Rpb24iLCJuZXh0SXRlbSIsIm9sZE5leHQiLCJsYXN0SXRlbSIsImZpcnN0SXRlbSIsIlByZUZvciIsInRhZ05hbWUiLCJjbG9uZUl0ZW0iLCJjbG9uZUl0ZW1Db3VudCIsImNsb25lSXRlbUNvdW50U3RyaW5nIiwiUHJlVHJhbnNmb3JtSW50ZXJuYWwiLCJmaW5kUmVuZGVycyIsInJlc3VsdEZ1bmN0aW9uIiwiZXZlbnROYW1lIiwiaXRlbUh0bWwiLCJyZXF1ZXN0RGF0YSIsInByb2Nlc3NSZXF1ZXN0RGF0YSIsImluaXRQYWdlIiwicmVuZGVyTmFtZSIsInJlbmRlckNvbXBsZXRlIiwiUGFnZVNpemUiLCJQYWdlTnVtYmVyIiwicGFnZWREYXRhIiwiYWdSZW5kZXIiLCJoeWRyYXRlIiwibmV4dFBhZ2UiLCJwcmV2aW91c1BhZ2UiLCJtb3JlUGFnZSIsIm5leHQiLCJwcmV2aW91cyIsIm1vcmUiLCJwYWdlZFJlc3VsdCIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiZCIsImRlZmluaXRpb24iLCJvIiwib2JqIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIl0sInNvdXJjZVJvb3QiOiIifQ==