ibp-max 3.0.1 → 3.0.3

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.
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 o in n)("object"==typeof exports?exports:e)[o]=n[o]}}(self,(()=>(()=>{var __webpack_modules__={468:()=>{agora((function(){$(document).ready((function(){!location.hash||"#signup"!=location.hash.toLowerCase()&&"#register"!=location.hash.toLowerCase()&&"#reset-password"!=location.hash.toLowerCase()||OpenPopup()}))}))},440:function(e,t){var n,o,r;o="undefined"!=typeof window?window:this,r=function(o,r){function a(e){var t=e.length,n=K.type(e);return"function"!==n&&!K.isWindow(e)&&(!(1!==e.nodeType||!t)||"array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t,n){if(K.isFunction(t))return K.grep(e,(function(e,o){return!!t.call(e,o,e)!==n}));if(t.nodeType)return K.grep(e,(function(e){return e===t!==n}));if("string"==typeof t){if(ae.test(t))return K.filter(t,e,n);t=K.filter(t,e)}return K.grep(e,(function(e){return W.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),o.removeEventListener("load",l,!1),K.ready()}function c(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=K.expando+Math.random()}function u(e,t,n){var o;if(void 0===n&&1===e.nodeType)if(o="data-"+t.replace(ye,"-$1").toLowerCase(),"string"==typeof(n=e.getAttribute(o))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:ve.test(n)?K.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 K.nodeName(e,"table")&&K.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=_e.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function v(e,t){for(var n=0,o=e.length;o>n;n++)ge.set(e[n],"globalEval",!t||ge.get(t[n],"globalEval"))}function y(e,t){var n,o,r,a,i,s,l,c;if(1===t.nodeType){if(ge.hasData(e)&&(a=ge.access(e),i=ge.set(t,a),c=a.events))for(r in delete i.handle,i.events={},c)for(n=0,o=c[r].length;o>n;n++)K.event.add(t,r,c[r][n]);me.hasData(e)&&(s=me.access(e),l=K.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&&K.nodeName(e,t)?K.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,r=K(t.createElement(e)).appendTo(t.body),a=o.getDefaultComputedStyle&&(n=o.getDefaultComputedStyle(r[0]))?n.display:K.css(r[0],"display");return r.detach(),a}function E(e){var t=Y,n=Fe[e];return n||("none"!==(n=w(e,t))&&n||((t=(Ie=(Ie||K("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement))[0].contentDocument).write(),t.close(),n=w(e,t),Ie.detach()),Fe[e]=n),n}function C(e,t,n){var o,r,a,i,s=e.style;return(n=n||He(e))&&(i=n.getPropertyValue(t)||n[t]),n&&(""!==i||K.contains(e.ownerDocument,e)||(i=K.style(e,t)),Re.test(i)&&Me.test(t)&&(o=s.width,r=s.minWidth,a=s.maxWidth,s.minWidth=s.maxWidth=s.width=i,i=n.width,s.width=o,s.minWidth=r,s.maxWidth=a)),void 0!==i?i+"":i}function L(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function A(e,t){if(t in e)return t;for(var n=t[0].toUpperCase()+t.slice(1),o=t,r=Ge.length;r--;)if((t=Ge[r]+n)in e)return t;return o}function S(e,t,n){var o=Ue.exec(t);return o?Math.max(0,o[1]-(n||0))+(o[2]||"px"):t}function T(e,t,n,o,r){for(var a=n===(o?"border":"content")?4:"width"===t?1:0,i=0;4>a;a+=2)"margin"===n&&(i+=K.css(e,n+xe[a],!0,r)),o?("content"===n&&(i-=K.css(e,"padding"+xe[a],!0,r)),"margin"!==n&&(i-=K.css(e,"border"+xe[a]+"Width",!0,r))):(i+=K.css(e,"padding"+xe[a],!0,r),"padding"!==n&&(i+=K.css(e,"border"+xe[a]+"Width",!0,r)));return i}function k(e,t,n){var o=!0,r="width"===t?e.offsetWidth:e.offsetHeight,a=He(e),i="border-box"===K.css(e,"boxSizing",!1,a);if(0>=r||null==r){if((0>(r=C(e,t,a))||null==r)&&(r=e.style[t]),Re.test(r))return r;o=i&&(X.boxSizingReliable()||r===e.style[t]),r=parseFloat(r)||0}return r+T(e,t,n||(i?"border":"content"),o,a)+"px"}function N(e,t){for(var n,o,r,a=[],i=0,s=e.length;s>i;i++)(o=e[i]).style&&(a[i]=ge.get(o,"olddisplay"),n=o.style.display,t?(a[i]||"none"!==n||(o.style.display=""),""===o.style.display&&we(o)&&(a[i]=ge.access(o,"olddisplay",E(o.nodeName)))):(r=we(o),"none"===n&&r||ge.set(o,"olddisplay",r?n:K.css(o,"display"))));for(i=0;s>i;i++)(o=e[i]).style&&(t&&"none"!==o.style.display&&""!==o.style.display||(o.style.display=t?a[i]||"":"none"));return e}function O(e,t,n,o,r){return new O.prototype.init(e,t,n,o,r)}function D(){return setTimeout((function(){Xe=void 0})),Xe=K.now()}function q(e,t){var n,o=0,r={height:e};for(t=t?1:0;4>o;o+=2-t)r["margin"+(n=xe[o])]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function $(e,t,n){for(var o,r=(et[t]||[]).concat(et["*"]),a=0,i=r.length;i>a;a++)if(o=r[a].call(n,t,e))return o}function _(e,t,n){var o,r,a=0,i=Ze.length,s=K.Deferred().always((function(){delete l.elem})),l=function(){if(r)return!1;for(var t=Xe||D(),n=Math.max(0,c.startTime+c.duration-t),o=1-(n/c.duration||0),a=0,i=c.tweens.length;i>a;a++)c.tweens[a].run(o);return s.notifyWith(e,[c,o,n]),1>o&&i?n:(s.resolveWith(e,[c]),!1)},c=s.promise({elem:e,props:K.extend({},t),opts:K.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xe||D(),duration:n.duration,tweens:[],createTween:function(t,n){var o=K.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(o),o},stop:function(t){var n=0,o=t?c.tweens.length:0;if(r)return this;for(r=!0;o>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,o,r,a,i;for(n in e)if(r=t[o=K.camelCase(n)],a=e[n],K.isArray(a)&&(r=a[1],a=e[n]=a[0]),n!==o&&(e[o]=a,delete e[n]),(i=K.cssHooks[o])&&"expand"in i)for(n in a=i.expand(a),delete e[o],a)n in e||(e[n]=a[n],t[n]=r);else t[o]=r}(u,c.opts.specialEasing);i>a;a++)if(o=Ze[a].call(c,e,u,c.opts))return o;return K.map(u,$,c),K.isFunction(c.opts.start)&&c.opts.start.call(e,c),K.fx.timer(K.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 P(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var o,r=0,a=t.toLowerCase().match(fe)||[];if(K.isFunction(n))for(;o=a[r++];)"+"===o[0]?(o=o.slice(1)||"*",(e[o]=e[o]||[]).unshift(n)):(e[o]=e[o]||[]).push(n)}}function j(e,t,n,o){function r(s){var l;return a[s]=!0,K.each(e[s]||[],(function(e,s){var c=s(t,n,o);return"string"!=typeof c||i||a[c]?i?!(l=c):void 0:(t.dataTypes.unshift(c),r(c),!1)})),l}var a={},i=e===vt;return r(t.dataTypes[0])||!a["*"]&&r("*")}function I(e,t){var n,o,r=K.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((r[n]?e:o||(o={}))[n]=t[n]);return o&&K.extend(!0,e,o),e}function F(e,t,n,o){var r;if(K.isArray(t))K.each(t,(function(t,r){n||xt.test(e)?o(e,r):F(e+"["+("object"==typeof r?t:"")+"]",r,n,o)}));else if(n||"object"!==K.type(t))o(e,t);else for(r in t)F(e+"["+r+"]",t[r],n,o)}function M(e){return K.isWindow(e)?e:9===e.nodeType&&e.defaultView}var R=[],H=R.slice,B=R.concat,U=R.push,W=R.indexOf,z={},V=z.toString,G=z.hasOwnProperty,X={},Y=o.document,J="2.1.1",K=function(e,t){return new K.fn.init(e,t)},Q=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,Z=/^-ms-/,ee=/-([\da-z])/gi,te=function(e,t){return t.toUpperCase()};K.fn=K.prototype={jquery:J,constructor:K,selector:"",length:0,toArray:function(){return H.call(this)},get:function(e){return null!=e?0>e?this[e+this.length]:this[e]:H.call(this)},pushStack:function(e){var t=K.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return K.each(this,e,t)},map:function(e){return this.pushStack(K.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(H.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:R.sort,splice:R.splice},K.extend=K.fn.extend=function(){var e,t,n,o,r,a,i=arguments[0]||{},s=1,l=arguments.length,c=!1;for("boolean"==typeof i&&(c=i,i=arguments[s]||{},s++),"object"==typeof i||K.isFunction(i)||(i={}),s===l&&(i=this,s--);l>s;s++)if(null!=(e=arguments[s]))for(t in e)n=i[t],i!==(o=e[t])&&(c&&o&&(K.isPlainObject(o)||(r=K.isArray(o)))?(r?(r=!1,a=n&&K.isArray(n)?n:[]):a=n&&K.isPlainObject(n)?n:{},i[t]=K.extend(c,a,o)):void 0!==o&&(i[t]=o));return i},K.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"===K.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!K.isArray(e)&&e-parseFloat(e)>=0},isPlainObject:function(e){return!("object"!==K.type(e)||e.nodeType||K.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?z[V.call(e)]||"object":typeof e},globalEval:function(e){var t,n=eval;(e=K.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 o=0,r=e.length,i=a(e);if(n){if(i)for(;r>o&&!1!==t.apply(e[o],n);o++);else for(o in e)if(!1===t.apply(e[o],n))break}else if(i)for(;r>o&&!1!==t.call(e[o],o,e[o]);o++);else for(o in e)if(!1===t.call(e[o],o,e[o]))break;return e},trim:function(e){return null==e?"":(e+"").replace(Q,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(a(Object(e))?K.merge(n,"string"==typeof e?[e]:e):U.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:W.call(t,e,n)},merge:function(e,t){for(var n=+t.length,o=0,r=e.length;n>o;o++)e[r++]=t[o];return e.length=r,e},grep:function(e,t,n){for(var o=[],r=0,a=e.length,i=!n;a>r;r++)!t(e[r],r)!==i&&o.push(e[r]);return o},map:function(e,t,n){var o,r=0,i=e.length,s=[];if(a(e))for(;i>r;r++)null!=(o=t(e[r],r,n))&&s.push(o);else for(r in e)null!=(o=t(e[r],r,n))&&s.push(o);return B.apply([],s)},guid:1,proxy:function(e,t){var n,o,r;return"string"==typeof t&&(n=e[t],t=e,e=n),K.isFunction(e)?(o=H.call(arguments,2),r=function(){return e.apply(t||this,o.concat(H.call(arguments)))},r.guid=e.guid=e.guid||K.guid++,r):void 0},now:Date.now,support:X}),K.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(function(e,t){z["[object "+t+"]"]=t.toLowerCase()}));var ne=function(e){function t(e,t,n,o){var r,a,i,s,l,c,d,p,h,g;if((t?t.ownerDocument||t:R)!==q&&D(t),n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=(t=t||q).nodeType)&&9!==s)return[];if(_&&!o){if(r=ye.exec(e))if(i=r[1]){if(9===s){if(!(a=t.getElementById(i))||!a.parentNode)return n;if(a.id===i)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(i))&&F(t,a)&&a.id===i)return n.push(a),n}else{if(r[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((i=r[3])&&w.getElementsByClassName&&t.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(i)),n}if(w.qsa&&(!P||!P.test(e))){if(p=d=M,h=t,g=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=A(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,o)}function n(){var e=[];return function t(n,o){return e.push(n+" ")>E.cacheLength&&delete t[e.shift()],t[n+" "]=o}}function o(e){return e[M]=!0,e}function r(e){var t=q.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function a(e,t){for(var n=e.split("|"),o=e.length;o--;)E.attrHandle[n[o]]=t}function i(e,t){var n=t&&e,o=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||X)-(~e.sourceIndex||X);if(o)return o;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 o((function(t){return t=+t,o((function(n,o){for(var r,a=e([],n.length,t),i=a.length;i--;)n[r=a[i]]&&(n[r]=!(o[r]=n[r]))}))}))}function u(e){return e&&typeof e.getElementsByTagName!==G&&e}function d(){}function f(e){for(var t=0,n=e.length,o="";n>t;t++)o+=e[t].value;return o}function p(e,t,n){var o=t.dir,r=n&&"parentNode"===o,a=B++;return t.first?function(t,n,a){for(;t=t[o];)if(1===t.nodeType||r)return e(t,n,a)}:function(t,n,i){var s,l,c=[H,a];if(i){for(;t=t[o];)if((1===t.nodeType||r)&&e(t,n,i))return!0}else for(;t=t[o];)if(1===t.nodeType||r){if((s=(l=t[M]||(t[M]={}))[o])&&s[0]===H&&s[1]===a)return c[2]=s[2];if(l[o]=c,c[2]=e(t,n,i))return!0}}}function h(e){return e.length>1?function(t,n,o){for(var r=e.length;r--;)if(!e[r](t,n,o))return!1;return!0}:e[0]}function g(e,n,o){for(var r=0,a=n.length;a>r;r++)t(e,n[r],o);return o}function m(e,t,n,o,r){for(var a,i=[],s=0,l=e.length,c=null!=t;l>s;s++)(a=e[s])&&(!n||n(a,o,r))&&(i.push(a),c&&t.push(s));return i}function v(e,t,n,r,a,i){return r&&!r[M]&&(r=v(r)),a&&!a[M]&&(a=v(a,i)),o((function(o,i,s,l){var c,u,d,f=[],p=[],h=i.length,v=o||g(t||"*",s.nodeType?[s]:s,[]),y=!e||!o&&t?v:m(v,f,e,s,l),b=n?a||(o?e:h||r)?[]:i:y;if(n&&n(y,b,s,l),r)for(c=m(b,p),r(c,[],s,l),u=c.length;u--;)(d=c[u])&&(b[p[u]]=!(y[p[u]]=d));if(o){if(a||e){if(a){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(y[u]=d);a(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=a?te.call(o,d):f[u])>-1&&(o[c]=!(i[c]=d))}}else b=m(b===i?b.splice(h,b.length):b),a?a(null,i,b,l):Z.apply(i,b)}))}function y(e){for(var t,n,o,r=e.length,a=E.relative[e[0].type],i=a||E.relative[" "],s=a?1:0,l=p((function(e){return e===t}),i,!0),c=p((function(e){return te.call(t,e)>-1}),i,!0),u=[function(e,n,o){return!a&&(o||n!==k)||((t=n).nodeType?l(e,n,o):c(e,n,o))}];r>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))[M]){for(o=++s;r>o&&!E.relative[e[o].type];o++);return v(s>1&&h(u),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(le,"$1"),n,o>s&&y(e.slice(s,o)),r>o&&y(e=e.slice(o)),r>o&&f(e))}u.push(n)}return h(u)}function b(e,n){var r=n.length>0,a=e.length>0,i=function(o,i,s,l,c){var u,d,f,p=0,h="0",g=o&&[],v=[],y=k,b=o||a&&E.find.TAG("*",c),x=H+=null==y?1:Math.random()||.1,w=b.length;for(c&&(k=i!==q&&i);h!==w&&null!=(u=b[h]);h++){if(a&&u){for(d=0;f=e[d++];)if(f(u,i,s)){l.push(u);break}c&&(H=x)}r&&((u=!f&&u)&&p--,o&&g.push(u))}if(p+=h,r&&h!==p){for(d=0;f=n[d++];)f(g,v,i,s);if(o){if(p>0)for(;h--;)g[h]||v[h]||(v[h]=K.call(l));v=m(v)}Z.apply(l,v),c&&!o&&v.length>0&&p+n.length>1&&t.uniqueSort(l)}return c&&(H=x,k=y),g};return r?o(i):i}var x,w,E,C,L,A,S,T,k,N,O,D,q,$,_,P,j,I,F,M="sizzle"+-new Date,R=e.document,H=0,B=0,U=n(),W=n(),z=n(),V=function(e,t){return e===t&&(O=!0),0},G="undefined",X=1<<31,Y={}.hasOwnProperty,J=[],K=J.pop,Q=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",oe="[\\x20\\t\\r\\n\\f]",re="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ae=re.replace("w","w#"),ie="\\["+oe+"*("+re+")(?:"+oe+"*([*^$|!~]?=)"+oe+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ae+"))|)"+oe+"*\\]",se=":("+re+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ie+")*)|.*)\\)|)",le=new RegExp("^"+oe+"+|((?:^|[^\\\\])(?:\\\\.)*)"+oe+"+$","g"),ce=new RegExp("^"+oe+"*,"+oe+"*"),ue=new RegExp("^"+oe+"*([>+~]|"+oe+")"+oe+"*"),de=new RegExp("="+oe+"*([^\\]'\"]*?)"+oe+"*\\]","g"),fe=new RegExp(se),pe=new RegExp("^"+ae+"$"),he={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re.replace("w","w*")+")"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+se),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+oe+"*(even|odd|(([+-]|)(\\d*)n|)"+oe+"*(?:([+-]|)"+oe+"*(\\d+)|))"+oe+"*\\)|)","i"),bool:new RegExp("^(?:"+ne+")$","i"),needsContext:new RegExp("^"+oe+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+oe+"*((?:-\\d)?\\d*)"+oe+"*\\)|)(?=[^-]|$)","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}"+oe+"?|("+oe+")|.)","ig"),Ee=function(e,t,n){var o="0x"+t-65536;return o!=o||n?t:0>o?String.fromCharCode(o+65536):String.fromCharCode(o>>10|55296,1023&o|56320)};try{Z.apply(J=ee.call(R.childNodes),R.childNodes),J[R.childNodes.length].nodeType}catch(e){Z={apply:J.length?function(e,t){Q.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,o=0;e[n++]=t[o++];);e.length=n-1}}}for(x in w=t.support={},L=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:R,o=n.defaultView;return n!==q&&9===n.nodeType&&n.documentElement?(q=n,$=n.documentElement,_=!L(n),o&&o!==o.top&&(o.addEventListener?o.addEventListener("unload",(function(){D()}),!1):o.attachEvent&&o.attachEvent("onunload",(function(){D()}))),w.attributes=r((function(e){return e.className="i",!e.getAttribute("className")})),w.getElementsByTagName=r((function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length})),w.getElementsByClassName=ve.test(n.getElementsByClassName)&&r((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=r((function(e){return $.appendChild(e).id=M,!n.getElementsByName||!n.getElementsByName(M).length})),w.getById?(E.find.ID=function(e,t){if(typeof t.getElementById!==G&&_){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,o=[],r=0,a=t.getElementsByTagName(e);if("*"===e){for(;n=a[r++];)1===n.nodeType&&o.push(n);return o}return a},E.find.CLASS=w.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==G&&_?t.getElementsByClassName(e):void 0},j=[],P=[],(w.qsa=ve.test(n.querySelectorAll))&&(r((function(e){e.innerHTML="<select msallowclip=''><option selected=''></option></select>",e.querySelectorAll("[msallowclip^='']").length&&P.push("[*^$]="+oe+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+oe+"*(?:value|"+ne+")"),e.querySelectorAll(":checked").length||P.push(":checked")})),r((function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+oe+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")}))),(w.matchesSelector=ve.test(I=$.matches||$.webkitMatchesSelector||$.mozMatchesSelector||$.oMatchesSelector||$.msMatchesSelector))&&r((function(e){w.disconnectedMatch=I.call(e,"div"),I.call(e,"[s!='']:x"),j.push("!=",se)})),P=P.length&&new RegExp(P.join("|")),j=j.length&&new RegExp(j.join("|")),t=ve.test($.compareDocumentPosition),F=t||ve.test($.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,o=t&&t.parentNode;return e===o||!(!o||1!==o.nodeType||!(n.contains?n.contains(o):e.compareDocumentPosition&&16&e.compareDocumentPosition(o)))}: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 o=!e.compareDocumentPosition-!t.compareDocumentPosition;return o||(1&(o=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!w.sortDetached&&t.compareDocumentPosition(e)===o?e===n||e.ownerDocument===R&&F(R,e)?-1:t===n||t.ownerDocument===R&&F(R,t)?1:N?te.call(N,e)-te.call(N,t):0:4&o?-1:1)}:function(e,t){if(e===t)return O=!0,0;var o,r=0,a=e.parentNode,s=t.parentNode,l=[e],c=[t];if(!a||!s)return e===n?-1:t===n?1:a?-1:s?1:N?te.call(N,e)-te.call(N,t):0;if(a===s)return i(e,t);for(o=e;o=o.parentNode;)l.unshift(o);for(o=t;o=o.parentNode;)c.unshift(o);for(;l[r]===c[r];)r++;return r?i(l[r],c[r]):l[r]===R?-1:c[r]===R?1:0},n):q},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==q&&D(e),n=n.replace(de,"='$1']"),!(!w.matchesSelector||!_||j&&j.test(n)||P&&P.test(n)))try{var o=I.call(e,n);if(o||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return o}catch(e){}return t(n,q,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==q&&D(e),F(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==q&&D(e);var n=E.attrHandle[t.toLowerCase()],o=n&&Y.call(E.attrHandle,t.toLowerCase())?n(e,t,!_):void 0;return void 0!==o?o:w.attributes||!_?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],o=0,r=0;if(O=!w.detectDuplicates,N=!w.sortStable&&e.slice(0),e.sort(V),O){for(;t=e[r++];)t===e[r]&&(o=n.push(r));for(;o--;)e.splice(n[o],1)}return N=null,e},C=t.getText=function(e){var t,n="",o=0,r=e.nodeType;if(r){if(1===r||9===r||11===r){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=C(e)}else if(3===r||4===r)return e.nodeValue}else for(;t=e[o++];)n+=C(t);return n},E=t.selectors={cacheLength:50,createPseudo:o,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=A(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("(^|"+oe+")"+e+"("+oe+"|$)"))&&U(e,(function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==G&&e.getAttribute("class")||"")}))},ATTR:function(e,n,o){return function(r){var a=t.attr(r,e);return null==a?"!="===n:!n||(a+="","="===n?a===o:"!="===n?a!==o:"^="===n?o&&0===a.indexOf(o):"*="===n?o&&a.indexOf(o)>-1:"$="===n?o&&a.slice(-o.length)===o:"~="===n?(" "+a+" ").indexOf(o)>-1:"|="===n&&(a===o||a.slice(0,o.length+1)===o+"-"))}},CHILD:function(e,t,n,o,r){var a="nth"!==e.slice(0,3),i="last"!==e.slice(-4),s="of-type"===t;return 1===o&&0===r?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,h,g=a!==i?"nextSibling":"previousSibling",m=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(m){if(a){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=[i?m.firstChild:m.lastChild],i&&y){for(p=(c=(u=m[M]||(m[M]={}))[e]||[])[0]===H&&c[1],f=c[0]===H&&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]=[H,p,f];break}}else if(y&&(c=(t[M]||(t[M]={}))[e])&&c[0]===H)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[M]||(d[M]={}))[e]=[H,f]),d!==t)););return(f-=r)===o||f%o==0&&f/o>=0}}},PSEUDO:function(e,n){var r,a=E.pseudos[e]||E.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return a[M]?a(n):a.length>1?(r=[e,e,"",n],E.setFilters.hasOwnProperty(e.toLowerCase())?o((function(e,t){for(var o,r=a(e,n),i=r.length;i--;)e[o=te.call(e,r[i])]=!(t[o]=r[i])})):function(e){return a(e,0,r)}):a}},pseudos:{not:o((function(e){var t=[],n=[],r=S(e.replace(le,"$1"));return r[M]?o((function(e,t,n,o){for(var a,i=r(e,null,o,[]),s=e.length;s--;)(a=i[s])&&(e[s]=!(t[s]=a))})):function(e,o,a){return t[0]=e,r(t,null,a,n),!n.pop()}})),has:o((function(e){return function(n){return t(e,n).length>0}})),contains:o((function(e){return function(t){return(t.textContent||t.innerText||C(t)).indexOf(e)>-1}})),lang:o((function(e){return pe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(we,Ee).toLowerCase(),function(t){var n;do{if(n=_?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===$},focus:function(e){return e===q.activeElement&&(!q.hasFocus||q.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 o=0>n?n+t:n;--o>=0;)e.push(o);return e})),gt:c((function(e,t,n){for(var o=0>n?n+t:n;++o<t;)e.push(o);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,A=t.tokenize=function(e,n){var o,r,a,i,s,l,c,u=W[e+" "];if(u)return n?0:u.slice(0);for(s=e,l=[],c=E.preFilter;s;){for(i in(!o||(r=ce.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(a=[])),o=!1,(r=ue.exec(s))&&(o=r.shift(),a.push({value:o,type:r[0].replace(le," ")}),s=s.slice(o.length)),E.filter)!(r=he[i].exec(s))||c[i]&&!(r=c[i](r))||(o=r.shift(),a.push({value:o,type:i,matches:r}),s=s.slice(o.length));if(!o)break}return n?s.length:s?t.error(e):W(e,l).slice(0)},S=t.compile=function(e,t){var n,o=[],r=[],a=z[e+" "];if(!a){for(t||(t=A(e)),n=t.length;n--;)(a=y(t[n]))[M]?o.push(a):r.push(a);(a=z(e,b(r,o))).selector=e}return a},T=t.select=function(e,t,n,o){var r,a,i,s,l,c="function"==typeof e&&e,d=!o&&A(e=c.selector||e);if(n=n||[],1===d.length){if((a=d[0]=d[0].slice(0)).length>2&&"ID"===(i=a[0]).type&&w.getById&&9===t.nodeType&&_&&E.relative[a[1].type]){if(!(t=(E.find.ID(i.matches[0].replace(we,Ee),t)||[])[0]))return n;c&&(t=t.parentNode),e=e.slice(a.shift().value.length)}for(r=he.needsContext.test(e)?0:a.length;r--&&(i=a[r],!E.relative[s=i.type]);)if((l=E.find[s])&&(o=l(i.matches[0].replace(we,Ee),be.test(a[0].type)&&u(t.parentNode)||t))){if(a.splice(r,1),!(e=o.length&&f(a)))return Z.apply(n,o),n;break}}return(c||S(e,d))(o,t,!_,n,be.test(e)&&u(t.parentNode)||t),n},w.sortStable=M.split("").sort(V).join("")===M,w.detectDuplicates=!!O,D(),w.sortDetached=r((function(e){return 1&e.compareDocumentPosition(q.createElement("div"))})),r((function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")}))||a("type|href|height|width",(function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),w.attributes&&r((function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||a("value",(function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue})),r((function(e){return null==e.getAttribute("disabled")}))||a(ne,(function(e,t,n){var o;return n?void 0:!0===e[t]?t.toLowerCase():(o=e.getAttributeNode(t))&&o.specified?o.value:null})),t}(o);K.find=ne,K.expr=ne.selectors,K.expr[":"]=K.expr.pseudos,K.unique=ne.uniqueSort,K.text=ne.getText,K.isXMLDoc=ne.isXML,K.contains=ne.contains;var oe=K.expr.match.needsContext,re=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ae=/^.[^:#\[\.,]*$/;K.filter=function(e,t,n){var o=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===o.nodeType?K.find.matchesSelector(o,e)?[o]:[]:K.find.matches(e,K.grep(t,(function(e){return 1===e.nodeType})))},K.fn.extend({find:function(e){var t,n=this.length,o=[],r=this;if("string"!=typeof e)return this.pushStack(K(e).filter((function(){for(t=0;n>t;t++)if(K.contains(r[t],this))return!0})));for(t=0;n>t;t++)K.find(e,r[t],o);return(o=this.pushStack(n>1?K.unique(o):o)).selector=this.selector?this.selector+" "+e:e,o},filter:function(e){return this.pushStack(i(this,e||[],!1))},not:function(e){return this.pushStack(i(this,e||[],!0))},is:function(e){return!!i(this,"string"==typeof e&&oe.test(e)?K(e):e||[],!1).length}});var ie,se=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,le=K.fn.init=function(e,t){var n,o;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||ie).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof K?t[0]:t,K.merge(this,K.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:Y,!0)),re.test(n[1])&&K.isPlainObject(t))for(n in t)K.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}return(o=Y.getElementById(n[2]))&&o.parentNode&&(this.length=1,this[0]=o),this.context=Y,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):K.isFunction(e)?void 0!==ie.ready?ie.ready(e):e(K):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),K.makeArray(e,this))};le.prototype=K.fn,ie=K(Y);var ce=/^(?:parents|prev(?:Until|All))/,ue={children:!0,contents:!0,next:!0,prev:!0};K.extend({dir:function(e,t,n){for(var o=[],r=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(r&&K(e).is(n))break;o.push(e)}return o},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}}),K.fn.extend({has:function(e){var t=K(e,this),n=t.length;return this.filter((function(){for(var e=0;n>e;e++)if(K.contains(this,t[e]))return!0}))},closest:function(e,t){for(var n,o=0,r=this.length,a=[],i=oe.test(e)||"string"!=typeof e?K(e,t||this.context):0;r>o;o++)for(n=this[o];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(i?i.index(n)>-1:1===n.nodeType&&K.find.matchesSelector(n,e))){a.push(n);break}return this.pushStack(a.length>1?K.unique(a):a)},index:function(e){return e?"string"==typeof e?W.call(K(e),this[0]):W.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(K.unique(K.merge(this.get(),K(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),K.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return K.dir(e,"parentNode")},parentsUntil:function(e,t,n){return K.dir(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return K.dir(e,"nextSibling")},prevAll:function(e){return K.dir(e,"previousSibling")},nextUntil:function(e,t,n){return K.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return K.dir(e,"previousSibling",n)},siblings:function(e){return K.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return K.sibling(e.firstChild)},contents:function(e){return e.contentDocument||K.merge([],e.childNodes)}},(function(e,t){K.fn[e]=function(n,o){var r=K.map(this,t,n);return"Until"!==e.slice(-5)&&(o=n),o&&"string"==typeof o&&(r=K.filter(o,r)),this.length>1&&(ue[e]||K.unique(r),ce.test(e)&&r.reverse()),this.pushStack(r)}}));var de,fe=/\S+/g,pe={};K.Callbacks=function(e){e="string"==typeof e?pe[e]||function(e){var t=pe[e]={};return K.each(e.match(fe)||[],(function(e,n){t[n]=!0})),t}(e):K.extend({},e);var t,n,o,r,a,i,s=[],l=!e.once&&[],c=function(d){for(t=e.memory&&d,n=!0,i=r||0,r=0,a=s.length,o=!0;s&&a>i;i++)if(!1===s[i].apply(d[0],d[1])&&e.stopOnFalse){t=!1;break}o=!1,s&&(l?l.length&&c(l.shift()):t?s=[]:u.disable())},u={add:function(){if(s){var n=s.length;!function t(n){K.each(n,(function(n,o){var r=K.type(o);"function"===r?e.unique&&u.has(o)||s.push(o):o&&o.length&&"string"!==r&&t(o)}))}(arguments),o?a=s.length:t&&(r=n,c(t))}return this},remove:function(){return s&&K.each(arguments,(function(e,t){for(var n;(n=K.inArray(t,s,n))>-1;)s.splice(n,1),o&&(a>=n&&a--,i>=n&&i--)})),this},has:function(e){return e?K.inArray(e,s)>-1:!(!s||!s.length)},empty:function(){return s=[],a=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],o?l.push(t):c(t)),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!n}};return u},K.extend({Deferred:function(e){var t=[["resolve","done",K.Callbacks("once memory"),"resolved"],["reject","fail",K.Callbacks("once memory"),"rejected"],["notify","progress",K.Callbacks("memory")]],n="pending",o={state:function(){return n},always:function(){return r.done(arguments).fail(arguments),this},then:function(){var e=arguments;return K.Deferred((function(n){K.each(t,(function(t,a){var i=K.isFunction(e[t])&&e[t];r[a[1]]((function(){var e=i&&i.apply(this,arguments);e&&K.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a[0]+"With"](this===o?n.promise():this,i?[e]:arguments)}))})),e=null})).promise()},promise:function(e){return null!=e?K.extend(e,o):o}},r={};return o.pipe=o.then,K.each(t,(function(e,a){var i=a[2],s=a[3];o[a[1]]=i.add,s&&i.add((function(){n=s}),t[1^e][2].disable,t[2][2].lock),r[a[0]]=function(){return r[a[0]+"With"](this===r?o:this,arguments),this},r[a[0]+"With"]=i.fireWith})),o.promise(r),e&&e.call(r,r),r},when:function(e){var t,n,o,r=0,a=H.call(arguments),i=a.length,s=1!==i||e&&K.isFunction(e.promise)?i:0,l=1===s?e:K.Deferred(),c=function(e,n,o){return function(r){n[e]=this,o[e]=arguments.length>1?H.call(arguments):r,o===t?l.notifyWith(n,o):--s||l.resolveWith(n,o)}};if(i>1)for(t=new Array(i),n=new Array(i),o=new Array(i);i>r;r++)a[r]&&K.isFunction(a[r].promise)?a[r].promise().done(c(r,o,a)).fail(l.reject).progress(c(r,n,t)):--s;return s||l.resolveWith(o,a),l.promise()}}),K.fn.ready=function(e){return K.ready.promise().done(e),this},K.extend({isReady:!1,readyWait:1,holdReady:function(e){e?K.readyWait++:K.ready(!0)},ready:function(e){(!0===e?--K.readyWait:K.isReady)||(K.isReady=!0,!0!==e&&--K.readyWait>0||(de.resolveWith(Y,[K]),K.fn.triggerHandler&&(K(Y).triggerHandler("ready"),K(Y).off("ready"))))}}),K.ready.promise=function(e){return de||(de=K.Deferred(),"complete"===Y.readyState?setTimeout(K.ready):(Y.addEventListener("DOMContentLoaded",l,!1),o.addEventListener("load",l,!1))),de.promise(e)},K.ready.promise();var he=K.access=function(e,t,n,o,r,a,i){var s=0,l=e.length,c=null==n;if("object"===K.type(n))for(s in r=!0,n)K.access(e,t,s,n[s],!0,a,i);else if(void 0!==o&&(r=!0,K.isFunction(o)||(i=!0),c&&(i?(t.call(e,o),t=null):(c=t,t=function(e,t,n){return c.call(K(e),n)})),t))for(;l>s;s++)t(e[s],n,i?o:o.call(e[s],s,t(e[s],n)));return r?e:c?t.call(e):l?t(e[0],n):a};K.acceptData=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType},c.uid=1,c.accepts=K.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(o){t[this.expando]=n,K.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var o,r=this.key(e),a=this.cache[r];if("string"==typeof t)a[t]=n;else if(K.isEmptyObject(a))K.extend(this.cache[r],t);else for(o in t)a[o]=t[o];return a},get:function(e,t){var n=this.cache[this.key(e)];return void 0===t?n:n[t]},access:function(e,t,n){var o;return void 0===t||t&&"string"==typeof t&&void 0===n?void 0!==(o=this.get(e,t))?o:this.get(e,K.camelCase(t)):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,o,r,a=this.key(e),i=this.cache[a];if(void 0===t)this.cache[a]={};else{K.isArray(t)?o=t.concat(t.map(K.camelCase)):(r=K.camelCase(t),o=t in i?[t,r]:(o=r)in i?[o]:o.match(fe)||[]),n=o.length;for(;n--;)delete i[o[n]]}},hasData:function(e){return!K.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;K.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)}}),K.fn.extend({data:function(e,t){var n,o,r,a=this[0],i=a&&a.attributes;if(void 0===e){if(this.length&&(r=me.get(a),1===a.nodeType&&!ge.get(a,"hasDataAttrs"))){for(n=i.length;n--;)i[n]&&0===(o=i[n].name).indexOf("data-")&&(o=K.camelCase(o.slice(5)),u(a,o,r[o]));ge.set(a,"hasDataAttrs",!0)}return r}return"object"==typeof e?this.each((function(){me.set(this,e)})):he(this,(function(t){var n,o=K.camelCase(e);if(a&&void 0===t){if(void 0!==(n=me.get(a,e)))return n;if(void 0!==(n=me.get(a,o)))return n;if(void 0!==(n=u(a,o,void 0)))return n}else this.each((function(){var n=me.get(this,o);me.set(this,o,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)}))}}),K.extend({queue:function(e,t,n){var o;return e?(t=(t||"fx")+"queue",o=ge.get(e,t),n&&(!o||K.isArray(n)?o=ge.access(e,t,K.makeArray(n)):o.push(n)),o||[]):void 0},dequeue:function(e,t){t=t||"fx";var n=K.queue(e,t),o=n.length,r=n.shift(),a=K._queueHooks(e,t);"inprogress"===r&&(r=n.shift(),o--),r&&("fx"===t&&n.unshift("inprogress"),delete a.stop,r.call(e,(function(){K.dequeue(e,t)}),a)),!o&&a&&a.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return ge.get(e,n)||ge.access(e,n,{empty:K.Callbacks("once memory").add((function(){ge.remove(e,[t+"queue",n])}))})}}),K.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?K.queue(this[0],e):void 0===t?this:this.each((function(){var n=K.queue(this,e,t);K._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&K.dequeue(this,e)}))},dequeue:function(e){return this.each((function(){K.dequeue(this,e)}))},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,o=1,r=K.Deferred(),a=this,i=this.length,s=function(){--o||r.resolveWith(a,[a])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";i--;)(n=ge.get(a[i],e+"queueHooks"))&&n.empty&&(o++,n.empty.add(s));return s(),r.promise(t)}});var be=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,xe=["Top","Right","Bottom","Left"],we=function(e,t){return e=t||e,"none"===K.css(e,"display")||!K.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 o;var Le=/^key/,Ae=/^(?:mouse|pointer|contextmenu)|click/,Se=/^(?:focusinfocus|focusoutblur)$/,Te=/^([^.]*)(?:\.(.+)|)$/;K.event={global:{},add:function(e,t,n,o,r){var a,i,s,l,c,u,d,f,p,h,g,m=ge.get(e);if(m)for(n.handler&&(n=(a=n).handler,r=a.selector),n.guid||(n.guid=K.guid++),(l=m.events)||(l=m.events={}),(i=m.handle)||(i=m.handle=function(t){return typeof K!==Ce&&K.event.triggered!==t.type?K.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=K.event.special[p]||{},p=(r?d.delegateType:d.bindType)||p,d=K.event.special[p]||{},u=K.extend({type:p,origType:g,data:o,handler:n,guid:n.guid,selector:r,needsContext:r&&K.expr.match.needsContext.test(r),namespace:h.join(".")},a),(f=l[p])||((f=l[p]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(e,o,h,i)||e.addEventListener&&e.addEventListener(p,i,{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)),r?f.splice(f.delegateCount++,0,u):f.push(u),K.event.global[p]=!0)},remove:function(e,t,n,o,r){var a,i,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=K.event.special[p]||{},f=l[p=(o?d.delegateType:d.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=a=f.length;a--;)u=f[a],!r&&g!==u.origType||n&&n.guid!==u.guid||s&&!s.test(u.namespace)||o&&o!==u.selector&&("**"!==o||!u.selector)||(f.splice(a,1),u.selector&&f.delegateCount--,d.remove&&d.remove.call(e,u));i&&!f.length&&(d.teardown&&!1!==d.teardown.call(e,h,m.handle)||K.removeEvent(e,p,m.handle),delete l[p])}else for(p in l)K.event.remove(e,p+t[c],n,o,!0);K.isEmptyObject(l)&&(delete m.handle,ge.remove(e,"events"))}},trigger:function(e,t,n,r){var a,i,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(i=s=n=n||Y,3!==n.nodeType&&8!==n.nodeType&&!Se.test(p+K.event.triggered)&&(p.indexOf(".")>=0&&(h=p.split("."),p=h.shift(),h.sort()),c=p.indexOf(":")<0&&"on"+p,(e=e[K.expando]?e:new K.Event(p,"object"==typeof e&&e)).isTrigger=r?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]:K.makeArray(t,[e]),d=K.event.special[p]||{},r||!d.trigger||!1!==d.trigger.apply(n,t))){if(!r&&!d.noBubble&&!K.isWindow(n)){for(l=d.delegateType||p,Se.test(l+p)||(i=i.parentNode);i;i=i.parentNode)f.push(i),s=i;s===(n.ownerDocument||Y)&&f.push(s.defaultView||s.parentWindow||o)}for(a=0;(i=f[a++])&&!e.isPropagationStopped();)e.type=a>1?l:d.bindType||p,(u=(ge.get(i,"events")||{})[e.type]&&ge.get(i,"handle"))&&u.apply(i,t),(u=c&&i[c])&&u.apply&&K.acceptData(i)&&(e.result=u.apply(i,t),!1===e.result&&e.preventDefault());return e.type=p,r||e.isDefaultPrevented()||d._default&&!1!==d._default.apply(f.pop(),t)||!K.acceptData(n)||c&&K.isFunction(n[p])&&!K.isWindow(n)&&((s=n[c])&&(n[c]=null),K.event.triggered=p,n[p](),K.event.triggered=void 0,s&&(n[c]=s)),e.result}},dispatch:function(e){e=K.event.fix(e);var t,n,o,r,a,i=[],s=H.call(arguments),l=(ge.get(this,"events")||{})[e.type]||[],c=K.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,e)){for(i=K.event.handlers.call(this,e,l),t=0;(r=i[t++])&&!e.isPropagationStopped();)for(e.currentTarget=r.elem,n=0;(a=r.handlers[n++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(a.namespace))&&(e.handleObj=a,e.data=a.data,void 0!==(o=((K.event.special[a.origType]||{}).handle||a.handler).apply(r.elem,s))&&!1===(e.result=o)&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,o,r,a,i=[],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(o=[],n=0;s>n;n++)void 0===o[r=(a=t[n]).selector+" "]&&(o[r]=a.needsContext?K(r,this).index(l)>=0:K.find(r,this,null,[l]).length),o[r]&&o.push(a);o.length&&i.push({elem:l,handlers:o})}return s<t.length&&i.push({elem:this,handlers:t.slice(s)}),i},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,o,r,a=t.button;return null==e.pageX&&null!=t.clientX&&(o=(n=e.target.ownerDocument||Y).documentElement,r=n.body,e.pageX=t.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=t.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),e.which||void 0===a||(e.which=1&a?1:2&a?3:4&a?2:0),e}},fix:function(e){if(e[K.expando])return e;var t,n,o,r=e.type,a=e,i=this.fixHooks[r];for(i||(this.fixHooks[r]=i=Ae.test(r)?this.mouseHooks:Le.test(r)?this.keyHooks:{}),o=i.props?this.props.concat(i.props):this.props,e=new K.Event(a),t=o.length;t--;)e[n=o[t]]=a[n];return e.target||(e.target=Y),3===e.target.nodeType&&(e.target=e.target.parentNode),i.filter?i.filter(e,a):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&&K.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(e){return K.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,o){var r=K.extend(new K.Event,n,{type:e,isSimulated:!0,originalEvent:{}});o?K.event.trigger(r,null,t):K.event.dispatch.call(t,r),r.isDefaultPrevented()&&n.preventDefault()}},K.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},K.Event=function(e,t){return this instanceof K.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&&K.extend(this,t),this.timeStamp=e&&e.timeStamp||K.now(),void(this[K.expando]=!0)):new K.Event(e,t)},K.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()}},K.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},(function(e,t){K.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,o=e.relatedTarget,r=e.handleObj;return(!o||o!==this&&!K.contains(this,o))&&(e.type=r.origType,n=r.handler.apply(this,arguments),e.type=t),n}}})),X.focusinBubbles||K.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){K.event.simulate(t,e.target,K.event.fix(e),!0)};K.event.special[t]={setup:function(){var o=this.ownerDocument||this,r=ge.access(o,t);r||o.addEventListener(e,n,!0),ge.access(o,t,(r||0)+1)},teardown:function(){var o=this.ownerDocument||this,r=ge.access(o,t)-1;r?ge.access(o,t,r):(o.removeEventListener(e,n,!0),ge.remove(o,t))}}})),K.fn.extend({on:function(e,t,n,o,r){var a,i;if("object"==typeof e){for(i in"string"!=typeof t&&(n=n||t,t=void 0),e)this.on(i,t,n,e[i],r);return this}if(null==n&&null==o?(o=t,n=t=void 0):null==o&&("string"==typeof t?(o=n,n=void 0):(o=n,n=t,t=void 0)),!1===o)o=f;else if(!o)return this;return 1===r&&(a=o,o=function(e){return K().off(e),a.apply(this,arguments)},o.guid=a.guid||(a.guid=K.guid++)),this.each((function(){K.event.add(this,e,o,n,t)}))},one:function(e,t,n,o){return this.on(e,t,n,o,1)},off:function(e,t,n){var o,r;if(e&&e.preventDefault&&e.handleObj)return o=e.handleObj,K(e.delegateTarget).off(o.namespace?o.origType+"."+o.namespace:o.origType,o.selector,o.handler),this;if("object"==typeof e){for(r in e)this.off(r,t,e[r]);return this}return(!1===t||"function"==typeof t)&&(n=t,t=void 0),!1===n&&(n=f),this.each((function(){K.event.remove(this,e,n,t)}))},trigger:function(e,t){return this.each((function(){K.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];return n?K.event.trigger(e,t,n,!0):void 0}});var ke=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Ne=/<([\w:]+)/,Oe=/<|&#?\w+;/,De=/<(?:script|style|link)/i,qe=/checked\s*(?:[^=]|=\s*.checked.)/i,$e=/^$|\/(?:java|ecma)script/i,_e=/^true\/(.*)/,Pe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,je={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,"",""]};je.optgroup=je.option,je.tbody=je.tfoot=je.colgroup=je.caption=je.thead,je.th=je.td,K.extend({clone:function(e,t,n){var o,r,a,i,s=e.cloneNode(!0),l=K.contains(e.ownerDocument,e);if(!(X.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||K.isXMLDoc(e)))for(i=b(s),o=0,r=(a=b(e)).length;r>o;o++)x(a[o],i[o]);if(t)if(n)for(a=a||b(e),i=i||b(s),o=0,r=a.length;r>o;o++)y(a[o],i[o]);else y(e,s);return(i=b(s,"script")).length>0&&v(i,!l&&b(e,"script")),s},buildFragment:function(e,t,n,o){for(var r,a,i,s,l,c,u=t.createDocumentFragment(),d=[],f=0,p=e.length;p>f;f++)if((r=e[f])||0===r)if("object"===K.type(r))K.merge(d,r.nodeType?[r]:r);else if(Oe.test(r)){for(a=a||u.appendChild(t.createElement("div")),i=(Ne.exec(r)||["",""])[1].toLowerCase(),s=je[i]||je._default,a.innerHTML=s[1]+r.replace(ke,"<$1></$2>")+s[2],c=s[0];c--;)a=a.lastChild;K.merge(d,a.childNodes),(a=u.firstChild).textContent=""}else d.push(t.createTextNode(r));for(u.textContent="",f=0;r=d[f++];)if((!o||-1===K.inArray(r,o))&&(l=K.contains(r.ownerDocument,r),a=b(u.appendChild(r),"script"),l&&v(a),n))for(c=0;r=a[c++];)$e.test(r.type||"")&&n.push(r);return u},cleanData:function(e){for(var t,n,o,r,a=K.event.special,i=0;void 0!==(n=e[i]);i++){if(K.acceptData(n)&&(r=n[ge.expando])&&(t=ge.cache[r])){if(t.events)for(o in t.events)a[o]?K.event.remove(n,o):K.removeEvent(n,o,t.handle);ge.cache[r]&&delete ge.cache[r]}delete me.cache[n[me.expando]]}}}),K.fn.extend({text:function(e){return he(this,(function(e){return void 0===e?K.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,o=e?K.filter(e,this):this,r=0;null!=(n=o[r]);r++)t||1!==n.nodeType||K.cleanData(b(n)),n.parentNode&&(t&&K.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&&(K.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 K.clone(this,e,t)}))},html:function(e){return he(this,(function(e){var t=this[0]||{},n=0,o=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!De.test(e)&&!je[(Ne.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(ke,"<$1></$2>");try{for(;o>n;n++)1===(t=this[n]||{}).nodeType&&(K.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,K.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,o,r,a,i,s,l=0,c=this.length,u=this,d=c-1,f=e[0],p=K.isFunction(f);if(p||c>1&&"string"==typeof f&&!X.checkClone&&qe.test(f))return this.each((function(n){var o=u.eq(n);p&&(e[0]=f.call(this,n,o.html())),o.domManip(e,t)}));if(c&&(o=(n=K.buildFragment(e,this[0].ownerDocument,!1,this)).firstChild,1===n.childNodes.length&&(n=o),o)){for(a=(r=K.map(b(n,"script"),g)).length;c>l;l++)i=n,l!==d&&(i=K.clone(i,!0,!0),a&&K.merge(r,b(i,"script"))),t.call(this[l],i,l);if(a)for(s=r[r.length-1].ownerDocument,K.map(r,m),l=0;a>l;l++)i=r[l],$e.test(i.type||"")&&!ge.access(i,"globalEval")&&K.contains(s,i)&&(i.src?K._evalUrl&&K._evalUrl(i.src):K.globalEval(i.textContent.replace(Pe,"")))}return this}}),K.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},(function(e,t){K.fn[e]=function(e){for(var n,o=[],r=K(e),a=r.length-1,i=0;a>=i;i++)n=i===a?this:this.clone(!0),K(r[i])[t](n),U.apply(o,n.get());return this.pushStack(o)}}));var Ie,Fe={},Me=/^margin/,Re=new RegExp("^("+be+")(?!px)[a-z%]+$","i"),He=function(e){return e.ownerDocument.defaultView.getComputedStyle(e,null)};!function(){function e(){i.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",i.innerHTML="",r.appendChild(a);var e=o.getComputedStyle(i,null);t="1%"!==e.top,n="4px"===e.width,r.removeChild(a)}var t,n,r=Y.documentElement,a=Y.createElement("div"),i=Y.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",X.clearCloneStyle="content-box"===i.style.backgroundClip,a.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",a.appendChild(i),o.getComputedStyle&&K.extend(X,{pixelPosition:function(){return e(),t},boxSizingReliable:function(){return null==n&&e(),n},reliableMarginRight:function(){var e,t=i.appendChild(Y.createElement("div"));return t.style.cssText=i.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",i.style.width="1px",r.appendChild(a),e=!parseFloat(o.getComputedStyle(t,null).marginRight),r.removeChild(a),e}}))}(),K.swap=function(e,t,n,o){var r,a,i={};for(a in t)i[a]=e.style[a],e.style[a]=t[a];for(a in r=n.apply(e,o||[]),t)e.style[a]=i[a];return r};var Be=/^(none|table(?!-c[ea]).+)/,Ue=new RegExp("^("+be+")(.*)$","i"),We=new RegExp("^([+-])=("+be+")","i"),ze={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","O","Moz","ms"];K.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,o){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var r,a,i,s=K.camelCase(t),l=e.style;return t=K.cssProps[s]||(K.cssProps[s]=A(l,s)),i=K.cssHooks[t]||K.cssHooks[s],void 0===n?i&&"get"in i&&void 0!==(r=i.get(e,!1,o))?r:l[t]:("string"==(a=typeof n)&&(r=We.exec(n))&&(n=(r[1]+1)*r[2]+parseFloat(K.css(e,t)),a="number"),void(null!=n&&n==n&&("number"!==a||K.cssNumber[s]||(n+="px"),X.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),i&&"set"in i&&void 0===(n=i.set(e,n,o))||(l[t]=n))))}},css:function(e,t,n,o){var r,a,i,s=K.camelCase(t);return t=K.cssProps[s]||(K.cssProps[s]=A(e.style,s)),(i=K.cssHooks[t]||K.cssHooks[s])&&"get"in i&&(r=i.get(e,!0,n)),void 0===r&&(r=C(e,t,o)),"normal"===r&&t in Ve&&(r=Ve[t]),""===n||n?(a=parseFloat(r),!0===n||K.isNumeric(a)?a||0:r):r}}),K.each(["height","width"],(function(e,t){K.cssHooks[t]={get:function(e,n,o){return n?Be.test(K.css(e,"display"))&&0===e.offsetWidth?K.swap(e,ze,(function(){return k(e,t,o)})):k(e,t,o):void 0},set:function(e,n,o){var r=o&&He(e);return S(0,n,o?T(e,t,o,"border-box"===K.css(e,"boxSizing",!1,r),r):0)}}})),K.cssHooks.marginRight=L(X.reliableMarginRight,(function(e,t){return t?K.swap(e,{display:"inline-block"},C,[e,"marginRight"]):void 0})),K.each({margin:"",padding:"",border:"Width"},(function(e,t){K.cssHooks[e+t]={expand:function(n){for(var o=0,r={},a="string"==typeof n?n.split(" "):[n];4>o;o++)r[e+xe[o]+t]=a[o]||a[o-2]||a[0];return r}},Me.test(e)||(K.cssHooks[e+t].set=S)})),K.fn.extend({css:function(e,t){return he(this,(function(e,t,n){var o,r,a={},i=0;if(K.isArray(t)){for(o=He(e),r=t.length;r>i;i++)a[t[i]]=K.css(e,t[i],!1,o);return a}return void 0!==n?K.style(e,t,n):K.css(e,t)}),e,t,arguments.length>1)},show:function(){return N(this,!0)},hide:function(){return N(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each((function(){we(this)?K(this).show():K(this).hide()}))}}),K.Tween=O,O.prototype={constructor:O,init:function(e,t,n,o,r,a){this.elem=e,this.prop=n,this.easing=r||"swing",this.options=t,this.start=this.now=this.cur(),this.end=o,this.unit=a||(K.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?K.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=K.css(e.elem,e.prop,""))&&"auto"!==t?t:0:e.elem[e.prop]},set:function(e){K.fx.step[e.prop]?K.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[K.cssProps[e.prop]]||K.cssHooks[e.prop])?K.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)}},K.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},K.fx=O.prototype.init,K.fx.step={};var Xe,Ye,Je=/^(?:toggle|show|hide)$/,Ke=new RegExp("^(?:([+-])=|)("+be+")([a-z%]*)$","i"),Qe=/queueHooks$/,Ze=[function(e,t,n){var o,r,a,i,s,l,c,u=this,d={},f=e.style,p=e.nodeType&&we(e),h=ge.get(e,"fxshow");for(o in n.queue||(null==(s=K._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--,K.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=K.css(e,"display"))?ge.get(e,"olddisplay")||E(e.nodeName):c)&&"none"===K.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(r=t[o],Je.exec(r)){if(delete t[o],a=a||"toggle"===r,r===(p?"hide":"show")){if("show"!==r||!h||void 0===h[o])continue;p=!0}d[o]=h&&h[o]||K.style(e,o)}else c=void 0;if(K.isEmptyObject(d))"inline"===("none"===c?E(e.nodeName):c)&&(f.display=c);else for(o in h?"hidden"in h&&(p=h.hidden):h=ge.access(e,"fxshow",{}),a&&(h.hidden=!p),p?K(e).show():u.done((function(){K(e).hide()})),u.done((function(){var t;for(t in ge.remove(e,"fxshow"),d)K.style(e,t,d[t])})),d)i=$(p?h[o]:0,o,u),o in h||(h[o]=i.start,p&&(i.end=i.start,i.start="width"===o||"height"===o?1:0))}],et={"*":[function(e,t){var n=this.createTween(e,t),o=n.cur(),r=Ke.exec(t),a=r&&r[3]||(K.cssNumber[e]?"":"px"),i=(K.cssNumber[e]||"px"!==a&&+o)&&Ke.exec(K.css(n.elem,e)),s=1,l=20;if(i&&i[3]!==a){a=a||i[3],r=r||[],i=+o||1;do{i/=s=s||".5",K.style(n.elem,e,i+a)}while(s!==(s=n.cur()/o)&&1!==s&&--l)}return r&&(i=n.start=+i||+o||0,n.unit=a,n.end=r[1]?i+(r[1]+1)*r[2]:+r[2]),n}]};K.Animation=K.extend(_,{tweener:function(e,t){K.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,o=0,r=e.length;r>o;o++)n=e[o],et[n]=et[n]||[],et[n].unshift(t)},prefilter:function(e,t){t?Ze.unshift(e):Ze.push(e)}}),K.speed=function(e,t,n){var o=e&&"object"==typeof e?K.extend({},e):{complete:n||!n&&t||K.isFunction(e)&&e,duration:e,easing:n&&t||t&&!K.isFunction(t)&&t};return o.duration=K.fx.off?0:"number"==typeof o.duration?o.duration:o.duration in K.fx.speeds?K.fx.speeds[o.duration]:K.fx.speeds._default,(null==o.queue||!0===o.queue)&&(o.queue="fx"),o.old=o.complete,o.complete=function(){K.isFunction(o.old)&&o.old.call(this),o.queue&&K.dequeue(this,o.queue)},o},K.fn.extend({fadeTo:function(e,t,n,o){return this.filter(we).css("opacity",0).show().end().animate({opacity:t},e,n,o)},animate:function(e,t,n,o){var r=K.isEmptyObject(e),a=K.speed(t,n,o),i=function(){var t=_(this,K.extend({},e),a);(r||ge.get(this,"finish"))&&t.stop(!0)};return i.finish=i,r||!1===a.queue?this.each(i):this.queue(a.queue,i)},stop:function(e,t,n){var o=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each((function(){var t=!0,r=null!=e&&e+"queueHooks",a=K.timers,i=ge.get(this);if(r)i[r]&&i[r].stop&&o(i[r]);else for(r in i)i[r]&&i[r].stop&&Qe.test(r)&&o(i[r]);for(r=a.length;r--;)a[r].elem!==this||null!=e&&a[r].queue!==e||(a[r].anim.stop(n),t=!1,a.splice(r,1));(t||!n)&&K.dequeue(this,e)}))},finish:function(e){return!1!==e&&(e=e||"fx"),this.each((function(){var t,n=ge.get(this),o=n[e+"queue"],r=n[e+"queueHooks"],a=K.timers,i=o?o.length:0;for(n.finish=!0,K.queue(this,e,[]),r&&r.stop&&r.stop.call(this,!0),t=a.length;t--;)a[t].elem===this&&a[t].queue===e&&(a[t].anim.stop(!0),a.splice(t,1));for(t=0;i>t;t++)o[t]&&o[t].finish&&o[t].finish.call(this);delete n.finish}))}}),K.each(["toggle","show","hide"],(function(e,t){var n=K.fn[t];K.fn[t]=function(e,o,r){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(q(t,!0),e,o,r)}})),K.each({slideDown:q("show"),slideUp:q("hide"),slideToggle:q("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},(function(e,t){K.fn[e]=function(e,n,o){return this.animate(t,e,n,o)}})),K.timers=[],K.fx.tick=function(){var e,t=0,n=K.timers;for(Xe=K.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||K.fx.stop(),Xe=void 0},K.fx.timer=function(e){K.timers.push(e),e()?K.fx.start():K.timers.pop()},K.fx.interval=13,K.fx.start=function(){Ye||(Ye=setInterval(K.fx.tick,K.fx.interval))},K.fx.stop=function(){clearInterval(Ye),Ye=null},K.fx.speeds={slow:600,fast:200,_default:400},K.fn.delay=function(e,t){return e=K.fx&&K.fx.speeds[e]||e,t=t||"fx",this.queue(t,(function(t,n){var o=setTimeout(t,e);n.stop=function(){clearTimeout(o)}}))},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=K.expr.attrHandle;K.fn.extend({attr:function(e,t){return he(this,K.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each((function(){K.removeAttr(this,e)}))}}),K.extend({attr:function(e,t,n){var o,r,a=e.nodeType;if(e&&3!==a&&8!==a&&2!==a)return typeof e.getAttribute===Ce?K.prop(e,t,n):(1===a&&K.isXMLDoc(e)||(t=t.toLowerCase(),o=K.attrHooks[t]||(K.expr.match.bool.test(t)?tt:void 0)),void 0===n?o&&"get"in o&&null!==(r=o.get(e,t))?r:null==(r=K.find.attr(e,t))?void 0:r:null!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+""),n):void K.removeAttr(e,t))},removeAttr:function(e,t){var n,o,r=0,a=t&&t.match(fe);if(a&&1===e.nodeType)for(;n=a[r++];)o=K.propFix[n]||n,K.expr.match.bool.test(n)&&(e[o]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!X.radioValue&&"radio"===t&&K.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?K.removeAttr(e,n):e.setAttribute(n,n),n}},K.each(K.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=nt[t]||K.find.attr;nt[t]=function(e,t,o){var r,a;return o||(a=nt[t],nt[t]=r,r=null!=n(e,t,o)?t.toLowerCase():null,nt[t]=a),r}}));var ot=/^(?:input|select|textarea|button)$/i;K.fn.extend({prop:function(e,t){return he(this,K.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[K.propFix[e]||e]}))}}),K.extend({propFix:{for:"htmlFor",class:"className"},prop:function(e,t,n){var o,r,a=e.nodeType;if(e&&3!==a&&8!==a&&2!==a)return(1!==a||!K.isXMLDoc(e))&&(t=K.propFix[t]||t,r=K.propHooks[t]),void 0!==n?r&&"set"in r&&void 0!==(o=r.set(e,n,t))?o:e[t]=n:r&&"get"in r&&null!==(o=r.get(e,t))?o:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||ot.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),X.optSelected||(K.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),K.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){K.propFix[this.toLowerCase()]=this}));var rt=/[\t\r\n\f]/g;K.fn.extend({addClass:function(e){var t,n,o,r,a,i,s="string"==typeof e&&e,l=0,c=this.length;if(K.isFunction(e))return this.each((function(t){K(this).addClass(e.call(this,t,this.className))}));if(s)for(t=(e||"").match(fe)||[];c>l;l++)if(o=1===(n=this[l]).nodeType&&(n.className?(" "+n.className+" ").replace(rt," "):" ")){for(a=0;r=t[a++];)o.indexOf(" "+r+" ")<0&&(o+=r+" ");i=K.trim(o),n.className!==i&&(n.className=i)}return this},removeClass:function(e){var t,n,o,r,a,i,s=0===arguments.length||"string"==typeof e&&e,l=0,c=this.length;if(K.isFunction(e))return this.each((function(t){K(this).removeClass(e.call(this,t,this.className))}));if(s)for(t=(e||"").match(fe)||[];c>l;l++)if(o=1===(n=this[l]).nodeType&&(n.className?(" "+n.className+" ").replace(rt," "):"")){for(a=0;r=t[a++];)for(;o.indexOf(" "+r+" ")>=0;)o=o.replace(" "+r+" "," ");i=e?K.trim(o):"",n.className!==i&&(n.className=i)}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(K.isFunction(e)?function(n){K(this).toggleClass(e.call(this,n,this.className,t),t)}:function(){if("string"===n)for(var t,o=0,r=K(this),a=e.match(fe)||[];t=a[o++];)r.hasClass(t)?r.removeClass(t):r.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,o=this.length;o>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(rt," ").indexOf(t)>=0)return!0;return!1}});var at=/\r/g;K.fn.extend({val:function(e){var t,n,o,r=this[0];return arguments.length?(o=K.isFunction(e),this.each((function(n){var r;1===this.nodeType&&(null==(r=o?e.call(this,n,K(this).val()):e)?r="":"number"==typeof r?r+="":K.isArray(r)&&(r=K.map(r,(function(e){return null==e?"":e+""}))),(t=K.valHooks[this.type]||K.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,r,"value")||(this.value=r))}))):r?(t=K.valHooks[r.type]||K.valHooks[r.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(r,"value"))?n:"string"==typeof(n=r.value)?n.replace(at,""):null==n?"":n:void 0}}),K.extend({valHooks:{option:{get:function(e){var t=K.find.attr(e,"value");return null!=t?t:K.trim(K.text(e))}},select:{get:function(e){for(var t,n,o=e.options,r=e.selectedIndex,a="select-one"===e.type||0>r,i=a?null:[],s=a?r+1:o.length,l=0>r?s:a?r:0;s>l;l++)if(!(!(n=o[l]).selected&&l!==r||(X.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&K.nodeName(n.parentNode,"optgroup"))){if(t=K(n).val(),a)return t;i.push(t)}return i},set:function(e,t){for(var n,o,r=e.options,a=K.makeArray(t),i=r.length;i--;)((o=r[i]).selected=K.inArray(o.value,a)>=0)&&(n=!0);return n||(e.selectedIndex=-1),a}}}}),K.each(["radio","checkbox"],(function(){K.valHooks[this]={set:function(e,t){return K.isArray(t)?e.checked=K.inArray(K(e).val(),t)>=0:void 0}},X.checkOn||(K.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),K.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){K.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}})),K.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,o){return this.on(t,e,n,o)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var it=K.now(),st=/\?/;K.parseJSON=function(e){return JSON.parse(e+"")},K.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)&&K.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())||[],K.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":K.parseJSON,"text xml":K.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?I(I(e,K.ajaxSettings),t):I(K.ajaxSettings,e)},ajaxPrefilter:P(mt),ajaxTransport:P(vt),ajax:function(e,t){function n(e,t,n,i){var l,u,v,y,x,E=t;2!==b&&(b=2,s&&clearTimeout(s),o=void 0,a=i||"",w.readyState=e>0?4:0,l=e>=200&&300>e||304===e,n&&(y=function(e,t,n){for(var o,r,a,i,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===o&&(o=e.mimeType||t.getResponseHeader("Content-Type"));if(o)for(r in s)if(s[r]&&s[r].test(o)){l.unshift(r);break}if(l[0]in n)a=l[0];else{for(r in n){if(!l[0]||e.converters[r+" "+l[0]]){a=r;break}i||(i=r)}a=a||i}return a?(a!==l[0]&&l.unshift(a),n[a]):void 0}(d,w,n)),y=function(e,t,n,o){var r,a,i,s,l,c={},u=e.dataTypes.slice();if(u[1])for(i in e.converters)c[i.toLowerCase()]=e.converters[i];for(a=u.shift();a;)if(e.responseFields[a]&&(n[e.responseFields[a]]=t),!l&&o&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=a,a=u.shift())if("*"===a)a=l;else if("*"!==l&&l!==a){if(!(i=c[l+" "+a]||c["* "+a]))for(r in c)if((s=r.split(" "))[1]===a&&(i=c[l+" "+s[0]]||c["* "+s[0]])){!0===i?i=c[r]:!0!==c[r]&&(a=s[0],u.unshift(s[1]));break}if(!0!==i)if(i&&e.throws)t=i(t);else try{t=i(t)}catch(e){return{state:"parsererror",error:i?e:"No conversion from "+l+" to "+a}}}return{state:"success",data:t}}(d,y,w,l),l?(d.ifModified&&((x=w.getResponseHeader("Last-Modified"))&&(K.lastModified[r]=x),(x=w.getResponseHeader("etag"))&&(K.etag[r]=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]),--K.active||K.event.trigger("ajaxStop")))}"object"==typeof e&&(t=e,e=void 0),t=t||{};var o,r,a,i,s,l,c,u,d=K.ajaxSetup({},t),f=d.context||d,p=d.context&&(f.nodeType||f.jquery)?K(f):K.event,h=K.Deferred(),g=K.Callbacks("once memory"),m=d.statusCode||{},v={},y={},b=0,x="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!i)for(i={};t=ft.exec(a);)i[t[1].toLowerCase()]=t[2];t=i[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a: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 o&&o.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=K.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=K.param(d.data,d.traditional)),j(mt,d,t,w),2===b)return w;for(u in(c=d.global)&&0==K.active++&&K.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!pt.test(d.type),r=d.url,d.hasContent||(d.data&&(r=d.url+=(st.test(r)?"&":"?")+d.data,delete d.data),!1===d.cache&&(d.url=dt.test(r)?r.replace(dt,"$1_="+it++):r+(st.test(r)?"&":"?")+"_="+it++)),d.ifModified&&(K.lastModified[r]&&w.setRequestHeader("If-Modified-Since",K.lastModified[r]),K.etag[r]&&w.setRequestHeader("If-None-Match",K.etag[r])),(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(o=j(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,o.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 K.get(e,t,n,"json")},getScript:function(e,t){return K.get(e,void 0,t,"script")}}),K.each(["get","post"],(function(e,t){K[t]=function(e,n,o,r){return K.isFunction(n)&&(r=r||o,o=n,n=void 0),K.ajax({url:e,type:t,dataType:r,data:n,success:o})}})),K.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],(function(e,t){K.fn[t]=function(e){return this.on(t,e)}})),K._evalUrl=function(e){return K.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},K.fn.extend({wrapAll:function(e){var t;return K.isFunction(e)?this.each((function(t){K(this).wrapAll(e.call(this,t))})):(this[0]&&(t=K(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(K.isFunction(e)?function(t){K(this).wrapInner(e.call(this,t))}:function(){var t=K(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=K.isFunction(e);return this.each((function(n){K(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(){return this.parent().each((function(){K.nodeName(this,"body")||K(this).replaceWith(this.childNodes)})).end()}}),K.expr.filters.hidden=function(e){return e.offsetWidth<=0&&e.offsetHeight<=0},K.expr.filters.visible=function(e){return!K.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;K.param=function(e,t){var n,o=[],r=function(e,t){t=K.isFunction(t)?t():null==t?"":t,o[o.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=K.ajaxSettings&&K.ajaxSettings.traditional),K.isArray(e)||e.jquery&&!K.isPlainObject(e))K.each(e,(function(){r(this.name,this.value)}));else for(n in e)F(n,e[n],t,r);return o.join("&").replace(bt,"+")},K.fn.extend({serialize:function(){return K.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=K.prop(this,"elements");return e?K.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!K(this).is(":disabled")&&Ct.test(this.nodeName)&&!Et.test(e)&&(this.checked||!Ee.test(e))})).map((function(e,t){var n=K(this).val();return null==n?null:K.isArray(n)?K.map(n,(function(e){return{name:t.name,value:e.replace(wt,"\r\n")}})):{name:t.name,value:n.replace(wt,"\r\n")}})).get()}}),K.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(e){}};var Lt=0,At={},St={0:200,1223:204},Tt=K.ajaxSettings.xhr();o.ActiveXObject&&K(o).on("unload",(function(){for(var e in At)At[e]()})),X.cors=!!Tt&&"withCredentials"in Tt,X.ajax=Tt=!!Tt,K.ajaxTransport((function(e){var t;return X.cors||Tt&&!e.crossDomain?{send:function(n,o){var r,a=e.xhr(),i=++Lt;if(a.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(r in e.xhrFields)a[r]=e.xhrFields[r];for(r in e.mimeType&&a.overrideMimeType&&a.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest"),n)a.setRequestHeader(r,n[r]);t=function(e){return function(){t&&(delete At[i],t=a.onload=a.onerror=null,"abort"===e?a.abort():"error"===e?o(a.status,a.statusText):o(St[a.status]||a.status,a.statusText,"string"==typeof a.responseText?{text:a.responseText}:void 0,a.getAllResponseHeaders()))}},a.onload=t(),a.onerror=t("error"),t=At[i]=t("abort");try{a.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}:void 0})),K.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return K.globalEval(e),e}}}),K.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),K.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain)return{send:function(o,r){t=K("<script>").prop({async:!0,charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&r("error"===e.type?404:200,e.type)}),Y.head.appendChild(t[0])},abort:function(){n&&n()}}}));var kt=[],Nt=/(=)\?(?=&|$)|\?\?/;K.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=kt.pop()||K.expando+"_"+it++;return this[e]=!0,e}}),K.ajaxPrefilter("json jsonp",(function(e,t,n){var r,a,i,s=!1!==e.jsonp&&(Nt.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Nt.test(e.data)&&"data");return s||"jsonp"===e.dataTypes[0]?(r=e.jsonpCallback=K.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(Nt,"$1"+r):!1!==e.jsonp&&(e.url+=(st.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return i||K.error(r+" was not called"),i[0]},e.dataTypes[0]="json",a=o[r],o[r]=function(){i=arguments},n.always((function(){o[r]=a,e[r]&&(e.jsonpCallback=t.jsonpCallback,kt.push(r)),i&&K.isFunction(a)&&a(i[0]),i=a=void 0})),"script"):void 0})),K.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||Y;var o=re.exec(e),r=!n&&[];return o?[t.createElement(o[1])]:(o=K.buildFragment([e],t,r),r&&r.length&&K(r).remove(),K.merge([],o.childNodes))};var Ot=K.fn.load;K.fn.load=function(e,t,n){if("string"!=typeof e&&Ot)return Ot.apply(this,arguments);var o,r,a,i=this,s=e.indexOf(" ");return s>=0&&(o=K.trim(e.slice(s)),e=e.slice(0,s)),K.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(r="POST"),i.length>0&&K.ajax({url:e,type:r,dataType:"html",data:t}).done((function(e){a=arguments,i.html(o?K("<div>").append(K.parseHTML(e)).find(o):e)})).complete(n&&function(e,t){i.each(n,a||[e.responseText,t,e])}),this},K.expr.filters.animated=function(e){return K.grep(K.timers,(function(t){return e===t.elem})).length};var Dt=o.document.documentElement;K.offset={setOffset:function(e,t,n){var o,r,a,i,s,l,c=K.css(e,"position"),u=K(e),d={};"static"===c&&(e.style.position="relative"),s=u.offset(),a=K.css(e,"top"),l=K.css(e,"left"),("absolute"===c||"fixed"===c)&&(a+l).indexOf("auto")>-1?(i=(o=u.position()).top,r=o.left):(i=parseFloat(a)||0,r=parseFloat(l)||0),K.isFunction(t)&&(t=t.call(e,n,s)),null!=t.top&&(d.top=t.top-s.top+i),null!=t.left&&(d.left=t.left-s.left+r),"using"in t?t.using.call(e,d):u.css(d)}},K.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){K.offset.setOffset(this,e,t)}));var t,n,o=this[0],r={top:0,left:0},a=o&&o.ownerDocument;return a?(t=a.documentElement,K.contains(t,o)?(typeof o.getBoundingClientRect!==Ce&&(r=o.getBoundingClientRect()),n=M(a),{top:r.top+n.pageYOffset-t.clientTop,left:r.left+n.pageXOffset-t.clientLeft}):r):void 0},position:function(){if(this[0]){var e,t,n=this[0],o={top:0,left:0};return"fixed"===K.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),K.nodeName(e[0],"html")||(o=e.offset()),o.top+=K.css(e[0],"borderTopWidth",!0),o.left+=K.css(e[0],"borderLeftWidth",!0)),{top:t.top-o.top-K.css(n,"marginTop",!0),left:t.left-o.left-K.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent||Dt;e&&!K.nodeName(e,"html")&&"static"===K.css(e,"position");)e=e.offsetParent;return e||Dt}))}}),K.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},(function(e,t){var n="pageYOffset"===t;K.fn[e]=function(r){return he(this,(function(e,r,a){var i=M(e);return void 0===a?i?i[t]:e[r]:void(i?i.scrollTo(n?o.pageXOffset:a,n?a:o.pageYOffset):e[r]=a)}),e,r,arguments.length,null)}})),K.each(["top","left"],(function(e,t){K.cssHooks[t]=L(X.pixelPosition,(function(e,n){return n?(n=C(e,t),Re.test(n)?K(e).position()[t]+"px":n):void 0}))})),K.each({Height:"height",Width:"width"},(function(e,t){K.each({padding:"inner"+e,content:t,"":"outer"+e},(function(n,o){K.fn[o]=function(o,r){var a=arguments.length&&(n||"boolean"!=typeof o),i=n||(!0===o||!0===r?"margin":"border");return he(this,(function(t,n,o){var r;return K.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(r=t.documentElement,Math.max(t.body["scroll"+e],r["scroll"+e],t.body["offset"+e],r["offset"+e],r["client"+e])):void 0===o?K.css(t,n,i):K.style(t,n,o,i)}),t,a?o:void 0,a,null)}}))})),K.fn.size=function(){return this.length},K.fn.andSelf=K.fn.addBack,void 0===(n=function(){return K}.apply(t,[]))||(e.exports=n);var qt=o.jQuery,$t=o.$;return K.noConflict=function(e){return o.$===K&&(o.$=$t),e&&o.jQuery===K&&(o.jQuery=qt),K},typeof r===Ce&&(o.jQuery=o.$=K),K},"object"==typeof e.exports?e.exports=o.document?r(o,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return r(e)}:r(o)},816:()=>{function e(e){return null==e||null==e||""==e||"string"==typeof e&&""==e.trim()}function t(e){var t=$(e).closest("[data-back-to-top-container]").offset();null!=t?$("html,body").animate({scrollTop:t.top},700):$("html,body").animate({scrollTop:0},700)}function n(e){$("html,body").animate({scrollTop:$(window).height()-$("#agora-layout-header").height()},700)}agora((function(){function o(){var e=$(this),t=$("#"+e.data("page-scroll")),n=null!=t&&null!=t&&t.length>0?t.offset().top:0,o=0;try{var r=e.data("page-scroll-offset");o=void 0!==r&&""!=r?parseInt(r):$("#agora-layout-header").height()}catch(e){}$("html, body").animate({scrollTop:n-o},1500);try{$("#"+e.data("page-scroll-tab-id")).trigger("click")}catch(e){}}jQuery.fn.ForceNumericOnly=function(){return this.each((function(){$(this).keydown((function(e){var t=e.charCode||e.keyCode||0;return e.shiftKey&&(t=0),8==t||9==t||13==t||46==t||110==t||190==t||t>=35&&t<=40||t>=48&&t<=57||t>=96&&t<=105}))}))},$("[data-numeric-only]").ForceNumericOnly(),$(document).ready((function(){$("[data-numeric-only]").ForceNumericOnly()})),$(document).on("click","[data-page-scroll]",o),$(document).on("tap","[data-page-scroll]",o),$(document).on("click","[data-back-to-top]",(function(){t(this)})),$(document).on("tap","[data-back-to-top]",(function(){t(this)})),$(document).on("click","[data-back-to-down]",(function(){n()})),$(document).on("tap","[data-back-to-down]",(function(){n()})),$(document).on("click","[data-href]",(function(t){$(t.target).closest("[data-non-click-content]").length>0||e($(this).data("href"))||(e($(this).data("target"))?location.href=$(this).data("href"):window.open($(this).data("href"),$(this).data("target")))}))}))},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:()=>{function e(e){return null!=e&&null!=e&&e.length>0&&"0"!=e&&0!=e}window.agRequest={GET:async function(e,t){var n="";for(var o in t)n=n+(""!=n?"&":"")+o+"="+t[o];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 o in t)n.append(o,t[o]);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 o=function(){!async function(e,n){var o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";if(await async function(e){var t=e.getBoundingClientRect(),n=document.body,o=document.documentElement,r=window.pageYOffset||o.scrollTop||n.scrollTop,a=(window.pageXOffset||o.scrollLeft||n.scrollLeft,o.clientTop||n.clientTop||0),i=(o.clientLeft||n.clientLeft,t.top+r-a),s=t.bottom+r-a;let l=r,c=l+window.innerHeight;return s>l&&i<c}(e)){if(null==e)return;var r=await async function(e,n){if(null==n)return null;var o=n.hasAttribute("data-ratio-auto");if(o||"VIDEO"==n.nodeName||"OBJECT"==n.nodeName)return{url:e};var r=await t(n,16,9,1);if(null==r)return null;var a=/.*\?(.*?(mh|mw)\=(\d+))*/gi.exec(e),i="";null!=n.getAttribute("data-crop")&&(i+="&mode=crop");e.indexOf("/"),0;return null!=a?{url:e,size:r}:{url:`${e}?`+(r.width>0?"mw="+r.width*r.scale+(r.height>0?"&":""):"")+(r.height>0?"mh="+r.height*r.scale:"")+`${i}`,size:r}}(e.getAttribute("data-src"),e);e.setAttribute("data-src",r.url),"VIDEO"==e.nodeName||"OBJECT"==e.nodeName||"AUDIO"==e.nodeName?e.setAttribute("src",r.url):"IMG"==e.nodeName?(e.addEventListener("load",(function(){e.getAttribute("src")!=o&&e.classList.add("ag-lazy-s")})),e.setAttribute("src",o),null!=r&&(r.size&&(r.size.width>0&&e.setAttribute("width",r.size.width),r.size.height>0&&e.setAttribute("height",r.size.height)),e.setAttribute("src",r.url))):e.style["background-image"]=`url('${r.url}')`,n()}new IntersectionObserver((function(){console.log(e,"View")}),{root:null,rootMargin:"0px",threshold:.1})}(e,(function(){document.body.removeEventListener("ag.lazy",o)}))};document.body.addEventListener("ag.lazy",o),o()}))}async function t(e,n,o,r){if(null==e)return null;var a=e.getBoundingClientRect(),i=e.getAttribute("data-ratio"),s=e.getAttribute("data-scale");null!=s&&(r=parseFloat(s));var l=null;i&&null!=i&&null!=(l=/^(?<width>[0-9\.]{1,4}):(?<height>[0-9\.]{1,4})$/gi.exec(i))&&(0==(n=parseFloat(l.groups.width))&&(n=-1),0==(o=parseFloat(l.groups.height))&&(o=-1));var c=a.width,u=a.height;return e.classList.contains("ag-lazy")&&(c=e.getAttribute("width"),u=e.getAttribute("height"),null!=c&&null!=c&&""!=c||(c=e.style.width),c=null==c||null==c||""==c?0:parseInt(c.replace(/[^\d]+/gi,"")),u=null==u||null==u||""==u?0:parseInt(u.replace(/[^\d]+/gi,""))),c!=u&&(null==c||null==u||u<c/n*o||c<u/o*n)&&(c>0?u=c/n*o:c=u/o*n),(c>0||n<0)&&(u>0||o<0)?(c=Math.floor(c),u=Math.floor(u),{width:n<0?0:c+(10-c%10),height:o<0?0:u+(10-u%10),scale:r}):await t(e.parentElement,n,o,r)}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"),o=e.parentElement,r=o.parentElement;o.querySelectorAll(".item-tab-b").forEach((e=>{e.classList.remove("active")})),r.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 o;o=n,e.classList.toggle("active"),t.forEach(((e,t)=>{t!==o&&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)}}(),async function(){window.addEventListener("scroll",(async function(){window.scrollY>10?document.body.classList.add("scroll"):document.body.classList.remove("scroll")}))}(),async function(){async function e(){if(null!=document.querySelector(".burger-c")){async function e(){if(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")),null!=document.querySelector(".item-uc")){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(){if(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")),null!=document.querySelector(".item-uc")){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()}}e(),window.addEventListener("resize",e)}(),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 o=document.createElement("span");o.classList.add("ripple"),o.style.left=t+"px",o.style.top=n+"px",this.appendChild(o),setTimeout((function(){o.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")}))}))}(),async function(){null!=document.querySelector(".expand-more")&&(document.querySelector(".expand-more").addEventListener("click",(function(e){this.closest(".subnav").classList.toggle("responsive")})),document.querySelectorAll(".subnav > a").forEach((e=>{e.addEventListener("click",(function(e){this.closest(".subnav").classList.remove("responsive")}))})))}(),async function(){if(null!=document.querySelector(".label-sel")){document.querySelectorAll(".label-sel").forEach((e=>{e.querySelector(".item-select").addEventListener("change",(function(){e.classList.add("active")}))}))}}(),window.agSlider=function(e,t,n){var o={autoPlay:!1,autoPlayDelay:3e3,loop:!1,showControls:!0,btnLeft:".left-btn",btnRight:".right-btn",showBullets:!1,showBulletsAsThumb:!1,bulletContainer:".bullets",itemWrapper:".agy-caro-in",wrapperMask:0,itemContainer:".agy-caro-it"};null!=e&&null!=e&&(o=function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}(o,e)),null!=t&&null!=t||(t=".agy-caro");for(var r=document.querySelectorAll(t),a=0;null!=r&&null!=r&&r.length>a;a++)i(r[a]);function i(e){var t=e.querySelector(o.itemWrapper),r=t.querySelectorAll(o.itemContainer).length,a=t.querySelector(o.itemContainer).offsetWidth,i=Math.round(t.offsetWidth/a),s=0,l=r,c=null!=o.btnLeft&&null!=o.btnLeft?e.querySelector(o.btnLeft):null,u=null!=o.btnRight&&null!=o.btnRight?e.querySelector(o.btnRight):null,d=!1,f=t.offsetWidth==a,p=!1,h=0;!isNaN(o.wrapperMask)&&o.wrapperMask>0&&(o.wrapperMask=o.wrapperMask>100?100:o.wrapperMask,t.style.scrollPadding=o.wrapperMask+"%",r>2&&(p=!0));for(var g=t.querySelectorAll(o.itemContainer),m=0;m<g.length;m++)g[m].classList.add("idx-"+m),p&&m==g.length-1&&(t.prepend(g[m]),h=t.scrollLeft);if(null!=c&&(o.showControls||(c.style.display="none"),c.addEventListener("click",(()=>{(0!=s||o.loop)&&(0==s?(t.scrollLeft=a*(r-1),A(a*(r-i))):(t.scrollLeft=t.scrollLeft+-a,A(f?(s-1)*a:t.scrollLeft+-a)))}))),null!=u&&(o.showControls||(u.style.display="none"),u.addEventListener("click",(()=>{(l!=r-1||o.loop)&&(l==r-1?(t.scrollLeft=0,A(h)):(t.scrollLeft=t.scrollLeft+ +a,A(f?(s+1)*a:t.scrollLeft+ +a)))}))),o.showBullets){if(null==e.querySelector(o.bulletContainer)||null==e.querySelector(o.bulletContainer))return void(o.showBullets=!1);for(m=0;m<Math.round(r/i);m++){var v=o.showBulletsAsThumb||f?document.createElement("div"):document.createElement("button");if(v.classList.add("dot"),v.classList.add("idx-"+m),v.setAttribute("idx",m),o.showBulletsAsThumb&&f){var y=document.createElement("img"),b=null!=t.querySelector(o.itemContainer+".idx-"+m+" img")?t.querySelector(o.itemContainer+".idx-"+m+" img"):t.querySelector(o.itemContainer+".idx-"+m+" video");y.setAttribute("src","IMG"==b.nodeName?b.getAttribute("data-src"):b.getAttribute("poster")),v.appendChild(y)}0==m&&v.classList.add("active"),v.addEventListener("click",(e=>{L(parseInt(e.currentTarget.getAttribute("idx")))})),e.querySelector(o.bulletContainer).appendChild(v)}}if(o.showBulletsAsThumb){var x=e.querySelector(o.bulletContainer).querySelector(".dot").offsetWidth;null!=c&&c.addEventListener("click",(()=>{e.querySelector(o.bulletContainer).scrollLeft-=x})),null!=u&&u.addEventListener("click",(()=>{e.querySelector(o.bulletContainer).scrollLeft+=x}));var w,E,C=!1;e.querySelector(o.bulletContainer).addEventListener("mousedown",(t=>{C=!0,e.querySelector(o.bulletContainer).classList.add("dragging"),w=t.pageX,E=e.querySelector(o.bulletContainer).scrollLeft})),e.querySelector(o.bulletContainer).addEventListener("mousemove",(t=>{C&&(e.querySelector(o.bulletContainer).scrollLeft=E-(t.pageX-w))})),document.addEventListener("mouseup",(()=>{C=!1,e.querySelector(o.bulletContainer).classList.remove("dragging")}))}function L(e){e,o.autoPlay=!1,d=!0,t.scrollLeft=e*i*a,A(e*i*a)}function A(n){s=Math.round((n-h)/a),l=Math.round(s+i-1);for(var f=0;f<r;f++){if(t.querySelector(o.itemContainer+".idx-"+f).classList.remove("active"),f>=s&&f<=l){if(f<=l-(p?1:0)&&(t.querySelector(o.itemContainer+".idx-"+f).classList.add("active"),null!=t.querySelector(o.itemContainer+".idx-"+f+" video"))){var g=t.querySelector(o.itemContainer+".idx-"+f+" video");g.setAttribute("src",g.getAttribute("data-src")),g.pause(),g.currentTime=0,g.play(),d=!0,g.addEventListener("ended",(function(e){d=!1}),!1)}t.querySelectorAll(o.itemContainer+".idx-"+f+" img").forEach((e=>{e.setAttribute("src",e.getAttribute("data-src"))}))}p&&0==f&&t.querySelectorAll(o.itemContainer+".idx-"+(r-1)+" img").forEach((e=>{e.setAttribute("src",e.getAttribute("data-src"))}))}if(0!=s||o.loop?c.classList.remove("disabled"):c.classList.add("disabled"),l!=r-1||o.loop?u.classList.remove("disabled"):u.classList.add("disabled"),o.showBullets)for(f=0;f<Math.round(r/i);f++)f!=Math.round((s+i)/i)-1?e.querySelector(o.bulletContainer+" .dot.idx-"+f).classList.remove("active"):e.querySelector(o.bulletContainer+" .dot.idx-"+f).classList.add("active")}o.autoPlay&&(!function e(){setTimeout((function(){d||u.click(),e()}),o.autoPlayDelay)}(),t.addEventListener("mouseenter",(function(){t.offsetWidth!=a&&(d=!0)})),t.addEventListener("mouseleave",(function(){t.offsetWidth!=a&&(d=!1)}))),A(t.scrollLeft),null!=n&&null!=n&&n(e)}},agora((function(){n(),$(document).on("click","[data-for]",(function(e){try{var t=$(this).data("for");$('[for="'+t+'"]').trigger("click")}catch(e){}}))})),Date.prototype.yyyymmddhhmmss=function(){var e=this.getFullYear(),t=this.getMonth()<9?"0"+(this.getMonth()+1):this.getMonth()+1,n=this.getDate()<10?"0"+this.getDate():this.getDate(),o=this.getHours()<10?"0"+this.getHours():this.getHours(),r=this.getMinutes()<10?"0"+this.getMinutes():this.getMinutes(),a=this.getSeconds()<10?"0"+this.getSeconds():this.getSeconds();return"".concat(e).concat(t).concat(n).concat(o).concat(r).concat(a)},async function(){var e=!1;async function t(){var e=null;return null!=window.localStorage.getItem("AGUSER")&&(e=JSON.parse(window.localStorage.getItem("AGUSER"))),null!=e&&document.body.classList.contains("restricted-listing")&&document.body.classList.remove("restricted-listing"),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,e.LoginAgent&&(t.LoginAgent={Key:e.LoginAgent.Key,Email:e.LoginAgent.Email,Name:e.LoginAgent.Name}),window.localStorage.setItem("AGUSER",JSON.stringify(t)),async function(){}(),o()}}async function o(){document.querySelectorAll("[ag-user]").forEach((function(n){!async function(n){n.classList.add("is-applied");n.cloneNode(!0);var o=await t();if(null!=o){!async function(){e?r():document.body.addEventListener("ag.sync.verified.contact",(function(){r()}));document.body.addEventListener("ag.lazy.refresh",(function(){r()})),document.body.addEventListener("ag.user.refresh.collection",(function(){r(!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 a("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 o=t.n("span");return o.n("span").h("Hi, "+e.Name),o.n("input").a("type","hidden").a("id","CONTACT_GUID").a("value",e.Guid),o.n("a").a("href","/dashboard/default.aspx").h("Dashboard"),o.n("span").a("data-modaldialog-src","/dashboard/EditProfile.aspx").a("data-modaldialog-ajax","true").a("data-modaldialog","").h("Edit Profile"),o.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}(o);n.parentElement.insertBefore(i,n),n.remove(),function(e){null!=document.querySelector('[node="FirstName"]')&&null!=document.querySelector('[node="FirstName"]')&&(document.querySelector('[node="FirstName"]').value=e.FirstName??"");null!=document.querySelector('[node="LastName"]')&&null!=document.querySelector('[node="LastName"]')&&(document.querySelector('[node="LastName"]').value=e.LastName??"");null!=document.querySelector('[node="Email"]')&&null!=document.querySelector('[node="Email"]')&&(document.querySelector('[node="Email"]').value=e.Email??"");null!=document.querySelector('[node="MobilePhone"]')&&null!=document.querySelector('[node="MobilePhone"]')&&(document.querySelector('[node="MobilePhone"]').value=e.MobilePhone??"")}(o)}}(n)}))}async function r(e){var t=await async function(e,t){return new Promise((async function(n,o){var r=null,a=t?null:window.localStorage.getItem("AGUSERCOLLECTION"+e);null==a?(r=await window.agRequest.GET("/services/agoraClient.ashx",{type:"USERCOLLECTION",collectionType:e}),window.localStorage.setItem("AGUSERCOLLECTION"+e,JSON.stringify(r)),n(r)):n(r=JSON.parse(a))}))}(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 a(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)})),a.prototype.a=function(e,t){return this.node.setAttribute(e,t),this},a.prototype.n=function(e){var t=new a(e);return this.node.appendChild(t.node),t},a.prototype.h=function(e){return this.node.innerHTML=e,this},a.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"))}}},o(),document.body.addEventListener("ag.sync.check",(async function(){var n=await t(),o=window.localStorage.getItem("AGSYNC");null==o||null==n||JSON.parse(o).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,agentkey:n.LoginAgent?n.LoginAgent.Key:"",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),o=new Date;if(o.setMinutes(o.getMinutes()-1),n>o)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()}()}(),async function(){async function e(){var e=window.localStorage.getItem("AGUSERCOUNTRY");if(null==e)!async function(){var e=await window.agRequest.GET("https://ip-service.idcrealestate.com/ip",{});e.updatedOn=new Date,window.localStorage.setItem("AGUSERCOUNTRY",JSON.stringify(e)),document.body.dispatchEvent(new CustomEvent("ag.language.country.auto-discovery",{detail:e}))}();else{var t=JSON.parse(e);document.body.dispatchEvent(new CustomEvent("ag.language.country.auto-discovery",{detail:t}))}}!async function(){e()}()}(),async function(){var e=new RegExp("(?<Guid>[A-z0-9\\-]+)\\|(?<AgentKey>[0-9]+)","gi");async function t(){var t=window.location.hash;if(!(t.length<1)){var n,o=atob(t.substring(1));if(console.log(o),null!=(n=e.exec(o)))!async function(e,t){document.body.classList.add("is-busy");var n=await window.agRequest.POST("/services/agoraAccess.ashx",{action:"RemoteSignIn",contactguid:e,agentkey:t});n.Contact&&(document.body.dispatchEvent(new CustomEvent("ag.user.in",{detail:n.Contact})),window.location.href="/dashboard/default.aspx#saved-searches")}(n.groups.Guid,n.groups.AgentKey);else if(""!=t&&t.length>0){var r=document.querySelector('[data-tab="'+t.substring(1)+'"]');null!=r&&r.click()}}}!async function(){t(),window.addEventListener("hashchange",t)}()}();var t=new CustomEvent("onAgoraLoad");function n(){$("[data-webactivity]").each((function(){if("true"!==$(this).attr("data-processed")){var e=$(this).attr("data-webactivity"),t=[];$.each(this.attributes,(function(){if(this.name.startsWith("data-webactivity-")){var e=this.name.substring(17),n=this.value;t.push({name:e,value:n})}})),function(e,t,n,o){var r=[];if(o&&o.length>0){var a={TrackType:e,ObjectType:t,ObjectActivityType:n};o.forEach((function(e){a[e.name]=e.value})),r.push(a)}$.ajax({type:"POST",url:"/tracker",data:{track:JSON.stringify(r)},dataType:"json",success:function(e){console.log("Tracking successful:",e)},error:function(e){console.error("Tracker not found!",e)}})}("WEBACTIVITY","PROPERTY",e,t),$(this).attr("data-processed","true")}}))}if(document.dispatchEvent(t),document.isAgoraLoaded=!0,t=new CustomEvent("onCssLoad"),document.dispatchEvent(t),document.isCssLoaded=!0,function(){function t(t,n,o,r){if(!t.closest("div[contenteditable]").attr("contenteditable")&&void 0!==n||void 0!==o)switch((r=void 0!==r?r:"gallery").toLowerCase()){case"gallery":var a=t.find('[data-sort-object="CMNCMN"]');("undefined"!=a&&null!=a&&a.length>0||!n.match(/(^|\/)(d)?sort\-[a-z]+/g))&&(n=(function(t){var n=t.find('[data-sort-object="CMNCMN"]');if("undefined"!=n&&null!=n&&n.length>0&&e(n.val()))return n.val();return function(e){switch(e){case"PROPERTY":case"COMMUNITY":case"PROPERTYRENT":return"/dsort-p";case"AGENT":case"AGENTTEAM":case"OFFICE":return"/sort-n"}return""}("PROPERTY")}(t)+"/"+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:o},dataType:"html",success:function(a){if(!t.closest("div[contenteditable]").attr("contenteditable")){var i='<section class="result-page" data-ck-propertylist="" data-ck-demand-key="'+o+'" data-ck-property-url="'+n+'" data-ck-demand-layout="'+r+'">'+a+"</section>";t.after(i),t.remove(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom(),$('[data-ck-demand-key="'+o+'"] #propertyGrid').each((function(){$(this).find(".property:not(.init)").each((function(){!function(t){var n=t,o=n.find(".slides");o.attr("data-css-slider","0");var r=n.find("[data-mk]").data("mk"),a=n.find("[data-mlsboard]").data("mlsboard"),i=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");e(l)||(l="/images/company/"+s+"/NoPhotoImage/image-not-found.jpg");var u=parseInt(o.data("value"),10),d=n.closest("[id]"),f=0==n.length?"un":d.attr("id").replace(/\$/gi,"");(function(e,t,n,o,r,a,i,s){var l=0,c=n+o+r+"_";$('<input type="radio" aria-label="'+c+'slider" name="'+c+'slider" id="'+(c+l)+'" checked />').appendTo(a);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="'+i+'"></a></div></div></li>');function g(){var e=$(this);f.off("click"),d.off("click"),$.ajax({url:"/services/agoraPropertyPhotos.aspx",data:{mlsboard:o,mlsno:r,container:c},success:function(t){a.append(t),e.trigger("click")}})}h.append(u),h.appendTo(a)})(l,u,f+(new Date).getMilliseconds(),a,r,o,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:o},dataType:"html",success:function(e){if(!t.closest("div[contenteditable]").attr("contenteditable")){var a='<section class="result-page" data-ck-propertylist="" data-ck-demand-key="'+o+'" data-ck-property-url="'+n+'" data-ck-demand-layout="'+r+'">'+e+"</section>";t.after(a),$('[data-query-list]:not(.init)[data-service-url][data-rt^="CMN"]').each((function(){$(this).trigger("init"),$(this).addClass("init")})),t.remove(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom()}},error:function(){ShowLoading()}})}}$("img[data-demand-key]").each((function(){t($(this),$(this).data("demand-url"),$(this).data("demand-key"),$(this).data("layout"))})),$(document).on("click","[data-ck-href]",null,(function(){t($(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",longCode:"BHS",label:"Bahamas",currency:"BSD",language:"en",messurement:"metric"},{code:"CA",longCode:"CAN",label:"Canada",currency:"CAD",language:["en","fr"],messurement:"metric",states:{QC:"fr"}},{code:"JM",longCode:"JAM",label:"Jamaica",currency:"JMD",language:"en",messurement:"metric"},{code:"KY",longCode:"CYM",label:"Cayman Islands",currency:"KYD",language:"en",messurement:"metric"},{code:"TC",longCode:"TCA",label:"Turks & Caicos Islands",localLabel:"",currency:"USD",language:"en",messurement:"imperial"},{code:"US",longCode:"USA",label:"United States",localLabel:"",currency:"USD",language:"en",messurement:"imperial"},{code:"DY",longCode:"DOM",label:"Dominican Republic",localLabel:"República Dominicana",currency:"USD",language:"en",messurement:"metric"},{code:"ES",longCode:"ESP",label:"Spain",localLabel:"España",currency:"EUR",language:"en",messurement:"metric"},{code:"MX",longCode:"MEX",label:"Mexico",localLabel:"México",currency:"MXN",language:"en",messurement:"metric"},{code:"PA",longCode:"PAN",label:"Panama",localLabel:"Panamá",currency:"PAB",language:"en",messurement:"metric"},{code:"NL",longCode:"NLD",label:"Nederlands",localLabel:"Nederland",currency:"EUR",language:"en",messurement:"metric"},{code:"PT",longCode:"PRT",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","square feet","square feets"]},{unit:"MI",tragetUnit:"KM",constant:1.60934,notation:["mi","miles","mile"]},{unit:"AC",tragetUnit:"Sq.M",constant:4046.86,notation:["acre","acres"]}]},o=null;async function r(){var e=x();if(null==o&&(o=Object.assign({},e)),e?.language==o?.language){o=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}(),o=x();if(null!=n){var r=new Date;if(r.setHours(r.getHours()-1),new Date(n.updatedOn)>r&&n.Locale.indexOf(o.language)>-1)return void e(n)}(n=await k("/services/agoraClient.ashx",{type:"LABELS"})).updatedOn=new Date,a(n),e(n)}))}();e?.language&&-1==t.Locale.indexOf(e.language)&&(await L("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"),o=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 r=n;null!=(o=s.exec(r));)r=r.replace(o[0],t[o.groups.LabelID]?t[o.groups.LabelID].lbl:"");e.childNodes[0].textContent=r}else e.childNodes[0].textContent=t[n]?t[n].lbl:"";else if(t[n]){var a=document.createElement("span");a.innerHTML=t[n].lbl,l(e,a)}for(var c=0;c<e.attributes.length;c++){var u=e.attributes[c];if(i.lastIndex=0,null!=(o=i.exec(u.name))){for(var d=o.groups.Attribute,f=u.value;null!=(o=s.exec(f));)f=f.replace(o[0],t[o.groups.LabelID]?t[o.groups.LabelID].lbl:"");e.setAttribute(d,f)}}e&&null!=e&&e.dispatchEvent(new CustomEvent("ag.language.update.item"))}(e,t.Labels)}))}else setTimeout((function(){window.location.reload()}),1e3)}async function a(e){window.localStorage.setItem("LOCALLABELS",JSON.stringify(e))}var i=/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=await async function(){return new Promise((async function(e,t){var n=localStorage.getItem("CONVERTIONRATES"),o=null;if(n&&null!=n){o=JSON.parse(n);var r=new Date;if(r.setDate(r.getDate()-1),new Date(o.updatedOn)>r)return void e(o)}(o=await k("/services/agoraClient.ashx",{type:"CONVERTIONRATES"})).updatedOn=(new Date).toISOString(),localStorage.setItem("CONVERTIONRATES",JSON.stringify(o)),e(o)}))}(),o=x();if(o.currency){var r=t.Rates?.ExchangeRates?.filter((function(e){return e.Code==o.currency}))[0],a=n.currencies.filter((function(e){return e.code==o.currency}))[0];a&&(r.formatter=d(a.format));var i=r.Code,s=e?document.querySelectorAll('[ag-l-p]:not(.is-applied):not([ag-l-p="0"])'):document.querySelectorAll('[ag-l-p]:not([ag-l-p="0"])');s&&s.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||(async function(e){if(!e.classList.contains("is-applied")){var t=e.getBoundingClientRect(),n=null,o=null!=(n=e.closest("article"))&&n.length>0?n[0].getBoundingClientRect():e.parentElement?.getBoundingClientRect(),r={y:(o.top+o.bottom)/2,x:(o.left+o.right)/2},a={y:(t.top+t.bottom)/2,x:(t.left+t.right)/2},i="ag-l-p-p";i+="-"+(r.x>a.x?"l":"r"),i+="-"+(r.y>a.y?"b":"t"),e.classList.add(i)}}(e),e.classList.add("is-applied"),async function(e,t,o,r){var a=null!=e.getAttribute("ag-l-p-c")&&(null==e.getAttribute("ag-l-p-o")&&null==e.getAttribute("ag-l-p-o-p")||e.getAttribute("ag-l-p-o-p")!=e.getAttribute("ag-l-p"))&&e.getAttribute("ag-l-p-c")!=o;if(e.getAttribute("ag-l-p-c")==o&&a&&u.test(e.textContent))return;var i=e.getAttribute("ag-l-p-c"),s=1,l=null;try{l=r.Rates?.ExchangeRates?.filter((function(e){return e.Code==i}))[0];var c=n.currencies.filter((function(e){return e.code==l.Code}))[0];c&&(l.formatter=d(c.format)),s=l.Constant}catch(e){}for(var f=0;f<e.childNodes.length;f++){var p=e.childNodes[f],h=null;if(u.lastIndex=0,p.textContent&&null!=(h=u.exec(p.textContent))){t&&null!=t&&e.setAttribute("ag-l-p-c-t",t.Code),a?(e.setAttribute("ag-l-p-o-p",e.getAttribute("ag-l-p")),e.setAttribute("ag-l-p-o",l?l.formatter(parseFloat(e.getAttribute("ag-l-p"))):e.getAttribute("ag-l-p"))):null!=e.getAttribute("ag-l-p-c")&&e.getAttribute("ag-l-p-c")==t.Code&&e.removeAttribute("ag-l-p-o"),u.lastIndex=0;var g=Math.round(parseFloat(e.getAttribute("ag-l-p"))/s*t.Constant);return void(p.textContent=p.textContent.replace(h[0],t.formatter?t.formatter(g):g.toString()))}}}(e,r,i,t))}))}}var u=/(([^A-z0-9]|[A-Z]|[A-Z]{3})*\s?[0-9\,\.]+)/gm;function d(e){var t=e.replace(/[#\,\.]+/gi,"");return function(e){return t+e.toLocaleString("en-US")}}async function f(e){var t="metric"==x().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||e.classList.contains("is-applied")||(e.classList.add("is-applied"),p(e,e))}))}),e?500:0):n&&n.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||!e.classList.contains("is-applied")||(e.classList.remove("is-applied"),e.dispatchEvent(new CustomEvent("ag.language.messurement.revert")))}))}async function p(e,t,o,r,a){if(!r||!a){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),s=await h(i,1);n.unitConvertionSchema.setLabelForAttribute(e,s.content);var l=n.unitConvertionSchema.getValueForAttribute(e),c=await g(l,2,s.units[0]);n.unitConvertionSchema.setValueForAttribute(e,c.content),t.addEventListener("ag.language.messurement.revert",(function(){n.unitConvertionSchema.setLabelForAttribute(e,i),n.unitConvertionSchema.setValueForAttribute(e,l)}))}else e?.childNodes?.length>0&&e.childNodes.forEach((async function(e){if(e.nodeType==Node.TEXT_NODE&&function(e){return n.unitConvertionSchema.expression.test(e.textContent)||n.unitConvertionSchema.notationExpression.test(e.textContent)}(e)){var o=e.textContent,r=await h(o);r.success?e.textContent=r.content:(r=await h(e.textContent,1),e.textContent=r.content,p(e.parentElement,t,!1,!0,r.units[0])),t.addEventListener("ag.language.messurement.revert",(function(){e.textContent=o}))}else p(e,t)}));return!1}e?.childNodes?.length>0&&e.childNodes.forEach((async function(e){if(e?.textContent){var n=e.textContent,o=await g(e.textContent,2,a);o.success&&(e.textContent=o.content,t.addEventListener("ag.language.messurement.revert",(function(){e.textContent=n})))}}))}async function h(e,t){var o=[],r=!1;for(var a of(t||(t=0),n.unitConvertions)){var i=await g(e,t,a);e=i.content,r|=i.success,i.success&&o.push(a),n.unitConvertionSchema.notationExpressions[a.unit].lastIndex=-1,n.unitConvertionSchema.notationOnlyExpressions[a.unit].lastIndex=-1}return{content:e,success:r,units:o}}async function g(e,t,o){for(var r=null,a=!1;null!=(r=m(e,o,t));){a=!0;var i=1==t?0:parseFloat(n.unitConvertionSchema.getValue(r.groups.V)),s=r.groups.N,l=r.index,c=l+r[0].length,u=(1!=t?r[0].replaceAll(r.groups.V,n.unitConvertionSchema.formatValue(Math.floor(Math.round(i*o.constant)))):r[0]).replaceAll(s,o.tragetUnit);if(2==t&&o.targetNotation&&(u+=" "+o.targetNotation),e=e.substring(0,l)+u+e.substring(c),2==t)return{content:e,success:a}}return{content:e,success:a}}function m(e,t,o){return 0==o?n.unitConvertionSchema.notationExpressions[t.unit].exec(e):1==o?n.unitConvertionSchema.notationOnlyExpressions[t.unit].exec(e):2==o?(n.unitConvertionSchema.valueExpression.lastIndex=-1,n.unitConvertionSchema.valueExpression.exec(e)):null}async function v(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)})),e.detail.longCode&&C("longCode",e.detail.longCode);var n=x();window.agLocale||(window.agLocale={}),window.agLocale.locale=n,document.body.dispatchEvent(new CustomEvent("ag.language.update.success"))})),t.addEventListener("click",(async function(o){e||(e=await async function(){var e,t,o=new T("span"),r=o.n("span");function a(e){S(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:""}))}S(r,"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,o){return e.a("class",b(t.code)),a(n.languages.filter((function(e){return Array.isArray(t.language)?t.language.indexOf(e.code)>-1:e.code==t.language}))),o||document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:t})),t.localLabel?t.localLabel:t.label})),e=r.n("i"),t=o.n("span"),a(n.languages),S(o.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})),S(o.n("span"),"Property Measurement","messurement",n.units,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),S(o.n("span"),"Distance Measurement","messurement",n.units,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),o.node.setAttribute("ag-language-select",""),document.body.appendChild(o.node);var i=x();i?.code&&document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:i}));return o}()),o.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",y)}))}function y(t){t.stopPropagation(),null==t.target.closest("[ag-language-select],[ag-language]")&&(document.body.removeEventListener("click",y),async function(t){e.node.classList.remove("active")}(t.target))}function b(e){return"fflag ff-lg fflag-"+e}function x(){var e=window.localStorage.AGLANGUAGE,t={};return e&&""!=e&&(t=JSON.parse(e)),t}var w=null,E=null;function C(e,t){var n=x();if(null==n&&(n={}),!n[e]||n[e]!=t){n[e]=t,window.localStorage.setItem("AGLANGUAGE",JSON.stringify(n)),null!=w&&clearTimeout(L),w=setTimeout((async function(){w=null,await L(e),null!=E&&(E(),E=null)}),100);var o=E;E=function(){null!=o&&o(),document.body.dispatchEvent(new CustomEvent("ag.language.change."+e))}}}async function L(e){var n=x();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 S(t,n,o,r,a,i){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(""),r.map((function(e){var t=d.n("label");t.cl((function(){u.node.classList.remove("active"),C(o,e.code),u.h(i(e))})),a(t,e)})),o&&""!=o&&(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[o],n=Array.isArray(t)?t[0]:t,a=r.find((function(e,t){return e.code==n}));i&&(C(o,n),u.h(i(a,!0)))},document.body.addEventListener("ag.language.update."+s,A["Field"+s])))}function T(e){return this.node=document.createElement(e),this}async function k(e,t){var n="";for(var o in t)n=n+(""!=n?"&":"")+o+"="+t[o];return e+=e.indexOf("?")>-1?"&":"?"+n,(await fetch(e,{method:"GET",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()}T.prototype.a=function(e,t){return this.node.setAttribute(e,t),this},T.prototype.n=function(e){var t=new T(e);return this.node.appendChild(t.node),t},T.prototype.h=function(e){return this.node.innerHTML=e,this},T.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"))},refreshLocale:function(){document.body.dispatchEvent(new CustomEvent("ag.language.change.language"))}},async function(){document.querySelectorAll("[ag-language]").forEach(v);var e=!1,t=x();if(t?.code)document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:t}));else{for(var i in e=!0,document.body.addEventListener("ag.language.country.auto-discovery",(function(e){var t=n.presets.filter((function(t){return t.code==e.detail.countryCode}));if(null!=t&&t.length>0&&"US"!=t[0].code){for(var o in t[0]){var r=Array.isArray(t[0][o])?t[0][o][0]:t[0][o];"language"==o&&t[0].states&&t[0].states[e.detail.state]&&(r=t[0].states[e.detail.state]),C(o,r)}document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:t[0]}))}})),t=n.presets.filter((function(e){return"US"==e.code}))[0])C(i,Array.isArray(t[i])?t[i][0]:t[i]);document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:t}))}c(!0),t.language&&-1==t.language.indexOf("en")?r():(o=Object.assign({},t),a({Locale:"en_US"})),async function(){document.body.addEventListener("ag.language.change.language",(function(){r()})),document.body.addEventListener("ag.language.change.currency",(function(){c()})),document.body.addEventListener("ag.language.change.messurement",(function(){f()})),document.body.addEventListener("ag.lazy.refresh",(function(){f()})),document.body.addEventListener("ag.language.refresh.currency",(function(){c()}))}(),n.unitConvertionSchema=await async function(){var e="",t="",o={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 r="",a="";n.notation.forEach((function(e){a+=(""!=a?"|":"")+"((?<N>"+e.replaceAll(/\s/gi,"\\s").replaceAll(/([^0-9A-z])/gi,"\\$1")+")(\\s|[^A-z]|$))",r+=(""!=r?"|":"")+"((?<V>[0-9\\,\\.]+)(\\n|\\s)*(?<N>"+e.replaceAll(/\s/gi,"\\s").replaceAll(/([^0-9A-z])/gi,"\\$1")+")(\\s|[^A-z]|$))"})),o.notationExpressions[n.unit]=new RegExp(r,"gmi"),o.notationOnlyExpressions[n.unit]=new RegExp(a,"gmi"),e+=(""!=e?"|":"")+"("+r+")",t+=(""!=t?"|":"")+"("+a+")"})),o.expression=new RegExp(e,"gmi"),o.notationExpression=new RegExp(t,"gmi"),o.valueExpression=new RegExp("((?<V>[0-9\\,]+(\\.[0-9]+)?)(\\n|\\s)*)","gmi"),o}(),f(!0),e||(window.agLocale||(window.agLocale={}),window.agLocale.locale=t,document.body.dispatchEvent(new CustomEvent("ag.language.update.success")))}()}(),$(document).on("change",'[data-ck-propertylist] [data-sort-object="CMNCMN"]',{},(function(){t($(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 t(e){setTimeout((function(){var t=$(e).closest("[data-search-form]"),n=composeUrlQuery({select:t}),o=t.data("search-form"),r=$('[data-sort-object="'+o+'"]'),a=t.data("default-search"),i=t.data("default-sort");if(void 0!==a&&""!=a&&-1==n.indexOf("/address-")&&-1==n.indexOf("/mls-")&&(n+=a),r.length>0){var s=r.val();n+=null!=s&&""!=s?s:""}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(){t(this)})),$(document).on("keydown","[data-search-form] [data-search-action]",{},(function(e){13==e.keyCode&&t(this)})),$("[data-search-form]").on("search",(function(t,n){var o=$(this),r=o.data("search-prefix"),a=e(r)&&"undefined"!=r?r:function(e){switch(e){case"PROPERTY":return"/properties";case"COMMUNITY":return"/communities";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"/"}(o.data("search-form"));/^\/\//.test((null!=a&&""!=a&&"undefined"!=a?a:"")+n.query)||(window.location=(null!=a&&""!=a&&"undefined"!=a?a:"")+n.query)}))}(),document.body.addEventListener("Plugin.Map.ResultUpdated",(function(){n()})),null!=$(".c-menu .subnav a")){function o(e){var t=$(document).scrollTop();$(".c-menu .subnav a").each((function(){var e=$(this),n=$(e.attr("href"));n.position().top-($(".c-menu").outerHeight()+$(".item-h").outerHeight())<=t&&n.position().top+n.height()>t?($(".c-menu .subnav a").removeClass("active"),e.addClass("active")):e.removeClass("active")}))}$(".c-menu .subnav a").click((function(e){e.preventDefault();var t=this.hash;$target=$(t),$("html, body").stop().animate({scrollTop:$target.offset().top-($(".c-menu").outerHeight()+$(".item-h").outerHeight())},"swing",(function(){$(document).on("scroll",o)})),$("a").each((function(){$(this).removeClass("active")})),$(this).addClass("active")})),$(window).scroll((function(e){$("body").hasClass("scroll")&&$(".c-menu .subnav a").click((function(e){e.preventDefault(),$("html, body").stop().animate({scrollTop:$($(this).attr("href")).offset().top-($(".c-menu").outerHeight()+$(".item-h").outerHeight())},300)})),$("body").hasClass("scroll")||$(".c-menu .subnav a").click((function(e){$("html, body").stop().animate({scrollTop:$($(this).attr("href")).offset().top-(2*$(".c-menu").outerHeight()+$(".item-h").outerHeight())},300)}))}))}},368:()=>{(async function(){var systemFunctions={};function Interpolation(e,t,n,o=[],r=[],a=(()=>{})){let i=new RegExp("\\{\\{[^\\}]+\\}\\}","gi"),s=e=>{a()},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("ag-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,o){let r=e.match(i),a=()=>"",c=()=>{o(a())};if(null!=r){l=e;let o=[],i=!1;r.forEach((e=>{let r=e.substring(2,e.length-2);l=l.replace(e,`\${typeof(${r})!='undefined'&&${r}!=null?${r}:''}`);let a=ExtractVariablesTopLevelIdentifiers(r);o.push(...a.filter((e=>o.indexOf(e)<0))),r!=o[o.length-1]&&Watch(t,n,o[o.length-1],((e,t,n)=>{c()})),IsFunction(systemFunctions,r)?(i=!0,ExtractArgumentVariablesForFunctionFromString(r).forEach((e=>{Watch(t,n,e,((e,t,n)=>{c()}))}))):Watch(t,n,r,((e,t,n)=>{c()}))}));let u=new Function(`try{const {${o.join(",")}} = this; return \`${l}\`; }catch(e){ console.error(e); }return '';`).bind(i?interpolateObject(n):n);a=()=>u();let d=s;s=e=>{c(),d(e)}}}t.childNodes.forEach((t=>{if(t.nodeType==Node.ELEMENT_NODE){Interpolation(e,t,n,o,r,(()=>{}));let a=t;"A"==t.nodeName&&t.hasAttribute("ag-nofollow")&&"nofollow"==t.getAttribute("rel")&&(t.removeAttribute("ag-nofollow"),t.removeAttribute("rel"));for(let e of a.getAttributeNames()){let t=a.getAttribute(e);null!=t&&u(t,(t=>{a.setAttribute(e,t),c(a)}))}}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 o=e.parentElement;null==o||o.classList.contains("ag-fake-contains")||(o.insertBefore(t,o.firstChild),o.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(".")),o=t.substring(t.indexOf(".")+1,t.length);return GetValue(e[n],o)}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("("),o=e.indexOf(")"),r=(n>-1&&e.substring(0,n),e.substring(n+1,o).match(new RegExp("[^,]+","gi")));return null!=r&&r.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=[],o=t.indexOf("("),r=t.indexOf(")"),a=o>-1?t.substring(0,o):t,i=t.substring(o+1,r).match(new RegExp("[^,]+","gi"));return null!=i&&i.forEach((t=>{n.push(GetValue(e,t))})),"function"==typeof e[a]?e[a].apply(e,n):void 0}function If(e,t,n){t.querySelectorAll("[ag-if]",t).forEach((t=>{let o=[],r=t,a=t.parentElement,i=null,s=[],l="ag-if",c="ag-else-if",u="ag-else";for(;null!=r&&(t==r&&r.hasAttribute(l)||r.hasAttribute(c)||r.hasAttribute(u));){let e=r;e.classList.remove("ag-fake-mask"),r=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)})),o.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 o){let o=!1;if(t.isDefault)o=t.isDefault;else{o=new Function(...d.arguments,`return ${t.expression};`)(...d.values)}if(o){i=t;try{let o=p(t.position);if(null!=a){let r=t.node.cloneNode(!0);t.active=r,a.insertBefore(r,o),TransformInternal(e,r,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,o=!1,r="ag-if",a="ag-else-if",i="ag-else";for(;null!=t&&(e==t&&t.hasAttribute(r)||t.hasAttribute(a)||t.hasAttribute(i));){let e=t;!o&&e.hasAttribute("ag-fake")?o=!0:o||!o&&!t.hasAttribute(i)?e.classList.add("ag-fake-mask"):o=!0,n&&(e.removeAttribute(r),e.removeAttribute(a),e.removeAttribute(i)),t=e.nextElementSibling}o||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,o=!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 r=htmlToClone.cloneNode(!0);o?insertAfter(r,itemElements[itemElements.length-1]):(htmlToCloneParent?.insertBefore(r,htmlToCloneLocation),o=!0),TransformInternal(htmlDocument,r,t),itemElements.push(r),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(".")),o=t.substring(t.indexOf(".")+1,t.length);return getValue(e[n],o)}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((o=>"object"==typeof e[o]?getFunctionFromCollection(e[o],t,n):"function"==typeof e[o]&&o==t?e[o](...n):void 0))},getValueFromFunction=(e,t)=>{let n=[],o=t.indexOf("("),r=t.indexOf(")"),a=o>-1?t.substring(0,o):t,i=t.substring(o+1,r).match(new RegExp("[^,]+","gi"));return null!=i&&i.forEach((t=>{n.push(getValue(e,t))})),e[a].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(".")),o=t.substring(t.indexOf(".")+1,t.length);return getCollectionObject(e[n],o)}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,o){let r=null,a=null,i=!1;for(let s=0;s<o;s++){let o=e.cloneNode(!0);i?insertAfter(o,r):(t?.insertBefore(o,n),i=!0,a=o),r=o}return a}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,o=e.getAttribute("ag-for-fake");null!=o?n=parseInt(o):t.setAttribute("ag-for-fake",""),t.removeAttribute("ag-for"),e.removeAttribute("ag-for-fake"),e.classList.add("ag-fake-mask"),PreTransformInternal(t);for(let o=0;o<n;o++)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,o=e.innerHTML;document.body.addEventListener(n,(async function(){var n=GetValue(window,t);e.innerHTML=o,TransformInternal(e,e,n)}))}async function requestData(e,t,n){n&&(t=n(t));var o="";for(var r in t)o=o+(""!=o?"&":"")+r+"="+t[r];return e+=e.indexOf("?")>-1?"&":"?"+o,(await fetch(e,{method:"GET",mode:"cors",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()}async function initPage(e,t,n,o,r){n||(n={}),n.PageSize||(n.PageSize=12),n.PageNumber||(n.PageNumber=1);var a=await requestData(t,n,r);window[e]=a,window.agRender.hydrate(e),o&&o(a)}async function nextPage(e,t,n,o,r){n.PageNumber+=1;var a=await requestData(t,n,r);window[e]=a,window.agRender.hydrate(e),o&&o(a)}async function previousPage(e,t,n,o,r){if(n.PageNumber>1){n.PageNumber-=1;var a=await requestData(t,n,r);window[e]=a,window.agRender.hydrate(e),o&&o(a)}}async function morePage(e,t,n,o,r){n.PageNumber+=1;var a=await requestData(t,n,r);window[e].Items.push(...a.Items),window.agRender.hydrate(e),o&&o(a)}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,o,r){document.body.addEventListener("ag.render."+e+".page.next",(function(){nextPage(e,t,n,o,r)})),document.body.addEventListener("ag.render."+e+".page.previous",(function(){previousPage(e,t,n,o,r)})),document.body.addEventListener("ag.render."+e+".page.more",(function(){morePage(e,t,n,o,r)})),initPage(e,t,n,o,r)}}}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__(468),__webpack_require__(816),__webpack_require__(136),__webpack_require__(368),__webpack_require__(264)})(),__webpack_exports__})()));
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QWMsQ0FBRXFRLE9BQU8sR0FBTyxFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi4vLi4vQWdvcmEgNC4wL0lkY0dsb2JhbC5BZ29yYS5KYXZhU2NyaXB0LlBsdWdJbi9NYXhDb250YWN0MS4xLmpzIiwid2VicGFjazovLy8uLi8uLi9BZ29yYSA0LjAvSWRjR2xvYmFsLkFnb3JhLkphdmFTY3JpcHQuUGx1Z0luL01heEpxdWVyeTIuMS4xLmpzIiwid2VicGFjazovLy8uLi8uLi9BZ29yYSA0LjAvSWRjR2xvYmFsLkFnb3JhLkphdmFTY3JpcHQuUGx1Z0luL01heFV0aWxpdHkuanMiLCJ3ZWJwYWNrOi8vLy4uL0lkY0dsb2JhbC5JQlAuV2ViL2pzL21heC9EaWFsb2dNb2RhbC5qcyIsIndlYnBhY2s6Ly8vLi4vSWRjR2xvYmFsLklCUC5XZWIvanMvbWF4L2NvbW1vbi5qcyIsIndlYnBhY2s6Ly8vLi4vSWRjR2xvYmFsLklCUC5XZWIvanMvbWF4L2RhdGFiaW5kZXIuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Il0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSB7XG5cdFx0dmFyIGEgPSBmYWN0b3J5KCk7XG5cdFx0Zm9yKHZhciBpIGluIGEpICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuXHR9XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gIiwi77u/YWdvcmEoZnVuY3Rpb24gKCkge1xyXG4gICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChsb2NhdGlvbi5oYXNoICYmIChsb2NhdGlvbi5oYXNoLnRvTG93ZXJDYXNlKCkgPT0gXCIjc2lnbnVwXCIgfHwgbG9jYXRpb24uaGFzaC50b0xvd2VyQ2FzZSgpID09IFwiI3JlZ2lzdGVyXCIgfHwgbG9jYXRpb24uaGFzaC50b0xvd2VyQ2FzZSgpID09IFwiI3Jlc2V0LXBhc3N3b3JkXCIpKSB7XHJcbiAgICAgICAgICAgIE9wZW5Qb3B1cCgpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59KTtcclxuXHJcbmZ1bmN0aW9uIFNpZ25VcChjb250YWluZXJJZCwgYWNjZXNzVXJsLCBhY2Nlc3NVcmxWaWV3TW9kZSwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUFjY2Vzcy5hc2h4P2FjdGlvbj1TaWduVXAnLFxyXG4gICAgICAgIGRhdGE6ICh7IGNvbnRhY3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgIT0gbnVsbCkgaWYob25TdWNjZXNzKHJlc3BvbnNlLkNvbnRhY3QpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KGFjY2Vzc1VybCkgJiYgaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmxWaWV3TW9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24ucmVwbGFjZShhY2Nlc3NVcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvY2F0aW9uLnJlbG9hZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc051bGxPckVtcHR5KGFjY2Vzc1VybCkgJiYgIWlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsVmlld01vZGUpICYmIGFjY2Vzc1VybFZpZXdNb2RlID09ICdwb3B1cCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlVXNlckFyZWEocmVzcG9uc2UuVXNlckFyZWFIdG1sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1BFUkZPUk1fQUNUSU9OX1RSSUdHRVInKS5hdHRyKCdocmVmJywgYWNjZXNzVXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBPcGVuUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsKSAmJiAhaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmxWaWV3TW9kZSkgJiYgYWNjZXNzVXJsVmlld01vZGUgPT0gJ3N0YXknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZVVzZXJBcmVhKHJlc3BvbnNlLlVzZXJBcmVhSHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UoKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9kYXNoYm9hcmQvZGVmYXVsdC5hc3B4P21vZGU9c2lnblVwJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygncmVzdHJpY3RlZC1saXN0aW5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgRGF0YS4gUGxlYXNlIHJldHJ5IScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgRGF0YS4gUGxlYXNlIHJldHJ5IScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMTogLy8gRHVwbGljYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1RoZSBlbWFpbCBhZGRyZXNzIHlvdSBlbnRlcmVkIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC4gUGxlYXNlIHNpZ24gaW4gdG8geW91ciBleGlzdGluZyBhY2NvdW50IG9yIGNsaWNrIFwiRm9yZ290IFBhc3N3b3JkXCIgZm9yIGhlbHAuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCAnVGhlIGVtYWlsIGFkZHJlc3MgeW91IGVudGVyZWQgaXMgYWxyZWFkeSByZWdpc3RlcmVkLiBQbGVhc2Ugc2lnbiBpbiB0byB5b3VyIGV4aXN0aW5nIGFjY291bnQgb3IgY2xpY2sgXCJGb3Jnb3QgUGFzc3dvcmRcIiBmb3IgaGVscC4nKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjA0OiBcclxuICAgICAgICAgICAgICAgICAgICBTaG93QWxlcnQoJ1NNUyBHYXRld2F5IGVtYWlsIGFkZHJlc3Nlcywgd2hpY2ggc2VuZCBlbWFpbCBhcyB0ZXh0IG1lc3NhZ2VzLCBhcmUgbm90IHBlcm1pdHRlZC4gUGxlYXNlIGVudGVyIGEgc3RhbmRhcmQgZW1haWwgYWRkcmVzcy4nLCAyMDAwLCAnYWxlcnRfYm94JywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFBY2Nlc3MpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBTaWduSW4oY29udGFpbmVySWQsIGFjY2Vzc1VybCwgYWNjZXNzVXJsVmlld01vZGUsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFBY2Nlc3MuYXNoeD9hY3Rpb249U2lnbkluJyxcclxuICAgICAgICBkYXRhOiAoeyBjb250YWN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzICE9IG51bGwpIG9uU3VjY2VzcyhyZXNwb25zZS5Db250YWN0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsKSAmJiBpc051bGxPckVtcHR5KGFjY2Vzc1VybFZpZXdNb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5yZXBsYWNlKGFjY2Vzc1VybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmwpICYmICFpc051bGxPckVtcHR5KGFjY2Vzc1VybFZpZXdNb2RlKSAmJiBhY2Nlc3NVcmxWaWV3TW9kZSA9PSAncG9wdXAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZVVzZXJBcmVhKHJlc3BvbnNlLlVzZXJBcmVhSHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNQRVJGT1JNX0FDVElPTl9UUklHR0VSJykuYXR0cignaHJlZicsIGFjY2Vzc1VybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgT3BlblBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bGxPckVtcHR5KGFjY2Vzc1VybCkgJiYgIWlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsVmlld01vZGUpICYmIGFjY2Vzc1VybFZpZXdNb2RlID09ICdzdGF5Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBVcGRhdGVVc2VyQXJlYShyZXNwb25zZS5Vc2VyQXJlYUh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKCgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvZGFzaGJvYXJkL2RlZmF1bHQuYXNweD9tb2RlPXNpZ25JbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ3Jlc3RyaWN0ZWQtbGlzdGluZycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0MDE6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgZW1haWwgYWRkcmVzcyBvciBwYXNzd29yZC4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoNDAxLCAnSW52YWxpZCBlbWFpbCBhZGRyZXNzIG9yIHBhc3N3b3JkLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMDI6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KHJlc3BvbnNlLlVybCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IHJlc3BvbnNlLlVybDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgZW1haWwgYWRkcmVzcyBvciBwYXNzd29yZC4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGVtYWlsIGFkZHJlc3Mgb3IgcGFzc3dvcmQuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFBY2Nlc3MpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBTYXZlU2VhcmNoKGNvbnRhaW5lcklkLCBhY2Nlc3NVcmwsIGFjY2Vzc1VybFZpZXdNb2RlLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhQWNjZXNzLmFzaHg/YWN0aW9uPVNhdmVTZWFyY2gnLFxyXG4gICAgICAgIGRhdGE6ICh7IGRlbWFuZDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnWW91IGhhdmUgc3VjY2Vzc2Z1bGx5IHNhdmVkIHRoZSBzZWFyY2gnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdZb3UgaGF2ZSBzdWNjZXNzZnVsbHkgc2F2ZWQgdGhlIHNlYXJjaCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBlbWFpbCBhZGRyZXNzIG9yIHBhc3N3b3JkLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgZW1haWwgYWRkcmVzcyBvciBwYXNzd29yZC4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYUFjY2Vzcykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFJlcXVlc3RJbmZvKGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhUmVxdWVzdEluZm8uYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYVJlcXVlc3RJbmZvKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gTmVpZ2hib3Job29kUmVwb3J0KGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhTmVpZ2hib3Job29kUmVwb3J0LmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1lvdXIgTmVpZ2hib3Job29kIFJlcG9ydCByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZC4gQSByZXBvcnQgd2lsbCBiZSBlbWFpbGVkIHRvIHlvdSB3aXRoaW4gdGhlIG5leHQgMjQgYnVzaW5lc3MgaG91cnMuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnWW91ciBOZWlnaGJvcmhvb2QgUmVwb3J0IHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkLiBBIHJlcG9ydCB3aWxsIGJlIGVtYWlsZWQgdG8geW91IHdpdGhpbiB0aGUgbmV4dCAyNCBidXNpbmVzcyBob3Vycy4nKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFOZWlnaGJvcmhvb2RSZXBvcnQpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBDb250YWN0TW9ydGdhZ2VTcGVjaWFsaXN0KGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhQ29udGFjdE1vcnRnYWdlU3BlY2lhbGlzdC5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdUaGFuayB5b3UgZm9yIHlvdXIgcmVxdWVzdC4gQSBNb3J0Z2FnZSBDb25zdWx0YW50IHdpbGwgY29udGFjdCB5b3Ugc2hvcnRseS4nKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdUaGFuayB5b3UgZm9yIHlvdXIgcmVxdWVzdC4gQSBNb3J0Z2FnZSBDb25zdWx0YW50IHdpbGwgY29udGFjdCB5b3Ugc2hvcnRseS4nKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoQ29udGFjdE1vcnRnYWdlU3BlY2lhbGlzdCkgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBSZXF1ZXN0U2hvd2luZyhjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYVJlcXVlc3RTaG93aW5nLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFSZXF1ZXN0U2hvd2luZykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFRleHRMaXN0aW5nKGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhVGV4dExpc3RpbmcuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYVRleHRMaXN0aW5nKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gRW1haWxMaXN0aW5nKGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhRW1haWxMaXN0aW5nLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1RoZSBwcm9wZXJ0eSBkZXRhaWxzIGhhcyBiZWVuIHNlbnQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnVGhlIHByb3BlcnR5IGRldGFpbHMgaGFzIGJlZW4gc2VudCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFFbWFpbExpc3RpbmcpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBDb250YWN0VXMoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvciwgY29udGFjdFR5cGUpIHtcclxuICAgIHZhciAkZm9ybSA9ICQoJyMnICsgY29udGFpbmVySWQpO1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkZm9ybSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFDb250YWN0VXMuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwsIENvbnRhY3RUeXBlOiBjb250YWN0VHlwZSB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwMTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAkZm9ybS5maW5kKCdbZGF0YS1jYXB0Y2hhLXJlbG9hZF0nKS50cmlnZ2VyKCdjbGljaycpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhQ29udGFjdFVzKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIFNlbGxBSG9tZShjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYVNlbGxBSG9tZS5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhQ29udGFjdFVzKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gTWFpbnRlbmFuY2VTZXJ2aWNlKGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL01haW50ZW5hbmNlU2VydmljZS5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhQ29udGFjdFVzKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gT3JkZXJSZWxvYyhjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYU9yZGVyUmVsb2MuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYU9yZGVyUmVsb2MpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxuXHJcbmZ1bmN0aW9uIEZvcmdvdFBhc3N3b3JkKGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhRm9yZ290UGFzc3dvcmQuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgQ29udGFjdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnUGxlYXNlIGNoZWNrIHlvdXIgZW1haWwgc2hvcnRseSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIHJlc2V0dGluZyB5b3VyIHBhc3N3b3JkLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1BsZWFzZSBjaGVjayB5b3VyIGVtYWlsIHNob3J0bHkgZm9yIGluc3RydWN0aW9ucyBvbiByZXNldHRpbmcgeW91ciBwYXNzd29yZC4nKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0FuIGFjY291bnQgd2l0aCB0aGF0IGVtYWlsIGFkZHJlc3MgY2Fubm90IGJlIGZvdW5kLiBQbGVhc2UgdHJ5IGFnYWluLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0FuIGFjY291bnQgd2l0aCB0aGF0IGVtYWlsIGFkZHJlc3MgY2Fubm90IGJlIGZvdW5kLiBQbGVhc2UgdHJ5IGFnYWluLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKEZvcmdvdFBhc3N3b3JkKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIENvbXBhbnlOZXdzTGV0dGVyKGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUNvbXBhbnlOZXdzTGV0dGVyLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1lvdSBoYXZlIHJlZ2lzdGVyZWQgZm9yIG5ld3NsZXR0ZXIgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnWW91IGhhdmUgcmVnaXN0ZXJlZCBmb3IgbmV3c2xldHRlciBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFFbWFpbExpc3RpbmcpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gRW1haWxGcmllbmQoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFFbWFpbEZyaWVuZC5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdUaGUgZGV0YWlscyBoYXMgYmVlbiBzZW50IHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1RoZSBkZXRhaWxzIGhhcyBiZWVuIHNlbnQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhRW1haWxMaXN0aW5nKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gVXBkYXRlVXNlckFyZWEoaHRtbCkge1xyXG4gICAgJCgnI0RJVl9VU0VSX0FSRUEnKS5odG1sKGh0bWwpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBQZXJmb3JtQWN0aW9uKGFjdGlvbiwgcXVlcnlTdHJpbmcpIHtcclxuICAgIHZhciBfYWNjZXNzVXJsID0gJyc7XHJcbiAgICB2YXIgX2FjY2Vzc0ZpcmVXYWxsID0gKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9kYXNoYm9hcmQvQWNjZXNzLmFzcHgnO1xyXG5cclxuICAgIGlmIChhY3Rpb24gIT0gJ1NpZ25VcCcgJiYgYWN0aW9uICE9ICdTaWduSW4nICYmIGFjdGlvbiAhPSAnTWFya2V0VHJlbmRzJykge1xyXG4gICAgICAgIGlmICghSXNTaWduZWRJbigpKSB7XHJcbiAgICAgICAgICAgIF9hY2Nlc3NVcmwgPSBfYWNjZXNzRmlyZVdhbGwgKyAnP3ZpZXc9cG9wdXAmYWNjZXNzVXJsPScgKyBlc2NhcGUoJy9kYXNoYm9hcmQvJyArIGFjdGlvbiArICcuYXNweCcpO1xyXG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkocXVlcnlTdHJpbmcpKSBfYWNjZXNzVXJsICs9ICc/JyArIGVzY2FwZShxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgX2FjY2Vzc1VybCA9ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvZGFzaGJvYXJkLycgKyBhY3Rpb24gKyAnLmFzcHgnO1xyXG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkocXVlcnlTdHJpbmcpKSBfYWNjZXNzVXJsICs9ICc/JyArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoYWN0aW9uID09ICdNYXJrZXRUcmVuZHMnKSB7XHJcbiAgICAgICAgX2FjY2Vzc1VybCA9ICcvZGFzaGJvYXJkL01hcmtldFRyZW5kcy5hc3B4PycgKyBxdWVyeVN0cmluZztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgX2FjY2Vzc1VybCA9IF9hY2Nlc3NGaXJlV2FsbDtcclxuICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkocXVlcnlTdHJpbmcpKSBfYWNjZXNzVXJsICs9ICc/JyArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgICQoJyNQRVJGT1JNX0FDVElPTl9UUklHR0VSJykuYXR0cignaHJlZicsIF9hY2Nlc3NVcmwpO1xyXG4gICAgJCgnI1BFUkZPUk1fQUNUSU9OX1RSSUdHRVInKS50cmlnZ2VyKCdjbGljaycpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBJc1NpZ25lZEluKCkge1xyXG4gICAgaWYgKGlzTnVsbE9yRW1wdHkoJCgnI0NPTlRBQ1RfR1VJRCcpKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKGlzTnVsbE9yRW1wdHkoJCgnI0NPTlRBQ1RfR1VJRCcpLnZhbCgpKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKCQoJyNDT05UQUNUX0dVSUQnKS52YWwoKS5sZW5ndGggIT0gMzYpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBDb250YWN0T2ZmaWNlKGVtYWlsKSB7XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFDb250YWN0T2ZmaWNlLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7XHJcbiAgICAgICAgICAgIE5hbWU6ICQoXCIjdGV4dG5hbWVcIikudmFsKCksXHJcbiAgICAgICAgICAgIEVtYWlsOiAkKFwiI3R4dEVtYWlsXCIpLnZhbCgpLFxyXG4gICAgICAgICAgICBUb0VtYWlsOiBlbWFpbCxcclxuICAgICAgICAgICAgU3ViamVjdDogJChcIiN0ZXh0c3ViamVjdFwiKS52YWwoKSxcclxuICAgICAgICAgICAgY29tbWVudDogJChcIiN0ZXh0bXNnXCIpLnZhbCgpXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICd0ZXh0JyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlID09IFwiMTAwXCIpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhQ29udGFjdFVzKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSIsIi8qXG4gKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYyLjEuMVxuICogaHR0cDovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCAyMDA1LCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMTQtMDUtMDFUMTc6MTFaXG4gKi9cbiFmdW5jdGlvbihhLGIpe1wib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1hLmRvY3VtZW50P2IoYSwhMCk6ZnVuY3Rpb24oYSl7aWYoIWEuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiKTtyZXR1cm4gYihhKX06YihhKX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7dmFyIGI9YS5sZW5ndGgsYz1fLnR5cGUoYSk7cmV0dXJuXCJmdW5jdGlvblwiPT09Y3x8Xy5pc1dpbmRvdyhhKT8hMToxPT09YS5ub2RlVHlwZSYmYj8hMDpcImFycmF5XCI9PT1jfHwwPT09Ynx8XCJudW1iZXJcIj09dHlwZW9mIGImJmI+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+7v2Z1bmN0aW9uIEdldEZvcm1YbWwoY29udGFpbmVyKSB7XHJcbiAgICAvLyBUaGlzIGlzIGFuIGF1dG8gZ2VuZXJhdGVkIGZpZWxkIHRvIGJsb2NrIHNjcmlwdC9wcm9ncmFtcyB0byBzdWJtaXQgZm9ybSBhdXRvbWF0aWNhbGx5LiBcclxuICAgIC8vY29uc29sZS5sb2coXCJFbGVtZW50IExlbmd0aDpcIiArICQoY29udGFpbmVyKS5maW5kKCQoJ2lucHV0W2lkXj1cInR4dEZheEluZm9cIl0nKSkubGVuZ3RoKTtcclxuICAgIGlmICgkKGNvbnRhaW5lcikuZmluZCgkKCdpbnB1dFtpZF49XCJ0eHRGYXhJbmZvXCJdJykpLmxlbmd0aCA+IDAgJiYgJChjb250YWluZXIpLmZpbmQoJCgnaW5wdXRbaWRePVwidHh0RmF4SW5mb1wiXScpKS52YWwoKSAhPSAnJykgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgdmFyIF9lbnRpdHlYbWwgPSBbXTtcclxuICAgIHZhciBfdGVtcFhtbCA9ICcnO1xyXG4gICAgdmFyIF90ZW1wVmFsdWUgPSAnJztcclxuICAgIHZhciBfdGVtcExhYmVsID0gJyc7XHJcbiAgICB2YXIgX2lzVmFsaWRhdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAkKGNvbnRhaW5lcikuZmluZCgnKltGb3JtTm9kZT1cInRydWVcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBfdGVtcFZhbHVlID0gJyc7XHJcblxyXG4gICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ3R5cGUnKSA9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgICAgICAgIHZhciBfZGVsaW1pdGVyID0gJyc7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoJChjb250YWluZXIpLmZpbmQoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXVtuYW1lPVwiJyArICQodGhpcykuYXR0cignbmFtZScpICsgJ1wiXTpjaGVja2VkJykubGVuZ3RoID4gMSkgX2RlbGltaXRlciA9ICc7JztcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7IH1cclxuICAgICAgICAgICAgJChjb250YWluZXIpLmZpbmQoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXVtuYW1lPVwiJyArICQodGhpcykuYXR0cignbmFtZScpICsgJ1wiXTpjaGVja2VkJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFZhbHVlID0gX3RlbXBWYWx1ZSArICQodGhpcykudmFsKCkgKyBfZGVsaW1pdGVyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKCQodGhpcykuYXR0cigndHlwZScpID09ICdyYWRpbycpIHtcclxuICAgICAgICAgICAgaWYgKCQodGhpcykuaXMoJzpjaGVja2VkJykpIHtcclxuICAgICAgICAgICAgICAgIF90ZW1wVmFsdWUgPSAkKHRoaXMpLnZhbCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMpLmF0dHIoJ2NhcHRjaGEnKSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9jYXB0Y2hhID0gJyc7XHJcbiAgICAgICAgICAgICAgICB2YXIgJGNhcHRjaGEgPSAkKHRoaXMpLmNsb3Nlc3QoJy5jYXB0Y2hhJykuZmluZCgnW2NhcHRjaGEtdmFsdWVdJyk7XHJcbiAgICAgICAgICAgICAgICBfY2FwdGNoYSA9ICc8Q2FwdGNoYVZhbGlkYXRvciBJRD1cIicgKyAkY2FwdGNoYS5hdHRyKCdjYXB0Y2hhLWlkJykgKyAnXCI+JyArICQodGhpcykudmFsKCkgKyAnPC9DYXB0Y2hhVmFsaWRhdG9yPic7XHJcbiAgICAgICAgICAgICAgICBpZiAoTUQ1KCQodGhpcykudmFsKCkpLnRvTG93ZXJDYXNlKCkgIT0gJGNhcHRjaGEuYXR0cignY2FwdGNoYS12YWx1ZScpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBfaXNWYWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydCgkKHRoaXMpLmF0dHIoJ0Zvcm1NZXNzYWdlJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF9lbnRpdHlYbWxbXCJDYXB0Y2hhXCJdID0gX2NhcHRjaGE7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgX2lzVmFsaWRhdGVkID0gZmFsc2U7IGFsZXJ0KGUpOyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBfdGVtcFZhbHVlID0gJCh0aGlzKS52YWwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc051bGxPckVtcHR5KF90ZW1wVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ1JlcXVpcmVkJykgPT0gJ3RydWUnIHx8ICQodGhpcykuYXR0cignUmVxdWlyZWQnKSA9PSAncmVxdWlyZWQnKSB7XHJcbiAgICAgICAgICAgICAgICBfaXNWYWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCQodGhpcykuYXR0cignRm9ybU1lc3NhZ2UnKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdGb3JtVHlwZScpICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdGb3JtVHlwZScpID09ICdFbWFpbCcgJiYgIWlzVmFsaWRFbWFpbChfdGVtcFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pc1ZhbGlkYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQodGhpcykuYXR0cignRm9ybU1lc3NhZ2UnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkoJCh0aGlzKS5hdHRyKCdNaW5MZW5ndGgnKSkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJzZUludCgkKHRoaXMpLmF0dHIoJ01pbkxlbmd0aCcpKSA+IF90ZW1wVmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2lzVmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCh0aGlzKS5hdHRyKCdGb3JtTWVzc2FnZScpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc051bGxPckVtcHR5KCQodGhpcykuYXR0cignRW50aXR5JykpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzTnVsbE9yRW1wdHkoJCh0aGlzKS5hdHRyKCdOb2RlJykpKSByZXR1cm47XHJcbiAgICAgICAgX3RlbXBYbWwgPSBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldO1xyXG4gICAgICAgIGlmIChpc051bGxPckVtcHR5KF90ZW1wWG1sKSkgX2VudGl0eVhtbFskKHRoaXMpLmF0dHIoJ0VudGl0eScpXSA9ICcnO1xyXG5cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KF90ZW1wVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIF90ZW1wVmFsdWUgPSBfdGVtcFZhbHVlLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KCQodGhpcykuYXR0cignbGFiZWwnKSkpIF90ZW1wTGFiZWwgPSAnIGxhYmVsPVwiJyArICQodGhpcykuYXR0cignbGFiZWwnKSArICdcIiAnOyBlbHNlIF90ZW1wTGFiZWwgPSAnJztcclxuICAgICAgICAgICAgX3RlbXBYbWwgPSAnPCcgKyAkKHRoaXMpLmF0dHIoJ05vZGUnKSArIF90ZW1wTGFiZWwgKyAnPicgKyAoJCh0aGlzKS5hdHRyKCdkYXRhLWFnb3JhLXR5cGUnKSAhPSAneG1sJyA/ICc8IVtDREFUQVsnICsgX3RlbXBWYWx1ZSArICddXT4nIDogX3RlbXBWYWx1ZSkgKyAnPC8nICsgJCh0aGlzKS5hdHRyKCdOb2RlJykgKyAnPic7XHJcbiAgICAgICAgICAgIF9lbnRpdHlYbWxbJCh0aGlzKS5hdHRyKCdFbnRpdHknKV0gKz0gX3RlbXBYbWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ0VudGl0eScpID09PSAnTGVhZCcpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRVcmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgdmFyIHVybCA9IG5ldyBVUkwoY3VycmVudFVybCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh1cmwuc2VhcmNoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMuaGFzKFwidXRtX3Rlcm1cIikpIHtcclxuICAgICAgICAgICAgICAgIF90ZW1wVmFsdWUgPSBwYXJhbXMuZ2V0KFwidXRtX3Rlcm1cIikudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgX3RlbXBMYWJlbCA9ICcgbGFiZWw9XCJVVE0gVGVybVwiICc7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFhtbCA9ICc8VVRNVGVybScgKyBfdGVtcExhYmVsICsgJz4nICsgKCQodGhpcykuYXR0cignZGF0YS1hZ29yYS10eXBlJykgIT0gJ3htbCcgPyAnPCFbQ0RBVEFbJyArIF90ZW1wVmFsdWUgKyAnXV0+JyA6IF90ZW1wVmFsdWUpICsgJzwvVVRNVGVybT4nO1xyXG4gICAgICAgICAgICAgICAgX2VudGl0eVhtbFskKHRoaXMpLmF0dHIoJ0VudGl0eScpXSArPSBfdGVtcFhtbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmhhcyhcInRtX2NvcnBfcGFydG5lclwiKSkge1xyXG4gICAgICAgICAgICAgICAgX3RlbXBWYWx1ZSA9IHBhcmFtcy5nZXQoXCJ0bV9jb3JwX3BhcnRuZXJcIikudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgX3RlbXBMYWJlbCA9ICcgbGFiZWw9XCJDb3Jwb3JhdGUgUGFydG5lclwiICc7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFhtbCA9ICc8Q29ycG9yYXRlUGFydG5lcicgKyBfdGVtcExhYmVsICsgJz4nICsgKCQodGhpcykuYXR0cignZGF0YS1hZ29yYS10eXBlJykgIT0gJ3htbCcgPyAnPCFbQ0RBVEFbJyArIF90ZW1wVmFsdWUgKyAnXV0+JyA6IF90ZW1wVmFsdWUpICsgJzwvQ29ycG9yYXRlUGFydG5lcj4nO1xyXG4gICAgICAgICAgICAgICAgX2VudGl0eVhtbFskKHRoaXMpLmF0dHIoJ0VudGl0eScpXSArPSBfdGVtcFhtbDtcclxuICAgICAgICAgICAgfSBpZiAocGFyYW1zLmhhcyhcInV0bV9jYW1wYWlnblwiKSkge1xyXG4gICAgICAgICAgICAgICAgX3RlbXBWYWx1ZSA9IHBhcmFtcy5nZXQoXCJ1dG1fY2FtcGFpZ25cIikudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgX3RlbXBMYWJlbCA9ICcgbGFiZWw9XCJVVE0gQ2FtcGFpZ25cIiAnO1xyXG4gICAgICAgICAgICAgICAgX3RlbXBYbWwgPSAnPFVUTUNhbXBhaWduJyArIF90ZW1wTGFiZWwgKyAnPicgKyAoJCh0aGlzKS5hdHRyKCdkYXRhLWFnb3JhLXR5cGUnKSAhPSAneG1sJyA/ICc8IVtDREFUQVsnICsgX3RlbXBWYWx1ZSArICddXT4nIDogX3RlbXBWYWx1ZSkgKyAnPC9VVE1DYW1wYWlnbj4nO1xyXG4gICAgICAgICAgICAgICAgX2VudGl0eVhtbFskKHRoaXMpLmF0dHIoJ0VudGl0eScpXSArPSBfdGVtcFhtbDtcclxuICAgICAgICAgICAgfSBpZiAocGFyYW1zLmhhcyhcInV0bV9jb250ZW50XCIpKSB7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFZhbHVlID0gcGFyYW1zLmdldChcInV0bV9jb250ZW50XCIpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIF90ZW1wTGFiZWwgPSAnIGxhYmVsPVwiVVRNIENvbnRlbnRcIiAnO1xyXG4gICAgICAgICAgICAgICAgX3RlbXBYbWwgPSAnPFVUTUNvbnRlbnQnICsgX3RlbXBMYWJlbCArICc+JyArICgkKHRoaXMpLmF0dHIoJ2RhdGEtYWdvcmEtdHlwZScpICE9ICd4bWwnID8gJzwhW0NEQVRBWycgKyBfdGVtcFZhbHVlICsgJ11dPicgOiBfdGVtcFZhbHVlKSArICc8L1VUTUNvbnRlbnQ+JztcclxuICAgICAgICAgICAgICAgIF9lbnRpdHlYbWxbJCh0aGlzKS5hdHRyKCdFbnRpdHknKV0gKz0gX3RlbXBYbWw7XHJcbiAgICAgICAgICAgIH0gaWYgKHBhcmFtcy5oYXMoXCJ1dG1fbWVkaXVtXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFZhbHVlID0gcGFyYW1zLmdldChcInV0bV9tZWRpdW1cIikudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgX3RlbXBMYWJlbCA9ICcgbGFiZWw9XCJVVE0gTWVkaXVtXCIgJztcclxuICAgICAgICAgICAgICAgIF90ZW1wWG1sID0gJzxVVE1NZWRpdW0nICsgX3RlbXBMYWJlbCArICc+JyArICgkKHRoaXMpLmF0dHIoJ2RhdGEtYWdvcmEtdHlwZScpICE9ICd4bWwnID8gJzwhW0NEQVRBWycgKyBfdGVtcFZhbHVlICsgJ11dPicgOiBfdGVtcFZhbHVlKSArICc8L1VUTU1lZGl1bT4nO1xyXG4gICAgICAgICAgICAgICAgX2VudGl0eVhtbFskKHRoaXMpLmF0dHIoJ0VudGl0eScpXSArPSBfdGVtcFhtbDtcclxuICAgICAgICAgICAgfSBpZiAocGFyYW1zLmhhcyhcInV0bV9zb3VyY2VcIikpIHtcclxuICAgICAgICAgICAgICAgIF90ZW1wVmFsdWUgPSBwYXJhbXMuZ2V0KFwidXRtX3NvdXJjZVwiKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBfdGVtcExhYmVsID0gJyBsYWJlbD1cIlVUTSBTb3VyY2VcIiAnO1xyXG4gICAgICAgICAgICAgICAgX3RlbXBYbWwgPSAnPFVUTVNvdXJjZScgKyBfdGVtcExhYmVsICsgJz4nICsgKCQodGhpcykuYXR0cignZGF0YS1hZ29yYS10eXBlJykgIT0gJ3htbCcgPyAnPCFbQ0RBVEFbJyArIF90ZW1wVmFsdWUgKyAnXV0+JyA6IF90ZW1wVmFsdWUpICsgJzwvVVRNU291cmNlPic7XHJcbiAgICAgICAgICAgICAgICBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldICs9IF90ZW1wWG1sO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFfaXNWYWxpZGF0ZWQpIHJldHVybiBudWxsO1xyXG5cclxuICAgIHZhciBfZm9ybVhtbCA9ICc8ZD4nO1xyXG4gICAgZm9yIChwID0gMDsgcCA8IE9iamVjdC5rZXlzKF9lbnRpdHlYbWwpLmxlbmd0aDsgcCsrKSB7XHJcbiAgICAgICAgX2Zvcm1YbWwgKz0gJzwnICsgT2JqZWN0LmtleXMoX2VudGl0eVhtbClbcF0gKyAnPicgKyBfZW50aXR5WG1sW09iamVjdC5rZXlzKF9lbnRpdHlYbWwpW3BdXSArICc8LycgKyBPYmplY3Qua2V5cyhfZW50aXR5WG1sKVtwXSArICc+JztcclxuICAgIH1cclxuICAgIF9mb3JtWG1sICs9ICc8L2Q+JztcclxuXHJcbiAgICByZXR1cm4gZXNjYXBlKF9mb3JtWG1sKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29tcG9zZVVybFF1ZXJ5KG9wdGlvbnMpIHtcclxuICAgIC8vY29uc29sZS5sb2coJ1N0YXJ0ZWQgLi4uJyk7XHJcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsKVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIHZhciB1cmxRdWVyeSA9ICcnO1xyXG4gICAgdmFyIF91cmxRdWVyeVRyYXZlcnNlID0gbmV3IE9iamVjdCgpO1xyXG5cclxuICAgIHZhciAkY29udHJvbHMgPSAkKG9wdGlvbnMuc2VsZWN0KS5hZGQoJChvcHRpb25zLnNlbGVjdCkuZmluZCgnW3VybGlkZW50aWZpZXJdJykpO1xyXG4gICAgaWYgKG9wdGlvbnMubm9uc2VsZWN0ICE9IHVuZGVmaW5lZCAmJiBvcHRpb25zLm5vbnNlbGVjdCAhPSBudWxsKVxyXG4gICAgICAgICRjb250cm9scyA9ICQoJGNvbnRyb2xzKS5ub3Qob3B0aW9ucy5ub25zZWxlY3QpO1xyXG5cclxuICAgIHZhciAkdHJhdmVyc2VkQ29udHJvbHMgPSAkKCk7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdDb250cm9scyBmZXRjaCBzdGFydGVkIC4uLicpO1xyXG4gICAgJCgkY29udHJvbHMpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfcXVlcnlEYXRhID0gX2dldFF1ZXJ5RGF0YUZvckZpZWxkKHRoaXMsICRjb250cm9scywgJHRyYXZlcnNlZENvbnRyb2xzKTtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdRRDonICsgSlNPTi5zdHJpbmdpZnkoX3F1ZXJ5RGF0YSkpO1xyXG4gICAgICAgIF9hZGRUb1F1ZXJ5T2JqZWN0KF9xdWVyeURhdGEsIF91cmxRdWVyeVRyYXZlcnNlKTtcclxuICAgIH0pO1xyXG4gICAgLy9jb25zb2xlLmxvZygnQ29udHJvbHMgZmV0Y2ggY29tcGxldGVkIC4uLicpO1xyXG4gICAgdXJsUXVlcnkgPSBfZ2V0VXJsUXVlcnlGcm9tUXVlcnlPYmplY3QoX3VybFF1ZXJ5VHJhdmVyc2UpO1xyXG5cclxuICAgIGlmIChvcHRpb25zLmFkZGl0aW9uYWwgIT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuYWRkaXRpb25hbCAhPSBudWxsKVxyXG4gICAgICAgIHJldHVybiBvcHRpb25zLmFkZGl0aW9uYWwodXJsUXVlcnkpO1xyXG5cclxuICAgIHJldHVybiB1cmxRdWVyeTtcclxuXHJcbiAgICBmdW5jdGlvbiBfYWRkVG9RdWVyeU9iamVjdChxdWVyeURhdGEsIHVybFF1ZXJ5VHJhdmVyc2UpIHtcclxuICAgICAgICBpZiAocXVlcnlEYXRhID09IG51bGwpIHJldHVybjtcclxuICAgICAgICBpZiAocXVlcnlEYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHF1ZXJ5RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgX2FkZFF1ZXJ5RGF0YVRvUXVlcnlPYmplY3QocXVlcnlEYXRhW2tleV0sIHVybFF1ZXJ5VHJhdmVyc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgX2FkZFF1ZXJ5RGF0YVRvUXVlcnlPYmplY3QocXVlcnlEYXRhLCB1cmxRdWVyeVRyYXZlcnNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gX2FkZFF1ZXJ5RGF0YVRvUXVlcnlPYmplY3QocXVlcnlEYXRhLCB1cmxRdWVyeVRyYXZlcnNlKSB7XHJcbiAgICAgICAgaWYgKHF1ZXJ5RGF0YSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHVybFF1ZXJ5VHJhdmVyc2VbcXVlcnlEYXRhLlVybElkZW50aWZpZXJdID09IG51bGwpIHtcclxuICAgICAgICAgICAgdXJsUXVlcnlUcmF2ZXJzZVtxdWVyeURhdGEuVXJsSWRlbnRpZmllcl0gPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdXJsUXVlcnlUcmF2ZXJzZVtxdWVyeURhdGEuVXJsSWRlbnRpZmllcl0ucHVzaChxdWVyeURhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIF9nZXRVcmxRdWVyeUZyb21RdWVyeU9iamVjdCh1cmxRdWVyeVRyYXZlcnNlKSB7XHJcbiAgICAgICAgdmFyIF91cmxxdWVyeSA9ICcnO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiB1cmxRdWVyeVRyYXZlcnNlKSB7XHJcbiAgICAgICAgICAgIHZhciBfaXNWYWx1ZU9ubHkgPSAoa2V5LnRvTG93ZXJDYXNlKCkgPT0gJ3skdmFsdWV9Jyk7XHJcbiAgICAgICAgICAgIHZhciBfdmFsdWVTZXBlcmF0b3IgPSBfaXNWYWx1ZU9ubHkgPyAnLycgOiAnOyc7XHJcbiAgICAgICAgICAgIHZhciBfdmFsdWVTdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgdmFyIE1pbk1heE9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN1YktleSBpbiB1cmxRdWVyeVRyYXZlcnNlW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAnbWluJyB8fCB1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAnbWF4Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChNaW5NYXhPYmplY3QgPT0gbnVsbCkgTWluTWF4T2JqZWN0ID0geyBNaW46IDAsIE1heDogMCB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAnbWluJykgTWluTWF4T2JqZWN0Lk1pbiA9IHVybFF1ZXJ5VHJhdmVyc2Vba2V5XVtzdWJLZXldLlZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAnbWF4JykgTWluTWF4T2JqZWN0Lk1heCA9IHVybFF1ZXJ5VHJhdmVyc2Vba2V5XVtzdWJLZXldLlZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5PcGVyYXRpb24udG9Mb3dlckNhc2UoKSA9PSAndGhlcycpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdmFsdWVTdHJpbmcgPSB1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5WYWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1teMC05QS16XFxcXC5dL2csICc7Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8ucmVwbGFjZSgvOysvZywgJzsnKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfdmFsdWVTdHJpbmcgKz0gdXJsUXVlcnlUcmF2ZXJzZVtrZXldW3N1YktleV0uVmFsdWUudG9TdHJpbmcoKSArICh1cmxRdWVyeVRyYXZlcnNlW2tleV0ubGVuZ3RoID4gMSAmJiB1cmxRdWVyeVRyYXZlcnNlW2tleV0ubGVuZ3RoIC0gMSA+IHN1YktleSA/IF92YWx1ZVNlcGVyYXRvciA6ICcnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoTWluTWF4T2JqZWN0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfaXNWYWx1ZU9ubHkpXHJcbiAgICAgICAgICAgICAgICAgICAgX3VybHF1ZXJ5ID0gJy8nICsgTWluTWF4T2JqZWN0Lk1pbiArIChNaW5NYXhPYmplY3QuTWF4ICE9IDAgPyAoJy0nICsgTWluTWF4T2JqZWN0Lk1heCkgOiAnJykgKyBfdXJscXVlcnk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgX3VybHF1ZXJ5ICs9ICcvJyArIGtleSArICctJyArIE1pbk1heE9iamVjdC5NaW4gKyAoTWluTWF4T2JqZWN0Lk1heCAhPSAwID8gKCctJyArIE1pbk1heE9iamVjdC5NYXgpIDogJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9pc1ZhbHVlT25seSlcclxuICAgICAgICAgICAgICAgICAgICBfdXJscXVlcnkgPSAnLycgKyBfdmFsdWVTdHJpbmcgKyBfdXJscXVlcnk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgX3VybHF1ZXJ5ICs9ICcvJyArIGtleSArICctJyArIF92YWx1ZVN0cmluZztcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF91cmxxdWVyeTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfZ2V0UXVlcnlEYXRhRm9yT25lU2VhcmNoKHNlbmRlciwgY29udHJvbHMsIHRyYXZlcnNlZENvbnRyb2xzKSB7XHJcblxyXG4gICAgICAgIHZhciBfcXVlcnlEYXRhRm9yT25lU2VhcmNoID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgJChzZW5kZXIpLnBhcmVudCgpLmZpbmQoJ1tvbmVzZWFyY2hpZGVudGlmaWVyXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgX3F1ZXJ5RGF0YSA9IF9nZXRRdWVyeURhdGFWYWx1ZUZvckZpZWxkKHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAoX3F1ZXJ5RGF0YSAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgX3F1ZXJ5RGF0YUZvck9uZVNlYXJjaC5wdXNoKF9xdWVyeURhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChfcXVlcnlEYXRhRm9yT25lU2VhcmNoLmxlbmd0aCA9PSAwIHx8IF9jaGVja09uZVNlYXJjaElzTXVsdGlTZWxlY3Qoc2VuZGVyKSlcclxuICAgICAgICAgICAgaWYgKF9pc05vdE51bGxPckVtcHR5KHNlbmRlcikpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfb25lU2VhcmNoVGV4dFNlYXJjaCA9IF9nZXRRdWVyeURhdGFWYWx1ZUZvckZpZWxkKHNlbmRlcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX29uZVNlYXJjaFRleHRTZWFyY2g7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3F1ZXJ5RGF0YUZvck9uZVNlYXJjaDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfY2hlY2tPbmVTZWFyY2hJc011bHRpU2VsZWN0KHNlbmRlcikge1xyXG4gICAgICAgIHJldHVybiBzZW5kZXIgIT0gbnVsbCAmJiAkKHNlbmRlcikuYXR0cignbXVsdGlzZWxlY3Rib3hpZCcpICE9IHVuZGVmaW5lZCAmJiAkKHNlbmRlcikuYXR0cignbXVsdGlzZWxlY3Rib3hpZCcpICE9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gX2dldFF1ZXJ5RGF0YUZvckZpZWxkKHNlbmRlciwgY29udHJvbHMsIHRyYXZlcnNlZENvbnRyb2xzKSB7XHJcbiAgICAgICAgaWYgKCQoc2VuZGVyKS5hdHRyKFwib25lc2VhcmNobmFtZVwiKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfZ2V0UXVlcnlEYXRhRm9yT25lU2VhcmNoKHNlbmRlciwgY29udHJvbHMsIHRyYXZlcnNlZENvbnRyb2xzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCQodHJhdmVyc2VkQ29udHJvbHMpLmZpbmQoc2VuZGVyKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgdHJhdmVyc2VkQ29udHJvbHMgPSB0cmF2ZXJzZWRDb250cm9scy5hZGQoc2VuZGVyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0UXVlcnlEYXRhVmFsdWVGb3JGaWVsZChzZW5kZXIpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IGNvbnNvbGUubG9nKCdFcnJvciBGb3IgRmllbGQnKTsgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfZ2V0UXVlcnlEYXRhVmFsdWVGb3JGaWVsZChzZW5kZXIpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoIV9pc05vdE51bGxPckVtcHR5KHNlbmRlcikpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBGb3IgRmllbGQgVmFsdWUgQ2hlY2s6JyArICQoc2VuZGVyKS5hdHRyKFwidHlwZVwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IFVybElkZW50aWZpZXI6ICgkKHNlbmRlcikuYXR0cigndXJsaWRlbnRpZmllcicpICE9IG51bGwgPyAkKHNlbmRlcikuYXR0cigndXJsaWRlbnRpZmllcicpIDogJChzZW5kZXIpLmF0dHIoJ29uZXNlYXJjaGlkZW50aWZpZXInKSksIFZhbHVlOiBfZ2V0VmFsdWUoc2VuZGVyKSwgT3BlcmF0aW9uOiAoJChzZW5kZXIpLmF0dHIoJ29wZXJhdGlvbicpICE9IG51bGwgPyAkKHNlbmRlcikuYXR0cignb3BlcmF0aW9uJykgOiAnJykgfTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBGb3IgRmllbGQgVmFsdWU6JyArICQoc2VuZGVyKS5wcm9wKFwidGFnTmFtZVwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIF9nZXRWYWx1ZShzZW5kZXIpIHtcclxuICAgICAgICB2YXIgX3ZhbHVlID0gJChzZW5kZXIpLnZhbCgpO1xyXG4gICAgICAgIHZhciBfaXNPbmVTZWFyY2ggPSB0eXBlb2YgKCQoc2VuZGVyKS5hdHRyKCdvbmVzZWFyY2hpZGVudGlmaWVyJykpICE9ICd1bmRlZmluZWQnO1xyXG4gICAgICAgIGlmICh0eXBlb2YgKF92YWx1ZSkgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdmFyIF92YWx1ZXMgPSAnJztcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIF92YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF92YWx1ZVtrZXldICE9ICcnKVxyXG4gICAgICAgICAgICAgICAgICAgIF92YWx1ZXMgKz0gKF92YWx1ZXMgPT0gJycgPyAnJyA6ICc7JykgKyBfdmFsdWVba2V5XS5yZXBsYWNlKC9cXC0vZywgJ18nKS5yZXBsYWNlKC9cXC8vZywgJyEnKS5yZXBsYWNlKC9cXCwvZywgJ0AnKS5yZXBsYWNlKC9cXCYvLCAnJCcpLnJlcGxhY2UoL1xcIy9nLCAnJTIzJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF92YWx1ZXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCQoc2VuZGVyKS5hdHRyKCd1cmxpZGVudGlmaWVyJykgIT0gbnVsbCAmJiAkKHNlbmRlcikuYXR0cihcInVybGlkZW50aWZpZXJcIikgPT0gJ3ByaWNlJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF92YWx1ZS5yZXBsYWNlKC9cXCwvZywgJycpLnJlcGxhY2UoL1xcLS9nLCAnXycpLnJlcGxhY2UoL1xcLy9nLCAnIScpLnJlcGxhY2UoL1xcJi8sICckJykucmVwbGFjZSgvXFxAL2csICcnKS5yZXBsYWNlKC9cXCMvZywgJyUyMycpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9pc09uZVNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdmFsdWUucmVwbGFjZSgvXFwsL2csICdAJykucmVwbGFjZSgvXFwtL2csICdfJykucmVwbGFjZSgvXFwvL2csICchJykucmVwbGFjZSgvXFwmLywgJyQnKS5yZXBsYWNlKC9cXCMvZywgJyUyMycpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZhbHVlLnJlcGxhY2UoL1xcLS9nLCAnXycpLnJlcGxhY2UoL1xcLy9nLCAnIScpLnJlcGxhY2UoL1xcJi8sICckJykucmVwbGFjZSgvXFwjL2csICclMjMnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfcmVwbGFjZVdoaXRlU3BhY2UodmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXFxzL2csICctJyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIF9pc05vdE51bGxPckVtcHR5KHNlbmRlcikge1xyXG4gICAgICAgIGlmICgkKHNlbmRlcikuYXR0cigndHlwZScpICE9IG51bGwgJiYgKCQoc2VuZGVyKS5hdHRyKCd0eXBlJykgPT0gJ3JhZGlvJyB8fCAkKHNlbmRlcikuYXR0cigndHlwZScpID09ICdjaGVja2JveCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZW5kZXIgIT0gbnVsbCAmJiBzZW5kZXIgIT0gdW5kZWZpbmVkICYmICQoc2VuZGVyKS52YWwoKS50cmltKCkgIT0gJycgJiYgJChzZW5kZXIpWzBdLmNoZWNrZWQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZW5kZXIgIT0gbnVsbCAmJiBzZW5kZXIgIT0gdW5kZWZpbmVkICYmICQoc2VuZGVyKS5pcygnc2VsZWN0JykpIHtcclxuICAgICAgICAgICAgdmFyIF92YWx1ZSA9ICQoc2VuZGVyKS52YWwoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiAoX3ZhbHVlKSA9PSAnb2JqZWN0JyA/IF92YWx1ZSAhPSBudWxsICYmIF92YWx1ZSAhPSAnJyA6IF92YWx1ZS50cmltKCkgIT0gJyc7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBzZW5kZXIgIT0gbnVsbCAmJiBzZW5kZXIgIT0gdW5kZWZpbmVkICYmICQoc2VuZGVyKS52YWwoKS50cmltKCkgIT0gJyc7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVmFsaWRFbWFpbCh2YWx1ZSkge1xyXG4gICAgdmFyIGVtYWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4dEVtYWlsJyk7XHJcbiAgICB2YXIgZmlsdGVyID0gL14oW2EtekEtWjAtOV9cXC5cXC1cXCtdKStcXEAoKFthLXpBLVowLTlcXC1dKStcXC4pKyhbYS16QS1aMC05XXsyLDR9KSskLztcclxuXHJcbiAgICBpZiAoIWZpbHRlci50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc051bGxPckVtcHR5KHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gJycpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKHR5cGVvZiAodmFsdWUpID09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSA9PSAnJykgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTm90TnVsbE9yWmVybyhWYWx1ZSkge1xyXG4gICAgcmV0dXJuIFZhbHVlICE9IG51bGwgJiYgVmFsdWUgIT0gdW5kZWZpbmVkICYmIFZhbHVlLmxlbmd0aCA+IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTnVsbE9yRW1wdHlDb250cm9sKGN0cmwpIHtcclxuICAgIGlmIChjdHJsID09IG51bGwgfHwgY3RybCA9PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICgkKGN0cmwpLnZhbCgpID09IG51bGwgfHwgJChjdHJsKS52YWwoKSA9PSB1bmRlZmluZWQgfHwgJChjdHJsKS52YWwoKSA9PSAnJykgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wZW5JV0JQb3B1cCh1cmwsIHF1ZXJ5U3RyaW5nLCB3aXRoaW4pIHtcclxuICAgIGlmICghaXNOdWxsT3JFbXB0eShxdWVyeVN0cmluZykpIHVybCArPSAnPycgKyBxdWVyeVN0cmluZztcclxuICAgICQoJyNQRVJGT1JNX0lXQl9BQ1RJT05fVFJJR0dFUicpLmF0dHIoJ2hyZWYnLCB1cmwpO1xyXG4gICAgJCgnI1BFUkZPUk1fSVdCX0FDVElPTl9UUklHR0VSJykudHJpZ2dlcignY2xpY2snKTtcclxuXHJcbiAgICBpZiAoaXNOdWxsT3JFbXB0eSh3aXRoaW4pKSB3aXRoaW4gPSAxMDAwO1xyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJCgnI1BFUkZPUk1fSVdCX0FDVElPTl9UUklHR0VSJykudHJpZ2dlcignY2xpY2snKTtcclxuICAgIH0sIHdpdGhpbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENsb3NlSVdCUG9wdXAoKSB7XHJcbiAgICAkKCcjTU9EQUxfQUNDRVNTJykuZm91bmRhdGlvbigncmV2ZWFsJywgJ2Nsb3NlJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9wZW5Qb3B1cCh3aXRoaW4pIHtcclxuICAgIGlmIChpc051bGxPckVtcHR5KHdpdGhpbikpIHdpdGhpbiA9IDEwMDA7XHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKCcjUEVSRk9STV9BQ1RJT05fVFJJR0dFUicpLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbiAgICB9LCB3aXRoaW4pO1xyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gQ2xvc2VQb3B1cCgpIHtcclxuICAgICQoJyNNT0RBTF9BQ0NFU1MnKS5mb3VuZGF0aW9uKCdyZXZlYWwnLCAnY2xvc2UnKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0Rm9ybWF0dGVkUHJpY2UocHJpY2UpIHtcclxuICAgIHZhciBsYWJlbCA9IFwiXCI7XHJcbiAgICBpZiAocHJpY2UudG9TdHJpbmcoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKHByaWNlLnRvU3RyaW5nKCkubGVuZ3RoIDw9IDYgJiYgcHJpY2UudG9TdHJpbmcoKS5sZW5ndGggPiAzKSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gcHJpY2UudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgcHJpY2UudG9TdHJpbmcoKS5sZW5ndGggLSAzKSArIFwiS1wiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJpY2UudG9TdHJpbmcoKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gcHJpY2UudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgcHJpY2UudG9TdHJpbmcoKS5sZW5ndGggLSA2KSArIFwiLlwiICsgcHJpY2UudG9TdHJpbmcoKS5zdWJzdHJpbmcocHJpY2UudG9TdHJpbmcoKS5sZW5ndGggLSA2LCBwcmljZS50b1N0cmluZygpLmxlbmd0aCAtIDUpICsgXCJNXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGFiZWwgPSBwcmljZS50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGFiZWwgPSBcIk4vQVwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwiJFwiICsgbGFiZWw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTXVsdGlMaW5ndWFsKCkge1xyXG4gICAgaWYgKCQoXCIjTVVMVElMSU5HVUFMXCIpICE9IG51bGwgJiYgJChcIiNNVUxUSUxJTkdVQUxcIikgIT0gdW5kZWZpbmVkICYmICFpc051bGxPckVtcHR5KCQoXCIjTVVMVElMSU5HVUFMXCIpLnZhbCgpKSAmJiAkKFwiI01VTFRJTElOR1VBTFwiKS52YWwoKSA9PSBcIjFcIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldExvY2FsZSgpIHtcclxuICAgIGlmIChpc011bHRpTGluZ3VhbCgpKSByZXR1cm4gJCgnI0xPQ0FMRScpLnZhbCgpOyBlbHNlIHJldHVybiBcIlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBJbml0RGF0YVNvdXJjZVJlbGF0aW9uKHNjdHJsLCBwY3RybCwgYWZ0ZXJMb2FkKSB7XHJcbiAgICB2YXIgX3NvdXJjZSA9ICQoJyMnICsgc2N0cmwpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGN0cmwuc3BsaXQoJywnKS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBfcGFyZW50ID0gJCgnIycgKyBwY3RybC5zcGxpdCgnLCcpW2ldKTtcclxuXHJcbiAgICAgICAgJChfcGFyZW50KS5jaGFuZ2UoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgX3Bvc3REYXRhID0gJyc7XHJcbiAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnU291cmNlPScgKyAkKF9zb3VyY2UpLmF0dHIoJ1NvdXJjZScpO1xyXG4gICAgICAgICAgICBfcG9zdERhdGEgKz0gJyZBdXRvU29ydD0nICsgJChfc291cmNlKS5hdHRyKCdBdXRvU29ydCcpO1xyXG4gICAgICAgICAgICBfcG9zdERhdGEgKz0gJyZEZWZhdWx0SXRlbT0nICsgJChfc291cmNlKS5hdHRyKCdEZWZhdWx0SXRlbScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCQoX3NvdXJjZSkuYXR0cignU291cmNlJykgPT0gXCJYbWxcIikge1xyXG4gICAgICAgICAgICAgICAgX3Bvc3REYXRhICs9ICcmWG1sRmlsZUNvZGU9JyArICQoX3NvdXJjZSkuYXR0cignWG1sRmlsZUNvZGUnKTtcclxuICAgICAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnJlhtbERhdGFMaXN0S2V5PScgKyAkKF9zb3VyY2UpLmF0dHIoJ1htbERhdGFMaXN0S2V5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoJChfc291cmNlKS5hdHRyKCdTb3VyY2UnKSA9PSBcIkRhdGFiYXNlXCIpIHtcclxuICAgICAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnJkRhdGFPYmplY3ROYW1lPScgKyAkKF9zb3VyY2UpLmF0dHIoJ0RhdGFPYmplY3ROYW1lJyk7XHJcbiAgICAgICAgICAgICAgICBfcG9zdERhdGEgKz0gJyZVcmxJZGVudGlmaWVyPScgKyAkKF9zb3VyY2UpLmF0dHIoJ1VybElkZW50aWZpZXInKTtcclxuICAgICAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnJkFkZGl0aW9uYWxXaGVyZT0nICsgJChfc291cmNlKS5hdHRyKCdBZGRpdGlvbmFsV2hlcmUnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIF9wYXJlbnRWYWx1ZSA9ICcnO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwY3RybC5zcGxpdCgnLCcpLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3BhcmVudElubmVyID0gJyMnICsgcGN0cmwuc3BsaXQoJywnKVtqXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaiA+IDApIF9wYXJlbnRWYWx1ZSArPSAnLCc7XHJcbiAgICAgICAgICAgICAgICBpZiAoJChfcGFyZW50SW5uZXIpLnZhbCgpID09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudFZhbHVlICs9ICQoX3BhcmVudElubmVyICsgJyBpbnB1dDpjaGVja2VkJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfcGFyZW50VmFsdWUgKz0gJChfcGFyZW50SW5uZXIpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF9wYXJlbnRWYWx1ZSA9IF9wYXJlbnRWYWx1ZS5yZXBsYWNlKCd1bmRlZmluZWQnLCAnJyk7XHJcbiAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnJlBhcmVudFZhbHVlPScgKyBfcGFyZW50VmFsdWU7XHJcblxyXG4gICAgICAgICAgICAkKF9zb3VyY2UpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvc2VydmljZXMvYWdvcmFSZWxhdGlvbmFsRGF0YVNvdXJjZS5hc2h4JyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IF9wb3N0RGF0YSxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0TGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoX3NvdXJjZSkuZ2V0KDApLm9wdGlvbnMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJC5lYWNoKHJlc3VsdExpc3QsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9zb3VyY2UpLmdldCgwKS5vcHRpb25zWyQoX3NvdXJjZSkuZ2V0KDApLm9wdGlvbnMubGVuZ3RoXSA9IG5ldyBPcHRpb24oaXRlbS5WYWx1ZSwgaXRlbS5LZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkKF9zb3VyY2UpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhZnRlckxvYWQgIT0gbnVsbCkgYWZ0ZXJMb2FkKCQoX3NvdXJjZSkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhUGFyZW50RGF0YVNvdXJjZSkgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBlbnRlckZ1bGxTY3JlZW4oKSB7XHJcbiAgICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xyXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xyXG4gICAgfSBlbHNlIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oRWxlbWVudC5BTExPV19LRVlCT0FSRF9JTlBVVCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4aXRGdWxsU2NyZWVuKCkge1xyXG4gICAgaWYgKGRvY3VtZW50LmNhbmNlbEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICBkb2N1bWVudC5jYW5jZWxGdWxsU2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICBkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICBkb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNob3dMb2FkaW5nKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBpZiAoJChcImJvZHlcIikuaGFzQ2xhc3MoJ2lzLWJ1c3knKSlcclxuICAgICAgICAgICAgJChcImJvZHlcIikucmVtb3ZlQ2xhc3MoJ2lzLWJ1c3knKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICQoXCJib2R5XCIpLmFkZENsYXNzKCdpcy1idXN5Jyk7XHJcbiAgICB9IGNhdGNoIChlKSB7IH1cclxufVxyXG5cclxudmFyIF9hZ29yYU1zZ0RlbGF5ID0gbnVsbDtcclxuZnVuY3Rpb24gU2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSkge1xyXG4gICAgX3Nob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIHRydWUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBTaG93QWxlcnQobWVzc2FnZSwgZGVsYXksIGNzc0NsYXNzLCB0eXBlLCBlbmFibGVBdXRvQ2xvc2UpIHtcclxuICAgIF9zaG93QWxlcnQobWVzc2FnZSwgZGVsYXksIGNzc0NsYXNzLCB0eXBlLCBlbmFibGVBdXRvQ2xvc2UpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBTaG93QWxlcnQobWVzc2FnZSwgZGVsYXksIGNzc0NsYXNzLCB0eXBlLCBlbmFibGVBdXRvQ2xvc2UsIGVuYWJsZU9LQnV0dG9uKSB7XHJcbiAgICBfc2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSwgZW5hYmxlQXV0b0Nsb3NlLCBlbmFibGVPS0J1dHRvbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIGVuYWJsZUF1dG9DbG9zZSwgZW5hYmxlT0tCdXR0b24sIEFjdGlvblVybCkge1xyXG4gICAgX3Nob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIGVuYWJsZUF1dG9DbG9zZSwgZW5hYmxlT0tCdXR0b24sIEFjdGlvblVybCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFNob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIGVuYWJsZUF1dG9DbG9zZSwgZW5hYmxlT0tCdXR0b24sIEFjdGlvblVybCwgRGlzYWJsZUNsb3NlQnV0dG9uKSB7XHJcbiAgICBfc2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSwgZW5hYmxlQXV0b0Nsb3NlLCBlbmFibGVPS0J1dHRvbiwgQWN0aW9uVXJsLCBEaXNhYmxlQ2xvc2VCdXR0b24pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfc2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSwgZW5hYmxlQXV0b0Nsb3NlLCBlbmFibGVPS0J1dHRvbiwgQWN0aW9uVXJsLCBEaXNhYmxlQ2xvc2VCdXR0b24pIHtcclxuICAgICQoJ2JvZHknKS5hZGRDbGFzcygnYWxlcnRfYm94X2xvYWRlZCcpO1xyXG4gICAgdmFyIF9tc2dCb3ggPSAkKCdkaXYjYWdvcmFBbGVydE1lc3NhZ2VCb3gnKTtcclxuICAgIGlmIChfbXNnQm94ID09IG51bGwgfHwgX21zZ0JveC5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgX21zZ0JveCA9ICQoJzxkaXY+JylcclxuICAgICAgICAgICAgICAgICAgICAuYXR0cignaWQnLCAnYWdvcmFBbGVydE1lc3NhZ2VCb3gnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhjc3NDbGFzcylcclxuICAgICAgICAgICAgICAgICAgICAuaHRtbCgnPGRpdiBjbGFzcz1cIm1lc3NhZ2UtYm9keVwiPjxzcGFuIGlkPVwibXNnXCIgY2xhc3M9XCJtc2dcIj48L3NwYW4+PGRpdiBpZD1cImJ0bl9va1wiPjwvZGl2PjxkaXYgaWQ9XCJidG5fY2xvc2VcIj48L2Rpdj48L2Rpdj4nKTtcclxuICAgICAgICAkKF9tc2dCb3gpLnByZXBlbmRUbygnYm9keScpO1xyXG4gICAgfVxyXG4gICAgJChfbXNnQm94KS5hdHRyKCdjbGFzcycsICcnKTtcclxuICAgICQoX21zZ0JveCkuYWRkQ2xhc3MoY3NzQ2xhc3MpO1xyXG4gICAgJChfbXNnQm94KS5zaG93KCk7XHJcbiAgICAkKF9tc2dCb3gpLmZpbmQoJ3NwYW4jbXNnJykuaHRtbChtZXNzYWdlKTtcclxuICAgIGlmICghRGlzYWJsZUNsb3NlQnV0dG9uKSB7ICQoX21zZ0JveCkuZmluZCgnZGl2I2J0bl9jbG9zZScpLmh0bWwoJzxhIGNsYXNzPVwiY2xvc2VCdG4gcmlnaHRcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIG9uY2xpY2s9XCJqYXZhc2NyaXB0OkNsb3NlQWxlcnQoKTtcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjwvaT48L2E+Jyk7IH1cclxuICAgIGlmIChlbmFibGVPS0J1dHRvbikge1xyXG4gICAgICAgICQoX21zZ0JveCkuZmluZCgnZGl2I2J0bl9vaycpLmh0bWwoJzxhICcgKyAoaXNOb3ROdWxsT3JaZXJvKEFjdGlvblVybCkgPyAnaHJlZj1cIicgKyBBY3Rpb25VcmwgKyAnXCInIDogJ2hyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgb25jbGljaz1cImphdmFzY3JpcHQ6Q2xvc2VBbGVydCgpO1wiJykgKyAnICB0aXRsZT1cIkNsb3NlXCIgY2xhc3M9XCJtZGwtYnV0dG9uIG1kbC1idXR0b24tLXByaW1hcnkgbWRsLWJ1dHRvbi0tcmFpc2VkIG1kbC1qcy1idXR0b24gbWRsLWpzLXJpcHBsZS1lZmZlY3RcIiBzdHlsZT1cImFsaWduLWNvbnRlbnQ6IHJpZ2h0O1wiPk9rPC9hPicpO1xyXG4gICAgfVxyXG4gICAgY2xlYXJUaW1lb3V0KF9hZ29yYU1zZ0RlbGF5KTtcclxuICAgIGlmIChlbmFibGVBdXRvQ2xvc2UpIHtcclxuICAgICAgICBpZiAoZGVsYXkgPT0gbnVsbCkgZGVsYXkgPSA0MDAwO1xyXG4gICAgICAgIF9hZ29yYU1zZ0RlbGF5ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIENsb3NlQWxlcnQoKTtcclxuICAgICAgICB9LCBkZWxheSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENsb3NlQWxlcnQoKSB7XHJcbiAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ2FsZXJ0X2JveF9sb2FkZWQnKTtcclxuICAgICQoJ2RpdiNhZ29yYUFsZXJ0TWVzc2FnZUJveCcpLmhpZGUoKTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKCQoXCJib2R5XCIpLmhhc0NsYXNzKCdpcy1idXN5JykpXHJcbiAgICAgICAgICAgICQoXCJib2R5XCIpLnJlbW92ZUNsYXNzKCdpcy1idXN5Jyk7XHJcbiAgICB9IGNhdGNoIChlKSB7IH1cclxufVxyXG5cclxuZnVuY3Rpb24gUmVjYWxsQ2tlSUZyYW1lKCkge1xyXG4gICAgJCgnaW1nLmNrZV9pZnJhbWUnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKHRoaXMpLnJlcGxhY2VXaXRoKHVuZXNjYXBlKCQodGhpcykuYXR0cignZGF0YS1ja2UtcmVhbGVsZW1lbnQnKSkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEVuYWJsZU5lYXJCeVNlYXJjaChjdHJsLCB1cmxQcmVmaXgsIHVybFN1Zml4LCByYWRpdXMsIGVycmxhbmRpbmdVcmwpIHtcclxuICAgICQoY3RybCkuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJCh0aGlzKS5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGJyb3dzZXIgaGF2ZSBnZW9sb2NhdGlvbiBzdXBwb3J0XHJcbiAgICAgICAgICAgIGlmIChuYXZpZ2F0b3IuZ2VvbG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oc3VjY2Vzc0hhbmRsZXIsIGVycm9ySGFuZGxlciwgeyB0aW1lb3V0OiAyMDAwMCB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KFwiR2VvbG9jYXRpb24gZnVuY3Rpb25hbGl0eSBub3QgYXZhaWxhYmxlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHN1Y2Nlc3NIYW5kbGVyKHBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2xhdGl0dWRlID0gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlLnRvU3RyaW5nKCkucmVwbGFjZSgnLScsICdfJyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2xvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUudG9TdHJpbmcoKS5yZXBsYWNlKCctJywgJ18nKTtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB1cmxQcmVmaXggKyBcIi9ybGF0LVwiICsgX2xhdGl0dWRlICsgXCIvcmxvbi1cIiArIF9sb25naXR1ZGUgKyBcIi9yYWQtXCIgKyByYWRpdXMgKyB1cmxTdWZpeDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiBlcnJvckhhbmRsZXIoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5kZXhPZihcIk9ubHkgc2VjdXJlIG9yaWdpbnMgYXJlIGFsbG93ZWRcIikgPT0gMCkgeyBhbGVydChcIllvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZVwiKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyLmNvZGUgPT0gMSAvKiBQRVJNSVNTSU9OX0RFTklFRCAqLykgeyBhbGVydChcIlBlcm1pc3Npb24gZGVuaWVkIHRvIGFjY2VzcyBnZW9sb2NhdGlvblwiKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyLmNvZGUgPT0gMiAvKiBQT1NJVElPTl9VTkFWQUlMQUJMRSAqLykgeyBhbGVydChcIllvdXIgZ2VvbG9jYXRpb24gaXMgbm90IGF2YWlsYWJsZVwiKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyLmNvZGUgPT0gMyAvKiBUSU1FT1VUICovKSB7IGFsZXJ0KFwiWW91ciBnZW9sb2NhdGlvbiBpcyBub3QgYXZhaWxhYmxlXCIpOyB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgYWxlcnQoXCJZb3VyIGdlb2xvY2F0aW9uIGlzIG5vdCBhdmFpbGFibGVcIik7IH1cclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBlcnJsYW5kaW5nVXJsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gQmFja1RvVG9wKHNlbmRlcikge1xyXG4gICAgdmFyIF9uYXZpZ2F0b3JQb3NpdGlvbiA9ICQoc2VuZGVyKS5jbG9zZXN0KCdbZGF0YS1iYWNrLXRvLXRvcC1jb250YWluZXJdJykub2Zmc2V0KCk7XHJcbiAgICBpZiAoX25hdmlnYXRvclBvc2l0aW9uICE9IG51bGwpIHtcclxuICAgICAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiBfbmF2aWdhdG9yUG9zaXRpb24udG9wIH0sIDcwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgICQoJ2h0bWwsYm9keScpLmFuaW1hdGUoeyBzY3JvbGxUb3A6IDAgfSwgNzAwKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gVG9wVG9Cb3R0b20oc2VuZGVyKSB7XHJcbiAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiAkKHdpbmRvdykuaGVpZ2h0KCkgLSAkKCcjYWdvcmEtbGF5b3V0LWhlYWRlcicpLmhlaWdodCgpIH0sIDcwMCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEVuYWJsZUdvb2dsZUV2ZW50VHJhY2tpbmcoKSB7XHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtZ2EtdHJhY2tdJywgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBfdHJhY2sgPSAkKHRoaXMpLmRhdGEoJ2dhLXRyYWNrJyk7XHJcbiAgICAgICAgICAgIEdvb2dsZUFuYWx5dGljTG9nRXZlbnQoX3RyYWNrKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBHb29nbGVBbmFseXRpY0xvZ0V2ZW50KHRyYWNrKSB7XHJcbiAgICBpZiAoZ2EgPT0gbnVsbCB8fCB0eXBlb2YgKGdhKSA9PSAndW5kZWZpbmVkJykgcmV0dXJuO1xyXG4gICAgdmFyIF9wYXJhbSA9IHRyYWNrLnNwbGl0KCcsJyk7XHJcbiAgICBzd2l0Y2ggKF9wYXJhbS5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgX3BhcmFtWzBdLCBfcGFyYW1bMV0sIF9wYXJhbVsyXSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgZ2EoJ3NlbmQnLCAnZXZlbnQnLCBfcGFyYW1bMF0sIF9wYXJhbVsxXSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBFbmFibGVTdGlja3lIZWFkZXIoc3RhcnRQb2ludCkge1xyXG4gICAgaWYgKHN0YXJ0UG9pbnQgPT0gbnVsbCkgc3RhcnRQb2ludCA9IDA7XHJcblxyXG4gICAgKGZ1bmN0aW9uIChzZW5kZXIpIHtcclxuICAgICAgICB2YXIgX29sZFZhbHVlID0gMDtcclxuICAgICAgICB2YXIgJGNvbnRleHQgPSAkKHNlbmRlcik7XHJcbiAgICAgICAgJCh3aW5kb3cpLm9uKCdzY3JvbGwnLCBfY2hlY2tTdGF0ZSk7XHJcbiAgICAgICAgZnVuY3Rpb24gX2NoZWNrU3RhdGUoKSB7XHJcbiAgICAgICAgICAgIHZhciBfbmV3VmFsdWUgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCk7XHJcbiAgICAgICAgICAgIGlmIChfbmV3VmFsdWUgPiBzdGFydFBvaW50KSAkY29udGV4dC5hZGRDbGFzcygnc2Nyb2xsJyk7IGVsc2UgJGNvbnRleHQucmVtb3ZlQ2xhc3MoJ3Njcm9sbCcpLnJlbW92ZUNsYXNzKCdzY3JvbGwtZG93bicpLnJlbW92ZUNsYXNzKCdzY3JvbGwtdXAnKTtcclxuICAgICAgICAgICAgaWYgKF9vbGRWYWx1ZSA+IF9uZXdWYWx1ZSkgJGNvbnRleHQuYWRkQ2xhc3MoJ3Njcm9sbC11cCcpLnJlbW92ZUNsYXNzKCdzY3JvbGwtZG93bicpO1xyXG4gICAgICAgICAgICBpZiAoX29sZFZhbHVlIDwgX25ld1ZhbHVlKSAkY29udGV4dC5hZGRDbGFzcygnc2Nyb2xsLWRvd24nKS5yZW1vdmVDbGFzcygnc2Nyb2xsLXVwJyk7XHJcbiAgICAgICAgICAgIF9vbGRWYWx1ZSA9IF9uZXdWYWx1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIF9jaGVja1N0YXRlKCk7XHJcbiAgICB9KSgkKCdib2R5JykpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBDbG9zZUFnb3JhRHJvcERvd25PbkJvZHlDbGljaygpIHtcclxuICAgICQoZG9jdW1lbnQpLm9uKCdyZXNldCcsICcuYWdvcmEtZHJvcGRvd24nLCBudWxsLCBmdW5jdGlvbiAoKSB7IHRyeSB7IHZhciBzdGF0ZSA9ICQodGhpcykuY2hpbGRyZW4oJ2lucHV0JykuZ2V0KDApOyBpZiAoc3RhdGUuY2hlY2tlZCkgc3RhdGUuY2hlY2tlZCA9IGZhbHNlOyB9IGNhdGNoIChlKSB7IH0gfSk7XHJcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgJHRhcmdldCA9ICQoZS50YXJnZXQpO1xyXG4gICAgICAgICAgICBpZiAoJHRhcmdldC5pcygnaW5wdXQnKSB8fCAkKGRvY3VtZW50KS5maW5kKCR0YXJnZXQpLmxlbmd0aD09MCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB2YXIgJGRyb3BEb3duY29udGFpbmVyID0gJHRhcmdldC5jbG9zZXN0KCcuYWdvcmEtZHJvcGRvd24nKTtcclxuICAgICAgICAgICAgaWYgKCRkcm9wRG93bmNvbnRhaW5lci5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgJCgnLmFnb3JhLWRyb3Bkb3duJykudHJpZ2dlcigncmVzZXQnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICgkZHJvcERvd25jb250YWluZXIuaGFzQ2xhc3MoJ2FjdGlvbnMnKSAmJiAhJHRhcmdldC5oYXNDbGFzcygnYWdvcmEtZHJvcGRvd24taGFuZGxlJykgJiYgJGRyb3BEb3duY29udGFpbmVyLmNoaWxkcmVuKCdpbnB1dDpjaGVja2VkJykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICRkcm9wRG93bmNvbnRhaW5lci50cmlnZ2VyKCdyZXNldCcpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCcuYWdvcmEtZHJvcGRvd24nKS5ub3QoJGRyb3BEb3duY29udGFpbmVyKS50cmlnZ2VyKCdyZXNldCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXgpIHsgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBNZGxSZWxvYWRDb250cm9sU3RhdGUoaXRlbSwgcGFyZW50LCBub0FjdGlvbikge1xyXG4gICAgaWYgKG5vQWN0aW9uID09IG51bGwgfHwgbm9BY3Rpb24gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgbm9BY3Rpb24gPSBmYWxzZTtcclxuICAgIH1cclxuICAgICR0aGlzID0gaXRlbTtcclxuICAgICRwYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICB2YXIgJHBhcnRuZXIgPSAkKFwiI1wiICsgJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSk7XHJcbiAgICB2YXIgJHZhbHVlQmluZCA9ICQoJyMnICsgJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdmFsdWUtYmluZFwiKSk7XHJcbiAgICB2YXIgJHNlYXJjaFZpZXcgPSAkKCcjJyArICRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXZpZXdcIikpO1xyXG4gICAgc3dpdGNoICgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaFwiKSkge1xyXG4gICAgICAgIGNhc2UgXCJTZWxlY3RCb3hcIjpcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICRwYXJlbnQucGFyZW50KCkuZmluZCgnW2RhdGEtc2VhcmNoLWVuYWJsZS1mb3JdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnbWRsLWNlbGwtLWhpZGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJ2lucHV0OmNoZWNrYm94JykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9BY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQXR0cignY2hlY2tlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuY2xvc2VzdCgnLm1kbC1qcy1jaGVja2JveCcpLmxlbmd0aCA+IDApICQodGhpcykuY2xvc2VzdCgnLm1kbC1qcy1jaGVja2JveCcpWzBdLk1hdGVyaWFsQ2hlY2tib3gudW5jaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCdzZWxlY3Qgb3B0aW9uJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQXR0cignc2VsZWN0ZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcubWRsLWpzLXNlbGVjdGZpZWxkJylbMF0uTWF0ZXJpYWxTZWxlY3RmaWVsZC5tZGxEb3duZ3JhZGVfKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7IGNvbnNvbGUubG9nKGVyci5tZXNzYWdlKTsgfVxyXG4gICAgICAgICAgICAkKCdbZGF0YS1zZWFyY2gtZW5hYmxlLWZvcj1cIicgKyAkcGFyZW50LnZhbCgpICsgJ1wiXScpLnJlbW92ZUNsYXNzKCdtZGwtY2VsbC0taGlkZScpO1xyXG4gICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIikgKyAnICgnICsgJHBhcmVudC5wYXJlbnQoKS5maW5kKCdbZGF0YS1zZWFyY2gtZW5hYmxlLWZvcj1cIicgKyAkcGFyZW50LnZhbCgpICsgJ1wiXScpLmZpbmQoXCJpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkXCIpLmxlbmd0aCArICcpJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJncm91cFwiOlxyXG4gICAgICAgICAgICB2YXIgJGdyb3VwUGFyZW50ID0gJHRoaXMuY2xvc2VzdCgnW2RhdGEtc2VhcmNoLWdyb3VwXScpO1xyXG4gICAgICAgICAgICAkc2VhcmNoVmlldyA9ICQoJyMnICsgJGdyb3VwUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12aWV3XCIpKTtcclxuICAgICAgICAgICAgdmFyIF9jb3VudCA9ICRncm91cFBhcmVudC5maW5kKCdbZGF0YS1zZWFyY2g9XCJncm91cFwiXSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkJykubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgX3JlYWRMaXN0ID0ge307XHJcblxyXG4gICAgICAgICAgICAkZ3JvdXBQYXJlbnQuZmluZCgnW2RhdGEtc2VhcmNoPVwiZ3JvdXBcIl0gW2RhdGEtdHlwZT1cImRyb3Bkb3duXCJdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgJF90ZW1wID0gJCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIGlmKCRfdGVtcC52YWwoKSE9XCJcIiAmJiB0eXBlb2YoJF90ZW1wLmRhdGEoJ2RlZmF1bHQtaXRlbScpIT0ndW5kZWZpbmVkJykgJiYgJF90ZW1wLnZhbCgpIT0kX3RlbXAuZGF0YSgnZGVmYXVsdC1pdGVtJykpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NvdW50Kys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJGdyb3VwUGFyZW50LmZpbmQoJ1tkYXRhLXNlYXJjaD1cImdyb3VwXCJdIGlucHV0W3R5cGU9dGV4dF0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciAkX3RlbXAgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9rZXkgPSAkX3RlbXAuYXR0cigndXJsaWRlbnRpZmllcicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTm90TnVsbE9yWmVybygkX3RlbXAudmFsKCkpICYmIHR5cGVvZiAoX3JlYWRMaXN0W19rZXldKSA9PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgICAgICAgICAgICBfcmVhZExpc3RbX2tleV0gPSBfY291bnQrKztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICRncm91cFBhcmVudC5maW5kKCdbZGF0YS1zZWFyY2g9XCJncm91cFwiXSBpbnB1dFt0eXBlPWhpZGRlbl1bb25lc2VhcmNoaWRlbnRpZmllcl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciAkX3RlbXAgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9rZXkgPSAkX3RlbXAuYXR0cignb25lc2VhcmNoaWRlbnRpZmllcicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTm90TnVsbE9yWmVybygkX3RlbXAudmFsKCkpICYmIHR5cGVvZiAoX3JlYWRMaXN0W19rZXldKSA9PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgICAgICAgICAgICBfcmVhZExpc3RbX2tleV0gPSBfY291bnQrKztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoJGdyb3VwUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJyAoJyArIF9jb3VudCArICcpJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJjaGVja0xpc3RcIjpcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICgkcGFyZW50LmF0dHIoJ2RhdGEtc2VhcmNoLWNoaWxkJykgIT0gbnVsbCAmJiAkcGFyZW50LmF0dHIoJ2RhdGEtc2VhcmNoLWNoaWxkJykgPT0gXCJ0cnVlXCIgJiYgJHBhcmVudC5wYXJlbnRzKCkuZmluZCgnW2RhdGEtc2VhcmNoLXBhcmVudD1cInRydWVcIl0nKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJyAoJyArICRwYXJlbnQucGFyZW50KCkuZmluZChcImlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWRcIikubGVuZ3RoICsgJyknKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJyAoJyArICRwYXJlbnQuZmluZChcImlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWRcIikubGVuZ3RoICsgJyknKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIikgKyAnICgnICsgJHBhcmVudC5maW5kKFwiaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZFwiKS5sZW5ndGggKyAnKScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzaW5nbGVJdGVtXCI6XHJcbiAgICAgICAgICAgIGlmICgkdGhpcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAkcGFyZW50LmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoXCJzZWxlY3RcIik7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfbGFiZWxQb3NpdGlvbiA9ICRwYXJlbnQuYXR0cignZGF0YS1zZWFyY2gtbmFtZS1sYWJlbC1wb3NpdGlvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfc2VsZWN0T3B0aW9uID0gdHlwZW9mICgkcGFyZW50LmF0dHIoJ2RhdGEtc2VsZWN0JykpICE9IHVuZGVmaW5lZCAmJiAkcGFyZW50LmF0dHIoJ2RhdGEtc2VsZWN0JykgIT0gbnVsbCAmJiAkcGFyZW50LmF0dHIoJ2RhdGEtc2VsZWN0JykgIT0gJycgPyAkcGFyZW50LmF0dHIoJ2RhdGEtc2VsZWN0JykgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF9sYWJlbFBvc2l0aW9uICE9PSB0eXBlb2YgdW5kZWZpbmVkICYmIF9sYWJlbFBvc2l0aW9uICE9PSBmYWxzZSAmJiBfbGFiZWxQb3NpdGlvbiA9PSAnbGVmdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9zZWxlY3RPcHRpb24gPT0gJ2xhYmVsJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJHRoaXMuYXR0cihcImxhYmVsXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hWaWV3LmF0dHIoJ2RhdGEtc2VsZWN0ZWQtdmFsdWUnLCAkdGhpcy5hdHRyKFwidmFsdWVcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKSArICR0aGlzLmF0dHIoXCJ2YWx1ZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3NlbGVjdE9wdGlvbiA9PSAnbGFiZWwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCR0aGlzLmF0dHIoXCJsYWJlbFwiKSArICRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuYXR0cignZGF0YS1zZWxlY3RlZC12YWx1ZScsICR0aGlzLmF0dHIoXCJ2YWx1ZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkdGhpcy5hdHRyKFwidmFsdWVcIikgKyAkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfc2hvd0NvdW50T25seSA9ICRwYXJlbnQuYXR0cignZGF0YS1zZWFyY2gtbmFtZS1sYWJlbC1zaG93Q291bnRPbmx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKF9zaG93Q291bnRPbmx5KSAhPSAndW5kZWZpbmVkJyAmJiBfc2hvd0NvdW50T25seSAhPSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJyAoJyArICR0aGlzLmxlbmd0aCArICcpJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsgY29uc29sZS5sb2coZXJyLm1lc3NhZ2UpOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfc2tpcExhYmVsQXBwZW5kTGlzdCA9ICRwYXJlbnQuYXR0cignZGF0YS1zZWFyY2gtbmFtZS1sYWJlbC1za2lwLWZvcicpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBfc2tpcExhYmVsQXBwZW5kTGlzdC5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfc2tpcExhYmVsQXBwZW5kTGlzdFtpXSAhPSB1bmRlZmluZWQgJiYgX3NraXBMYWJlbEFwcGVuZExpc3RbaV0gIT0gbnVsbCAmJiBfc2tpcExhYmVsQXBwZW5kTGlzdFtpXSA9PSAkdGhpcy5hdHRyKFwidmFsdWVcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCR0aGlzLmF0dHIoXCJ2YWx1ZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsgY29uc29sZS5sb2coZXJyLm1lc3NhZ2UpOyB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkdGhpcy5hdHRyKFwidmFsdWVcIikgKyAkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICR0aGlzLmFkZENsYXNzKFwic2VsZWN0XCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKElzTm90TnVsbCgkdGhpcy5hdHRyKFwidmFsdWVcIikpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHZhbHVlQmluZC5hdHRyKFwidmFsdWVcIiwgJHRoaXMuYXR0cihcInZhbHVlXCIpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHZhbHVlQmluZC5hdHRyKFwidmFsdWVcIiwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm9uZVNlYXJjaFwiOlxyXG4gICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCR0aGlzLmF0dHIoJ2RhdGEtc2VhcmNoLW5hbWUtbGFiZWwnKSArICcgKCcgKyAoJCgnLm11bHRpc2VsZWN0LWNvbnRleHQgLmFnb3JhLW9uZXNlYXJjaC1tdWx0aS1zZWwtaXRlbS1jb250JykubGVuZ3RoKSArICcpJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJyYW5nZVwiOlxyXG4gICAgICAgICAgICAkcGFydG5lci5yZW1vdmVDbGFzcyhcInMtZC1uXCIpO1xyXG4gICAgICAgICAgICAkcGFyZW50LmFkZENsYXNzKFwicy1kLW5cIik7XHJcbiAgICAgICAgICAgIGlmICgkdGhpcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoSXNOb3ROdWxsKCR0aGlzLmF0dHIoXCJ2YWx1ZVwiKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAkdmFsdWVCaW5kLnZhbCgkdGhpcy5hdHRyKFwidmFsdWVcIikpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAkdmFsdWVCaW5kLnZhbChcIlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoJHZhbHVlQmluZC5jbG9zZXN0KCcubWRsLWpzLXRleHRmaWVsZCcpLmxlbmd0aCA+IDAgJiYgJHZhbHVlQmluZC5jbG9zZXN0KCcubWRsLWpzLXRleHRmaWVsZCcpLmdldCgwKS5NYXRlcmlhbFRleHRmaWVsZCkgJHZhbHVlQmluZC5jbG9zZXN0KCcubWRsLWpzLXRleHRmaWVsZCcpLmdldCgwKS5NYXRlcmlhbFRleHRmaWVsZC5jaGVja0RpcnR5KCk7XHJcbiAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoQmluZFJhbmdlVmlldygkcGFyZW50KSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuLy9TZWFyY2ggQ29udHJvbGVcclxuZnVuY3Rpb24gQmluZFJhbmdlVmlldyhQYXJlbnQpIHtcclxuICAgIHZhciBfbWluTWF4ID0gbmV3IGdldE1pbk1heChQYXJlbnQpO1xyXG4gICAgaWYgKElzTm90TnVsbChfbWluTWF4Lk1pbikgJiYgSXNOb3ROdWxsKF9taW5NYXguTWF4KSAmJiBwYXJzZUludChfbWluTWF4Lk1pbikgPiBwYXJzZUludChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICBhbGVydChcIk1pbmltdW0gdmFsdWUgc2hvdWxkIG5vdCBleGNlZWQgdGhlIG1heGltdW0gdmFsdWVcIik7XHJcbiAgICAgICAgJCgnIycgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXZhbHVlLWJpbmRcIikpLmF0dHIoXCJ2YWx1ZVwiLCBcIlwiKTtcclxuICAgICAgICAkKFwiI1wiICsgJCgnIycgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXBhcnRuZXJcIikpLmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS5hdHRyKFwidmFsdWVcIiwgXCJcIik7XHJcbiAgICAgICAgcmV0dXJuIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3dpdGNoICgkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS5hdHRyKFwib3BlcmF0aW9uXCIpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtaW5cIjpcclxuICAgICAgICAgICAgICAgIHZhciBfbWluVmFsdWUgPSBfbWluTWF4Lk1pbjtcclxuICAgICAgICAgICAgICAgIHZhciAkcGFydG5lciA9ICQoXCIjXCIgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXBhcnRuZXJcIikpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKCRwYXJ0bmVyLmRhdGEoJ2lzLWluaXQnKSkgPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5kYXRhKCdpbml0LXZhbHVlJywgJHBhcnRuZXIuaHRtbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5kYXRhKCdpcy1pbml0JywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKElzTm90TnVsbChfbWluVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2lzU2VsZWN0ID0gJChcIiNcIiArIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSkuaXMoJ3NlbGVjdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWdOYW1lID0gX2lzU2VsZWN0ID8gJ29wdGlvbicgOiAnbGknO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNTZWxlY3QpICRwYXJ0bmVyLmFwcGVuZCgnPG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC10eXBlXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicHJpY2VcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JhbmdlVG9JbmNyZW1lbnQgPSBfZ2V0SW5jcmVtZW50VmFsdWUoX21pblZhbHVlLCBQYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9taW5WYWx1ZSA9IF9nZXRSb3VuZE9mVmFsdWUoX21pblZhbHVlLCBfcmFuZ2VUb0luY3JlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21pblZhbHVlID0gKHBhcnNlSW50KF9taW5WYWx1ZSkgKyBfcmFuZ2VUb0luY3JlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuYXBwZW5kKCc8JyArIHRhZ05hbWUgKyAnIHZhbHVlPVwiJyArIF9taW5WYWx1ZSArICdcIiB0YWJpbmRleD1cIjIyXCI+PHNwYW4+JCcgKyBfbWluVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC8oXFxkKSg/PShcXGRcXGRcXGQpKyg/IVxcZCkpL2csIFwiJDEsXCIpICsgJzwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ5ZWFyXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21pblZhbHVlID0gKHBhcnNlSW50KF9taW5WYWx1ZSkgKyA1KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5hcHBlbmQoJzwnICsgdGFnTmFtZSArICcgdmFsdWU9XCInICsgX21pblZhbHVlICsgJ1wiIHRhYmluZGV4PVwiMjJcIj48c3Bhbj4nICsgX21pblZhbHVlICsgJzwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJiZWRcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWluVmFsdWUgPSAocGFyc2VJbnQoX21pblZhbHVlKSArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLmFwcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWluVmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPicgKyBfbWluVmFsdWUgKyAnPC9zcGFuPjwvJyArIHRhZ05hbWUgKyAnPicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJhdGhcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWluVmFsdWUgPSAocGFyc2VJbnQoX21pblZhbHVlKSArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLmFwcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWluVmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPicgKyBfbWluVmFsdWUgKyAnPC9zcGFuPjwvJyArIHRhZ05hbWUgKyAnPicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb3ROdWxsT3JaZXJvKFBhcmVudC5hdHRyKCdkYXRhLWRlZmF1bHQtaW5jcmVtZW50JykpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21pblZhbHVlID0gKHBhcnNlSW50KF9taW5WYWx1ZSkgKyBwYXJzZUludChQYXJlbnQuYXR0cignZGF0YS1kZWZhdWx0LWluY3JlbWVudCcpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLmFwcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWluVmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPicgKyBfbWluVmFsdWUgKyAnPC9zcGFuPjwvJyArIHRhZ05hbWUgKyAnPicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5hcHBlbmQoJzwnICsgdGFnTmFtZSArICcgdmFsdWU9XCIwXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPkFueTwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKCRwYXJ0bmVyLmRhdGEoJ2lzLWluaXQnKSkgIT0gJ3VuZGVmaW5lZCcgJiYgJHBhcnRuZXIuZGF0YSgnaXMtaW5pdCcpID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuaHRtbCgkcGFydG5lci5kYXRhKCdpbml0LXZhbHVlJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibWF4XCI6XHJcbiAgICAgICAgICAgICAgICB2YXIgX21heFZhbHVlID0gX21pbk1heC5NYXg7XHJcbiAgICAgICAgICAgICAgICB2YXIgJHBhcnRuZXIgPSAkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1wYXJ0bmVyXCIpKTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKCRwYXJ0bmVyLmRhdGEoJ2lzLWluaXQnKSkgPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5kYXRhKCdpbml0LXZhbHVlJywgJHBhcnRuZXIuaHRtbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5kYXRhKCdpcy1pbml0JywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoSXNOb3ROdWxsKF9tYXhWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfaXNTZWxlY3QgPSAkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1wYXJ0bmVyXCIpKS5pcygnc2VsZWN0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhZ05hbWUgPSBfaXNTZWxlY3QgPyAnb3B0aW9uJyA6ICdsaSc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NlbGVjdCkgJHBhcnRuZXIuYXBwZW5kKCc8b3B0aW9uIHZhbHVlPVwiXCI+PC9vcHRpb24+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yYW5nZVRvRGVjcmVtZW50ID0gX2dldERlY3JlbWVudFZhbHVlKF9tYXhWYWx1ZSwgUGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBfbWF4VmFsdWUgPSBfZ2V0Um91bmRPZlZhbHVlKF9tYXhWYWx1ZSwgX3JhbmdlVG9EZWNyZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTsgKytpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC10eXBlXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicHJpY2VcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWF4VmFsdWUgPSAocGFyc2VJbnQoX21heFZhbHVlKSAtIF9yYW5nZVRvRGVjcmVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX21heFZhbHVlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5wcmVwZW5kKCc8JyArIHRhZ05hbWUgKyAnIHZhbHVlPVwiJyArIF9tYXhWYWx1ZSArICdcIiB0YWJpbmRleD1cIjIyXCI+PHNwYW4+JCcgKyBfbWF4VmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC8oXFxkKSg/PShcXGRcXGRcXGQpKyg/IVxcZCkpL2csIFwiJDEsXCIpICsgJzwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwieWVhclwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tYXhWYWx1ZSA9IChwYXJzZUludChfbWF4VmFsdWUpIC0gNSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXhWYWx1ZSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuYXBwZW5kKCc8JyArIHRhZ05hbWUgKyAnIHZhbHVlPVwiJyArIF9tYXhWYWx1ZSArICdcIiB0YWJpbmRleD1cIjIyXCI+PHNwYW4+JyArIF9tYXhWYWx1ZSArICc8L3NwYW4+PC8nICsgdGFnTmFtZSArICc+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJlZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tYXhWYWx1ZSA9IChwYXJzZUludChfbWF4VmFsdWUpIC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXhWYWx1ZSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuYXBwZW5kKCc8JyArIHRhZ05hbWUgKyAnIHZhbHVlPVwiJyArIF9tYXhWYWx1ZSArICdcIiB0YWJpbmRleD1cIjIyXCI+PHNwYW4+JyArIF9tYXhWYWx1ZSArICc8L3NwYW4+PC8nICsgdGFnTmFtZSArICc+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJhdGhcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWF4VmFsdWUgPSAocGFyc2VJbnQoX21heFZhbHVlKSAtIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbWF4VmFsdWUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLmFwcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWF4VmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPicgKyBfbWF4VmFsdWUgKyAnPC9zcGFuPjwvJyArIHRhZ05hbWUgKyAnPicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm90TnVsbE9yWmVybyhQYXJlbnQuYXR0cignZGF0YS1kZWZhdWx0LWRlY3JlbWVudCcpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNTZXRNYXhWYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc051bGxPckVtcHR5KGlzU2V0TWF4VmFsKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21heFZhbHVlID0gX21pbk1heC5NYXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldE1heFZhbCA9ICdZZXMnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tYXhWYWx1ZSA9IChwYXJzZUludChfbWF4VmFsdWUpIC0gcGFyc2VJbnQoUGFyZW50LmF0dHIoJ2RhdGEtZGVmYXVsdC1kZWNyZW1lbnQnKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX21heFZhbHVlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIucHJlcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWF4VmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPicgKyBfbWF4VmFsdWUgKyAnPC9zcGFuPjwvJyArIHRhZ05hbWUgKyAnPicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLnByZXBlbmQoJzwnICsgdGFnTmFtZSArICcgdmFsdWU9XCIwXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPkFueTwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKCRwYXJ0bmVyLmRhdGEoJ2lzLWluaXQnKSkgIT0gJ3VuZGVmaW5lZCcgJiYgJHBhcnRuZXIuZGF0YSgnaXMtaW5pdCcpID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuaHRtbCgkcGFydG5lci5kYXRhKCdpbml0LXZhbHVlJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzd2l0Y2ggKFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdHlwZVwiKSkge1xyXG4gICAgICAgICAgICBjYXNlIFwicHJpY2VcIjpcclxuICAgICAgICAgICAgICAgIGlmIChJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Zvcm1hdHRvUHJpY2UoX21pbk1heC5NaW4pICsgXCItXCIgKyBfZm9ybWF0dG9QcmljZShfbWluTWF4Lk1heCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKElzTm90TnVsbChfbWluTWF4Lk1pbikgJiYgIUlzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Zvcm1hdHRvUHJpY2UoX21pbk1heC5NaW4pICsgXCIrXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCI8XCIgKyBfZm9ybWF0dG9QcmljZShfbWluTWF4Lk1heCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImJlZFwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKElzTm90TnVsbChfbWluTWF4Lk1pbikgJiYgSXNOb3ROdWxsKF9taW5NYXguTWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfbWluTWF4Lk1pbiArIFwiLVwiICsgX21pbk1heC5NYXg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKElzTm90TnVsbChfbWluTWF4Lk1pbikgJiYgIUlzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX21pbk1heC5NaW4gKyBcIitcIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIUlzTm90TnVsbChfbWluTWF4Lk1pbikgJiYgSXNOb3ROdWxsKF9taW5NYXguTWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIjxcIiArIF9taW5NYXguTWF4O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJiYXRoXCI6XHJcbiAgICAgICAgICAgICAgICBpZiAoSXNOb3ROdWxsKF9taW5NYXguTWluKSAmJiBJc05vdE51bGwoX21pbk1heC5NYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9taW5NYXguTWluICsgXCItXCIgKyBfbWluTWF4Lk1heDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoSXNOb3ROdWxsKF9taW5NYXguTWluKSAmJiAhSXNOb3ROdWxsKF9taW5NYXguTWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfbWluTWF4Lk1pbiArIFwiK1wiO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghSXNOb3ROdWxsKF9taW5NYXguTWluKSAmJiBJc05vdE51bGwoX21pbk1heC5NYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiPFwiICsgX21pbk1heC5NYXg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGlmIChJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX21pbk1heC5NaW4gKyBcIi1cIiArIF9taW5NYXguTWF4O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChJc05vdE51bGwoX21pbk1heC5NaW4pICYmICFJc05vdE51bGwoX21pbk1heC5NYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9taW5NYXguTWluICsgXCIrXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCI8XCIgKyBfbWluTWF4Lk1heDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX2Zvcm1hdHRvUHJpY2UobnVtKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGb3JtYXR0IDogJyArIG51bSk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2xhYmVsID0gbnVtO1xyXG4gICAgICAgICAgICAgICAgaWYgKG51bSA9PSBudWxsIHx8IG51bSA9PSB1bmRlZmluZWQgfHwgbnVtID09ICcnKSBfbGFiZWwgPSAnMCc7XHJcbiAgICAgICAgICAgICAgICBpZiAobnVtID49IDEwMDAwMDApIHtcclxuICAgICAgICAgICAgICAgICAgICBfbGFiZWwgPSAnJCcgKyAoX2xhYmVsIC8gMTAwMDAwMCkudG9GaXhlZCgyKS5yZXBsYWNlKC9cXC4/MCskLywgXCJcIikgKyAnTSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChudW0gPj0gMTAwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9sYWJlbCA9ICckJyArIChfbGFiZWwgLyAxMDAwKS50b0ZpeGVkKDIpLnJlcGxhY2UoL1xcLj8wKyQvLCBcIlwiKSArICdLJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF9sYWJlbCA9ICckJyArIF9sYWJlbC5yZXBsYWNlKC9cXC4wKyQvLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBfbGFiZWw7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX2dldEluY3JlbWVudFZhbHVlKHZhbHVlLCBwYXJlbnQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciBfc3RhZ2UgPSAkKHBhcmVudCkuZGF0YSgnc3RhZ2UnKTtcclxuICAgICAgICAgICAgICAgIHZhciBfbWluVmFsdWVUZXh0ID0gJChwYXJlbnQpLmRhdGEoJ21pbi12YWx1ZScpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9taW5WYWx1ZSA9IChQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXR5cGVcIikgPT0gXCJiZWRcIiB8fCBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXR5cGVcIikgPT0gXCJiYXRoXCIgKSA/IDEgOiAxMDAwMDAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9zdGFnZVZhbHVlID0gKFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdHlwZVwiKSA9PSBcImJlZFwiKSB8fCBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXR5cGVcIikgPT0gXCJiYXRoXCIgPyAxIDogMTAwMDAwO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkoX3N0YWdlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3N0YWdlVmFsdWUgPSBwYXJzZUludChfc3RhZ2UsIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChfbWluVmFsdWUpICE9ICd1bmRlZmluZWQnICYmIF9taW5WYWx1ZSAhPSBudWxsICYmIF9taW5WYWx1ZSAhPSAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgX21pblZhbHVlID0gcGFyc2VJbnQoX21pblZhbHVlVGV4dCwgMTApO1xyXG5cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXR5cGVcIikgPT0gXCJiZWRcIiB8fCBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXR5cGVcIikgPT0gXCJiYXRoXCIpID8gMSA6IChwYXJzZUludCh2YWx1ZSkgPCBfbWluVmFsdWUgPyAyNTAwMCA6IChwYXJzZUludCh2YWx1ZSkgPCBfbWluVmFsdWUgKiAxMCA/IDUwMDAwIDogX3N0YWdlVmFsdWUpKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIHJldHVybiAxMDAwMDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBfZ2V0RGVjcmVtZW50VmFsdWUodmFsdWUsIHBhcmVudCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9zdGFnZSA9ICQocGFyZW50KS5kYXRhKCdzdGFnZScpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9zdGFnZVZhbHVlID0gKFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdHlwZVwiKSA9PSBcImJlZFwiIHx8IFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdHlwZVwiKSA9PSBcImJhdGhcIikgPyAxIDogMTAwMDAwO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkoX3N0YWdlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3N0YWdlVmFsdWUgPSBwYXJzZUludChfc3RhZ2UsIDEwKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXR5cGVcIikgPT0gXCJiZWRcIiB8fCBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXR5cGVcIikgPT0gXCJiYXRoXCIpID8gMSA6IChwYXJzZUludCh2YWx1ZSkgPCAxMDAwMDAgPyAxMDAwMCA6IChwYXJzZUludCh2YWx1ZSkgPCAxMDAwMDAwID8gNTAwMDAgOiBfc3RhZ2VWYWx1ZSkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAgICAgcmV0dXJuIDEwMDAwMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIF9nZXRSb3VuZE9mVmFsdWUodmFsdWUsIGluY3JlbWVudGFsVmFsdWUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAocGFyc2VJbnQodmFsdWUpIC0gKHBhcnNlSW50KHZhbHVlKSAlIGluY3JlbWVudGFsVmFsdWUpKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TWluTWF4KFBhcmVudCkge1xyXG4gICAgdmFyIF9taW5WYWx1ZSA9IDAsIF9tYXhWYWx1ZSA9IDA7XHJcbiAgICBzd2l0Y2ggKCQoXCIjXCIgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXZhbHVlLWJpbmRcIikpLmF0dHIoXCJvcGVyYXRpb25cIikpIHtcclxuICAgICAgICBjYXNlIFwibWluXCI6XHJcbiAgICAgICAgICAgIF9taW5WYWx1ZSA9ICQoXCIjXCIgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXZhbHVlLWJpbmRcIikpLnZhbCgpO1xyXG4gICAgICAgICAgICBfbWF4VmFsdWUgPSAkKFwiI1wiICsgJChcIiNcIiArIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSkuYXR0cihcImRhdGEtc2VhcmNoLXZhbHVlLWJpbmRcIikpLnZhbCgpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwibWF4XCI6XHJcbiAgICAgICAgICAgIF9taW5WYWx1ZSA9ICQoXCIjXCIgKyAkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1wYXJ0bmVyXCIpKS5hdHRyKFwiZGF0YS1zZWFyY2gtdmFsdWUtYmluZFwiKSkudmFsKCk7XHJcbiAgICAgICAgICAgIF9tYXhWYWx1ZSA9ICQoXCIjXCIgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXZhbHVlLWJpbmRcIikpLnZhbCgpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiB7IE1pbjogX21pblZhbHVlLCBNYXg6IF9tYXhWYWx1ZSB9O1xyXG59XHJcblxyXG5hZ29yYShmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBOdW1lcmljIG9ubHkgY29udHJvbCBoYW5kbGVyXHJcbiAgICBqUXVlcnkuZm4uRm9yY2VOdW1lcmljT25seSA9XHJcbiAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcykua2V5ZG93bihmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBlLmNoYXJDb2RlIHx8IGUua2V5Q29kZSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5KSBrZXkgPSAwXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxsb3cgYmFja3NwYWNlLCB0YWIsIGRlbGV0ZSwgZW50ZXIsIGFycm93cywgbnVtYmVycyBhbmQga2V5cGFkIG51bWJlcnMgT05MWVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvbWUsIGVuZCwgcGVyaW9kLCBhbmQgbnVtcGFkIGRlY2ltYWxcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPT0gOCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPT0gOSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPT0gMTMgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09IDQ2IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9PSAxMTAgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09IDE5MCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ID49IDM1ICYmIGtleSA8PSA0MCkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleSA+PSA0OCAmJiBrZXkgPD0gNTcpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXkgPj0gOTYgJiYga2V5IDw9IDEwNSkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG5cclxuICAgICQoXCJbZGF0YS1udW1lcmljLW9ubHldXCIpLkZvcmNlTnVtZXJpY09ubHkoKTtcclxuXHJcbiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJChcIltkYXRhLW51bWVyaWMtb25seV1cIikuRm9yY2VOdW1lcmljT25seSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQWxsb3cgYm9va21hcmsgY29uc2lkZXJpbmcgdGhlIHBhZ2UgaGVhZGVyIHdpdGggYW5pbWF0ZSBzY3JvbGxcclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1wYWdlLXNjcm9sbF0nLCBfc2Nyb2xsRm9yUGFnZVNjcm9sbCk7XHJcbiAgICAkKGRvY3VtZW50KS5vbigndGFwJywgJ1tkYXRhLXBhZ2Utc2Nyb2xsXScsIF9zY3JvbGxGb3JQYWdlU2Nyb2xsKTtcclxuICAgIGZ1bmN0aW9uIF9zY3JvbGxGb3JQYWdlU2Nyb2xsKCkge1xyXG4gICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7XHJcbiAgICAgICAgdmFyICRyZWZlcmVuY2VkSXRlbSA9ICQoJyMnICsgJHRoaXMuZGF0YSgncGFnZS1zY3JvbGwnKSk7XHJcbiAgICAgICAgdmFyIF9pdGVtUG9zaXRpb24gPSAkcmVmZXJlbmNlZEl0ZW0gIT0gdW5kZWZpbmVkICYmICRyZWZlcmVuY2VkSXRlbSAhPSBudWxsICYmICRyZWZlcmVuY2VkSXRlbS5sZW5ndGggPiAwID8gJHJlZmVyZW5jZWRJdGVtLm9mZnNldCgpLnRvcCA6IDA7XHJcbiAgICAgICAgdmFyIF9vZmZzZXQgPSAwO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBfdmFsdWUgPSAkdGhpcy5kYXRhKCdwYWdlLXNjcm9sbC1vZmZzZXQnKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAoX3ZhbHVlKSAhPSAndW5kZWZpbmVkJyAmJiBfdmFsdWUgIT0gJycpIF9vZmZzZXQgPSBwYXJzZUludChfdmFsdWUpO1xyXG4gICAgICAgICAgICBlbHNlIF9vZmZzZXQgPSAkKCcjYWdvcmEtbGF5b3V0LWhlYWRlcicpLmhlaWdodCgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICQoXCJodG1sLCBib2R5XCIpLmFuaW1hdGUoeyBzY3JvbGxUb3A6IChfaXRlbVBvc2l0aW9uIC0gX29mZnNldCkgfSwgMTUwMCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyICRyZWZlcmVuY2VkVGFiSXRlbSA9ICQoJyMnICsgJHRoaXMuZGF0YSgncGFnZS1zY3JvbGwtdGFiLWlkJykpO1xyXG4gICAgICAgICAgICAkcmVmZXJlbmNlZFRhYkl0ZW0udHJpZ2dlcignY2xpY2snKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIEJ1dHRvbiB0byBtb3ZlIHRvcCBvZiB0aGUgcGFnZVxyXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJ1tkYXRhLWJhY2stdG8tdG9wXScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBCYWNrVG9Ub3AodGhpcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKGRvY3VtZW50KS5vbigndGFwJywgJ1tkYXRhLWJhY2stdG8tdG9wXScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBCYWNrVG9Ub3AodGhpcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBCdXR0b24gdG8gbW92ZSBib3R0b20gb2YgdGhlIHBhZ2VcclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1iYWNrLXRvLWRvd25dJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFRvcFRvQm90dG9tKHRoaXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJChkb2N1bWVudCkub24oJ3RhcCcsICdbZGF0YS1iYWNrLXRvLWRvd25dJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFRvcFRvQm90dG9tKHRoaXMpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIC8qIFRoaXMgY29kZSB3aWxsIGFsbG93IHRvIGdpdmUgYSByZWRpcmVjdCB1cmwgdG8gYSBjb250YWluZXJcclxuICAgICAgICBkYXRhLWhyZWY9XCI8dXJsPlwiXHJcbiAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICovXHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtaHJlZl0nLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICgkKGUudGFyZ2V0KS5jbG9zZXN0KCdbZGF0YS1ub24tY2xpY2stY29udGVudF0nKS5sZW5ndGggPiAwKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KCQodGhpcykuZGF0YSgnaHJlZicpKSkge1xyXG4gICAgICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHkoJCh0aGlzKS5kYXRhKCd0YXJnZXQnKSkpIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKCQodGhpcykuZGF0YSgnaHJlZicpLCAkKHRoaXMpLmRhdGEoJ3RhcmdldCcpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSAkKHRoaXMpLmRhdGEoJ2hyZWYnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59KTtcclxuXHJcbi8qcmVjdXJzdGlvbiBmb3IgZmlyZSBldmVudCB3aGVuIGNsYXNzIG5hbWUgaXMgY2hhbmdlZCovXHJcbmZ1bmN0aW9uIE9uQ2xhc3NCZWhhdmlvckNoYW5nZShjdHJsLCBoYW5kbGVyKSB7XHJcbiAgICBpZiAoIUlzTnVsbG9yRW1wdHkoJChjdHJsKS5hdHRyKCdvbGRDbGFzc05hbWUnKSkgJiYgJChjdHJsKS5hdHRyKCdvbGRDbGFzc05hbWUnKSAhPSAkKGN0cmwpLmF0dHIoJ2NsYXNzJykpIGhhbmRsZXIoKTtcclxuICAgICQoY3RybCkuYXR0cignb2xkQ2xhc3NOYW1lJywgJChjdHJsKS5hdHRyKCdjbGFzcycpKTtcclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBPbkNsYXNzQmVoYXZpb3JDaGFuZ2UoY3RybCwgaGFuZGxlcik7IH0sIDEwMCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEFuaW1hdGVQbGFjZWhvbGRlclRleHQoY3RybCwgcGh0LCBpZHgpIHtcclxuICAgIHZhciBfcGh0ID0gcGh0O1xyXG4gICAgaWYgKGlkeCA9PSAwKSB7XHJcbiAgICAgICAgX3BodCA9IGN0cmwuYXR0cigncGxhY2Vob2xkZXInKTtcclxuICAgICAgICBjdHJsLmF0dHIoJ3BsYWNlaG9sZGVyJywgJycpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlkeCA9PSBfcGh0Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGN0cmwuYXR0cigncGxhY2Vob2xkZXInLCBfcGh0LnN1YnN0cigwLCArK2lkeCkpOyBcclxuICAgICAgICBBbmltYXRlUGxhY2Vob2xkZXJUZXh0KGN0cmwsIF9waHQsIGlkeCk7XHJcbiAgICB9LCAxNTApO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gQWRkUmVhZE1vcmUobWluTGltaXQsIGxibE1vcmUsIGxibExlc3MpIHtcclxuICAgIC8vVGhpcyBsaW1pdCB5b3UgY2FuIHNldCBhZnRlciBob3cgbXVjaCBjaGFyYWN0ZXJzIHlvdSB3YW50IHRvIHNob3cgUmVhZCBNb3JlLlxyXG4gICAgdmFyIGNhckxtdCA9IG1pbkxpbWl0O1xyXG4gICAgLy8gVGV4dCB0byBzaG93IHdoZW4gdGV4dCBpcyBjb2xsYXBzZWRcclxuICAgIHZhciByZWFkTW9yZVR4dCA9IGxibE1vcmU7XHJcbiAgICAvLyBUZXh0IHRvIHNob3cgd2hlbiB0ZXh0IGlzIGV4cGFuZGVkXHJcbiAgICB2YXIgcmVhZExlc3NUeHQgPSBsYmxMZXNzO1xyXG5cclxuXHJcbiAgICAvL1RyYXZlcnNlIGFsbCBzZWxlY3RvcnMgd2l0aCB0aGlzIGNsYXNzIGFuZCBtYW51cHVsYXRlIEhUTUwgcGFydCB0byBzaG93IFJlYWQgTW9yZVxyXG4gICAgJChcIi5hZGRSZWFkTW9yZVwiKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoJCh0aGlzKS5maW5kKFwiLmZpcnN0U2VjXCIpLmxlbmd0aClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgYWxsc3RyID0gJCh0aGlzKS50ZXh0KCk7XHJcbiAgICAgICAgaWYgKGFsbHN0ci5sZW5ndGggPiBjYXJMbXQpIHtcclxuICAgICAgICAgICAgdmFyIGZpcnN0U2V0ID0gYWxsc3RyLnN1YnN0cmluZygwLCBjYXJMbXQpO1xyXG4gICAgICAgICAgICB2YXIgc2VjZEhhbGYgPSBhbGxzdHIuc3Vic3RyaW5nKGNhckxtdCwgYWxsc3RyLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHZhciBzdHJ0b2FkZCA9IGZpcnN0U2V0ICsgXCI8c3BhbiBjbGFzcz0nU2VjU2VjJz5cIiArIHNlY2RIYWxmICsgXCI8L3NwYW4+PHNwYW4gY2xhc3M9J3JlYWRNb3JlJyAgdGl0bGU9J0NsaWNrIHRvIFNob3cgTW9yZSc+XCIgKyByZWFkTW9yZVR4dCArIFwiPC9zcGFuPjxzcGFuIGNsYXNzPSdyZWFkTGVzcycgdGl0bGU9J0NsaWNrIHRvIFNob3cgTGVzcyc+XCIgKyByZWFkTGVzc1R4dCArIFwiPC9zcGFuPlwiO1xyXG4gICAgICAgICAgICAkKHRoaXMpLmh0bWwoc3RydG9hZGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuICAgIC8vUmVhZCBNb3JlIGFuZCBSZWFkIExlc3MgQ2xpY2sgRXZlbnQgYmluZGluZ1xyXG4gICAgJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIi5yZWFkTW9yZSwucmVhZExlc3NcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQodGhpcykuY2xvc2VzdChcIi5hZGRSZWFkTW9yZVwiKS50b2dnbGVDbGFzcyhcInNob3dsZXNzY29udGVudCBzaG93bW9yZWNvbnRlbnRcIik7XHJcbiAgICB9KTtcclxufVxyXG4iLCLvu79hZ29yYShmdW5jdGlvbiAoKSB7XHJcbiAgICAkKGRvY3VtZW50KS5vbihcImNsaWNrXCIsIFwiW2RhdGEtbW9kYWxkaWFsb2ddXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdHJpZ2dlckVsZW1lbnQgPSAkKHRoaXMpO1xyXG4gICAgICAgIGlmICh0cmlnZ2VyRWxlbWVudC5wcm9wKCdkaXNhYmxlZCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjsgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyaWdnZXJFbGVtZW50LnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJFbGVtZW50LnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xyXG4gICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICQodGhpcykuQWdvcmFEaWFsb2dNb2RhbCh7IEFmdGVyTG9hZDogJCh0aGlzKS5hdHRyKCdkYXRhLW1vZGFsZGlhbG9nLWFmdGVyTG9hZCcpIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIltkYXRhLW1vZGFsZGlhbG9nLWNsb3NlXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJCh0aGlzKS5BZ29yYURpYWxvZ01vZGFsKHsgQ2xvc2VNb2RhbDogdHJ1ZSB9KTtcclxuICAgICAgICB2YXIgc2VuZGVyID0gJCh0aGlzKTtcclxuICAgICAgICBpZiAoc2VuZGVyLmRhdGEoJ21vZGFsZGlhbG9nLWNsb3NlJykgPT0gJ2NsZWFyJylcclxuICAgICAgICBDbGVhckZvcm12YWwoJ1tkYXRhLXJlcXVlc3RdJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKGRvY3VtZW50KS5vbihcImNsaWNrXCIsIFwiW2RhdGEtbW9kYWxkaWFsb2ctY2xvc2UtZm9ybV1cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQodGhpcykuQWdvcmFEaWFsb2dNb2RhbCh7IENsb3NlTW9kYWw6IHRydWUsIEFmdGVyTG9hZDogJCh0aGlzKS5hdHRyKCdkYXRhLW1vZGFsZGlhbG9nLWFmdGVyTG9hZCcpIH0pO1xyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuKGZ1bmN0aW9uICgkKSB7XHJcbiAgICAvL0Zvcm1hdCA6IGRhdGEtbW9kYWxkaWFsb2c9XCJcIiBkYXRhLW1vZGFsZGlhbG9nLWlkPVwiXCIgZGF0YS1tb2RhbGRpYWxvZy1hamF4PVwidHJ1ZVwiIGRhdGEtbW9kYWxkaWFsb2ctc3JjPVwiXCJcclxuICAgICQuZm4uQWdvcmFEaWFsb2dNb2RhbCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7IHJldHVybiBuZXcgYWdvcmFEaWFsb2codGhpcywgb3B0aW9ucyk7IH07XHJcbiAgICBmdW5jdGlvbiBhZ29yYURpYWxvZyhzZW5kZXIsIG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgX2RlZmF1bHRzID0ge1xyXG4gICAgICAgICAgICBTZXJ2aWNlVXJsOiAnJyxcclxuICAgICAgICAgICAgTW9kYWxJZDogJ0lCUG1vZGFsY29udGFpbmVyJyxcclxuICAgICAgICAgICAgUGFyYW1zOiBudWxsLFxyXG4gICAgICAgICAgICBIdG1sOiBudWxsLFxyXG4gICAgICAgICAgICBQYXJlbnRDc3M6IG51bGwsXHJcbiAgICAgICAgICAgIEVuYWJsZUNsb3NlQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICBFbmFibGVMb2FkZXI6IHRydWUsXHJcbiAgICAgICAgICAgIEVuYWJsZUFqYXhIdG1sTG9hZDogZmFsc2UsXHJcbiAgICAgICAgICAgIEhpZGVDbG9zZUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIENsb3NlTW9kYWw6IGZhbHNlLFxyXG4gICAgICAgICAgICBDbG9zZVdoZW5Vc2VyUHJlc3NFc2NhcGU6IHRydWUsXHJcbiAgICAgICAgICAgIFRyYW5zaXRpb246ICdGYWRlSW4nLCAvKiBGYWRlSW4sIEFwcGVuZCAqL1xyXG4gICAgICAgICAgICBCZWZvcmVMb2FkOiBudWxsLFxyXG4gICAgICAgICAgICBBZnRlckxvYWQ6IG51bGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBfb3B0aW9ucyA9ICQuZXh0ZW5kKF9kZWZhdWx0cywgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5DbG9zZU1vZGFsKSB7XHJcbiAgICAgICAgICAgICQoc2VuZGVyKS5jbG9zZXN0KCcuYWdvcmEtbWRsLWRhdGEtZGlhbG9nLWNvbnRhaW5lcicpLnRyaWdnZXIoJ2Rpc3Bvc2UnKTtcclxuICAgICAgICAgICAgJChzZW5kZXIpLmNsb3Nlc3QoJy5hZ29yYS1tZGwtZGF0YS1kaWFsb2ctY29udGFpbmVyJykucmVtb3ZlQ2xhc3MoJ3BvcHVwLW9wZW4nKTtcclxuICAgICAgICAgICAgJChzZW5kZXIpLmNsb3Nlc3QoJy5hZ29yYS1tZGwtZGF0YS1kaWFsb2ctY29udGFpbmVyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIC8vJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS50cmlnZ2VyKCdkaXNwb3NlJyk7XHJcbiAgICAgICAgICAgIC8vJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5yZW1vdmVDbGFzcygncG9wdXAtb3BlbicpO1xyXG4gICAgICAgICAgICAvLyQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygncG9wdXAtYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5BZnRlckxvYWQpIHtcclxuICAgICAgICAgICAgX29wdGlvbnMuQWZ0ZXJMb2FkID0gZXZhbChcIihmdW5jdGlvbigpIHsgXCIgKyBfb3B0aW9ucy5BZnRlckxvYWQgKyBcIihcIiArIHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1pZFwiKSArXCIpOyB9KVwiKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlTG9hZGVyKSBTaG93TG9hZGluZygpO1xyXG5cclxuICAgICAgICBMb2FkT3B0aW9ucygpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBMb2FkT3B0aW9ucygpIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChJc05vdE51bGwoc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLXNyY1wiKSkpIF9vcHRpb25zLlNlcnZpY2VVcmwgPSBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctc3JjXCIpO1xyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1hamF4XCIpKSkgX29wdGlvbnMuRW5hYmxlQWpheEh0bWxMb2FkID0gc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLWFqYXhcIik7XHJcbiAgICAgICAgICAgIGlmIChJc05vdE51bGwoc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLVBhcmVudENzc1wiKSkpIF9vcHRpb25zLlBhcmVudENzcyA9IHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1QYXJlbnRDc3NcIik7XHJcbiAgICAgICAgICAgIGlmIChJc05vdE51bGwoc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLUNsb3NlV2hlblVzZXJQcmVzc0VzY2FwZVwiKSkpIF9vcHRpb25zLkNsb3NlV2hlblVzZXJQcmVzc0VzY2FwZSA9IChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctQ2xvc2VXaGVuVXNlclByZXNzRXNjYXBlXCIpID09ICd0cnVlJyk7XHJcbiAgICAgICAgICAgIGlmIChJc05vdE51bGwoc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLUhpZGVDbG9zZUJ1dHRvblwiKSkpIF9vcHRpb25zLkhpZGVDbG9zZUJ1dHRvbiA9IChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctSGlkZUNsb3NlQnV0dG9uXCIpID09ICd0cnVlJyk7XHJcbiAgICAgICAgICAgIGlmIChJc05vdE51bGwoc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLWlkXCIpKSkgX29wdGlvbnMuTW9kYWxJZCA9IHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1pZFwiKTtcclxuICAgICAgICAgICAgR2V0SHRtbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gR2V0SHRtbCgpIHtcclxuXHJcblxyXG4gICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlQWpheEh0bWxMb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAvL1JlbW92ZSBpZiB0aGUgY29udGFpbmVyIGlzIGFscmVhZHkgb3BlbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIC8vR2V0IEh0bWwgRnJvbSBUaGUgU2VydmljZSBVcmxcclxuICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBfb3B0aW9ucy5TZXJ2aWNlVXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdwb3N0JyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2h0bWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IF9vcHRpb25zLlBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgICBjYWNoZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vcHRpb25zLkh0bWwgPSByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQmluZEh0bWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgU2hvd0FsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScsIDMwMDAsICdhbGVydF9ib3gnLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUxvYWRlcikgU2hvd0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93QWxlcnQoJ1NlcnZpY2Ugbm90IGZvdW5kIScsIDMwMDAsICdhbGVydF9ib3gnLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVMb2FkZXIpIFNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BZnRlckxvYWQpIF9vcHRpb25zLkFmdGVyTG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgX29wdGlvbnMuSHRtbCA9ICQoJyMnICsgc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLWlkXCIpKS5jbG9uZSgpLndyYXAoJyMnICsgc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLWlkXCIpKS5odG1sKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIEJpbmRIdG1sKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBCaW5kSHRtbCgpIHtcclxuICAgICAgICAgICAgaWYgKF9vcHRpb25zLkh0bWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgLy9DcmVhdGUgcG9wdXAgY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAkKCc8ZGl2IGlkPVwiJyArIF9vcHRpb25zLk1vZGFsSWQgKyAnXCIgY2xhc3M9XCJhZ29yYS1tZGwtZGF0YS1kaWFsb2ctY29udGFpbmVyICcgKyBfb3B0aW9ucy5QYXJlbnRDc3MgKyAnXCI+PGRpdiBjbGFzcz1cImFnb3JhLW1kbC1kYXRhLWRpYWxvZy1jb250YWluZXItYm9keVwiPicgKyghX29wdGlvbnMuSGlkZUNsb3NlQnV0dG9uID8gJzxkaXYgZGF0YS1tb2RhbGRpYWxvZy1jbG9zZT1cIlwiIGNsYXNzPVwibWRsLWNsb3NlXCI+PC9kaXY+JyA6ICcnKSArIF9vcHRpb25zLkh0bWwgKyAnPC9kaXY+PGRpdiBpZD1cInBvcHVwXCIgY2xhc3M9XCJtZGwtanMtc25hY2tiYXIgbWRsLXNuYWNrYmFyXCI+PGRpdiBjbGFzcz1cIm1kbC1zbmFja2Jhcl9fdGV4dFwiPjwvZGl2PjxidXR0b24gYXJpYS1sYWJlbD1cImJ1dHRvblwiIGNsYXNzPVwibWRsLXNuYWNrYmFyX19hY3Rpb25cIiB0eXBlPVwiYnV0dG9uXCI+PC9idXR0b24+PC9kaXY+IDwvZGl2PicpLmFwcGVuZFRvKFwiYm9keVwiKTtcclxuICAgICAgICAgICAgICAgIC8vJCgnLmFnb3JhLW1kbC1kYXRhLWRpYWxvZy1jb250YWluZXInKS5jc3MoJ3RvcCcsICgkKHdpbmRvdykuc2Nyb2xsVG9wKCkpICsgJ3B4Jyk7XHJcbiAgICAgICAgICAgICAgICAkKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLmFkZENsYXNzKCdwb3B1cC1vcGVuJyk7XHJcbiAgICAgICAgICAgICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ3BvcHVwLWFjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgLy9CaW5kIEh0bWxcclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVMb2FkZXIpIFNob3dMb2FkaW5nKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCEodHlwZW9mIChjb21wb25lbnRIYW5kbGVyKSA9PSAndW5kZWZpbmVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRIYW5kbGVyLnVwZ3JhZGVEb20oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAkKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLmZpbmQoJy5tZGwtdGV4dGZpZWxkLS1mbG9hdGluZy1sYWJlbCBpbnB1dC5tZGwtdGV4dGZpZWxkX19pbnB1dDpub3QoW3BsYWNlaG9sZGVyXSknKS5hdHRyKFwicGxhY2Vob2xkZXJcIiwgXCIgIFwiKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9pZiAocmVDYXB0Y2hhQWdvcmEpIHtcclxuICAgICAgICAgICAgICAgIC8vICAgICQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkuZmluZCgnW2RhdGEtcmVjYXB0Y2hhLWFnb3JhXScpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gICAgcmVDYXB0Y2hhQWdvcmEuaW5pdChyZUNhcHRjaGFBZ29yYS5yZUNhcHRjaGFBcHBJRCwgcmVDYXB0Y2hhQWdvcmEudG9rZW4sIGZhbHNlLCAxKTtcclxuICAgICAgICAgICAgICAgIC8vfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkKGRvY3VtZW50KS5rZXlkb3duKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gXCIyN1wiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQ2xvc2VXaGVuVXNlclByZXNzRXNjYXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5yZW1vdmVDbGFzcygncG9wdXAtb3BlbicpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnYm9keScpLnJlbW92ZUNsYXNzKCdwb3B1cC1hY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59KShqUXVlcnkpO1xyXG5cclxuZnVuY3Rpb24gQ2xvc2VQb3B1cCgpIHtcclxuICAgICQoJ1tkYXRhLW1vZGFsZGlhbG9nLWNsb3NlXScpLnRyaWdnZXIoXCJjbGlja1wiKTtcclxufSIsIu+7v1xyXG5cclxuXHJcbiAgICB3aW5kb3cuYWdSZXF1ZXN0ID0ge1xyXG4gICAgICAgIEdFVDogYXN5bmMgZnVuY3Rpb24gKHNlcnZpY2VVcmwsIGRhdGEpIHtcclxuICAgICAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gJyc7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nICsgKChxdWVyeVN0cmluZyAhPSAnJyA/ICcmJyA6ICcnKSArIGtleSArICc9JyArIGRhdGFba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VydmljZVVybCArPSBzZXJ2aWNlVXJsLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nICsgcXVlcnlTdHJpbmc7XHJcbiAgICAgICAgICAgIHZhciByZXF1ZXN0ID0gYXdhaXQgZmV0Y2goc2VydmljZVVybCwge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgY2FjaGU6IFwibm8tY2FjaGVcIixcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5qc29uKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBQT1NUOiBhc3luYyBmdW5jdGlvbiAoc2VydmljZVVybCwgZGF0YSkge1xyXG4gICAgICAgICAgICB2YXIgZm9ybURhdGEgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBkYXRhW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciByZXF1ZXN0ID0gYXdhaXQgZmV0Y2goc2VydmljZVVybCwge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICAgIGNhY2hlOiBcIm5vLWNhY2hlXCIsXHJcbiAgICAgICAgICAgICAgICBib2R5OiBmb3JtRGF0YVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0Lmpzb24oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcblxyXG4vL0xhenkgbG9hZGVyXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICBhc3luYyBmdW5jdGlvbiBmaW5kTGF6eSgpIHtcclxuICAgICAgICBsZXQgaXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zcmNdOm5vdCguYWctbGF6eSk6bm90KC5uby1hZyk6bm90KFtkYXRhLXNyYyo9XCJ7e1wiXSknKTtcclxuXHJcbiAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcclxuICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdhZy1sYXp5Jyk7XHJcbiAgICAgICAgICAgIHZhciBhY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRhY2hBY3Rpb24oaXRlbSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWcubGF6eScsIGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGF6eScsIGFjdGlvbik7XHJcblxyXG4gICAgICAgICAgICBhY3Rpb24oKTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gaW5pdCgpIHtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYXp5LnJlZnJlc2gnLCBmaW5kTGF6eSk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcucmVmcmVzaCcsIGZpbmRMYXp5KTtcclxuXHJcbiAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5sYXp5LnJlZnJlc2gnKTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKGUpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcubGF6eScpO1xyXG5cclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcubGF6eScpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG5cclxuICAgICAgICB3aW5kb3cuYWdMYXp5ID0ge1xyXG4gICAgICAgICAgICByZWZyZXNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhenkucmVmcmVzaCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHZhbGlkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhenknKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gYXR0YWNoQWN0aW9uKGl0ZW0sIHN1Y2Nlc3MpIHsgICAgICAgICBcclxuICAgICAgICB2YXIgYmxhbmtJbWFnZSA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQVFBQUFDMUhBd0NBQUFBQzBsRVFWUjQybU5rWUFBQUFBWUFBakNCMEM4QUFBQUFTVVZPUks1Q1lJST0nO1xyXG4gICAgICAgIGlmIChhd2FpdCBjaGVja2lzSW5WaWV3cG9ydChpdGVtKSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgICAgIHZhciBzcmNVcmwgPSBhd2FpdCBnZXRGb3JtYXR0ZWRJbWFnZVVybChpdGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSwgaXRlbSk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdkYXRhLXNyYycsIHNyY1VybC51cmwpO1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnVklERU8nKSBpdGVtLnNldEF0dHJpYnV0ZSgnc3JjJywgc3JjVXJsLnVybCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0ubm9kZU5hbWUgPT0gJ09CSkVDVCcgfHwgaXRlbS5ub2RlTmFtZSA9PSAnQVVESU8nKVxyXG4gICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHNyY1VybC51cmwpXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0ubm9kZU5hbWUgPT0gJ0lNRycpIHsgICBcclxuICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5nZXRBdHRyaWJ1dGUoJ3NyYycpICE9IGJsYW5rSW1hZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnYWctbGF6eS1zJyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnc3JjJywgYmxhbmtJbWFnZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNyY1VybCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNyY1VybC5zaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNVcmwuc2l6ZS53aWR0aD4wKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgc3JjVXJsLnNpemUud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjVXJsLnNpemUuaGVpZ2h0ID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBzcmNVcmwuc2l6ZS5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnc3JjJywgc3JjVXJsLnVybCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGVbJ2JhY2tncm91bmQtaW1hZ2UnXSA9IGB1cmwoJyR7c3JjVXJsLnVybH0nKWA7XHJcbiAgICAgICAgICAgIHN1Y2Nlc3MoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICByb290OiBudWxsLFxyXG4gICAgICAgICAgICByb290TWFyZ2luOiBcIjBweFwiLFxyXG4gICAgICAgICAgICB0aHJlc2hvbGQ6IDAuMSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coaXRlbSwnVmlldycpO1xyXG5cclxuICAgICAgICB9LCBvcHRpb25zKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0Rm9ybWF0dGVkSW1hZ2VVcmwodXJsLCBpdGVtKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIGlzQXV0byA9IGl0ZW0uaGFzQXR0cmlidXRlKCdkYXRhLXJhdGlvLWF1dG8nKTsgICAgICAgIFxyXG4gICAgICAgIGlmIChpc0F1dG8gfHwgaXRlbS5ub2RlTmFtZSA9PSAnVklERU8nIHx8IGl0ZW0ubm9kZU5hbWUgPT0gJ09CSkVDVCcpIHJldHVybiB7IHVybDogdXJsIH07ICAgICAgICBcclxuICAgICAgICB2YXIgY3VycmVudCA9IGF3YWl0IGdldEJlc3RGaXRDb250YWluZXIoaXRlbSwgMTYsIDksIDEpO1xyXG4gICAgICAgIGlmIChjdXJyZW50ID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHZhciBtYXRjaCA9IC8uKlxcPyguKj8obWh8bXcpXFw9KFxcZCspKSovZ2kuZXhlYyh1cmwpO1xyXG4gICAgICAgIHZhciBhZGRpdGlvbmFsVXJsID0gJyc7ICAgICAgICBcclxuICAgICAgICBpZiAoaXRlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY3JvcCcpICE9IG51bGwpIGFkZGl0aW9uYWxVcmwgKz0gJyZtb2RlPWNyb3AnO1xyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignLycpID09IDAgJiYgZmFsc2UpIHtcclxuICAgICAgICAgICAgdmFyIHByb2plY3RDb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGNvZGUnKTtcclxuICAgICAgICAgICAgdXJsID0gYGh0dHBzOi8vY2RuLmRhdGFmbG9hdC5jb20vJHtwcm9qZWN0Q29kZX1fQ1dTJHt1cmx9YDtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGNoICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdXJsOiB1cmwsIHNpemU6IGN1cnJlbnQgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4geyB1cmw6IGAke3VybH0/YCArIChjdXJyZW50LndpZHRoID4gMCA/IGBtdz0ke2N1cnJlbnQud2lkdGggKiBjdXJyZW50LnNjYWxlfWAgKyAoY3VycmVudC5oZWlnaHQgPiAwID8gJyYnIDogJycpIDogJycpICsgKGN1cnJlbnQuaGVpZ2h0ID4gMCA/IGBtaD0ke2N1cnJlbnQuaGVpZ2h0ICogY3VycmVudC5zY2FsZX1gIDogJycpICsgYCR7YWRkaXRpb25hbFVybH1gLCBzaXplOiBjdXJyZW50IH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldEJlc3RGaXRDb250YWluZXIoaXRlbSwgZGVmYXVsdFJhdGlvV2lkdGgsIGRlZmF1bHRSYXRpb0hlaWdodCwgZGVmYXVsdFNjYWxlKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIHZhciByYXRpbyA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdkYXRhLXJhdGlvJyk7XHJcbiAgICAgICAgdmFyIHNjYWxlU2l6ZSA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdkYXRhLXNjYWxlJyk7XHJcbiAgICAgICAgaWYgKHNjYWxlU2l6ZSAhPSBudWxsKSBkZWZhdWx0U2NhbGUgPSBwYXJzZUZsb2F0KHNjYWxlU2l6ZSk7XHJcblxyXG4gICAgICAgIHZhciByYXRpb01hdGNoID0gbnVsbDsgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgIGlmIChyYXRpbyAmJiByYXRpbyAhPSBudWxsICYmIChyYXRpb01hdGNoID0gL14oPzx3aWR0aD5bMC05XFwuXXsxLDR9KTooPzxoZWlnaHQ+WzAtOVxcLl17MSw0fSkkL2dpLmV4ZWMocmF0aW8pKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGRlZmF1bHRSYXRpb1dpZHRoID0gcGFyc2VGbG9hdChyYXRpb01hdGNoLmdyb3Vwcy53aWR0aCk7XHJcbiAgICAgICAgICAgIGRlZmF1bHRSYXRpb0hlaWdodCA9IHBhcnNlRmxvYXQocmF0aW9NYXRjaC5ncm91cHMuaGVpZ2h0KTtcclxuICAgICAgICAgICAgaWYgKGRlZmF1bHRSYXRpb1dpZHRoID09IDApIGRlZmF1bHRSYXRpb1dpZHRoID0gLTE7XHJcbiAgICAgICAgICAgIGlmIChkZWZhdWx0UmF0aW9IZWlnaHQgPT0gMCkgZGVmYXVsdFJhdGlvSGVpZ2h0ID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgd2lkdGggPSBjdXJyZW50LndpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSBjdXJyZW50LmhlaWdodDtcclxuICAgICAgICBpZiAoaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2FnLWxhenknKSkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IGl0ZW0uZ2V0QXR0cmlidXRlKFwid2lkdGhcIik7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IGl0ZW0uZ2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIpO1xyXG4gICAgICAgICAgICBpZiAod2lkdGggPT0gdW5kZWZpbmVkIHx8IHdpZHRoID09IG51bGwgfHwgd2lkdGggPT0gJycpXHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGl0ZW0uc3R5bGUud2lkdGg7XHJcblxyXG4gICAgICAgICAgICBpZiAod2lkdGggPT0gdW5kZWZpbmVkIHx8IHdpZHRoID09IG51bGwgfHwgd2lkdGggPT0gJycpIHdpZHRoID0gMDtcclxuICAgICAgICAgICAgZWxzZSB3aWR0aCA9IHBhcnNlSW50KHdpZHRoLnJlcGxhY2UoL1teXFxkXSsvZ2ksICcnKSk7XHJcbiAgICAgICAgICAgIGlmIChoZWlnaHQgPT0gdW5kZWZpbmVkIHx8IGhlaWdodCA9PSBudWxsIHx8IGhlaWdodCA9PSAnJykgaGVpZ2h0ID0gMDtcclxuICAgICAgICAgICAgZWxzZSBoZWlnaHQgPSBwYXJzZUludChoZWlnaHQucmVwbGFjZSgvW15cXGRdKy9naSwgJycpKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCAmJiAoKHdpZHRoID09IHVuZGVmaW5lZCB8fCBoZWlnaHQgPT0gdW5kZWZpbmVkKSB8fCAoaGVpZ2h0IDwgd2lkdGggLyBkZWZhdWx0UmF0aW9XaWR0aCAqIGRlZmF1bHRSYXRpb0hlaWdodCkgfHwgd2lkdGggPCBoZWlnaHQgLyBkZWZhdWx0UmF0aW9IZWlnaHQgKiBkZWZhdWx0UmF0aW9XaWR0aCkpIHtcclxuICAgICAgICAgICAgaWYgKHdpZHRoID4gMClcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IHdpZHRoIC8gZGVmYXVsdFJhdGlvV2lkdGggKiBkZWZhdWx0UmF0aW9IZWlnaHQ7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0IC8gZGVmYXVsdFJhdGlvSGVpZ2h0ICogZGVmYXVsdFJhdGlvV2lkdGg7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYgKCh3aWR0aCA+IDAgfHwgZGVmYXVsdFJhdGlvV2lkdGggPCAwKSAmJiAoaGVpZ2h0ID4gMCB8fCBkZWZhdWx0UmF0aW9IZWlnaHQgPCAwKSkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGguZmxvb3Iod2lkdGgpO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHdpZHRoOiBkZWZhdWx0UmF0aW9XaWR0aCA8IDAgPyAwIDogd2lkdGggKyAoMTAgLSAod2lkdGggJSAxMCkpLCBoZWlnaHQ6IGRlZmF1bHRSYXRpb0hlaWdodCA8IDAgPyAwIDogaGVpZ2h0ICsgKDEwIC0gKGhlaWdodCAlIDEwKSksIHNjYWxlOiBkZWZhdWx0U2NhbGUgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdldEJlc3RGaXRDb250YWluZXIoaXRlbS5wYXJlbnRFbGVtZW50LCBkZWZhdWx0UmF0aW9XaWR0aCwgZGVmYXVsdFJhdGlvSGVpZ2h0LCBkZWZhdWx0U2NhbGUpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBtYXBUb0F1dG9TaXplKHdpZHRoLCBoZWlnaHQpIHsgICAgICAgIFxyXG4gICAgICAgIHJldHVybiB7IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGNoZWNraXNJblZpZXdwb3J0KGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgY3VycmVudCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcclxuICAgICAgICB2YXIgZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZhciBzY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jRWwuc2Nyb2xsVG9wIHx8IGJvZHkuc2Nyb2xsVG9wO1xyXG4gICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY0VsLnNjcm9sbExlZnQgfHwgYm9keS5zY3JvbGxMZWZ0O1xyXG5cclxuICAgICAgICB2YXIgY2xpZW50VG9wID0gZG9jRWwuY2xpZW50VG9wIHx8IGJvZHkuY2xpZW50VG9wIHx8IDA7XHJcbiAgICAgICAgdmFyIGNsaWVudExlZnQgPSBkb2NFbC5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8fCAwO1xyXG5cclxuICAgICAgICB2YXIgZWxlbWVudFRvcCA9IGN1cnJlbnQudG9wICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wO1xyXG4gICAgICAgIHZhciBlbGVtZW50Qm90dG9tID0gY3VycmVudC5ib3R0b20gKyBzY3JvbGxUb3AgLSBjbGllbnRUb3A7XHJcblxyXG4gICAgICAgIGxldCB2aWV3cG9ydFRvcCA9IHNjcm9sbFRvcDtcclxuICAgICAgICBsZXQgdmlld3BvcnRCb3R0b20gPSB2aWV3cG9ydFRvcCArIHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gZWxlbWVudEJvdHRvbSA+IHZpZXdwb3J0VG9wICYmIGVsZW1lbnRUb3AgPCB2aWV3cG9ydEJvdHRvbTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGluaXQpO1xyXG5cclxuICAgXHJcblxyXG59KSgpO1xyXG5cclxuIFxyXG5cclxuLypBY2NvcmRpb24gSlMqL1xyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLml0ZW0tYWNjLWlcIikgIT0gbnVsbCkge1xyXG5cclxuXHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5pdGVtLWFjYy1pXCIpLmZvckVhY2goKGFjY2l0ZW0pID0+IHtcclxuXHJcblxyXG4gICAgICAgICAgICBjb25zdCBhY2NvcmRpb25JdGVtQm9keSA9IGFjY2l0ZW0uY2xvc2VzdChcIi5pdGVtLWFjYy1jXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFjY2l0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGFjY29yZGlvbkl0ZW1Cb2R5LnN0eWxlLm1heEhlaWdodCA9IGFjY29yZGlvbkl0ZW1Cb2R5LnNjcm9sbEhlaWdodCArIFwicHhcIjtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICBhY2NpdGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIGFjY2l0ZW0uY2xhc3NMaXN0LnRvZ2dsZShcIm9wZW5cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGFjY2l0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhY2NvcmRpb25JdGVtQm9keS5zdHlsZS5tYXhIZWlnaHQgPSBhY2NvcmRpb25JdGVtQm9keS5zY3JvbGxIZWlnaHQgKyBcInB4XCI7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhY2NpdGVtLmNsYXNzTGlzdC5jb250YWlucyhcIm9wZW5cIikpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW9uSXRlbUJvZHkuc3R5bGUubWF4SGVpZ2h0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWFjYy1pXCIpLm9mZnNldEhlaWdodCArIFwicHhcIjtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxufSkgKCk7XHJcblxyXG5cclxuLypUYWIgSlMqL1xyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLml0ZW0tdGFiLWJcIikgIT0gbnVsbCkge1xyXG5cclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGFiLWJcIikuZm9yRWFjaCgoYnV0dG9uLCBpbmRleCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5pdGVtLXRhYi1jXCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lkZUJhciA9IGJ1dHRvbi5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGFic0NvbnRhaW5lciA9IHNpZGVCYXIucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgICAgIHNpZGVCYXIucXVlcnlTZWxlY3RvckFsbCgnLml0ZW0tdGFiLWInKS5mb3JFYWNoKGJ1dHRvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIHRhYnNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLml0ZW0tdGFiLWMnKS5mb3JFYWNoKHRhYiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFiLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzW2luZGV4XS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG59KSAoKTtcclxuXHJcblxyXG4vKlByb3BlcnR5U2VhcmNoQ29udHJvbFdvcmtpbmcgSlMqL1xyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLml0ZW0tc2VhXCIpICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNvbi1tZW51IGEnKS5mb3JFYWNoKGZ1bmN0aW9uIChtZW51aXRlbSkge1xyXG5cclxuICAgICAgICAgICAgbWVudWl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxhYmVsLWNvbicpLnNldEF0dHJpYnV0ZSgnZGF0YS1jb3VudHJ5JywgbWVudWl0ZW0uaW5uZXJIVE1MKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobWVudWl0ZW0uY2xvc2VzdChcIi5pdGVtLWRyLWNcIikucHJldmlvdXNFbGVtZW50U2libGluZy5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG1lbnVpdGVtLmNsb3Nlc3QoXCIuaXRlbS1kci1jXCIpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGRyb3BzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLml0ZW0tZHIgPiAuaXRlbS1kci1sYScpO1xyXG5cclxuICAgICAgICBkcm9wcy5mb3JFYWNoKChkcm9wLCBpZHgpID0+IHtcclxuICAgICAgICAgICAgZHJvcC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIFRvZ2dsZUFjdGl2ZShkcm9wLCBpZHgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gVG9nZ2xlQWN0aXZlKGVsLCBpbmRleCkge1xyXG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgZHJvcHMuZm9yRWFjaCgoZHJvcCwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWR4ICE9PSBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRyb3AuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGZ1bmN0aW9uIChldmVudCkge1xyXG5cclxuICAgICAgICAgICAgZHJvcHMuZm9yRWFjaCgoZHJvcERpdikgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghKGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiLml0ZW0tZHItbGFcIikpICYmICEoZXZlbnQudGFyZ2V0LmNsb3Nlc3QoXCIuaXRlbS1kci1jXCIpKSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBkcm9wRGl2LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pdGVtLWNsJykuZm9yRWFjaChmdW5jdGlvbiAoY2xvc2VidG4pIHtcclxuXHJcbiAgICAgICAgICAgIGNsb3NlYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2xvc2VidG4uY2xvc2VzdChcIi5pdGVtLWRyLWNcIikucHJldmlvdXNFbGVtZW50U2libGluZy5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlYnRuLmNsb3Nlc3QoXCIuaXRlbS1kci1jXCIpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIEVuYWJsZVNlYXJjaGJlbG93VGFiKCkge1xyXG5cclxuXHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSAxMDI0KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLml0ZW0tb25zdHh0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnc3JjaC1vcG5kJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNhbmNlbC1idG4nKS5mb3JFYWNoKGZ1bmN0aW9uIChjYW5jZWxidG4pIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdzcmNoLW9wbmQnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIEVuYWJsZVNlYXJjaGJlbG93VGFiKCk7XHJcblxyXG5cclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBFbmFibGVTZWFyY2hiZWxvd1RhYik7XHJcblxyXG4gICAgfVxyXG5cclxufSkoKTtcclxuXHJcblxyXG4vLyBzY3JvbGwgY2xhc3MgYWRkZWQgaW4gYm9keSB3aGVuIHNjcm9sbGluZ1xyXG5cclxuKGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgIGFzeW5jIGZ1bmN0aW9uIFNjcm9sbGJvZHljbGFzcygpIHtcclxuXHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gd2luZG93LnNjcm9sbFk7XHJcbiAgICAgICAgaWYgKHNjcm9sbFRvcCA+IDEwKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnc2Nyb2xsJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdzY3JvbGwnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIFNjcm9sbGJvZHljbGFzcyk7XHJcblxyXG59KSgpO1xyXG5cclxuXHJcbi8vIEJ1cmdlciBtZW51XHJcblxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgYXN5bmMgZnVuY3Rpb24gSGVhZGVyQnVyZ2VyQ2hhbmdlKCkge1xyXG5cclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVyZ2VyLWNcIikgIT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gQnVyZ2VyQWN0aXZlKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5jb250YWlucyhcIml0ZW0tbi0yXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKS5jbGFzc0xpc3QucmVtb3ZlKFwiaXRlbS1uLTJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKS5jbGFzc0xpc3QuYWRkKFwiaXRlbS1uLTFcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLXVjXCIpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtdWNub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLXVjXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS1oXCIpLnF1ZXJ5U2VsZWN0b3IoXCJuYXZcIikuaW5zZXJ0QmVmb3JlKGl0ZW11Y25vZGUsIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS1oXCIpLnF1ZXJ5U2VsZWN0b3IoXCJuYXZcIikuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIEJ1cmdlckRlYWN0aXZlKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5jb250YWlucyhcIml0ZW0tbi0xXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKS5jbGFzc0xpc3QucmVtb3ZlKFwiaXRlbS1uLTFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKS5jbGFzc0xpc3QuYWRkKFwiaXRlbS1uLTJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLXVjXCIpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtdWNub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLXVjXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS1oXCIpLmFwcGVuZENoaWxkKGl0ZW11Y25vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDEwMjQpIHsgQnVyZ2VyQWN0aXZlKCk7IH1cclxuXHJcblxyXG4gICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiAxMDI0KSB7IEJ1cmdlckRlYWN0aXZlKCk7IH1cclxuXHJcblxyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItYyB+IG5hdlwiKS5vZmZzZXRXaWR0aCA8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVyZ2VyLWMgfiBuYXZcIikuc2Nyb2xsV2lkdGgpIHsgQnVyZ2VyQWN0aXZlKCk7IH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBIZWFkZXJCdXJnZXJDaGFuZ2UoKTtcclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBIZWFkZXJCdXJnZXJDaGFuZ2UpO1xyXG5cclxufSkoKTtcclxuXHJcblxyXG4vLyBSaXBwbGUgZWZmZWN0XHJcbihhc3luYyBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIHJpcHBsZWJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmEtYi0xLCAuYS1iLTIsIC5hLWItMywgLmEtYi00LCAuYS1iLTVcIik7XHJcblxyXG4gICAgaWYgKHJpcHBsZWJ1dHRvbnMgIT0gbnVsbCkge1xyXG5cclxuXHJcbiAgICAgICAgcmlwcGxlYnV0dG9ucy5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHggPSBlLm9mZnNldFg7XHJcbiAgICAgICAgICAgICAgICB2YXIgeSA9IGUub2Zmc2V0WTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcmlwcGxlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3JpcHBsZScpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyaXBwbGVzLmxlbmd0aCA8IDEwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJpcHBsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgICAgICAgICAgICAgICByaXBwbGUuY2xhc3NMaXN0LmFkZCgncmlwcGxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmlwcGxlLnN0eWxlLmxlZnQgPSB4ICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICByaXBwbGUuc3R5bGUudG9wID0geSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChyaXBwbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlwcGxlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgfVxyXG5cclxufSkoKTtcclxuXHJcblxyXG4vKkhvbWUgcGFnZSB2aWRlbyBwbGF5ZXIgc2NyaXB0IHRvIGhpZGUgYnV0dG9uKi9cclxuKGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgdmlkZW9FbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIudmlkZW8tcGxheVwiKTtcclxuXHJcbiAgICBpZiAodmlkZW9FbGVtZW50cyAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgIHZpZGVvRWxlbWVudHMuZm9yRWFjaCh2aWRlbyA9PiB7XHJcbiAgICAgICAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2aWRlby5jbG9zZXN0KFwiZmlndXJlXCIpLmNsYXNzTGlzdC5hZGQoXCJuby1idG5cIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZpZGVvLmNsb3Nlc3QoXCJmaWd1cmVcIikuY2xhc3NMaXN0LnJlbW92ZShcIm5vLWJ0blwiKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG59KSgpO1xyXG5cclxuXHJcbi8qRm9yIHJlZ2lvbiBhbmQgYWdlbnQgZGV0YWlscyBwYWdlcyovXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZXhwYW5kLW1vcmVcIikgIT0gbnVsbCkge1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5leHBhbmQtbW9yZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZXN0KFwiLnN1Ym5hdlwiKS5jbGFzc0xpc3QudG9nZ2xlKFwicmVzcG9uc2l2ZVwiKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnN1Ym5hdiA+IGEnKS5mb3JFYWNoKHN1Ym5hdmJ0biA9PiB7XHJcbiAgICAgICAgICAgIHN1Ym5hdmJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3Nlc3QoXCIuc3VibmF2XCIpLmNsYXNzTGlzdC5yZW1vdmUoXCJyZXNwb25zaXZlXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxufSkoKTtcclxuXHJcblxyXG4vKkZvciBmbG9hdGluZyB0ZXh0cyBpbiBzZWxlY3QgYm94ZXMqL1xyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmxhYmVsLXNlbFwiKSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGxhYmVsc2VscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sYWJlbC1zZWwnKTtcclxuXHJcbiAgICAgICAgbGFiZWxzZWxzLmZvckVhY2gobGFiZWxzZWwgPT4ge1xyXG4gICAgICAgICAgICBsYWJlbHNlbC5xdWVyeVNlbGVjdG9yKCcuaXRlbS1zZWxlY3QnKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGFiZWxzZWwuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxufSkoKTtcclxuIFxyXG5cclxuXHJcbmZ1bmN0aW9uIHNob3dQcm9wZXJ0eUdhbGxlcnkoY2xpZW50Q29kZSwgcHJvcGVydHlSVCwgbWxzTnVtYmVyLCBwaG90b0NvdW50LCByb290Q2xhc3MpIHtcclxuICAgIHZhciBfc1RvcCA9IHdpbmRvdy5wYWdlWU9mZnNldDtcclxuICAgIHZhciBfZ0NvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wcm9wZXJ0eS1nYWxsZXJ5LWNvbnRhaW5lcicpO1xyXG4gICAgdmFyIF9nQ29udGFpbmVyQ2xvc2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuICAgIF9nQ29udGFpbmVyQ2xvc2UuY2xhc3NMaXN0LmFkZCgncHJvcGVydHktZ2FsbGVyeS1jb250YWluZXItY2xvc2UnKTtcclxuICAgIF9nQ29udGFpbmVyQ2xvc2Uuc2V0QXR0cmlidXRlKCd0aXRsZScsICdDbG9zZSBQcm9wZXJ0eSBHYWxsZXJ5Jyk7XHJcbiAgICBfZ0NvbnRhaW5lckNsb3NlLmlubmVyVGV4dCA9ICdYJztcclxuICAgIF9nQ29udGFpbmVyQ2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucHJvcGVydHktZ2FsbGVyeS1jb250YWluZXInKSAhPSBudWxsKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucHJvcGVydHktZ2FsbGVyeS1jb250YWluZXInKS5yZW1vdmUoKTtcclxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgX3NUb3ApO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAndmlzaWJsZSc7XHJcbiAgICB9LCB0cnVlKTtcclxuICAgIGlmIChfZ0NvbnRhaW5lciA9PSBudWxsKSB7XHJcbiAgICAgICAgX2dDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBfZ0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdwcm9wZXJ0eS1nYWxsZXJ5LWNvbnRhaW5lcicpO1xyXG4gICAgICAgIGlmIChyb290Q2xhc3MgIT0gbWxzTnVtYmVyKSBfZ0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHJvb3RDbGFzcyk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfZ0NvbnRhaW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgX2dDb250YWluZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJzLXctMTAwIHMtaC0xMDAgcy1wLXIgaGVyby1zbGlkZXJcIj48aSBjbGFzcz1cImxlZnQtYnRuXCI+Jmx0OzwvaT48ZGl2IGNsYXNzPVwiaXRlbS1zIHNob3ctbmF2XCI+PC9kaXY+PGkgY2xhc3M9XCJyaWdodC1idG5cIj4mZ3Q7PC9pPjxkaXYgY2xhc3M9XCJkb3RzLXdyYXBwZXJcIj48L2Rpdj48ZGl2IHN0eWxlPVwiY2xlYXI6IGJvdGg7XCI+PC9kaXY+PC9kaXY+JztcclxuICAgIF9nQ29udGFpbmVyLmFwcGVuZENoaWxkKF9nQ29udGFpbmVyQ2xvc2UpO1xyXG5cclxuICAgIHZhciBfaXRlbUNvbnRhaW5lciA9IF9nQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5pdGVtLXMnKTtcclxuICAgIHZhciBfaXRlbUh0bWwgPSBudWxsO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwaG90b0NvdW50OyBpKyspIHtcclxuICAgICAgICBfaXRlbUh0bWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBfaXRlbUh0bWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJpdGVtXCI+PGltZyBjbGFzcz1cImxhenkgcy1oLTEwMCBzLW9mLWNuXCIgYWx0PVwicHJvcGVydHkgcGhvdG8gJyArIChpICsgMSkgKyAnXCIgZGF0YS1zcmM9XCJodHRwczovL2Nkbi5kYXRhZmxvYXQuY29tLycgKyBjbGllbnRDb2RlICsgJ19QVUJMSUMvTUxTUGhvdG9zLycgKyBwcm9wZXJ0eVJULnRvVXBwZXJDYXNlKCkgKyAnLycgKyBtbHNOdW1iZXIgKyAnXycgKyAoaSArIDEpICsgJy5qcGdcIiAvPjwvZGl2PidcclxuICAgICAgICBfaXRlbUNvbnRhaW5lci5hcHBlbmQoX2l0ZW1IdG1sLmZpcnN0RWxlbWVudENoaWxkKTtcclxuICAgIH1cclxuXHJcbiAgICBhZ1NsaWRlcihcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGF1dG9QbGF5OiB0cnVlLFxyXG4gICAgICAgICAgICBhdXRvUGxheURlbGF5OiA1MDAwLFxyXG4gICAgICAgICAgICBsb29wOiB0cnVlLFxyXG4gICAgICAgICAgICBzaG93QnVsbGV0czogdHJ1ZSxcclxuICAgICAgICAgICAgc2hvd0NvbnRyb2xzOiB0cnVlLFxyXG4gICAgICAgICAgICBidWxsZXRDb250YWluZXI6ICcuZG90cy13cmFwcGVyJyxcclxuICAgICAgICAgICAgc2hvd0J1bGxldHNBc1RodW1iOiB0cnVlLFxyXG4gICAgICAgICAgICBpdGVtV3JhcHBlcjogJy5pdGVtLXMnLFxyXG4gICAgICAgICAgICBpdGVtQ29udGFpbmVyOiAnLml0ZW0nLFxyXG4gICAgICAgIH0sICcucHJvcGVydHktZ2FsbGVyeS1jb250YWluZXInLCBmdW5jdGlvbiAoc2xpZGVyKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcclxuICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xyXG4gICAgICAgIH0pO1xyXG5cclxufVxyXG5cclxud2luZG93LmFnU2xpZGVyID0gZnVuY3Rpb24gKHNldHRpbmdzLCBjb250YWluZXIsIG9uSW5pdENvbXBsZXRlKSB7XHJcbiAgICB2YXIgX3NldHRpbmdzID0ge1xyXG4gICAgICAgIGF1dG9QbGF5OiBmYWxzZSxcclxuICAgICAgICBhdXRvUGxheURlbGF5OiAzMDAwLFxyXG4gICAgICAgIGxvb3A6IGZhbHNlLFxyXG4gICAgICAgIHNob3dDb250cm9sczogdHJ1ZSxcclxuICAgICAgICBidG5MZWZ0OiAnLmxlZnQtYnRuJyxcclxuICAgICAgICBidG5SaWdodDogJy5yaWdodC1idG4nLFxyXG4gICAgICAgIHNob3dCdWxsZXRzOiBmYWxzZSxcclxuICAgICAgICBzaG93QnVsbGV0c0FzVGh1bWI6IGZhbHNlLCBcclxuICAgICAgICBidWxsZXRDb250YWluZXI6ICcuYnVsbGV0cycsXHJcbiAgICAgICAgaXRlbVdyYXBwZXI6ICcuYWd5LWNhcm8taW4nLFxyXG4gICAgICAgIHdyYXBwZXJNYXNrOiAwLCAvKiBJdCBzaG91bGQgYmUgaW4gcGVyY2VudGFnZSAwLTEwMCAqL1xyXG4gICAgICAgIGl0ZW1Db250YWluZXI6ICcuYWd5LWNhcm8taXQnXHJcbiAgICB9XHJcbiAgICBpZiAoc2V0dGluZ3MgIT0gbnVsbCAmJiBzZXR0aW5ncyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBfc2V0dGluZ3MgPSBleHRlbmRKc29uKF9zZXR0aW5ncywgc2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb250YWluZXIgPT0gdW5kZWZpbmVkIHx8IGNvbnRhaW5lciA9PSBudWxsKSBjb250YWluZXIgPSAnLmFneS1jYXJvJztcclxuICAgIHZhciBfc2xpZGVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoY29udGFpbmVyKTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgX3NsaWRlcnMgIT0gbnVsbCAmJiBfc2xpZGVycyAhPSB1bmRlZmluZWQgJiYgX3NsaWRlcnMubGVuZ3RoID4gaTsgaSsrKSB7XHJcbiAgICAgICAgaW5pdFNsaWRlcihfc2xpZGVyc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaW5pdFNsaWRlcihzbGlkZXIpIHtcclxuICAgICAgICB2YXIgX2l0ZW1zID0gc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1XcmFwcGVyKTtcclxuICAgICAgICB2YXIgX2l0ZW1zQ291bnQgPSBfaXRlbXMucXVlcnlTZWxlY3RvckFsbChfc2V0dGluZ3MuaXRlbUNvbnRhaW5lcikubGVuZ3RoO1xyXG4gICAgICAgIHZhciBfaXRlbVdpZHRoID0gX2l0ZW1zLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1Db250YWluZXIpLm9mZnNldFdpZHRoO1xyXG4gICAgICAgIHZhciBfaXRlbXNJblZpZXdQb3J0ID0gTWF0aC5yb3VuZChfaXRlbXMub2Zmc2V0V2lkdGggLyBfaXRlbVdpZHRoKTtcclxuICAgICAgICB2YXIgX2FjdGl2ZVNJdGVtSWR4ID0gMCwgX2FjdGl2ZUVJdGVtSWR4ID0gX2l0ZW1zQ291bnQsIF9hY3RpdmVQYWdlSWR4ID0gMDtcclxuICAgICAgICB2YXIgX2J0bkxlZnQgPSAoX3NldHRpbmdzLmJ0bkxlZnQgIT0gbnVsbCAmJiBfc2V0dGluZ3MuYnRuTGVmdCAhPSB1bmRlZmluZWQpID8gc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ0bkxlZnQpIDogbnVsbDtcclxuICAgICAgICB2YXIgX2J0blJpZ2h0ID0gKF9zZXR0aW5ncy5idG5SaWdodCAhPSBudWxsICYmIF9zZXR0aW5ncy5idG5SaWdodCAhPSB1bmRlZmluZWQpID8gc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ0blJpZ2h0KSA6IG51bGw7XHJcbiAgICAgICAgdmFyIF9wYXVzZVBsYXkgPSBmYWxzZTtcclxuICAgICAgICB2YXIgX2lzSGVyb1NsaWRlciA9IChfaXRlbXMub2Zmc2V0V2lkdGggPT0gX2l0ZW1XaWR0aCk7XHJcbiAgICAgICAgdmFyIF9tb3ZlTGFzdEl0ZW1Ub0ZpcnN0Rm9yV3JhcHBlck1hc2sgPSBmYWxzZTtcclxuICAgICAgICB2YXIgX3dyYXBwZXJNYXN0U2Nyb2xsTGVmdCA9IDA7XHJcblxyXG4gICAgICAgIGlmICghaXNOYU4oX3NldHRpbmdzLndyYXBwZXJNYXNrKSAmJiBfc2V0dGluZ3Mud3JhcHBlck1hc2sgPiAwKSB7XHJcbiAgICAgICAgICAgIF9zZXR0aW5ncy53cmFwcGVyTWFzayA9IF9zZXR0aW5ncy53cmFwcGVyTWFzayA+IDEwMCA/IDEwMCA6IF9zZXR0aW5ncy53cmFwcGVyTWFzaztcclxuICAgICAgICAgICAgX2l0ZW1zLnN0eWxlLnNjcm9sbFBhZGRpbmcgPSBfc2V0dGluZ3Mud3JhcHBlck1hc2sgKyAnJSc7XHJcblxyXG4gICAgICAgICAgICBpZiAoX2l0ZW1zQ291bnQgPiAyKSB7XHJcbiAgICAgICAgICAgICAgICBfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIF9pdGVtQXJyYXkgPSBfaXRlbXMucXVlcnlTZWxlY3RvckFsbChfc2V0dGluZ3MuaXRlbUNvbnRhaW5lcik7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfaXRlbUFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIF9pdGVtQXJyYXlbaV0uY2xhc3NMaXN0LmFkZCgnaWR4LScgKyBpKTtcclxuICAgICAgICAgICAgaWYgKF9tb3ZlTGFzdEl0ZW1Ub0ZpcnN0Rm9yV3JhcHBlck1hc2sgJiYgaSA9PSBfaXRlbUFycmF5Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIF9pdGVtcy5wcmVwZW5kKF9pdGVtQXJyYXlbaV0pO1xyXG4gICAgICAgICAgICAgICAgX3dyYXBwZXJNYXN0U2Nyb2xsTGVmdCA9IF9pdGVtcy5zY3JvbGxMZWZ0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoX2J0bkxlZnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoIV9zZXR0aW5ncy5zaG93Q29udHJvbHMpIF9idG5MZWZ0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIF9idG5MZWZ0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9hY3RpdmVTSXRlbUlkeCA9PSAwICYmICFfc2V0dGluZ3MubG9vcCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgaWYgKF9hY3RpdmVTSXRlbUlkeCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1zLnNjcm9sbExlZnQgPSBfaXRlbVdpZHRoICogKF9pdGVtc0NvdW50IC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlSXRlbXMoX2l0ZW1XaWR0aCAqIChfaXRlbXNDb3VudCAtIF9pdGVtc0luVmlld1BvcnQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5zY3JvbGxMZWZ0ID0gX2l0ZW1zLnNjcm9sbExlZnQgKyAoLV9pdGVtV2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZUl0ZW1zKCghX2lzSGVyb1NsaWRlcikgPyAoX2l0ZW1zLnNjcm9sbExlZnQgKyAoLV9pdGVtV2lkdGgpKSA6ICgoX2FjdGl2ZVNJdGVtSWR4IC0gMSkgKiBfaXRlbVdpZHRoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF9idG5SaWdodCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICghX3NldHRpbmdzLnNob3dDb250cm9scykgX2J0blJpZ2h0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIF9idG5SaWdodC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChfYWN0aXZlRUl0ZW1JZHggPT0gKF9pdGVtc0NvdW50IC0gMSkgJiYgIV9zZXR0aW5ncy5sb29wKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBpZiAoX2FjdGl2ZUVJdGVtSWR4ID09IChfaXRlbXNDb3VudCAtIDEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1zLnNjcm9sbExlZnQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZUl0ZW1zKF93cmFwcGVyTWFzdFNjcm9sbExlZnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1zLnNjcm9sbExlZnQgPSBfaXRlbXMuc2Nyb2xsTGVmdCArICgrX2l0ZW1XaWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlSXRlbXMoKCFfaXNIZXJvU2xpZGVyKSA/IChfaXRlbXMuc2Nyb2xsTGVmdCArICgrX2l0ZW1XaWR0aCkpIDogKChfYWN0aXZlU0l0ZW1JZHggKyAxKSAqIF9pdGVtV2lkdGgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgIGlmIChfc2V0dGluZ3Muc2hvd0J1bGxldHMpIHtcclxuXHJcbiAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgaWYgKHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpID09IG51bGwgfHwgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBfc2V0dGluZ3Muc2hvd0J1bGxldHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IChNYXRoLnJvdW5kKF9pdGVtc0NvdW50IC8gX2l0ZW1zSW5WaWV3UG9ydCkpOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBfYnVsbGV0ID0gKCFfc2V0dGluZ3Muc2hvd0J1bGxldHNBc1RodW1iICYmICFfaXNIZXJvU2xpZGVyKSA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgICAgICBfYnVsbGV0LmNsYXNzTGlzdC5hZGQoJ2RvdCcpO1xyXG4gICAgICAgICAgICAgICAgX2J1bGxldC5jbGFzc0xpc3QuYWRkKCdpZHgtJyArIGkpO1xyXG4gICAgICAgICAgICAgICAgX2J1bGxldC5zZXRBdHRyaWJ1dGUoJ2lkeCcsIGkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKF9zZXR0aW5ncy5zaG93QnVsbGV0c0FzVGh1bWIgJiYgX2lzSGVyb1NsaWRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfdGh1bWJJbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfdGh1bWJJbWFnZVMgPSBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyBpbWcnKSAhPSBudWxsID8gX2l0ZW1zLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1Db250YWluZXIgKyAnLmlkeC0nICsgaSArICcgaW1nJykgOiBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyB2aWRlbycpO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aHVtYkltYWdlLnNldEF0dHJpYnV0ZSgnc3JjJywgKF90aHVtYkltYWdlUy5ub2RlTmFtZSA9PSAnSU1HJykgPyBfdGh1bWJJbWFnZVMuZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpIDogX3RodW1iSW1hZ2VTLmdldEF0dHJpYnV0ZSgncG9zdGVyJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9idWxsZXQuYXBwZW5kQ2hpbGQoX3RodW1iSW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkgX2J1bGxldC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIF9idWxsZXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRQYWdlKHBhcnNlSW50KGkuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ2lkeCcpKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLmFwcGVuZENoaWxkKF9idWxsZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAgIGlmIChfc2V0dGluZ3Muc2hvd0J1bGxldHNBc1RodW1iKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgVGh1bWJXaWR0aCA9IHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLnF1ZXJ5U2VsZWN0b3IoJy5kb3QnKS5vZmZzZXRXaWR0aDtcclxuXHJcblxyXG4gICAgICAgICAgICBpZiAoX2J0bkxlZnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgX2J0bkxlZnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikuc2Nyb2xsTGVmdCAtPSBUaHVtYldpZHRoO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICBpZiAoX2J0blJpZ2h0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIF9idG5SaWdodC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5zY3JvbGxMZWZ0ICs9IFRodW1iV2lkdGg7IFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB2YXIgaXNEcmFnZ2luZyA9IGZhbHNlLCBzdGFydFgsIHN0YXJ0U2Nyb2xsTGVmdDtcclxuXHJcblxyXG4gICAgICAgICAgICB2YXIgZHJhZ1N0YXJ0ID0gKGUpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpc0RyYWdnaW5nID0gdHJ1ZTsgXHJcbiAgICAgICAgICAgICAgICBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5jbGFzc0xpc3QuYWRkKFwiZHJhZ2dpbmdcIik7XHJcbiAgICAgICAgICAgICAgICBzdGFydFggPSBlLnBhZ2VYO1xyXG4gICAgICAgICAgICAgICAgc3RhcnRTY3JvbGxMZWZ0ID0gc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikuc2Nyb2xsTGVmdDtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBkcmFnZ2luZyA9IChlKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFpc0RyYWdnaW5nKSByZXR1cm47IFxyXG4gICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikuc2Nyb2xsTGVmdCA9IHN0YXJ0U2Nyb2xsTGVmdCAtIChlLnBhZ2VYIC0gc3RhcnRYKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBkcmFnU3RvcCA9ICgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpc0RyYWdnaW5nID0gZmFsc2U7IFxyXG4gICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikuY2xhc3NMaXN0LnJlbW92ZShcImRyYWdnaW5nXCIpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBkcmFnU3RhcnQpO1xyXG4gICAgICAgICAgICBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIGRyYWdnaW5nKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZHJhZ1N0b3ApO1xyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYgKF9zZXR0aW5ncy5hdXRvUGxheSkge1xyXG4gICAgICAgICAgICBhdXRvUGxheSgpO1xyXG4gICAgICAgICAgICBfaXRlbXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgZnVuY3Rpb24gKCkgeyBpZiAoX2l0ZW1zLm9mZnNldFdpZHRoID09IF9pdGVtV2lkdGgpIHJldHVybjsgX3BhdXNlUGxheSA9IHRydWU7IH0pO1xyXG4gICAgICAgICAgICBfaXRlbXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgZnVuY3Rpb24gKCkgeyBpZiAoX2l0ZW1zLm9mZnNldFdpZHRoID09IF9pdGVtV2lkdGgpIHJldHVybjsgX3BhdXNlUGxheSA9IGZhbHNlOyB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGF1dG9QbGF5KCkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICghX3BhdXNlUGxheSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9idG5SaWdodC5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXV0b1BsYXkoKTtcclxuICAgICAgICAgICAgfSwgX3NldHRpbmdzLmF1dG9QbGF5RGVsYXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gbG9hZFBhZ2UoaWR4KSB7XHJcbiAgICAgICAgICAgIF9hY3RpdmVQYWdlSWR4ID0gaWR4O1xyXG4gICAgICAgICAgICBfc2V0dGluZ3MuYXV0b1BsYXkgPSBmYWxzZTtcclxuICAgICAgICAgICAgX3BhdXNlUGxheSA9IHRydWU7XHJcbiAgICAgICAgICAgIF9pdGVtcy5zY3JvbGxMZWZ0ID0gKGlkeCAqIF9pdGVtc0luVmlld1BvcnQpICogX2l0ZW1XaWR0aDtcclxuICAgICAgICAgICAgc2V0QWN0aXZlSXRlbXMoKGlkeCAqIF9pdGVtc0luVmlld1BvcnQpICogX2l0ZW1XaWR0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRBY3RpdmVJdGVtcyhfaXRlbXMuc2Nyb2xsTGVmdCk7XHJcbiAgICAgICAgZnVuY3Rpb24gc2V0QWN0aXZlSXRlbXMoc0xlZnQpIHtcclxuICAgICAgICAgICAgX2FjdGl2ZVNJdGVtSWR4ID0gTWF0aC5yb3VuZCgoc0xlZnQgLSBfd3JhcHBlck1hc3RTY3JvbGxMZWZ0KSAvIF9pdGVtV2lkdGgpO1xyXG4gICAgICAgICAgICBfYWN0aXZlRUl0ZW1JZHggPSBNYXRoLnJvdW5kKF9hY3RpdmVTSXRlbUlkeCArIF9pdGVtc0luVmlld1BvcnQgLSAxKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2l0ZW1zQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgX2l0ZW1zLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1Db250YWluZXIgKyAnLmlkeC0nICsgaSkuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA+PSBfYWN0aXZlU0l0ZW1JZHggJiYgaSA8PSBfYWN0aXZlRUl0ZW1JZHgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA8PSBfYWN0aXZlRUl0ZW1JZHggLSAoKF9tb3ZlTGFzdEl0ZW1Ub0ZpcnN0Rm9yV3JhcHBlck1hc2spID8gMSA6IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtcy5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIGkpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2l0ZW1zLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1Db250YWluZXIgKyAnLmlkeC0nICsgaSArICcgdmlkZW8nKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3ZpZGVvID0gX2l0ZW1zLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1Db250YWluZXIgKyAnLmlkeC0nICsgaSArICcgdmlkZW8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92aWRlby5zZXRBdHRyaWJ1dGUoJ3NyYycsIF92aWRlby5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZpZGVvLnBhdXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmlkZW8uY3VycmVudFRpbWUgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZpZGVvLnBsYXkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wYXVzZVBsYXkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgZnVuY3Rpb24gKGUpIHsgX3BhdXNlUGxheSA9IGZhbHNlOyB9LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGwoX3NldHRpbmdzLml0ZW1Db250YWluZXIgKyAnLmlkeC0nICsgaSArICcgaW1nJykuZm9yRWFjaChpbWcgPT4geyBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCBpbWcuZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpKTsgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoX21vdmVMYXN0SXRlbVRvRmlyc3RGb3JXcmFwcGVyTWFzayAmJiBpID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBfaXRlbXMucXVlcnlTZWxlY3RvckFsbChfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyAoX2l0ZW1zQ291bnQgLSAxKSArICcgaW1nJykuZm9yRWFjaChpbWcgPT4geyBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCBpbWcuZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpKTsgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKF9hY3RpdmVTSXRlbUlkeCA9PSAwICYmICFfc2V0dGluZ3MubG9vcCkgX2J0bkxlZnQuY2xhc3NMaXN0LmFkZCgnZGlzYWJsZWQnKTsgZWxzZSBfYnRuTGVmdC5jbGFzc0xpc3QucmVtb3ZlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICBpZiAoX2FjdGl2ZUVJdGVtSWR4ID09IChfaXRlbXNDb3VudCAtIDEpICYmICFfc2V0dGluZ3MubG9vcCkgX2J0blJpZ2h0LmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJyk7IGVsc2UgX2J0blJpZ2h0LmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoX3NldHRpbmdzLnNob3dCdWxsZXRzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IChNYXRoLnJvdW5kKF9pdGVtc0NvdW50IC8gX2l0ZW1zSW5WaWV3UG9ydCkpOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAoTWF0aC5yb3VuZCgoX2FjdGl2ZVNJdGVtSWR4ICsgX2l0ZW1zSW5WaWV3UG9ydCkgLyBfaXRlbXNJblZpZXdQb3J0KSAtIDEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIgKyAnIC5kb3QuaWR4LScgKyBpKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIgKyAnIC5kb3QuaWR4LScgKyBpKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob25Jbml0Q29tcGxldGUgIT0gbnVsbCAmJiBvbkluaXRDb21wbGV0ZSAhPSB1bmRlZmluZWQpIG9uSW5pdENvbXBsZXRlKHNsaWRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZXh0ZW5kSnNvbihzRGVmYXVsdCwgY3VzdG9tKSB7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGN1c3RvbSkge1xyXG4gICAgICAgICAgICBpZiAoY3VzdG9tLmhhc093blByb3BlcnR5KGtleSkpIHNEZWZhdWx0W2tleV0gPSBjdXN0b21ba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNEZWZhdWx0O1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gSXNOb3ROdWxsKFZhbHVlKSB7XHJcbiAgICByZXR1cm4gVmFsdWUgIT0gbnVsbCAmJiBWYWx1ZSAhPSB1bmRlZmluZWQgJiYgVmFsdWUubGVuZ3RoID4gMCAmJiBWYWx1ZSAhPSBcIjBcIiAmJiBWYWx1ZSAhPSAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBJc05vdE51bGxPcklzWmVybyhWYWx1ZSkge1xyXG4gICAgcmV0dXJuIFZhbHVlICE9IG51bGwgJiYgVmFsdWUgIT0gdW5kZWZpbmVkICYmIFZhbHVlLmxlbmd0aCA+IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEVuYWJsZVNlYXJjaEZvcm0oKSB7XHJcbiAgICBmdW5jdGlvbiBzZWFyY2hBY3RvbihzZW5kZXIpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyICRzZW5kZXIgPSAkKHNlbmRlcik7XHJcbiAgICAgICAgICAgIHZhciAkZm9ybSA9ICRzZW5kZXIuY2xvc2VzdCgnW2RhdGEtc2VhcmNoLWZvcm1dJyk7XHJcbiAgICAgICAgICAgIHZhciBfdXJsUXVlcnkgPSBjb21wb3NlVXJsUXVlcnkoeyBzZWxlY3Q6ICRmb3JtIH0pO1xyXG4gICAgICAgICAgICB2YXIgX3J0ID0gJGZvcm0uZGF0YSgnc2VhcmNoLWZvcm0nKTtcclxuICAgICAgICAgICAgdmFyICRzb3J0ID0gJCgnW2RhdGEtc29ydC1vYmplY3Q9XCInICsgX3J0ICsgJ1wiXScpO1xyXG4gICAgICAgICAgICB2YXIgX2RlZmF1bHQgPSAkZm9ybS5kYXRhKCdkZWZhdWx0LXNlYXJjaCcpO1xyXG4gICAgICAgICAgICB2YXIgX2RlZmF1bHRTb3J0ID0gJGZvcm0uZGF0YSgnZGVmYXVsdC1zb3J0Jyk7XHJcbiAgICAgICAgICAgIGlmICgodHlwZW9mIChfZGVmYXVsdCkgIT0gJ3VuZGVmaW5lZCcgJiYgX2RlZmF1bHQgIT0gJycgJiYgX3VybFF1ZXJ5LmluZGV4T2YoJy9hZGRyZXNzLScpID09IC0xICYmIF91cmxRdWVyeS5pbmRleE9mKCcvbWxzLScpID09IC0xKSkgX3VybFF1ZXJ5ICs9IF9kZWZhdWx0O1xyXG4gICAgICAgICAgICBpZiAoJHNvcnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9zb3J0VmFsdWUgPSAkc29ydC52YWwoKTtcclxuICAgICAgICAgICAgICAgIF91cmxRdWVyeSArPSBfc29ydFZhbHVlICE9IG51bGwgJiYgX3NvcnRWYWx1ZSAhPSAnJyA/IF9zb3J0VmFsdWUgOiAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgKF9kZWZhdWx0U29ydCkgIT0gJ3VuZGVmaW5lZCcgJiYgX2RlZmF1bHRTb3J0ICE9IG51bGwgJiYgX2RlZmF1bHRTb3J0ICE9ICcnKSBfdXJsUXVlcnkgKz0gX2RlZmF1bHRTb3J0O1xyXG4gICAgICAgICAgICAkZm9ybS50cmlnZ2VySGFuZGxlcignc2VhcmNoJywgW3sgcXVlcnk6IF91cmxRdWVyeSB9XSk7XHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgIH1cclxuXHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtc2VhcmNoLWZvcm1dIFtkYXRhLXNlYXJjaC1idXR0b25dJywge30sIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzZWFyY2hBY3Rvbih0aGlzKTtcclxuICAgIH0pO1xyXG4gICAgJChkb2N1bWVudCkub24oJ2tleWRvd24nLCAnW2RhdGEtc2VhcmNoLWZvcm1dIFtkYXRhLXNlYXJjaC1hY3Rpb25dJywge30sIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMylcclxuICAgICAgICAgICAgc2VhcmNoQWN0b24odGhpcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKCdbZGF0YS1zZWFyY2gtZm9ybV0nKS5vbignc2VhcmNoJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICB2YXIgJHNlbmRlciA9ICQodGhpcyk7XHJcbiAgICAgICAgdmFyICRwcmVmaXggPSAkc2VuZGVyLmRhdGEoJ3NlYXJjaC1wcmVmaXgnKTtcclxuICAgICAgICB2YXIgX3ByZWZpeCA9IChJc05vdE51bGwoJHByZWZpeCkgJiYgJHByZWZpeCAhPSAndW5kZWZpbmVkJykgPyAkcHJlZml4IDogR2V0U2VhcmNoUHJlZml4Rm9yUmVjb3JkVHlwZSgkc2VuZGVyLmRhdGEoJ3NlYXJjaC1mb3JtJykpO1xyXG4gICAgICAgIHZhciBwYXR0ZXJuID0gL15cXC9cXC8vO1xyXG4gICAgICAgIGlmICghcGF0dGVybi50ZXN0KChfcHJlZml4ICE9IG51bGwgJiYgX3ByZWZpeCAhPSAnJyAmJiBfcHJlZml4ICE9ICd1bmRlZmluZWQnID8gX3ByZWZpeCA6ICcnKSArIGRhdGEucXVlcnkpKVxyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAoX3ByZWZpeCAhPSBudWxsICYmIF9wcmVmaXggIT0gJycgJiYgX3ByZWZpeCAhPSAndW5kZWZpbmVkJyA/IF9wcmVmaXggOiAnJykgKyBkYXRhLnF1ZXJ5O1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEdldFNlYXJjaFByZWZpeEZvclJlY29yZFR5cGUocmVjb3JkVHlwZSkge1xyXG4gICAgc3dpdGNoIChyZWNvcmRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSAnUFJPUEVSVFknOiByZXR1cm4gJy9wcm9wZXJ0aWVzJztcclxuICAgICAgICBjYXNlICdDT01NVU5JVFknOiByZXR1cm4gJy9jb21tdW5pdGllcyc7XHJcbiAgICAgICAgY2FzZSAnUFJPUEVSVFlSRU5UJzogcmV0dXJuICcvcHJvcGVydHktc2VhcmNoLW1hcC1vbi1yZW50JztcclxuICAgICAgICBjYXNlICdQUk9QRVJUWVNPTEQnOiByZXR1cm4gJy9wcm9wZXJ0eS1zZWFyY2gtbWFwL3NvbGQnO1xyXG4gICAgICAgIGNhc2UgJ0FHRU5UJzogcmV0dXJuICcvcmVhbC1lc3RhdGUtYWdlbnRzJztcclxuICAgICAgICBjYXNlICdPRkZJQ0UnOiByZXR1cm4gJy9yZWFsLWVzdGF0ZS1vZmZpY2VzJztcclxuICAgICAgICBjYXNlICdCTE9HJzogcmV0dXJuICcvYmxvZy9zZWFyY2gnO1xyXG4gICAgICAgIGNhc2UgJ0FHRU5UVEVBTSc6IHJldHVybiAnL3JlYWwtZXN0YXRlLWFnZW50cyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJy8nO1xyXG59XHJcbmZ1bmN0aW9uIEdldERlZmF1bHRTb3J0Rm9yUmVjb3JkVHlwZShyZWNvcmRUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHJlY29yZFR5cGUpIHtcclxuICAgICAgICBjYXNlICdQUk9QRVJUWSc6IHJldHVybiAnL2Rzb3J0LXAnO1xyXG4gICAgICAgIGNhc2UgJ0NPTU1VTklUWSc6IHJldHVybiAnL2Rzb3J0LXAnO1xyXG4gICAgICAgIGNhc2UgJ1BST1BFUlRZUkVOVCc6IHJldHVybiAnL2Rzb3J0LXAnO1xyXG4gICAgICAgIGNhc2UgJ0FHRU5UJzogcmV0dXJuICcvc29ydC1uJztcclxuICAgICAgICBjYXNlICdBR0VOVFRFQU0nOiByZXR1cm4gJy9zb3J0LW4nO1xyXG4gICAgICAgIGNhc2UgJ09GRklDRSc6IHJldHVybiAnL3NvcnQtbic7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbn1cclxuZnVuY3Rpb24gZ2V0Q29va2llKGNuYW1lKSB7XHJcbiAgICB2YXIgbmFtZSA9IGNuYW1lICsgXCI9XCI7XHJcbiAgICB2YXIgZGVjb2RlZENvb2tpZSA9IGRlY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5jb29raWUpO1xyXG4gICAgdmFyIGNhID0gZGVjb2RlZENvb2tpZS5zcGxpdCgnOycpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjID0gY2FbaV07XHJcbiAgICAgICAgd2hpbGUgKGMuY2hhckF0KDApID09ICcgJykge1xyXG4gICAgICAgICAgICBjID0gYy5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjLmluZGV4T2YobmFtZSkgPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYy5zdWJzdHJpbmcobmFtZS5sZW5ndGgsIGMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdE1hcERlZmF1bHQoKSB7XHJcbiAgICBpZiAod2luZG93Lm9uTWFwTG9hZGVkKSB3aW5kb3cub25NYXBMb2FkZWQoKTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIEVuYWJsZURlbWFuZEltcG9ydCgpIHtcclxuICAgIF9pbml0KCk7XHJcbiAgICBmdW5jdGlvbiBfaW5pdCgpIHtcclxuICAgICAgICAkKFwiaW1nW2RhdGEtZGVtYW5kLWtleV1cIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIEdldFByb3BlcnRpZXMoJCh0aGlzKSwgJCh0aGlzKS5kYXRhKCdkZW1hbmQtdXJsJyksICQodGhpcykuZGF0YSgnZGVtYW5kLWtleScpLCAkKHRoaXMpLmRhdGEoJ2xheW91dCcpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1jay1ocmVmXScsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBHZXRQcm9wZXJ0aWVzKCQodGhpcykucGFyZW50cygnW2RhdGEtY2stcHJvcGVydHlsaXN0XTpmaXJzdCcpLCAkKHRoaXMpLmRhdGEoJ2NrLWhyZWYnKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eWxpc3RdOmZpcnN0JykuZGF0YSgnY2stZGVtYW5kLWtleScpLCAkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWNrLXByb3BlcnR5bGlzdF06Zmlyc3QnKS5kYXRhKCdjay1kZW1hbmQtbGF5b3V0JykpO1xyXG4gICAgfSk7XHJcblxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHNlbGVjdG9yRWxlbWVudDtcclxuICAgIHZhciBjdXJyZW50U2V0dGluZ3M7XHJcbiAgICB2YXIgbGFuZ3VhZ2VTb3VyY2VzID0ge1xyXG4gICAgICAgIGxhbmd1YWdlczogW1xyXG4gICAgICAgICAgICB7IGNvZGU6ICdlbicsIGxhYmVsOiAnRW5nbGlzaCcgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnZXMnLCBsYWJlbDogJ1NwYW5pc2gnLCBsb2NhbExhYmVsOiAnRXNwYcOxb2wnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ25sJywgbGFiZWw6ICdEdXRjaCcsIGxvY2FsTGFiZWw6ICdOZWRlcmxhbmRzJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdwcicsIGxhYmVsOiAnUG9ydHVnZXNlJywgbG9jYWxMYWJlbDogJ1BvcnR1Z3XDqnMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ2ZyJywgbGFiZWw6ICdGcmVuY2gnLCBsb2NhbExhYmVsOidGcmFuw6dhaXMnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjdXJyZW5jaWVzOiBbXHJcbiAgICAgICAgICAgIHsgY29kZTogJ1VTRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0RvbGxhcicsIGZvcm1hdDogJyQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnQUVEJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnVW5pdGVkIEFyYWIgRW1pcmF0ZXMgRGlyaGFtJywgZm9ybWF0OiAnQUVEIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0JTRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0JhaGFtaWFuIERvbGxhcicsIGZvcm1hdDogJ0IkIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0NBRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0NhbmFkaWFuIERvbGxhcicsIGZvcm1hdDogJyQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnRE9QJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnRG9taW5pY2FuIFBlc28nLCBmb3JtYXQ6ICdSRCQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnRVVSJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnRXVybycsIGZvcm1hdDogJ+KCrCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdKTUQnLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdKYW1haWNhbiBEb2xsYXInLCBmb3JtYXQ6ICdKJCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdLWUQnLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdDYXltYW4gSXNsYW5kcyBEb2xsYXInLCBmb3JtYXQ6ICdDSSQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnTVhOJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnTWV4aWNhbiBQZXNvJywgZm9ybWF0OiAnJCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdQQUInLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdQYW5hbWFuaWFuIEJhbGJvYScsIGZvcm1hdDogJ0IvLiMjIywjIyMsIyMjLiMjJyB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bml0czogW1xyXG4gICAgICAgICAgICB7IGNvZGU6ICdpbXBlcmlhbCcsIGxhYmVsOiAnSW1wZXJpYWwnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ21ldHJpYycsIGxhYmVsOiAnTWV0cmljJyB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICBwcmVzZXRzOiBbXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0JTJywgbG9uZ0NvZGU6J0JIUycsIGxhYmVsOiAnQmFoYW1hcycsIGN1cnJlbmN5OiAnQlNEJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdDQScsIGxvbmdDb2RlOiAnQ0FOJywgbGFiZWw6ICdDYW5hZGEnLCBjdXJyZW5jeTogJ0NBRCcsIGxhbmd1YWdlOiBbJ2VuJywgJ2ZyJ10sIG1lc3N1cmVtZW50OiAnbWV0cmljJywgc3RhdGVzOiB7ICdRQyc6J2ZyJyB9IH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0pNJywgbG9uZ0NvZGU6J0pBTScsIGxhYmVsOiAnSmFtYWljYScsIGN1cnJlbmN5OiAnSk1EJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdLWScsIGxvbmdDb2RlOidDWU0nLCBsYWJlbDogJ0NheW1hbiBJc2xhbmRzJywgY3VycmVuY3k6ICdLWUQnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ1RDJywgbG9uZ0NvZGU6J1RDQScsIGxhYmVsOiAnVHVya3MgJiBDYWljb3MgSXNsYW5kcycsIGxvY2FsTGFiZWw6ICcnLCBjdXJyZW5jeTogJ1VTRCcsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ2ltcGVyaWFsJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdVUycsIGxvbmdDb2RlOidVU0EnLCBsYWJlbDogJ1VuaXRlZCBTdGF0ZXMnLCBsb2NhbExhYmVsOiAnJywgY3VycmVuY3k6ICdVU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdpbXBlcmlhbCcgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnRFknLCBsb25nQ29kZTonRE9NJywgbGFiZWw6ICdEb21pbmljYW4gUmVwdWJsaWMnLCBsb2NhbExhYmVsOiAnUmVww7pibGljYSBEb21pbmljYW5hJywgY3VycmVuY3k6ICdVU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0VTJywgbG9uZ0NvZGU6J0VTUCcsIGxhYmVsOiAnU3BhaW4nLCBsb2NhbExhYmVsOiAnRXNwYcOxYScsIGN1cnJlbmN5OiAnRVVSJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdNWCcsIGxvbmdDb2RlOidNRVgnLCBsYWJlbDogJ01leGljbycsIGxvY2FsTGFiZWw6ICdNw6l4aWNvJywgY3VycmVuY3k6ICdNWE4nLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ1BBJywgbG9uZ0NvZGU6J1BBTicsIGxhYmVsOiAnUGFuYW1hJywgbG9jYWxMYWJlbDogJ1BhbmFtw6EnLCBjdXJyZW5jeTogJ1BBQicsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnTkwnLCBsb25nQ29kZTonTkxEJywgbGFiZWw6ICdOZWRlcmxhbmRzJywgbG9jYWxMYWJlbDogJ05lZGVybGFuZCcsIGN1cnJlbmN5OiAnRVVSJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdQVCcsIGxvbmdDb2RlOidQUlQnLCBsYWJlbDogJ1BvcnR1Z2FsJywgY3VycmVuY3k6ICdFVVInLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcblxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5pdENvbnZlcnRpb25zOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHVuaXQ6ICdTUUZUJyxcclxuICAgICAgICAgICAgICAgIHRyYWdldFVuaXQ6ICdTcS5NJywgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdGFudDogMC4wOTI5MDMsXHJcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogWydTcWZ0JywgJ1NxLkZ0JywgJ1NxLkZ0LicsICdTcS4gRnQuJywgJ1NGJywgJ3NxdWFyZSBmZWV0JywgJ3NxdWFyZSBmZWV0cyddXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHVuaXQ6ICdNSScsXHJcbiAgICAgICAgICAgICAgICB0cmFnZXRVbml0OiAnS00nLFxyXG4gICAgICAgICAgICAgICAgY29uc3RhbnQ6IDEuNjA5MzQsXHJcbiAgICAgICAgICAgICAgICBub3RhdGlvbjpbJ21pJywnbWlsZXMnLCdtaWxlJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdDogJ0FDJyxcclxuICAgICAgICAgICAgICAgIHRyYWdldFVuaXQ6ICdTcS5NJyxcclxuICAgICAgICAgICAgICAgIGNvbnN0YW50OiA0MDQ2Ljg2LFxyXG4gICAgICAgICAgICAgICAgbm90YXRpb246IFsnYWNyZScsICdhY3JlcyddXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcblxyXG5cclxuICAgIH07XHJcblxyXG4gICAgdmFyIHJlY2VudFN0YXRlID0gbnVsbDtcclxuICAgIHZhciB1bml0Q29udmVydGlvblNjaGVtYSA9IG51bGw7ICAgIFxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXQoKSB7XHJcbiAgICAgICAgdmFyIGNoYW5nZUxhbmd1YWdlTm9kZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYWctbGFuZ3VhZ2VdJyk7XHJcbiAgICAgICAgY2hhbmdlTGFuZ3VhZ2VOb2Rlcy5mb3JFYWNoKGVuYWJsZUxhbmd1YWdlU2VsZWN0b3IpO1xyXG4gICAgICAgIHZhciBpc1JlcXVpcmVBdXRvRGljb3ZlcnkgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50Py5jb2RlKVxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUnLCB7IGRldGFpbDogY3VycmVudCB9KSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlzUmVxdWlyZUF1dG9EaWNvdmVyeSA9IHRydWU7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UuY291bnRyeS5hdXRvLWRpc2NvdmVyeScsIGZ1bmN0aW9uIChjb3VudHJ5KSB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdmFyIGF1dG9Db3VudHJ5ID0gbGFuZ3VhZ2VTb3VyY2VzLnByZXNldHMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLmNvZGUgPT0gY291bnRyeS5kZXRhaWwuY291bnRyeUNvZGU7IH0pOyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChhdXRvQ291bnRyeSAhPSBudWxsICYmIGF1dG9Db3VudHJ5Lmxlbmd0aCA+IDAgJiYgYXV0b0NvdW50cnlbMF0uY29kZSAhPSAnVVMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGF1dG9Db3VudHJ5WzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZVRvU2V0ID0gQXJyYXkuaXNBcnJheShhdXRvQ291bnRyeVswXVtrZXldKSA/IGF1dG9Db3VudHJ5WzBdW2tleV1bMF0gOiBhdXRvQ291bnRyeVswXVtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09ICdsYW5ndWFnZScgJiYgYXV0b0NvdW50cnlbMF0uc3RhdGVzICYmIGF1dG9Db3VudHJ5WzBdLnN0YXRlc1tjb3VudHJ5LmRldGFpbC5zdGF0ZV0pIHZhbHVlVG9TZXQgPSBhdXRvQ291bnRyeVswXS5zdGF0ZXNbY291bnRyeS5kZXRhaWwuc3RhdGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQoa2V5LCB2YWx1ZVRvU2V0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UudXBkYXRlJywgeyBkZXRhaWw6IGF1dG9Db3VudHJ5WzBdIH0pKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjdXJyZW50ID0gbGFuZ3VhZ2VTb3VyY2VzLnByZXNldHMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLmNvZGUgPT0gJ1VTJzsgfSlbMF07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgc2V0KGtleSwgQXJyYXkuaXNBcnJheShjdXJyZW50W2tleV0pID8gY3VycmVudFtrZXldWzBdIDogY3VycmVudFtrZXldKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UudXBkYXRlJywgeyBkZXRhaWw6IGN1cnJlbnQgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB1cGRhdGVQcmljZSh0cnVlKTsgICAgICAgICAgXHJcbiAgICAgICAgaWYgKGN1cnJlbnQubGFuZ3VhZ2UgJiYgY3VycmVudC5sYW5ndWFnZS5pbmRleE9mKCdlbicpID09IC0xKVxyXG4gICAgICAgICAgICB1cGRhdGVMYW5ndWFnZSgpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZWNlbnRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnQpO1xyXG4gICAgICAgICAgICBzZXRMYW5ndWFnZVRvU3RvcmUoeyBMb2NhbGU6ICdlbl9VUycgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaEFjdGlvbnMoKTtcclxuICAgICAgICBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEgPSBhd2FpdCBidWlsZFVuaXRDb252ZXJ0aW9uU2NoZW1hKCk7ICAgICAgICBcclxuICAgICAgICB1cGRhdGVNZXNzdXJlbWVudCh0cnVlKTtcclxuICAgICAgICBpZiAoIWlzUmVxdWlyZUF1dG9EaWNvdmVyeSkge1xyXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5hZ0xvY2FsZSkgd2luZG93LmFnTG9jYWxlID0ge307XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZ0xvY2FsZS5sb2NhbGUgPSBjdXJyZW50O1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUuc3VjY2VzcycpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gYnVpbGRVbml0Q29udmVydGlvblNjaGVtYSgpIHtcclxuICAgICAgICB2YXIgZXhwcmVzc2lvblN0cmluZyA9ICcnO1xyXG4gICAgICAgIHZhciBub3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgPSAnJztcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICBub3RhdGlvbkV4cHJlc3Npb25zOiB7fSxcclxuICAgICAgICAgICAgbm90YXRpb25Pbmx5RXhwcmVzc2lvbnM6IHt9LFxyXG4gICAgICAgICAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZUFsbCgvW14wLTlcXFxcLl0vZ2ksICcnKSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZm9ybWF0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycseyBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDIgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGhhdmVWYWxpZEF0dHJpYnV0ZTogZnVuY3Rpb24gKGl0ZW0pIHsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5oYXNBdHRyaWJ1dGUgPyBpdGVtLmhhc0F0dHJpYnV0ZSgnZGF0YS10aCcpIDogZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldExhYmVsRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0QXR0cmlidXRlP2l0ZW0uZ2V0QXR0cmlidXRlKCdkYXRhLXRoJyk6Jyc7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldExhYmVsRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAoaXRlbSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnNldEF0dHJpYnV0ZSlcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnZGF0YS10aCcsIHZhbHVlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0VmFsdWVGb3JBdHRyaWJ1dGU6IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pbm5lclRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldFZhbHVlRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAoaXRlbSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uaW5uZXJUZXh0ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICB2YXIgc3ViRXhwcmVzc2lvblN0cmluZyA9ICcnLCBzdWJOb3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgaXRlbS5ub3RhdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChub3RhdGlvbkl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHN1Yk5vdGF0aW9uRXhwcmVzc2lvblN0cmluZyArPSAoc3ViTm90YXRpb25FeHByZXNzaW9uU3RyaW5nICE9ICcnID8gJ3wnIDogJycpICsgJygoPzxOPicgKyBub3RhdGlvbkl0ZW0ucmVwbGFjZUFsbCgvXFxzL2dpLCAnXFxcXHMnKS5yZXBsYWNlQWxsKC8oW14wLTlBLXpdKS9naSwgJ1xcXFwkMScpICsgJykoXFxcXHN8W15BLXpdfCQpKSc7XHJcbiAgICAgICAgICAgICAgICBzdWJFeHByZXNzaW9uU3RyaW5nICs9IChzdWJFeHByZXNzaW9uU3RyaW5nICE9ICcnID8gJ3wnIDogJycpICsgJygoPzxWPlswLTlcXFxcLFxcXFwuXSspKFxcXFxufFxcXFxzKSooPzxOPicgKyBub3RhdGlvbkl0ZW0ucmVwbGFjZUFsbCgvXFxzL2dpLCAnXFxcXHMnKS5yZXBsYWNlQWxsKC8oW14wLTlBLXpdKS9naSwnXFxcXCQxJykgKyAnKShcXFxcc3xbXkEtel18JCkpJztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5ub3RhdGlvbkV4cHJlc3Npb25zW2l0ZW0udW5pdF0gPSBuZXcgUmVnRXhwKHN1YkV4cHJlc3Npb25TdHJpbmcsICdnbWknKTtcclxuICAgICAgICAgICAgcmVzdWx0Lm5vdGF0aW9uT25seUV4cHJlc3Npb25zW2l0ZW0udW5pdF0gPSBuZXcgUmVnRXhwKHN1Yk5vdGF0aW9uRXhwcmVzc2lvblN0cmluZywgJ2dtaScpO1xyXG4gICAgICAgICAgICBleHByZXNzaW9uU3RyaW5nICs9IChleHByZXNzaW9uU3RyaW5nICE9ICcnID8gJ3wnIDogJycpICsgJygnICsgc3ViRXhwcmVzc2lvblN0cmluZyArICcpJzsgICAgICAgICAgICBcclxuICAgICAgICAgICAgbm90YXRpb25FeHByZXNzaW9uU3RyaW5nICs9IChub3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgIT0gJycgPyAnfCcgOiAnJykgKyAnKCcgKyBzdWJOb3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgKyAnKSc7IFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlc3VsdC5leHByZXNzaW9uID0gbmV3IFJlZ0V4cChleHByZXNzaW9uU3RyaW5nLCAnZ21pJyk7XHJcbiAgICAgICAgcmVzdWx0Lm5vdGF0aW9uRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAobm90YXRpb25FeHByZXNzaW9uU3RyaW5nLCAnZ21pJyk7XHJcbiAgICAgICAgcmVzdWx0LnZhbHVlRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoJygoPzxWPlswLTlcXFxcLF0rKFxcXFwuWzAtOV0rKT8pKFxcXFxufFxcXFxzKSopJywgJ2dtaScpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gYXR0YWNoQWN0aW9ucygpIHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLmNoYW5nZS5sYW5ndWFnZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlTGFuZ3VhZ2UoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLmNoYW5nZS5jdXJyZW5jeScsIGZ1bmN0aW9uICgpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdXBkYXRlUHJpY2UoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLmNoYW5nZS5tZXNzdXJlbWVudCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlTWVzc3VyZW1lbnQoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhenkucmVmcmVzaCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlTWVzc3VyZW1lbnQoKTtcclxuICAgICAgICB9KTsgICAgICAgIFxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UucmVmcmVzaC5jdXJyZW5jeScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdXBkYXRlUHJpY2UoKTsgICAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgIH0gICAgXHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTGFuZ3VhZ2UoKSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuXHJcbiAgICAgICAgaWYgKHJlY2VudFN0YXRlID09IG51bGwpIHJlY2VudFN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgY3VycmVudCk7ICAgICAgICBcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnQ/Lmxhbmd1YWdlICE9IHJlY2VudFN0YXRlPy5sYW5ndWFnZSkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOyB9LCAxMDAwKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVjZW50U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50KTtcclxuXHJcbiAgICAgICAgdmFyIGxhYmVscyA9IGF3YWl0IGdldExhbmd1YWdlTGFiZWxzKCk7ICAgICAgICAgICBcclxuICAgICAgICBpZiAoY3VycmVudD8ubGFuZ3VhZ2UgJiYgbGFiZWxzLkxvY2FsZS5pbmRleE9mKGN1cnJlbnQubGFuZ3VhZ2UpID09IC0xKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHVwZGF0ZVRvU2VydmVyKCdsYW5ndWFnZScpOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsYWJlbHNUb0NoYW5nZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1sLWtdJyk7XHJcbiAgICAgICAgaWYgKGxhYmVsc1RvQ2hhbmdlKVxyXG4gICAgICAgICAgICBsYWJlbHNUb0NoYW5nZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7IHVwZGF0ZUxhbmd1YWdlTGFiZWwoaXRlbSwgbGFiZWxzLkxhYmVscyk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldExhbmd1YWdlTGFiZWxzRnJvbVN0b3JlKCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50TGFiZWxzU3RyaW5nID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdMT0NBTExBQkVMUycpO1xyXG4gICAgICAgIHZhciBjdXJyZW50TGFiZWxzID0gbnVsbDtcclxuICAgICAgICBpZiAoY3VycmVudExhYmVsc1N0cmluZyAhPSBudWxsKVxyXG4gICAgICAgICAgICBjdXJyZW50TGFiZWxzID0gSlNPTi5wYXJzZShjdXJyZW50TGFiZWxzU3RyaW5nKTtcclxuICAgICAgICByZXR1cm4gY3VycmVudExhYmVscztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBzZXRMYW5ndWFnZVRvU3RvcmUoY3VycmVudExhYmVscykge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTE9DQUxMQUJFTFMnLCBKU09OLnN0cmluZ2lmeShjdXJyZW50TGFiZWxzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VMYWJlbHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRMYWJlbHMgPSBhd2FpdCBnZXRMYW5ndWFnZUxhYmVsc0Zyb21TdG9yZSgpO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudExhYmVscyAhPSBudWxsKSB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdmFyIGV4cGlyeSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBleHBpcnkuc2V0SG91cnMoZXhwaXJ5LmdldEhvdXJzKCkgLSAxKTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXcgRGF0ZShjdXJyZW50TGFiZWxzLnVwZGF0ZWRPbikgPiBleHBpcnkgJiYgY3VycmVudExhYmVscy5Mb2NhbGUuaW5kZXhPZihjdXJyZW50Lmxhbmd1YWdlKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjdXJyZW50TGFiZWxzKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudExhYmVscyA9IGF3YWl0IEdFVCgnL3NlcnZpY2VzL2Fnb3JhQ2xpZW50LmFzaHgnLCB7IHR5cGU6ICdMQUJFTFMnIH0pO1xyXG4gICAgICAgICAgICBjdXJyZW50TGFiZWxzLnVwZGF0ZWRPbiA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIHNldExhbmd1YWdlVG9TdG9yZShjdXJyZW50TGFiZWxzKTtcclxuICAgICAgICAgICAgcmVzb2x2ZShjdXJyZW50TGFiZWxzKTtcclxuICAgICAgICB9KTsgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHZhciBleHByZXNzaW9uRm9yQXR0cmlidXRlID0gL2FnXFwtbFxcLWtcXC0oPzxBdHRyaWJ1dGU+W15cXD1dKykvZ207XHJcbiAgICB2YXIgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlID0gL1xcWyg/PExhYmVsSUQ+W15cXF1dKylcXF0vZ207XHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVMYW5ndWFnZUxhYmVsKGl0ZW0sIGxhYmVscykge1xyXG4gICAgICAgIHZhciBrZXkgPSBpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1rJyk7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gbnVsbDtcclxuICAgICAgICBpZiAobGFiZWxzW2tleV0gfHwgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZE5vZGVzICYmIGl0ZW0uY2hpbGROb2Rlcy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLmxhc3RJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25Gb3JBdHRyaWJ1dGVWYWx1ZS5sYXN0SW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Q29udGVudCA9IGtleTsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBleHByZXNzaW9uRm9yQXR0cmlidXRlVmFsdWUuZXhlYyh0ZXh0Q29udGVudCkpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudC5yZXBsYWNlKG1hdGNoWzBdLCBsYWJlbHNbbWF0Y2guZ3JvdXBzLkxhYmVsSURdID8gbGFiZWxzW21hdGNoLmdyb3Vwcy5MYWJlbElEXS5sYmwgOiAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jaGlsZE5vZGVzWzBdLnRleHRDb250ZW50ID0gdGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGROb2Rlc1swXS50ZXh0Q29udGVudCA9IGxhYmVsc1trZXldID8gbGFiZWxzW2tleV0ubGJsIDogJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobGFiZWxzW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZHVtbXlOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGR1bW15Tm9kZS5pbm5lckhUTUwgPSBsYWJlbHNba2V5XS5sYmw7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hIdG1sV2l0aExhYmVsKGl0ZW0sIGR1bW15Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW0uYXR0cmlidXRlcy5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSBpdGVtLmF0dHJpYnV0ZXNbaV07ICAgICAgICAgIFxyXG4gICAgICAgICAgICBleHByZXNzaW9uRm9yQXR0cmlidXRlLmxhc3RJbmRleCA9IDA7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICgobWF0Y2ggPSBleHByZXNzaW9uRm9yQXR0cmlidXRlLmV4ZWMoYXR0cmlidXRlLm5hbWUpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlSWRlbnRpZmllciA9IG1hdGNoLmdyb3Vwcy5BdHRyaWJ1dGU7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGUudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLmV4ZWMoYXR0cmlidXRlVmFsdWUpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS5yZXBsYWNlKG1hdGNoWzBdLCBsYWJlbHNbbWF0Y2guZ3JvdXBzLkxhYmVsSURdP2xhYmVsc1ttYXRjaC5ncm91cHMuTGFiZWxJRF0ubGJsOicnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKGF0dHJpYnV0ZUlkZW50aWZpZXIsIGF0dHJpYnV0ZVZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtICE9IG51bGwpXHJcbiAgICAgICAgICAgIGl0ZW0uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLnVwZGF0ZS5pdGVtJykpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIG1hdGNoSHRtbFdpdGhMYWJlbChpdGVtLCBkb20pIHsgICAgICAgIFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9tLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKGRvbS5jaGlsZE5vZGVzW2ldPy50ZXh0Q29udGVudCAmJiBpdGVtLmNoaWxkTm9kZXNbaV0/LnRleHRDb250ZW50KVxyXG4gICAgICAgICAgICAgICAgaXRlbS5jaGlsZE5vZGVzW2ldLnRleHRDb250ZW50ID0gZG9tLmNoaWxkTm9kZXNbaV0/LnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICBlbHNlIGlmIChpIDwgZG9tLmNoaWxkTm9kZXMubGVuZ3RoICYmIGkgPCBpdGVtLmNoaWxkTm9kZXMubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgbWF0Y2hIdG1sV2l0aExhYmVsKGl0ZW0uY2hpbGROb2Rlc1tpXSwgZG9tLmNoaWxkTm9kZXNbaV0pO1xyXG4gICAgICAgICAgICBlbHNlIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHJpY2UoaXNJbml0KSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbmNpZXMgPSBhd2FpdCBnZXRDb252ZXJ0aW9uUmF0ZXMoKTtcclxuICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50LmN1cnJlbmN5KSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW5jeSA9IGN1cnJlbmNpZXMuUmF0ZXM/LkV4Y2hhbmdlUmF0ZXM/LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5Db2RlID09IGN1cnJlbnQuY3VycmVuY3k7IH0pWzBdO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVuY3lNZXRhID0gbGFuZ3VhZ2VTb3VyY2VzLmN1cnJlbmNpZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLmNvZGUgPT0gY3VycmVudC5jdXJyZW5jeTsgfSlbMF07XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW5jeU1ldGEpXHJcbiAgICAgICAgICAgICAgICBjdXJyZW5jeS5mb3JtYXR0ZXIgPSBjb252ZXJ0Rm9ybWF0VG9FeHByZXNzaW9uKGN1cnJlbmN5TWV0YS5mb3JtYXQpO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudEN1cnJlbmN5ID0gY3VycmVuY3kuQ29kZTtcclxuICAgICAgICAgICAgdmFyIHByaWNlVG9DaGFuZ2UgPSBpc0luaXQgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYWctbC1wXTpub3QoLmlzLWFwcGxpZWQpOm5vdChbYWctbC1wPVwiMFwiXSknKSA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1sLXBdOm5vdChbYWctbC1wPVwiMFwiXSknKTtcclxuICAgICAgICAgICAgaWYgKHByaWNlVG9DaGFuZ2UpXHJcbiAgICAgICAgICAgICAgICBwcmljZVRvQ2hhbmdlLmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGl0ZW0pIHsgaWYgKGl0ZW0uaW5uZXJIVE1MLmluZGV4T2YoJ3t7JykgPiAtMSkgcmV0dXJuOyB1cGRhdGVJdGVtT2Zmc2V0Q2xhc3MoaXRlbSk7IGl0ZW0uY2xhc3NMaXN0LmFkZCgnaXMtYXBwbGllZCcpOyB1cGRhdGVQcmljZUZvckl0ZW0oaXRlbSwgY3VycmVuY3ksIGN1cnJlbnRDdXJyZW5jeSwgY3VycmVuY2llcyk7IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVJdGVtT2Zmc2V0Q2xhc3MoaXRlbSkge1xyXG4gICAgICAgIGlmICghaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLWFwcGxpZWQnKSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudE9mZnNldCA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRDb2xsZWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIHBhcmVudE9mZnNldCA9IChwYXJlbnRDb2xsZWN0aW9uID0gaXRlbS5jbG9zZXN0KCdhcnRpY2xlJykpICE9IG51bGwgJiYgcGFyZW50Q29sbGVjdGlvbi5sZW5ndGggPiAwID8gcGFyZW50Q29sbGVjdGlvblswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IGl0ZW0ucGFyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRQb2ludHMgPSB7IHk6IChwYXJlbnRPZmZzZXQudG9wICsgcGFyZW50T2Zmc2V0LmJvdHRvbSkgLyAyLCB4OiAocGFyZW50T2Zmc2V0LmxlZnQgKyBwYXJlbnRPZmZzZXQucmlnaHQpIC8gMiB9O1xyXG4gICAgICAgICAgICB2YXIgaXRlbVBvaW50cyA9IHsgeTogKGN1cnJlbnRPZmZzZXQudG9wICsgY3VycmVudE9mZnNldC5ib3R0b20pIC8gMiwgeDogKGN1cnJlbnRPZmZzZXQubGVmdCArIGN1cnJlbnRPZmZzZXQucmlnaHQpIC8gMiB9O1xyXG4gICAgICAgICAgICB2YXIgY2xhc3NBeGlzID0gJ2FnLWwtcC1wJztcclxuICAgICAgICAgICAgY2xhc3NBeGlzICs9ICctJyArIChwYXJlbnRQb2ludHMueCA+IGl0ZW1Qb2ludHMueCA/ICdsJyA6ICdyJyk7XHJcbiAgICAgICAgICAgIGNsYXNzQXhpcyArPSAnLScgKyAocGFyZW50UG9pbnRzLnkgPiBpdGVtUG9pbnRzLnkgPyAnYicgOiAndCcpO1xyXG4gICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NBeGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0Q29udmVydGlvblJhdGVzKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHZhciBjb252ZXJ0aW9uUmF0ZXNTdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQ09OVkVSVElPTlJBVEVTJyk7XHJcbiAgICAgICAgICAgIHZhciBjb252ZXJ0aW9uUmF0ZXMgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoY29udmVydGlvblJhdGVzU3RvcmVkICYmIGNvbnZlcnRpb25SYXRlc1N0b3JlZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29udmVydGlvblJhdGVzID0gSlNPTi5wYXJzZShjb252ZXJ0aW9uUmF0ZXNTdG9yZWQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGV4cGlyeSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBleHBpcnkuc2V0RGF0ZShleHBpcnkuZ2V0RGF0ZSgpIC0gMSk7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKG5ldyBEYXRlKGNvbnZlcnRpb25SYXRlcy51cGRhdGVkT24pID4gZXhwaXJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjb252ZXJ0aW9uUmF0ZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb252ZXJ0aW9uUmF0ZXMgPSBhd2FpdCBHRVQoJy9zZXJ2aWNlcy9hZ29yYUNsaWVudC5hc2h4JywgeyB0eXBlOiAnQ09OVkVSVElPTlJBVEVTJyB9KTtcclxuICAgICAgICAgICAgY29udmVydGlvblJhdGVzLnVwZGF0ZWRPbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0NPTlZFUlRJT05SQVRFUycsIEpTT04uc3RyaW5naWZ5KGNvbnZlcnRpb25SYXRlcykpO1xyXG4gICAgICAgICAgICByZXNvbHZlKGNvbnZlcnRpb25SYXRlcyk7XHJcbiAgICAgICAgfSk7ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZXhwcmVzc2lvbkZvclByaWNlID0gLygoW15BLXowLTldfFtBLVpdfFtBLVpdezN9KSpcXHM/WzAtOVxcLFxcLl0rKS9nbTtcclxuXHJcbiAgICBmdW5jdGlvbiBjb252ZXJ0Rm9ybWF0VG9FeHByZXNzaW9uKGZvcm1hdCkge1xyXG4gICAgICAgIHZhciBmb3JtYXRTdHJpbmcgPSBmb3JtYXQucmVwbGFjZSgvWyNcXCxcXC5dKy9naSwnJyk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFN0cmluZyArIG51bWJlci50b0xvY2FsZVN0cmluZygnZW4tVVMnKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByaWNlRm9ySXRlbShpdGVtLCBjdXJyZW5jeSwgY3VycmVudEN1cnJlbmN5LCBjdXJyZW5jaWVzKSB7XHJcbiAgICAgICAgdmFyIGlzRGVmYXVsdEN1cnJlbmN5Q2hhbmdlID0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWwtcC1jJykgIT0gbnVsbCAmJiAoKGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAtbycpID09IG51bGwgJiYgaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWwtcC1vLXAnKSA9PSBudWxsKSB8fCAoaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWwtcC1vLXAnKSAhPSBpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wJykpKSAmJiBpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wLWMnKSAhPSBjdXJyZW50Q3VycmVuY3k7XHJcbiAgICAgICAgaWYgKGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAtYycpID09IGN1cnJlbnRDdXJyZW5jeSAmJiBpc0RlZmF1bHRDdXJyZW5jeUNoYW5nZSAmJiBleHByZXNzaW9uRm9yUHJpY2UudGVzdChpdGVtLnRleHRDb250ZW50KSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBjdXJyZW50UHJpY2VDdXJyZW5jeSA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAtYycpO1xyXG4gICAgICAgIHZhciBjdXJyZW5jeU5vblNvdXJjZUNvbnN0YW50ID0gMTtcclxuICAgICAgICB2YXIgc291cmNlQ3VycmVuY3kgPSBudWxsO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB0cnkgeyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHNvdXJjZUN1cnJlbmN5ID0gY3VycmVuY2llcy5SYXRlcz8uRXhjaGFuZ2VSYXRlcz8uZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtLkNvZGUgPT0gY3VycmVudFByaWNlQ3VycmVuY3k7IH0pWzBdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbmN5TWV0YSA9IGxhbmd1YWdlU291cmNlcy5jdXJyZW5jaWVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5jb2RlID09IHNvdXJjZUN1cnJlbmN5LkNvZGU7IH0pWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbmN5TWV0YSlcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VDdXJyZW5jeS5mb3JtYXR0ZXIgPSBjb252ZXJ0Rm9ybWF0VG9FeHByZXNzaW9uKGN1cnJlbmN5TWV0YS5mb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgY3VycmVuY3lOb25Tb3VyY2VDb25zdGFudCA9IHNvdXJjZUN1cnJlbmN5LkNvbnN0YW50O1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW0uY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbm9kZSA9IGl0ZW0uY2hpbGROb2Rlc1tpXSwgbWF0Y2ggPSBudWxsO1xyXG4gICAgICAgICAgICBleHByZXNzaW9uRm9yUHJpY2UubGFzdEluZGV4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKG5vZGUudGV4dENvbnRlbnQgJiYgKG1hdGNoID0gZXhwcmVzc2lvbkZvclByaWNlLmV4ZWMobm9kZS50ZXh0Q29udGVudCkpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW5jeSAmJiBjdXJyZW5jeSAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdhZy1sLXAtYy10JywgY3VycmVuY3kuQ29kZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZWZhdWx0Q3VycmVuY3lDaGFuZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnYWctbC1wLW8tcCcsIGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2FnLWwtcC1vJywgc291cmNlQ3VycmVuY3kgPyBzb3VyY2VDdXJyZW5jeS5mb3JtYXR0ZXIocGFyc2VGbG9hdChpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wJykpKSA6IGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAnKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wLWMnKSAhPSBudWxsICYmIGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAtYycpID09IGN1cnJlbmN5LkNvZGUpIGl0ZW0ucmVtb3ZlQXR0cmlidXRlKCdhZy1sLXAtbycpOyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25Gb3JQcmljZS5sYXN0SW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHByaWNlQ29udmVydGVkID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAnKSkgLyBjdXJyZW5jeU5vblNvdXJjZUNvbnN0YW50ICogY3VycmVuY3kuQ29uc3RhbnQpOyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50LnJlcGxhY2UobWF0Y2hbMF0sIGN1cnJlbmN5LmZvcm1hdHRlciA/IGN1cnJlbmN5LmZvcm1hdHRlcihwcmljZUNvbnZlcnRlZCkgOiBwcmljZUNvbnZlcnRlZC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZU1lc3N1cmVtZW50KGlzSW5pdCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7XHJcbiAgICAgICAgdmFyIGlzQXBwbGllZCA9IGN1cnJlbnQubWVzc3VyZW1lbnQgPT0gJ21ldHJpYyc7XHJcbiAgICAgICAgdmFyIG1lc3N1cmVtZW50c1RvQ2hhbmdlID0gaXNBcHBsaWVkID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtbV06bm90KC5pcy1hcHBsaWVkKScpIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtbV0nKTtcclxuICAgICAgICBpZiAoaXNBcHBsaWVkKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1lc3N1cmVtZW50c1RvQ2hhbmdlKSBtZXNzdXJlbWVudHNUb0NoYW5nZS5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChpdGVtKSB7IGlmIChpdGVtLmlubmVySFRNTC5pbmRleE9mKCd7eycpID4gLTEgfHwgaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLWFwcGxpZWQnKSkgcmV0dXJuOyBpdGVtLmNsYXNzTGlzdC5hZGQoJ2lzLWFwcGxpZWQnKTsgdXBkYXRlSXRlbU1lc3N1cmVtZW50KGl0ZW0sIGl0ZW0pOyB9KTtcclxuICAgICAgICAgICAgfSwgaXNJbml0PzUwMDowKTsgICAgICAgICAgICBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAobWVzc3VyZW1lbnRzVG9DaGFuZ2UpIG1lc3N1cmVtZW50c1RvQ2hhbmdlLmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGl0ZW0pIHsgaWYgKGl0ZW0uaW5uZXJIVE1MLmluZGV4T2YoJ3t7JykgPiAtMSB8fCAhaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLWFwcGxpZWQnKSkgcmV0dXJuOyBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFwcGxpZWQnKTsgaXRlbS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UubWVzc3VyZW1lbnQucmV2ZXJ0JykpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlSXRlbU1lc3N1cmVtZW50KGl0ZW0scm9vdEVsZW1lbnQsIGlzSW5pdCwgaXNVbml0Rm91bmQsIHVuaXQpIHtcclxuXHJcbiAgICAgICAgaWYgKGlzVW5pdEZvdW5kICYmIHVuaXQpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkTm9kZXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGROb2Rlcy5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChjaGlsZE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlPy50ZXh0Q29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFRleHQgPSBjaGlsZE5vZGUudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXBsYWNlUmVzdWx0ID0gYXdhaXQgcmVwbGFjZU1lc3N1cmVtZW50V2l0aFVuaXQoY2hpbGROb2RlLnRleHRDb250ZW50LCAyLCB1bml0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VSZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLnRleHRDb250ZW50ID0gcmVwbGFjZVJlc3VsdC5jb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UubWVzc3VyZW1lbnQucmV2ZXJ0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS50ZXh0Q29udGVudCA9IGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaW5kTWVzc3VyZW1lbnRGcm9tQXR0cmlidXRlKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50TGFiZWwgPSBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEuZ2V0TGFiZWxGb3JBdHRyaWJ1dGUoaXRlbSk7XHJcbiAgICAgICAgICAgIHZhciBsYWJlbFJlcGxhY2VSZXN1bHQgPSBhd2FpdCByZXBsYWNlTWVzc3VyZW1lbnQoY3VycmVudExhYmVsLCAxKTtcclxuICAgICAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLnNldExhYmVsRm9yQXR0cmlidXRlKGl0ZW0sIGxhYmVsUmVwbGFjZVJlc3VsdC5jb250ZW50KTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5nZXRWYWx1ZUZvckF0dHJpYnV0ZShpdGVtKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHZhbHVlUmVwbGFjZVJlc3VsdCA9IGF3YWl0IHJlcGxhY2VNZXNzdXJlbWVudFdpdGhVbml0KGN1cnJlbnRWYWx1ZSwgMiwgbGFiZWxSZXBsYWNlUmVzdWx0LnVuaXRzWzBdKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLnNldFZhbHVlRm9yQXR0cmlidXRlKGl0ZW0sIHZhbHVlUmVwbGFjZVJlc3VsdC5jb250ZW50KTtcclxuICAgICAgICAgICAgcm9vdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UubWVzc3VyZW1lbnQucmV2ZXJ0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLnNldExhYmVsRm9yQXR0cmlidXRlKGl0ZW0sIGN1cnJlbnRMYWJlbCk7XHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEuc2V0VmFsdWVGb3JBdHRyaWJ1dGUoaXRlbSwgY3VycmVudFZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0/LmNoaWxkTm9kZXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGROb2Rlcy5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChjaGlsZE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09IE5vZGUuVEVYVF9OT0RFICYmIGZpbmRNZXNzdXJlbWVudEZyb21Ob2RlKGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUZXh0ID0gY2hpbGROb2RlLnRleHRDb250ZW50OyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZVJlc3VsdCA9IGF3YWl0IHJlcGxhY2VNZXNzdXJlbWVudChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS50ZXh0Q29udGVudCA9IHJlcGxhY2VSZXN1bHQuY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VSZXN1bHQgPSBhd2FpdCByZXBsYWNlTWVzc3VyZW1lbnQoY2hpbGROb2RlLnRleHRDb250ZW50LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS50ZXh0Q29udGVudCA9IHJlcGxhY2VSZXN1bHQuY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW1NZXNzdXJlbWVudChjaGlsZE5vZGUucGFyZW50RWxlbWVudCwgcm9vdEVsZW1lbnQsIGZhbHNlLCB0cnVlLCByZXBsYWNlUmVzdWx0LnVuaXRzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdhZy5sYW5ndWFnZS5tZXNzdXJlbWVudC5yZXZlcnQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUudGV4dENvbnRlbnQgPSBjdXJyZW50VGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbU1lc3N1cmVtZW50KGNoaWxkTm9kZSwgcm9vdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBmaW5kTWVzc3VyZW1lbnRGcm9tTm9kZShpdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5leHByZXNzaW9uLnRlc3QoaXRlbS50ZXh0Q29udGVudCkgfHwgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLm5vdGF0aW9uRXhwcmVzc2lvbi50ZXN0KGl0ZW0udGV4dENvbnRlbnQpOyAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZmluZE1lc3N1cmVtZW50RnJvbUF0dHJpYnV0ZShpdGVtKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgdmFyIG1hdGNoID0gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmhhdmVWYWxpZEF0dHJpYnV0ZShpdGVtKSA/IGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5nZXRMYWJlbEZvckF0dHJpYnV0ZShpdGVtKS5tYXRjaChsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEubm90YXRpb25FeHByZXNzaW9uKSA6IG51bGw7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIHJldHVybiBtYXRjaCAhPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VNZXNzdXJlbWVudChjb250ZW50LCBtb2RlKSB7XHJcbiAgICAgICAgdmFyIHVuaXRzID0gW107XHJcbiAgICAgICAgdmFyIHJlcGxhY2VTdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFtb2RlKSBtb2RlID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpdGVtIG9mIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvbnMpIHtcclxuICAgICAgICAgICAgdmFyIHJlcGxhY2VVbml0UmVzdWx0ID0gYXdhaXQgcmVwbGFjZU1lc3N1cmVtZW50V2l0aFVuaXQoY29udGVudCwgbW9kZSwgaXRlbSk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSByZXBsYWNlVW5pdFJlc3VsdC5jb250ZW50O1xyXG4gICAgICAgICAgICByZXBsYWNlU3VjY2VzcyB8PSByZXBsYWNlVW5pdFJlc3VsdC5zdWNjZXNzO1xyXG4gICAgICAgICAgICBpZiAocmVwbGFjZVVuaXRSZXN1bHQuc3VjY2VzcylcclxuICAgICAgICAgICAgICAgIHVuaXRzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5ub3RhdGlvbkV4cHJlc3Npb25zW2l0ZW0udW5pdF0ubGFzdEluZGV4ID0gLTE7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5ub3RhdGlvbk9ubHlFeHByZXNzaW9uc1tpdGVtLnVuaXRdLmxhc3RJbmRleCA9IC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBjb250ZW50OiBjb250ZW50LCBzdWNjZXNzOiByZXBsYWNlU3VjY2VzcywgdW5pdHM6IHVuaXRzIH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZU1lc3N1cmVtZW50V2l0aFVuaXQoY29udGVudCwgbW9kZSwgaXRlbSkge1xyXG4gICAgICAgIHZhciBtYXRjaCA9IG51bGw7XHJcbiAgICAgICAgdmFyIG1hdGNoU3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgIHdoaWxlICgobWF0Y2ggPSBnZXRSZXBsYWNlTWVzc3VyZW1lbnRFeHByZXNzaW9uTWF0Y2goY29udGVudCwgaXRlbSwgbW9kZSkpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0Y2hTdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFyIHZhbHVlID0gbW9kZSA9PSAxID8gMCA6IHBhcnNlRmxvYXQobGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmdldFZhbHVlKG1hdGNoLmdyb3Vwcy5WKSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciB1bml0ID0gbWF0Y2guZ3JvdXBzLk47XHJcbiAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gbWF0Y2guaW5kZXg7XHJcbiAgICAgICAgICAgIHZhciBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciBtYXRjaFZhbHVlID0gKG1vZGUgIT0gMSA/IG1hdGNoWzBdLnJlcGxhY2VBbGwobWF0Y2guZ3JvdXBzLlYsIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5mb3JtYXRWYWx1ZShNYXRoLmZsb29yKE1hdGgucm91bmQodmFsdWUgKiBpdGVtLmNvbnN0YW50KSkpKSA6IG1hdGNoWzBdKS5yZXBsYWNlQWxsKHVuaXQsIGl0ZW0udHJhZ2V0VW5pdCk7XHJcbiAgICAgICAgICAgIGlmIChtb2RlID09IDIgJiYgaXRlbS50YXJnZXROb3RhdGlvbikgbWF0Y2hWYWx1ZSArPSAnICcgKyBpdGVtLnRhcmdldE5vdGF0aW9uO1xyXG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCkgKyBtYXRjaFZhbHVlICsgY29udGVudC5zdWJzdHJpbmcoZW5kSW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAobW9kZSA9PSAyKSByZXR1cm4geyBjb250ZW50OiBjb250ZW50LCBzdWNjZXNzOiBtYXRjaFN1Y2Nlc3MgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgY29udGVudDogY29udGVudCwgc3VjY2VzczogbWF0Y2hTdWNjZXNzIH07XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0UmVwbGFjZU1lc3N1cmVtZW50RXhwcmVzc2lvbk1hdGNoKHZhbHVlLCBpdGVtLCBtb2RlKSB7XHJcbiAgICAgICAgaWYgKG1vZGUgPT0gMCkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLm5vdGF0aW9uRXhwcmVzc2lvbnNbaXRlbS51bml0XS5leGVjKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gMSkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLm5vdGF0aW9uT25seUV4cHJlc3Npb25zW2l0ZW0udW5pdF0uZXhlYyh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IDIpIHtcclxuICAgICAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLnZhbHVlRXhwcmVzc2lvbi5sYXN0SW5kZXggPSAtMTtcclxuICAgICAgICAgICAgcmV0dXJuIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS52YWx1ZUV4cHJlc3Npb24uZXhlYyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBlbmFibGVMYW5ndWFnZVNlbGVjdG9yKGl0ZW0pIHtcclxuICAgICAgICBnZXRGbGFnQ3NzQ2xhc3MoJ1VTJykuc3BsaXQoJyAnKS5tYXAoZnVuY3Rpb24gKGNsYXNzTmFtZSkgeyBpdGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTsgfSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYW5ndWFnZS51cGRhdGUnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpdGVtLmNsYXNzTmFtZSA9IGl0ZW0uY2xhc3NOYW1lLnJlcGxhY2UoL2ZmbGFnXFwtW0EtWl17MSwyfS9naSwgJycpO1xyXG4gICAgICAgICAgICBnZXRGbGFnQ3NzQ2xhc3MoZS5kZXRhaWwuY29kZSkuc3BsaXQoJyAnKS5tYXAoZnVuY3Rpb24gKGNsYXNzTmFtZSkgeyBpdGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTsgfSk7XHJcbiAgICAgICAgICAgIGlmIChlLmRldGFpbC5sb25nQ29kZSlcclxuICAgICAgICAgICAgICAgIHNldCgnbG9uZ0NvZGUnLCBlLmRldGFpbC5sb25nQ29kZSk7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7IFxyXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5hZ0xvY2FsZSkgd2luZG93LmFnTG9jYWxlID0ge307XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZ0xvY2FsZS5sb2NhbGUgPSBjdXJyZW50O1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUuc3VjY2VzcycpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKCFzZWxlY3RvckVsZW1lbnQpIHNlbGVjdG9yRWxlbWVudCA9IGF3YWl0IHJlbmRlckxhbmd1YWdlU2VsZWN0b3IoKTtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgZW5nYWdlTGFuZ3VhZ2VTZWxlY3RvcihpdGVtKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGRpc2VuZ2FnZUFjdGlvbkxpc3RlbmVyKTtcclxuICAgICAgICB9KTsgICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBkaXNlbmdhZ2VBY3Rpb25MaXN0ZW5lcihlKSB7ICAgICAgICBcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGlmIChlLnRhcmdldC5jbG9zZXN0KCdbYWctbGFuZ3VhZ2Utc2VsZWN0XSxbYWctbGFuZ3VhZ2VdJykgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZGlzZW5nYWdlQWN0aW9uTGlzdGVuZXIpO1xyXG4gICAgICAgICAgICBkaXNlbmdhZ2VMYW5ndWFnZVNlbGVjdG9yKGUudGFyZ2V0KTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBlbmdhZ2VMYW5ndWFnZVNlbGVjdG9yKGl0ZW0pIHtcclxuICAgICAgICB2YXIgcG9zaXRpb24gPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyAgICAgICAgICAgICAgICBcclxuICAgICAgICBzZWxlY3RvckVsZW1lbnQubm9kZS5zdHlsZS50b3AgPSBNYXRoLmZsb29yKHBvc2l0aW9uLnRvcCAtIDgpICsgJ3B4JztcclxuICAgICAgICBzZWxlY3RvckVsZW1lbnQubm9kZS5zdHlsZS5yaWdodCA9ICdjYWxjKDEwMCUgLSAnICsgTWF0aC5mbG9vcihwb3NpdGlvbi5yaWdodCArIDgpICsgJ3B4KSc7XHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZScpPy5mb3JFYWNoKGZ1bmN0aW9uIChhY3RpdmVJdGVtKSB7IGFjdGl2ZUl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IH0pXHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZGlzZW5nYWdlTGFuZ3VhZ2VTZWxlY3RvcihpdGVtKSB7ICAgICAgICBcclxuICAgICAgICBzZWxlY3RvckVsZW1lbnQubm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRGbGFnQ3NzQ2xhc3MoY29kZSkge1xyXG4gICAgICAgIHJldHVybiAnZmZsYWcgZmYtbGcgZmZsYWctJyArIGNvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0KCkge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2VbJ0FHTEFOR1VBR0UnXTtcclxuICAgICAgICB2YXIgY3VycmVudFZhbHVlID0ge307XHJcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9ICcnKSBjdXJyZW50VmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB1cGRhdGVUb3NlcnZlckNhbGwgPSBudWxsO1xyXG4gICAgdmFyIHVwZGF0ZVN1Y2NlcyA9IG51bGw7XHJcblxyXG4gICAgZnVuY3Rpb24gc2V0KGZpZWxkLCB2YWx1ZSkgeyAgICAgICAgXHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTsgICAgICAgIFxyXG4gICAgICAgIGlmIChjdXJyZW50ID09IHVuZGVmaW5lZCkgY3VycmVudCA9IHt9O1xyXG4gICAgICAgIGlmIChjdXJyZW50W2ZpZWxkXSAmJiBjdXJyZW50W2ZpZWxkXSA9PSB2YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIGN1cnJlbnRbZmllbGRdID0gdmFsdWU7XHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdBR0xBTkdVQUdFJywgSlNPTi5zdHJpbmdpZnkoY3VycmVudCkpO1xyXG5cclxuICAgICAgICAvL1Rocm90dGxpbmdcclxuICAgICAgICBpZiAodXBkYXRlVG9zZXJ2ZXJDYWxsICE9IG51bGwpIGNsZWFyVGltZW91dCh1cGRhdGVUb1NlcnZlcik7XHJcbiAgICAgICAgdXBkYXRlVG9zZXJ2ZXJDYWxsID0gc2V0VGltZW91dChhc3luYyBmdW5jdGlvbiAoKSB7IHVwZGF0ZVRvc2VydmVyQ2FsbCA9IG51bGw7IGF3YWl0IHVwZGF0ZVRvU2VydmVyKGZpZWxkKTsgaWYgKHVwZGF0ZVN1Y2NlcyAhPSBudWxsKSB7IHVwZGF0ZVN1Y2NlcygpOyB1cGRhdGVTdWNjZXMgPSBudWxsOyB9IH0sIDEwMCk7XHJcbiAgICAgICAgdmFyIG9sZFVwZGF0ZVN1Y2Nlc3MgPSB1cGRhdGVTdWNjZXM7XHJcbiAgICAgICAgdXBkYXRlU3VjY2VzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAob2xkVXBkYXRlU3VjY2VzcyAhPSBudWxsKSBvbGRVcGRhdGVTdWNjZXNzKCk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLmNoYW5nZS4nICsgZmllbGQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlVG9TZXJ2ZXIoZmllbGQpIHsgICAgICAgIFxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7XHJcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRTZXR0aW5ncykgIT0gSlNPTi5zdHJpbmdpZnkoY3VycmVudCkpIHtcclxuICAgICAgICAgICAgY3VycmVudFNldHRpbmdzID0gY3VycmVudDtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudC5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB3aW5kb3cuYWdSZXF1ZXN0LlBPU1QoJy9zZXJ2aWNlcy9hZ29yYUNsaWVudC5hc2h4JywgT2JqZWN0LmFzc2lnbih7IHR5cGU6ICdTRVQnIH0sIGN1cnJlbnQpKTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVuZGVyTGFuZ3VhZ2VTZWxlY3RvcigpIHtcclxuICAgICAgICB2YXIgZWxlbWVudCA9IG5ldyBjKCdzcGFuJyk7XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uRWxlbWVudCA9IGVsZW1lbnQubignc3BhbicpOyAgICAgICAgXHJcbiAgICAgICAgdmFyIGxvY2F0aW9uRmxhZztcclxuICAgICAgICB2YXIgbGFuZ3VhZ2VFbGVtZW50O1xyXG4gICAgICAgIGZ1bmN0aW9uIHJlbmRlckxhbmd1YWdlRWxlbWVudChsYW5ndWFnZXMpIHsgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVuZGVyQ2hvaWNlTGlzdChsYW5ndWFnZUVsZW1lbnQsICdMYW5ndWFnZScsICdsYW5ndWFnZScsIGxhbmd1YWdlcywgZnVuY3Rpb24gKGl0ZW1FbGVtZW50LCBzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtRWxlbWVudC5oKHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWwpO1xyXG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZUl0ZW0/KHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWwpOicnO1xyXG4gICAgICAgICAgICB9KTsgICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyQ2hvaWNlTGlzdChsb2NhdGlvbkVsZW1lbnQsICdMb2NhdGlvbicsJ2NvZGUnLCBsYW5ndWFnZVNvdXJjZXMucHJlc2V0cywgZnVuY3Rpb24gKGl0ZW1FbGVtZW50LCBzb3VyY2VJdGVtKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50Lm4oJ2knKS5hKCdjbGFzcycsIGdldEZsYWdDc3NDbGFzcyhzb3VyY2VJdGVtLmNvZGUpKTtcclxuICAgICAgICAgICAgaXRlbUVsZW1lbnQubignYicpLmgoc291cmNlSXRlbS5sb2NhbExhYmVsID8gc291cmNlSXRlbS5sb2NhbExhYmVsIDogc291cmNlSXRlbS5sYWJlbCk7XHJcblxyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzb3VyY2VJdGVtLGlzRXZlbnQpIHtcclxuICAgICAgICAgICAgbG9jYXRpb25GbGFnLmEoJ2NsYXNzJywgZ2V0RmxhZ0Nzc0NsYXNzKHNvdXJjZUl0ZW0uY29kZSkpO1xyXG4gICAgICAgICAgICByZW5kZXJMYW5ndWFnZUVsZW1lbnQobGFuZ3VhZ2VTb3VyY2VzLmxhbmd1YWdlcy5maWx0ZXIoZnVuY3Rpb24gKGxhbmd1YWdlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShzb3VyY2VJdGVtLmxhbmd1YWdlKSA/IHNvdXJjZUl0ZW0ubGFuZ3VhZ2UuaW5kZXhPZihsYW5ndWFnZS5jb2RlKSA+IC0xIDogbGFuZ3VhZ2UuY29kZSA9PSBzb3VyY2VJdGVtLmxhbmd1YWdlO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIGlmICghaXNFdmVudClcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLnVwZGF0ZScsIHsgZGV0YWlsOiBzb3VyY2VJdGVtIH0pKTtcclxuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbG9jYXRpb25GbGFnID0gbG9jYXRpb25FbGVtZW50Lm4oJ2knKTtcclxuXHJcbiAgICAgICAgbGFuZ3VhZ2VFbGVtZW50ID0gZWxlbWVudC5uKCdzcGFuJyk7ICAgICBcclxuXHJcbiAgICAgICAgcmVuZGVyTGFuZ3VhZ2VFbGVtZW50KGxhbmd1YWdlU291cmNlcy5sYW5ndWFnZXMpO1xyXG5cclxuICAgICAgICB2YXIgY3VycmVuY3lFbGVtZW50ID0gZWxlbWVudC5uKCdzcGFuJyk7XHJcbiAgICAgICAgcmVuZGVyQ2hvaWNlTGlzdChjdXJyZW5jeUVsZW1lbnQsICdDdXJyZW5jeScsICdjdXJyZW5jeScsIGxhbmd1YWdlU291cmNlcy5jdXJyZW5jaWVzLCBmdW5jdGlvbiAoaXRlbUVsZW1lbnQsIHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgaXRlbUVsZW1lbnQuaChzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsKTtcclxuICAgICAgICB9LCBmdW5jdGlvbiAoc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc291cmNlSXRlbS5sb2NhbExhYmVsID8gc291cmNlSXRlbS5sb2NhbExhYmVsIDogc291cmNlSXRlbS5sYWJlbDtcclxuICAgICAgICB9KTsgIFxyXG5cclxuICAgICAgICB2YXIgcHJvcGVydHlNZXNzdXJlbWVudEVsZW1lbnQgPSBlbGVtZW50Lm4oJ3NwYW4nKTtcclxuICAgICAgICByZW5kZXJDaG9pY2VMaXN0KHByb3BlcnR5TWVzc3VyZW1lbnRFbGVtZW50LCAnUHJvcGVydHkgTWVhc3VyZW1lbnQnLCAnbWVzc3VyZW1lbnQnLCBsYW5ndWFnZVNvdXJjZXMudW5pdHMsIGZ1bmN0aW9uIChpdGVtRWxlbWVudCwgc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICBpdGVtRWxlbWVudC5oKHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWwpO1xyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsO1xyXG4gICAgICAgIH0pOyAgXHJcblxyXG4gICAgICAgIHZhciBkaXN0YW5jZU1lc3N1cmVtZW50RWxlbWVudCA9IGVsZW1lbnQubignc3BhbicpO1xyXG4gICAgICAgIHJlbmRlckNob2ljZUxpc3QoZGlzdGFuY2VNZXNzdXJlbWVudEVsZW1lbnQsICdEaXN0YW5jZSBNZWFzdXJlbWVudCcsICdtZXNzdXJlbWVudCcsIGxhbmd1YWdlU291cmNlcy51bml0cywgZnVuY3Rpb24gKGl0ZW1FbGVtZW50LCBzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50Lmgoc291cmNlSXRlbS5sb2NhbExhYmVsID8gc291cmNlSXRlbS5sb2NhbExhYmVsIDogc291cmNlSXRlbS5sYWJlbCk7XHJcbiAgICAgICAgfSwgZnVuY3Rpb24gKHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWw7XHJcbiAgICAgICAgfSk7ICAgICAgICAgIFxyXG5cclxuICAgICAgICBlbGVtZW50Lm5vZGUuc2V0QXR0cmlidXRlKCdhZy1sYW5ndWFnZS1zZWxlY3QnLCcnKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQubm9kZSk7XHJcblxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQ/LmNvZGUpXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLnVwZGF0ZScsIHsgZGV0YWlsOiBjdXJyZW50IH0pKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9ucyA9IHt9O1xyXG5cclxuICAgIGZ1bmN0aW9uIHJlbmRlckNob2ljZUxpc3QoaXRlbSwgdGl0bGUsIGZpZWxkLCBzb3VyY2UsIHJlbmRlckl0ZW0sIHNlbGVjdGVkSXRlbSkge1xyXG4gICAgICAgIHZhciBmaWVsZEtleSA9IHRpdGxlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15BLXowLTldL2dpLCAnJyk7XHJcbiAgICAgICAgdmFyIHJlbmRlckV4aXN0ID0gcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3QnICsgZmllbGRLZXldID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIGlmICghcmVuZGVyRXhpc3QpXHJcbiAgICAgICAgICAgIGl0ZW0uaCh0aXRsZSk7XHJcbiAgICAgICAgdmFyIGl0ZW1MaXN0ID0gcmVuZGVyRXhpc3QgPyByZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydpdGVtTGlzdCcgKyBmaWVsZEtleV0gOiAocmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3QnICsgZmllbGRLZXldID0gaXRlbS5uKCdzcGFuJykpO1xyXG4gICAgICAgIHZhciBpdGVtTGlzdFZhbHVlID0gcmVuZGVyRXhpc3QgPyByZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydpdGVtTGlzdFZhbHVlJyArIGZpZWxkS2V5XSA6IChyZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydpdGVtTGlzdFZhbHVlJyArIGZpZWxkS2V5XSA9IGl0ZW1MaXN0Lm4oJ2xhYmVsJykpO1xyXG4gICAgICAgIGl0ZW1MaXN0VmFsdWUuaCgnU2VsZWN0ZWQgVmFsdWUnKTtcclxuICAgICAgICBpZiAoIXJlbmRlckV4aXN0KSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtQ2xpY2tGdW5jdGlvbiA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZScpPy5mb3JFYWNoKGZ1bmN0aW9uIChhY3RpdmVJdGVtKSB7IGlmIChhY3RpdmVJdGVtICE9IGl0ZW1MaXN0VmFsdWUubm9kZSkgYWN0aXZlSXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUxpc3RWYWx1ZS5ub2RlLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIGl0ZW1MaXN0VmFsdWUubm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaXRlbUxpc3RWYWx1ZS5ub2RlLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpdGVtTGlzdFZhbHVlLmNsKGl0ZW1DbGlja0Z1bmN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGl0ZW1PcHRpb25zID0gcmVuZGVyRXhpc3QgPyByZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydpdGVtT3B0aW9ucycgKyBmaWVsZEtleV0gOiAocmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbU9wdGlvbnMnICsgZmllbGRLZXldID0gaXRlbUxpc3Qubignc3BhbicpKTtcclxuICAgICAgICBpdGVtT3B0aW9ucy5oKCcnKTtcclxuICAgICAgICBzb3VyY2UubWFwKGZ1bmN0aW9uIChzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgIHZhciBjaG9pY2VJdGVtID0gaXRlbU9wdGlvbnMubignbGFiZWwnKTtcclxuICAgICAgICAgICAgY2hvaWNlSXRlbS5jbChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtTGlzdFZhbHVlLm5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICBzZXQoZmllbGQsIHNvdXJjZUl0ZW0uY29kZSk7XHJcbiAgICAgICAgICAgICAgICBpdGVtTGlzdFZhbHVlLmgoc2VsZWN0ZWRJdGVtKHNvdXJjZUl0ZW0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlbmRlckl0ZW0oY2hvaWNlSXRlbSwgc291cmNlSXRlbSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChmaWVsZCAmJiBmaWVsZCAhPSAnJykgeyAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgaWYgKCFyZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydHZW5lcmFsJyArIGZpZWxkS2V5XSkge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snR2VuZXJhbCcgKyBmaWVsZEtleV0gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLnVwZGF0ZS4nICsgZmllbGRLZXksIHsgZGV0YWlsOiBlLmRldGFpbCB9KSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UudXBkYXRlJywgcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snR2VuZXJhbCcgKyBmaWVsZEtleV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ0ZpZWxkJyArIGZpZWxkS2V5XSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ0ZpZWxkJyArIGZpZWxkS2V5XSA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRJdGVtID0gZS5kZXRhaWw7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRJdGVtW2ZpZWxkXTsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZFZhbHVlID0gQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpID8gY3VycmVudFZhbHVlWzBdIDogY3VycmVudFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZEl0ZW1Gcm9tU291cmNlID0gc291cmNlLmZpbmQoZnVuY3Rpb24gKHgsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguY29kZSA9PSBzZWxlY3RlZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0KGZpZWxkLCBzZWxlY3RlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUxpc3RWYWx1ZS5oKHNlbGVjdGVkSXRlbShzZWxlY3RlZEl0ZW1Gcm9tU291cmNlLCB0cnVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLnVwZGF0ZS4nICsgZmllbGRLZXksIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ0ZpZWxkJyArIGZpZWxkS2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGMobmFtZSkge1xyXG4gICAgICAgIHRoaXMubm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUuYSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUubiA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSBuZXcgYyhuYW1lKTtcclxuICAgICAgICB0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoaXRlbS5ub2RlKTtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH0gICAgXHJcblxyXG4gICAgYy5wcm90b3R5cGUuaCA9IGZ1bmN0aW9uICh0ZXh0KSB7ICAgICAgICBcclxuICAgICAgICB0aGlzLm5vZGUuaW5uZXJIVE1MID0gdGV4dDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBjLnByb3RvdHlwZS5jbCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB0aGlzLm5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhY3Rpb24pO1xyXG4gICAgICAgIHRoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFjdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gR0VUKHNlcnZpY2VVcmwsIGRhdGEpIHtcclxuICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSAnJztcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nICsgKChxdWVyeVN0cmluZyAhPSAnJyA/ICcmJyA6ICcnKSArIGtleSArICc9JyArIGRhdGFba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlcnZpY2VVcmwgKz0gc2VydmljZVVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JyArIHF1ZXJ5U3RyaW5nO1xyXG4gICAgICAgIHZhciByZXF1ZXN0ID0gYXdhaXQgZmV0Y2goc2VydmljZVVybCwge1xyXG4gICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgIGNhY2hlOiBcIm5vLWNhY2hlXCIsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXF1ZXN0Lmpzb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cuYWdMYW5ndWFnZSA9IHtcclxuICAgICAgICByZWZyZXNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLnJlZnJlc2guY3VycmVuY3knKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZWZyZXNoTG9jYWxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLmNoYW5nZS5sYW5ndWFnZScpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpbml0KCk7XHJcblxyXG59KSgpO1xyXG5cclxuXHJcblxyXG4gICAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsICdbZGF0YS1jay1wcm9wZXJ0eWxpc3RdIFtkYXRhLXNvcnQtb2JqZWN0PVwiQ01OQ01OXCJdJywge30sIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBHZXRQcm9wZXJ0aWVzKCQodGhpcykucGFyZW50cygnW2RhdGEtY2stcHJvcGVydHlsaXN0XTpmaXJzdCcpLCAkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWNrLXByb3BlcnR5LXVybF06Zmlyc3QnKS5kYXRhKCdjay1wcm9wZXJ0eS11cmwnKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eWxpc3RdOmZpcnN0JykuZGF0YSgnY2stZGVtYW5kLWtleScpLCAkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWNrLXByb3BlcnR5bGlzdF06Zmlyc3QnKS5kYXRhKCdjay1kZW1hbmQtbGF5b3V0JykpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZnVuY3Rpb24gR2V0UHJvcGVydGllcygkdGhpcywgdXJsLCBkZW1hbmRLZXksIGxheW91dCkge1xyXG4gICAgICAgIHZhciBpc0VkaXRNb2RlID0gJHRoaXMuY2xvc2VzdCgnZGl2W2NvbnRlbnRlZGl0YWJsZV0nKS5hdHRyKCdjb250ZW50ZWRpdGFibGUnKTtcclxuICAgICAgICBpZiAoIWlzRWRpdE1vZGUgJiYgdHlwZW9mICh1cmwpICE9ICd1bmRlZmluZWQnIHx8IHR5cGVvZiAoZGVtYW5kS2V5KSAhPSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAvL1Nob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIGxheW91dCA9ICh0eXBlb2YgKGxheW91dCkgIT0gJ3VuZGVmaW5lZCcgPyBsYXlvdXQgOiBcImdhbGxlcnlcIik7XHJcbiAgICAgICAgICAgIHN3aXRjaCAobGF5b3V0LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJnYWxsZXJ5XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyICRzb3J0ID0gJHRoaXMuZmluZCgnW2RhdGEtc29ydC1vYmplY3Q9XCJDTU5DTU5cIl0nKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKCRzb3J0ICE9ICd1bmRlZmluZWQnICYmICRzb3J0ICE9IG51bGwgJiYgJHNvcnQubGVuZ3RoID4gMCkgfHwgIXVybC5tYXRjaCgvKF58XFwvKShkKT9zb3J0XFwtW2Etel0rL2cpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSAoX2dldENNTkNNTlNvcnRCeSgkdGhpcykgKyAnLycgKyAodXJsLnJlcGxhY2UoJ2h0dHA6Ly8nLCAnJykucmVwbGFjZSgvKF58XFwvKShkKT9zb3J0XFwtW2Etel0rL2csICcnKSkpLnJlcGxhY2UoJy8vJywgJy8nKTtcclxuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJy9zZXJ2aWNlcy9NQVgvYWdvcmFHZXRHYWxsZXJ5Vmlldy5hc3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogeyBVcmxRdWVyeTogdXJsLCBUeXBlT2ZTZWFyY2g6ICdTQUxFJywgSXNDb250ZW50UGFnZTogXCJ0cnVlXCIsIERlbWFuZEtleTogZGVtYW5kS2V5IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnaHRtbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzRWRpdE1vZGUgPSAkdGhpcy5jbG9zZXN0KCdkaXZbY29udGVudGVkaXRhYmxlXScpLmF0dHIoJ2NvbnRlbnRlZGl0YWJsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VkaXRNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRodG1sID0gJzxzZWN0aW9uIGNsYXNzPVwicmVzdWx0LXBhZ2VcIiBkYXRhLWNrLXByb3BlcnR5bGlzdD1cIlwiIGRhdGEtY2stZGVtYW5kLWtleT1cIicgKyBkZW1hbmRLZXkgKyAnXCIgZGF0YS1jay1wcm9wZXJ0eS11cmw9XCInICsgdXJsICsgJ1wiIGRhdGEtY2stZGVtYW5kLWxheW91dD1cIicgKyBsYXlvdXQgKyAnXCI+JyArIHJlc3BvbnNlICsgJzwvc2VjdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLmFmdGVyKCRodG1sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0eXBlb2YgKGNvbXBvbmVudEhhbmRsZXIpID09ICd1bmRlZmluZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRIYW5kbGVyLnVwZ3JhZGVEb20oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnW2RhdGEtY2stZGVtYW5kLWtleT1cIicgKyBkZW1hbmRLZXkgKyAnXCJdICNwcm9wZXJ0eUdyaWQnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcucHJvcGVydHk6bm90KC5pbml0KScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0UHJvcGVydHlJbWFnZUdhbGxlcnkoJCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hZ0xhenkucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImNhcm91c2VsXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvc2VydmljZXMvYWdvcmFHZXRDYXJvdXNlbEl0ZW0uYXNweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgVXJsUXVlcnk6IHVybCwgVHlwZU9mU2VhcmNoOiAnU0FMRScsIElzQ29udGVudFBhZ2U6IFwidHJ1ZVwiLCBEZW1hbmRLZXk6IGRlbWFuZEtleSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2h0bWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0VkaXRNb2RlID0gJHRoaXMuY2xvc2VzdCgnZGl2W2NvbnRlbnRlZGl0YWJsZV0nKS5hdHRyKCdjb250ZW50ZWRpdGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFZGl0TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkaHRtbCA9ICc8c2VjdGlvbiBjbGFzcz1cInJlc3VsdC1wYWdlXCIgZGF0YS1jay1wcm9wZXJ0eWxpc3Q9XCJcIiBkYXRhLWNrLWRlbWFuZC1rZXk9XCInICsgZGVtYW5kS2V5ICsgJ1wiIGRhdGEtY2stcHJvcGVydHktdXJsPVwiJyArIHVybCArICdcIiBkYXRhLWNrLWRlbWFuZC1sYXlvdXQ9XCInICsgbGF5b3V0ICsgJ1wiPicgKyByZXNwb25zZSArICc8L3NlY3Rpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5hZnRlcigkaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnW2RhdGEtcXVlcnktbGlzdF06bm90KC5pbml0KVtkYXRhLXNlcnZpY2UtdXJsXVtkYXRhLXJ0Xj1cIkNNTlwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnRyaWdnZXIoJ2luaXQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaW5pdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHR5cGVvZiAoY29tcG9uZW50SGFuZGxlcikgPT0gJ3VuZGVmaW5lZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEhhbmRsZXIudXBncmFkZURvbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfZ2V0Q01OQ01OU29ydEJ5KCRwYXJlbnQpIHtcclxuICAgICAgICB2YXIgJHNvcnQgPSAkcGFyZW50LmZpbmQoJ1tkYXRhLXNvcnQtb2JqZWN0PVwiQ01OQ01OXCJdJyk7XHJcbiAgICAgICAgaWYgKCRzb3J0ICE9ICd1bmRlZmluZWQnICYmICRzb3J0ICE9IG51bGwgJiYgJHNvcnQubGVuZ3RoID4gMCAmJiBJc05vdE51bGwoJHNvcnQudmFsKCkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAkc29ydC52YWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEdldERlZmF1bHRTb3J0Rm9yUmVjb3JkVHlwZSgnUFJPUEVSVFknKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBHZXRQcm9wZXJ0eUltYWdlR2FsbGVyeSgkdGhpcykge1xyXG4gICAgdmFyICRpdGVtQ29udGV4dCA9ICR0aGlzO1xyXG4gICAgdmFyICRzbGlkZUNvbnRleHQgPSAkaXRlbUNvbnRleHQuZmluZCgnLnNsaWRlcycpO1xyXG4gICAgJHNsaWRlQ29udGV4dC5hdHRyKCdkYXRhLWNzcy1zbGlkZXInLCAnMCcpO1xyXG4gICAgdmFyIG1sc051bWJlciA9ICRpdGVtQ29udGV4dC5maW5kKCdbZGF0YS1ta10nKS5kYXRhKCdtaycpO1xyXG4gICAgdmFyIG1sc0JvYXJkID0gJGl0ZW1Db250ZXh0LmZpbmQoJ1tkYXRhLW1sc2JvYXJkXScpLmRhdGEoJ21sc2JvYXJkJyk7XHJcbiAgICB2YXIgdXJsID0gJGl0ZW1Db250ZXh0LmZpbmQoJ1tkYXRhLWRldGFpbC11cmxdJykuZGF0YSgnZGV0YWlsLXVybCcpO1xyXG4gICAgdmFyIHByb2plY3RDb2RlID0gJCgnW2RhdGEtcGNvZGVdJykuZGF0YSgncGNvZGUnKTtcclxuICAgIHZhciBpbWFnZVRlbXBsYXRlID0gJGl0ZW1Db250ZXh0LmZpbmQoJ1tkYXRhLW1scy1waG90b10nKS5kYXRhKCdtbHMtcGhvdG8nKTtcclxuICAgIHZhciBuYXRpdmVUYWIgPSAkaXRlbUNvbnRleHQuZmluZCgnW2RhdGEtbmF0aXZlLXRhYl0nKS5kYXRhKCduYXRpdmUtdGFiJyk7XHJcbiAgICBpZiAoIUlzTm90TnVsbChpbWFnZVRlbXBsYXRlKSkgaW1hZ2VUZW1wbGF0ZSA9ICcvaW1hZ2VzL2NvbXBhbnkvJyArIHByb2plY3RDb2RlICsgJy9Ob1Bob3RvSW1hZ2UvaW1hZ2Utbm90LWZvdW5kLmpwZyc7XHJcbiAgICB2YXIgY291bnQgPSBwYXJzZUludCgkc2xpZGVDb250ZXh0LmRhdGEoJ3ZhbHVlJyksIDEwKTtcclxuICAgIHZhciAkaXRlbVdpdGhJRENvbnRleHQgPSAkaXRlbUNvbnRleHQuY2xvc2VzdCgnW2lkXScpO1xyXG4gICAgdmFyIHVJRCA9ICRpdGVtQ29udGV4dC5sZW5ndGggPT0gMCA/IFwidW5cIiA6ICRpdGVtV2l0aElEQ29udGV4dC5hdHRyKCdpZCcpLnJlcGxhY2UoL1xcJC9naSwgJycpO1xyXG4gICAgYnVpbGRGaXJzdFRlbXBsYXRlKGltYWdlVGVtcGxhdGUsIGNvdW50LCB1SUQgKyBuZXcgRGF0ZSgpLmdldE1pbGxpc2Vjb25kcygpLCBtbHNCb2FyZCwgbWxzTnVtYmVyLCAkc2xpZGVDb250ZXh0LCB1cmwsIG5hdGl2ZVRhYik7XHJcbiAgICAkaXRlbUNvbnRleHQuYWRkQ2xhc3MoJ2luaXQnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYnVpbGRGaXJzdFRlbXBsYXRlKHRlbXBsYXRlLCBjb3VudCwgdUlELCBtbHNCb2FyZCwgbWxzTnVtYmVyLCAkc2xpZGVDb250ZXh0LCB1cmwsIG5hdGl2ZVRhYikge1xyXG4gICAgdmFyIGkgPSAwLCBwcmVmaXggPSAodUlEICsgbWxzQm9hcmQgKyBtbHNOdW1iZXIgKyAnXycpO1xyXG4gICAgJCgnPGlucHV0IHR5cGU9XCJyYWRpb1wiIGFyaWEtbGFiZWw9XCInICsgKHByZWZpeCArICdzbGlkZXInKSArICdcIiAgbmFtZT1cIicgKyAocHJlZml4ICsgJ3NsaWRlcicpICsgJ1wiIGlkPVwiJyArIChwcmVmaXggKyBpKSArICdcIiBjaGVja2VkIC8+JykuYXBwZW5kVG8oJHNsaWRlQ29udGV4dCk7XHJcbiAgICB2YXIgJG5hdmlnYXRpb25zID0gJCgnPGRpdiBjbGFzcz1cIm5hdlwiPjwvZGl2PicpO1xyXG4gICAgLy92YXIgJG5leHQgPSAkKCc8bGFiZWwgZGF0YS1jc3Mtc2xpZGVyLW5hdj1cInByb3BwaG90b1wiIGZvcj1cIicgKyAocHJlZml4ICsgKGkgKyAxKSkgKyAnXCIgY2xhc3M9XCJuZXh0XCI+PC9sYWJlbD4nKTtcclxuICAgIC8vdmFyICRwcmV2ID0gJCgnPGxhYmVsIGRhdGEtY3NzLXNsaWRlci1uYXY9XCJwcm9wcGhvdG9cIiBmb3I9XCInICsgKHByZWZpeCArIChwYXJzZUludChjb3VudCwgMTApIC0gMSkpICsgJ1wiIGNsYXNzPVwicHJldlwiPjwvbGFiZWw+Jyk7XHJcbiAgICB2YXIgJG5leHQgPSAkKCc8bGFiZWwgYXJpYS1sYWJlbD1cIm5leHRcIiBhcmlhLWNvbnRyb2xzPVwibXlDYXJvdXNlbC1pdGVtc1wiIGRhdGEtY3NzLXNsaWRlci1uYXY9XCJwcm9wcGhvdG9cIiBmb3I9XCInICsgKHByZWZpeCArIChpICsgMSkpICsgJ1wiICBjbGFzcz1cIm5leHRcIj48c3BhbiBhcmlhLWxhYmVsPVwibmV4dFwiIGNsYXNzPVwidmlzdWFsbHloaWRkZW5cIj5uZXh0PC9zcGFuPjwvbGFiZWw+Jyk7XHJcbiAgICB2YXIgJHByZXYgPSAkKCc8bGFiZWwgYXJpYS1sYWJlbD1cInByZXZcIiBhcmlhLWNvbnRyb2xzPVwibXlDYXJvdXNlbC1pdGVtc1wiIGRhdGEtY3NzLXNsaWRlci1uYXY9XCJwcm9wcGhvdG9cIiBmb3I9XCInICsgKHByZWZpeCArIChwYXJzZUludChjb3VudCwgMTApIC0gMSkpICsgJ1wiIGNsYXNzPVwicHJldlwiPjxzcGFuIGFyaWEtbGFiZWw9XCJwcmV2XCIgY2xhc3M9XCJ2aXN1YWxseWhpZGRlblwiPnByZXY8L3NwYW4+PC9sYWJlbD4nKTtcclxuICAgICRwcmV2Lm9uKCdjbGljaycsIF9sb2FkTW9yZSk7XHJcbiAgICAkbmV4dC5vbignY2xpY2snLCBfbG9hZE1vcmUpO1xyXG4gICAgJHByZXYuYXBwZW5kVG8oJG5hdmlnYXRpb25zKTtcclxuICAgICRuZXh0LmFwcGVuZFRvKCRuYXZpZ2F0aW9ucyk7XHJcbiAgICBpZiAoJCgnW2RhdGEtcGNvZGVdJykuZGF0YSgncGNvZGUnKSA9PSAnUFNCJykgeyB2YXIgdGFyZ2V0ID0gJyc7IH0gZWxzZSB7IHZhciB0YXJnZXQgPSAndGFyZ2V0ID0gXCJfYmxhbmtcIic7IH1cclxuICAgIGlmIChuYXRpdmVUYWIgIT0gJ3VuZGVmaW5lZCcgJiYgbmF0aXZlVGFiICE9ICcnICYmIG5hdGl2ZVRhYiA9PSAxKVxyXG4gICAgICAgIHRhcmdldCA9ICcnO1xyXG4gICAgdmFyICRub2RlID0gJCgnPGxpIGNsYXNzPVwic2xpZGUtY29udGFpbmVyXCIgYXJpYS1yb2xlZGVzY3JpcHRpb249XCJjYXJvdXNlbFwiIHJvbGU9XCJjb250ZW50aW5mb1wiPjxkaXYgY2xhc3M9XCJzbGlkZVwiPjxkaXYgY2xhc3M9XCJQcm9wX2ltZ1wiIHJvbGU9XCJpbWdcIiBhcmlhLWxhYmVsPVwiYmFubmVySW1hZ2VcIiAgc3R5bGU9XCJiYWNrZ3JvdW5kLWltYWdlOnVybChcXCcnICsgdGVtcGxhdGUgKyAnXFwnKTtcIj48YSBhcmlhLWxhYmVsPVwiJyArIChwcmVmaXggKyAnc2xpZGVyJykgKyAnXCInICsgdGFyZ2V0ICsgJ2hyZWY9XCInICsgdXJsICsgJ1wiPjwvYT48L2Rpdj48L2Rpdj48L2xpPicpO1xyXG4gICAgJG5vZGUuYXBwZW5kKCRuYXZpZ2F0aW9ucyk7XHJcbiAgICAkbm9kZS5hcHBlbmRUbygkc2xpZGVDb250ZXh0KTtcclxuICAgIGZ1bmN0aW9uIF9sb2FkTW9yZSgpIHtcclxuICAgICAgICB2YXIgJHNlbmRlciA9ICQodGhpcyk7XHJcbiAgICAgICAgJHByZXYub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICRuZXh0Lm9mZignY2xpY2snKTtcclxuICAgICAgICAkLmFqYXgoeyB1cmw6ICcvc2VydmljZXMvYWdvcmFQcm9wZXJ0eVBob3Rvcy5hc3B4JywgZGF0YTogeyBtbHNib2FyZDogbWxzQm9hcmQsIG1sc25vOiBtbHNOdW1iZXIsIGNvbnRhaW5lcjogcHJlZml4IH0sIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkgeyAkc2xpZGVDb250ZXh0LmFwcGVuZChyZXNwb25zZSk7ICRzZW5kZXIudHJpZ2dlcignY2xpY2snKTsgfSB9KTtcclxuICAgIH1cclxufVxyXG5cclxuYWdvcmEoZnVuY3Rpb24gKCkge1xyXG4gICAgcmVmcmVzaFRyYWNraW5nKCk7XHJcbiAgICAvLyBBREEgQ29tcGxhaW5jZXMgLy8gY2FuY2VsIGJ1dHRvbiB3b3JraW5nXHJcbiAgICAkKGRvY3VtZW50KS5vbihcImNsaWNrXCIsIFwiW2RhdGEtZm9yXVwiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBfZm9yID0gJCh0aGlzKS5kYXRhKCdmb3InKTtcclxuICAgICAgICAgICAgJCgnW2Zvcj1cIicgKyBfZm9yICsgJ1wiXScpLnRyaWdnZXIoXCJjbGlja1wiKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgIH0pO1xyXG4gICAgLy8gRU5EXHJcblxyXG4gICAgLy8kKCdbZGF0YS13ZWJhY3Rpdml0eV0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgIC8vICAgIHZhciBhY3Rpdml0eSA9ICQodGhpcykuYXR0cignZGF0YS13ZWJhY3Rpdml0eScpO1xyXG4gICAgLy8gICAgdmFyIHRyYWNrSXRlbXMgPSBbXTtcclxuXHJcbiAgICAvLyAgICAkLmVhY2godGhpcy5hdHRyaWJ1dGVzLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyAgICAgICAgaWYgKHRoaXMubmFtZS5zdGFydHNXaXRoKCdkYXRhLXdlYmFjdGl2aXR5LScpKSB7XHJcbiAgICAvLyAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5uYW1lLnN1YnN0cmluZygnZGF0YS13ZWJhY3Rpdml0eS0nLmxlbmd0aCk7XHJcbiAgICAvLyAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAvLyAgICAgICAgICAgIHRyYWNrSXRlbXMucHVzaCh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSB9KTtcclxuICAgIC8vICAgICAgICB9XHJcbiAgICAvLyAgICB9KTtcclxuXHJcbiAgICAvLyAgICBXZWJBY3Rpdml0eVRyYWNrZXIoJ1dFQkFDVElWSVRZJywgJ1BST1BFUlRZJywgYWN0aXZpdHksIHRyYWNrSXRlbXMpO1xyXG4gICAgLy99KTtcclxufSk7XHJcblxyXG5EYXRlLnByb3RvdHlwZS55eXl5bW1kZGhobW1zcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB5eXl5ID0gdGhpcy5nZXRGdWxsWWVhcigpO1xyXG4gICAgdmFyIG1tID0gdGhpcy5nZXRNb250aCgpIDwgOSA/IFwiMFwiICsgKHRoaXMuZ2V0TW9udGgoKSArIDEpIDogKHRoaXMuZ2V0TW9udGgoKSArIDEpOyAvLyBnZXRNb250aCgpIGlzIHplcm8tYmFzZWRcclxuICAgIHZhciBkZCA9IHRoaXMuZ2V0RGF0ZSgpIDwgMTAgPyBcIjBcIiArIHRoaXMuZ2V0RGF0ZSgpIDogdGhpcy5nZXREYXRlKCk7XHJcbiAgICB2YXIgaGggPSB0aGlzLmdldEhvdXJzKCkgPCAxMCA/IFwiMFwiICsgdGhpcy5nZXRIb3VycygpIDogdGhpcy5nZXRIb3VycygpO1xyXG4gICAgdmFyIG1pbiA9IHRoaXMuZ2V0TWludXRlcygpIDwgMTAgPyBcIjBcIiArIHRoaXMuZ2V0TWludXRlcygpIDogdGhpcy5nZXRNaW51dGVzKCk7XHJcbiAgICB2YXIgc3MgPSB0aGlzLmdldFNlY29uZHMoKSA8IDEwID8gXCIwXCIgKyB0aGlzLmdldFNlY29uZHMoKSA6IHRoaXMuZ2V0U2Vjb25kcygpO1xyXG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHl5eXkpLmNvbmNhdChtbSkuY29uY2F0KGRkKS5jb25jYXQoaGgpLmNvbmNhdChtaW4pLmNvbmNhdChzcyk7XHJcbn07XHJcblxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHZhciBpc1N5bmNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcudXNlci5pbicsIGZ1bmN0aW9uIChlKSB7XHJcblxyXG4gICAgICAgIHNldChlLmRldGFpbCk7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy51c2VyLm91dCcsIGZ1bmN0aW9uIChlKSB7XHJcblxyXG4gICAgICAgIHNldChudWxsKTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXQoKSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgIGlmICh3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0FHVVNFUicpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgY3VycmVudCA9IEpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdBR1VTRVInKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGN1cnJlbnQgIT0gbnVsbCAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygncmVzdHJpY3RlZC1saXN0aW5nJykpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdyZXN0cmljdGVkLWxpc3RpbmcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9lbHNlIGlmIChjdXJyZW50ID09IG51bGwgJiYgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3Jlc3RyaWN0ZWQtbGlzdGluZycpKSB7XHJcbiAgICAgICAgLy8gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdyZXN0cmljdGVkLWxpc3RpbmcnKTtcclxuICAgICAgICAvL31cclxuICAgICAgICByZXR1cm4gY3VycmVudDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBzZXQodXNlcikge1xyXG4gICAgICAgIGlmICh1c2VyID09IG51bGwpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdBR1VTRVInKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcudXNlci5jbGVhcicpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh1c2VyLkd1aWQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsb2NhbFVzZXIgPSB7fTtcclxuICAgICAgICAgICAgICAgIGxvY2FsVXNlci5HdWlkID0gdXNlci5HdWlkO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxVc2VyLk5hbWUgPSB1c2VyLk5hbWU7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFVzZXIuRmlyc3ROYW1lID0gdXNlci5GaXJzdE5hbWU7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFVzZXIuTGFzdE5hbWUgPSB1c2VyLkxhc3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxVc2VyLkVtYWlsID0gdXNlci5FbWFpbDtcclxuICAgICAgICAgICAgICAgIGxvY2FsVXNlci5QaG9uZSA9IHVzZXIuUGhvbmU7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFVzZXIuTW9iaWxlUGhvbmUgPSB1c2VyLk1vYmlsZVBob25lO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIuTG9naW5BZ2VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsVXNlci5Mb2dpbkFnZW50ID0geyBLZXk6IHVzZXIuTG9naW5BZ2VudC5LZXksIEVtYWlsOiB1c2VyLkxvZ2luQWdlbnQuRW1haWwsIE5hbWU6IHVzZXIuTG9naW5BZ2VudC5OYW1lIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0FHVVNFUicsIEpTT04uc3RyaW5naWZ5KGxvY2FsVXNlcikpO1xyXG4gICAgICAgICAgICAgICAgdXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICByZW5kZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGUoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlbmRlcigpIHsgICAgICAgIFxyXG4gICAgICAgIHZhciB1c2VyU3RhdGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLXVzZXJdJyk7XHJcbiAgICAgICAgdXNlclN0YXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7IHJlbmRlclN0YXRlcyhpdGVtKTsgfSk7IFxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlbmRlclN0YXRlcyhpdGVtKSB7XHJcblxyXG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnaXMtYXBwbGllZCcpOyAgICAgICAgXHJcbiAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IGl0ZW0uY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gYXdhaXQgZ2V0KCk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpbml0UHJvcGVydHlDb2xsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHZhciBsb2dnaW5lZE5vZGUgPSBhd2FpdCBnZXRMb2dpbmVkSXRlbShjdXJyZW50KTtcclxuICAgICAgICAgICAgaXRlbS5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShsb2dnaW5lZE5vZGUsIGl0ZW0pO1xyXG4gICAgICAgICAgICBpdGVtLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICBzZXRGb3JtcyhjdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gaW5pdFByb3BlcnR5Q29sbGVjdGlvbigpIHsgICAgICAgIFxyXG4gICAgICAgIGlmIChpc1N5bmNlZCkge1xyXG4gICAgICAgICAgICB1cGRhdGVQcm9wZXJ0eUNvbGxlY3Rpb24oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnN5bmMudmVyaWZpZWQuY29udGFjdCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnR5Q29sbGVjdGlvbigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYXp5LnJlZnJlc2gnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVByb3BlcnR5Q29sbGVjdGlvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcudXNlci5yZWZyZXNoLmNvbGxlY3Rpb24nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVByb3BlcnR5Q29sbGVjdGlvbih0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnVzZXIuY2xlYXIuY29sbGVjdGlvbicsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdBR1VTRVJDT0xMRUNUSU9OMycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcudXNlci5jbGVhcicsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcudXNlci5jbGVhci5jb2xsZWN0aW9uJykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5Q29sbGVjdGlvbihpc0ZvcmNlZCkge1xyXG4gICAgICAgIHZhciBjb2xsZWN0aW9uVHlwZSA9IDM7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gYXdhaXQgZ2V0UHJvcGVydHlDb2xsZWN0aW9uKGNvbGxlY3Rpb25UeXBlLCBpc0ZvcmNlZCk7XHJcbiAgICAgICAgdmFyIGl0ZW1zRXh0cmFjdGVkID0gaXRlbXMuSXRlbXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IFsuLi5yZXN1bHQsIC4uLmN1cnJlbnQuSXRlbXNdIDogWy4uLmN1cnJlbnQuSXRlbXNdO1xyXG4gICAgICAgIH0sIFtdKTtcclxuICAgICAgICBpdGVtc0V4dHJhY3RlZC5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHJlbmRlclByb3BlcnR5Q29sbGVjdGlvbkl0ZW0oaXRlbSwgY29sbGVjdGlvblR5cGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlbmRlclByb3BlcnR5Q29sbGVjdGlvbkl0ZW0oaXRlbSx0eXBlKSB7XHJcbiAgICAgICAgdmFyIGl0ZW1Eb20gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1wZXJmb3JtLWFjdGlvbi11cmwqPVwicGs9JyArIGl0ZW0uUEsgKyAnXCJdW2RhdGEtcGVyZm9ybS1hY3Rpb24tdXJsKj1cInJ0PScgKyBpdGVtLlJUICsgJ1wiXScpOyAgICAgICAgXHJcbiAgICAgICAgaXRlbURvbS5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uKGRvbSkge1xyXG4gICAgICAgICAgICBkb20uc2V0QXR0cmlidXRlKCdhZy11c2VyLWNvbGxlY3Rpb24nLCB0eXBlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRQcm9wZXJ0eUNvbGxlY3Rpb24oY29sbGVjdGlvblR5cGUsIGlzRm9yY2VkKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5Q29sbGVjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eUNvbGxlY3Rpb25TdHJpbmcgPSBpc0ZvcmNlZCA/IG51bGwgOiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0FHVVNFUkNPTExFQ1RJT04nICsgY29sbGVjdGlvblR5cGUpO1xyXG4gICAgICAgICAgICBpZiAocHJvcGVydHlDb2xsZWN0aW9uU3RyaW5nICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5Q29sbGVjdGlvbiA9IEpTT04ucGFyc2UocHJvcGVydHlDb2xsZWN0aW9uU3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocHJvcGVydHlDb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcm9wZXJ0eUNvbGxlY3Rpb24gPSBhd2FpdCB3aW5kb3cuYWdSZXF1ZXN0LkdFVCgnL3NlcnZpY2VzL2Fnb3JhQ2xpZW50LmFzaHgnLCB7IHR5cGU6ICdVU0VSQ09MTEVDVElPTicsIGNvbGxlY3Rpb25UeXBlOiBjb2xsZWN0aW9uVHlwZSB9KTtcclxuICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdBR1VTRVJDT0xMRUNUSU9OJyArIGNvbGxlY3Rpb25UeXBlLCBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eUNvbGxlY3Rpb24pKTtcclxuICAgICAgICAgICAgcmVzb2x2ZShwcm9wZXJ0eUNvbGxlY3Rpb24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRMb2dpbmVkSXRlbShjb250YWN0KSB7XHJcbiAgICAgICAgdmFyIHdyYXBwZXIgPSBuZXcgYygncCcpO1xyXG4gICAgICAgIHdyYXBwZXIuYSgnYWctdXNlcicsJycpO1xyXG4gICAgICAgIHZhciB1c2VyQ29udGFpbmVyID0gd3JhcHBlci5uKCdidXR0b24nKTtcclxuICAgICAgICB1c2VyQ29udGFpbmVyLmEoJ2NsYXNzJywgJ3VzZXItbG9nZ2VkLWluIGEtYi0xIGYtcy0yIHUtbG9naW5lZCBzLWMtcCBtLWwtMTYgeGEtYi13LWwgci1iJyk7XHJcbiAgICAgICAgdXNlckNvbnRhaW5lci5oKGNvbnRhY3QuTmFtZSk7XHJcbiAgICAgICAgdXNlckNvbnRhaW5lci5jbChmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGlmICh1c2VyQ29udGFpbmVyLm5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSkge1xyXG4gICAgICAgICAgICAgICAgdXNlckNvbnRhaW5lci5ub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXNlckNvbnRhaW5lci5ub2RlLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHdyYXBwZXIubignc3BhbicpO1xyXG4gICAgICAgIG9wdGlvbnMubignc3BhbicpLmgoJ0hpLCAnICsgY29udGFjdC5OYW1lKTtcclxuICAgICAgICBvcHRpb25zLm4oJ2lucHV0JykuYSgndHlwZScsICdoaWRkZW4nKS5hKCdpZCcsICdDT05UQUNUX0dVSUQnKS5hKCd2YWx1ZScsIGNvbnRhY3QuR3VpZCk7XHJcbiAgICAgICAgb3B0aW9ucy5uKCdhJykuYSgnaHJlZicsICcvZGFzaGJvYXJkL2RlZmF1bHQuYXNweCcpLmgoJ0Rhc2hib2FyZCcpO1xyXG4gICAgICAgIG9wdGlvbnMubignc3BhbicpLmEoJ2RhdGEtbW9kYWxkaWFsb2ctc3JjJywgJy9kYXNoYm9hcmQvRWRpdFByb2ZpbGUuYXNweCcpLmEoJ2RhdGEtbW9kYWxkaWFsb2ctYWpheCcsICd0cnVlJykuYSgnZGF0YS1tb2RhbGRpYWxvZycsJycpLmgoJ0VkaXQgUHJvZmlsZScpO1xyXG4gICAgICAgIG9wdGlvbnMubignYScpLmEoJ2hyZWYnLCAnL2Rhc2hib2FyZC9TaWduT3V0LmFzcHgnKS5hKCdkYXRhLWFnb3JhLWljb24nLCAn7qSxJykuaCgnTG9nIG91dCcpLmNsKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcudXNlci5vdXQnKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHdyYXBwZXIubm9kZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjKG5hbWUpIHtcclxuICAgICAgICB0aGlzLm5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLmEgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLm5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLm4gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBpdGVtID0gbmV3IGMobmFtZSk7XHJcbiAgICAgICAgdGhpcy5ub2RlLmFwcGVuZENoaWxkKGl0ZW0ubm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUuaCA9IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5ub2RlLmlubmVySFRNTCA9IHRleHQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUuY2wgPSBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYWN0aW9uKTtcclxuICAgICAgICB0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhY3Rpb24pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XHJcbiAgICAgICAgcmVuZGVyKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5zeW5jLmNoZWNrJywgYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IGF3YWl0IGdldCgpO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFZhbHVlc1N0cmluZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQUdTWU5DJyk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWVzU3RyaW5nICE9IG51bGwgJiYgY3VycmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gSlNPTi5wYXJzZShjdXJyZW50VmFsdWVzU3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUuQ29udGFjdEd1aWQgIT0gY3VycmVudC5HdWlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy5zZXQnLCB7IGRldGFpbDogeyBjb250YWN0Z3VpZDogY3VycmVudC5HdWlkLCBhZ2VudGtleTogY3VycmVudC5Mb2dpbkFnZW50ID8gY3VycmVudC5Mb2dpbkFnZW50LktleTonJywgZXZlbnRUeXBlOiAnY29udGFjdCcgfSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnN5bmMudmVyaWZpZWQuY29udGFjdCcpKTtcclxuICAgICAgICAgICAgaXNTeW5jZWQgPSB0cnVlOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnN5bmMudmVyaWZpZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnN5bmMudmVyaWZpZWQuY29udGFjdCcpKTtcclxuICAgICAgICAgICAgaXNTeW5jZWQgPSB0cnVlOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHdpbmRvdy5hZ1VzZXIgPSB7XHJcbiAgICAgICAgY29sbGVjdGlvbjoge1xyXG4gICAgICAgICAgICByZWZyZXNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy51c2VyLnJlZnJlc2guY29sbGVjdGlvbicpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgaW5pdCgpO1xyXG5cclxufSkoKTtcclxuXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7ICAgIFxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGNoZWNrRm9yU3luYygpIHtcclxuICAgICAgICB2YXIgY3VycmVudFZhbHVlc1N0cmluZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQUdTWU5DJyk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZXNTdHJpbmcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gSlNPTi5wYXJzZShjdXJyZW50VmFsdWVzU3RyaW5nKTtcclxuICAgICAgICAgICAgdmFyIHVwZGF0ZWRPbiA9IG5ldyBEYXRlKGN1cnJlbnRWYWx1ZS51cGRhdGVkT24pOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgY3VycmVudERhdGVUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgY3VycmVudERhdGVUaW1lLnNldE1pbnV0ZXMoY3VycmVudERhdGVUaW1lLmdldE1pbnV0ZXMoKSAtIDEpO1xyXG4gICAgICAgICAgICBpZiAodXBkYXRlZE9uID4gY3VycmVudERhdGVUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5zeW5jLnZlcmlmaWVkJykpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSAgICAgICAgICAgICAgXHJcbiAgICAgICAgcmVhZEZyb21TZXJ2ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZWFkRnJvbVNlcnZlcigpIHtcclxuICAgICAgICB2YXIgZGF0YVRvUmV2aWV3ID0gYXdhaXQgd2luZG93LmFnUmVxdWVzdC5HRVQoJy9zZXJ2aWNlcy9hZ29yYUNsaWVudC5hc2h4JywgeyB0eXBlOiAnU1lOQycgfSk7XHJcbiAgICAgICAgZGF0YVRvUmV2aWV3LnVwZGF0ZWRPbiA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdBR1NZTkMnLCBKU09OLnN0cmluZ2lmeShkYXRhVG9SZXZpZXcpKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5zeW5jLmNoZWNrJykpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXQoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5zeW5jLnNldCcsIGFzeW5jIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHdpbmRvdy5hZ1JlcXVlc3QuUE9TVCgnL3NlcnZpY2VzL2Fnb3JhQ2xpZW50LmFzaHgnLCBPYmplY3QuYXNzaWduKHsgdHlwZTogJ1NFVCcgfSwgZS5kZXRhaWwpKTtcclxuICAgICAgICAgICAgaWYgKGUuZGV0YWlsPy5ldmVudFR5cGUpXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5zeW5jLnZlcmlmaWVkLicgKyBlLmRldGFpbC5ldmVudFR5cGUpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5zeW5jLmludmFsaWQnLCBhc3luYyBmdW5jdGlvbiAoZSkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5zeW5jLnJlc2V0JykpO1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNoZWNrRm9yU3luYygpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoKTtcclxufSkoKTtcclxuXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JDb3VudHJ5KCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50VmFsdWVzU3RyaW5nID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdBR1VTRVJDT1VOVFJZJyk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZXNTdHJpbmcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gSlNPTi5wYXJzZShjdXJyZW50VmFsdWVzU3RyaW5nKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UuY291bnRyeS5hdXRvLWRpc2NvdmVyeScsIHsgZGV0YWlsOiBjdXJyZW50VmFsdWV9KSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVhZEZyb21TZXJ2ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZWFkRnJvbVNlcnZlcigpIHtcclxuICAgICAgICB2YXIgZGF0YVRvUmV2aWV3ID0gYXdhaXQgd2luZG93LmFnUmVxdWVzdC5HRVQoJ2h0dHBzOi8vaXAtc2VydmljZS5pZGNyZWFsZXN0YXRlLmNvbS9pcCcsIHt9KTtcclxuICAgICAgICBkYXRhVG9SZXZpZXcudXBkYXRlZE9uID0gbmV3IERhdGUoKTtcclxuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0FHVVNFUkNPVU5UUlknLCBKU09OLnN0cmluZ2lmeShkYXRhVG9SZXZpZXcpKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS5jb3VudHJ5LmF1dG8tZGlzY292ZXJ5JywgeyBkZXRhaWw6IGRhdGFUb1Jldmlld30pKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBpbml0KCkge1xyXG4gICAgICAgIGNoZWNrRm9yQ291bnRyeSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoKTtcclxufSkoKTtcclxuXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIGV4cHJlc3Npb25Ub0NoZWNrID0gbmV3IFJlZ0V4cCgnKD88R3VpZD5bQS16MC05XFxcXC1dKylcXFxcfCg/PEFnZW50S2V5PlswLTldKyknLCdnaScpO1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGNoZWNrTG9naW4oKSB7XHJcbiAgICAgICAgdmFyIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xyXG4gICAgICAgIGlmICh1cmwubGVuZ3RoIDwgMSkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBkYXRhRnJvbVVybCA9IGF0b2IodXJsLnN1YnN0cmluZygxKSk7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gbnVsbDtcclxuICAgICAgICBjb25zb2xlLmxvZyhkYXRhRnJvbVVybCk7XHJcbiAgICAgICAgaWYgKChtYXRjaCA9IGV4cHJlc3Npb25Ub0NoZWNrLmV4ZWMoZGF0YUZyb21VcmwpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZlcmlmeUxvZ2luKG1hdGNoLmdyb3Vwcy5HdWlkLCBtYXRjaC5ncm91cHMuQWdlbnRLZXkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh1cmwgIT0gJycgJiYgdXJsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBoYXNoVG9Eb21NYXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS10YWI9XCInICsgdXJsLnN1YnN0cmluZygxKSArICdcIl0nKTtcclxuICAgICAgICAgICAgICAgIGlmIChoYXNoVG9Eb21NYXAgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICBoYXNoVG9Eb21NYXAuY2xpY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiB2ZXJpZnlMb2dpbih1c2VySWQsIGFnZW50S2V5KSB7ICAgICAgICBcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2lzLWJ1c3knKTtcclxuICAgICAgICB2YXIgdXNlclJlc3BvbnNlID0gYXdhaXQgd2luZG93LmFnUmVxdWVzdC5QT1NUKCcvc2VydmljZXMvYWdvcmFBY2Nlc3MuYXNoeCcsIHsgJ2FjdGlvbic6ICdSZW1vdGVTaWduSW4nLCAnY29udGFjdGd1aWQnOiB1c2VySWQsICdhZ2VudGtleSc6IGFnZW50S2V5IH0pO1xyXG4gICAgICAgIGlmICh1c2VyUmVzcG9uc2UuQ29udGFjdCkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy51c2VyLmluJywgeyBkZXRhaWw6IHVzZXJSZXNwb25zZS5Db250YWN0IH0pKTtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL2Rhc2hib2FyZC9kZWZhdWx0LmFzcHgjc2F2ZWQtc2VhcmNoZXMnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBpbml0KCkge1xyXG4gICAgICAgIGNoZWNrTG9naW4oKTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIGNoZWNrTG9naW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoKTtcclxufSkoKTtcclxuXHJcbmZ1bmN0aW9uIG9wZW5JbWFnZUdhbGxlcnkoc2VuZGVyKSB7XHJcbiAgICB2YXIgX21sc051bWJlciA9IHNlbmRlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWsnKTtcclxuICAgIHZhciBfcnQgPSBzZW5kZXIuZ2V0QXR0cmlidXRlKCdkYXRhLXJ0Jyk7XHJcbiAgICB2YXIgX2NsaWVudGNvZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1wY29kZScpO1xyXG4gICAgdmFyIF9waG90b0NvdW50ID0gc2VuZGVyLmdldEF0dHJpYnV0ZSgnZGF0YS1waG90b2NvdW50JykgPz8gMTtcclxuICAgIHNob3dQcm9wZXJ0eUdhbGxlcnkoX2NsaWVudGNvZGUsIF9ydCwgX21sc051bWJlciwgX3Bob3RvQ291bnQsICdmdWxsc2NyZWVuJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldEZvcm1zKHVzZXJDb2xsZWN0aW9uKSB7XHJcbiAgICBpZiAoKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tub2RlPVwiRmlyc3ROYW1lXCJdJykpICE9IG51bGwgJiYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tub2RlPVwiRmlyc3ROYW1lXCJdJykpICE9IHVuZGVmaW5lZCApXHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW25vZGU9XCJGaXJzdE5hbWVcIl0nKS52YWx1ZSA9IHVzZXJDb2xsZWN0aW9uLkZpcnN0TmFtZSA/PyAnJztcclxuICAgIGlmICgoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW25vZGU9XCJMYXN0TmFtZVwiXScpKSAhPSBudWxsICYmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbbm9kZT1cIkxhc3ROYW1lXCJdJykpICE9IHVuZGVmaW5lZCApXHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW25vZGU9XCJMYXN0TmFtZVwiXScpLnZhbHVlID0gdXNlckNvbGxlY3Rpb24uTGFzdE5hbWUgPz8gJyc7XHJcbiAgICBpZiAoKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tub2RlPVwiRW1haWxcIl0nKSkgIT0gbnVsbCAmJiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW25vZGU9XCJFbWFpbFwiXScpKSAhPSB1bmRlZmluZWQgKVxyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tub2RlPVwiRW1haWxcIl0nKS52YWx1ZSA9IHVzZXJDb2xsZWN0aW9uLkVtYWlsID8/ICcnO1xyXG4gICAgaWYgKChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbbm9kZT1cIk1vYmlsZVBob25lXCJdJykpICE9IG51bGwgJiYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tub2RlPVwiTW9iaWxlUGhvbmVcIl0nKSkgIT0gdW5kZWZpbmVkIClcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbbm9kZT1cIk1vYmlsZVBob25lXCJdJykudmFsdWUgPSB1c2VyQ29sbGVjdGlvbi5Nb2JpbGVQaG9uZSA/PyAnJztcclxufSBcclxuXHJcblxyXG52YXIgbG9hZEV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KFwib25BZ29yYUxvYWRcIik7XHJcbmRvY3VtZW50LmRpc3BhdGNoRXZlbnQobG9hZEV2ZW50KTtcclxuZG9jdW1lbnQuaXNBZ29yYUxvYWRlZCA9IHRydWU7XHJcbmxvYWRFdmVudCA9IG5ldyBDdXN0b21FdmVudCgnb25Dc3NMb2FkJyk7XHJcbmRvY3VtZW50LmRpc3BhdGNoRXZlbnQobG9hZEV2ZW50KTtcclxuZG9jdW1lbnQuaXNDc3NMb2FkZWQgPSB0cnVlO1xyXG5cclxuRW5hYmxlRGVtYW5kSW1wb3J0KCk7XHJcbkVuYWJsZVNlYXJjaEZvcm0oKTtcclxuXHJcbmZ1bmN0aW9uIHJlZnJlc2hUcmFja2luZygpIHtcclxuICAgICQoJ1tkYXRhLXdlYmFjdGl2aXR5XScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ2RhdGEtcHJvY2Vzc2VkJykgIT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICB2YXIgYWN0aXZpdHkgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtd2ViYWN0aXZpdHknKTtcclxuICAgICAgICAgICAgdmFyIHRyYWNrSXRlbXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICQuZWFjaCh0aGlzLmF0dHJpYnV0ZXMsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hbWUuc3RhcnRzV2l0aCgnZGF0YS13ZWJhY3Rpdml0eS0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5uYW1lLnN1YnN0cmluZygnZGF0YS13ZWJhY3Rpdml0eS0nLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFja0l0ZW1zLnB1c2goeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgV2ViQWN0aXZpdHlUcmFja2VyKCdXRUJBQ1RJVklUWScsICdQUk9QRVJUWScsIGFjdGl2aXR5LCB0cmFja0l0ZW1zKTtcclxuXHJcbiAgICAgICAgICAgICQodGhpcykuYXR0cignZGF0YS1wcm9jZXNzZWQnLCAndHJ1ZScpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5kb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJQbHVnaW4uTWFwLlJlc3VsdFVwZGF0ZWRcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgcmVmcmVzaFRyYWNraW5nKCk7XHJcbn0pO1xyXG5cclxuZnVuY3Rpb24gV2ViQWN0aXZpdHlUcmFja2VyKHRyYWNrVHlwZSwgdHJhY2tPYmplY3RUeXBlLCBhY3Rpdml0eVR5cGUsIHRyYWNrSXRlbXMpIHtcclxuICAgIHZhciB0cmFja0RhdGEgPSBbXTtcclxuICAgIGlmICh0cmFja0l0ZW1zICYmIHRyYWNrSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHZhciBkYXRhID0geyBUcmFja1R5cGU6IHRyYWNrVHlwZSwgT2JqZWN0VHlwZTogdHJhY2tPYmplY3RUeXBlLCBPYmplY3RBY3Rpdml0eVR5cGU6IGFjdGl2aXR5VHlwZSB9O1xyXG4gICAgICAgIHRyYWNrSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICBkYXRhW2l0ZW0ubmFtZV0gPSBpdGVtLnZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyYWNrRGF0YS5wdXNoKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAnL3RyYWNrZXInLFxyXG4gICAgICAgIGRhdGE6IHsgdHJhY2s6IEpTT04uc3RyaW5naWZ5KHRyYWNrRGF0YSkgfSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RyYWNraW5nIHN1Y2Nlc3NmdWw6JywgcmVzdWx0KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVHJhY2tlciBub3QgZm91bmQhJywgcmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxuLypGb3IgYy1tZW51IGJ1dHRvbnMgaW4gcmVnaW9uIGFuZCBhZ2VudCBkZXRhaWxzIHBhZ2VzKi9cclxuXHJcbmlmICgkKFwiLmMtbWVudSAuc3VibmF2IGFcIikgIT0gbnVsbCkge1xyXG4gICAgJCgnLmMtbWVudSAuc3VibmF2IGEnKS5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHtcclxuXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuaGFzaCxcclxuICAgICAgICAgICAgbWVudSA9IHRhcmdldDtcclxuICAgICAgICAkdGFyZ2V0ID0gJCh0YXJnZXQpO1xyXG5cclxuICAgICAgICAkKCdodG1sLCBib2R5Jykuc3RvcCgpLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBzY3JvbGxUb3A6ICR0YXJnZXQub2Zmc2V0KCkudG9wIC0gKCQoJy5jLW1lbnUnKS5vdXRlckhlaWdodCgpICsgJCgnLml0ZW0taCcpLm91dGVySGVpZ2h0KCkpXHJcbiAgICAgICAgfSwgJ3N3aW5nJywgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgJChkb2N1bWVudCkub24oXCJzY3JvbGxcIiwgb25TY3JvbGwpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCdhJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIG9uU2Nyb2xsKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIHZhciBzY3JvbGxQb3MgPSAkKGRvY3VtZW50KS5zY3JvbGxUb3AoKTtcclxuICAgICAgICAkKCcuYy1tZW51IC5zdWJuYXYgYScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgY3VyckxpbmsgPSAkKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlZkVsZW1lbnQgPSAkKGN1cnJMaW5rLmF0dHIoXCJocmVmXCIpKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZWZFbGVtZW50LnBvc2l0aW9uKCkudG9wIC0gKCQoJy5jLW1lbnUnKS5vdXRlckhlaWdodCgpICsgJCgnLml0ZW0taCcpLm91dGVySGVpZ2h0KCkpIDw9IHNjcm9sbFBvcyAmJiByZWZFbGVtZW50LnBvc2l0aW9uKCkudG9wICsgcmVmRWxlbWVudC5oZWlnaHQoKSA+IHNjcm9sbFBvcykge1xyXG4gICAgICAgICAgICAgICAgJCgnLmMtbWVudSAuc3VibmF2IGEnKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgIGN1cnJMaW5rLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3VyckxpbmsucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgICQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24gKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIGlmICgkKFwiYm9keVwiKS5oYXNDbGFzcyhcInNjcm9sbFwiKSkge1xyXG4gICAgICAgICAgICAkKCcuYy1tZW51IC5zdWJuYXYgYScpLmNsaWNrKGZ1bmN0aW9uIChldmVudCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgJCgnaHRtbCwgYm9keScpLnN0b3AoKS5hbmltYXRlKHtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A6ICQoJCh0aGlzKS5hdHRyKCdocmVmJykpLm9mZnNldCgpLnRvcCAtICgkKCcuYy1tZW51Jykub3V0ZXJIZWlnaHQoKSArICQoJy5pdGVtLWgnKS5vdXRlckhlaWdodCgpKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAzMDApO1xyXG5cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEkKFwiYm9keVwiKS5oYXNDbGFzcyhcInNjcm9sbFwiKSkge1xyXG4gICAgICAgICAgICAkKCcuYy1tZW51IC5zdWJuYXYgYScpLmNsaWNrKGZ1bmN0aW9uIChldmVudCkge1xyXG5cclxuICAgICAgICAgICAgICAgICQoJ2h0bWwsIGJvZHknKS5zdG9wKCkuYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wOiAkKCQodGhpcykuYXR0cignaHJlZicpKS5vZmZzZXQoKS50b3AgLSAoKDIgKiAkKCcuYy1tZW51Jykub3V0ZXJIZWlnaHQoKSkgKyAkKCcuaXRlbS1oJykub3V0ZXJIZWlnaHQoKSlcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgMzAwKTtcclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuXHJcbn1cclxuXHJcblxyXG4iLCLvu79cclxuLy8gSW50ZXIgcG9sYXRpb25cclxuKGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgc3lzdGVtRnVuY3Rpb25zID0ge307XHJcblxyXG4gICAgZnVuY3Rpb24gSW50ZXJwb2xhdGlvbihodG1sLCBkb20sIGNvbnRleHQsIGZ1bmN0aW9uQXJnc0xpdGVyYWxzID0gW10sIGZ1bmN0aW9uQXJnc1ZhbHVlcyA9IFtdLCBwYXJlbnRSZW5kZXJGdW5jdGlvbiA9ICgpID0+IHsgfSkge1xyXG4gICAgICAgIGxldCBleHByZXNzaW9uID0gbmV3IFJlZ0V4cCgnXFxcXHtcXFxce1teXFxcXH1dK1xcXFx9XFxcXH0nLCAnZ2knKTtcclxuICAgICAgICBsZXQgcmVuZGVyRnVuY3Rpb25zID0gKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgcGFyZW50UmVuZGVyRnVuY3Rpb24oKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZVN0cmluZyA9ICcnO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgb2YgZG9tLmdldEF0dHJpYnV0ZU5hbWVzKCkpIHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gZG9tLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgYnVpbGRSZW5kZXJGdW5jdGlvbih2YWx1ZSwgKGNvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBkb20uc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5QcmVJbnRlcnBvbGF0aW9uKGRvbSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZG9tLmNoaWxkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xyXG4gICAgICAgICAgICAgICAgSW50ZXJwb2xhdGlvbihodG1sLCBub2RlLCBjb250ZXh0LCBmdW5jdGlvbkFyZ3NMaXRlcmFscywgZnVuY3Rpb25BcmdzVmFsdWVzLCAoKSA9PiB7IH0pO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkRG9tID0gbm9kZTtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09ICdBJyAmJiBub2RlLmhhc0F0dHJpYnV0ZSgnYWctbm9mb2xsb3cnKSAmJiBub2RlLmdldEF0dHJpYnV0ZSgncmVsJykgPT0gJ25vZm9sbG93Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdhZy1ub2ZvbGxvdycpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdyZWwnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBvZiBjaGlsZERvbS5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gY2hpbGREb20uZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRSZW5kZXJGdW5jdGlvbih2YWx1ZSwgKGNvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRG9tLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5QcmVJbnRlcnBvbGF0aW9uKGNoaWxkRG9tKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERSAmJiBub2RlLnRleHRDb250ZW50ICE9IG51bGwgJiYgbm9kZS50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUudGV4dENvbnRlbnQuaW5kZXhPZigne3snKSA9PSAwICYmIG5vZGUudGV4dENvbnRlbnQgPT0gbm9kZS5wYXJlbnRFbGVtZW50LmlubmVyVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkUmVuZGVyRnVuY3Rpb24obm9kZS50ZXh0Q29udGVudCwgKGNvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5QcmVJbnRlcnBvbGF0aW9uKG5vZGUucGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50RWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBidWlsZFJlbmRlckZ1bmN0aW9uKG5vZGUudGV4dENvbnRlbnQsIChjb250ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUHJlSW50ZXJwb2xhdGlvbihub2RlLnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRleHRDb250ZW50ID0gY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBjbGVhblByZUludGVycG9sYXRpb24obm9kZSkge1xyXG4gICAgICAgICAgICBpZiAobm9kZSAhPSBudWxsICYmIChub2RlLmNsYXNzTGlzdC5jb250YWlucygnYWctZmFrZS1jb250YWlucycpIHx8IG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdhZy1mYWtlLWlubGluZS1jb250YWlucycpKSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1mYWtlLWNvbnRhaW5zJyk7XHJcbiAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWZha2UtaW5saW5lLWNvbnRhaW5zJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZE5vZGVzWzBdLm5vZGVUeXBlID09IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZE5vZGVzWzBdLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBidWlsZFJlbmRlckZ1bmN0aW9uKGlucHV0VGV4dCwgcmVuZGVyKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gaW5wdXRUZXh0Lm1hdGNoKGV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICBsZXQgcmVuZGVyQmxvY2sgPSAoKSA9PiB7IHJldHVybiAnJzsgfTtcclxuICAgICAgICAgICAgbGV0IHJlbmRlclRlbXBsYXRlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyKHJlbmRlckJsb2NrKCkpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVTdHJpbmcgPSBpbnB1dFRleHQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFyaWFibGVzID0gW107XHJcbiAgICAgICAgICAgICAgICBsZXQgaXNTeXN0ZW1GdW5jdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgbWF0Y2hlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkZW50aWZpZXIgPSBpdGVtLnN1YnN0cmluZygyLCBpdGVtLmxlbmd0aCAtIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU3RyaW5nID0gdGVtcGxhdGVTdHJpbmcucmVwbGFjZShpdGVtLCBgXFwke3R5cGVvZigke2lkZW50aWZpZXJ9KSE9J3VuZGVmaW5lZCcmJiR7aWRlbnRpZmllcn0hPW51bGw/JHtpZGVudGlmaWVyfTonJ31gKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbG9jYWxWYXJpYWJsZXMgPSBFeHRyYWN0VmFyaWFibGVzVG9wTGV2ZWxJZGVudGlmaWVycyhpZGVudGlmaWVyKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMucHVzaCguLi5sb2NhbFZhcmlhYmxlcy5maWx0ZXIoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlcy5pbmRleE9mKHgpIDwgMDtcclxuICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIgIT0gdmFyaWFibGVzW3ZhcmlhYmxlcy5sZW5ndGggLSAxXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgV2F0Y2goZG9tLCBjb250ZXh0LCB2YXJpYWJsZXNbdmFyaWFibGVzLmxlbmd0aCAtIDFdLCAoZGF0YSwgaXNDaGFuZ2UsIGlkZW50aWZpZXIpID0+IHsgcmVuZGVyVGVtcGxhdGUoKTsgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChJc0Z1bmN0aW9uKHN5c3RlbUZ1bmN0aW9ucywgaWRlbnRpZmllcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTeXN0ZW1GdW5jdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEV4dHJhY3RBcmd1bWVudFZhcmlhYmxlc0ZvckZ1bmN0aW9uRnJvbVN0cmluZyhpZGVudGlmaWVyKS5mb3JFYWNoKGFyZ3VtZW50SXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXRjaChkb20sIGNvbnRleHQsIGFyZ3VtZW50SXRlbSwgKGRhdGEsIGlzQ2hhbmdlLCBpZGVudGlmaWVyKSA9PiB7IHJlbmRlclRlbXBsYXRlKCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgV2F0Y2goZG9tLCBjb250ZXh0LCBpZGVudGlmaWVyLCAoZGF0YSwgaXNDaGFuZ2UsIGlkZW50aWZpZXIpID0+IHsgcmVuZGVyVGVtcGxhdGUoKTsgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHJlbmRlckZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKGB0cnl7Y29uc3QgeyR7dmFyaWFibGVzLmpvaW4oJywnKX19ID0gdGhpczsgcmV0dXJuIFxcYCR7dGVtcGxhdGVTdHJpbmd9XFxgOyB9Y2F0Y2goZSl7IGNvbnNvbGUuZXJyb3IoZSk7IH1yZXR1cm4gJyc7YCkuYmluZChpc1N5c3RlbUZ1bmN0aW9uID8gaW50ZXJwb2xhdGVPYmplY3QoY29udGV4dCkgOiBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJlbmRlckJsb2NrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJGdW5jdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudFJlbmRlckZ1bmN0aW9ucyA9IHJlbmRlckZ1bmN0aW9ucztcclxuICAgICAgICAgICAgICAgIHJlbmRlckZ1bmN0aW9ucyA9IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGVtcGxhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVuZGVyRnVuY3Rpb25zKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyRnVuY3Rpb25zKGNvbnRleHQpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbnRlcnBvbGF0ZU9iamVjdChjb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oY29udGV4dCwgc3lzdGVtRnVuY3Rpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBQcmVJbnRlcnBvbGF0aW9uKGRvbSwgcm9vdERvbSkge1xyXG4gICAgICAgIGlmIChyb290RG9tID09IG51bGwpXHJcbiAgICAgICAgICAgIHJvb3REb20gPSBkb207XHJcbiAgICAgICAgbGV0IGlzTWFza2VkID0gcm9vdERvbS5oYXNBdHRyaWJ1dGUoJ2FnLWZha2UnKTtcclxuXHJcbiAgICAgICAgaWYgKGlzTWFza2VkKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBvZiBkb20uZ2V0QXR0cmlidXRlTmFtZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZG9tLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUuaW5kZXhPZigne3snKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlLnJlcGxhY2UoLyhcXHtcXHspfChcXH1cXH0pL2dpLCBcIlwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkb20uY2xhc3NMaXN0LmFkZCgnYWctZmFrZS1pbmxpbmUtY29udGFpbnMnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZG9tLmNoaWxkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlLm5vZGVOYW1lICE9ICdPUFRJT04nKSB7XHJcbiAgICAgICAgICAgICAgICBQcmVJbnRlcnBvbGF0aW9uKG5vZGUsIHJvb3REb20pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTWFza2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlIG9mIG5vZGUuZ2V0QXR0cmlidXRlTmFtZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5pbmRleE9mKCd7eycpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUucmVwbGFjZSgvKFxce1xceyl8KFxcfVxcfSkvZ2ksIFwiXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09IE5vZGUuVEVYVF9OT0RFICYmIG5vZGUudGV4dENvbnRlbnQgIT0gbnVsbCAmJiBub2RlLnRleHRDb250ZW50LmluZGV4T2YoJ3t7JykgPiAtMSAmJiBub2RlLnRleHRDb250ZW50LnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmFrZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJyk7XHJcbiAgICAgICAgICAgICAgICBmYWtlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdhZy1mYWtlJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gbm9kZS5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBudWxsICYmICFwYXJlbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhZy1mYWtlLWNvbnRhaW5zJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGZha2VFbGVtZW50LCBwYXJlbnQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LmNsYXNzTGlzdC5hZGQoJ2FnLWZha2UtY29udGFpbnMnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXNrZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoLyhcXHtcXHspfChcXH1cXH0pL2dpLCBcIlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBXYXRjaCgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gR2V0VmFsdWUoaXRlbSwgcHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPCAwICYmIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgPiAtMSkge1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudFByb3BlcnR5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCBwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpKTtcclxuICAgICAgICAgICAgbGV0IHN1YlByb3BlcnR5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyhwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpICsgMSwgcHJvcGVydHlOYW1lLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHJldHVybiBHZXRWYWx1ZShpdGVtW2N1cnJlbnRQcm9wZXJ0eV0sIHN1YlByb3BlcnR5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgaXNGdW5jdGlvbiA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPiAtMTtcclxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24pXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFsdWVGcm9tRnVuY3Rpb24oaXRlbSwgcHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0gIT0gdW5kZWZpbmVkID8gaXRlbVtwcm9wZXJ0eU5hbWVdIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBJc0Z1bmN0aW9uKGl0ZW0sIHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgIHJldHVybiBwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpID4gLTEgJiYgdHlwZW9mIChpdGVtW2dldEZ1bmN0aW9uTmFtZShwcm9wZXJ0eU5hbWUpXSkgPT0gJ2Z1bmN0aW9uJztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBHZXRQcm94eU9iamVjdChpdGVtKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgKGl0ZW0pID09ICd1bmRlZmluZWQnIHx8IGl0ZW0gPT0gbnVsbCkgcmV0dXJuIGl0ZW07XHJcblxyXG4gICAgICAgIGxldCBwcm94eU9iamVjdCA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpdGVtUHJvcGVydHkgaW4gaXRlbSlcclxuICAgICAgICAgICAgU2V0UHJvcGVydHlUb1Byb3h5T2JqZWN0KGl0ZW0sIHByb3h5T2JqZWN0LCBpdGVtUHJvcGVydHkpO1xyXG5cclxuICAgICAgICAvL0xpbmtJdGVtKGl0ZW0scHJveHlPYmplY3QpO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJveHlPYmplY3Q7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gU2V0UHJvcGVydHlUb1Byb3h5T2JqZWN0KGl0ZW0sIHByb3h5T2JqZWN0LCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIChpdGVtW3Byb3BlcnR5TmFtZV0pID09ICdmdW5jdGlvbicpXHJcbiAgICAgICAgICAgIHByb3h5T2JqZWN0W3Byb3BlcnR5TmFtZV0gPSBpdGVtW3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHlPYmplY3QsIHByb3BlcnR5TmFtZSwgeyBnZXQoKSB7IHJldHVybiBpdGVtW3Byb3BlcnR5TmFtZV07IH0sIHNldCh2YWx1ZSkgeyBpdGVtW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTsgTm90aWZ5KG51bGwsIGl0ZW0sIHByb3BlcnR5TmFtZSwgdHJ1ZSk7IH0sIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBTZXRQcm9wZXJ0eURlc2NyaXB0b3JUb1Byb3h5T2JqZWN0KHByb3h5T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHByb3BlcnR5RGVzY3JpcHRvcikge1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eU9iamVjdCwgcHJvcGVydHlOYW1lLCBwcm9wZXJ0eURlc2NyaXB0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIENvbnZlck9iamVjdFRvQXJndW1lbnRBcnJheShpdGVtKSB7XHJcblxyXG4gICAgICAgIGxldCBjb252ZXJ0ZWRWYWx1ZXMgPSB7IGFyZ3VtZW50czogW10sIHZhbHVlczogW10gfTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGl0ZW0pIHtcclxuICAgICAgICAgICAgY29udmVydGVkVmFsdWVzLmFyZ3VtZW50cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIGNvbnZlcnRlZFZhbHVlcy52YWx1ZXMucHVzaChpdGVtW2tleV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbnNlcnRBZnRlcihlbCwgcmVmZXJlbmNlTm9kZSkge1xyXG4gICAgICAgIGlmIChyZWZlcmVuY2VOb2RlLnBhcmVudE5vZGUgIT0gbnVsbClcclxuICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbCwgcmVmZXJlbmNlTm9kZS5uZXh0U2libGluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKGVsLCByZWZlcmVuY2VOb2RlKSB7XHJcbiAgICAgICAgcmVmZXJlbmNlTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbCwgcmVmZXJlbmNlTm9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlc0Zyb21TdHJpbmdFeHByZXNzaW9uID0gbmV3IFJlZ0V4cCgnKCg/PHN0cmluZz4oW1xcXCJcXCdcXGBdLio/W1xcXCJcXCdcXGBdKSl8KD88Ym9vbGVhbj4odHJ1ZXxmYWxzZSkpfCgoPzxmdW5jdGlvbj5bQS16X11bQS16MC05XFwuXFwkXSspW1xcKF0pfCg/PGlkZW50aWZpZXI+W0Etel9dW0EtejAtOVxcLlxcJF0rKSknLCAnZ2knKTtcclxuICAgIGxldCB2YXJpYWJsZVRvcExldmVsSWRlbnRpZmllcnNFeHByZXNzaW9uID0gbmV3IFJlZ0V4cCgnKD88dmFyaWFibGU+W0EtejAtOV9cXFxcJF0rKSgoKFxcXFwuW15cXFxcc1xcXFw9XFxcXCZcXFxcfF0qKXxcXFxcKCkpPycsICdnaScpO1xyXG5cclxuICAgIGZ1bmN0aW9uIEV4dHJhY3RWYXJpYWJsZXNUb3BMZXZlbElkZW50aWZpZXJzKHZhbHVhdGlvblN0cmluZykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoID0gbnVsbDtcclxuICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IHZhcmlhYmxlVG9wTGV2ZWxJZGVudGlmaWVyc0V4cHJlc3Npb24uZXhlYyh2YWx1YXRpb25TdHJpbmcpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2guZ3JvdXBzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLmdyb3Vwcy52YXJpYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChtYXRjaC5ncm91cHMudmFyaWFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gRXh0cmFjdFZhcmlhYmxlc0Zyb21TdHJpbmcodmFsdWF0aW9uU3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgZnVuY3Rpb25zOiBbXSwgaWRlbnRpZmllcnM6IFtdIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaCA9IG51bGw7XHJcbiAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSB2YXJpYWJsZXNGcm9tU3RyaW5nRXhwcmVzc2lvbi5leGVjKHZhbHVhdGlvblN0cmluZykpICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2guZ3JvdXBzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLmdyb3Vwcy5pZGVudGlmaWVyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaWRlbnRpZmllcnMucHVzaChtYXRjaC5ncm91cHMuaWRlbnRpZmllcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLmdyb3Vwcy5mdW5jdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZ1bmN0aW9ucy5wdXNoKG1hdGNoLmdyb3Vwcy5mdW5jdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIEV4dHJhY3RBcmd1bWVudFZhcmlhYmxlc0ZvckZ1bmN0aW9uRnJvbVN0cmluZyh2YWx1YXRpb25TdHJpbmcpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcbiAgICAgICAgbGV0IGZ1bmN0aW9uQXJndW1lbnRzID0gW107XHJcbiAgICAgICAgbGV0IGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQgPSB2YWx1YXRpb25TdHJpbmcuaW5kZXhPZignKCcpO1xyXG4gICAgICAgIGxldCBmdW5jdGlvbkFyZ3VtZW50c0VuZCA9IHZhbHVhdGlvblN0cmluZy5pbmRleE9mKCcpJyk7XHJcbiAgICAgICAgbGV0IGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQgPiAtMSA/IHZhbHVhdGlvblN0cmluZy5zdWJzdHJpbmcoMCwgZnVuY3Rpb25Bcmd1bWVudHNTdGFydCkgOiB2YWx1YXRpb25TdHJpbmc7XHJcbiAgICAgICAgbGV0IGFyZ3VtZW50c1N0cmluZyA9IHZhbHVhdGlvblN0cmluZy5zdWJzdHJpbmcoZnVuY3Rpb25Bcmd1bWVudHNTdGFydCArIDEsIGZ1bmN0aW9uQXJndW1lbnRzRW5kKTtcclxuICAgICAgICBsZXQgbWF0Y2hlcyA9IGFyZ3VtZW50c1N0cmluZy5tYXRjaChuZXcgUmVnRXhwKCdbXixdKycsICdnaScpKTtcclxuICAgICAgICBpZiAobWF0Y2hlcyAhPSBudWxsKVxyXG4gICAgICAgICAgICBtYXRjaGVzLmZvckVhY2goKGFyZ3VtZW50SXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKC9eKF98W0Etel0pKF98W0Etel18WzAtOV18XFwkKSskLy50ZXN0KGFyZ3VtZW50SXRlbS50cmltKCkpKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFyZ3VtZW50SXRlbS50cmltKCkpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgIGxldCBvcGVuSW5kZXggPSAtMTtcclxuICAgICAgICBpZiAoKG9wZW5JbmRleCA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykpID4gLTEpIHJldHVybiBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIG9wZW5JbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5TmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRWYWx1ZUZyb21GdW5jdGlvbihpdGVtLCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHMgPSBbXTtcclxuICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHNTdGFydCA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJyk7XHJcbiAgICAgICAgbGV0IGZ1bmN0aW9uQXJndW1lbnRzRW5kID0gcHJvcGVydHlOYW1lLmluZGV4T2YoJyknKTtcclxuICAgICAgICBsZXQgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25Bcmd1bWVudHNTdGFydCA+IC0xID8gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0KSA6IHByb3BlcnR5TmFtZTtcclxuICAgICAgICBsZXQgYXJndW1lbnRzU3RyaW5nID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyhmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0ICsgMSwgZnVuY3Rpb25Bcmd1bWVudHNFbmQpO1xyXG4gICAgICAgIGxldCBtYXRjaGVzID0gYXJndW1lbnRzU3RyaW5nLm1hdGNoKG5ldyBSZWdFeHAoJ1teLF0rJywgJ2dpJykpO1xyXG4gICAgICAgIGlmIChtYXRjaGVzICE9IG51bGwpXHJcbiAgICAgICAgICAgIG1hdGNoZXMuZm9yRWFjaCgoYXJndW1lbnRJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbkFyZ3VtZW50cy5wdXNoKEdldFZhbHVlKGl0ZW0sIGFyZ3VtZW50SXRlbSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIChpdGVtW2Z1bmN0aW9uTmFtZV0pID09ICdmdW5jdGlvbicgPyBpdGVtW2Z1bmN0aW9uTmFtZV0uYXBwbHkoaXRlbSwgZnVuY3Rpb25Bcmd1bWVudHMpIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBJZihodG1sLCBkb20sIGNvbnRleHQpIHtcclxuICAgICAgICBsZXQgaHRtbERvY3VtZW50ID0gaHRtbDtcclxuICAgICAgICBsZXQgaWZzID0gZG9tLnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1pZl0nLCBkb20pO1xyXG4gICAgICAgIGlmcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBub2Rlc0FuZENvbmRpdGlvbiA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgbmV4dE5vZGUgPSBpdGVtO1xyXG4gICAgICAgICAgICBsZXQgaXRlbVBhcmVudCA9IGl0ZW0ucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgbGV0IGFjdGl2ZU5vZGVBbmRDb25kaXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgaWRlbnRpZmllcnNVc2VkID0gW107XHJcbiAgICAgICAgICAgIGxldCBBdHRyaWJ1dGVzID0ge1xyXG4gICAgICAgICAgICAgICAgSWY6IFwiYWctaWZcIixcclxuICAgICAgICAgICAgICAgIEVsc2VJZjogXCJhZy1lbHNlLWlmXCIsXHJcbiAgICAgICAgICAgICAgICBFbHNlOiBcImFnLWVsc2VcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlIChuZXh0Tm9kZSAhPSBudWxsICYmICgoaXRlbSA9PSBuZXh0Tm9kZSAmJiBuZXh0Tm9kZS5oYXNBdHRyaWJ1dGUoQXR0cmlidXRlcy5JZikpIHx8IG5leHROb2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLkVsc2VJZikgfHwgbmV4dE5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuRWxzZSkpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IG5leHROb2RlO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdhZy1mYWtlLW1hc2snKTtcclxuICAgICAgICAgICAgICAgIG5leHROb2RlID0gKG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgIGxldCBhdHRyaWJ1dGVUb1JlYWQgPSBub2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLklmKSA/IEF0dHJpYnV0ZXMuSWYgOiBub2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLkVsc2VJZikgPyBBdHRyaWJ1dGVzLkVsc2VJZiA6IEF0dHJpYnV0ZXMuRWxzZTtcclxuICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlVG9SZWFkKTtcclxuICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZVRvUmVhZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbiAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIEV4dHJhY3RWYXJpYWJsZXNGcm9tU3RyaW5nKGV4cHJlc3Npb24pLmlkZW50aWZpZXJzLmZvckVhY2goaWRlbnRpZmllciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyc1VzZWQuaW5kZXhPZihpZGVudGlmaWVyKSA8IDApIGlkZW50aWZpZXJzVXNlZC5wdXNoKGlkZW50aWZpZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbm9kZXNBbmRDb25kaXRpb24ucHVzaCh7IG5vZGU6IChub2RlLmNsb25lTm9kZSh0cnVlKSksIGV4cHJlc3Npb246IGV4cHJlc3Npb24sIHBvc2l0aW9uOiBub2RlLm5leHRTaWJsaW5nLCBpc0RlZmF1bHQ6IGF0dHJpYnV0ZVRvUmVhZCA9PSBBdHRyaWJ1dGVzLkVsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCB2YWx1YXRpb25GdW5jdGlvbkFyZ3VtZW50cyA9IENvbnZlck9iamVjdFRvQXJndW1lbnRBcnJheShjb250ZXh0KTtcclxuICAgICAgICAgICAgbGV0IHJlbmRlciA9IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1YXRpb25GdW5jdGlvbkFyZ3VtZW50cyA9IENvbnZlck9iamVjdFRvQXJndW1lbnRBcnJheShkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVOb2RlQW5kQ29uZGl0aW9uICE9IG51bGwpIChhY3RpdmVOb2RlQW5kQ29uZGl0aW9uLmFjdGl2ZSkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBub2RlQW5kQ29uZGl0aW9uIG9mIG5vZGVzQW5kQ29uZGl0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZUFuZENvbmRpdGlvbi5pc0RlZmF1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVhdGlvbkZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKC4uLnZhbHVhdGlvbkZ1bmN0aW9uQXJndW1lbnRzLmFyZ3VtZW50cywgYHJldHVybiAke25vZGVBbmRDb25kaXRpb24uZXhwcmVzc2lvbn07YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVhdGlvbkZ1bmN0aW9uKC4uLnZhbHVhdGlvbkZ1bmN0aW9uQXJndW1lbnRzLnZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9kZUFuZENvbmRpdGlvbi5pc0RlZmF1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVOb2RlQW5kQ29uZGl0aW9uID0gbm9kZUFuZENvbmRpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnNlcnRQb3N0aW9uID0gZmluZERvbVBvc2l0aW9uKG5vZGVBbmRDb25kaXRpb24ucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1QYXJlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25kaXRpb25hbE5vZGUgPSBub2RlQW5kQ29uZGl0aW9uLm5vZGUuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVBbmRDb25kaXRpb24uYWN0aXZlID0gY29uZGl0aW9uYWxOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1QYXJlbnQuaW5zZXJ0QmVmb3JlKGNvbmRpdGlvbmFsTm9kZSwgaW5zZXJ0UG9zdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtSW50ZXJuYWwoaHRtbCwgY29uZGl0aW9uYWxOb2RlLCBjb250ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyBjb25zb2xlLmxvZyhlKTsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmREb21Qb3NpdGlvbihkb20pIHtcclxuICAgICAgICAgICAgICAgIGlmIChkb20gIT0gbnVsbCAmJiAhZG9jdW1lbnQuY29udGFpbnMoZG9tKSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluZERvbVBvc2l0aW9uKGRvbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkb207XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGlkZW50aWZpZXIgb2YgaWRlbnRpZmllcnNVc2VkKSB7XHJcbiAgICAgICAgICAgICAgICBXYXRjaChpdGVtLCBjb250ZXh0LCBpZGVudGlmaWVyLCAoZGF0YSwgaXNDaGFuZ2UsIGlzVXNlckNoYW5nZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NoYW5nZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVuZGVyKGNvbnRleHQpO1xyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gUHJlSWYoZG9tKSB7XHJcbiAgICAgICAgbGV0IGlmcyA9IGRvbS5xdWVyeVNlbGVjdG9yQWxsKCdbYWctaWZdJywgZG9tKTtcclxuICAgICAgICBsZXQgaXNGYWtlID0gZG9tLmhhc0F0dHJpYnV0ZSgnYWctZmFrZScpO1xyXG4gICAgICAgIGlmcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBuZXh0Tm9kZSA9IGl0ZW07XHJcbiAgICAgICAgICAgIGxldCBpZGVudGlmaWVyc1VzZWQgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGZha2VGb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgQXR0cmlidXRlcyA9IHtcclxuICAgICAgICAgICAgICAgIElmOiBcImFnLWlmXCIsXHJcbiAgICAgICAgICAgICAgICBFbHNlSWY6IFwiYWctZWxzZS1pZlwiLFxyXG4gICAgICAgICAgICAgICAgRWxzZTogXCJhZy1lbHNlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aGlsZSAobmV4dE5vZGUgIT0gbnVsbCAmJiAoKGl0ZW0gPT0gbmV4dE5vZGUgJiYgbmV4dE5vZGUuaGFzQXR0cmlidXRlKEF0dHJpYnV0ZXMuSWYpKSB8fCBuZXh0Tm9kZS5oYXNBdHRyaWJ1dGUoQXR0cmlidXRlcy5FbHNlSWYpIHx8IG5leHROb2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLkVsc2UpKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5vZGUgPSBuZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgIGlmICghZmFrZUZvdW5kICYmIG5vZGUuaGFzQXR0cmlidXRlKCdhZy1mYWtlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmYWtlRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmYWtlRm91bmQgfHwgKCFmYWtlRm91bmQgJiYgIW5leHROb2RlLmhhc0F0dHJpYnV0ZShBdHRyaWJ1dGVzLkVsc2UpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZCgnYWctZmFrZS1tYXNrJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZha2VGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGYWtlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoQXR0cmlidXRlcy5JZik7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoQXR0cmlidXRlcy5FbHNlSWYpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKEF0dHJpYnV0ZXMuRWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IChub2RlLm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFmYWtlRm91bmQpXHJcbiAgICAgICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWZha2UtbWFzaycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy9Gb3JcclxuXHJcbiAgICBmdW5jdGlvbiBGb3IoaHRtbCwgZG9tLCBjb250ZXh0KSB7XHJcbiAgICAgICAgbGV0IGh0bWxEb2N1bWVudCA9IGh0bWw7XHJcbiAgICAgICAgbGV0IGxvb3BzID0gZG9tLnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1mb3JdJywgZG9tKTtcclxuICAgICAgICBsb29wcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmYWtlSXRlbSA9IGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgICAgICBsZXQgZmFrZUl0ZW1Db3VudCA9IDA7XHJcbiAgICAgICAgICAgIGxldCBpc2Zha2VJdGVtQ291bnRSZWFkZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKCdcXFxccyooW0EtejAtOV0rKVxcXFxzKyhpbilcXFxccysoW0EtejAtOVxcXFwuXSspXFxcXHMqJywgJ2dpJyk7XHJcbiAgICAgICAgICAgIGxldCBsb29wQ29uc3RyYWludCA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1mb3InKTtcclxuICAgICAgICAgICAgaWYgKGxvb3BDb25zdHJhaW50ID09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgICAgbGV0IGl0cmF0b3JGaW5pc2hlZCA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1mb3ItY29tcGxldGUnKTtcclxuICAgICAgICAgICAgbGV0IGZpZWxkc0FuZFZhbHVlID0gZXhwcmVzc2lvbi5leGVjKGxvb3BDb25zdHJhaW50KTtcclxuICAgICAgICAgICAgbGV0IGl0cmF0b3IgPSBmaWVsZHNBbmRWYWx1ZSAhPSBudWxsID8gZmllbGRzQW5kVmFsdWVbMV0gOiBcIlwiO1xyXG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGZpZWxkc0FuZFZhbHVlICE9IG51bGwgPyBmaWVsZHNBbmRWYWx1ZVszXSA6IFwiXCI7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCBodG1sVG9DbG9uZSA9IGl0ZW0uY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICBsZXQgaHRtbFRvQ2xvbmVQYXJlbnQgPSBpdGVtLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGxldCBodG1sVG9DbG9uZUxvY2F0aW9uID0gaXRlbS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgKGh0bWxUb0Nsb25lKS5yZW1vdmVBdHRyaWJ1dGUoJ2FnLWZvcicpO1xyXG4gICAgICAgICAgICBpdGVtLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICBsZXQgaXRlbUVsZW1lbnRzID0gW107XHJcbiAgICAgICAgICAgIGxldCBpc0RpcnR5RmFrZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbkNvbnRleHQgPSBnZXRDb2xsZWN0aW9uT2JqZWN0KGNvbnRleHQsIGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbkNvbnRleHRGaWVsZCA9IGdldENvbGxlY3Rpb25OYW1lKGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgU2V0UHJvcGVydHlEZXNjcmlwdG9yVG9Qcm94eU9iamVjdChjb2xsZWN0aW9uQ29udGV4dCwgYCR7Y29sbGVjdGlvbkNvbnRleHRGaWVsZH0kZm9yYCwgeyB2YWx1ZTogMCwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICBsZXQgcmVuZGVyID0gKGRhdGEpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtRWxlbWVudCBvZiBpdGVtRWxlbWVudHMpXHJcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW1FbGVtZW50KS5yZW1vdmUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbXNDb2xsZWN0aW9uID0gR2V0VmFsdWUoZGF0YSwgY29sbGVjdGlvbilcclxuICAgICAgICAgICAgICAgIGxldCBpdGVtSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgbGV0IGlzRmlyc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zQ29sbGVjdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICBpc0RpcnR5RmFrZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbFRvQ2xvbmVMb2NhdGlvbiA9IHJlbW92ZVByZUZvcihmYWtlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbUZyb21Db2xsZWN0aW9uIG9mIGl0ZW1zQ29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGV4dE9iamVjdCA9IEdldFByb3h5T2JqZWN0KGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBTZXRQcm9wZXJ0eURlc2NyaXB0b3JUb1Byb3h5T2JqZWN0KGNvbnRleHRPYmplY3QsIGl0cmF0b3IsIHsgZ2V0KCkgeyByZXR1cm4gaXRlbUZyb21Db2xsZWN0aW9uOyB9LCBzZXQodmFsdWUpIHsgaXRlbUZyb21Db2xsZWN0aW9uID0gdmFsdWU7IH0sIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNldFByb3BlcnR5RGVzY3JpcHRvclRvUHJveHlPYmplY3QoY29udGV4dE9iamVjdCwgYHJvdyRJbmRleGAsIHsgdmFsdWU6IGl0ZW1JbmRleCArIDEsIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBTZXRQcm9wZXJ0eURlc2NyaXB0b3JUb1Byb3h5T2JqZWN0KGNvbnRleHRPYmplY3QsIGAke2l0cmF0b3J9JEluZGV4YCwgeyB2YWx1ZTogaXRlbUluZGV4ICsgMSwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0l0cmF0b3I6JywgY29udGV4dE9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbG9uZWRFbGVtZW50ID0gaHRtbFRvQ2xvbmUuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRmlyc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxUb0Nsb25lUGFyZW50Py5pbnNlcnRCZWZvcmUoY2xvbmVkRWxlbWVudCwgaHRtbFRvQ2xvbmVMb2NhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRBZnRlcihjbG9uZWRFbGVtZW50LCBpdGVtRWxlbWVudHNbaXRlbUVsZW1lbnRzLmxlbmd0aCAtIDFdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtSW50ZXJuYWwoaHRtbERvY3VtZW50LCBjbG9uZWRFbGVtZW50LCBjb250ZXh0T2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUVsZW1lbnRzLnB1c2goY2xvbmVkRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBTZXRQcm9wZXJ0eURlc2NyaXB0b3JUb1Byb3h5T2JqZWN0KGNvbGxlY3Rpb25Db250ZXh0LCBgJHtjb2xsZWN0aW9uQ29udGV4dEZpZWxkfSRmb3JgLCB7IHZhbHVlOiBEYXRlLm5vdygpLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy1mb3ItY29tcGxldGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxUb0Nsb25lUGFyZW50Py5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIChpdGVtc0NvbGxlY3Rpb24pID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZha2VJdGVtICE9IG51bGwgJiYgZmFrZUl0ZW0uaGFzQXR0cmlidXRlKCdhZy1mb3ItZmFrZScpICYmIGlzRGlydHlGYWtlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZha2VJdGVtID0gUHJlRm9yUGFydGlhbChmYWtlSXRlbSwgaHRtbFRvQ2xvbmVQYXJlbnQsIGh0bWxUb0Nsb25lTG9jYXRpb24sIGZha2VJdGVtQ291bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGl0cmF0b3JGaW5pc2hlZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZ1bmN0aW9uTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gaXRyYXRvckZpbmlzaGVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ2V0UGFyYW1ldGVyTmFtZSA9IChuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICd0aGlzJykgcmV0dXJuICdzZW5kZXInO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5pbmRleE9mKCcuJykgPiAtMSkgcmV0dXJuIG5hbWUucmVwbGFjZShcIi5cIiwgJ18nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ2V0VmFsdWUgPSAoaXRlbSwgcHJvcGVydHlOYW1lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpIDwgMCAmJiBwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN1YlByb3BlcnR5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyhwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpICsgMSwgcHJvcGVydHlOYW1lLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VmFsdWUoaXRlbVtjdXJyZW50UHJvcGVydHldLCBzdWJQcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNGdW5jdGlvbiA9IHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPiAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZUZyb21GdW5jdGlvbihpdGVtLCBwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW3Byb3BlcnR5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnZXRGdW5jdGlvbkZyb21Db2xsZWN0aW9uID0gKGNvbnRleHQsIG5hbWUsIGFyZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0Ll9fcHJvdG9fX1tuYW1lXSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX19wcm90b19fW25hbWVdKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY29udGV4dCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGNvbnRleHRbaXRlbV0pID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRGdW5jdGlvbkZyb21Db2xsZWN0aW9uKGNvbnRleHRbaXRlbV0sIG5hbWUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIChjb250ZXh0W2l0ZW1dKSA9PSAnZnVuY3Rpb24nICYmIGl0ZW0gPT0gbmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRbaXRlbV0oLi4uYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdldFZhbHVlRnJvbUZ1bmN0aW9uID0gKGl0ZW0sIHByb3BlcnR5TmFtZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmN0aW9uQXJndW1lbnRzU3RhcnQgPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY3Rpb25Bcmd1bWVudHNFbmQgPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZignKScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25Bcmd1bWVudHNTdGFydCA+IC0xID8gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCBmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0KSA6IHByb3BlcnR5TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyZ3VtZW50c1N0cmluZyA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoZnVuY3Rpb25Bcmd1bWVudHNTdGFydCArIDEsIGZ1bmN0aW9uQXJndW1lbnRzRW5kKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBhcmd1bWVudHNTdHJpbmcubWF0Y2gobmV3IFJlZ0V4cCgnW14sXSsnLCAnZ2knKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmZvckVhY2goKGFyZ3VtZW50SXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQXJndW1lbnRzLnB1c2goZ2V0VmFsdWUoaXRlbSwgYXJndW1lbnRJdGVtKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZnVuY3Rpb25OYW1lXS5hcHBseShpdGVtLCBmdW5jdGlvbkFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgdmFsdWUuaW5kZXhPZignKCcpID4gLTEgPyB2YWx1ZS5pbmRleE9mKCcoJykgOiB2YWx1ZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gbmV3IFJlZ0V4cCgnKFxcXFwoKD88cGFyYW1zPi4qPylcXFxcKSknKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXNTdHJpbmcgPSB2YWx1ZS5tYXRjaChleHByZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtc1N0cmluZyAhPSB1bmRlZmluZWQgJiYgcGFyYW1zU3RyaW5nICE9IG51bGwgJiYgcGFyYW1zU3RyaW5nLmdyb3VwcyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSBwYXJhbXNTdHJpbmcuZ3JvdXBzLnBhcmFtcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtc0l0ZW0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHBhcmFtIGluIHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXNbcGFyYW1dID09ICd0aGlzJykgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzUGFyYW1WYWx1ZSA9IChuZXcgUmVnRXhwKCdeKFxcXFxcXCd8WzAtOV0pJykudGVzdChwYXJhbXNbcGFyYW1dKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtTmFtZSA9ICFpc1BhcmFtVmFsdWUgPyBnZXRQYXJhbWV0ZXJOYW1lKHBhcmFtc1twYXJhbV0pIDogJ2l0ZW1fJyArIHBhcmFtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc0l0ZW1bcGFyYW1OYW1lXSA9IGlzUGFyYW1WYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXRjaChpdGVtLCBjb2xsZWN0aW9uQ29udGV4dCwgYCR7Y29sbGVjdGlvbkNvbnRleHRGaWVsZH0kZm9yYCwgKGRhdGEsIGlzQ2hhbmdlLCBpc1VzZXJDaGFuZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJncyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtc1trZXldID09ICd0aGlzJyB8fCBwYXJhbXNba2V5XSA9PSAnc2VuZGVyJykgYXJncy5wdXNoKGh0bWxUb0Nsb25lUGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1zW2tleV0gPT0gJ2RhdGEnKSBhcmdzLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtVmFsdWUgPSAhcGFyYW1zSXRlbVtnZXRQYXJhbWV0ZXJOYW1lKHBhcmFtc1trZXldKV0gPyBnZXRWYWx1ZShkYXRhLCBwYXJhbXNba2V5XSkgOiBldmFsKHBhcmFtc1trZXldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChwYXJhbVZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtmdW5jdGlvbk5hbWVdICE9IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbZnVuY3Rpb25OYW1lXS5hcHBseShkYXRhLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudEZ1bmN0aW9uID0gZ2V0RnVuY3Rpb25Gcm9tQ29sbGVjdGlvbihkYXRhLCBmdW5jdGlvbk5hbWUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGdW5jdGlvbiAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZ1bmN0aW9uKGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlbmRlcihjb250ZXh0KTtcclxuICAgICAgICAgICAgV2F0Y2goaXRlbSwgY29udGV4dCwgY29sbGVjdGlvbiwgKGRhdGEsIGlzQ2hhbmdlLCBpc1VzZXJDaGFuZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0NoYW5nZSlcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXIoZGF0YSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q29sbGVjdGlvbk9iamVjdChpdGVtLCBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpIDwgMCAmJiBwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudFByb3BlcnR5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLCBwcm9wZXJ0eU5hbWUuaW5kZXhPZignLicpKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3ViUHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgKyAxLCBwcm9wZXJ0eU5hbWUubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29sbGVjdGlvbk9iamVjdChpdGVtW2N1cnJlbnRQcm9wZXJ0eV0sIHN1YlByb3BlcnR5KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzRnVuY3Rpb24gPSBwcm9wZXJ0eU5hbWUuaW5kZXhPZignKCcpID4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldENvbGxlY3Rpb25OYW1lKHByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZS5pbmRleE9mKCcoJykgPCAwICYmIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHByb3BlcnR5TmFtZS5pbmRleE9mKCcuJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzdWJQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcocHJvcGVydHlOYW1lLmluZGV4T2YoJy4nKSArIDEsIHByb3BlcnR5TmFtZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRDb2xsZWN0aW9uTmFtZShzdWJQcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlbW92ZVByZUZvcihmYWtlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZha2VJdGVtICE9IG51bGwgJiYgZmFrZUl0ZW0uaGFzQXR0cmlidXRlKCdhZy1mb3ItZmFrZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbFRvQ2xvbmUuY2xhc3NMaXN0LnJlbW92ZSgnYWctZmFrZS1tYXNrJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRJdGVtID0gZmFrZUl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5leHRJdGVtICE9IG51bGwgJiYgbmV4dEl0ZW0uaGFzQXR0cmlidXRlKCdhZy1mb3ItZmFrZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNmYWtlSXRlbUNvdW50UmVhZGVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFrZUl0ZW1Db3VudCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2xkTmV4dCA9IG5leHRJdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0SXRlbSA9IG5leHRJdGVtLm5leHRFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkTmV4dC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaXNmYWtlSXRlbUNvdW50UmVhZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dEl0ZW07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFrZUl0ZW07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGh0bWxEb2N1bWVudC5pbm5lckhUTUw7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gUHJlRm9yUGFydGlhbChpdGVtLCBwYXJlbnQsIGxvY2F0aW9uLCBjb3VudCkge1xyXG4gICAgICAgIGxldCBsYXN0SXRlbSA9IG51bGwsIGZpcnN0SXRlbSA9IG51bGw7XHJcbiAgICAgICAgbGV0IGlzRmlyc3QgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGZha2VJdGVtID0gaXRlbS5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmICghaXNGaXJzdCkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Py5pbnNlcnRCZWZvcmUoZmFrZUl0ZW0sIGxvY2F0aW9uKTtcclxuICAgICAgICAgICAgICAgIGlzRmlyc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RJdGVtID0gZmFrZUl0ZW07XHJcbiAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgaW5zZXJ0QWZ0ZXIoZmFrZUl0ZW0sIGxhc3RJdGVtKTtcclxuICAgICAgICAgICAgbGFzdEl0ZW0gPSBmYWtlSXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpcnN0SXRlbTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBQcmVGb3IoZG9tKSB7XHJcbiAgICAgICAgbGV0IGxvb3BzID0gZG9tLnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1mb3JdW2FnLWZvci1mYWtlXTpub3QoLmFnLWZha2UtbWFzayknLCBkb20pO1xyXG4gICAgICAgIGxvb3BzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0udGFnTmFtZSA9PSBcIk9QVElPTlwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGxldCBjbG9uZUl0ZW0gPSBpdGVtLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgY2xvbmVJdGVtLnNldEF0dHJpYnV0ZSgnYWctZmFrZScsICcnKTtcclxuICAgICAgICAgICAgbGV0IGNsb25lSXRlbUNvdW50ID0gMTtcclxuICAgICAgICAgICAgbGV0IGNsb25lSXRlbUNvdW50U3RyaW5nID0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWZvci1mYWtlJyk7XHJcbiAgICAgICAgICAgIGlmIChjbG9uZUl0ZW1Db3VudFN0cmluZyAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgY2xvbmVJdGVtQ291bnQgPSBwYXJzZUludChjbG9uZUl0ZW1Db3VudFN0cmluZyk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGNsb25lSXRlbS5zZXRBdHRyaWJ1dGUoJ2FnLWZvci1mYWtlJywgJycpO1xyXG4gICAgICAgICAgICBjbG9uZUl0ZW0ucmVtb3ZlQXR0cmlidXRlKCdhZy1mb3InKTtcclxuICAgICAgICAgICAgaXRlbS5yZW1vdmVBdHRyaWJ1dGUoJ2FnLWZvci1mYWtlJyk7XHJcbiAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnYWctZmFrZS1tYXNrJyk7XHJcbiAgICAgICAgICAgIFByZVRyYW5zZm9ybUludGVybmFsKGNsb25lSXRlbSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xvbmVJdGVtQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5wYXJlbnRFbGVtZW50Py5hcHBlbmRDaGlsZChjbG9uZUl0ZW0uY2xvbmVOb2RlKHRydWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIFRyYW5zZm9ybUludGVybmFsKGh0bWwsIGRvbSwgY29udGV4dCkge1xyXG5cclxuICAgICAgICBGb3IoZG9tLCBkb20sIGNvbnRleHQpO1xyXG4gICAgICAgIElmKGRvbSwgZG9tLCBjb250ZXh0KTtcclxuICAgICAgICBJbnRlcnBvbGF0aW9uKGRvbSwgZG9tLCBjb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBQcmVUcmFuc2Zvcm1JbnRlcm5hbChkb20pIHtcclxuXHJcbiAgICAgICAgUHJlRm9yKGRvbSk7XHJcbiAgICAgICAgUHJlSWYoZG9tKTtcclxuICAgICAgICBQcmVJbnRlcnBvbGF0aW9uKGRvbSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZmluZFJlbmRlcnMoKSB7XHJcbiAgICAgICAgdmFyIHJlbmRlcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYWctcmVuZGVyXTpub3QoLmFnLXJlbmRlciknKTtcclxuICAgICAgICByZW5kZXJzLmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XHJcblxyXG4gICAgICAgICAgICBhdHRhY2hBY3Rpb24oaXRlbSk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGF0dGFjaEFjdGlvbihpdGVtKSB7XHJcblxyXG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnYWctcmVuZGVyJyk7XHJcblxyXG4gICAgICAgIHZhciByZXN1bHRGdW5jdGlvbiA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1yZW5kZXInKTtcclxuXHJcbiAgICAgICAgUHJlVHJhbnNmb3JtSW50ZXJuYWwoaXRlbSk7XHJcblxyXG4gICAgICAgIHZhciBldmVudE5hbWUgPSAnYWcucmVuZGVyLmh5ZHJhdGUuJyArIHJlc3VsdEZ1bmN0aW9uO1xyXG5cclxuICAgICAgICB2YXIgaXRlbUh0bWwgPSBpdGVtLmlubmVySFRNTDtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgYXN5bmMgZnVuY3Rpb24gKCkgeyAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEdldFZhbHVlKHdpbmRvdywgcmVzdWx0RnVuY3Rpb24pO1xyXG5cclxuICAgICAgICAgICAgaXRlbS5pbm5lckhUTUwgPSBpdGVtSHRtbDtcclxuXHJcbiAgICAgICAgICAgIFRyYW5zZm9ybUludGVybmFsKGl0ZW0sIGl0ZW0sIHJlc3VsdCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZXF1ZXN0RGF0YShzZXJ2aWNlVXJsLCBkYXRhLCBwcm9jZXNzUmVxdWVzdERhdGEpIHtcclxuICAgICAgICBpZiAocHJvY2Vzc1JlcXVlc3REYXRhKVxyXG4gICAgICAgICAgICBkYXRhID0gcHJvY2Vzc1JlcXVlc3REYXRhKGRhdGEpO1xyXG5cclxuICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSAnJztcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nICsoKHF1ZXJ5U3RyaW5nICE9ICcnID8gJyYnIDogJycpICsga2V5ICsgJz0nICsgZGF0YVtrZXldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VydmljZVVybCArPSBzZXJ2aWNlVXJsLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nICsgcXVlcnlTdHJpbmc7XHJcbiAgICAgICAgdmFyIHJlcXVlc3QgPSBhd2FpdCBmZXRjaChzZXJ2aWNlVXJsLCB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgbW9kZTogXCJjb3JzXCIsXHJcbiAgICAgICAgICAgIGNhY2hlOiBcIm5vLWNhY2hlXCIsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXF1ZXN0Lmpzb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBpbml0UGFnZShyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKSB7XHJcbiAgICAgICAgaWYgKCFkYXRhKSBkYXRhID0ge307XHJcbiAgICAgICAgaWYgKCFkYXRhLlBhZ2VTaXplKSBkYXRhLlBhZ2VTaXplID0gMTI7XHJcbiAgICAgICAgaWYgKCFkYXRhLlBhZ2VOdW1iZXIpIGRhdGEuUGFnZU51bWJlciA9IDE7XHJcbiAgICAgICAgdmFyIHBhZ2VkRGF0YSA9IGF3YWl0IHJlcXVlc3REYXRhKHNlcnZpY2VVcmwsIGRhdGEsIHByb2Nlc3NSZXF1ZXN0RGF0YSk7XHJcbiAgICAgICAgd2luZG93W3JlbmRlck5hbWVdID0gcGFnZWREYXRhOyAgICAgICAgXHJcbiAgICAgICAgd2luZG93LmFnUmVuZGVyLmh5ZHJhdGUocmVuZGVyTmFtZSk7XHJcbiAgICAgICAgaWYgKHJlbmRlckNvbXBsZXRlKVxyXG4gICAgICAgICAgICByZW5kZXJDb21wbGV0ZShwYWdlZERhdGEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBuZXh0UGFnZShyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKSB7XHJcbiAgICAgICAgZGF0YS5QYWdlTnVtYmVyICs9IDE7XHJcbiAgICAgICAgdmFyIHBhZ2VkRGF0YSA9IGF3YWl0IHJlcXVlc3REYXRhKHNlcnZpY2VVcmwsIGRhdGEsIHByb2Nlc3NSZXF1ZXN0RGF0YSk7XHJcbiAgICAgICAgd2luZG93W3JlbmRlck5hbWVdID0gcGFnZWREYXRhOyAgICAgICAgXHJcbiAgICAgICAgd2luZG93LmFnUmVuZGVyLmh5ZHJhdGUocmVuZGVyTmFtZSk7XHJcbiAgICAgICAgaWYgKHJlbmRlckNvbXBsZXRlKVxyXG4gICAgICAgICAgICByZW5kZXJDb21wbGV0ZShwYWdlZERhdGEpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBwcmV2aW91c1BhZ2UocmVuZGVyTmFtZSwgc2VydmljZVVybCwgZGF0YSwgcmVuZGVyQ29tcGxldGUsIHByb2Nlc3NSZXF1ZXN0RGF0YSkge1xyXG4gICAgICAgIGlmIChkYXRhLlBhZ2VOdW1iZXIgPiAxKSB7XHJcbiAgICAgICAgICAgIGRhdGEuUGFnZU51bWJlciAtPSAxO1xyXG4gICAgICAgICAgICB2YXIgcGFnZWREYXRhID0gYXdhaXQgcmVxdWVzdERhdGEoc2VydmljZVVybCwgZGF0YSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICAgICAgd2luZG93W3JlbmRlck5hbWVdID0gcGFnZWREYXRhO1xyXG4gICAgICAgICAgICB3aW5kb3cuYWdSZW5kZXIuaHlkcmF0ZShyZW5kZXJOYW1lKTtcclxuICAgICAgICAgICAgaWYgKHJlbmRlckNvbXBsZXRlKVxyXG4gICAgICAgICAgICAgICAgcmVuZGVyQ29tcGxldGUocGFnZWREYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIG1vcmVQYWdlKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpIHtcclxuICAgICAgICBkYXRhLlBhZ2VOdW1iZXIgKz0gMTtcclxuICAgICAgICB2YXIgcGFnZWREYXRhID0gYXdhaXQgcmVxdWVzdERhdGEoc2VydmljZVVybCwgZGF0YSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICB3aW5kb3dbcmVuZGVyTmFtZV0uSXRlbXMucHVzaCguLi5wYWdlZERhdGEuSXRlbXMpO1xyXG4gICAgICAgIHdpbmRvdy5hZ1JlbmRlci5oeWRyYXRlKHJlbmRlck5hbWUpO1xyXG4gICAgICAgIGlmIChyZW5kZXJDb21wbGV0ZSlcclxuICAgICAgICAgICAgcmVuZGVyQ29tcGxldGUocGFnZWREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBpbml0KCkge1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnJlbmRlci5yZWZyZXNoJywgZmluZFJlbmRlcnMpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnJlZnJlc2gnLCBmaW5kUmVuZGVycyk7XHJcblxyXG4gICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcucmVuZGVyLnJlZnJlc2gnKTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgd2luZG93LmFnUmVuZGVyID0ge1xyXG5cclxuICAgICAgICAgICAgaHlkcmF0ZTogZnVuY3Rpb24gKHJlbmRlck5hbWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnROYW1lID0gJ2FnLnJlbmRlci5oeWRyYXRlLicgKyByZW5kZXJOYW1lO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudChldmVudE5hbWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7ICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0ludm9rZTonICsgZXZlbnROYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhenkucmVmcmVzaCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgd2luZG93LmFnTGFuZ3VhZ2UucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHJlbmRlck5hbWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLnJlbmRlci4nICsgcmVuZGVyTmFtZSArICcucGFnZS5uZXh0Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBwcmV2aW91czogZnVuY3Rpb24gKHJlbmRlck5hbWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLnJlbmRlci4nICsgcmVuZGVyTmFtZSArICcucGFnZS5wcmV2aW91cycpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgbW9yZTogZnVuY3Rpb24gKHJlbmRlck5hbWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLnJlbmRlci4nICsgcmVuZGVyTmFtZSArICcucGFnZS5tb3JlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBwYWdlZFJlc3VsdDogZnVuY3Rpb24gKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcucmVuZGVyLicgKyByZW5kZXJOYW1lICsgJy5wYWdlLm5leHQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFBhZ2UocmVuZGVyTmFtZSwgc2VydmljZVVybCwgZGF0YSwgcmVuZGVyQ29tcGxldGUsIHByb2Nlc3NSZXF1ZXN0RGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcucmVuZGVyLicgKyByZW5kZXJOYW1lICsgJy5wYWdlLnByZXZpb3VzJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUGFnZShyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5yZW5kZXIuJyArIHJlbmRlck5hbWUgKyAnLnBhZ2UubW9yZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBtb3JlUGFnZShyZW5kZXJOYW1lLCBzZXJ2aWNlVXJsLCBkYXRhLCByZW5kZXJDb21wbGV0ZSwgcHJvY2Vzc1JlcXVlc3REYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGluaXRQYWdlKHJlbmRlck5hbWUsIHNlcnZpY2VVcmwsIGRhdGEsIHJlbmRlckNvbXBsZXRlLCBwcm9jZXNzUmVxdWVzdERhdGEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpO1xyXG5cclxufSkoKTtcclxuXHJcblxyXG5cclxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJhIiwiaSIsInNlbGYiLCJhZ29yYSIsIiQiLCJkb2N1bWVudCIsInJlYWR5IiwibG9jYXRpb24iLCJoYXNoIiwidG9Mb3dlckNhc2UiLCJPcGVuUG9wdXAiLCJiIiwid2luZG93IiwidGhpcyIsImMiLCJsZW5ndGgiLCJfIiwidHlwZSIsImlzV2luZG93Iiwibm9kZVR5cGUiLCJkIiwiaXNGdW5jdGlvbiIsImdyZXAiLCJjYWxsIiwiaGIiLCJ0ZXN0IiwiZmlsdGVyIiwiVSIsImUiLCJnIiwiWiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJjYWNoZSIsImdldCIsImV4cGFuZG8iLCJNYXRoIiwicmFuZG9tIiwicmVwbGFjZSIsInViIiwiZ2V0QXR0cmlidXRlIiwidGIiLCJwYXJzZUpTT04iLCJzYiIsInNldCIsImoiLCJrIiwibCIsImFjdGl2ZUVsZW1lbnQiLCJtIiwibm9kZU5hbWUiLCJmaXJzdENoaWxkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJhcHBlbmRDaGlsZCIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwibiIsIm8iLCJLYiIsImV4ZWMiLCJyZW1vdmVBdHRyaWJ1dGUiLCJwIiwicmIiLCJxIiwiZiIsImhhc0RhdGEiLCJhY2Nlc3MiLCJldmVudHMiLCJoYW5kbGUiLCJldmVudCIsImFkZCIsImV4dGVuZCIsInIiLCJxdWVyeVNlbGVjdG9yQWxsIiwibWVyZ2UiLCJzIiwieWIiLCJjaGVja2VkIiwiZGVmYXVsdFZhbHVlIiwidCIsImFwcGVuZFRvIiwiYm9keSIsImdldERlZmF1bHRDb21wdXRlZFN0eWxlIiwiZGlzcGxheSIsImNzcyIsImRldGFjaCIsInUiLCJPYiIsIk5iIiwiZG9jdW1lbnRFbGVtZW50IiwiY29udGVudERvY3VtZW50Iiwid3JpdGUiLCJjbG9zZSIsInYiLCJzdHlsZSIsIlJiIiwiZ2V0UHJvcGVydHlWYWx1ZSIsImNvbnRhaW5zIiwiUWIiLCJQYiIsIndpZHRoIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsInciLCJhcHBseSIsImFyZ3VtZW50cyIsIngiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiWGIiLCJ5IiwiVGIiLCJtYXgiLCJ6Iiwid2IiLCJBIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJZIiwiYm94U2l6aW5nUmVsaWFibGUiLCJwYXJzZUZsb2F0IiwiQiIsInhiIiwiQyIsInByb3RvdHlwZSIsImluaXQiLCJEIiwic2V0VGltZW91dCIsIlliIiwibm93IiwiRSIsImhlaWdodCIsIm9wYWNpdHkiLCJGIiwiY2MiLCJjb25jYXQiLCJJIiwiYmMiLCJEZWZlcnJlZCIsImFsd2F5cyIsImVsZW0iLCJzdGFydFRpbWUiLCJkdXJhdGlvbiIsInR3ZWVucyIsInJ1biIsIm5vdGlmeVdpdGgiLCJyZXNvbHZlV2l0aCIsInByb21pc2UiLCJwcm9wcyIsIm9wdHMiLCJzcGVjaWFsRWFzaW5nIiwib3JpZ2luYWxQcm9wZXJ0aWVzIiwib3JpZ2luYWxPcHRpb25zIiwiY3JlYXRlVHdlZW4iLCJUd2VlbiIsImVhc2luZyIsInB1c2giLCJzdG9wIiwicmVqZWN0V2l0aCIsImNhbWVsQ2FzZSIsImlzQXJyYXkiLCJjc3NIb29rcyIsImV4cGFuZCIsIkgiLCJtYXAiLCJzdGFydCIsImZ4IiwidGltZXIiLCJhbmltIiwicXVldWUiLCJwcm9ncmVzcyIsImRvbmUiLCJjb21wbGV0ZSIsImZhaWwiLCJKIiwibWF0Y2giLCJuYiIsInVuc2hpZnQiLCJLIiwiZWFjaCIsImRhdGFUeXBlcyIsInZjIiwiTCIsImFqYXhTZXR0aW5ncyIsImZsYXRPcHRpb25zIiwiTyIsInpjIiwiUCIsImRlZmF1bHRWaWV3IiwiUSIsIlIiLCJTIiwiVCIsImluZGV4T2YiLCJWIiwiVyIsInRvU3RyaW5nIiwiWCIsImhhc093blByb3BlcnR5IiwiZm4iLCJhYiIsImJiIiwiY2IiLCJkYiIsImpxdWVyeSIsImNvbnN0cnVjdG9yIiwic2VsZWN0b3IiLCJ0b0FycmF5IiwicHVzaFN0YWNrIiwicHJldk9iamVjdCIsImNvbnRleHQiLCJmaXJzdCIsImVxIiwibGFzdCIsImVuZCIsInNvcnQiLCJzcGxpY2UiLCJpc1BsYWluT2JqZWN0IiwiaXNSZWFkeSIsImVycm9yIiwiRXJyb3IiLCJub29wIiwiQXJyYXkiLCJpc051bWVyaWMiLCJpc0VtcHR5T2JqZWN0IiwiZ2xvYmFsRXZhbCIsImV2YWwiLCJ0cmltIiwidGV4dCIsImhlYWQiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJtYWtlQXJyYXkiLCJpbkFycmF5IiwiZ3VpZCIsInByb3h5IiwiRGF0ZSIsInN1cHBvcnQiLCJzcGxpdCIsImViIiwiRyIsImdldEVsZW1lbnRCeUlkIiwiaWQiLCJNIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInFzYSIsIk4iLCJzZXRBdHRyaWJ1dGUiLCJqb2luIiwiaWIiLCJjYWNoZUxlbmd0aCIsInNoaWZ0IiwiYXR0ckhhbmRsZSIsInNvdXJjZUluZGV4IiwibmV4dFNpYmxpbmciLCJ2YWx1ZSIsImRpciIsInJlbGF0aXZlIiwibWF0Y2hlcyIsImZpbmQiLCJUQUciLCJ1bmlxdWVTb3J0IiwicG9wIiwiZmIiLCJnYiIsIlJlZ0V4cCIsImpiIiwia2IiLCJsYiIsIm1iIiwib2IiLCJJRCIsIkNMQVNTIiwiQVRUUiIsIlBTRVVETyIsIkNISUxEIiwiYm9vbCIsIm5lZWRzQ29udGV4dCIsInBiIiwicWIiLCJ2YiIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImNoaWxkTm9kZXMiLCJpc1hNTCIsInNldERvY3VtZW50IiwidG9wIiwiYWRkRXZlbnRMaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiYXR0cmlidXRlcyIsImNsYXNzTmFtZSIsImNyZWF0ZUNvbW1lbnQiLCJpbm5lckhUTUwiLCJnZXRCeUlkIiwiZ2V0RWxlbWVudHNCeU5hbWUiLCJnZXRBdHRyaWJ1dGVOb2RlIiwibWF0Y2hlc1NlbGVjdG9yIiwid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwibW96TWF0Y2hlc1NlbGVjdG9yIiwib01hdGNoZXNTZWxlY3RvciIsIm1zTWF0Y2hlc1NlbGVjdG9yIiwiZGlzY29ubmVjdGVkTWF0Y2giLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsInNvcnREZXRhY2hlZCIsImF0dHIiLCJzcGVjaWZpZWQiLCJkZXRlY3REdXBsaWNhdGVzIiwic29ydFN0YWJsZSIsImdldFRleHQiLCJ0ZXh0Q29udGVudCIsIm5vZGVWYWx1ZSIsInNlbGVjdG9ycyIsImNyZWF0ZVBzZXVkbyIsInByZUZpbHRlciIsImxhc3RDaGlsZCIsInBzZXVkb3MiLCJzZXRGaWx0ZXJzIiwibm90IiwiaGFzIiwiaW5uZXJUZXh0IiwibGFuZyIsInRhcmdldCIsImZvY3VzIiwiaGFzRm9jdXMiLCJocmVmIiwidGFiSW5kZXgiLCJlbmFibGVkIiwiZGlzYWJsZWQiLCJzZWxlY3RlZCIsInNlbGVjdGVkSW5kZXgiLCJlbXB0eSIsInBhcmVudCIsImhlYWRlciIsImlucHV0IiwiYnV0dG9uIiwiZXZlbiIsIm9kZCIsImx0IiwiZ3QiLCJudGgiLCJyYWRpbyIsImNoZWNrYm94IiwiZmlsZSIsInBhc3N3b3JkIiwiaW1hZ2UiLCJzdWJtaXQiLCJyZXNldCIsImZpbHRlcnMiLCJ0b2tlbml6ZSIsImNvbXBpbGUiLCJzZWxlY3QiLCJleHByIiwidW5pcXVlIiwiaXNYTUxEb2MiLCJpcyIsInBhcnNlSFRNTCIsImNoaWxkcmVuIiwiY29udGVudHMiLCJuZXh0IiwicHJldiIsInNpYmxpbmciLCJjbG9zZXN0IiwiaW5kZXgiLCJwcmV2QWxsIiwiYWRkQmFjayIsInBhcmVudHMiLCJwYXJlbnRzVW50aWwiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldlVudGlsIiwic2libGluZ3MiLCJyZXZlcnNlIiwiQ2FsbGJhY2tzIiwib25jZSIsIm1lbW9yeSIsInN0b3BPbkZhbHNlIiwiZGlzYWJsZSIsInJlbW92ZSIsImxvY2siLCJsb2NrZWQiLCJmaXJlV2l0aCIsImZpcmUiLCJmaXJlZCIsInN0YXRlIiwidGhlbiIsInJlc29sdmUiLCJyZWplY3QiLCJub3RpZnkiLCJwaXBlIiwid2hlbiIsInJlYWR5V2FpdCIsImhvbGRSZWFkeSIsInRyaWdnZXJIYW5kbGVyIiwib2ZmIiwicmVhZHlTdGF0ZSIsImFjY2VwdERhdGEiLCJ1aWQiLCJhY2NlcHRzIiwia2V5IiwiZGVmaW5lUHJvcGVydGllcyIsImRpc2NhcmQiLCJkYXRhIiwicmVtb3ZlRGF0YSIsIl9kYXRhIiwiX3JlbW92ZURhdGEiLCJuYW1lIiwiZGVxdWV1ZSIsIl9xdWV1ZUhvb2tzIiwiY2xlYXJRdWV1ZSIsInNvdXJjZSIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJjaGVja0Nsb25lIiwiY2xvbmVOb2RlIiwibm9DbG9uZUNoZWNrZWQiLCJ6YiIsImZvY3VzaW5CdWJibGVzIiwiQWIiLCJCYiIsIkNiIiwiRGIiLCJnbG9iYWwiLCJoYW5kbGVyIiwidHJpZ2dlcmVkIiwiZGlzcGF0Y2giLCJzcGVjaWFsIiwiZGVsZWdhdGVUeXBlIiwiYmluZFR5cGUiLCJvcmlnVHlwZSIsIm5hbWVzcGFjZSIsImRlbGVnYXRlQ291bnQiLCJzZXR1cCIsImNhcHR1cmUiLCJwYXNzaXZlIiwidGVhcmRvd24iLCJyZW1vdmVFdmVudCIsInRyaWdnZXIiLCJFdmVudCIsImlzVHJpZ2dlciIsIm5hbWVzcGFjZV9yZSIsInJlc3VsdCIsIm5vQnViYmxlIiwicGFyZW50V2luZG93IiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJwcmV2ZW50RGVmYXVsdCIsImlzRGVmYXVsdFByZXZlbnRlZCIsIl9kZWZhdWx0IiwiZml4IiwiZGVsZWdhdGVUYXJnZXQiLCJwcmVEaXNwYXRjaCIsImhhbmRsZXJzIiwiY3VycmVudFRhcmdldCIsImlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIiwiaGFuZGxlT2JqIiwic3RvcFByb3BhZ2F0aW9uIiwicG9zdERpc3BhdGNoIiwiZml4SG9va3MiLCJrZXlIb29rcyIsIndoaWNoIiwiY2hhckNvZGUiLCJrZXlDb2RlIiwibW91c2VIb29rcyIsInBhZ2VYIiwiY2xpZW50WCIsInNjcm9sbExlZnQiLCJjbGllbnRMZWZ0IiwicGFnZVkiLCJjbGllbnRZIiwic2Nyb2xsVG9wIiwiY2xpZW50VG9wIiwibG9hZCIsImJsdXIiLCJjbGljayIsImJlZm9yZXVubG9hZCIsIm9yaWdpbmFsRXZlbnQiLCJyZXR1cm5WYWx1ZSIsInNpbXVsYXRlIiwiaXNTaW11bGF0ZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGltZVN0YW1wIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJyZWxhdGVkVGFyZ2V0Iiwib24iLCJvbmUiLCJFYiIsIkZiIiwiR2IiLCJIYiIsIkliIiwiSmIiLCJMYiIsIk1iIiwib3B0aW9uIiwidGhlYWQiLCJjb2wiLCJ0ciIsInRkIiwib3B0Z3JvdXAiLCJ0Ym9keSIsInRmb290IiwiY29sZ3JvdXAiLCJjYXB0aW9uIiwidGgiLCJjbG9uZSIsImJ1aWxkRnJhZ21lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImNsZWFuRGF0YSIsImFwcGVuZCIsImRvbU1hbmlwIiwicHJlcGVuZCIsImluc2VydEJlZm9yZSIsImJlZm9yZSIsImFmdGVyIiwiaHRtbCIsInJlcGxhY2VXaXRoIiwicmVwbGFjZUNoaWxkIiwic3JjIiwiX2V2YWxVcmwiLCJwcmVwZW5kVG8iLCJpbnNlcnRBZnRlciIsInJlcGxhY2VBbGwiLCJnZXRDb21wdXRlZFN0eWxlIiwiY3NzVGV4dCIsImJhY2tncm91bmRDbGlwIiwiY2xlYXJDbG9uZVN0eWxlIiwicGl4ZWxQb3NpdGlvbiIsInJlbGlhYmxlTWFyZ2luUmlnaHQiLCJtYXJnaW5SaWdodCIsInN3YXAiLCJTYiIsIlViIiwiVmIiLCJwb3NpdGlvbiIsInZpc2liaWxpdHkiLCJXYiIsImxldHRlclNwYWNpbmciLCJmb250V2VpZ2h0IiwiY3NzTnVtYmVyIiwiY29sdW1uQ291bnQiLCJmaWxsT3BhY2l0eSIsImZsZXhHcm93IiwiZmxleFNocmluayIsImxpbmVIZWlnaHQiLCJvcmRlciIsIm9ycGhhbnMiLCJ3aWRvd3MiLCJ6SW5kZXgiLCJ6b29tIiwiY3NzUHJvcHMiLCJtYXJnaW4iLCJwYWRkaW5nIiwiYm9yZGVyIiwic2hvdyIsImhpZGUiLCJ0b2dnbGUiLCJwcm9wIiwib3B0aW9ucyIsImN1ciIsInVuaXQiLCJwcm9wSG9va3MiLCJwb3MiLCJzdGVwIiwibGluZWFyIiwic3dpbmciLCJjb3MiLCJQSSIsIlpiIiwiJGIiLCJfYiIsImFjIiwidW5xdWV1ZWQiLCJvdmVyZmxvdyIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImhpZGRlbiIsIkFuaW1hdGlvbiIsInR3ZWVuZXIiLCJwcmVmaWx0ZXIiLCJzcGVlZCIsInNwZWVkcyIsIm9sZCIsImZhZGVUbyIsImFuaW1hdGUiLCJmaW5pc2giLCJ0aW1lcnMiLCJzbGlkZURvd24iLCJzbGlkZVVwIiwic2xpZGVUb2dnbGUiLCJmYWRlSW4iLCJmYWRlT3V0IiwiZmFkZVRvZ2dsZSIsInRpY2siLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInNsb3ciLCJmYXN0IiwiZGVsYXkiLCJjbGVhclRpbWVvdXQiLCJjaGVja09uIiwib3B0U2VsZWN0ZWQiLCJvcHREaXNhYmxlZCIsInJhZGlvVmFsdWUiLCJlYyIsImZjIiwicmVtb3ZlQXR0ciIsImF0dHJIb29rcyIsImRjIiwicHJvcEZpeCIsImdjIiwicmVtb3ZlUHJvcCIsImhhc0F0dHJpYnV0ZSIsImhjIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInRvZ2dsZUNsYXNzIiwiaGFzQ2xhc3MiLCJpYyIsInZhbCIsInZhbEhvb2tzIiwiaG92ZXIiLCJiaW5kIiwidW5iaW5kIiwiZGVsZWdhdGUiLCJ1bmRlbGVnYXRlIiwiamMiLCJrYyIsIkpTT04iLCJwYXJzZSIsInBhcnNlWE1MIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwibGMiLCJtYyIsIm5jIiwib2MiLCJwYyIsInJjIiwic2MiLCJ0YyIsInVjIiwid2MiLCJ4YyIsImFjdGl2ZSIsImxhc3RNb2RpZmllZCIsImV0YWciLCJ1cmwiLCJpc0xvY2FsIiwicHJvY2Vzc0RhdGEiLCJhc3luYyIsImNvbnRlbnRUeXBlIiwieG1sIiwianNvbiIsInJlc3BvbnNlRmllbGRzIiwiY29udmVydGVycyIsImFqYXhTZXR1cCIsImFqYXhQcmVmaWx0ZXIiLCJhamF4VHJhbnNwb3J0IiwiYWpheCIsIm1pbWVUeXBlIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJkYXRhRmlsdGVyIiwiZGF0YVR5cGUiLCJpZk1vZGlmaWVkIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInN0YXR1c0NvZGUiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwib3ZlcnJpZGVNaW1lVHlwZSIsImFib3J0Iiwic3VjY2VzcyIsIm1ldGhvZCIsImNyb3NzRG9tYWluIiwicGFyYW0iLCJ0cmFkaXRpb25hbCIsImhhc0NvbnRlbnQiLCJoZWFkZXJzIiwiYmVmb3JlU2VuZCIsInRpbWVvdXQiLCJzZW5kIiwiZ2V0SlNPTiIsImdldFNjcmlwdCIsIndyYXBBbGwiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIndyYXBJbm5lciIsIndyYXAiLCJ1bndyYXAiLCJ2aXNpYmxlIiwieWMiLCJBYyIsIkJjIiwiQ2MiLCJlbmNvZGVVUklDb21wb25lbnQiLCJzZXJpYWxpemUiLCJzZXJpYWxpemVBcnJheSIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwiRGMiLCJFYyIsIkZjIiwiR2MiLCJBY3RpdmVYT2JqZWN0IiwiY29ycyIsIm9wZW4iLCJ1c2VybmFtZSIsInhockZpZWxkcyIsIm9ubG9hZCIsIm9uZXJyb3IiLCJyZXNwb25zZVRleHQiLCJzY3JpcHQiLCJjaGFyc2V0Iiwic2NyaXB0Q2hhcnNldCIsIkhjIiwiSWMiLCJqc29ucCIsImpzb25wQ2FsbGJhY2siLCJKYyIsImFuaW1hdGVkIiwiS2MiLCJvZmZzZXQiLCJzZXRPZmZzZXQiLCJsZWZ0IiwidXNpbmciLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJwYWdlWU9mZnNldCIsInBhZ2VYT2Zmc2V0Iiwib2Zmc2V0UGFyZW50Iiwic2Nyb2xsVG8iLCJIZWlnaHQiLCJXaWR0aCIsImNvbnRlbnQiLCJzaXplIiwiYW5kU2VsZiIsIkxjIiwialF1ZXJ5IiwiTWMiLCJub0NvbmZsaWN0IiwiaXNOdWxsT3JFbXB0eSIsInVuZGVmaW5lZCIsIkJhY2tUb1RvcCIsInNlbmRlciIsIl9uYXZpZ2F0b3JQb3NpdGlvbiIsIlRvcFRvQm90dG9tIiwiX3Njcm9sbEZvclBhZ2VTY3JvbGwiLCIkdGhpcyIsIiRyZWZlcmVuY2VkSXRlbSIsIl9pdGVtUG9zaXRpb24iLCJfb2Zmc2V0IiwiX3ZhbHVlIiwicGFyc2VJbnQiLCJGb3JjZU51bWVyaWNPbmx5Iiwia2V5ZG93biIsInNoaWZ0S2V5IiwiQ2xvc2VQb3B1cCIsInRyaWdnZXJFbGVtZW50IiwiQWdvcmFEaWFsb2dNb2RhbCIsIkFmdGVyTG9hZCIsIkNsb3NlTW9kYWwiLCJDbGVhckZvcm12YWwiLCJhZ29yYURpYWxvZyIsIl9kZWZhdWx0cyIsIlNlcnZpY2VVcmwiLCJNb2RhbElkIiwiUGFyYW1zIiwiSHRtbCIsIlBhcmVudENzcyIsIkVuYWJsZUNsb3NlQnV0dG9uIiwiRW5hYmxlTG9hZGVyIiwiRW5hYmxlQWpheEh0bWxMb2FkIiwiSGlkZUNsb3NlQnV0dG9uIiwiQ2xvc2VXaGVuVXNlclByZXNzRXNjYXBlIiwiVHJhbnNpdGlvbiIsIkJlZm9yZUxvYWQiLCJfb3B0aW9ucyIsIkxvYWRPcHRpb25zIiwiSXNOb3ROdWxsIiwiR2V0SHRtbCIsInJlc3BvbnNlIiwiQmluZEh0bWwiLCJTaG93QWxlcnQiLCJTaG93TG9hZGluZyIsImNvbXBvbmVudEhhbmRsZXIiLCJ1cGdyYWRlRG9tIiwiVmFsdWUiLCJhZ1JlcXVlc3QiLCJHRVQiLCJzZXJ2aWNlVXJsIiwicXVlcnlTdHJpbmciLCJmZXRjaCIsIlBPU1QiLCJmb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsImZpbmRMYXp5IiwiZm9yRWFjaCIsIml0ZW0iLCJjbGFzc0xpc3QiLCJhY3Rpb24iLCJibGFua0ltYWdlIiwiZWxlbWVudCIsImN1cnJlbnQiLCJkb2NFbCIsImVsZW1lbnRUb3AiLCJlbGVtZW50Qm90dG9tIiwiYm90dG9tIiwidmlld3BvcnRUb3AiLCJ2aWV3cG9ydEJvdHRvbSIsImlubmVySGVpZ2h0IiwiY2hlY2tpc0luVmlld3BvcnQiLCJzcmNVcmwiLCJpc0F1dG8iLCJnZXRCZXN0Rml0Q29udGFpbmVyIiwiYWRkaXRpb25hbFVybCIsInNjYWxlIiwiZ2V0Rm9ybWF0dGVkSW1hZ2VVcmwiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsImNvbnNvbGUiLCJsb2ciLCJyb290TWFyZ2luIiwidGhyZXNob2xkIiwiYXR0YWNoQWN0aW9uIiwiZGVmYXVsdFJhdGlvV2lkdGgiLCJkZWZhdWx0UmF0aW9IZWlnaHQiLCJkZWZhdWx0U2NhbGUiLCJyYXRpbyIsInNjYWxlU2l6ZSIsInJhdGlvTWF0Y2giLCJncm91cHMiLCJmbG9vciIsInBhcmVudEVsZW1lbnQiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsImFnTGF6eSIsInJlZnJlc2giLCJ2YWxpZGF0ZSIsInF1ZXJ5U2VsZWN0b3IiLCJhY2NpdGVtIiwiYWNjb3JkaW9uSXRlbUJvZHkiLCJtYXhIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJzaWRlQmFyIiwidGFic0NvbnRhaW5lciIsInRhYiIsIm1lbnVpdGVtIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImRyb3BzIiwiRW5hYmxlU2VhcmNoYmVsb3dUYWIiLCJpbm5lcldpZHRoIiwiY2FuY2VsYnRuIiwiZHJvcCIsImlkeCIsImRyb3BEaXYiLCJjbG9zZWJ0biIsInNjcm9sbFkiLCJIZWFkZXJCdXJnZXJDaGFuZ2UiLCJCdXJnZXJBY3RpdmUiLCJpdGVtdWNub2RlIiwiQnVyZ2VyRGVhY3RpdmUiLCJzY3JvbGxXaWR0aCIsInJpcHBsZWJ1dHRvbnMiLCJlbCIsIm9mZnNldFgiLCJvZmZzZXRZIiwicmlwcGxlIiwidmlkZW9FbGVtZW50cyIsInZpZGVvIiwic3VibmF2YnRuIiwibGFiZWxzZWwiLCJhZ1NsaWRlciIsInNldHRpbmdzIiwiY29udGFpbmVyIiwib25Jbml0Q29tcGxldGUiLCJfc2V0dGluZ3MiLCJhdXRvUGxheSIsImF1dG9QbGF5RGVsYXkiLCJsb29wIiwic2hvd0NvbnRyb2xzIiwiYnRuTGVmdCIsImJ0blJpZ2h0Iiwic2hvd0J1bGxldHMiLCJzaG93QnVsbGV0c0FzVGh1bWIiLCJidWxsZXRDb250YWluZXIiLCJpdGVtV3JhcHBlciIsIndyYXBwZXJNYXNrIiwiaXRlbUNvbnRhaW5lciIsInNEZWZhdWx0IiwiY3VzdG9tIiwiZXh0ZW5kSnNvbiIsIl9zbGlkZXJzIiwiaW5pdFNsaWRlciIsInNsaWRlciIsIl9pdGVtcyIsIl9pdGVtc0NvdW50IiwiX2l0ZW1XaWR0aCIsIl9pdGVtc0luVmlld1BvcnQiLCJyb3VuZCIsIl9hY3RpdmVTSXRlbUlkeCIsIl9hY3RpdmVFSXRlbUlkeCIsIl9idG5MZWZ0IiwiX2J0blJpZ2h0IiwiX3BhdXNlUGxheSIsIl9pc0hlcm9TbGlkZXIiLCJfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrIiwiX3dyYXBwZXJNYXN0U2Nyb2xsTGVmdCIsImlzTmFOIiwic2Nyb2xsUGFkZGluZyIsIl9pdGVtQXJyYXkiLCJzZXRBY3RpdmVJdGVtcyIsIl9idWxsZXQiLCJfdGh1bWJJbWFnZSIsIl90aHVtYkltYWdlUyIsImxvYWRQYWdlIiwiVGh1bWJXaWR0aCIsInN0YXJ0WCIsInN0YXJ0U2Nyb2xsTGVmdCIsImlzRHJhZ2dpbmciLCJzTGVmdCIsIl92aWRlbyIsInBhdXNlIiwiY3VycmVudFRpbWUiLCJwbGF5IiwiaW1nIiwicmVmcmVzaFRyYWNraW5nIiwiX2ZvciIsInl5eXltbWRkaGhtbXNzIiwieXl5eSIsImdldEZ1bGxZZWFyIiwibW0iLCJnZXRNb250aCIsImRkIiwiZ2V0RGF0ZSIsImhoIiwiZ2V0SG91cnMiLCJtaW4iLCJnZXRNaW51dGVzIiwic3MiLCJnZXRTZWNvbmRzIiwiaXNTeW5jZWQiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwidXNlciIsInJlbW92ZUl0ZW0iLCJHdWlkIiwibG9jYWxVc2VyIiwiTmFtZSIsIkZpcnN0TmFtZSIsIkxhc3ROYW1lIiwiRW1haWwiLCJQaG9uZSIsIk1vYmlsZVBob25lIiwiTG9naW5BZ2VudCIsIktleSIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJ1cGRhdGUiLCJyZW5kZXIiLCJ1cGRhdGVQcm9wZXJ0eUNvbGxlY3Rpb24iLCJpbml0UHJvcGVydHlDb2xsZWN0aW9uIiwibG9nZ2luZWROb2RlIiwiY29udGFjdCIsIndyYXBwZXIiLCJ1c2VyQ29udGFpbmVyIiwiY2wiLCJub2RlIiwiZ2V0TG9naW5lZEl0ZW0iLCJ1c2VyQ29sbGVjdGlvbiIsInNldEZvcm1zIiwicmVuZGVyU3RhdGVzIiwiaXNGb3JjZWQiLCJpdGVtcyIsImNvbGxlY3Rpb25UeXBlIiwiUHJvbWlzZSIsInByb3BlcnR5Q29sbGVjdGlvbiIsInByb3BlcnR5Q29sbGVjdGlvblN0cmluZyIsImdldFByb3BlcnR5Q29sbGVjdGlvbiIsIkl0ZW1zIiwicmVkdWNlIiwiaXRlbURvbSIsIlBLIiwiUlQiLCJkb20iLCJyZW5kZXJQcm9wZXJ0eUNvbGxlY3Rpb25JdGVtIiwiZGV0YWlsIiwiYWdVc2VyIiwiY29sbGVjdGlvbiIsImN1cnJlbnRWYWx1ZXNTdHJpbmciLCJDb250YWN0R3VpZCIsImNvbnRhY3RndWlkIiwiYWdlbnRrZXkiLCJldmVudFR5cGUiLCJjaGVja0ZvclN5bmMiLCJjdXJyZW50VmFsdWUiLCJ1cGRhdGVkT24iLCJjdXJyZW50RGF0ZVRpbWUiLCJzZXRNaW51dGVzIiwiZGF0YVRvUmV2aWV3IiwicmVhZEZyb21TZXJ2ZXIiLCJhc3NpZ24iLCJyZWxvYWQiLCJjaGVja0ZvckNvdW50cnkiLCJleHByZXNzaW9uVG9DaGVjayIsImNoZWNrTG9naW4iLCJkYXRhRnJvbVVybCIsImF0b2IiLCJzdWJzdHJpbmciLCJ1c2VySWQiLCJhZ2VudEtleSIsInVzZXJSZXNwb25zZSIsIkNvbnRhY3QiLCJ2ZXJpZnlMb2dpbiIsIkFnZW50S2V5IiwiaGFzaFRvRG9tTWFwIiwibG9hZEV2ZW50IiwiYWN0aXZpdHkiLCJ0cmFja0l0ZW1zIiwic3RhcnRzV2l0aCIsInRyYWNrVHlwZSIsInRyYWNrT2JqZWN0VHlwZSIsImFjdGl2aXR5VHlwZSIsInRyYWNrRGF0YSIsIlRyYWNrVHlwZSIsIk9iamVjdFR5cGUiLCJPYmplY3RBY3Rpdml0eVR5cGUiLCJ0cmFjayIsIldlYkFjdGl2aXR5VHJhY2tlciIsImlzQWdvcmFMb2FkZWQiLCJpc0Nzc0xvYWRlZCIsIkdldFByb3BlcnRpZXMiLCJkZW1hbmRLZXkiLCJsYXlvdXQiLCIkc29ydCIsIiRwYXJlbnQiLCJyZWNvcmRUeXBlIiwiR2V0RGVmYXVsdFNvcnRGb3JSZWNvcmRUeXBlIiwiX2dldENNTkNNTlNvcnRCeSIsIlVybFF1ZXJ5IiwiVHlwZU9mU2VhcmNoIiwiSXNDb250ZW50UGFnZSIsIkRlbWFuZEtleSIsIiRodG1sIiwiJGl0ZW1Db250ZXh0IiwiJHNsaWRlQ29udGV4dCIsIm1sc051bWJlciIsIm1sc0JvYXJkIiwicHJvamVjdENvZGUiLCJpbWFnZVRlbXBsYXRlIiwibmF0aXZlVGFiIiwiY291bnQiLCIkaXRlbVdpdGhJRENvbnRleHQiLCJ1SUQiLCJ0ZW1wbGF0ZSIsInByZWZpeCIsIiRuYXZpZ2F0aW9ucyIsIiRuZXh0IiwiJHByZXYiLCJfbG9hZE1vcmUiLCIkbm9kZSIsIiRzZW5kZXIiLCJtbHNib2FyZCIsIm1sc25vIiwiYnVpbGRGaXJzdFRlbXBsYXRlIiwiZ2V0TWlsbGlzZWNvbmRzIiwiR2V0UHJvcGVydHlJbWFnZUdhbGxlcnkiLCJzZWxlY3RvckVsZW1lbnQiLCJjdXJyZW50U2V0dGluZ3MiLCJsYW5ndWFnZVNvdXJjZXMiLCJsYW5ndWFnZXMiLCJjb2RlIiwibGFiZWwiLCJsb2NhbExhYmVsIiwiY3VycmVuY2llcyIsImJhc2UiLCJmb3JtYXQiLCJ1bml0cyIsInByZXNldHMiLCJsb25nQ29kZSIsImN1cnJlbmN5IiwibGFuZ3VhZ2UiLCJtZXNzdXJlbWVudCIsInN0YXRlcyIsInVuaXRDb252ZXJ0aW9ucyIsInRyYWdldFVuaXQiLCJjb25zdGFudCIsIm5vdGF0aW9uIiwicmVjZW50U3RhdGUiLCJ1cGRhdGVMYW5ndWFnZSIsImxhYmVscyIsImN1cnJlbnRMYWJlbHMiLCJjdXJyZW50TGFiZWxzU3RyaW5nIiwiZ2V0TGFuZ3VhZ2VMYWJlbHNGcm9tU3RvcmUiLCJleHBpcnkiLCJzZXRIb3VycyIsIkxvY2FsZSIsInNldExhbmd1YWdlVG9TdG9yZSIsImdldExhbmd1YWdlTGFiZWxzIiwidXBkYXRlVG9TZXJ2ZXIiLCJsYWJlbHNUb0NoYW5nZSIsImV4cHJlc3Npb25Gb3JBdHRyaWJ1dGVWYWx1ZSIsImxhc3RJbmRleCIsIkxhYmVsSUQiLCJsYmwiLCJkdW1teU5vZGUiLCJtYXRjaEh0bWxXaXRoTGFiZWwiLCJhdHRyaWJ1dGUiLCJleHByZXNzaW9uRm9yQXR0cmlidXRlIiwiYXR0cmlidXRlSWRlbnRpZmllciIsIkF0dHJpYnV0ZSIsImF0dHJpYnV0ZVZhbHVlIiwidXBkYXRlTGFuZ3VhZ2VMYWJlbCIsIkxhYmVscyIsInVwZGF0ZVByaWNlIiwiaXNJbml0IiwiY29udmVydGlvblJhdGVzU3RvcmVkIiwiY29udmVydGlvblJhdGVzIiwic2V0RGF0ZSIsInRvSVNPU3RyaW5nIiwiZ2V0Q29udmVydGlvblJhdGVzIiwiUmF0ZXMiLCJFeGNoYW5nZVJhdGVzIiwiQ29kZSIsImN1cnJlbmN5TWV0YSIsImZvcm1hdHRlciIsImNvbnZlcnRGb3JtYXRUb0V4cHJlc3Npb24iLCJjdXJyZW50Q3VycmVuY3kiLCJwcmljZVRvQ2hhbmdlIiwiY3VycmVudE9mZnNldCIsInBhcmVudENvbGxlY3Rpb24iLCJwYXJlbnRPZmZzZXQiLCJwYXJlbnRQb2ludHMiLCJyaWdodCIsIml0ZW1Qb2ludHMiLCJjbGFzc0F4aXMiLCJ1cGRhdGVJdGVtT2Zmc2V0Q2xhc3MiLCJpc0RlZmF1bHRDdXJyZW5jeUNoYW5nZSIsImV4cHJlc3Npb25Gb3JQcmljZSIsImN1cnJlbnRQcmljZUN1cnJlbmN5IiwiY3VycmVuY3lOb25Tb3VyY2VDb25zdGFudCIsInNvdXJjZUN1cnJlbmN5IiwiQ29uc3RhbnQiLCJwcmljZUNvbnZlcnRlZCIsInVwZGF0ZVByaWNlRm9ySXRlbSIsImZvcm1hdFN0cmluZyIsIm51bWJlciIsInRvTG9jYWxlU3RyaW5nIiwidXBkYXRlTWVzc3VyZW1lbnQiLCJpc0FwcGxpZWQiLCJtZXNzdXJlbWVudHNUb0NoYW5nZSIsInVwZGF0ZUl0ZW1NZXNzdXJlbWVudCIsInJvb3RFbGVtZW50IiwiaXNVbml0Rm91bmQiLCJ1bml0Q29udmVydGlvblNjaGVtYSIsImhhdmVWYWxpZEF0dHJpYnV0ZSIsImdldExhYmVsRm9yQXR0cmlidXRlIiwibm90YXRpb25FeHByZXNzaW9uIiwiZmluZE1lc3N1cmVtZW50RnJvbUF0dHJpYnV0ZSIsImN1cnJlbnRMYWJlbCIsImxhYmVsUmVwbGFjZVJlc3VsdCIsInJlcGxhY2VNZXNzdXJlbWVudCIsInNldExhYmVsRm9yQXR0cmlidXRlIiwiZ2V0VmFsdWVGb3JBdHRyaWJ1dGUiLCJ2YWx1ZVJlcGxhY2VSZXN1bHQiLCJyZXBsYWNlTWVzc3VyZW1lbnRXaXRoVW5pdCIsInNldFZhbHVlRm9yQXR0cmlidXRlIiwiY2hpbGROb2RlIiwiTm9kZSIsIlRFWFRfTk9ERSIsImV4cHJlc3Npb24iLCJmaW5kTWVzc3VyZW1lbnRGcm9tTm9kZSIsImN1cnJlbnRUZXh0IiwicmVwbGFjZVJlc3VsdCIsIm1vZGUiLCJyZXBsYWNlU3VjY2VzcyIsInJlcGxhY2VVbml0UmVzdWx0Iiwibm90YXRpb25FeHByZXNzaW9ucyIsIm5vdGF0aW9uT25seUV4cHJlc3Npb25zIiwibWF0Y2hTdWNjZXNzIiwiZ2V0UmVwbGFjZU1lc3N1cmVtZW50RXhwcmVzc2lvbk1hdGNoIiwiZ2V0VmFsdWUiLCJzdGFydEluZGV4IiwiZW5kSW5kZXgiLCJtYXRjaFZhbHVlIiwiZm9ybWF0VmFsdWUiLCJ0YXJnZXROb3RhdGlvbiIsInZhbHVlRXhwcmVzc2lvbiIsImVuYWJsZUxhbmd1YWdlU2VsZWN0b3IiLCJnZXRGbGFnQ3NzQ2xhc3MiLCJhZ0xvY2FsZSIsImxvY2FsZSIsImxvY2F0aW9uRmxhZyIsImxhbmd1YWdlRWxlbWVudCIsImxvY2F0aW9uRWxlbWVudCIsInJlbmRlckxhbmd1YWdlRWxlbWVudCIsInJlbmRlckNob2ljZUxpc3QiLCJpdGVtRWxlbWVudCIsInNvdXJjZUl0ZW0iLCJpc0V2ZW50IiwicmVuZGVyTGFuZ3VhZ2VTZWxlY3RvciIsImFjdGl2ZUl0ZW0iLCJlbmdhZ2VMYW5ndWFnZVNlbGVjdG9yIiwiZGlzZW5nYWdlQWN0aW9uTGlzdGVuZXIiLCJkaXNlbmdhZ2VMYW5ndWFnZVNlbGVjdG9yIiwidXBkYXRlVG9zZXJ2ZXJDYWxsIiwidXBkYXRlU3VjY2VzIiwiZmllbGQiLCJvbGRVcGRhdGVTdWNjZXNzIiwicmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9ucyIsInRpdGxlIiwicmVuZGVySXRlbSIsInNlbGVjdGVkSXRlbSIsImZpZWxkS2V5IiwicmVuZGVyRXhpc3QiLCJpdGVtTGlzdCIsIml0ZW1MaXN0VmFsdWUiLCJpdGVtT3B0aW9ucyIsImNob2ljZUl0ZW0iLCJzZWxlY3RlZFZhbHVlIiwic2VsZWN0ZWRJdGVtRnJvbVNvdXJjZSIsImFnTGFuZ3VhZ2UiLCJyZWZyZXNoTG9jYWxlIiwiaXNSZXF1aXJlQXV0b0RpY292ZXJ5IiwiY291bnRyeSIsImF1dG9Db3VudHJ5IiwiY291bnRyeUNvZGUiLCJ2YWx1ZVRvU2V0IiwiYXR0YWNoQWN0aW9ucyIsImV4cHJlc3Npb25TdHJpbmciLCJub3RhdGlvbkV4cHJlc3Npb25TdHJpbmciLCJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiLCJzdWJFeHByZXNzaW9uU3RyaW5nIiwic3ViTm90YXRpb25FeHByZXNzaW9uU3RyaW5nIiwibm90YXRpb25JdGVtIiwiYnVpbGRVbml0Q29udmVydGlvblNjaGVtYSIsIkVuYWJsZURlbWFuZEltcG9ydCIsInNlYXJjaEFjdG9uIiwiJGZvcm0iLCJfdXJsUXVlcnkiLCJjb21wb3NlVXJsUXVlcnkiLCJfcnQiLCJfZGVmYXVsdFNvcnQiLCJfc29ydFZhbHVlIiwicXVlcnkiLCIkcHJlZml4IiwiX3ByZWZpeCIsIkdldFNlYXJjaFByZWZpeEZvclJlY29yZFR5cGUiLCJFbmFibGVTZWFyY2hGb3JtIiwib25TY3JvbGwiLCJzY3JvbGxQb3MiLCJjdXJyTGluayIsInJlZkVsZW1lbnQiLCJvdXRlckhlaWdodCIsIiR0YXJnZXQiLCJzY3JvbGwiLCJzeXN0ZW1GdW5jdGlvbnMiLCJJbnRlcnBvbGF0aW9uIiwiZnVuY3Rpb25BcmdzTGl0ZXJhbHMiLCJmdW5jdGlvbkFyZ3NWYWx1ZXMiLCJwYXJlbnRSZW5kZXJGdW5jdGlvbiIsInJlbmRlckZ1bmN0aW9ucyIsInRlbXBsYXRlU3RyaW5nIiwiZ2V0QXR0cmlidXRlTmFtZXMiLCJidWlsZFJlbmRlckZ1bmN0aW9uIiwiY2xlYW5QcmVJbnRlcnBvbGF0aW9uIiwiaW5wdXRUZXh0IiwicmVuZGVyQmxvY2siLCJyZW5kZXJUZW1wbGF0ZSIsInZhcmlhYmxlcyIsImlzU3lzdGVtRnVuY3Rpb24iLCJpZGVudGlmaWVyIiwibG9jYWxWYXJpYWJsZXMiLCJFeHRyYWN0VmFyaWFibGVzVG9wTGV2ZWxJZGVudGlmaWVycyIsIldhdGNoIiwiaXNDaGFuZ2UiLCJJc0Z1bmN0aW9uIiwiRXh0cmFjdEFyZ3VtZW50VmFyaWFibGVzRm9yRnVuY3Rpb25Gcm9tU3RyaW5nIiwiYXJndW1lbnRJdGVtIiwicmVuZGVyRnVuY3Rpb24iLCJGdW5jdGlvbiIsImludGVycG9sYXRlT2JqZWN0IiwiY3VycmVudFJlbmRlckZ1bmN0aW9ucyIsIkVMRU1FTlRfTk9ERSIsImNoaWxkRG9tIiwiUHJlSW50ZXJwb2xhdGlvbiIsInJvb3REb20iLCJpc01hc2tlZCIsImZha2VFbGVtZW50IiwiR2V0VmFsdWUiLCJwcm9wZXJ0eU5hbWUiLCJjdXJyZW50UHJvcGVydHkiLCJzdWJQcm9wZXJ0eSIsImdldFZhbHVlRnJvbUZ1bmN0aW9uIiwiZ2V0RnVuY3Rpb25OYW1lIiwiR2V0UHJveHlPYmplY3QiLCJwcm94eU9iamVjdCIsIml0ZW1Qcm9wZXJ0eSIsIlNldFByb3BlcnR5VG9Qcm94eU9iamVjdCIsIk5vdGlmeSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJTZXRQcm9wZXJ0eURlc2NyaXB0b3JUb1Byb3h5T2JqZWN0IiwicHJvcGVydHlEZXNjcmlwdG9yIiwiQ29udmVyT2JqZWN0VG9Bcmd1bWVudEFycmF5IiwiY29udmVydGVkVmFsdWVzIiwidmFsdWVzIiwicmVmZXJlbmNlTm9kZSIsInZhcmlhYmxlc0Zyb21TdHJpbmdFeHByZXNzaW9uIiwidmFyaWFibGVUb3BMZXZlbElkZW50aWZpZXJzRXhwcmVzc2lvbiIsInZhbHVhdGlvblN0cmluZyIsInZhcmlhYmxlIiwiRXh0cmFjdFZhcmlhYmxlc0Zyb21TdHJpbmciLCJmdW5jdGlvbnMiLCJpZGVudGlmaWVycyIsImZ1bmN0aW9uIiwiZnVuY3Rpb25Bcmd1bWVudHNTdGFydCIsImZ1bmN0aW9uQXJndW1lbnRzRW5kIiwib3BlbkluZGV4IiwiZnVuY3Rpb25Bcmd1bWVudHMiLCJmdW5jdGlvbk5hbWUiLCJJZiIsIm5vZGVzQW5kQ29uZGl0aW9uIiwibmV4dE5vZGUiLCJpdGVtUGFyZW50IiwiYWN0aXZlTm9kZUFuZENvbmRpdGlvbiIsImlkZW50aWZpZXJzVXNlZCIsIkF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVUb1JlYWQiLCJpc0RlZmF1bHQiLCJ2YWx1YXRpb25GdW5jdGlvbkFyZ3VtZW50cyIsIm5vZGVBbmRDb25kaXRpb24iLCJ2YWx1YXRpb25GdW5jdGlvbiIsImluc2VydFBvc3Rpb24iLCJmaW5kRG9tUG9zaXRpb24iLCJjb25kaXRpb25hbE5vZGUiLCJUcmFuc2Zvcm1JbnRlcm5hbCIsImlzVXNlckNoYW5nZSIsIlByZUlmIiwiaWZzIiwiaXNGYWtlIiwiZmFrZUZvdW5kIiwiRm9yIiwiaHRtbERvY3VtZW50IiwibG9vcHMiLCJmYWtlSXRlbSIsIm5leHRFbGVtZW50U2libGluZyIsImZha2VJdGVtQ291bnQiLCJpc2Zha2VJdGVtQ291bnRSZWFkZWQiLCJsb29wQ29uc3RyYWludCIsIml0cmF0b3JGaW5pc2hlZCIsImZpZWxkc0FuZFZhbHVlIiwiaXRyYXRvciIsImh0bWxUb0Nsb25lIiwiaHRtbFRvQ2xvbmVQYXJlbnQiLCJodG1sVG9DbG9uZUxvY2F0aW9uIiwiaXRlbUVsZW1lbnRzIiwiaXNEaXJ0eUZha2UiLCJjb2xsZWN0aW9uQ29udGV4dCIsImdldENvbGxlY3Rpb25PYmplY3QiLCJjb2xsZWN0aW9uQ29udGV4dEZpZWxkIiwiZ2V0Q29sbGVjdGlvbk5hbWUiLCJ3cml0YWJsZSIsIml0ZW1zQ29sbGVjdGlvbiIsIml0ZW1JbmRleCIsImlzRmlyc3QiLCJyZW1vdmVQcmVGb3IiLCJpdGVtRnJvbUNvbGxlY3Rpb24iLCJjb250ZXh0T2JqZWN0IiwiY2xvbmVkRWxlbWVudCIsIlByZUZvclBhcnRpYWwiLCJnZXRQYXJhbWV0ZXJOYW1lIiwiZ2V0RnVuY3Rpb25Gcm9tQ29sbGVjdGlvbiIsImFyZ3MiLCJfX3Byb3RvX18iLCJrZXlzIiwicGFyYW1zU3RyaW5nIiwicGFyYW1zIiwicGFyYW1zSXRlbSIsImlzUGFyYW1WYWx1ZSIsInBhcmFtTmFtZSIsInBhcmFtVmFsdWUiLCJjdXJyZW50RnVuY3Rpb24iLCJuZXh0SXRlbSIsIm9sZE5leHQiLCJsYXN0SXRlbSIsImZpcnN0SXRlbSIsIlByZUZvciIsInRhZ05hbWUiLCJjbG9uZUl0ZW0iLCJjbG9uZUl0ZW1Db3VudCIsImNsb25lSXRlbUNvdW50U3RyaW5nIiwiUHJlVHJhbnNmb3JtSW50ZXJuYWwiLCJmaW5kUmVuZGVycyIsInJlc3VsdEZ1bmN0aW9uIiwiZXZlbnROYW1lIiwiaXRlbUh0bWwiLCJyZXF1ZXN0RGF0YSIsInByb2Nlc3NSZXF1ZXN0RGF0YSIsImluaXRQYWdlIiwicmVuZGVyTmFtZSIsInJlbmRlckNvbXBsZXRlIiwiUGFnZVNpemUiLCJQYWdlTnVtYmVyIiwicGFnZWREYXRhIiwiYWdSZW5kZXIiLCJoeWRyYXRlIiwibmV4dFBhZ2UiLCJwcmV2aW91c1BhZ2UiLCJtb3JlUGFnZSIsInByZXZpb3VzIiwibW9yZSIsInBhZ2VkUmVzdWx0IiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkZWZpbml0aW9uIiwib2JqIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciXSwic291cmNlUm9vdCI6IiJ9
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 o in n)("object"==typeof exports?exports:e)[o]=n[o]}}(self,(()=>(()=>{var __webpack_modules__={468:()=>{agora((function(){$(document).ready((function(){!location.hash||"#signup"!=location.hash.toLowerCase()&&"#register"!=location.hash.toLowerCase()&&"#reset-password"!=location.hash.toLowerCase()||OpenPopup()}))}))},440:function(e,t){var n,o,r;o="undefined"!=typeof window?window:this,r=function(o,r){function a(e){var t=e.length,n=K.type(e);return"function"!==n&&!K.isWindow(e)&&(!(1!==e.nodeType||!t)||"array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function i(e,t,n){if(K.isFunction(t))return K.grep(e,(function(e,o){return!!t.call(e,o,e)!==n}));if(t.nodeType)return K.grep(e,(function(e){return e===t!==n}));if("string"==typeof t){if(ae.test(t))return K.filter(t,e,n);t=K.filter(t,e)}return K.grep(e,(function(e){return W.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),o.removeEventListener("load",l,!1),K.ready()}function c(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=K.expando+Math.random()}function u(e,t,n){var o;if(void 0===n&&1===e.nodeType)if(o="data-"+t.replace(ye,"-$1").toLowerCase(),"string"==typeof(n=e.getAttribute(o))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:ve.test(n)?K.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 K.nodeName(e,"table")&&K.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=_e.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function v(e,t){for(var n=0,o=e.length;o>n;n++)ge.set(e[n],"globalEval",!t||ge.get(t[n],"globalEval"))}function y(e,t){var n,o,r,a,i,s,l,c;if(1===t.nodeType){if(ge.hasData(e)&&(a=ge.access(e),i=ge.set(t,a),c=a.events))for(r in delete i.handle,i.events={},c)for(n=0,o=c[r].length;o>n;n++)K.event.add(t,r,c[r][n]);me.hasData(e)&&(s=me.access(e),l=K.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&&K.nodeName(e,t)?K.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,r=K(t.createElement(e)).appendTo(t.body),a=o.getDefaultComputedStyle&&(n=o.getDefaultComputedStyle(r[0]))?n.display:K.css(r[0],"display");return r.detach(),a}function E(e){var t=Y,n=Fe[e];return n||("none"!==(n=w(e,t))&&n||((t=(Ie=(Ie||K("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement))[0].contentDocument).write(),t.close(),n=w(e,t),Ie.detach()),Fe[e]=n),n}function C(e,t,n){var o,r,a,i,s=e.style;return(n=n||He(e))&&(i=n.getPropertyValue(t)||n[t]),n&&(""!==i||K.contains(e.ownerDocument,e)||(i=K.style(e,t)),Re.test(i)&&Me.test(t)&&(o=s.width,r=s.minWidth,a=s.maxWidth,s.minWidth=s.maxWidth=s.width=i,i=n.width,s.width=o,s.minWidth=r,s.maxWidth=a)),void 0!==i?i+"":i}function L(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function A(e,t){if(t in e)return t;for(var n=t[0].toUpperCase()+t.slice(1),o=t,r=Ge.length;r--;)if((t=Ge[r]+n)in e)return t;return o}function S(e,t,n){var o=Ue.exec(t);return o?Math.max(0,o[1]-(n||0))+(o[2]||"px"):t}function T(e,t,n,o,r){for(var a=n===(o?"border":"content")?4:"width"===t?1:0,i=0;4>a;a+=2)"margin"===n&&(i+=K.css(e,n+xe[a],!0,r)),o?("content"===n&&(i-=K.css(e,"padding"+xe[a],!0,r)),"margin"!==n&&(i-=K.css(e,"border"+xe[a]+"Width",!0,r))):(i+=K.css(e,"padding"+xe[a],!0,r),"padding"!==n&&(i+=K.css(e,"border"+xe[a]+"Width",!0,r)));return i}function k(e,t,n){var o=!0,r="width"===t?e.offsetWidth:e.offsetHeight,a=He(e),i="border-box"===K.css(e,"boxSizing",!1,a);if(0>=r||null==r){if((0>(r=C(e,t,a))||null==r)&&(r=e.style[t]),Re.test(r))return r;o=i&&(X.boxSizingReliable()||r===e.style[t]),r=parseFloat(r)||0}return r+T(e,t,n||(i?"border":"content"),o,a)+"px"}function N(e,t){for(var n,o,r,a=[],i=0,s=e.length;s>i;i++)(o=e[i]).style&&(a[i]=ge.get(o,"olddisplay"),n=o.style.display,t?(a[i]||"none"!==n||(o.style.display=""),""===o.style.display&&we(o)&&(a[i]=ge.access(o,"olddisplay",E(o.nodeName)))):(r=we(o),"none"===n&&r||ge.set(o,"olddisplay",r?n:K.css(o,"display"))));for(i=0;s>i;i++)(o=e[i]).style&&(t&&"none"!==o.style.display&&""!==o.style.display||(o.style.display=t?a[i]||"":"none"));return e}function O(e,t,n,o,r){return new O.prototype.init(e,t,n,o,r)}function D(){return setTimeout((function(){Xe=void 0})),Xe=K.now()}function q(e,t){var n,o=0,r={height:e};for(t=t?1:0;4>o;o+=2-t)r["margin"+(n=xe[o])]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function $(e,t,n){for(var o,r=(et[t]||[]).concat(et["*"]),a=0,i=r.length;i>a;a++)if(o=r[a].call(n,t,e))return o}function _(e,t,n){var o,r,a=0,i=Ze.length,s=K.Deferred().always((function(){delete l.elem})),l=function(){if(r)return!1;for(var t=Xe||D(),n=Math.max(0,c.startTime+c.duration-t),o=1-(n/c.duration||0),a=0,i=c.tweens.length;i>a;a++)c.tweens[a].run(o);return s.notifyWith(e,[c,o,n]),1>o&&i?n:(s.resolveWith(e,[c]),!1)},c=s.promise({elem:e,props:K.extend({},t),opts:K.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xe||D(),duration:n.duration,tweens:[],createTween:function(t,n){var o=K.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(o),o},stop:function(t){var n=0,o=t?c.tweens.length:0;if(r)return this;for(r=!0;o>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,o,r,a,i;for(n in e)if(r=t[o=K.camelCase(n)],a=e[n],K.isArray(a)&&(r=a[1],a=e[n]=a[0]),n!==o&&(e[o]=a,delete e[n]),(i=K.cssHooks[o])&&"expand"in i)for(n in a=i.expand(a),delete e[o],a)n in e||(e[n]=a[n],t[n]=r);else t[o]=r}(u,c.opts.specialEasing);i>a;a++)if(o=Ze[a].call(c,e,u,c.opts))return o;return K.map(u,$,c),K.isFunction(c.opts.start)&&c.opts.start.call(e,c),K.fx.timer(K.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 P(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var o,r=0,a=t.toLowerCase().match(fe)||[];if(K.isFunction(n))for(;o=a[r++];)"+"===o[0]?(o=o.slice(1)||"*",(e[o]=e[o]||[]).unshift(n)):(e[o]=e[o]||[]).push(n)}}function j(e,t,n,o){function r(s){var l;return a[s]=!0,K.each(e[s]||[],(function(e,s){var c=s(t,n,o);return"string"!=typeof c||i||a[c]?i?!(l=c):void 0:(t.dataTypes.unshift(c),r(c),!1)})),l}var a={},i=e===vt;return r(t.dataTypes[0])||!a["*"]&&r("*")}function I(e,t){var n,o,r=K.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((r[n]?e:o||(o={}))[n]=t[n]);return o&&K.extend(!0,e,o),e}function F(e,t,n,o){var r;if(K.isArray(t))K.each(t,(function(t,r){n||xt.test(e)?o(e,r):F(e+"["+("object"==typeof r?t:"")+"]",r,n,o)}));else if(n||"object"!==K.type(t))o(e,t);else for(r in t)F(e+"["+r+"]",t[r],n,o)}function M(e){return K.isWindow(e)?e:9===e.nodeType&&e.defaultView}var R=[],H=R.slice,B=R.concat,U=R.push,W=R.indexOf,z={},V=z.toString,G=z.hasOwnProperty,X={},Y=o.document,J="2.1.1",K=function(e,t){return new K.fn.init(e,t)},Q=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,Z=/^-ms-/,ee=/-([\da-z])/gi,te=function(e,t){return t.toUpperCase()};K.fn=K.prototype={jquery:J,constructor:K,selector:"",length:0,toArray:function(){return H.call(this)},get:function(e){return null!=e?0>e?this[e+this.length]:this[e]:H.call(this)},pushStack:function(e){var t=K.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return K.each(this,e,t)},map:function(e){return this.pushStack(K.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(H.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:R.sort,splice:R.splice},K.extend=K.fn.extend=function(){var e,t,n,o,r,a,i=arguments[0]||{},s=1,l=arguments.length,c=!1;for("boolean"==typeof i&&(c=i,i=arguments[s]||{},s++),"object"==typeof i||K.isFunction(i)||(i={}),s===l&&(i=this,s--);l>s;s++)if(null!=(e=arguments[s]))for(t in e)n=i[t],i!==(o=e[t])&&(c&&o&&(K.isPlainObject(o)||(r=K.isArray(o)))?(r?(r=!1,a=n&&K.isArray(n)?n:[]):a=n&&K.isPlainObject(n)?n:{},i[t]=K.extend(c,a,o)):void 0!==o&&(i[t]=o));return i},K.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"===K.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!K.isArray(e)&&e-parseFloat(e)>=0},isPlainObject:function(e){return!("object"!==K.type(e)||e.nodeType||K.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?z[V.call(e)]||"object":typeof e},globalEval:function(e){var t,n=eval;(e=K.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 o=0,r=e.length,i=a(e);if(n){if(i)for(;r>o&&!1!==t.apply(e[o],n);o++);else for(o in e)if(!1===t.apply(e[o],n))break}else if(i)for(;r>o&&!1!==t.call(e[o],o,e[o]);o++);else for(o in e)if(!1===t.call(e[o],o,e[o]))break;return e},trim:function(e){return null==e?"":(e+"").replace(Q,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(a(Object(e))?K.merge(n,"string"==typeof e?[e]:e):U.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:W.call(t,e,n)},merge:function(e,t){for(var n=+t.length,o=0,r=e.length;n>o;o++)e[r++]=t[o];return e.length=r,e},grep:function(e,t,n){for(var o=[],r=0,a=e.length,i=!n;a>r;r++)!t(e[r],r)!==i&&o.push(e[r]);return o},map:function(e,t,n){var o,r=0,i=e.length,s=[];if(a(e))for(;i>r;r++)null!=(o=t(e[r],r,n))&&s.push(o);else for(r in e)null!=(o=t(e[r],r,n))&&s.push(o);return B.apply([],s)},guid:1,proxy:function(e,t){var n,o,r;return"string"==typeof t&&(n=e[t],t=e,e=n),K.isFunction(e)?(o=H.call(arguments,2),r=function(){return e.apply(t||this,o.concat(H.call(arguments)))},r.guid=e.guid=e.guid||K.guid++,r):void 0},now:Date.now,support:X}),K.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(function(e,t){z["[object "+t+"]"]=t.toLowerCase()}));var ne=function(e){function t(e,t,n,o){var r,a,i,s,l,c,d,p,h,g;if((t?t.ownerDocument||t:R)!==q&&D(t),n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=(t=t||q).nodeType)&&9!==s)return[];if(_&&!o){if(r=ye.exec(e))if(i=r[1]){if(9===s){if(!(a=t.getElementById(i))||!a.parentNode)return n;if(a.id===i)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(i))&&F(t,a)&&a.id===i)return n.push(a),n}else{if(r[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((i=r[3])&&w.getElementsByClassName&&t.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(i)),n}if(w.qsa&&(!P||!P.test(e))){if(p=d=M,h=t,g=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=A(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,o)}function n(){var e=[];return function t(n,o){return e.push(n+" ")>E.cacheLength&&delete t[e.shift()],t[n+" "]=o}}function o(e){return e[M]=!0,e}function r(e){var t=q.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function a(e,t){for(var n=e.split("|"),o=e.length;o--;)E.attrHandle[n[o]]=t}function i(e,t){var n=t&&e,o=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||X)-(~e.sourceIndex||X);if(o)return o;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 o((function(t){return t=+t,o((function(n,o){for(var r,a=e([],n.length,t),i=a.length;i--;)n[r=a[i]]&&(n[r]=!(o[r]=n[r]))}))}))}function u(e){return e&&typeof e.getElementsByTagName!==G&&e}function d(){}function f(e){for(var t=0,n=e.length,o="";n>t;t++)o+=e[t].value;return o}function p(e,t,n){var o=t.dir,r=n&&"parentNode"===o,a=B++;return t.first?function(t,n,a){for(;t=t[o];)if(1===t.nodeType||r)return e(t,n,a)}:function(t,n,i){var s,l,c=[H,a];if(i){for(;t=t[o];)if((1===t.nodeType||r)&&e(t,n,i))return!0}else for(;t=t[o];)if(1===t.nodeType||r){if((s=(l=t[M]||(t[M]={}))[o])&&s[0]===H&&s[1]===a)return c[2]=s[2];if(l[o]=c,c[2]=e(t,n,i))return!0}}}function h(e){return e.length>1?function(t,n,o){for(var r=e.length;r--;)if(!e[r](t,n,o))return!1;return!0}:e[0]}function g(e,n,o){for(var r=0,a=n.length;a>r;r++)t(e,n[r],o);return o}function m(e,t,n,o,r){for(var a,i=[],s=0,l=e.length,c=null!=t;l>s;s++)(a=e[s])&&(!n||n(a,o,r))&&(i.push(a),c&&t.push(s));return i}function v(e,t,n,r,a,i){return r&&!r[M]&&(r=v(r)),a&&!a[M]&&(a=v(a,i)),o((function(o,i,s,l){var c,u,d,f=[],p=[],h=i.length,v=o||g(t||"*",s.nodeType?[s]:s,[]),y=!e||!o&&t?v:m(v,f,e,s,l),b=n?a||(o?e:h||r)?[]:i:y;if(n&&n(y,b,s,l),r)for(c=m(b,p),r(c,[],s,l),u=c.length;u--;)(d=c[u])&&(b[p[u]]=!(y[p[u]]=d));if(o){if(a||e){if(a){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(y[u]=d);a(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=a?te.call(o,d):f[u])>-1&&(o[c]=!(i[c]=d))}}else b=m(b===i?b.splice(h,b.length):b),a?a(null,i,b,l):Z.apply(i,b)}))}function y(e){for(var t,n,o,r=e.length,a=E.relative[e[0].type],i=a||E.relative[" "],s=a?1:0,l=p((function(e){return e===t}),i,!0),c=p((function(e){return te.call(t,e)>-1}),i,!0),u=[function(e,n,o){return!a&&(o||n!==k)||((t=n).nodeType?l(e,n,o):c(e,n,o))}];r>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))[M]){for(o=++s;r>o&&!E.relative[e[o].type];o++);return v(s>1&&h(u),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(le,"$1"),n,o>s&&y(e.slice(s,o)),r>o&&y(e=e.slice(o)),r>o&&f(e))}u.push(n)}return h(u)}function b(e,n){var r=n.length>0,a=e.length>0,i=function(o,i,s,l,c){var u,d,f,p=0,h="0",g=o&&[],v=[],y=k,b=o||a&&E.find.TAG("*",c),x=H+=null==y?1:Math.random()||.1,w=b.length;for(c&&(k=i!==q&&i);h!==w&&null!=(u=b[h]);h++){if(a&&u){for(d=0;f=e[d++];)if(f(u,i,s)){l.push(u);break}c&&(H=x)}r&&((u=!f&&u)&&p--,o&&g.push(u))}if(p+=h,r&&h!==p){for(d=0;f=n[d++];)f(g,v,i,s);if(o){if(p>0)for(;h--;)g[h]||v[h]||(v[h]=K.call(l));v=m(v)}Z.apply(l,v),c&&!o&&v.length>0&&p+n.length>1&&t.uniqueSort(l)}return c&&(H=x,k=y),g};return r?o(i):i}var x,w,E,C,L,A,S,T,k,N,O,D,q,$,_,P,j,I,F,M="sizzle"+-new Date,R=e.document,H=0,B=0,U=n(),W=n(),z=n(),V=function(e,t){return e===t&&(O=!0),0},G="undefined",X=1<<31,Y={}.hasOwnProperty,J=[],K=J.pop,Q=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",oe="[\\x20\\t\\r\\n\\f]",re="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ae=re.replace("w","w#"),ie="\\["+oe+"*("+re+")(?:"+oe+"*([*^$|!~]?=)"+oe+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ae+"))|)"+oe+"*\\]",se=":("+re+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ie+")*)|.*)\\)|)",le=new RegExp("^"+oe+"+|((?:^|[^\\\\])(?:\\\\.)*)"+oe+"+$","g"),ce=new RegExp("^"+oe+"*,"+oe+"*"),ue=new RegExp("^"+oe+"*([>+~]|"+oe+")"+oe+"*"),de=new RegExp("="+oe+"*([^\\]'\"]*?)"+oe+"*\\]","g"),fe=new RegExp(se),pe=new RegExp("^"+ae+"$"),he={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re.replace("w","w*")+")"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+se),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+oe+"*(even|odd|(([+-]|)(\\d*)n|)"+oe+"*(?:([+-]|)"+oe+"*(\\d+)|))"+oe+"*\\)|)","i"),bool:new RegExp("^(?:"+ne+")$","i"),needsContext:new RegExp("^"+oe+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+oe+"*((?:-\\d)?\\d*)"+oe+"*\\)|)(?=[^-]|$)","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}"+oe+"?|("+oe+")|.)","ig"),Ee=function(e,t,n){var o="0x"+t-65536;return o!=o||n?t:0>o?String.fromCharCode(o+65536):String.fromCharCode(o>>10|55296,1023&o|56320)};try{Z.apply(J=ee.call(R.childNodes),R.childNodes),J[R.childNodes.length].nodeType}catch(e){Z={apply:J.length?function(e,t){Q.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,o=0;e[n++]=t[o++];);e.length=n-1}}}for(x in w=t.support={},L=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:R,o=n.defaultView;return n!==q&&9===n.nodeType&&n.documentElement?(q=n,$=n.documentElement,_=!L(n),o&&o!==o.top&&(o.addEventListener?o.addEventListener("unload",(function(){D()}),!1):o.attachEvent&&o.attachEvent("onunload",(function(){D()}))),w.attributes=r((function(e){return e.className="i",!e.getAttribute("className")})),w.getElementsByTagName=r((function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length})),w.getElementsByClassName=ve.test(n.getElementsByClassName)&&r((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=r((function(e){return $.appendChild(e).id=M,!n.getElementsByName||!n.getElementsByName(M).length})),w.getById?(E.find.ID=function(e,t){if(typeof t.getElementById!==G&&_){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,o=[],r=0,a=t.getElementsByTagName(e);if("*"===e){for(;n=a[r++];)1===n.nodeType&&o.push(n);return o}return a},E.find.CLASS=w.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==G&&_?t.getElementsByClassName(e):void 0},j=[],P=[],(w.qsa=ve.test(n.querySelectorAll))&&(r((function(e){e.innerHTML="<select msallowclip=''><option selected=''></option></select>",e.querySelectorAll("[msallowclip^='']").length&&P.push("[*^$]="+oe+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+oe+"*(?:value|"+ne+")"),e.querySelectorAll(":checked").length||P.push(":checked")})),r((function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+oe+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")}))),(w.matchesSelector=ve.test(I=$.matches||$.webkitMatchesSelector||$.mozMatchesSelector||$.oMatchesSelector||$.msMatchesSelector))&&r((function(e){w.disconnectedMatch=I.call(e,"div"),I.call(e,"[s!='']:x"),j.push("!=",se)})),P=P.length&&new RegExp(P.join("|")),j=j.length&&new RegExp(j.join("|")),t=ve.test($.compareDocumentPosition),F=t||ve.test($.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,o=t&&t.parentNode;return e===o||!(!o||1!==o.nodeType||!(n.contains?n.contains(o):e.compareDocumentPosition&&16&e.compareDocumentPosition(o)))}: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 o=!e.compareDocumentPosition-!t.compareDocumentPosition;return o||(1&(o=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!w.sortDetached&&t.compareDocumentPosition(e)===o?e===n||e.ownerDocument===R&&F(R,e)?-1:t===n||t.ownerDocument===R&&F(R,t)?1:N?te.call(N,e)-te.call(N,t):0:4&o?-1:1)}:function(e,t){if(e===t)return O=!0,0;var o,r=0,a=e.parentNode,s=t.parentNode,l=[e],c=[t];if(!a||!s)return e===n?-1:t===n?1:a?-1:s?1:N?te.call(N,e)-te.call(N,t):0;if(a===s)return i(e,t);for(o=e;o=o.parentNode;)l.unshift(o);for(o=t;o=o.parentNode;)c.unshift(o);for(;l[r]===c[r];)r++;return r?i(l[r],c[r]):l[r]===R?-1:c[r]===R?1:0},n):q},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==q&&D(e),n=n.replace(de,"='$1']"),!(!w.matchesSelector||!_||j&&j.test(n)||P&&P.test(n)))try{var o=I.call(e,n);if(o||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return o}catch(e){}return t(n,q,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==q&&D(e),F(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==q&&D(e);var n=E.attrHandle[t.toLowerCase()],o=n&&Y.call(E.attrHandle,t.toLowerCase())?n(e,t,!_):void 0;return void 0!==o?o:w.attributes||!_?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],o=0,r=0;if(O=!w.detectDuplicates,N=!w.sortStable&&e.slice(0),e.sort(V),O){for(;t=e[r++];)t===e[r]&&(o=n.push(r));for(;o--;)e.splice(n[o],1)}return N=null,e},C=t.getText=function(e){var t,n="",o=0,r=e.nodeType;if(r){if(1===r||9===r||11===r){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=C(e)}else if(3===r||4===r)return e.nodeValue}else for(;t=e[o++];)n+=C(t);return n},E=t.selectors={cacheLength:50,createPseudo:o,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=A(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("(^|"+oe+")"+e+"("+oe+"|$)"))&&U(e,(function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==G&&e.getAttribute("class")||"")}))},ATTR:function(e,n,o){return function(r){var a=t.attr(r,e);return null==a?"!="===n:!n||(a+="","="===n?a===o:"!="===n?a!==o:"^="===n?o&&0===a.indexOf(o):"*="===n?o&&a.indexOf(o)>-1:"$="===n?o&&a.slice(-o.length)===o:"~="===n?(" "+a+" ").indexOf(o)>-1:"|="===n&&(a===o||a.slice(0,o.length+1)===o+"-"))}},CHILD:function(e,t,n,o,r){var a="nth"!==e.slice(0,3),i="last"!==e.slice(-4),s="of-type"===t;return 1===o&&0===r?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,h,g=a!==i?"nextSibling":"previousSibling",m=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(m){if(a){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=[i?m.firstChild:m.lastChild],i&&y){for(p=(c=(u=m[M]||(m[M]={}))[e]||[])[0]===H&&c[1],f=c[0]===H&&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]=[H,p,f];break}}else if(y&&(c=(t[M]||(t[M]={}))[e])&&c[0]===H)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[M]||(d[M]={}))[e]=[H,f]),d!==t)););return(f-=r)===o||f%o==0&&f/o>=0}}},PSEUDO:function(e,n){var r,a=E.pseudos[e]||E.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return a[M]?a(n):a.length>1?(r=[e,e,"",n],E.setFilters.hasOwnProperty(e.toLowerCase())?o((function(e,t){for(var o,r=a(e,n),i=r.length;i--;)e[o=te.call(e,r[i])]=!(t[o]=r[i])})):function(e){return a(e,0,r)}):a}},pseudos:{not:o((function(e){var t=[],n=[],r=S(e.replace(le,"$1"));return r[M]?o((function(e,t,n,o){for(var a,i=r(e,null,o,[]),s=e.length;s--;)(a=i[s])&&(e[s]=!(t[s]=a))})):function(e,o,a){return t[0]=e,r(t,null,a,n),!n.pop()}})),has:o((function(e){return function(n){return t(e,n).length>0}})),contains:o((function(e){return function(t){return(t.textContent||t.innerText||C(t)).indexOf(e)>-1}})),lang:o((function(e){return pe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(we,Ee).toLowerCase(),function(t){var n;do{if(n=_?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===$},focus:function(e){return e===q.activeElement&&(!q.hasFocus||q.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 o=0>n?n+t:n;--o>=0;)e.push(o);return e})),gt:c((function(e,t,n){for(var o=0>n?n+t:n;++o<t;)e.push(o);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,A=t.tokenize=function(e,n){var o,r,a,i,s,l,c,u=W[e+" "];if(u)return n?0:u.slice(0);for(s=e,l=[],c=E.preFilter;s;){for(i in(!o||(r=ce.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(a=[])),o=!1,(r=ue.exec(s))&&(o=r.shift(),a.push({value:o,type:r[0].replace(le," ")}),s=s.slice(o.length)),E.filter)!(r=he[i].exec(s))||c[i]&&!(r=c[i](r))||(o=r.shift(),a.push({value:o,type:i,matches:r}),s=s.slice(o.length));if(!o)break}return n?s.length:s?t.error(e):W(e,l).slice(0)},S=t.compile=function(e,t){var n,o=[],r=[],a=z[e+" "];if(!a){for(t||(t=A(e)),n=t.length;n--;)(a=y(t[n]))[M]?o.push(a):r.push(a);(a=z(e,b(r,o))).selector=e}return a},T=t.select=function(e,t,n,o){var r,a,i,s,l,c="function"==typeof e&&e,d=!o&&A(e=c.selector||e);if(n=n||[],1===d.length){if((a=d[0]=d[0].slice(0)).length>2&&"ID"===(i=a[0]).type&&w.getById&&9===t.nodeType&&_&&E.relative[a[1].type]){if(!(t=(E.find.ID(i.matches[0].replace(we,Ee),t)||[])[0]))return n;c&&(t=t.parentNode),e=e.slice(a.shift().value.length)}for(r=he.needsContext.test(e)?0:a.length;r--&&(i=a[r],!E.relative[s=i.type]);)if((l=E.find[s])&&(o=l(i.matches[0].replace(we,Ee),be.test(a[0].type)&&u(t.parentNode)||t))){if(a.splice(r,1),!(e=o.length&&f(a)))return Z.apply(n,o),n;break}}return(c||S(e,d))(o,t,!_,n,be.test(e)&&u(t.parentNode)||t),n},w.sortStable=M.split("").sort(V).join("")===M,w.detectDuplicates=!!O,D(),w.sortDetached=r((function(e){return 1&e.compareDocumentPosition(q.createElement("div"))})),r((function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")}))||a("type|href|height|width",(function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),w.attributes&&r((function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||a("value",(function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue})),r((function(e){return null==e.getAttribute("disabled")}))||a(ne,(function(e,t,n){var o;return n?void 0:!0===e[t]?t.toLowerCase():(o=e.getAttributeNode(t))&&o.specified?o.value:null})),t}(o);K.find=ne,K.expr=ne.selectors,K.expr[":"]=K.expr.pseudos,K.unique=ne.uniqueSort,K.text=ne.getText,K.isXMLDoc=ne.isXML,K.contains=ne.contains;var oe=K.expr.match.needsContext,re=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ae=/^.[^:#\[\.,]*$/;K.filter=function(e,t,n){var o=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===o.nodeType?K.find.matchesSelector(o,e)?[o]:[]:K.find.matches(e,K.grep(t,(function(e){return 1===e.nodeType})))},K.fn.extend({find:function(e){var t,n=this.length,o=[],r=this;if("string"!=typeof e)return this.pushStack(K(e).filter((function(){for(t=0;n>t;t++)if(K.contains(r[t],this))return!0})));for(t=0;n>t;t++)K.find(e,r[t],o);return(o=this.pushStack(n>1?K.unique(o):o)).selector=this.selector?this.selector+" "+e:e,o},filter:function(e){return this.pushStack(i(this,e||[],!1))},not:function(e){return this.pushStack(i(this,e||[],!0))},is:function(e){return!!i(this,"string"==typeof e&&oe.test(e)?K(e):e||[],!1).length}});var ie,se=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,le=K.fn.init=function(e,t){var n,o;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||ie).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof K?t[0]:t,K.merge(this,K.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:Y,!0)),re.test(n[1])&&K.isPlainObject(t))for(n in t)K.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}return(o=Y.getElementById(n[2]))&&o.parentNode&&(this.length=1,this[0]=o),this.context=Y,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):K.isFunction(e)?void 0!==ie.ready?ie.ready(e):e(K):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),K.makeArray(e,this))};le.prototype=K.fn,ie=K(Y);var ce=/^(?:parents|prev(?:Until|All))/,ue={children:!0,contents:!0,next:!0,prev:!0};K.extend({dir:function(e,t,n){for(var o=[],r=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(r&&K(e).is(n))break;o.push(e)}return o},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}}),K.fn.extend({has:function(e){var t=K(e,this),n=t.length;return this.filter((function(){for(var e=0;n>e;e++)if(K.contains(this,t[e]))return!0}))},closest:function(e,t){for(var n,o=0,r=this.length,a=[],i=oe.test(e)||"string"!=typeof e?K(e,t||this.context):0;r>o;o++)for(n=this[o];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(i?i.index(n)>-1:1===n.nodeType&&K.find.matchesSelector(n,e))){a.push(n);break}return this.pushStack(a.length>1?K.unique(a):a)},index:function(e){return e?"string"==typeof e?W.call(K(e),this[0]):W.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(K.unique(K.merge(this.get(),K(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),K.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return K.dir(e,"parentNode")},parentsUntil:function(e,t,n){return K.dir(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return K.dir(e,"nextSibling")},prevAll:function(e){return K.dir(e,"previousSibling")},nextUntil:function(e,t,n){return K.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return K.dir(e,"previousSibling",n)},siblings:function(e){return K.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return K.sibling(e.firstChild)},contents:function(e){return e.contentDocument||K.merge([],e.childNodes)}},(function(e,t){K.fn[e]=function(n,o){var r=K.map(this,t,n);return"Until"!==e.slice(-5)&&(o=n),o&&"string"==typeof o&&(r=K.filter(o,r)),this.length>1&&(ue[e]||K.unique(r),ce.test(e)&&r.reverse()),this.pushStack(r)}}));var de,fe=/\S+/g,pe={};K.Callbacks=function(e){e="string"==typeof e?pe[e]||function(e){var t=pe[e]={};return K.each(e.match(fe)||[],(function(e,n){t[n]=!0})),t}(e):K.extend({},e);var t,n,o,r,a,i,s=[],l=!e.once&&[],c=function(d){for(t=e.memory&&d,n=!0,i=r||0,r=0,a=s.length,o=!0;s&&a>i;i++)if(!1===s[i].apply(d[0],d[1])&&e.stopOnFalse){t=!1;break}o=!1,s&&(l?l.length&&c(l.shift()):t?s=[]:u.disable())},u={add:function(){if(s){var n=s.length;!function t(n){K.each(n,(function(n,o){var r=K.type(o);"function"===r?e.unique&&u.has(o)||s.push(o):o&&o.length&&"string"!==r&&t(o)}))}(arguments),o?a=s.length:t&&(r=n,c(t))}return this},remove:function(){return s&&K.each(arguments,(function(e,t){for(var n;(n=K.inArray(t,s,n))>-1;)s.splice(n,1),o&&(a>=n&&a--,i>=n&&i--)})),this},has:function(e){return e?K.inArray(e,s)>-1:!(!s||!s.length)},empty:function(){return s=[],a=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],o?l.push(t):c(t)),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!n}};return u},K.extend({Deferred:function(e){var t=[["resolve","done",K.Callbacks("once memory"),"resolved"],["reject","fail",K.Callbacks("once memory"),"rejected"],["notify","progress",K.Callbacks("memory")]],n="pending",o={state:function(){return n},always:function(){return r.done(arguments).fail(arguments),this},then:function(){var e=arguments;return K.Deferred((function(n){K.each(t,(function(t,a){var i=K.isFunction(e[t])&&e[t];r[a[1]]((function(){var e=i&&i.apply(this,arguments);e&&K.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a[0]+"With"](this===o?n.promise():this,i?[e]:arguments)}))})),e=null})).promise()},promise:function(e){return null!=e?K.extend(e,o):o}},r={};return o.pipe=o.then,K.each(t,(function(e,a){var i=a[2],s=a[3];o[a[1]]=i.add,s&&i.add((function(){n=s}),t[1^e][2].disable,t[2][2].lock),r[a[0]]=function(){return r[a[0]+"With"](this===r?o:this,arguments),this},r[a[0]+"With"]=i.fireWith})),o.promise(r),e&&e.call(r,r),r},when:function(e){var t,n,o,r=0,a=H.call(arguments),i=a.length,s=1!==i||e&&K.isFunction(e.promise)?i:0,l=1===s?e:K.Deferred(),c=function(e,n,o){return function(r){n[e]=this,o[e]=arguments.length>1?H.call(arguments):r,o===t?l.notifyWith(n,o):--s||l.resolveWith(n,o)}};if(i>1)for(t=new Array(i),n=new Array(i),o=new Array(i);i>r;r++)a[r]&&K.isFunction(a[r].promise)?a[r].promise().done(c(r,o,a)).fail(l.reject).progress(c(r,n,t)):--s;return s||l.resolveWith(o,a),l.promise()}}),K.fn.ready=function(e){return K.ready.promise().done(e),this},K.extend({isReady:!1,readyWait:1,holdReady:function(e){e?K.readyWait++:K.ready(!0)},ready:function(e){(!0===e?--K.readyWait:K.isReady)||(K.isReady=!0,!0!==e&&--K.readyWait>0||(de.resolveWith(Y,[K]),K.fn.triggerHandler&&(K(Y).triggerHandler("ready"),K(Y).off("ready"))))}}),K.ready.promise=function(e){return de||(de=K.Deferred(),"complete"===Y.readyState?setTimeout(K.ready):(Y.addEventListener("DOMContentLoaded",l,!1),o.addEventListener("load",l,!1))),de.promise(e)},K.ready.promise();var he=K.access=function(e,t,n,o,r,a,i){var s=0,l=e.length,c=null==n;if("object"===K.type(n))for(s in r=!0,n)K.access(e,t,s,n[s],!0,a,i);else if(void 0!==o&&(r=!0,K.isFunction(o)||(i=!0),c&&(i?(t.call(e,o),t=null):(c=t,t=function(e,t,n){return c.call(K(e),n)})),t))for(;l>s;s++)t(e[s],n,i?o:o.call(e[s],s,t(e[s],n)));return r?e:c?t.call(e):l?t(e[0],n):a};K.acceptData=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType},c.uid=1,c.accepts=K.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(o){t[this.expando]=n,K.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var o,r=this.key(e),a=this.cache[r];if("string"==typeof t)a[t]=n;else if(K.isEmptyObject(a))K.extend(this.cache[r],t);else for(o in t)a[o]=t[o];return a},get:function(e,t){var n=this.cache[this.key(e)];return void 0===t?n:n[t]},access:function(e,t,n){var o;return void 0===t||t&&"string"==typeof t&&void 0===n?void 0!==(o=this.get(e,t))?o:this.get(e,K.camelCase(t)):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,o,r,a=this.key(e),i=this.cache[a];if(void 0===t)this.cache[a]={};else{K.isArray(t)?o=t.concat(t.map(K.camelCase)):(r=K.camelCase(t),o=t in i?[t,r]:(o=r)in i?[o]:o.match(fe)||[]),n=o.length;for(;n--;)delete i[o[n]]}},hasData:function(e){return!K.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;K.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)}}),K.fn.extend({data:function(e,t){var n,o,r,a=this[0],i=a&&a.attributes;if(void 0===e){if(this.length&&(r=me.get(a),1===a.nodeType&&!ge.get(a,"hasDataAttrs"))){for(n=i.length;n--;)i[n]&&0===(o=i[n].name).indexOf("data-")&&(o=K.camelCase(o.slice(5)),u(a,o,r[o]));ge.set(a,"hasDataAttrs",!0)}return r}return"object"==typeof e?this.each((function(){me.set(this,e)})):he(this,(function(t){var n,o=K.camelCase(e);if(a&&void 0===t){if(void 0!==(n=me.get(a,e)))return n;if(void 0!==(n=me.get(a,o)))return n;if(void 0!==(n=u(a,o,void 0)))return n}else this.each((function(){var n=me.get(this,o);me.set(this,o,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)}))}}),K.extend({queue:function(e,t,n){var o;return e?(t=(t||"fx")+"queue",o=ge.get(e,t),n&&(!o||K.isArray(n)?o=ge.access(e,t,K.makeArray(n)):o.push(n)),o||[]):void 0},dequeue:function(e,t){t=t||"fx";var n=K.queue(e,t),o=n.length,r=n.shift(),a=K._queueHooks(e,t);"inprogress"===r&&(r=n.shift(),o--),r&&("fx"===t&&n.unshift("inprogress"),delete a.stop,r.call(e,(function(){K.dequeue(e,t)}),a)),!o&&a&&a.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return ge.get(e,n)||ge.access(e,n,{empty:K.Callbacks("once memory").add((function(){ge.remove(e,[t+"queue",n])}))})}}),K.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?K.queue(this[0],e):void 0===t?this:this.each((function(){var n=K.queue(this,e,t);K._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&K.dequeue(this,e)}))},dequeue:function(e){return this.each((function(){K.dequeue(this,e)}))},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,o=1,r=K.Deferred(),a=this,i=this.length,s=function(){--o||r.resolveWith(a,[a])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";i--;)(n=ge.get(a[i],e+"queueHooks"))&&n.empty&&(o++,n.empty.add(s));return s(),r.promise(t)}});var be=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,xe=["Top","Right","Bottom","Left"],we=function(e,t){return e=t||e,"none"===K.css(e,"display")||!K.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 o;var Le=/^key/,Ae=/^(?:mouse|pointer|contextmenu)|click/,Se=/^(?:focusinfocus|focusoutblur)$/,Te=/^([^.]*)(?:\.(.+)|)$/;K.event={global:{},add:function(e,t,n,o,r){var a,i,s,l,c,u,d,f,p,h,g,m=ge.get(e);if(m)for(n.handler&&(n=(a=n).handler,r=a.selector),n.guid||(n.guid=K.guid++),(l=m.events)||(l=m.events={}),(i=m.handle)||(i=m.handle=function(t){return typeof K!==Ce&&K.event.triggered!==t.type?K.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=K.event.special[p]||{},p=(r?d.delegateType:d.bindType)||p,d=K.event.special[p]||{},u=K.extend({type:p,origType:g,data:o,handler:n,guid:n.guid,selector:r,needsContext:r&&K.expr.match.needsContext.test(r),namespace:h.join(".")},a),(f=l[p])||((f=l[p]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(e,o,h,i)||e.addEventListener&&e.addEventListener(p,i,{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)),r?f.splice(f.delegateCount++,0,u):f.push(u),K.event.global[p]=!0)},remove:function(e,t,n,o,r){var a,i,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=K.event.special[p]||{},f=l[p=(o?d.delegateType:d.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=a=f.length;a--;)u=f[a],!r&&g!==u.origType||n&&n.guid!==u.guid||s&&!s.test(u.namespace)||o&&o!==u.selector&&("**"!==o||!u.selector)||(f.splice(a,1),u.selector&&f.delegateCount--,d.remove&&d.remove.call(e,u));i&&!f.length&&(d.teardown&&!1!==d.teardown.call(e,h,m.handle)||K.removeEvent(e,p,m.handle),delete l[p])}else for(p in l)K.event.remove(e,p+t[c],n,o,!0);K.isEmptyObject(l)&&(delete m.handle,ge.remove(e,"events"))}},trigger:function(e,t,n,r){var a,i,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(i=s=n=n||Y,3!==n.nodeType&&8!==n.nodeType&&!Se.test(p+K.event.triggered)&&(p.indexOf(".")>=0&&(h=p.split("."),p=h.shift(),h.sort()),c=p.indexOf(":")<0&&"on"+p,(e=e[K.expando]?e:new K.Event(p,"object"==typeof e&&e)).isTrigger=r?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]:K.makeArray(t,[e]),d=K.event.special[p]||{},r||!d.trigger||!1!==d.trigger.apply(n,t))){if(!r&&!d.noBubble&&!K.isWindow(n)){for(l=d.delegateType||p,Se.test(l+p)||(i=i.parentNode);i;i=i.parentNode)f.push(i),s=i;s===(n.ownerDocument||Y)&&f.push(s.defaultView||s.parentWindow||o)}for(a=0;(i=f[a++])&&!e.isPropagationStopped();)e.type=a>1?l:d.bindType||p,(u=(ge.get(i,"events")||{})[e.type]&&ge.get(i,"handle"))&&u.apply(i,t),(u=c&&i[c])&&u.apply&&K.acceptData(i)&&(e.result=u.apply(i,t),!1===e.result&&e.preventDefault());return e.type=p,r||e.isDefaultPrevented()||d._default&&!1!==d._default.apply(f.pop(),t)||!K.acceptData(n)||c&&K.isFunction(n[p])&&!K.isWindow(n)&&((s=n[c])&&(n[c]=null),K.event.triggered=p,n[p](),K.event.triggered=void 0,s&&(n[c]=s)),e.result}},dispatch:function(e){e=K.event.fix(e);var t,n,o,r,a,i=[],s=H.call(arguments),l=(ge.get(this,"events")||{})[e.type]||[],c=K.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,e)){for(i=K.event.handlers.call(this,e,l),t=0;(r=i[t++])&&!e.isPropagationStopped();)for(e.currentTarget=r.elem,n=0;(a=r.handlers[n++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(a.namespace))&&(e.handleObj=a,e.data=a.data,void 0!==(o=((K.event.special[a.origType]||{}).handle||a.handler).apply(r.elem,s))&&!1===(e.result=o)&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,o,r,a,i=[],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(o=[],n=0;s>n;n++)void 0===o[r=(a=t[n]).selector+" "]&&(o[r]=a.needsContext?K(r,this).index(l)>=0:K.find(r,this,null,[l]).length),o[r]&&o.push(a);o.length&&i.push({elem:l,handlers:o})}return s<t.length&&i.push({elem:this,handlers:t.slice(s)}),i},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,o,r,a=t.button;return null==e.pageX&&null!=t.clientX&&(o=(n=e.target.ownerDocument||Y).documentElement,r=n.body,e.pageX=t.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=t.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),e.which||void 0===a||(e.which=1&a?1:2&a?3:4&a?2:0),e}},fix:function(e){if(e[K.expando])return e;var t,n,o,r=e.type,a=e,i=this.fixHooks[r];for(i||(this.fixHooks[r]=i=Ae.test(r)?this.mouseHooks:Le.test(r)?this.keyHooks:{}),o=i.props?this.props.concat(i.props):this.props,e=new K.Event(a),t=o.length;t--;)e[n=o[t]]=a[n];return e.target||(e.target=Y),3===e.target.nodeType&&(e.target=e.target.parentNode),i.filter?i.filter(e,a):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&&K.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(e){return K.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,o){var r=K.extend(new K.Event,n,{type:e,isSimulated:!0,originalEvent:{}});o?K.event.trigger(r,null,t):K.event.dispatch.call(t,r),r.isDefaultPrevented()&&n.preventDefault()}},K.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},K.Event=function(e,t){return this instanceof K.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&&K.extend(this,t),this.timeStamp=e&&e.timeStamp||K.now(),void(this[K.expando]=!0)):new K.Event(e,t)},K.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()}},K.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},(function(e,t){K.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,o=e.relatedTarget,r=e.handleObj;return(!o||o!==this&&!K.contains(this,o))&&(e.type=r.origType,n=r.handler.apply(this,arguments),e.type=t),n}}})),X.focusinBubbles||K.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){K.event.simulate(t,e.target,K.event.fix(e),!0)};K.event.special[t]={setup:function(){var o=this.ownerDocument||this,r=ge.access(o,t);r||o.addEventListener(e,n,!0),ge.access(o,t,(r||0)+1)},teardown:function(){var o=this.ownerDocument||this,r=ge.access(o,t)-1;r?ge.access(o,t,r):(o.removeEventListener(e,n,!0),ge.remove(o,t))}}})),K.fn.extend({on:function(e,t,n,o,r){var a,i;if("object"==typeof e){for(i in"string"!=typeof t&&(n=n||t,t=void 0),e)this.on(i,t,n,e[i],r);return this}if(null==n&&null==o?(o=t,n=t=void 0):null==o&&("string"==typeof t?(o=n,n=void 0):(o=n,n=t,t=void 0)),!1===o)o=f;else if(!o)return this;return 1===r&&(a=o,o=function(e){return K().off(e),a.apply(this,arguments)},o.guid=a.guid||(a.guid=K.guid++)),this.each((function(){K.event.add(this,e,o,n,t)}))},one:function(e,t,n,o){return this.on(e,t,n,o,1)},off:function(e,t,n){var o,r;if(e&&e.preventDefault&&e.handleObj)return o=e.handleObj,K(e.delegateTarget).off(o.namespace?o.origType+"."+o.namespace:o.origType,o.selector,o.handler),this;if("object"==typeof e){for(r in e)this.off(r,t,e[r]);return this}return(!1===t||"function"==typeof t)&&(n=t,t=void 0),!1===n&&(n=f),this.each((function(){K.event.remove(this,e,n,t)}))},trigger:function(e,t){return this.each((function(){K.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];return n?K.event.trigger(e,t,n,!0):void 0}});var ke=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Ne=/<([\w:]+)/,Oe=/<|&#?\w+;/,De=/<(?:script|style|link)/i,qe=/checked\s*(?:[^=]|=\s*.checked.)/i,$e=/^$|\/(?:java|ecma)script/i,_e=/^true\/(.*)/,Pe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,je={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,"",""]};je.optgroup=je.option,je.tbody=je.tfoot=je.colgroup=je.caption=je.thead,je.th=je.td,K.extend({clone:function(e,t,n){var o,r,a,i,s=e.cloneNode(!0),l=K.contains(e.ownerDocument,e);if(!(X.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||K.isXMLDoc(e)))for(i=b(s),o=0,r=(a=b(e)).length;r>o;o++)x(a[o],i[o]);if(t)if(n)for(a=a||b(e),i=i||b(s),o=0,r=a.length;r>o;o++)y(a[o],i[o]);else y(e,s);return(i=b(s,"script")).length>0&&v(i,!l&&b(e,"script")),s},buildFragment:function(e,t,n,o){for(var r,a,i,s,l,c,u=t.createDocumentFragment(),d=[],f=0,p=e.length;p>f;f++)if((r=e[f])||0===r)if("object"===K.type(r))K.merge(d,r.nodeType?[r]:r);else if(Oe.test(r)){for(a=a||u.appendChild(t.createElement("div")),i=(Ne.exec(r)||["",""])[1].toLowerCase(),s=je[i]||je._default,a.innerHTML=s[1]+r.replace(ke,"<$1></$2>")+s[2],c=s[0];c--;)a=a.lastChild;K.merge(d,a.childNodes),(a=u.firstChild).textContent=""}else d.push(t.createTextNode(r));for(u.textContent="",f=0;r=d[f++];)if((!o||-1===K.inArray(r,o))&&(l=K.contains(r.ownerDocument,r),a=b(u.appendChild(r),"script"),l&&v(a),n))for(c=0;r=a[c++];)$e.test(r.type||"")&&n.push(r);return u},cleanData:function(e){for(var t,n,o,r,a=K.event.special,i=0;void 0!==(n=e[i]);i++){if(K.acceptData(n)&&(r=n[ge.expando])&&(t=ge.cache[r])){if(t.events)for(o in t.events)a[o]?K.event.remove(n,o):K.removeEvent(n,o,t.handle);ge.cache[r]&&delete ge.cache[r]}delete me.cache[n[me.expando]]}}}),K.fn.extend({text:function(e){return he(this,(function(e){return void 0===e?K.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,o=e?K.filter(e,this):this,r=0;null!=(n=o[r]);r++)t||1!==n.nodeType||K.cleanData(b(n)),n.parentNode&&(t&&K.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&&(K.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 K.clone(this,e,t)}))},html:function(e){return he(this,(function(e){var t=this[0]||{},n=0,o=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!De.test(e)&&!je[(Ne.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(ke,"<$1></$2>");try{for(;o>n;n++)1===(t=this[n]||{}).nodeType&&(K.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,K.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,o,r,a,i,s,l=0,c=this.length,u=this,d=c-1,f=e[0],p=K.isFunction(f);if(p||c>1&&"string"==typeof f&&!X.checkClone&&qe.test(f))return this.each((function(n){var o=u.eq(n);p&&(e[0]=f.call(this,n,o.html())),o.domManip(e,t)}));if(c&&(o=(n=K.buildFragment(e,this[0].ownerDocument,!1,this)).firstChild,1===n.childNodes.length&&(n=o),o)){for(a=(r=K.map(b(n,"script"),g)).length;c>l;l++)i=n,l!==d&&(i=K.clone(i,!0,!0),a&&K.merge(r,b(i,"script"))),t.call(this[l],i,l);if(a)for(s=r[r.length-1].ownerDocument,K.map(r,m),l=0;a>l;l++)i=r[l],$e.test(i.type||"")&&!ge.access(i,"globalEval")&&K.contains(s,i)&&(i.src?K._evalUrl&&K._evalUrl(i.src):K.globalEval(i.textContent.replace(Pe,"")))}return this}}),K.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},(function(e,t){K.fn[e]=function(e){for(var n,o=[],r=K(e),a=r.length-1,i=0;a>=i;i++)n=i===a?this:this.clone(!0),K(r[i])[t](n),U.apply(o,n.get());return this.pushStack(o)}}));var Ie,Fe={},Me=/^margin/,Re=new RegExp("^("+be+")(?!px)[a-z%]+$","i"),He=function(e){return e.ownerDocument.defaultView.getComputedStyle(e,null)};!function(){function e(){i.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",i.innerHTML="",r.appendChild(a);var e=o.getComputedStyle(i,null);t="1%"!==e.top,n="4px"===e.width,r.removeChild(a)}var t,n,r=Y.documentElement,a=Y.createElement("div"),i=Y.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",X.clearCloneStyle="content-box"===i.style.backgroundClip,a.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",a.appendChild(i),o.getComputedStyle&&K.extend(X,{pixelPosition:function(){return e(),t},boxSizingReliable:function(){return null==n&&e(),n},reliableMarginRight:function(){var e,t=i.appendChild(Y.createElement("div"));return t.style.cssText=i.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",i.style.width="1px",r.appendChild(a),e=!parseFloat(o.getComputedStyle(t,null).marginRight),r.removeChild(a),e}}))}(),K.swap=function(e,t,n,o){var r,a,i={};for(a in t)i[a]=e.style[a],e.style[a]=t[a];for(a in r=n.apply(e,o||[]),t)e.style[a]=i[a];return r};var Be=/^(none|table(?!-c[ea]).+)/,Ue=new RegExp("^("+be+")(.*)$","i"),We=new RegExp("^([+-])=("+be+")","i"),ze={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","O","Moz","ms"];K.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,o){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var r,a,i,s=K.camelCase(t),l=e.style;return t=K.cssProps[s]||(K.cssProps[s]=A(l,s)),i=K.cssHooks[t]||K.cssHooks[s],void 0===n?i&&"get"in i&&void 0!==(r=i.get(e,!1,o))?r:l[t]:("string"==(a=typeof n)&&(r=We.exec(n))&&(n=(r[1]+1)*r[2]+parseFloat(K.css(e,t)),a="number"),void(null!=n&&n==n&&("number"!==a||K.cssNumber[s]||(n+="px"),X.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),i&&"set"in i&&void 0===(n=i.set(e,n,o))||(l[t]=n))))}},css:function(e,t,n,o){var r,a,i,s=K.camelCase(t);return t=K.cssProps[s]||(K.cssProps[s]=A(e.style,s)),(i=K.cssHooks[t]||K.cssHooks[s])&&"get"in i&&(r=i.get(e,!0,n)),void 0===r&&(r=C(e,t,o)),"normal"===r&&t in Ve&&(r=Ve[t]),""===n||n?(a=parseFloat(r),!0===n||K.isNumeric(a)?a||0:r):r}}),K.each(["height","width"],(function(e,t){K.cssHooks[t]={get:function(e,n,o){return n?Be.test(K.css(e,"display"))&&0===e.offsetWidth?K.swap(e,ze,(function(){return k(e,t,o)})):k(e,t,o):void 0},set:function(e,n,o){var r=o&&He(e);return S(0,n,o?T(e,t,o,"border-box"===K.css(e,"boxSizing",!1,r),r):0)}}})),K.cssHooks.marginRight=L(X.reliableMarginRight,(function(e,t){return t?K.swap(e,{display:"inline-block"},C,[e,"marginRight"]):void 0})),K.each({margin:"",padding:"",border:"Width"},(function(e,t){K.cssHooks[e+t]={expand:function(n){for(var o=0,r={},a="string"==typeof n?n.split(" "):[n];4>o;o++)r[e+xe[o]+t]=a[o]||a[o-2]||a[0];return r}},Me.test(e)||(K.cssHooks[e+t].set=S)})),K.fn.extend({css:function(e,t){return he(this,(function(e,t,n){var o,r,a={},i=0;if(K.isArray(t)){for(o=He(e),r=t.length;r>i;i++)a[t[i]]=K.css(e,t[i],!1,o);return a}return void 0!==n?K.style(e,t,n):K.css(e,t)}),e,t,arguments.length>1)},show:function(){return N(this,!0)},hide:function(){return N(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each((function(){we(this)?K(this).show():K(this).hide()}))}}),K.Tween=O,O.prototype={constructor:O,init:function(e,t,n,o,r,a){this.elem=e,this.prop=n,this.easing=r||"swing",this.options=t,this.start=this.now=this.cur(),this.end=o,this.unit=a||(K.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?K.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=K.css(e.elem,e.prop,""))&&"auto"!==t?t:0:e.elem[e.prop]},set:function(e){K.fx.step[e.prop]?K.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[K.cssProps[e.prop]]||K.cssHooks[e.prop])?K.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)}},K.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},K.fx=O.prototype.init,K.fx.step={};var Xe,Ye,Je=/^(?:toggle|show|hide)$/,Ke=new RegExp("^(?:([+-])=|)("+be+")([a-z%]*)$","i"),Qe=/queueHooks$/,Ze=[function(e,t,n){var o,r,a,i,s,l,c,u=this,d={},f=e.style,p=e.nodeType&&we(e),h=ge.get(e,"fxshow");for(o in n.queue||(null==(s=K._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--,K.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=K.css(e,"display"))?ge.get(e,"olddisplay")||E(e.nodeName):c)&&"none"===K.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(r=t[o],Je.exec(r)){if(delete t[o],a=a||"toggle"===r,r===(p?"hide":"show")){if("show"!==r||!h||void 0===h[o])continue;p=!0}d[o]=h&&h[o]||K.style(e,o)}else c=void 0;if(K.isEmptyObject(d))"inline"===("none"===c?E(e.nodeName):c)&&(f.display=c);else for(o in h?"hidden"in h&&(p=h.hidden):h=ge.access(e,"fxshow",{}),a&&(h.hidden=!p),p?K(e).show():u.done((function(){K(e).hide()})),u.done((function(){var t;for(t in ge.remove(e,"fxshow"),d)K.style(e,t,d[t])})),d)i=$(p?h[o]:0,o,u),o in h||(h[o]=i.start,p&&(i.end=i.start,i.start="width"===o||"height"===o?1:0))}],et={"*":[function(e,t){var n=this.createTween(e,t),o=n.cur(),r=Ke.exec(t),a=r&&r[3]||(K.cssNumber[e]?"":"px"),i=(K.cssNumber[e]||"px"!==a&&+o)&&Ke.exec(K.css(n.elem,e)),s=1,l=20;if(i&&i[3]!==a){a=a||i[3],r=r||[],i=+o||1;do{i/=s=s||".5",K.style(n.elem,e,i+a)}while(s!==(s=n.cur()/o)&&1!==s&&--l)}return r&&(i=n.start=+i||+o||0,n.unit=a,n.end=r[1]?i+(r[1]+1)*r[2]:+r[2]),n}]};K.Animation=K.extend(_,{tweener:function(e,t){K.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,o=0,r=e.length;r>o;o++)n=e[o],et[n]=et[n]||[],et[n].unshift(t)},prefilter:function(e,t){t?Ze.unshift(e):Ze.push(e)}}),K.speed=function(e,t,n){var o=e&&"object"==typeof e?K.extend({},e):{complete:n||!n&&t||K.isFunction(e)&&e,duration:e,easing:n&&t||t&&!K.isFunction(t)&&t};return o.duration=K.fx.off?0:"number"==typeof o.duration?o.duration:o.duration in K.fx.speeds?K.fx.speeds[o.duration]:K.fx.speeds._default,(null==o.queue||!0===o.queue)&&(o.queue="fx"),o.old=o.complete,o.complete=function(){K.isFunction(o.old)&&o.old.call(this),o.queue&&K.dequeue(this,o.queue)},o},K.fn.extend({fadeTo:function(e,t,n,o){return this.filter(we).css("opacity",0).show().end().animate({opacity:t},e,n,o)},animate:function(e,t,n,o){var r=K.isEmptyObject(e),a=K.speed(t,n,o),i=function(){var t=_(this,K.extend({},e),a);(r||ge.get(this,"finish"))&&t.stop(!0)};return i.finish=i,r||!1===a.queue?this.each(i):this.queue(a.queue,i)},stop:function(e,t,n){var o=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each((function(){var t=!0,r=null!=e&&e+"queueHooks",a=K.timers,i=ge.get(this);if(r)i[r]&&i[r].stop&&o(i[r]);else for(r in i)i[r]&&i[r].stop&&Qe.test(r)&&o(i[r]);for(r=a.length;r--;)a[r].elem!==this||null!=e&&a[r].queue!==e||(a[r].anim.stop(n),t=!1,a.splice(r,1));(t||!n)&&K.dequeue(this,e)}))},finish:function(e){return!1!==e&&(e=e||"fx"),this.each((function(){var t,n=ge.get(this),o=n[e+"queue"],r=n[e+"queueHooks"],a=K.timers,i=o?o.length:0;for(n.finish=!0,K.queue(this,e,[]),r&&r.stop&&r.stop.call(this,!0),t=a.length;t--;)a[t].elem===this&&a[t].queue===e&&(a[t].anim.stop(!0),a.splice(t,1));for(t=0;i>t;t++)o[t]&&o[t].finish&&o[t].finish.call(this);delete n.finish}))}}),K.each(["toggle","show","hide"],(function(e,t){var n=K.fn[t];K.fn[t]=function(e,o,r){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(q(t,!0),e,o,r)}})),K.each({slideDown:q("show"),slideUp:q("hide"),slideToggle:q("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},(function(e,t){K.fn[e]=function(e,n,o){return this.animate(t,e,n,o)}})),K.timers=[],K.fx.tick=function(){var e,t=0,n=K.timers;for(Xe=K.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||K.fx.stop(),Xe=void 0},K.fx.timer=function(e){K.timers.push(e),e()?K.fx.start():K.timers.pop()},K.fx.interval=13,K.fx.start=function(){Ye||(Ye=setInterval(K.fx.tick,K.fx.interval))},K.fx.stop=function(){clearInterval(Ye),Ye=null},K.fx.speeds={slow:600,fast:200,_default:400},K.fn.delay=function(e,t){return e=K.fx&&K.fx.speeds[e]||e,t=t||"fx",this.queue(t,(function(t,n){var o=setTimeout(t,e);n.stop=function(){clearTimeout(o)}}))},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=K.expr.attrHandle;K.fn.extend({attr:function(e,t){return he(this,K.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each((function(){K.removeAttr(this,e)}))}}),K.extend({attr:function(e,t,n){var o,r,a=e.nodeType;if(e&&3!==a&&8!==a&&2!==a)return typeof e.getAttribute===Ce?K.prop(e,t,n):(1===a&&K.isXMLDoc(e)||(t=t.toLowerCase(),o=K.attrHooks[t]||(K.expr.match.bool.test(t)?tt:void 0)),void 0===n?o&&"get"in o&&null!==(r=o.get(e,t))?r:null==(r=K.find.attr(e,t))?void 0:r:null!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+""),n):void K.removeAttr(e,t))},removeAttr:function(e,t){var n,o,r=0,a=t&&t.match(fe);if(a&&1===e.nodeType)for(;n=a[r++];)o=K.propFix[n]||n,K.expr.match.bool.test(n)&&(e[o]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!X.radioValue&&"radio"===t&&K.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?K.removeAttr(e,n):e.setAttribute(n,n),n}},K.each(K.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=nt[t]||K.find.attr;nt[t]=function(e,t,o){var r,a;return o||(a=nt[t],nt[t]=r,r=null!=n(e,t,o)?t.toLowerCase():null,nt[t]=a),r}}));var ot=/^(?:input|select|textarea|button)$/i;K.fn.extend({prop:function(e,t){return he(this,K.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[K.propFix[e]||e]}))}}),K.extend({propFix:{for:"htmlFor",class:"className"},prop:function(e,t,n){var o,r,a=e.nodeType;if(e&&3!==a&&8!==a&&2!==a)return(1!==a||!K.isXMLDoc(e))&&(t=K.propFix[t]||t,r=K.propHooks[t]),void 0!==n?r&&"set"in r&&void 0!==(o=r.set(e,n,t))?o:e[t]=n:r&&"get"in r&&null!==(o=r.get(e,t))?o:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||ot.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),X.optSelected||(K.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),K.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){K.propFix[this.toLowerCase()]=this}));var rt=/[\t\r\n\f]/g;K.fn.extend({addClass:function(e){var t,n,o,r,a,i,s="string"==typeof e&&e,l=0,c=this.length;if(K.isFunction(e))return this.each((function(t){K(this).addClass(e.call(this,t,this.className))}));if(s)for(t=(e||"").match(fe)||[];c>l;l++)if(o=1===(n=this[l]).nodeType&&(n.className?(" "+n.className+" ").replace(rt," "):" ")){for(a=0;r=t[a++];)o.indexOf(" "+r+" ")<0&&(o+=r+" ");i=K.trim(o),n.className!==i&&(n.className=i)}return this},removeClass:function(e){var t,n,o,r,a,i,s=0===arguments.length||"string"==typeof e&&e,l=0,c=this.length;if(K.isFunction(e))return this.each((function(t){K(this).removeClass(e.call(this,t,this.className))}));if(s)for(t=(e||"").match(fe)||[];c>l;l++)if(o=1===(n=this[l]).nodeType&&(n.className?(" "+n.className+" ").replace(rt," "):"")){for(a=0;r=t[a++];)for(;o.indexOf(" "+r+" ")>=0;)o=o.replace(" "+r+" "," ");i=e?K.trim(o):"",n.className!==i&&(n.className=i)}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(K.isFunction(e)?function(n){K(this).toggleClass(e.call(this,n,this.className,t),t)}:function(){if("string"===n)for(var t,o=0,r=K(this),a=e.match(fe)||[];t=a[o++];)r.hasClass(t)?r.removeClass(t):r.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,o=this.length;o>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(rt," ").indexOf(t)>=0)return!0;return!1}});var at=/\r/g;K.fn.extend({val:function(e){var t,n,o,r=this[0];return arguments.length?(o=K.isFunction(e),this.each((function(n){var r;1===this.nodeType&&(null==(r=o?e.call(this,n,K(this).val()):e)?r="":"number"==typeof r?r+="":K.isArray(r)&&(r=K.map(r,(function(e){return null==e?"":e+""}))),(t=K.valHooks[this.type]||K.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,r,"value")||(this.value=r))}))):r?(t=K.valHooks[r.type]||K.valHooks[r.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(r,"value"))?n:"string"==typeof(n=r.value)?n.replace(at,""):null==n?"":n:void 0}}),K.extend({valHooks:{option:{get:function(e){var t=K.find.attr(e,"value");return null!=t?t:K.trim(K.text(e))}},select:{get:function(e){for(var t,n,o=e.options,r=e.selectedIndex,a="select-one"===e.type||0>r,i=a?null:[],s=a?r+1:o.length,l=0>r?s:a?r:0;s>l;l++)if(!(!(n=o[l]).selected&&l!==r||(X.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&K.nodeName(n.parentNode,"optgroup"))){if(t=K(n).val(),a)return t;i.push(t)}return i},set:function(e,t){for(var n,o,r=e.options,a=K.makeArray(t),i=r.length;i--;)((o=r[i]).selected=K.inArray(o.value,a)>=0)&&(n=!0);return n||(e.selectedIndex=-1),a}}}}),K.each(["radio","checkbox"],(function(){K.valHooks[this]={set:function(e,t){return K.isArray(t)?e.checked=K.inArray(K(e).val(),t)>=0:void 0}},X.checkOn||(K.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),K.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){K.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}})),K.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,o){return this.on(t,e,n,o)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var it=K.now(),st=/\?/;K.parseJSON=function(e){return JSON.parse(e+"")},K.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)&&K.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())||[],K.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":K.parseJSON,"text xml":K.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?I(I(e,K.ajaxSettings),t):I(K.ajaxSettings,e)},ajaxPrefilter:P(mt),ajaxTransport:P(vt),ajax:function(e,t){function n(e,t,n,i){var l,u,v,y,x,E=t;2!==b&&(b=2,s&&clearTimeout(s),o=void 0,a=i||"",w.readyState=e>0?4:0,l=e>=200&&300>e||304===e,n&&(y=function(e,t,n){for(var o,r,a,i,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===o&&(o=e.mimeType||t.getResponseHeader("Content-Type"));if(o)for(r in s)if(s[r]&&s[r].test(o)){l.unshift(r);break}if(l[0]in n)a=l[0];else{for(r in n){if(!l[0]||e.converters[r+" "+l[0]]){a=r;break}i||(i=r)}a=a||i}return a?(a!==l[0]&&l.unshift(a),n[a]):void 0}(d,w,n)),y=function(e,t,n,o){var r,a,i,s,l,c={},u=e.dataTypes.slice();if(u[1])for(i in e.converters)c[i.toLowerCase()]=e.converters[i];for(a=u.shift();a;)if(e.responseFields[a]&&(n[e.responseFields[a]]=t),!l&&o&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=a,a=u.shift())if("*"===a)a=l;else if("*"!==l&&l!==a){if(!(i=c[l+" "+a]||c["* "+a]))for(r in c)if((s=r.split(" "))[1]===a&&(i=c[l+" "+s[0]]||c["* "+s[0]])){!0===i?i=c[r]:!0!==c[r]&&(a=s[0],u.unshift(s[1]));break}if(!0!==i)if(i&&e.throws)t=i(t);else try{t=i(t)}catch(e){return{state:"parsererror",error:i?e:"No conversion from "+l+" to "+a}}}return{state:"success",data:t}}(d,y,w,l),l?(d.ifModified&&((x=w.getResponseHeader("Last-Modified"))&&(K.lastModified[r]=x),(x=w.getResponseHeader("etag"))&&(K.etag[r]=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]),--K.active||K.event.trigger("ajaxStop")))}"object"==typeof e&&(t=e,e=void 0),t=t||{};var o,r,a,i,s,l,c,u,d=K.ajaxSetup({},t),f=d.context||d,p=d.context&&(f.nodeType||f.jquery)?K(f):K.event,h=K.Deferred(),g=K.Callbacks("once memory"),m=d.statusCode||{},v={},y={},b=0,x="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!i)for(i={};t=ft.exec(a);)i[t[1].toLowerCase()]=t[2];t=i[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a: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 o&&o.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=K.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=K.param(d.data,d.traditional)),j(mt,d,t,w),2===b)return w;for(u in(c=d.global)&&0==K.active++&&K.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!pt.test(d.type),r=d.url,d.hasContent||(d.data&&(r=d.url+=(st.test(r)?"&":"?")+d.data,delete d.data),!1===d.cache&&(d.url=dt.test(r)?r.replace(dt,"$1_="+it++):r+(st.test(r)?"&":"?")+"_="+it++)),d.ifModified&&(K.lastModified[r]&&w.setRequestHeader("If-Modified-Since",K.lastModified[r]),K.etag[r]&&w.setRequestHeader("If-None-Match",K.etag[r])),(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(o=j(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,o.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 K.get(e,t,n,"json")},getScript:function(e,t){return K.get(e,void 0,t,"script")}}),K.each(["get","post"],(function(e,t){K[t]=function(e,n,o,r){return K.isFunction(n)&&(r=r||o,o=n,n=void 0),K.ajax({url:e,type:t,dataType:r,data:n,success:o})}})),K.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],(function(e,t){K.fn[t]=function(e){return this.on(t,e)}})),K._evalUrl=function(e){return K.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},K.fn.extend({wrapAll:function(e){var t;return K.isFunction(e)?this.each((function(t){K(this).wrapAll(e.call(this,t))})):(this[0]&&(t=K(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(K.isFunction(e)?function(t){K(this).wrapInner(e.call(this,t))}:function(){var t=K(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=K.isFunction(e);return this.each((function(n){K(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(){return this.parent().each((function(){K.nodeName(this,"body")||K(this).replaceWith(this.childNodes)})).end()}}),K.expr.filters.hidden=function(e){return e.offsetWidth<=0&&e.offsetHeight<=0},K.expr.filters.visible=function(e){return!K.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;K.param=function(e,t){var n,o=[],r=function(e,t){t=K.isFunction(t)?t():null==t?"":t,o[o.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=K.ajaxSettings&&K.ajaxSettings.traditional),K.isArray(e)||e.jquery&&!K.isPlainObject(e))K.each(e,(function(){r(this.name,this.value)}));else for(n in e)F(n,e[n],t,r);return o.join("&").replace(bt,"+")},K.fn.extend({serialize:function(){return K.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=K.prop(this,"elements");return e?K.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!K(this).is(":disabled")&&Ct.test(this.nodeName)&&!Et.test(e)&&(this.checked||!Ee.test(e))})).map((function(e,t){var n=K(this).val();return null==n?null:K.isArray(n)?K.map(n,(function(e){return{name:t.name,value:e.replace(wt,"\r\n")}})):{name:t.name,value:n.replace(wt,"\r\n")}})).get()}}),K.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(e){}};var Lt=0,At={},St={0:200,1223:204},Tt=K.ajaxSettings.xhr();o.ActiveXObject&&K(o).on("unload",(function(){for(var e in At)At[e]()})),X.cors=!!Tt&&"withCredentials"in Tt,X.ajax=Tt=!!Tt,K.ajaxTransport((function(e){var t;return X.cors||Tt&&!e.crossDomain?{send:function(n,o){var r,a=e.xhr(),i=++Lt;if(a.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(r in e.xhrFields)a[r]=e.xhrFields[r];for(r in e.mimeType&&a.overrideMimeType&&a.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest"),n)a.setRequestHeader(r,n[r]);t=function(e){return function(){t&&(delete At[i],t=a.onload=a.onerror=null,"abort"===e?a.abort():"error"===e?o(a.status,a.statusText):o(St[a.status]||a.status,a.statusText,"string"==typeof a.responseText?{text:a.responseText}:void 0,a.getAllResponseHeaders()))}},a.onload=t(),a.onerror=t("error"),t=At[i]=t("abort");try{a.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}:void 0})),K.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return K.globalEval(e),e}}}),K.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),K.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain)return{send:function(o,r){t=K("<script>").prop({async:!0,charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&r("error"===e.type?404:200,e.type)}),Y.head.appendChild(t[0])},abort:function(){n&&n()}}}));var kt=[],Nt=/(=)\?(?=&|$)|\?\?/;K.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=kt.pop()||K.expando+"_"+it++;return this[e]=!0,e}}),K.ajaxPrefilter("json jsonp",(function(e,t,n){var r,a,i,s=!1!==e.jsonp&&(Nt.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Nt.test(e.data)&&"data");return s||"jsonp"===e.dataTypes[0]?(r=e.jsonpCallback=K.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(Nt,"$1"+r):!1!==e.jsonp&&(e.url+=(st.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return i||K.error(r+" was not called"),i[0]},e.dataTypes[0]="json",a=o[r],o[r]=function(){i=arguments},n.always((function(){o[r]=a,e[r]&&(e.jsonpCallback=t.jsonpCallback,kt.push(r)),i&&K.isFunction(a)&&a(i[0]),i=a=void 0})),"script"):void 0})),K.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||Y;var o=re.exec(e),r=!n&&[];return o?[t.createElement(o[1])]:(o=K.buildFragment([e],t,r),r&&r.length&&K(r).remove(),K.merge([],o.childNodes))};var Ot=K.fn.load;K.fn.load=function(e,t,n){if("string"!=typeof e&&Ot)return Ot.apply(this,arguments);var o,r,a,i=this,s=e.indexOf(" ");return s>=0&&(o=K.trim(e.slice(s)),e=e.slice(0,s)),K.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(r="POST"),i.length>0&&K.ajax({url:e,type:r,dataType:"html",data:t}).done((function(e){a=arguments,i.html(o?K("<div>").append(K.parseHTML(e)).find(o):e)})).complete(n&&function(e,t){i.each(n,a||[e.responseText,t,e])}),this},K.expr.filters.animated=function(e){return K.grep(K.timers,(function(t){return e===t.elem})).length};var Dt=o.document.documentElement;K.offset={setOffset:function(e,t,n){var o,r,a,i,s,l,c=K.css(e,"position"),u=K(e),d={};"static"===c&&(e.style.position="relative"),s=u.offset(),a=K.css(e,"top"),l=K.css(e,"left"),("absolute"===c||"fixed"===c)&&(a+l).indexOf("auto")>-1?(i=(o=u.position()).top,r=o.left):(i=parseFloat(a)||0,r=parseFloat(l)||0),K.isFunction(t)&&(t=t.call(e,n,s)),null!=t.top&&(d.top=t.top-s.top+i),null!=t.left&&(d.left=t.left-s.left+r),"using"in t?t.using.call(e,d):u.css(d)}},K.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){K.offset.setOffset(this,e,t)}));var t,n,o=this[0],r={top:0,left:0},a=o&&o.ownerDocument;return a?(t=a.documentElement,K.contains(t,o)?(typeof o.getBoundingClientRect!==Ce&&(r=o.getBoundingClientRect()),n=M(a),{top:r.top+n.pageYOffset-t.clientTop,left:r.left+n.pageXOffset-t.clientLeft}):r):void 0},position:function(){if(this[0]){var e,t,n=this[0],o={top:0,left:0};return"fixed"===K.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),K.nodeName(e[0],"html")||(o=e.offset()),o.top+=K.css(e[0],"borderTopWidth",!0),o.left+=K.css(e[0],"borderLeftWidth",!0)),{top:t.top-o.top-K.css(n,"marginTop",!0),left:t.left-o.left-K.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent||Dt;e&&!K.nodeName(e,"html")&&"static"===K.css(e,"position");)e=e.offsetParent;return e||Dt}))}}),K.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},(function(e,t){var n="pageYOffset"===t;K.fn[e]=function(r){return he(this,(function(e,r,a){var i=M(e);return void 0===a?i?i[t]:e[r]:void(i?i.scrollTo(n?o.pageXOffset:a,n?a:o.pageYOffset):e[r]=a)}),e,r,arguments.length,null)}})),K.each(["top","left"],(function(e,t){K.cssHooks[t]=L(X.pixelPosition,(function(e,n){return n?(n=C(e,t),Re.test(n)?K(e).position()[t]+"px":n):void 0}))})),K.each({Height:"height",Width:"width"},(function(e,t){K.each({padding:"inner"+e,content:t,"":"outer"+e},(function(n,o){K.fn[o]=function(o,r){var a=arguments.length&&(n||"boolean"!=typeof o),i=n||(!0===o||!0===r?"margin":"border");return he(this,(function(t,n,o){var r;return K.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(r=t.documentElement,Math.max(t.body["scroll"+e],r["scroll"+e],t.body["offset"+e],r["offset"+e],r["client"+e])):void 0===o?K.css(t,n,i):K.style(t,n,o,i)}),t,a?o:void 0,a,null)}}))})),K.fn.size=function(){return this.length},K.fn.andSelf=K.fn.addBack,void 0===(n=function(){return K}.apply(t,[]))||(e.exports=n);var qt=o.jQuery,$t=o.$;return K.noConflict=function(e){return o.$===K&&(o.$=$t),e&&o.jQuery===K&&(o.jQuery=qt),K},typeof r===Ce&&(o.jQuery=o.$=K),K},"object"==typeof e.exports?e.exports=o.document?r(o,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return r(e)}:r(o)},816:()=>{function e(e){return null==e||null==e||""==e||"string"==typeof e&&""==e.trim()}function t(e){var t=$(e).closest("[data-back-to-top-container]").offset();null!=t?$("html,body").animate({scrollTop:t.top},700):$("html,body").animate({scrollTop:0},700)}function n(e){$("html,body").animate({scrollTop:$(window).height()-$("#agora-layout-header").height()},700)}agora((function(){function o(){var e=$(this),t=$("#"+e.data("page-scroll")),n=null!=t&&null!=t&&t.length>0?t.offset().top:0,o=0;try{var r=e.data("page-scroll-offset");o=void 0!==r&&""!=r?parseInt(r):$("#agora-layout-header").height()}catch(e){}$("html, body").animate({scrollTop:n-o},1500);try{$("#"+e.data("page-scroll-tab-id")).trigger("click")}catch(e){}}jQuery.fn.ForceNumericOnly=function(){return this.each((function(){$(this).keydown((function(e){var t=e.charCode||e.keyCode||0;return e.shiftKey&&(t=0),8==t||9==t||13==t||46==t||110==t||190==t||t>=35&&t<=40||t>=48&&t<=57||t>=96&&t<=105}))}))},$("[data-numeric-only]").ForceNumericOnly(),$(document).ready((function(){$("[data-numeric-only]").ForceNumericOnly()})),$(document).on("click","[data-page-scroll]",o),$(document).on("tap","[data-page-scroll]",o),$(document).on("click","[data-back-to-top]",(function(){t(this)})),$(document).on("tap","[data-back-to-top]",(function(){t(this)})),$(document).on("click","[data-back-to-down]",(function(){n()})),$(document).on("tap","[data-back-to-down]",(function(){n()})),$(document).on("click","[data-href]",(function(t){$(t.target).closest("[data-non-click-content]").length>0||e($(this).data("href"))||(e($(this).data("target"))?location.href=$(this).data("href"):window.open($(this).data("href"),$(this).data("target")))}))}))},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"," "),window.agLanguage.refreshLocale())}_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:()=>{function e(e){return null!=e&&null!=e&&e.length>0&&"0"!=e&&0!=e}window.agRequest={GET:async function(e,t){var n="";for(var o in t)n=n+(""!=n?"&":"")+o+"="+t[o];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 o in t)n.append(o,t[o]);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 o=function(){!async function(e,n){var o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";if(await async function(e){var t=e.getBoundingClientRect(),n=document.body,o=document.documentElement,r=window.pageYOffset||o.scrollTop||n.scrollTop,a=(window.pageXOffset||o.scrollLeft||n.scrollLeft,o.clientTop||n.clientTop||0),i=(o.clientLeft||n.clientLeft,t.top+r-a),s=t.bottom+r-a;let l=r,c=l+window.innerHeight;return s>l&&i<c}(e)){if(null==e)return;var r=await async function(e,n){if(null==n)return null;var o=n.hasAttribute("data-ratio-auto");if(o||"VIDEO"==n.nodeName||"OBJECT"==n.nodeName)return{url:e};var r=await t(n,16,9,1);if(null==r)return null;var a=/.*\?(.*?(mh|mw)\=(\d+))*/gi.exec(e),i="";null!=n.getAttribute("data-crop")&&(i+="&mode=crop");e.indexOf("/"),0;return null!=a?{url:e,size:r}:{url:`${e}?`+(r.width>0?"mw="+r.width*r.scale+(r.height>0?"&":""):"")+(r.height>0?"mh="+r.height*r.scale:"")+`${i}`,size:r}}(e.getAttribute("data-src"),e);e.setAttribute("data-src",r.url),"VIDEO"==e.nodeName||"OBJECT"==e.nodeName||"AUDIO"==e.nodeName?e.setAttribute("src",r.url):"IMG"==e.nodeName?(e.addEventListener("load",(function(){e.getAttribute("src")!=o&&e.classList.add("ag-lazy-s")})),e.setAttribute("src",o),null!=r&&(r.size&&(r.size.width>0&&e.setAttribute("width",r.size.width),r.size.height>0&&e.setAttribute("height",r.size.height)),e.setAttribute("src",r.url))):e.style["background-image"]=`url('${r.url}')`,n()}new IntersectionObserver((function(){console.log(e,"View")}),{root:null,rootMargin:"0px",threshold:.1})}(e,(function(){document.body.removeEventListener("ag.lazy",o)}))};document.body.addEventListener("ag.lazy",o),o()}))}async function t(e,n,o,r){if(null==e)return null;var a=e.getBoundingClientRect(),i=e.getAttribute("data-ratio"),s=e.getAttribute("data-scale");null!=s&&(r=parseFloat(s));var l=null;i&&null!=i&&null!=(l=/^(?<width>[0-9\.]{1,4}):(?<height>[0-9\.]{1,4})$/gi.exec(i))&&(0==(n=parseFloat(l.groups.width))&&(n=-1),0==(o=parseFloat(l.groups.height))&&(o=-1));var c=a.width,u=a.height;return e.classList.contains("ag-lazy")&&(c=e.getAttribute("width"),u=e.getAttribute("height"),null!=c&&null!=c&&""!=c||(c=e.style.width),c=null==c||null==c||""==c?0:parseInt(c.replace(/[^\d]+/gi,"")),u=null==u||null==u||""==u?0:parseInt(u.replace(/[^\d]+/gi,""))),c!=u&&(null==c||null==u||u<c/n*o||c<u/o*n)&&(c>0?u=c/n*o:c=u/o*n),(c>0||n<0)&&(u>0||o<0)?(c=Math.floor(c),u=Math.floor(u),{width:n<0?0:c+(10-c%10),height:o<0?0:u+(10-u%10),scale:r}):await t(e.parentElement,n,o,r)}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"),o=e.parentElement,r=o.parentElement;o.querySelectorAll(".item-tab-b").forEach((e=>{e.classList.remove("active")})),r.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 o;o=n,e.classList.toggle("active"),t.forEach(((e,t)=>{t!==o&&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)}}(),async function(){window.addEventListener("scroll",(async function(){window.scrollY>10?document.body.classList.add("scroll"):document.body.classList.remove("scroll")}))}(),async function(){async function e(){if(null!=document.querySelector(".burger-c")){async function e(){if(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")),null!=document.querySelector(".item-uc")){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(){if(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")),null!=document.querySelector(".item-uc")){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()}}e(),window.addEventListener("resize",e)}(),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 o=document.createElement("span");o.classList.add("ripple"),o.style.left=t+"px",o.style.top=n+"px",this.appendChild(o),setTimeout((function(){o.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")}))}))}(),async function(){null!=document.querySelector(".expand-more")&&(document.querySelector(".expand-more").addEventListener("click",(function(e){this.closest(".subnav").classList.toggle("responsive")})),document.querySelectorAll(".subnav > a").forEach((e=>{e.addEventListener("click",(function(e){this.closest(".subnav").classList.remove("responsive")}))})))}(),async function(){if(null!=document.querySelector(".label-sel")){document.querySelectorAll(".label-sel").forEach((e=>{e.querySelector(".item-select").addEventListener("change",(function(){e.classList.add("active")}))}))}}(),window.agSlider=function(e,t,n){var o={autoPlay:!1,autoPlayDelay:3e3,loop:!1,showControls:!0,btnLeft:".left-btn",btnRight:".right-btn",showBullets:!1,showBulletsAsThumb:!1,bulletContainer:".bullets",itemWrapper:".agy-caro-in",wrapperMask:0,itemContainer:".agy-caro-it"};null!=e&&null!=e&&(o=function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}(o,e)),null!=t&&null!=t||(t=".agy-caro");for(var r=document.querySelectorAll(t),a=0;null!=r&&null!=r&&r.length>a;a++)i(r[a]);function i(e){var t=e.querySelector(o.itemWrapper),r=t.querySelectorAll(o.itemContainer).length,a=t.querySelector(o.itemContainer).offsetWidth,i=Math.round(t.offsetWidth/a),s=0,l=r,c=null!=o.btnLeft&&null!=o.btnLeft?e.querySelector(o.btnLeft):null,u=null!=o.btnRight&&null!=o.btnRight?e.querySelector(o.btnRight):null,d=!1,f=t.offsetWidth==a,p=!1,h=0;!isNaN(o.wrapperMask)&&o.wrapperMask>0&&(o.wrapperMask=o.wrapperMask>100?100:o.wrapperMask,t.style.scrollPadding=o.wrapperMask+"%",r>2&&(p=!0));for(var g=t.querySelectorAll(o.itemContainer),m=0;m<g.length;m++)g[m].classList.add("idx-"+m),p&&m==g.length-1&&(t.prepend(g[m]),h=t.scrollLeft);if(null!=c&&(o.showControls||(c.style.display="none"),c.addEventListener("click",(()=>{(0!=s||o.loop)&&(0==s?(t.scrollLeft=a*(r-1),A(a*(r-i))):(t.scrollLeft=t.scrollLeft+-a,A(f?(s-1)*a:t.scrollLeft+-a)))}))),null!=u&&(o.showControls||(u.style.display="none"),u.addEventListener("click",(()=>{(l!=r-1||o.loop)&&(l==r-1?(t.scrollLeft=0,A(h)):(t.scrollLeft=t.scrollLeft+ +a,A(f?(s+1)*a:t.scrollLeft+ +a)))}))),o.showBullets){if(null==e.querySelector(o.bulletContainer)||null==e.querySelector(o.bulletContainer))return void(o.showBullets=!1);for(m=0;m<Math.round(r/i);m++){var v=o.showBulletsAsThumb||f?document.createElement("div"):document.createElement("button");if(v.classList.add("dot"),v.classList.add("idx-"+m),v.setAttribute("idx",m),o.showBulletsAsThumb&&f){var y=document.createElement("img"),b=null!=t.querySelector(o.itemContainer+".idx-"+m+" img")?t.querySelector(o.itemContainer+".idx-"+m+" img"):t.querySelector(o.itemContainer+".idx-"+m+" video");y.setAttribute("src","IMG"==b.nodeName?b.getAttribute("data-src"):b.getAttribute("poster")),v.appendChild(y)}0==m&&v.classList.add("active"),v.addEventListener("click",(e=>{L(parseInt(e.currentTarget.getAttribute("idx")))})),e.querySelector(o.bulletContainer).appendChild(v)}}if(o.showBulletsAsThumb){var x=e.querySelector(o.bulletContainer).querySelector(".dot").offsetWidth;null!=c&&c.addEventListener("click",(()=>{e.querySelector(o.bulletContainer).scrollLeft-=x})),null!=u&&u.addEventListener("click",(()=>{e.querySelector(o.bulletContainer).scrollLeft+=x}));var w,E,C=!1;e.querySelector(o.bulletContainer).addEventListener("mousedown",(t=>{C=!0,e.querySelector(o.bulletContainer).classList.add("dragging"),w=t.pageX,E=e.querySelector(o.bulletContainer).scrollLeft})),e.querySelector(o.bulletContainer).addEventListener("mousemove",(t=>{C&&(e.querySelector(o.bulletContainer).scrollLeft=E-(t.pageX-w))})),document.addEventListener("mouseup",(()=>{C=!1,e.querySelector(o.bulletContainer).classList.remove("dragging")}))}function L(e){e,o.autoPlay=!1,d=!0,t.scrollLeft=e*i*a,A(e*i*a)}function A(n){s=Math.round((n-h)/a),l=Math.round(s+i-1);for(var f=0;f<r;f++){if(t.querySelector(o.itemContainer+".idx-"+f).classList.remove("active"),f>=s&&f<=l){if(f<=l-(p?1:0)&&(t.querySelector(o.itemContainer+".idx-"+f).classList.add("active"),null!=t.querySelector(o.itemContainer+".idx-"+f+" video"))){var g=t.querySelector(o.itemContainer+".idx-"+f+" video");g.setAttribute("src",g.getAttribute("data-src")),g.pause(),g.currentTime=0,g.play(),d=!0,g.addEventListener("ended",(function(e){d=!1}),!1)}t.querySelectorAll(o.itemContainer+".idx-"+f+" img").forEach((e=>{e.setAttribute("src",e.getAttribute("data-src"))}))}p&&0==f&&t.querySelectorAll(o.itemContainer+".idx-"+(r-1)+" img").forEach((e=>{e.setAttribute("src",e.getAttribute("data-src"))}))}if(0!=s||o.loop?c.classList.remove("disabled"):c.classList.add("disabled"),l!=r-1||o.loop?u.classList.remove("disabled"):u.classList.add("disabled"),o.showBullets)for(f=0;f<Math.round(r/i);f++)f!=Math.round((s+i)/i)-1?e.querySelector(o.bulletContainer+" .dot.idx-"+f).classList.remove("active"):e.querySelector(o.bulletContainer+" .dot.idx-"+f).classList.add("active")}o.autoPlay&&(!function e(){setTimeout((function(){d||u.click(),e()}),o.autoPlayDelay)}(),t.addEventListener("mouseenter",(function(){t.offsetWidth!=a&&(d=!0)})),t.addEventListener("mouseleave",(function(){t.offsetWidth!=a&&(d=!1)}))),A(t.scrollLeft),null!=n&&null!=n&&n(e)}},agora((function(){n(),$(document).on("click","[data-for]",(function(e){try{var t=$(this).data("for");$('[for="'+t+'"]').trigger("click")}catch(e){}}))})),Date.prototype.yyyymmddhhmmss=function(){var e=this.getFullYear(),t=this.getMonth()<9?"0"+(this.getMonth()+1):this.getMonth()+1,n=this.getDate()<10?"0"+this.getDate():this.getDate(),o=this.getHours()<10?"0"+this.getHours():this.getHours(),r=this.getMinutes()<10?"0"+this.getMinutes():this.getMinutes(),a=this.getSeconds()<10?"0"+this.getSeconds():this.getSeconds();return"".concat(e).concat(t).concat(n).concat(o).concat(r).concat(a)},async function(){var e=!1;async function t(){var e=null;return null!=window.localStorage.getItem("AGUSER")&&(e=JSON.parse(window.localStorage.getItem("AGUSER"))),null!=e&&document.body.classList.contains("restricted-listing")&&document.body.classList.remove("restricted-listing"),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,e.LoginAgent&&(t.LoginAgent={Key:e.LoginAgent.Key,Email:e.LoginAgent.Email,Name:e.LoginAgent.Name}),window.localStorage.setItem("AGUSER",JSON.stringify(t)),async function(){}(),o()}}async function o(){document.querySelectorAll("[ag-user]").forEach((function(n){!async function(n){n.classList.add("is-applied");n.cloneNode(!0);var o=await t();if(null!=o){!async function(){e?r():document.body.addEventListener("ag.sync.verified.contact",(function(){r()}));document.body.addEventListener("ag.lazy.refresh",(function(){r()})),document.body.addEventListener("ag.user.refresh.collection",(function(){r(!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 a("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 o=t.n("span");return o.n("span").h("Hi, "+e.Name),o.n("input").a("type","hidden").a("id","CONTACT_GUID").a("value",e.Guid),o.n("a").a("href","/dashboard/default.aspx").h("Dashboard"),o.n("span").a("data-modaldialog-src","/dashboard/EditProfile.aspx").a("data-modaldialog-ajax","true").a("data-modaldialog","").h("Edit Profile"),o.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}(o);n.parentElement.insertBefore(i,n),n.remove(),function(e){null!=document.querySelector('[node="FirstName"]')&&null!=document.querySelector('[node="FirstName"]')&&(document.querySelector('[node="FirstName"]').value=e.FirstName??"");null!=document.querySelector('[node="LastName"]')&&null!=document.querySelector('[node="LastName"]')&&(document.querySelector('[node="LastName"]').value=e.LastName??"");null!=document.querySelector('[node="Email"]')&&null!=document.querySelector('[node="Email"]')&&(document.querySelector('[node="Email"]').value=e.Email??"");null!=document.querySelector('[node="MobilePhone"]')&&null!=document.querySelector('[node="MobilePhone"]')&&(document.querySelector('[node="MobilePhone"]').value=e.MobilePhone??"")}(o)}}(n)}))}async function r(e){var t=await async function(e,t){return new Promise((async function(n,o){var r=null,a=t?null:window.localStorage.getItem("AGUSERCOLLECTION"+e);null==a?(r=await window.agRequest.GET("/services/agoraClient.ashx",{type:"USERCOLLECTION",collectionType:e}),window.localStorage.setItem("AGUSERCOLLECTION"+e,JSON.stringify(r)),n(r)):n(r=JSON.parse(a))}))}(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 a(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)})),a.prototype.a=function(e,t){return this.node.setAttribute(e,t),this},a.prototype.n=function(e){var t=new a(e);return this.node.appendChild(t.node),t},a.prototype.h=function(e){return this.node.innerHTML=e,this},a.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"))}}},o(),document.body.addEventListener("ag.sync.check",(async function(){var n=await t(),o=window.localStorage.getItem("AGSYNC");null==o||null==n||JSON.parse(o).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,agentkey:n.LoginAgent?n.LoginAgent.Key:"",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),o=new Date;if(o.setMinutes(o.getMinutes()-1),n>o)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()}()}(),async function(){async function e(){var e=window.localStorage.getItem("AGUSERCOUNTRY");if(null==e)!async function(){var e=await window.agRequest.GET("https://ip-service.idcrealestate.com/ip",{});e.updatedOn=new Date,window.localStorage.setItem("AGUSERCOUNTRY",JSON.stringify(e)),document.body.dispatchEvent(new CustomEvent("ag.language.country.auto-discovery",{detail:e}))}();else{var t=JSON.parse(e);document.body.dispatchEvent(new CustomEvent("ag.language.country.auto-discovery",{detail:t}))}}!async function(){e()}()}(),async function(){var e=new RegExp("(?<Guid>[A-z0-9\\-]+)\\|(?<AgentKey>[0-9]+)","gi");async function t(){var t=window.location.hash;if(!(t.length<1)){var n,o=atob(t.substring(1));if(console.log(o),null!=(n=e.exec(o)))!async function(e,t){document.body.classList.add("is-busy");var n=await window.agRequest.POST("/services/agoraAccess.ashx",{action:"RemoteSignIn",contactguid:e,agentkey:t});n.Contact&&(document.body.dispatchEvent(new CustomEvent("ag.user.in",{detail:n.Contact})),window.location.href="/dashboard/default.aspx#saved-searches")}(n.groups.Guid,n.groups.AgentKey);else if(""!=t&&t.length>0){var r=document.querySelector('[data-tab="'+t.substring(1)+'"]');null!=r&&r.click()}}}!async function(){t(),window.addEventListener("hashchange",t)}()}();var t=new CustomEvent("onAgoraLoad");function n(){$("[data-webactivity]").each((function(){if("true"!==$(this).attr("data-processed")){var e=$(this).attr("data-webactivity"),t=[];$.each(this.attributes,(function(){if(this.name.startsWith("data-webactivity-")){var e=this.name.substring(17),n=this.value;t.push({name:e,value:n})}})),function(e,t,n,o){var r=[];if(o&&o.length>0){var a={TrackType:e,ObjectType:t,ObjectActivityType:n};o.forEach((function(e){a[e.name]=e.value})),r.push(a)}$.ajax({type:"POST",url:"/tracker",data:{track:JSON.stringify(r)},dataType:"json",success:function(e){console.log("Tracking successful:",e)},error:function(e){console.error("Tracker not found!",e)}})}("WEBACTIVITY","PROPERTY",e,t),$(this).attr("data-processed","true")}}))}if(document.dispatchEvent(t),document.isAgoraLoaded=!0,t=new CustomEvent("onCssLoad"),document.dispatchEvent(t),document.isCssLoaded=!0,function(){function t(t,n,o,r){if(!t.closest("div[contenteditable]").attr("contenteditable")&&void 0!==n||void 0!==o)switch((r=void 0!==r?r:"gallery").toLowerCase()){case"gallery":var a=t.find('[data-sort-object="CMNCMN"]');("undefined"!=a&&null!=a&&a.length>0||!n.match(/(^|\/)(d)?sort\-[a-z]+/g))&&(n=(function(t){var n=t.find('[data-sort-object="CMNCMN"]');if("undefined"!=n&&null!=n&&n.length>0&&e(n.val()))return n.val();return function(e){switch(e){case"PROPERTY":case"COMMUNITY":case"PROPERTYRENT":return"/dsort-p";case"AGENT":case"AGENTTEAM":case"OFFICE":return"/sort-n"}return""}("PROPERTY")}(t)+"/"+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:o},dataType:"html",success:function(a){if(!t.closest("div[contenteditable]").attr("contenteditable")){var i='<section class="result-page" data-ck-propertylist="" data-ck-demand-key="'+o+'" data-ck-property-url="'+n+'" data-ck-demand-layout="'+r+'">'+a+"</section>";t.after(i),t.remove(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom(),$('[data-ck-demand-key="'+o+'"] #propertyGrid').each((function(){$(this).find(".property:not(.init)").each((function(){!function(t){var n=t,o=n.find(".slides");o.attr("data-css-slider","0");var r=n.find("[data-mk]").data("mk"),a=n.find("[data-mlsboard]").data("mlsboard"),i=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");e(l)||(l="/images/company/"+s+"/NoPhotoImage/image-not-found.jpg");var u=parseInt(o.data("value"),10),d=n.closest("[id]"),f=0==n.length?"un":d.attr("id").replace(/\$/gi,"");(function(e,t,n,o,r,a,i,s){var l=0,c=n+o+r+"_";$('<input type="radio" aria-label="'+c+'slider" name="'+c+'slider" id="'+(c+l)+'" checked />').appendTo(a);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="'+i+'"></a></div></div></li>');function g(){var e=$(this);f.off("click"),d.off("click"),$.ajax({url:"/services/agoraPropertyPhotos.aspx",data:{mlsboard:o,mlsno:r,container:c},success:function(t){a.append(t),e.trigger("click")}})}h.append(u),h.appendTo(a)})(l,u,f+(new Date).getMilliseconds(),a,r,o,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:o},dataType:"html",success:function(e){if(!t.closest("div[contenteditable]").attr("contenteditable")){var a='<section class="result-page" data-ck-propertylist="" data-ck-demand-key="'+o+'" data-ck-property-url="'+n+'" data-ck-demand-layout="'+r+'">'+e+"</section>";t.after(a),$('[data-query-list]:not(.init)[data-service-url][data-rt^="CMN"]').each((function(){$(this).trigger("init"),$(this).addClass("init")})),t.remove(),"undefined"!=typeof componentHandler&&componentHandler.upgradeDom()}},error:function(){ShowLoading()}})}}$("img[data-demand-key]").each((function(){t($(this),$(this).data("demand-url"),$(this).data("demand-key"),$(this).data("layout"))})),$(document).on("click","[data-ck-href]",null,(function(){t($(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",longCode:"BHS",label:"Bahamas",currency:"BSD",language:"en",messurement:"metric"},{code:"CA",longCode:"CAN",label:"Canada",currency:"CAD",language:["en","fr"],messurement:"metric",states:{QC:"fr"}},{code:"JM",longCode:"JAM",label:"Jamaica",currency:"JMD",language:"en",messurement:"metric"},{code:"KY",longCode:"CYM",label:"Cayman Islands",currency:"KYD",language:"en",messurement:"metric"},{code:"TC",longCode:"TCA",label:"Turks & Caicos Islands",localLabel:"",currency:"USD",language:"en",messurement:"imperial"},{code:"US",longCode:"USA",label:"United States",localLabel:"",currency:"USD",language:"en",messurement:"imperial"},{code:"DY",longCode:"DOM",label:"Dominican Republic",localLabel:"República Dominicana",currency:"USD",language:"en",messurement:"metric"},{code:"ES",longCode:"ESP",label:"Spain",localLabel:"España",currency:"EUR",language:"en",messurement:"metric"},{code:"MX",longCode:"MEX",label:"Mexico",localLabel:"México",currency:"MXN",language:"en",messurement:"metric"},{code:"PA",longCode:"PAN",label:"Panama",localLabel:"Panamá",currency:"PAB",language:"en",messurement:"metric"},{code:"NL",longCode:"NLD",label:"Nederlands",localLabel:"Nederland",currency:"EUR",language:"en",messurement:"metric"},{code:"PT",longCode:"PRT",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","square feet","square feets"]},{unit:"MI",tragetUnit:"KM",constant:1.60934,notation:["mi","miles","mile"]},{unit:"AC",tragetUnit:"Sq.M",constant:4046.86,notation:["acre","acres"]}]},o=null;async function r(){var e=x();if(null==o&&(o=Object.assign({},e)),e?.language==o?.language){o=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}(),o=x();if(null!=n){var r=new Date;if(r.setHours(r.getHours()-1),new Date(n.updatedOn)>r&&n.Locale.indexOf(o.language)>-1)return void e(n)}(n=await k("/services/agoraClient.ashx",{type:"LABELS"})).updatedOn=new Date,a(n),e(n)}))}();e?.language&&-1==t.Locale.indexOf(e.language)&&(await L("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"),o=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 r=n;null!=(o=s.exec(r));)r=r.replace(o[0],t[o.groups.LabelID]?t[o.groups.LabelID].lbl:"");e.childNodes[0].textContent=r}else e.childNodes[0].textContent=t[n]?t[n].lbl:"";else if(t[n]){var a=document.createElement("span");a.innerHTML=t[n].lbl,l(e,a)}for(var c=0;c<e.attributes.length;c++){var u=e.attributes[c];if(i.lastIndex=0,null!=(o=i.exec(u.name))){for(var d=o.groups.Attribute,f=u.value;null!=(o=s.exec(f));)f=f.replace(o[0],t[o.groups.LabelID]?t[o.groups.LabelID].lbl:"");e.setAttribute(d,f)}}e&&null!=e&&e.dispatchEvent(new CustomEvent("ag.language.update.item"))}(e,t.Labels)}))}else setTimeout((function(){window.location.reload()}),1e3)}async function a(e){window.localStorage.setItem("LOCALLABELS",JSON.stringify(e))}var i=/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=await async function(){return new Promise((async function(e,t){var n=localStorage.getItem("CONVERTIONRATES"),o=null;if(n&&null!=n){o=JSON.parse(n);var r=new Date;if(r.setDate(r.getDate()-1),new Date(o.updatedOn)>r)return void e(o)}(o=await k("/services/agoraClient.ashx",{type:"CONVERTIONRATES"})).updatedOn=(new Date).toISOString(),localStorage.setItem("CONVERTIONRATES",JSON.stringify(o)),e(o)}))}(),o=x();if(o.currency){var r=t.Rates?.ExchangeRates?.filter((function(e){return e.Code==o.currency}))[0],a=n.currencies.filter((function(e){return e.code==o.currency}))[0];a&&(r.formatter=d(a.format));var i=r.Code,s=e?document.querySelectorAll('[ag-l-p]:not(.is-applied):not([ag-l-p="0"])'):document.querySelectorAll('[ag-l-p]:not([ag-l-p="0"])');s&&s.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||(async function(e){if(!e.classList.contains("is-applied")){var t=e.getBoundingClientRect(),n=null,o=null!=(n=e.closest("article"))&&n.length>0?n[0].getBoundingClientRect():e.parentElement?.getBoundingClientRect(),r={y:(o.top+o.bottom)/2,x:(o.left+o.right)/2},a={y:(t.top+t.bottom)/2,x:(t.left+t.right)/2},i="ag-l-p-p";i+="-"+(r.x>a.x?"l":"r"),i+="-"+(r.y>a.y?"b":"t"),e.classList.add(i)}}(e),e.classList.add("is-applied"),async function(e,t,o,r){var a=null!=e.getAttribute("ag-l-p-c")&&(null==e.getAttribute("ag-l-p-o")&&null==e.getAttribute("ag-l-p-o-p")||e.getAttribute("ag-l-p-o-p")!=e.getAttribute("ag-l-p"))&&e.getAttribute("ag-l-p-c")!=o;if(e.getAttribute("ag-l-p-c")==o&&a&&u.test(e.textContent))return;var i=e.getAttribute("ag-l-p-c"),s=1,l=null;try{l=r.Rates?.ExchangeRates?.filter((function(e){return e.Code==i}))[0];var c=n.currencies.filter((function(e){return e.code==l.Code}))[0];c&&(l.formatter=d(c.format)),s=l.Constant}catch(e){}for(var f=0;f<e.childNodes.length;f++){var p=e.childNodes[f],h=null;if(u.lastIndex=0,p.textContent&&null!=(h=u.exec(p.textContent))){t&&null!=t&&e.setAttribute("ag-l-p-c-t",t.Code),a?(e.setAttribute("ag-l-p-o-p",e.getAttribute("ag-l-p")),e.setAttribute("ag-l-p-o",l?l.formatter(parseFloat(e.getAttribute("ag-l-p"))):e.getAttribute("ag-l-p"))):null!=e.getAttribute("ag-l-p-c")&&e.getAttribute("ag-l-p-c")==t.Code&&e.removeAttribute("ag-l-p-o"),u.lastIndex=0;var g=Math.round(parseFloat(e.getAttribute("ag-l-p"))/s*t.Constant);return void(p.textContent=p.textContent.replace(h[0],t.formatter?t.formatter(g):g.toString()))}}}(e,r,i,t))}))}}var u=/(([^A-z0-9]|[A-Z]|[A-Z]{3})*\s?[0-9\,\.]+)/gm;function d(e){var t=e.replace(/[#\,\.]+/gi,"");return function(e){return t+e.toLocaleString("en-US")}}async function f(e){var t="metric"==x().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||e.classList.contains("is-applied")||(e.classList.add("is-applied"),p(e,e))}))}),e?500:0):n&&n.forEach((async function(e){e.innerHTML.indexOf("{{")>-1||!e.classList.contains("is-applied")||(e.classList.remove("is-applied"),e.dispatchEvent(new CustomEvent("ag.language.messurement.revert")))}))}async function p(e,t,o,r,a){if(!r||!a){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),s=await h(i,1);n.unitConvertionSchema.setLabelForAttribute(e,s.content);var l=n.unitConvertionSchema.getValueForAttribute(e),c=await g(l,2,s.units[0]);n.unitConvertionSchema.setValueForAttribute(e,c.content),t.addEventListener("ag.language.messurement.revert",(function(){n.unitConvertionSchema.setLabelForAttribute(e,i),n.unitConvertionSchema.setValueForAttribute(e,l)}))}else e?.childNodes?.length>0&&e.childNodes.forEach((async function(e){if(e.nodeType==Node.TEXT_NODE&&function(e){return n.unitConvertionSchema.expression.test(e.textContent)||n.unitConvertionSchema.notationExpression.test(e.textContent)}(e)){var o=e.textContent,r=await h(o);r.success?e.textContent=r.content:(r=await h(e.textContent,1),e.textContent=r.content,p(e.parentElement,t,!1,!0,r.units[0])),t.addEventListener("ag.language.messurement.revert",(function(){e.textContent=o}))}else p(e,t)}));return!1}e?.childNodes?.length>0&&e.childNodes.forEach((async function(e){if(e?.textContent){var n=e.textContent,o=await g(e.textContent,2,a);o.success&&(e.textContent=o.content,t.addEventListener("ag.language.messurement.revert",(function(){e.textContent=n})))}}))}async function h(e,t){var o=[],r=!1;for(var a of(t||(t=0),n.unitConvertions)){var i=await g(e,t,a);e=i.content,r|=i.success,i.success&&o.push(a),n.unitConvertionSchema.notationExpressions[a.unit].lastIndex=-1,n.unitConvertionSchema.notationOnlyExpressions[a.unit].lastIndex=-1}return{content:e,success:r,units:o}}async function g(e,t,o){for(var r=null,a=!1;null!=(r=m(e,o,t));){a=!0;var i=1==t?0:parseFloat(n.unitConvertionSchema.getValue(r.groups.V)),s=r.groups.N,l=r.index,c=l+r[0].length,u=(1!=t?r[0].replaceAll(r.groups.V,n.unitConvertionSchema.formatValue(Math.floor(Math.round(i*o.constant)))):r[0]).replaceAll(s,o.tragetUnit);if(2==t&&o.targetNotation&&(u+=" "+o.targetNotation),e=e.substring(0,l)+u+e.substring(c),2==t)return{content:e,success:a}}return{content:e,success:a}}function m(e,t,o){return 0==o?n.unitConvertionSchema.notationExpressions[t.unit].exec(e):1==o?n.unitConvertionSchema.notationOnlyExpressions[t.unit].exec(e):2==o?(n.unitConvertionSchema.valueExpression.lastIndex=-1,n.unitConvertionSchema.valueExpression.exec(e)):null}async function v(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)})),e.detail.longCode&&C("longCode",e.detail.longCode);var n=x();window.agLocale||(window.agLocale={}),window.agLocale.locale=n,document.body.dispatchEvent(new CustomEvent("ag.language.update.success"))})),t.addEventListener("click",(async function(o){e||(e=await async function(){var e,t,o=new T("span"),r=o.n("span");function a(e){S(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:""}))}S(r,"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,o){return e.a("class",b(t.code)),a(n.languages.filter((function(e){return Array.isArray(t.language)?t.language.indexOf(e.code)>-1:e.code==t.language}))),o||document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:t})),t.localLabel?t.localLabel:t.label})),e=r.n("i"),t=o.n("span"),a(n.languages),S(o.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})),S(o.n("span"),"Property Measurement","messurement",n.units,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),S(o.n("span"),"Distance Measurement","messurement",n.units,(function(e,t){e.h(t.localLabel?t.localLabel:t.label)}),(function(e){return e.localLabel?e.localLabel:e.label})),o.node.setAttribute("ag-language-select",""),document.body.appendChild(o.node);var i=x();i?.code&&document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:i}));return o}()),o.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",y)}))}function y(t){t.stopPropagation(),null==t.target.closest("[ag-language-select],[ag-language]")&&(document.body.removeEventListener("click",y),async function(t){e.node.classList.remove("active")}(t.target))}function b(e){return"fflag ff-lg fflag-"+e}function x(){var e=window.localStorage.AGLANGUAGE,t={};return e&&""!=e&&(t=JSON.parse(e)),t}var w=null,E=null;function C(e,t){var n=x();if(null==n&&(n={}),!n[e]||n[e]!=t){n[e]=t,window.localStorage.setItem("AGLANGUAGE",JSON.stringify(n)),null!=w&&clearTimeout(L),w=setTimeout((async function(){w=null,await L(e),null!=E&&(E(),E=null)}),100);var o=E;E=function(){null!=o&&o(),document.body.dispatchEvent(new CustomEvent("ag.language.change."+e))}}}async function L(e){var n=x();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 S(t,n,o,r,a,i){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(""),r.map((function(e){var t=d.n("label");t.cl((function(){u.node.classList.remove("active"),C(o,e.code),u.h(i(e))})),a(t,e)})),o&&""!=o&&(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[o],n=Array.isArray(t)?t[0]:t,a=r.find((function(e,t){return e.code==n}));i&&(C(o,n),u.h(i(a,!0)))},document.body.addEventListener("ag.language.update."+s,A["Field"+s])))}function T(e){return this.node=document.createElement(e),this}async function k(e,t){var n="";for(var o in t)n=n+(""!=n?"&":"")+o+"="+t[o];return e+=e.indexOf("?")>-1?"&":"?"+n,(await fetch(e,{method:"GET",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()}T.prototype.a=function(e,t){return this.node.setAttribute(e,t),this},T.prototype.n=function(e){var t=new T(e);return this.node.appendChild(t.node),t},T.prototype.h=function(e){return this.node.innerHTML=e,this},T.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"))},refreshLocale:function(){document.body.dispatchEvent(new CustomEvent("ag.language.change.language"))}},async function(){document.querySelectorAll("[ag-language]").forEach(v);var e=!1,t=x();if(t?.code)document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:t}));else{for(var i in e=!0,document.body.addEventListener("ag.language.country.auto-discovery",(function(e){var t=n.presets.filter((function(t){return t.code==e.detail.countryCode}));if(null!=t&&t.length>0&&"US"!=t[0].code){for(var o in t[0]){var r=Array.isArray(t[0][o])?t[0][o][0]:t[0][o];"language"==o&&t[0].states&&t[0].states[e.detail.state]&&(r=t[0].states[e.detail.state]),C(o,r)}document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:t[0]}))}})),t=n.presets.filter((function(e){return"US"==e.code}))[0])C(i,Array.isArray(t[i])?t[i][0]:t[i]);document.body.dispatchEvent(new CustomEvent("ag.language.update",{detail:t}))}c(!0),t.language&&-1==t.language.indexOf("en")?r():(o=Object.assign({},t),a({Locale:"en_US"})),async function(){document.body.addEventListener("ag.language.change.language",(function(){r()})),document.body.addEventListener("ag.language.change.currency",(function(){c()})),document.body.addEventListener("ag.language.change.messurement",(function(){f()})),document.body.addEventListener("ag.lazy.refresh",(function(){f()})),document.body.addEventListener("ag.language.refresh.currency",(function(){c()}))}(),n.unitConvertionSchema=await async function(){var e="",t="",o={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 r="",a="";n.notation.forEach((function(e){a+=(""!=a?"|":"")+"((?<N>"+e.replaceAll(/\s/gi,"\\s").replaceAll(/([^0-9A-z])/gi,"\\$1")+")(\\s|[^A-z]|$))",r+=(""!=r?"|":"")+"((?<V>[0-9\\,\\.]+)(\\n|\\s)*(?<N>"+e.replaceAll(/\s/gi,"\\s").replaceAll(/([^0-9A-z])/gi,"\\$1")+")(\\s|[^A-z]|$))"})),o.notationExpressions[n.unit]=new RegExp(r,"gmi"),o.notationOnlyExpressions[n.unit]=new RegExp(a,"gmi"),e+=(""!=e?"|":"")+"("+r+")",t+=(""!=t?"|":"")+"("+a+")"})),o.expression=new RegExp(e,"gmi"),o.notationExpression=new RegExp(t,"gmi"),o.valueExpression=new RegExp("((?<V>[0-9\\,]+(\\.[0-9]+)?)(\\n|\\s)*)","gmi"),o}(),f(!0),e||(window.agLocale||(window.agLocale={}),window.agLocale.locale=t,document.body.dispatchEvent(new CustomEvent("ag.language.update.success")))}()}(),$(document).on("change",'[data-ck-propertylist] [data-sort-object="CMNCMN"]',{},(function(){t($(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 t(e){setTimeout((function(){var t=$(e).closest("[data-search-form]"),n=composeUrlQuery({select:t}),o=t.data("search-form"),r=$('[data-sort-object="'+o+'"]'),a=t.data("default-search"),i=t.data("default-sort");if(void 0!==a&&""!=a&&-1==n.indexOf("/address-")&&-1==n.indexOf("/mls-")&&(n+=a),r.length>0){var s=r.val();n+=null!=s&&""!=s?s:""}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(){t(this)})),$(document).on("keydown","[data-search-form] [data-search-action]",{},(function(e){13==e.keyCode&&t(this)})),$("[data-search-form]").on("search",(function(t,n){var o=$(this),r=o.data("search-prefix"),a=e(r)&&"undefined"!=r?r:function(e){switch(e){case"PROPERTY":return"/properties";case"COMMUNITY":return"/communities";case"BUILDER":return"/builders";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"/"}(o.data("search-form"));/^\/\//.test((null!=a&&""!=a&&"undefined"!=a?a:"")+n.query)||(window.location=(null!=a&&""!=a&&"undefined"!=a?a:"")+n.query)}))}(),document.body.addEventListener("Plugin.Map.ResultUpdated",(function(){n()})),null!=$(".c-menu .subnav a")){function o(e){var t=$(document).scrollTop();$(".c-menu .subnav a").each((function(){var e=$(this),n=$(e.attr("href"));n.position().top-($(".c-menu").outerHeight()+$(".item-h").outerHeight())<=t&&n.position().top+n.height()>t?($(".c-menu .subnav a").removeClass("active"),e.addClass("active")):e.removeClass("active")}))}$(".c-menu .subnav a").click((function(e){e.preventDefault();var t=this.hash;$target=$(t),$("html, body").stop().animate({scrollTop:$target.offset().top-($(".c-menu").outerHeight()+$(".item-h").outerHeight())},"swing",(function(){$(document).on("scroll",o)})),$("a").each((function(){$(this).removeClass("active")})),$(this).addClass("active")})),$(document).on("scroll",o),$(window).scroll((function(e){$("body").hasClass("scroll")&&$(".c-menu .subnav a").click((function(e){e.preventDefault(),$("html, body").stop().animate({scrollTop:$($(this).attr("href")).offset().top-($(".c-menu").outerHeight()+$(".item-h").outerHeight())},300)})),$("body").hasClass("scroll")||$(".c-menu .subnav a").click((function(e){$("html, body").stop().animate({scrollTop:$($(this).attr("href")).offset().top-(2*$(".c-menu").outerHeight()+$(".item-h").outerHeight())},300)}))}))}},368:()=>{(async function(){var systemFunctions={};function Interpolation(e,t,n,o=[],r=[],a=(()=>{})){let i=new RegExp("\\{\\{[^\\}]+\\}\\}","gi"),s=e=>{a()},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("ag-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,o){let r=e.match(i),a=()=>"",c=()=>{o(a())};if(null!=r){l=e;let o=[],i=!1;r.forEach((e=>{let r=e.substring(2,e.length-2);l=l.replace(e,`\${typeof(${r})!='undefined'&&${r}!=null?${r}:''}`);let a=ExtractVariablesTopLevelIdentifiers(r);o.push(...a.filter((e=>o.indexOf(e)<0))),r!=o[o.length-1]&&Watch(t,n,o[o.length-1],((e,t,n)=>{c()})),IsFunction(systemFunctions,r)?(i=!0,ExtractArgumentVariablesForFunctionFromString(r).forEach((e=>{Watch(t,n,e,((e,t,n)=>{c()}))}))):Watch(t,n,r,((e,t,n)=>{c()}))}));let u=new Function(`try{const {${o.join(",")}} = this; return \`${l}\`; }catch(e){ console.error(e); }return '';`).bind(i?interpolateObject(n):n);a=()=>u();let d=s;s=e=>{c(),d(e)}}}t.childNodes.forEach((t=>{if(t.nodeType==Node.ELEMENT_NODE){Interpolation(e,t,n,o,r,(()=>{}));let a=t;"A"==t.nodeName&&t.hasAttribute("ag-nofollow")&&"nofollow"==t.getAttribute("rel")&&(t.removeAttribute("ag-nofollow"),t.removeAttribute("rel"));for(let e of a.getAttributeNames()){let t=a.getAttribute(e);null!=t&&u(t,(t=>{a.setAttribute(e,t),c(a)}))}}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 o=e.parentElement;null==o||o.classList.contains("ag-fake-contains")||(o.insertBefore(t,o.firstChild),o.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(".")),o=t.substring(t.indexOf(".")+1,t.length);return GetValue(e[n],o)}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("("),o=e.indexOf(")"),r=(n>-1&&e.substring(0,n),e.substring(n+1,o).match(new RegExp("[^,]+","gi")));return null!=r&&r.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=[],o=t.indexOf("("),r=t.indexOf(")"),a=o>-1?t.substring(0,o):t,i=t.substring(o+1,r).match(new RegExp("[^,]+","gi"));return null!=i&&i.forEach((t=>{n.push(GetValue(e,t))})),"function"==typeof e[a]?e[a].apply(e,n):void 0}function If(e,t,n){t.querySelectorAll("[ag-if]",t).forEach((t=>{let o=[],r=t,a=t.parentElement,i=null,s=[],l="ag-if",c="ag-else-if",u="ag-else";for(;null!=r&&(t==r&&r.hasAttribute(l)||r.hasAttribute(c)||r.hasAttribute(u));){let e=r;e.classList.remove("ag-fake-mask"),r=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)})),o.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 o){let o=!1;if(t.isDefault)o=t.isDefault;else{o=new Function(...d.arguments,`return ${t.expression};`)(...d.values)}if(o){i=t;try{let o=p(t.position);if(null!=a){let r=t.node.cloneNode(!0);t.active=r,a.insertBefore(r,o),TransformInternal(e,r,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,o=!1,r="ag-if",a="ag-else-if",i="ag-else";for(;null!=t&&(e==t&&t.hasAttribute(r)||t.hasAttribute(a)||t.hasAttribute(i));){let e=t;!o&&e.hasAttribute("ag-fake")?o=!0:o||!o&&!t.hasAttribute(i)?e.classList.add("ag-fake-mask"):o=!0,n&&(e.removeAttribute(r),e.removeAttribute(a),e.removeAttribute(i)),t=e.nextElementSibling}o||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,o=!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 r=htmlToClone.cloneNode(!0);o?insertAfter(r,itemElements[itemElements.length-1]):(htmlToCloneParent?.insertBefore(r,htmlToCloneLocation),o=!0),TransformInternal(htmlDocument,r,t),itemElements.push(r),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(".")),o=t.substring(t.indexOf(".")+1,t.length);return getValue(e[n],o)}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((o=>"object"==typeof e[o]?getFunctionFromCollection(e[o],t,n):"function"==typeof e[o]&&o==t?e[o](...n):void 0))},getValueFromFunction=(e,t)=>{let n=[],o=t.indexOf("("),r=t.indexOf(")"),a=o>-1?t.substring(0,o):t,i=t.substring(o+1,r).match(new RegExp("[^,]+","gi"));return null!=i&&i.forEach((t=>{n.push(getValue(e,t))})),e[a].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(".")),o=t.substring(t.indexOf(".")+1,t.length);return getCollectionObject(e[n],o)}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,o){let r=null,a=null,i=!1;for(let s=0;s<o;s++){let o=e.cloneNode(!0);i?insertAfter(o,r):(t?.insertBefore(o,n),i=!0,a=o),r=o}return a}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,o=e.getAttribute("ag-for-fake");null!=o?n=parseInt(o):t.setAttribute("ag-for-fake",""),t.removeAttribute("ag-for"),e.removeAttribute("ag-for-fake"),e.classList.add("ag-fake-mask"),PreTransformInternal(t);for(let o=0;o<n;o++)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,o=e.innerHTML;document.body.addEventListener(n,(async function(){var n=GetValue(window,t);e.innerHTML=o,TransformInternal(e,e,n)}))}async function requestData(e,t,n){n&&(t=n(t));var o="";for(var r in t)o=o+(""!=o?"&":"")+r+"="+t[r];return e+=e.indexOf("?")>-1?"&":"?"+o,(await fetch(e,{method:"GET",mode:"cors",cache:"no-cache",headers:{"Content-Type":"application/json"}})).json()}async function initPage(e,t,n,o,r){n||(n={}),n.PageSize||(n.PageSize=12),n.PageNumber||(n.PageNumber=1);var a=await requestData(t,n,r);window[e]=a,window.agRender.hydrate(e),o&&o(a)}async function nextPage(e,t,n,o,r){n.PageNumber+=1;var a=await requestData(t,n,r);window[e]=a,window.agRender.hydrate(e),o&&o(a)}async function previousPage(e,t,n,o,r){if(n.PageNumber>1){n.PageNumber-=1;var a=await requestData(t,n,r);window[e]=a,window.agRender.hydrate(e),o&&o(a)}}async function morePage(e,t,n,o,r){n.PageNumber+=1;var a=await requestData(t,n,r);window[e].Items.push(...a.Items),window.agRender.hydrate(e),o&&o(a)}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,o,r){document.body.addEventListener("ag.render."+e+".page.next",(function(){nextPage(e,t,n,o,r)})),document.body.addEventListener("ag.render."+e+".page.previous",(function(){previousPage(e,t,n,o,r)})),document.body.addEventListener("ag.render."+e+".page.more",(function(){morePage(e,t,n,o,r)})),initPage(e,t,n,o,r)}}}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__(468),__webpack_require__(816),__webpack_require__(136),__webpack_require__(368),__webpack_require__(264)})(),__webpack_exports__})()));
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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YUFDMUNoM0MsT0FBT0MsZUFBZXRDLEVBQVNvNUMsT0FBT0MsWUFBYSxDQUFFaHBDLE1BQU8sV0FFN0RoTyxPQUFPQyxlQUFldEMsRUFBUyxhQUFjLENBQUVxUSxPQUFPLEdBQU8sRSIsInNvdXJjZXMiOlsid2VicGFjazovLy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vLy4uLy4uL0Fnb3JhIDQuMC9JZGNHbG9iYWwuQWdvcmEuSmF2YVNjcmlwdC5QbHVnSW4vTWF4Q29udGFjdDEuMS5qcyIsIndlYnBhY2s6Ly8vLi4vLi4vQWdvcmEgNC4wL0lkY0dsb2JhbC5BZ29yYS5KYXZhU2NyaXB0LlBsdWdJbi9NYXhKcXVlcnkyLjEuMS5qcyIsIndlYnBhY2s6Ly8vLi4vLi4vQWdvcmEgNC4wL0lkY0dsb2JhbC5BZ29yYS5KYXZhU2NyaXB0LlBsdWdJbi9NYXhVdGlsaXR5LmpzIiwid2VicGFjazovLy8uLi9JZGNHbG9iYWwuSUJQLldlYi9qcy9tYXgvRGlhbG9nTW9kYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL0lkY0dsb2JhbC5JQlAuV2ViL2pzL21heC9jb21tb24uanMiLCJ3ZWJwYWNrOi8vLy4uL0lkY0dsb2JhbC5JQlAuV2ViL2pzL21heC9kYXRhYmluZGVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2Uge1xuXHRcdHZhciBhID0gZmFjdG9yeSgpO1xuXHRcdGZvcih2YXIgaSBpbiBhKSAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZXhwb3J0cyA6IHJvb3QpW2ldID0gYVtpXTtcblx0fVxufSkoc2VsZiwgKCkgPT4ge1xucmV0dXJuICIsIu+7v2Fnb3JhKGZ1bmN0aW9uICgpIHtcclxuICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAobG9jYXRpb24uaGFzaCAmJiAobG9jYXRpb24uaGFzaC50b0xvd2VyQ2FzZSgpID09IFwiI3NpZ251cFwiIHx8IGxvY2F0aW9uLmhhc2gudG9Mb3dlckNhc2UoKSA9PSBcIiNyZWdpc3RlclwiIHx8IGxvY2F0aW9uLmhhc2gudG9Mb3dlckNhc2UoKSA9PSBcIiNyZXNldC1wYXNzd29yZFwiKSkge1xyXG4gICAgICAgICAgICBPcGVuUG9wdXAoKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG5mdW5jdGlvbiBTaWduVXAoY29udGFpbmVySWQsIGFjY2Vzc1VybCwgYWNjZXNzVXJsVmlld01vZGUsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFBY2Nlc3MuYXNoeD9hY3Rpb249U2lnblVwJyxcclxuICAgICAgICBkYXRhOiAoeyBjb250YWN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzICE9IG51bGwpIGlmKG9uU3VjY2VzcyhyZXNwb25zZS5Db250YWN0KSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmwpICYmIGlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsVmlld01vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLnJlcGxhY2UoYWNjZXNzVXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2NhdGlvbi5yZWxvYWQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmwpICYmICFpc051bGxPckVtcHR5KGFjY2Vzc1VybFZpZXdNb2RlKSAmJiBhY2Nlc3NVcmxWaWV3TW9kZSA9PSAncG9wdXAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZVVzZXJBcmVhKHJlc3BvbnNlLlVzZXJBcmVhSHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNQRVJGT1JNX0FDVElPTl9UUklHR0VSJykuYXR0cignaHJlZicsIGFjY2Vzc1VybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgT3BlblBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bGxPckVtcHR5KGFjY2Vzc1VybCkgJiYgIWlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsVmlld01vZGUpICYmIGFjY2Vzc1VybFZpZXdNb2RlID09ICdzdGF5Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBVcGRhdGVVc2VyQXJlYShyZXNwb25zZS5Vc2VyQXJlYUh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKCgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvZGFzaGJvYXJkL2RlZmF1bHQuYXNweD9tb2RlPXNpZ25VcCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ3Jlc3RyaWN0ZWQtbGlzdGluZycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIERhdGEuIFBsZWFzZSByZXRyeSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIERhdGEuIFBsZWFzZSByZXRyeSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTE6IC8vIER1cGxpY2F0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdUaGUgZW1haWwgYWRkcmVzcyB5b3UgZW50ZXJlZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIFBsZWFzZSBzaWduIGluIHRvIHlvdXIgZXhpc3RpbmcgYWNjb3VudCBvciBjbGljayBcIkZvcmdvdCBQYXNzd29yZFwiIGZvciBoZWxwLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgJ1RoZSBlbWFpbCBhZGRyZXNzIHlvdSBlbnRlcmVkIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC4gUGxlYXNlIHNpZ24gaW4gdG8geW91ciBleGlzdGluZyBhY2NvdW50IG9yIGNsaWNrIFwiRm9yZ290IFBhc3N3b3JkXCIgZm9yIGhlbHAuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIwNDogXHJcbiAgICAgICAgICAgICAgICAgICAgU2hvd0FsZXJ0KCdTTVMgR2F0ZXdheSBlbWFpbCBhZGRyZXNzZXMsIHdoaWNoIHNlbmQgZW1haWwgYXMgdGV4dCBtZXNzYWdlcywgYXJlIG5vdCBwZXJtaXR0ZWQuIFBsZWFzZSBlbnRlciBhIHN0YW5kYXJkIGVtYWlsIGFkZHJlc3MuJywgMjAwMCwgJ2FsZXJ0X2JveCcsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhQWNjZXNzKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gU2lnbkluKGNvbnRhaW5lcklkLCBhY2Nlc3NVcmwsIGFjY2Vzc1VybFZpZXdNb2RlLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhQWNjZXNzLmFzaHg/YWN0aW9uPVNpZ25JbicsXHJcbiAgICAgICAgZGF0YTogKHsgY29udGFjdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyAhPSBudWxsKSBvblN1Y2Nlc3MocmVzcG9uc2UuQ29udGFjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KGFjY2Vzc1VybCkgJiYgaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmxWaWV3TW9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24ucmVwbGFjZShhY2Nlc3NVcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTnVsbE9yRW1wdHkoYWNjZXNzVXJsKSAmJiAhaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmxWaWV3TW9kZSkgJiYgYWNjZXNzVXJsVmlld01vZGUgPT0gJ3BvcHVwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBVcGRhdGVVc2VyQXJlYShyZXNwb25zZS5Vc2VyQXJlYUh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjUEVSRk9STV9BQ1RJT05fVFJJR0dFUicpLmF0dHIoJ2hyZWYnLCBhY2Nlc3NVcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5Qb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdWxsT3JFbXB0eShhY2Nlc3NVcmwpICYmICFpc051bGxPckVtcHR5KGFjY2Vzc1VybFZpZXdNb2RlKSAmJiBhY2Nlc3NVcmxWaWV3TW9kZSA9PSAnc3RheScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlVXNlckFyZWEocmVzcG9uc2UuVXNlckFyZWFIdG1sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZSgoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL2Rhc2hib2FyZC9kZWZhdWx0LmFzcHg/bW9kZT1zaWduSW4nKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnYm9keScpLnJlbW92ZUNsYXNzKCdyZXN0cmljdGVkLWxpc3RpbmcnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDAxOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGVtYWlsIGFkZHJlc3Mgb3IgcGFzc3dvcmQuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDQwMSwgJ0ludmFsaWQgZW1haWwgYWRkcmVzcyBvciBwYXNzd29yZC4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzAyOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNOdWxsT3JFbXB0eShyZXNwb25zZS5VcmwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSByZXNwb25zZS5Vcmw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGVtYWlsIGFkZHJlc3Mgb3IgcGFzc3dvcmQuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBlbWFpbCBhZGRyZXNzIG9yIHBhc3N3b3JkLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhQWNjZXNzKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gU2F2ZVNlYXJjaChjb250YWluZXJJZCwgYWNjZXNzVXJsLCBhY2Nlc3NVcmxWaWV3TW9kZSwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUFjY2Vzcy5hc2h4P2FjdGlvbj1TYXZlU2VhcmNoJyxcclxuICAgICAgICBkYXRhOiAoeyBkZW1hbmQ6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1lvdSBoYXZlIHN1Y2Nlc3NmdWxseSBzYXZlZCB0aGUgc2VhcmNoJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnWW91IGhhdmUgc3VjY2Vzc2Z1bGx5IHNhdmVkIHRoZSBzZWFyY2gnKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgZW1haWwgYWRkcmVzcyBvciBwYXNzd29yZC4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGVtYWlsIGFkZHJlc3Mgb3IgcGFzc3dvcmQuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFBY2Nlc3MpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBSZXF1ZXN0SW5mbyhjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYVJlcXVlc3RJbmZvLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFSZXF1ZXN0SW5mbykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIE5laWdoYm9yaG9vZFJlcG9ydChjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYU5laWdoYm9yaG9vZFJlcG9ydC5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdZb3VyIE5laWdoYm9yaG9vZCBSZXBvcnQgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQuIEEgcmVwb3J0IHdpbGwgYmUgZW1haWxlZCB0byB5b3Ugd2l0aGluIHRoZSBuZXh0IDI0IGJ1c2luZXNzIGhvdXJzLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1lvdXIgTmVpZ2hib3Job29kIFJlcG9ydCByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZC4gQSByZXBvcnQgd2lsbCBiZSBlbWFpbGVkIHRvIHlvdSB3aXRoaW4gdGhlIG5leHQgMjQgYnVzaW5lc3MgaG91cnMuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhTmVpZ2hib3Job29kUmVwb3J0KSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gQ29udGFjdE1vcnRnYWdlU3BlY2lhbGlzdChjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUNvbnRhY3RNb3J0Z2FnZVNwZWNpYWxpc3QuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnVGhhbmsgeW91IGZvciB5b3VyIHJlcXVlc3QuIEEgTW9ydGdhZ2UgQ29uc3VsdGFudCB3aWxsIGNvbnRhY3QgeW91IHNob3J0bHkuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnVGhhbmsgeW91IGZvciB5b3VyIHJlcXVlc3QuIEEgTW9ydGdhZ2UgQ29uc3VsdGFudCB3aWxsIGNvbnRhY3QgeW91IHNob3J0bHkuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKENvbnRhY3RNb3J0Z2FnZVNwZWNpYWxpc3QpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gUmVxdWVzdFNob3dpbmcoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFSZXF1ZXN0U2hvd2luZy5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhUmVxdWVzdFNob3dpbmcpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBUZXh0TGlzdGluZyhjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYVRleHRMaXN0aW5nLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFUZXh0TGlzdGluZykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEVtYWlsTGlzdGluZyhjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUVtYWlsTGlzdGluZy5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdUaGUgcHJvcGVydHkgZGV0YWlscyBoYXMgYmVlbiBzZW50IHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1RoZSBwcm9wZXJ0eSBkZXRhaWxzIGhhcyBiZWVuIHNlbnQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhRW1haWxMaXN0aW5nKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gQ29udGFjdFVzKGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IsIGNvbnRhY3RUeXBlKSB7XHJcbiAgICB2YXIgJGZvcm0gPSAkKCcjJyArIGNvbnRhaW5lcklkKTtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJGZvcm0pO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhQ29udGFjdFVzLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sLCBDb250YWN0VHlwZTogY29udGFjdFR5cGUgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJGZvcm0uZmluZCgnW2RhdGEtY2FwdGNoYS1yZWxvYWRdJykudHJpZ2dlcignY2xpY2snKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYUNvbnRhY3RVcykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBTZWxsQUhvbWUoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFTZWxsQUhvbWUuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYUNvbnRhY3RVcykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIE1haW50ZW5hbmNlU2VydmljZShjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9NYWludGVuYW5jZVNlcnZpY2UuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdZb3VyIHJlcXVlc3QgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYUNvbnRhY3RVcykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIE9yZGVyUmVsb2MoY29udGFpbmVySWQsIG9uVmFsaWRhdGUsIG9uU3VjY2Vzcywgb25FcnJvcikge1xyXG4gICAgdmFyIF9mb3JtWG1sID0gR2V0Rm9ybVhtbCgkKCcjJyArIGNvbnRhaW5lcklkKSk7XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVxdWlyZWQgZmllbGQgdmFsaWRhdGlvbiBpcyBzdWNjY2Vzc1xyXG4gICAgaWYgKF9mb3JtWG1sID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBjdXN0b20gdmFsaWRhdGlvbiBpcyBzdWNjZXNzXHJcbiAgICBpZiAob25WYWxpZGF0ZSkge1xyXG4gICAgICAgIGlmICghb25WYWxpZGF0ZShfZm9ybVhtbCkpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFPcmRlclJlbG9jLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IFdlYlJlcXVlc3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvblN1Y2Nlc3MoMTAwLCAnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBDbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6IC8vIENvbm5lY3Rpb24gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gRGF0YWJhc2UhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEsICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBQYXNzd29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAvLyBFeGVjdXRlIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigyLCAnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6IC8vIEN1c3RvbSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMSwgcmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiAvLyBJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXIhJyk7XHJcbiAgICAgICAgICAgIGVsc2Ugb25FcnJvcig5OSwgJ1Vua25vd24gRXJyb3IuIFBsZWFzZSB0cnkgbGF0ZXInKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YXR1c0NvZGU6IHtcclxuICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnU2VydmljZSAoYWdvcmFPcmRlclJlbG9jKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcblxyXG5mdW5jdGlvbiBGb3Jnb3RQYXNzd29yZChjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNraW5nIGNyZWRlbnRpYWxzIHVzaW5nIEFqYXhcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogKChpc011bHRpTGluZ3VhbCgpID8gJy8nICsgZ2V0TG9jYWxlKCkgOiAnJykpICsgJy9zZXJ2aWNlcy9hZ29yYUZvcmdvdFBhc3N3b3JkLmFzaHgnLFxyXG4gICAgICAgIGRhdGE6ICh7IENvbnRhY3Q6IF9mb3JtWG1sIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmVzcG9uc2UuTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDogLy8gU3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvblN1Y2Nlc3MgPT0gbnVsbCkgYWxlcnQoJ1BsZWFzZSBjaGVjayB5b3VyIGVtYWlsIHNob3J0bHkgZm9yIGluc3RydWN0aW9ucyBvbiByZXNldHRpbmcgeW91ciBwYXNzd29yZC4nKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdQbGVhc2UgY2hlY2sgeW91ciBlbWFpbCBzaG9ydGx5IGZvciBpbnN0cnVjdGlvbnMgb24gcmVzZXR0aW5nIHlvdXIgcGFzc3dvcmQuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdBbiBhY2NvdW50IHdpdGggdGhhdCBlbWFpbCBhZGRyZXNzIGNhbm5vdCBiZSBmb3VuZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTAsICdBbiBhY2NvdW50IHdpdGggdGhhdCBlbWFpbCBhZGRyZXNzIGNhbm5vdCBiZSBmb3VuZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChGb3Jnb3RQYXNzd29yZCkgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBDb21wYW55TmV3c0xldHRlcihjb250YWluZXJJZCwgb25WYWxpZGF0ZSwgb25TdWNjZXNzLCBvbkVycm9yKSB7XHJcbiAgICB2YXIgX2Zvcm1YbWwgPSBHZXRGb3JtWG1sKCQoJyMnICsgY29udGFpbmVySWQpKTtcclxuXHJcbiAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uIGlzIHN1Y2NjZXNzXHJcbiAgICBpZiAoX2Zvcm1YbWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NcclxuICAgIGlmIChvblZhbGlkYXRlKSB7XHJcbiAgICAgICAgaWYgKCFvblZhbGlkYXRlKF9mb3JtWG1sKSkgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBDaGVja2luZyBjcmVkZW50aWFscyB1c2luZyBBamF4XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICB1cmw6ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvc2VydmljZXMvYWdvcmFDb21wYW55TmV3c0xldHRlci5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoeyBXZWJSZXF1ZXN0OiBfZm9ybVhtbCB9KSxcclxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLk51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDA6IC8vIFN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25TdWNjZXNzID09IG51bGwpIGFsZXJ0KCdZb3UgaGF2ZSByZWdpc3RlcmVkIGZvciBuZXdzbGV0dGVyIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25TdWNjZXNzKDEwMCwgJ1lvdSBoYXZlIHJlZ2lzdGVyZWQgZm9yIG5ld3NsZXR0ZXIgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAvLyBDb25uZWN0aW9uIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQoJ1VuYWJsZSB0byBjb25uZWN0IHRvIERhdGFiYXNlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxLCAnUGxlYXNlIGVudGVyIGEgdmFsaWQgUGFzc3dvcmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjogLy8gRXhlY3V0ZSBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMiwgJ1F1ZXJ5IGV4ZWN1dGlvbiBmYWlsdXJlIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA5OiAvLyBDdXN0b20gRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydChyZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMTEsIHJlc3BvbnNlLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDogLy8gSW52YWxpZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuIFBsZWFzZSB0cnkgYWdhaW4hJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDEwLCAnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyIScpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRXJyb3IoOTksICdVbmtub3duIEVycm9yLiBQbGVhc2UgdHJ5IGxhdGVyJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJ1NlcnZpY2UgKGFnb3JhRW1haWxMaXN0aW5nKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIEVtYWlsRnJpZW5kKGNvbnRhaW5lcklkLCBvblZhbGlkYXRlLCBvblN1Y2Nlc3MsIG9uRXJyb3IpIHtcclxuICAgIHZhciBfZm9ybVhtbCA9IEdldEZvcm1YbWwoJCgnIycgKyBjb250YWluZXJJZCkpO1xyXG5cclxuICAgIC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlcXVpcmVkIGZpZWxkIHZhbGlkYXRpb24gaXMgc3VjY2Nlc3NcclxuICAgIGlmIChfZm9ybVhtbCA9PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgd2hldGhlciB0aGUgY3VzdG9tIHZhbGlkYXRpb24gaXMgc3VjY2Vzc1xyXG4gICAgaWYgKG9uVmFsaWRhdGUpIHtcclxuICAgICAgICBpZiAoIW9uVmFsaWRhdGUoX2Zvcm1YbWwpKSByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tpbmcgY3JlZGVudGlhbHMgdXNpbmcgQWpheFxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhRW1haWxGcmllbmQuYXNoeCcsXHJcbiAgICAgICAgZGF0YTogKHsgV2ViUmVxdWVzdDogX2Zvcm1YbWwgfSksXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChyZXNwb25zZS5OdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvLyBTdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3VjY2VzcyA9PSBudWxsKSBhbGVydCgnVGhlIGRldGFpbHMgaGFzIGJlZW4gc2VudCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uU3VjY2VzcygxMDAsICdUaGUgZGV0YWlscyBoYXMgYmVlbiBzZW50IHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTogLy8gQ29ubmVjdGlvbiBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkVycm9yID09IG51bGwpIGFsZXJ0KCdVbmFibGUgdG8gY29ubmVjdCB0byBEYXRhYmFzZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIG9uRXJyb3IoMSwgJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFBhc3N3b3JkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6IC8vIEV4ZWN1dGUgRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnUXVlcnkgZXhlY3V0aW9uIGZhaWx1cmUhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDIsICdRdWVyeSBleGVjdXRpb24gZmFpbHVyZSEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLy8gQ3VzdG9tIEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uRXJyb3IgPT0gbnVsbCkgYWxlcnQocmVzcG9uc2UuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBvbkVycm9yKDExLCByZXNwb25zZS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTA6IC8vIEludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLiBQbGVhc2UgdHJ5IGFnYWluIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Ugb25FcnJvcigxMCwgJ0ludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4gUGxlYXNlIHRyeSBhZ2FpbiEnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYUVtYWlsTGlzdGluZykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFVwZGF0ZVVzZXJBcmVhKGh0bWwpIHtcclxuICAgICQoJyNESVZfVVNFUl9BUkVBJykuaHRtbChodG1sKTtcclxufVxyXG5cclxuZnVuY3Rpb24gUGVyZm9ybUFjdGlvbihhY3Rpb24sIHF1ZXJ5U3RyaW5nKSB7XHJcbiAgICB2YXIgX2FjY2Vzc1VybCA9ICcnO1xyXG4gICAgdmFyIF9hY2Nlc3NGaXJlV2FsbCA9ICgoaXNNdWx0aUxpbmd1YWwoKSA/ICcvJyArIGdldExvY2FsZSgpIDogJycpKSArICcvZGFzaGJvYXJkL0FjY2Vzcy5hc3B4JztcclxuXHJcbiAgICBpZiAoYWN0aW9uICE9ICdTaWduVXAnICYmIGFjdGlvbiAhPSAnU2lnbkluJyAmJiBhY3Rpb24gIT0gJ01hcmtldFRyZW5kcycpIHtcclxuICAgICAgICBpZiAoIUlzU2lnbmVkSW4oKSkge1xyXG4gICAgICAgICAgICBfYWNjZXNzVXJsID0gX2FjY2Vzc0ZpcmVXYWxsICsgJz92aWV3PXBvcHVwJmFjY2Vzc1VybD0nICsgZXNjYXBlKCcvZGFzaGJvYXJkLycgKyBhY3Rpb24gKyAnLmFzcHgnKTtcclxuICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KHF1ZXJ5U3RyaW5nKSkgX2FjY2Vzc1VybCArPSAnPycgKyBlc2NhcGUocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIF9hY2Nlc3NVcmwgPSAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL2Rhc2hib2FyZC8nICsgYWN0aW9uICsgJy5hc3B4JztcclxuICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KHF1ZXJ5U3RyaW5nKSkgX2FjY2Vzc1VybCArPSAnPycgKyBxdWVyeVN0cmluZztcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSAnTWFya2V0VHJlbmRzJykge1xyXG4gICAgICAgIF9hY2Nlc3NVcmwgPSAnL2Rhc2hib2FyZC9NYXJrZXRUcmVuZHMuYXNweD8nICsgcXVlcnlTdHJpbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIF9hY2Nlc3NVcmwgPSBfYWNjZXNzRmlyZVdhbGw7XHJcbiAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KHF1ZXJ5U3RyaW5nKSkgX2FjY2Vzc1VybCArPSAnPycgKyBxdWVyeVN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICAkKCcjUEVSRk9STV9BQ1RJT05fVFJJR0dFUicpLmF0dHIoJ2hyZWYnLCBfYWNjZXNzVXJsKTtcclxuICAgICQoJyNQRVJGT1JNX0FDVElPTl9UUklHR0VSJykudHJpZ2dlcignY2xpY2snKTtcclxufVxyXG5cclxuZnVuY3Rpb24gSXNTaWduZWRJbigpIHtcclxuICAgIGlmIChpc051bGxPckVtcHR5KCQoJyNDT05UQUNUX0dVSUQnKSkpIHJldHVybiBmYWxzZTtcclxuICAgIGlmIChpc051bGxPckVtcHR5KCQoJyNDT05UQUNUX0dVSUQnKS52YWwoKSkpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICgkKCcjQ09OVEFDVF9HVUlEJykudmFsKCkubGVuZ3RoICE9IDM2KSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gQ29udGFjdE9mZmljZShlbWFpbCkge1xyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgdXJsOiAoKGlzTXVsdGlMaW5ndWFsKCkgPyAnLycgKyBnZXRMb2NhbGUoKSA6ICcnKSkgKyAnL3NlcnZpY2VzL2Fnb3JhQ29udGFjdE9mZmljZS5hc2h4JyxcclxuICAgICAgICBkYXRhOiAoe1xyXG4gICAgICAgICAgICBOYW1lOiAkKFwiI3RleHRuYW1lXCIpLnZhbCgpLFxyXG4gICAgICAgICAgICBFbWFpbDogJChcIiN0eHRFbWFpbFwiKS52YWwoKSxcclxuICAgICAgICAgICAgVG9FbWFpbDogZW1haWwsXHJcbiAgICAgICAgICAgIFN1YmplY3Q6ICQoXCIjdGV4dHN1YmplY3RcIikudmFsKCksXHJcbiAgICAgICAgICAgIGNvbW1lbnQ6ICQoXCIjdGV4dG1zZ1wiKS52YWwoKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGRhdGFUeXBlOiAndGV4dCcsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSA9PSBcIjEwMFwiKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgnWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgIENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAob25FcnJvciA9PSBudWxsKSBhbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnKTtcclxuICAgICAgICAgICAgZWxzZSBvbkVycm9yKDk5LCAnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYUNvbnRhY3RVcykgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0iLCIvKlxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2Mi4xLjFcbiAqIGh0dHA6Ly9qcXVlcnkuY29tL1xuICpcbiAqIEluY2x1ZGVzIFNpenpsZS5qc1xuICogaHR0cDovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgMjAwNSwgMjAxNCBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBEYXRlOiAyMDE0LTA1LTAxVDE3OjExWlxuICovXG4hZnVuY3Rpb24oYSxiKXtcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YS5kb2N1bWVudD9iKGEsITApOmZ1bmN0aW9uKGEpe2lmKCFhLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcihcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIik7cmV0dXJuIGIoYSl9OmIoYSl9KFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe3ZhciBiPWEubGVuZ3RoLGM9Xy50eXBlKGEpO3JldHVyblwiZnVuY3Rpb25cIj09PWN8fF8uaXNXaW5kb3coYSk/ITE6MT09PWEubm9kZVR5cGUmJmI/ITA6XCJhcnJheVwiPT09Y3x8MD09PWJ8fFwibnVtYmVyXCI9PXR5cGVvZiBiJiZiPjAmJmItMSBpbiBhfWZ1bmN0aW9uIGQoYSxiLGMpe2lmKF8uaXNGdW5jdGlvbihiKSlyZXR1cm4gXy5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4hIWIuY2FsbChhLGQsYSkhPT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gXy5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iIT09Y30pO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiKXtpZihoYi50ZXN0KGIpKXJldHVybiBfLmZpbHRlcihiLGEsYyk7Yj1fLmZpbHRlcihiLGEpfXJldHVybiBfLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gVS5jYWxsKGIsYSk+PTAhPT1jfSl9ZnVuY3Rpb24gZShhLGIpe2Zvcig7KGE9YVtiXSkmJjEhPT1hLm5vZGVUeXBlOyk7cmV0dXJuIGF9ZnVuY3Rpb24gZihhKXt2YXIgYj1vYlthXT17fTtyZXR1cm4gXy5lYWNoKGEubWF0Y2gobmIpfHxbXSxmdW5jdGlvbihhLGMpe2JbY109ITB9KSxifWZ1bmN0aW9uIGcoKXtaLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsZywhMSksYS5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLGcsITEpLF8ucmVhZHkoKX1mdW5jdGlvbiBoKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMuY2FjaGU9e30sMCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJue319fSksdGhpcy5leHBhbmRvPV8uZXhwYW5kbytNYXRoLnJhbmRvbSgpfWZ1bmN0aW9uIGkoYSxiLGMpe3ZhciBkO2lmKHZvaWQgMD09PWMmJjE9PT1hLm5vZGVUeXBlKWlmKGQ9XCJkYXRhLVwiK2IucmVwbGFjZSh1YixcIi0kMVwiKS50b0xvd2VyQ2FzZSgpLGM9YS5nZXRBdHRyaWJ1dGUoZCksXCJzdHJpbmdcIj09dHlwZW9mIGMpe3RyeXtjPVwidHJ1ZVwiPT09Yz8hMDpcImZhbHNlXCI9PT1jPyExOlwibnVsbFwiPT09Yz9udWxsOitjK1wiXCI9PT1jPytjOnRiLnRlc3QoYyk/Xy5wYXJzZUpTT04oYyk6Y31jYXRjaChlKXt9c2Iuc2V0KGEsYixjKX1lbHNlIGM9dm9pZCAwO3JldHVybiBjfWZ1bmN0aW9uIGooKXtyZXR1cm4hMH1mdW5jdGlvbiBrKCl7cmV0dXJuITF9ZnVuY3Rpb24gbCgpe3RyeXtyZXR1cm4gWi5hY3RpdmVFbGVtZW50fWNhdGNoKGEpe319ZnVuY3Rpb24gbShhLGIpe3JldHVybiBfLm5vZGVOYW1lKGEsXCJ0YWJsZVwiKSYmXy5ub2RlTmFtZSgxMSE9PWIubm9kZVR5cGU/YjpiLmZpcnN0Q2hpbGQsXCJ0clwiKT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidGJvZHlcIilbMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0Ym9keVwiKSk6YX1mdW5jdGlvbiBuKGEpe3JldHVybiBhLnR5cGU9KG51bGwhPT1hLmdldEF0dHJpYnV0ZShcInR5cGVcIikpK1wiL1wiK2EudHlwZSxhfWZ1bmN0aW9uIG8oYSl7dmFyIGI9S2IuZXhlYyhhLnR5cGUpO3JldHVybiBiP2EudHlwZT1iWzFdOmEucmVtb3ZlQXR0cmlidXRlKFwidHlwZVwiKSxhfWZ1bmN0aW9uIHAoYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2Q+YztjKyspcmIuc2V0KGFbY10sXCJnbG9iYWxFdmFsXCIsIWJ8fHJiLmdldChiW2NdLFwiZ2xvYmFsRXZhbFwiKSl9ZnVuY3Rpb24gcShhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7aWYoMT09PWIubm9kZVR5cGUpe2lmKHJiLmhhc0RhdGEoYSkmJihmPXJiLmFjY2VzcyhhKSxnPXJiLnNldChiLGYpLGo9Zi5ldmVudHMpKXtkZWxldGUgZy5oYW5kbGUsZy5ldmVudHM9e307Zm9yKGUgaW4gailmb3IoYz0wLGQ9altlXS5sZW5ndGg7ZD5jO2MrKylfLmV2ZW50LmFkZChiLGUsaltlXVtjXSl9c2IuaGFzRGF0YShhKSYmKGg9c2IuYWNjZXNzKGEpLGk9Xy5leHRlbmQoe30saCksc2Iuc2V0KGIsaSkpfX1mdW5jdGlvbiByKGEsYil7dmFyIGM9YS5nZXRFbGVtZW50c0J5VGFnTmFtZT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fFwiKlwiKTphLnF1ZXJ5U2VsZWN0b3JBbGw/YS5xdWVyeVNlbGVjdG9yQWxsKGJ8fFwiKlwiKTpbXTtyZXR1cm4gdm9pZCAwPT09Ynx8YiYmXy5ub2RlTmFtZShhLGIpP18ubWVyZ2UoW2FdLGMpOmN9ZnVuY3Rpb24gcyhhLGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcImlucHV0XCI9PT1jJiZ5Yi50ZXN0KGEudHlwZSk/Yi5jaGVja2VkPWEuY2hlY2tlZDooXCJpbnB1dFwiPT09Y3x8XCJ0ZXh0YXJlYVwiPT09YykmJihiLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZSl9ZnVuY3Rpb24gdChiLGMpe3ZhciBkLGU9XyhjLmNyZWF0ZUVsZW1lbnQoYikpLmFwcGVuZFRvKGMuYm9keSksZj1hLmdldERlZmF1bHRDb21wdXRlZFN0eWxlJiYoZD1hLmdldERlZmF1bHRDb21wdXRlZFN0eWxlKGVbMF0pKT9kLmRpc3BsYXk6Xy5jc3MoZVswXSxcImRpc3BsYXlcIik7cmV0dXJuIGUuZGV0YWNoKCksZn1mdW5jdGlvbiB1KGEpe3ZhciBiPVosYz1PYlthXTtyZXR1cm4gY3x8KGM9dChhLGIpLFwibm9uZVwiIT09YyYmY3x8KE5iPShOYnx8XyhcIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz5cIikpLmFwcGVuZFRvKGIuZG9jdW1lbnRFbGVtZW50KSxiPU5iWzBdLmNvbnRlbnREb2N1bWVudCxiLndyaXRlKCksYi5jbG9zZSgpLGM9dChhLGIpLE5iLmRldGFjaCgpKSxPYlthXT1jKSxjfWZ1bmN0aW9uIHYoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHxSYihhKSxjJiYoZz1jLmdldFByb3BlcnR5VmFsdWUoYil8fGNbYl0pLGMmJihcIlwiIT09Z3x8Xy5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsYSl8fChnPV8uc3R5bGUoYSxiKSksUWIudGVzdChnKSYmUGIudGVzdChiKSYmKGQ9aC53aWR0aCxlPWgubWluV2lkdGgsZj1oLm1heFdpZHRoLGgubWluV2lkdGg9aC5tYXhXaWR0aD1oLndpZHRoPWcsZz1jLndpZHRoLGgud2lkdGg9ZCxoLm1pbldpZHRoPWUsaC5tYXhXaWR0aD1mKSksdm9pZCAwIT09Zz9nK1wiXCI6Z31mdW5jdGlvbiB3KGEsYil7cmV0dXJue2dldDpmdW5jdGlvbigpe3JldHVybiBhKCk/dm9pZCBkZWxldGUgdGhpcy5nZXQ6KHRoaXMuZ2V0PWIpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fWZ1bmN0aW9uIHgoYSxiKXtpZihiIGluIGEpcmV0dXJuIGI7Zm9yKHZhciBjPWJbMF0udG9VcHBlckNhc2UoKStiLnNsaWNlKDEpLGQ9YixlPVhiLmxlbmd0aDtlLS07KWlmKGI9WGJbZV0rYyxiIGluIGEpcmV0dXJuIGI7cmV0dXJuIGR9ZnVuY3Rpb24geShhLGIsYyl7dmFyIGQ9VGIuZXhlYyhiKTtyZXR1cm4gZD9NYXRoLm1heCgwLGRbMV0tKGN8fDApKSsoZFsyXXx8XCJweFwiKTpifWZ1bmN0aW9uIHooYSxiLGMsZCxlKXtmb3IodmFyIGY9Yz09PShkP1wiYm9yZGVyXCI6XCJjb250ZW50XCIpPzQ6XCJ3aWR0aFwiPT09Yj8xOjAsZz0wOzQ+ZjtmKz0yKVwibWFyZ2luXCI9PT1jJiYoZys9Xy5jc3MoYSxjK3diW2ZdLCEwLGUpKSxkPyhcImNvbnRlbnRcIj09PWMmJihnLT1fLmNzcyhhLFwicGFkZGluZ1wiK3diW2ZdLCEwLGUpKSxcIm1hcmdpblwiIT09YyYmKGctPV8uY3NzKGEsXCJib3JkZXJcIit3YltmXStcIldpZHRoXCIsITAsZSkpKTooZys9Xy5jc3MoYSxcInBhZGRpbmdcIit3YltmXSwhMCxlKSxcInBhZGRpbmdcIiE9PWMmJihnKz1fLmNzcyhhLFwiYm9yZGVyXCIrd2JbZl0rXCJXaWR0aFwiLCEwLGUpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gQShhLGIsYyl7dmFyIGQ9ITAsZT1cIndpZHRoXCI9PT1iP2Eub2Zmc2V0V2lkdGg6YS5vZmZzZXRIZWlnaHQsZj1SYihhKSxnPVwiYm9yZGVyLWJveFwiPT09Xy5jc3MoYSxcImJveFNpemluZ1wiLCExLGYpO2lmKDA+PWV8fG51bGw9PWUpe2lmKGU9dihhLGIsZiksKDA+ZXx8bnVsbD09ZSkmJihlPWEuc3R5bGVbYl0pLFFiLnRlc3QoZSkpcmV0dXJuIGU7ZD1nJiYoWS5ib3hTaXppbmdSZWxpYWJsZSgpfHxlPT09YS5zdHlsZVtiXSksZT1wYXJzZUZsb2F0KGUpfHwwfXJldHVybiBlK3ooYSxiLGN8fChnP1wiYm9yZGVyXCI6XCJjb250ZW50XCIpLGQsZikrXCJweFwifWZ1bmN0aW9uIEIoYSxiKXtmb3IodmFyIGMsZCxlLGY9W10sZz0wLGg9YS5sZW5ndGg7aD5nO2crKylkPWFbZ10sZC5zdHlsZSYmKGZbZ109cmIuZ2V0KGQsXCJvbGRkaXNwbGF5XCIpLGM9ZC5zdHlsZS5kaXNwbGF5LGI/KGZbZ118fFwibm9uZVwiIT09Y3x8KGQuc3R5bGUuZGlzcGxheT1cIlwiKSxcIlwiPT09ZC5zdHlsZS5kaXNwbGF5JiZ4YihkKSYmKGZbZ109cmIuYWNjZXNzKGQsXCJvbGRkaXNwbGF5XCIsdShkLm5vZGVOYW1lKSkpKTooZT14YihkKSxcIm5vbmVcIj09PWMmJmV8fHJiLnNldChkLFwib2xkZGlzcGxheVwiLGU/YzpfLmNzcyhkLFwiZGlzcGxheVwiKSkpKTtmb3IoZz0wO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihiJiZcIm5vbmVcIiE9PWQuc3R5bGUuZGlzcGxheSYmXCJcIiE9PWQuc3R5bGUuZGlzcGxheXx8KGQuc3R5bGUuZGlzcGxheT1iP2ZbZ118fFwiXCI6XCJub25lXCIpKTtyZXR1cm4gYX1mdW5jdGlvbiBDKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBDLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9ZnVuY3Rpb24gRCgpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7WWI9dm9pZCAwfSksWWI9Xy5ub3coKX1mdW5jdGlvbiBFKGEsYil7dmFyIGMsZD0wLGU9e2hlaWdodDphfTtmb3IoYj1iPzE6MDs0PmQ7ZCs9Mi1iKWM9d2JbZF0sZVtcIm1hcmdpblwiK2NdPWVbXCJwYWRkaW5nXCIrY109YTtyZXR1cm4gYiYmKGUub3BhY2l0eT1lLndpZHRoPWEpLGV9ZnVuY3Rpb24gRihhLGIsYyl7Zm9yKHZhciBkLGU9KGNjW2JdfHxbXSkuY29uY2F0KGNjW1wiKlwiXSksZj0wLGc9ZS5sZW5ndGg7Zz5mO2YrKylpZihkPWVbZl0uY2FsbChjLGIsYSkpcmV0dXJuIGR9ZnVuY3Rpb24gRyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsPXRoaXMsbT17fSxuPWEuc3R5bGUsbz1hLm5vZGVUeXBlJiZ4YihhKSxwPXJiLmdldChhLFwiZnhzaG93XCIpO2MucXVldWV8fChoPV8uX3F1ZXVlSG9va3MoYSxcImZ4XCIpLG51bGw9PWgudW5xdWV1ZWQmJihoLnVucXVldWVkPTAsaT1oLmVtcHR5LmZpcmUsaC5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7aC51bnF1ZXVlZHx8aSgpfSksaC51bnF1ZXVlZCsrLGwuYWx3YXlzKGZ1bmN0aW9uKCl7bC5hbHdheXMoZnVuY3Rpb24oKXtoLnVucXVldWVkLS0sXy5xdWV1ZShhLFwiZnhcIikubGVuZ3RofHxoLmVtcHR5LmZpcmUoKX0pfSkpLDE9PT1hLm5vZGVUeXBlJiYoXCJoZWlnaHRcImluIGJ8fFwid2lkdGhcImluIGIpJiYoYy5vdmVyZmxvdz1bbi5vdmVyZmxvdyxuLm92ZXJmbG93WCxuLm92ZXJmbG93WV0saj1fLmNzcyhhLFwiZGlzcGxheVwiKSxrPVwibm9uZVwiPT09aj9yYi5nZXQoYSxcIm9sZGRpc3BsYXlcIil8fHUoYS5ub2RlTmFtZSk6aixcImlubGluZVwiPT09ayYmXCJub25lXCI9PT1fLmNzcyhhLFwiZmxvYXRcIikmJihuLmRpc3BsYXk9XCJpbmxpbmUtYmxvY2tcIikpLGMub3ZlcmZsb3cmJihuLm92ZXJmbG93PVwiaGlkZGVuXCIsbC5hbHdheXMoZnVuY3Rpb24oKXtuLm92ZXJmbG93PWMub3ZlcmZsb3dbMF0sbi5vdmVyZmxvd1g9Yy5vdmVyZmxvd1sxXSxuLm92ZXJmbG93WT1jLm92ZXJmbG93WzJdfSkpO2ZvcihkIGluIGIpaWYoZT1iW2RdLCRiLmV4ZWMoZSkpe2lmKGRlbGV0ZSBiW2RdLGY9Znx8XCJ0b2dnbGVcIj09PWUsZT09PShvP1wiaGlkZVwiOlwic2hvd1wiKSl7aWYoXCJzaG93XCIhPT1lfHwhcHx8dm9pZCAwPT09cFtkXSljb250aW51ZTtvPSEwfW1bZF09cCYmcFtkXXx8Xy5zdHlsZShhLGQpfWVsc2Ugaj12b2lkIDA7aWYoXy5pc0VtcHR5T2JqZWN0KG0pKVwiaW5saW5lXCI9PT0oXCJub25lXCI9PT1qP3UoYS5ub2RlTmFtZSk6aikmJihuLmRpc3BsYXk9aik7ZWxzZXtwP1wiaGlkZGVuXCJpbiBwJiYobz1wLmhpZGRlbik6cD1yYi5hY2Nlc3MoYSxcImZ4c2hvd1wiLHt9KSxmJiYocC5oaWRkZW49IW8pLG8/XyhhKS5zaG93KCk6bC5kb25lKGZ1bmN0aW9uKCl7XyhhKS5oaWRlKCl9KSxsLmRvbmUoZnVuY3Rpb24oKXt2YXIgYjtyYi5yZW1vdmUoYSxcImZ4c2hvd1wiKTtmb3IoYiBpbiBtKV8uc3R5bGUoYSxiLG1bYl0pfSk7Zm9yKGQgaW4gbSlnPUYobz9wW2RdOjAsZCxsKSxkIGluIHB8fChwW2RdPWcuc3RhcnQsbyYmKGcuZW5kPWcuc3RhcnQsZy5zdGFydD1cIndpZHRoXCI9PT1kfHxcImhlaWdodFwiPT09ZD8xOjApKX19ZnVuY3Rpb24gSChhLGIpe3ZhciBjLGQsZSxmLGc7Zm9yKGMgaW4gYSlpZihkPV8uY2FtZWxDYXNlKGMpLGU9YltkXSxmPWFbY10sXy5pc0FycmF5KGYpJiYoZT1mWzFdLGY9YVtjXT1mWzBdKSxjIT09ZCYmKGFbZF09ZixkZWxldGUgYVtjXSksZz1fLmNzc0hvb2tzW2RdLGcmJlwiZXhwYW5kXCJpbiBnKXtmPWcuZXhwYW5kKGYpLGRlbGV0ZSBhW2RdO2ZvcihjIGluIGYpYyBpbiBhfHwoYVtjXT1mW2NdLGJbY109ZSl9ZWxzZSBiW2RdPWV9ZnVuY3Rpb24gSShhLGIsYyl7dmFyIGQsZSxmPTAsZz1iYy5sZW5ndGgsaD1fLkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIGkuZWxlbX0pLGk9ZnVuY3Rpb24oKXtpZihlKXJldHVybiExO2Zvcih2YXIgYj1ZYnx8RCgpLGM9TWF0aC5tYXgoMCxqLnN0YXJ0VGltZStqLmR1cmF0aW9uLWIpLGQ9Yy9qLmR1cmF0aW9ufHwwLGY9MS1kLGc9MCxpPWoudHdlZW5zLmxlbmd0aDtpPmc7ZysrKWoudHdlZW5zW2ddLnJ1bihmKTtyZXR1cm4gaC5ub3RpZnlXaXRoKGEsW2osZixjXSksMT5mJiZpP2M6KGgucmVzb2x2ZVdpdGgoYSxbal0pLCExKX0saj1oLnByb21pc2Uoe2VsZW06YSxwcm9wczpfLmV4dGVuZCh7fSxiKSxvcHRzOl8uZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9fSxjKSxvcmlnaW5hbFByb3BlcnRpZXM6YixvcmlnaW5hbE9wdGlvbnM6YyxzdGFydFRpbWU6WWJ8fEQoKSxkdXJhdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihiLGMpe3ZhciBkPV8uVHdlZW4oYSxqLm9wdHMsYixjLGoub3B0cy5zcGVjaWFsRWFzaW5nW2JdfHxqLm9wdHMuZWFzaW5nKTtyZXR1cm4gai50d2VlbnMucHVzaChkKSxkfSxzdG9wOmZ1bmN0aW9uKGIpe3ZhciBjPTAsZD1iP2oudHdlZW5zLmxlbmd0aDowO2lmKGUpcmV0dXJuIHRoaXM7Zm9yKGU9ITA7ZD5jO2MrKylqLnR3ZWVuc1tjXS5ydW4oMSk7cmV0dXJuIGI/aC5yZXNvbHZlV2l0aChhLFtqLGJdKTpoLnJlamVjdFdpdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7Zm9yKEgoayxqLm9wdHMuc3BlY2lhbEVhc2luZyk7Zz5mO2YrKylpZihkPWJjW2ZdLmNhbGwoaixhLGssai5vcHRzKSlyZXR1cm4gZDtyZXR1cm4gXy5tYXAoayxGLGopLF8uaXNGdW5jdGlvbihqLm9wdHMuc3RhcnQpJiZqLm9wdHMuc3RhcnQuY2FsbChhLGopLF8uZngudGltZXIoXy5leHRlbmQoaSx7ZWxlbTphLGFuaW06aixxdWV1ZTpqLm9wdHMucXVldWV9KSksai5wcm9ncmVzcyhqLm9wdHMucHJvZ3Jlc3MpLmRvbmUoai5vcHRzLmRvbmUsai5vcHRzLmNvbXBsZXRlKS5mYWlsKGoub3B0cy5mYWlsKS5hbHdheXMoai5vcHRzLmFsd2F5cyl9ZnVuY3Rpb24gSihhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXtcInN0cmluZ1wiIT10eXBlb2YgYiYmKGM9YixiPVwiKlwiKTt2YXIgZCxlPTAsZj1iLnRvTG93ZXJDYXNlKCkubWF0Y2gobmIpfHxbXTtpZihfLmlzRnVuY3Rpb24oYykpZm9yKDtkPWZbZSsrXTspXCIrXCI9PT1kWzBdPyhkPWQuc2xpY2UoMSl8fFwiKlwiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24gSyhhLGIsYyxkKXtmdW5jdGlvbiBlKGgpe3ZhciBpO3JldHVybiBmW2hdPSEwLF8uZWFjaChhW2hdfHxbXSxmdW5jdGlvbihhLGgpe3ZhciBqPWgoYixjLGQpO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBqfHxnfHxmW2pdP2c/IShpPWopOnZvaWQgMDooYi5kYXRhVHlwZXMudW5zaGlmdChqKSxlKGopLCExKX0pLGl9dmFyIGY9e30sZz1hPT09dmM7cmV0dXJuIGUoYi5kYXRhVHlwZXNbMF0pfHwhZltcIipcIl0mJmUoXCIqXCIpfWZ1bmN0aW9uIEwoYSxiKXt2YXIgYyxkLGU9Xy5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihjIGluIGIpdm9pZCAwIT09YltjXSYmKChlW2NdP2E6ZHx8KGQ9e30pKVtjXT1iW2NdKTtyZXR1cm4gZCYmXy5leHRlbmQoITAsYSxkKSxhfWZ1bmN0aW9uIE0oYSxiLGMpe2Zvcih2YXIgZCxlLGYsZyxoPWEuY29udGVudHMsaT1hLmRhdGFUeXBlcztcIipcIj09PWlbMF07KWkuc2hpZnQoKSx2b2lkIDA9PT1kJiYoZD1hLm1pbWVUeXBlfHxiLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpKTtpZihkKWZvcihlIGluIGgpaWYoaFtlXSYmaFtlXS50ZXN0KGQpKXtpLnVuc2hpZnQoZSk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGUgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tlK1wiIFwiK2lbMF1dKXtmPWU7YnJlYWt9Z3x8KGc9ZSl9Zj1mfHxnfXJldHVybiBmPyhmIT09aVswXSYmaS51bnNoaWZ0KGYpLGNbZl0pOnZvaWQgMH1mdW5jdGlvbiBOKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaj17fSxrPWEuZGF0YVR5cGVzLnNsaWNlKCk7aWYoa1sxXSlmb3IoZyBpbiBhLmNvbnZlcnRlcnMpaltnLnRvTG93ZXJDYXNlKCldPWEuY29udmVydGVyc1tnXTtmb3IoZj1rLnNoaWZ0KCk7ZjspaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlpZihcIipcIj09PWYpZj1pO2Vsc2UgaWYoXCIqXCIhPT1pJiZpIT09Zil7aWYoZz1qW2krXCIgXCIrZl18fGpbXCIqIFwiK2ZdLCFnKWZvcihlIGluIGopaWYoaD1lLnNwbGl0KFwiIFwiKSxoWzFdPT09ZiYmKGc9altpK1wiIFwiK2hbMF1dfHxqW1wiKiBcIitoWzBdXSkpe2c9PT0hMD9nPWpbZV06altlXSE9PSEwJiYoZj1oWzBdLGsudW5zaGlmdChoWzFdKSk7YnJlYWt9aWYoZyE9PSEwKWlmKGcmJmFbXCJ0aHJvd3NcIl0pYj1nKGIpO2Vsc2UgdHJ5e2I9ZyhiKX1jYXRjaChsKXtyZXR1cm57c3RhdGU6XCJwYXJzZXJlcnJvclwiLGVycm9yOmc/bDpcIk5vIGNvbnZlcnNpb24gZnJvbSBcIitpK1wiIHRvIFwiK2Z9fX1yZXR1cm57c3RhdGU6XCJzdWNjZXNzXCIsZGF0YTpifX1mdW5jdGlvbiBPKGEsYixjLGQpe3ZhciBlO2lmKF8uaXNBcnJheShiKSlfLmVhY2goYixmdW5jdGlvbihiLGUpe2N8fHpjLnRlc3QoYSk/ZChhLGUpOk8oYStcIltcIisoXCJvYmplY3RcIj09dHlwZW9mIGU/YjpcIlwiKStcIl1cIixlLGMsZCl9KTtlbHNlIGlmKGN8fFwib2JqZWN0XCIhPT1fLnR5cGUoYikpZChhLGIpO2Vsc2UgZm9yKGUgaW4gYilPKGErXCJbXCIrZStcIl1cIixiW2VdLGMsZCl9ZnVuY3Rpb24gUChhKXtyZXR1cm4gXy5pc1dpbmRvdyhhKT9hOjk9PT1hLm5vZGVUeXBlJiZhLmRlZmF1bHRWaWV3fXZhciBRPVtdLFI9US5zbGljZSxTPVEuY29uY2F0LFQ9US5wdXNoLFU9US5pbmRleE9mLFY9e30sVz1WLnRvU3RyaW5nLFg9Vi5oYXNPd25Qcm9wZXJ0eSxZPXt9LFo9YS5kb2N1bWVudCwkPVwiMi4xLjFcIixfPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBfLmZuLmluaXQoYSxiKX0sYWI9L15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLGJiPS9eLW1zLS8sY2I9Ly0oW1xcZGEtel0pL2dpLGRiPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudG9VcHBlckNhc2UoKX07Xy5mbj1fLnByb3RvdHlwZT17anF1ZXJ5OiQsY29uc3RydWN0b3I6XyxzZWxlY3RvcjpcIlwiLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gUi5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/MD5hP3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXTpSLmNhbGwodGhpcyl9LHB1c2hTdGFjazpmdW5jdGlvbihhKXt2YXIgYj1fLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gYi5wcmV2T2JqZWN0PXRoaXMsYi5jb250ZXh0PXRoaXMuY29udGV4dCxifSxlYWNoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIF8uZWFjaCh0aGlzLGEsYil9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soXy5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhSLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubGVuZ3RoLGM9K2ErKDA+YT9iOjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhjPj0wJiZiPmM/W3RoaXNbY11dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpULHNvcnQ6US5zb3J0LHNwbGljZTpRLnNwbGljZX0sXy5leHRlbmQ9Xy5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZz1hcmd1bWVudHNbMF18fHt9LGg9MSxpPWFyZ3VtZW50cy5sZW5ndGgsaj0hMTtmb3IoXCJib29sZWFuXCI9PXR5cGVvZiBnJiYoaj1nLGc9YXJndW1lbnRzW2hdfHx7fSxoKyspLFwib2JqZWN0XCI9PXR5cGVvZiBnfHxfLmlzRnVuY3Rpb24oZyl8fChnPXt9KSxoPT09aSYmKGc9dGhpcyxoLS0pO2k+aDtoKyspaWYobnVsbCE9KGE9YXJndW1lbnRzW2hdKSlmb3IoYiBpbiBhKWM9Z1tiXSxkPWFbYl0sZyE9PWQmJihqJiZkJiYoXy5pc1BsYWluT2JqZWN0KGQpfHwoZT1fLmlzQXJyYXkoZCkpKT8oZT8oZT0hMSxmPWMmJl8uaXNBcnJheShjKT9jOltdKTpmPWMmJl8uaXNQbGFpbk9iamVjdChjKT9jOnt9LGdbYl09Xy5leHRlbmQoaixmLGQpKTp2b2lkIDAhPT1kJiYoZ1tiXT1kKSk7cmV0dXJuIGd9LF8uZXh0ZW5kKHtleHBhbmRvOlwialF1ZXJ5XCIrKCQrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXFxEL2csXCJcIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuXCJmdW5jdGlvblwiPT09Xy50eXBlKGEpfSxpc0FycmF5OkFycmF5LmlzQXJyYXksaXNXaW5kb3c6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWEmJmE9PT1hLndpbmRvd30saXNOdW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiFfLmlzQXJyYXkoYSkmJmEtcGFyc2VGbG9hdChhKT49MH0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiIT09Xy50eXBlKGEpfHxhLm5vZGVUeXBlfHxfLmlzV2luZG93KGEpPyExOmEuY29uc3RydWN0b3ImJiFYLmNhbGwoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsXCJpc1Byb3RvdHlwZU9mXCIpPyExOiEwfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiO2ZvcihiIGluIGEpcmV0dXJuITE7cmV0dXJuITB9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/YStcIlwiOlwib2JqZWN0XCI9PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhP1ZbVy5jYWxsKGEpXXx8XCJvYmplY3RcIjp0eXBlb2YgYX0sZ2xvYmFsRXZhbDpmdW5jdGlvbihhKXt2YXIgYixjPWV2YWw7YT1fLnRyaW0oYSksYSYmKDE9PT1hLmluZGV4T2YoXCJ1c2Ugc3RyaWN0XCIpPyhiPVouY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSxiLnRleHQ9YSxaLmhlYWQuYXBwZW5kQ2hpbGQoYikucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKSk6YyhhKSl9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKGJiLFwibXMtXCIpLnJlcGxhY2UoY2IsZGIpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGY9MCxnPWEubGVuZ3RoLGg9YyhhKTtpZihkKXtpZihoKWZvcig7Zz5mJiYoZT1iLmFwcGx5KGFbZl0sZCksZSE9PSExKTtmKyspO2Vsc2UgZm9yKGYgaW4gYSlpZihlPWIuYXBwbHkoYVtmXSxkKSxlPT09ITEpYnJlYWt9ZWxzZSBpZihoKWZvcig7Zz5mJiYoZT1iLmNhbGwoYVtmXSxmLGFbZl0pLGUhPT0hMSk7ZisrKTtlbHNlIGZvcihmIGluIGEpaWYoZT1iLmNhbGwoYVtmXSxmLGFbZl0pLGU9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9cIlwiOihhK1wiXCIpLnJlcGxhY2UoYWIsXCJcIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBkPWJ8fFtdO3JldHVybiBudWxsIT1hJiYoYyhPYmplY3QoYSkpP18ubWVyZ2UoZCxcInN0cmluZ1wiPT10eXBlb2YgYT9bYV06YSk6VC5jYWxsKGQsYSkpLGR9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsPT1iPy0xOlUuY2FsbChiLGEsYyl9LG1lcmdlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPStiLmxlbmd0aCxkPTAsZT1hLmxlbmd0aDtjPmQ7ZCsrKWFbZSsrXT1iW2RdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7Zz5mO2YrKylkPSFiKGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEsYixkKXt2YXIgZSxmPTAsZz1hLmxlbmd0aCxoPWMoYSksaT1bXTtpZihoKWZvcig7Zz5mO2YrKyllPWIoYVtmXSxmLGQpLG51bGwhPWUmJmkucHVzaChlKTtlbHNlIGZvcihmIGluIGEpZT1iKGFbZl0sZixkKSxudWxsIT1lJiZpLnB1c2goZSk7cmV0dXJuIFMuYXBwbHkoW10saSl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZTtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYiYmKGM9YVtiXSxiPWEsYT1jKSxfLmlzRnVuY3Rpb24oYSk/KGQ9Ui5jYWxsKGFyZ3VtZW50cywyKSxlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYnx8dGhpcyxkLmNvbmNhdChSLmNhbGwoYXJndW1lbnRzKSkpfSxlLmd1aWQ9YS5ndWlkPWEuZ3VpZHx8Xy5ndWlkKyssZSk6dm9pZCAwfSxub3c6RGF0ZS5ub3csc3VwcG9ydDpZfSksXy5lYWNoKFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvclwiLnNwbGl0KFwiIFwiKSxmdW5jdGlvbihhLGIpe1ZbXCJbb2JqZWN0IFwiK2IrXCJdXCJdPWIudG9Mb3dlckNhc2UoKX0pO3ZhciBlYj0vKlxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjEuMTAuMTlcbiAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IDIwMTMgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxNC0wNC0xOFxuICovXG4gICAgZnVuY3Rpb24gKGEpIHsgZnVuY3Rpb24gYihhLCBiLCBjLCBkKSB7IHZhciBlLCBmLCBnLCBoLCBpLCBqLCBsLCBuLCBvLCBwOyBpZiAoKGIgPyBiLm93bmVyRG9jdW1lbnQgfHwgYiA6IE8pICE9PSBHICYmIEYoYiksIGIgPSBiIHx8IEcsIGMgPSBjIHx8IFtdLCAhYSB8fCBcInN0cmluZ1wiICE9IHR5cGVvZiBhKSByZXR1cm4gYzsgaWYgKDEgIT09IChoID0gYi5ub2RlVHlwZSkgJiYgOSAhPT0gaCkgcmV0dXJuIFtdOyBpZiAoSSAmJiAhZCkgeyBpZiAoZSA9IHNiLmV4ZWMoYSkpIGlmIChnID0gZVsxXSkgeyBpZiAoOSA9PT0gaCkgeyBpZiAoZiA9IGIuZ2V0RWxlbWVudEJ5SWQoZyksICFmIHx8ICFmLnBhcmVudE5vZGUpIHJldHVybiBjOyBpZiAoZi5pZCA9PT0gZykgcmV0dXJuIGMucHVzaChmKSwgYyB9IGVsc2UgaWYgKGIub3duZXJEb2N1bWVudCAmJiAoZiA9IGIub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChnKSkgJiYgTShiLCBmKSAmJiBmLmlkID09PSBnKSByZXR1cm4gYy5wdXNoKGYpLCBjIH0gZWxzZSB7IGlmIChlWzJdKSByZXR1cm4gXy5hcHBseShjLCBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpKSwgYzsgaWYgKChnID0gZVszXSkgJiYgdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSkgcmV0dXJuIF8uYXBwbHkoYywgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGcpKSwgYyB9IGlmICh2LnFzYSAmJiAoIUogfHwgIUoudGVzdChhKSkpIHsgaWYgKG4gPSBsID0gTiwgbyA9IGIsIHAgPSA5ID09PSBoICYmIGEsIDEgPT09IGggJiYgXCJvYmplY3RcIiAhPT0gYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7IGZvciAoaiA9IHooYSksIChsID0gYi5nZXRBdHRyaWJ1dGUoXCJpZFwiKSkgPyBuID0gbC5yZXBsYWNlKHViLCBcIlxcXFwkJlwiKSA6IGIuc2V0QXR0cmlidXRlKFwiaWRcIiwgbiksIG4gPSBcIltpZD0nXCIgKyBuICsgXCInXSBcIiwgaSA9IGoubGVuZ3RoOyBpLS07KWpbaV0gPSBuICsgbShqW2ldKTsgbyA9IHRiLnRlc3QoYSkgJiYgayhiLnBhcmVudE5vZGUpIHx8IGIsIHAgPSBqLmpvaW4oXCIsXCIpIH0gaWYgKHApIHRyeSB7IHJldHVybiBfLmFwcGx5KGMsIG8ucXVlcnlTZWxlY3RvckFsbChwKSksIGMgfSBjYXRjaCAocSkgeyB9IGZpbmFsbHkgeyBsIHx8IGIucmVtb3ZlQXR0cmlidXRlKFwiaWRcIikgfSB9IH0gcmV0dXJuIEIoYS5yZXBsYWNlKGliLCBcIiQxXCIpLCBiLCBjLCBkKSB9IGZ1bmN0aW9uIGMoKSB7IGZ1bmN0aW9uIGEoYywgZCkgeyByZXR1cm4gYi5wdXNoKGMgKyBcIiBcIikgPiB3LmNhY2hlTGVuZ3RoICYmIGRlbGV0ZSBhW2Iuc2hpZnQoKV0sIGFbYyArIFwiIFwiXSA9IGQgfSB2YXIgYiA9IFtdOyByZXR1cm4gYSB9IGZ1bmN0aW9uIGQoYSkgeyByZXR1cm4gYVtOXSA9ICEwLCBhIH0gZnVuY3Rpb24gZShhKSB7IHZhciBiID0gRy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpOyB0cnkgeyByZXR1cm4gISFhKGIpIH0gY2F0Y2ggKGMpIHsgcmV0dXJuICExIH0gZmluYWxseSB7IGIucGFyZW50Tm9kZSAmJiBiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksIGIgPSBudWxsIH0gfSBmdW5jdGlvbiBmKGEsIGIpIHsgZm9yICh2YXIgYyA9IGEuc3BsaXQoXCJ8XCIpLCBkID0gYS5sZW5ndGg7IGQtLTspdy5hdHRySGFuZGxlW2NbZF1dID0gYiB9IGZ1bmN0aW9uIGcoYSwgYikgeyB2YXIgYyA9IGIgJiYgYSwgZCA9IGMgJiYgMSA9PT0gYS5ub2RlVHlwZSAmJiAxID09PSBiLm5vZGVUeXBlICYmICh+Yi5zb3VyY2VJbmRleCB8fCBXKSAtICh+YS5zb3VyY2VJbmRleCB8fCBXKTsgaWYgKGQpIHJldHVybiBkOyBpZiAoYykgZm9yICg7IGMgPSBjLm5leHRTaWJsaW5nOylpZiAoYyA9PT0gYikgcmV0dXJuIC0xOyByZXR1cm4gYSA/IDEgOiAtMSB9IGZ1bmN0aW9uIGgoYSkgeyByZXR1cm4gZnVuY3Rpb24gKGIpIHsgdmFyIGMgPSBiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7IHJldHVybiBcImlucHV0XCIgPT09IGMgJiYgYi50eXBlID09PSBhIH0gfSBmdW5jdGlvbiBpKGEpIHsgcmV0dXJuIGZ1bmN0aW9uIChiKSB7IHZhciBjID0gYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gKFwiaW5wdXRcIiA9PT0gYyB8fCBcImJ1dHRvblwiID09PSBjKSAmJiBiLnR5cGUgPT09IGEgfSB9IGZ1bmN0aW9uIGooYSkgeyByZXR1cm4gZChmdW5jdGlvbiAoYikgeyByZXR1cm4gYiA9ICtiLCBkKGZ1bmN0aW9uIChjLCBkKSB7IGZvciAodmFyIGUsIGYgPSBhKFtdLCBjLmxlbmd0aCwgYiksIGcgPSBmLmxlbmd0aDsgZy0tOyljW2UgPSBmW2ddXSAmJiAoY1tlXSA9ICEoZFtlXSA9IGNbZV0pKSB9KSB9KSB9IGZ1bmN0aW9uIGsoYSkgeyByZXR1cm4gYSAmJiB0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gViAmJiBhIH0gZnVuY3Rpb24gbCgpIHsgfSBmdW5jdGlvbiBtKGEpIHsgZm9yICh2YXIgYiA9IDAsIGMgPSBhLmxlbmd0aCwgZCA9IFwiXCI7IGMgPiBiOyBiKyspZCArPSBhW2JdLnZhbHVlOyByZXR1cm4gZCB9IGZ1bmN0aW9uIG4oYSwgYiwgYykgeyB2YXIgZCA9IGIuZGlyLCBlID0gYyAmJiBcInBhcmVudE5vZGVcIiA9PT0gZCwgZiA9IFErKzsgcmV0dXJuIGIuZmlyc3QgPyBmdW5jdGlvbiAoYiwgYywgZikgeyBmb3IgKDsgYiA9IGJbZF07KWlmICgxID09PSBiLm5vZGVUeXBlIHx8IGUpIHJldHVybiBhKGIsIGMsIGYpIH0gOiBmdW5jdGlvbiAoYiwgYywgZykgeyB2YXIgaCwgaSwgaiA9IFtQLCBmXTsgaWYgKGcpIHsgZm9yICg7IGIgPSBiW2RdOylpZiAoKDEgPT09IGIubm9kZVR5cGUgfHwgZSkgJiYgYShiLCBjLCBnKSkgcmV0dXJuICEwIH0gZWxzZSBmb3IgKDsgYiA9IGJbZF07KWlmICgxID09PSBiLm5vZGVUeXBlIHx8IGUpIHsgaWYgKGkgPSBiW05dIHx8IChiW05dID0ge30pLCAoaCA9IGlbZF0pICYmIGhbMF0gPT09IFAgJiYgaFsxXSA9PT0gZikgcmV0dXJuIGpbMl0gPSBoWzJdOyBpZiAoaVtkXSA9IGosIGpbMl0gPSBhKGIsIGMsIGcpKSByZXR1cm4gITAgfSB9IH0gZnVuY3Rpb24gbyhhKSB7IHJldHVybiBhLmxlbmd0aCA+IDEgPyBmdW5jdGlvbiAoYiwgYywgZCkgeyBmb3IgKHZhciBlID0gYS5sZW5ndGg7IGUtLTspaWYgKCFhW2VdKGIsIGMsIGQpKSByZXR1cm4gITE7IHJldHVybiAhMCB9IDogYVswXSB9IGZ1bmN0aW9uIHAoYSwgYywgZCkgeyBmb3IgKHZhciBlID0gMCwgZiA9IGMubGVuZ3RoOyBmID4gZTsgZSsrKWIoYSwgY1tlXSwgZCk7IHJldHVybiBkIH0gZnVuY3Rpb24gcShhLCBiLCBjLCBkLCBlKSB7IGZvciAodmFyIGYsIGcgPSBbXSwgaCA9IDAsIGkgPSBhLmxlbmd0aCwgaiA9IG51bGwgIT0gYjsgaSA+IGg7IGgrKykoZiA9IGFbaF0pICYmICghYyB8fCBjKGYsIGQsIGUpKSAmJiAoZy5wdXNoKGYpLCBqICYmIGIucHVzaChoKSk7IHJldHVybiBnIH0gZnVuY3Rpb24gcihhLCBiLCBjLCBlLCBmLCBnKSB7IHJldHVybiBlICYmICFlW05dICYmIChlID0gcihlKSksIGYgJiYgIWZbTl0gJiYgKGYgPSByKGYsIGcpKSwgZChmdW5jdGlvbiAoZCwgZywgaCwgaSkgeyB2YXIgaiwgaywgbCwgbSA9IFtdLCBuID0gW10sIG8gPSBnLmxlbmd0aCwgciA9IGQgfHwgcChiIHx8IFwiKlwiLCBoLm5vZGVUeXBlID8gW2hdIDogaCwgW10pLCBzID0gIWEgfHwgIWQgJiYgYiA/IHIgOiBxKHIsIG0sIGEsIGgsIGkpLCB0ID0gYyA/IGYgfHwgKGQgPyBhIDogbyB8fCBlKSA/IFtdIDogZyA6IHM7IGlmIChjICYmIGMocywgdCwgaCwgaSksIGUpIGZvciAoaiA9IHEodCwgbiksIGUoaiwgW10sIGgsIGkpLCBrID0gai5sZW5ndGg7IGstLTspKGwgPSBqW2tdKSAmJiAodFtuW2tdXSA9ICEoc1tuW2tdXSA9IGwpKTsgaWYgKGQpIHsgaWYgKGYgfHwgYSkgeyBpZiAoZikgeyBmb3IgKGogPSBbXSwgayA9IHQubGVuZ3RoOyBrLS07KShsID0gdFtrXSkgJiYgai5wdXNoKHNba10gPSBsKTsgZihudWxsLCB0ID0gW10sIGosIGkpIH0gZm9yIChrID0gdC5sZW5ndGg7IGstLTspKGwgPSB0W2tdKSAmJiAoaiA9IGYgPyBiYi5jYWxsKGQsIGwpIDogbVtrXSkgPiAtMSAmJiAoZFtqXSA9ICEoZ1tqXSA9IGwpKSB9IH0gZWxzZSB0ID0gcSh0ID09PSBnID8gdC5zcGxpY2UobywgdC5sZW5ndGgpIDogdCksIGYgPyBmKG51bGwsIGcsIHQsIGkpIDogXy5hcHBseShnLCB0KSB9KSB9IGZ1bmN0aW9uIHMoYSkgeyBmb3IgKHZhciBiLCBjLCBkLCBlID0gYS5sZW5ndGgsIGYgPSB3LnJlbGF0aXZlW2FbMF0udHlwZV0sIGcgPSBmIHx8IHcucmVsYXRpdmVbXCIgXCJdLCBoID0gZiA/IDEgOiAwLCBpID0gbihmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSA9PT0gYiB9LCBnLCAhMCksIGogPSBuKGZ1bmN0aW9uIChhKSB7IHJldHVybiBiYi5jYWxsKGIsIGEpID4gLTEgfSwgZywgITApLCBrID0gW2Z1bmN0aW9uIChhLCBjLCBkKSB7IHJldHVybiAhZiAmJiAoZCB8fCBjICE9PSBDKSB8fCAoKGIgPSBjKS5ub2RlVHlwZSA/IGkoYSwgYywgZCkgOiBqKGEsIGMsIGQpKSB9XTsgZSA+IGg7IGgrKylpZiAoYyA9IHcucmVsYXRpdmVbYVtoXS50eXBlXSkgayA9IFtuKG8oayksIGMpXTsgZWxzZSB7IGlmIChjID0gdy5maWx0ZXJbYVtoXS50eXBlXS5hcHBseShudWxsLCBhW2hdLm1hdGNoZXMpLCBjW05dKSB7IGZvciAoZCA9ICsraDsgZSA+IGQgJiYgIXcucmVsYXRpdmVbYVtkXS50eXBlXTsgZCsrKTsgcmV0dXJuIHIoaCA+IDEgJiYgbyhrKSwgaCA+IDEgJiYgbShhLnNsaWNlKDAsIGggLSAxKS5jb25jYXQoeyB2YWx1ZTogXCIgXCIgPT09IGFbaCAtIDJdLnR5cGUgPyBcIipcIiA6IFwiXCIgfSkpLnJlcGxhY2UoaWIsIFwiJDFcIiksIGMsIGQgPiBoICYmIHMoYS5zbGljZShoLCBkKSksIGUgPiBkICYmIHMoYSA9IGEuc2xpY2UoZCkpLCBlID4gZCAmJiBtKGEpKSB9IGsucHVzaChjKSB9IHJldHVybiBvKGspIH0gZnVuY3Rpb24gdChhLCBjKSB7IHZhciBlID0gYy5sZW5ndGggPiAwLCBmID0gYS5sZW5ndGggPiAwLCBnID0gZnVuY3Rpb24gKGQsIGcsIGgsIGksIGopIHsgdmFyIGssIGwsIG0sIG4gPSAwLCBvID0gXCIwXCIsIHAgPSBkICYmIFtdLCByID0gW10sIHMgPSBDLCB0ID0gZCB8fCBmICYmIHcuZmluZC5UQUcoXCIqXCIsIGopLCB1ID0gUCArPSBudWxsID09IHMgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAuMSwgdiA9IHQubGVuZ3RoOyBmb3IgKGogJiYgKEMgPSBnICE9PSBHICYmIGcpOyBvICE9PSB2ICYmIG51bGwgIT0gKGsgPSB0W29dKTsgbysrKSB7IGlmIChmICYmIGspIHsgZm9yIChsID0gMDsgbSA9IGFbbCsrXTspaWYgKG0oaywgZywgaCkpIHsgaS5wdXNoKGspOyBicmVhayB9IGogJiYgKFAgPSB1KSB9IGUgJiYgKChrID0gIW0gJiYgaykgJiYgbi0tLCBkICYmIHAucHVzaChrKSkgfSBpZiAobiArPSBvLCBlICYmIG8gIT09IG4pIHsgZm9yIChsID0gMDsgbSA9IGNbbCsrXTspbShwLCByLCBnLCBoKTsgaWYgKGQpIHsgaWYgKG4gPiAwKSBmb3IgKDsgby0tOylwW29dIHx8IHJbb10gfHwgKHJbb10gPSBaLmNhbGwoaSkpOyByID0gcShyKSB9IF8uYXBwbHkoaSwgciksIGogJiYgIWQgJiYgci5sZW5ndGggPiAwICYmIG4gKyBjLmxlbmd0aCA+IDEgJiYgYi51bmlxdWVTb3J0KGkpIH0gcmV0dXJuIGogJiYgKFAgPSB1LCBDID0gcyksIHAgfTsgcmV0dXJuIGUgPyBkKGcpIDogZyB9IHZhciB1LCB2LCB3LCB4LCB5LCB6LCBBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBJLCBKLCBLLCBMLCBNLCBOID0gXCJzaXp6bGVcIiArIC1uZXcgRGF0ZSwgTyA9IGEuZG9jdW1lbnQsIFAgPSAwLCBRID0gMCwgUiA9IGMoKSwgUyA9IGMoKSwgVCA9IGMoKSwgVSA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhID09PSBiICYmIChFID0gITApLCAwIH0sIFYgPSBcInVuZGVmaW5lZFwiLCBXID0gMSA8PCAzMSwgWCA9IHt9Lmhhc093blByb3BlcnR5LCBZID0gW10sIFogPSBZLnBvcCwgJCA9IFkucHVzaCwgXyA9IFkucHVzaCwgYWIgPSBZLnNsaWNlLCBiYiA9IFkuaW5kZXhPZiB8fCBmdW5jdGlvbiAoYSkgeyBmb3IgKHZhciBiID0gMCwgYyA9IHRoaXMubGVuZ3RoOyBjID4gYjsgYisrKWlmICh0aGlzW2JdID09PSBhKSByZXR1cm4gYjsgcmV0dXJuIC0xIH0sIGNiID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLCBkYiA9IFwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIiwgZWIgPSBcIig/OlxcXFxcXFxcLnxbXFxcXHctXXxbXlxcXFx4MDAtXFxcXHhhMF0pK1wiLCBmYiA9IGViLnJlcGxhY2UoXCJ3XCIsIFwidyNcIiksIGdiID0gXCJcXFxcW1wiICsgZGIgKyBcIiooXCIgKyBlYiArIFwiKSg/OlwiICsgZGIgKyBcIiooWypeJHwhfl0/PSlcIiArIGRiICsgXCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGZiICsgXCIpKXwpXCIgKyBkYiArIFwiKlxcXFxdXCIsIGhiID0gXCI6KFwiICsgZWIgKyBcIikoPzpcXFxcKCgoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXwoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBnYiArIFwiKSopfC4qKVxcXFwpfClcIiwgaWIgPSBuZXcgUmVnRXhwKFwiXlwiICsgZGIgKyBcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIgKyBkYiArIFwiKyRcIiwgXCJnXCIpLCBqYiA9IG5ldyBSZWdFeHAoXCJeXCIgKyBkYiArIFwiKixcIiArIGRiICsgXCIqXCIpLCBrYiA9IG5ldyBSZWdFeHAoXCJeXCIgKyBkYiArIFwiKihbPit+XXxcIiArIGRiICsgXCIpXCIgKyBkYiArIFwiKlwiKSwgbGIgPSBuZXcgUmVnRXhwKFwiPVwiICsgZGIgKyBcIiooW15cXFxcXSdcXFwiXSo/KVwiICsgZGIgKyBcIipcXFxcXVwiLCBcImdcIiksIG1iID0gbmV3IFJlZ0V4cChoYiksIG5iID0gbmV3IFJlZ0V4cChcIl5cIiArIGZiICsgXCIkXCIpLCBvYiA9IHsgSUQ6IG5ldyBSZWdFeHAoXCJeIyhcIiArIGViICsgXCIpXCIpLCBDTEFTUzogbmV3IFJlZ0V4cChcIl5cXFxcLihcIiArIGViICsgXCIpXCIpLCBUQUc6IG5ldyBSZWdFeHAoXCJeKFwiICsgZWIucmVwbGFjZShcIndcIiwgXCJ3KlwiKSArIFwiKVwiKSwgQVRUUjogbmV3IFJlZ0V4cChcIl5cIiArIGdiKSwgUFNFVURPOiBuZXcgUmVnRXhwKFwiXlwiICsgaGIpLCBDSElMRDogbmV3IFJlZ0V4cChcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgKyBkYiArIFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyBkYiArIFwiKig/OihbKy1dfClcIiArIGRiICsgXCIqKFxcXFxkKyl8KSlcIiArIGRiICsgXCIqXFxcXCl8KVwiLCBcImlcIiksIGJvb2w6IG5ldyBSZWdFeHAoXCJeKD86XCIgKyBjYiArIFwiKSRcIiwgXCJpXCIpLCBuZWVkc0NvbnRleHQ6IG5ldyBSZWdFeHAoXCJeXCIgKyBkYiArIFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArIGRiICsgXCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgZGIgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIikgfSwgcGIgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLCBxYiA9IC9eaFxcZCQvaSwgcmIgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLCBzYiA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLCB0YiA9IC9bK35dLywgdWIgPSAvJ3xcXFxcL2csIHZiID0gbmV3IFJlZ0V4cChcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiICsgZGIgKyBcIj98KFwiICsgZGIgKyBcIil8LilcIiwgXCJpZ1wiKSwgd2IgPSBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCA9IFwiMHhcIiArIGIgLSA2NTUzNjsgcmV0dXJuIGQgIT09IGQgfHwgYyA/IGIgOiAwID4gZCA/IFN0cmluZy5mcm9tQ2hhckNvZGUoZCArIDY1NTM2KSA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZCA+PiAxMCB8IDU1Mjk2LCAxMDIzICYgZCB8IDU2MzIwKSB9OyB0cnkgeyBfLmFwcGx5KFkgPSBhYi5jYWxsKE8uY2hpbGROb2RlcyksIE8uY2hpbGROb2RlcyksIFlbTy5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGUgfSBjYXRjaCAoeGIpIHsgXyA9IHsgYXBwbHk6IFkubGVuZ3RoID8gZnVuY3Rpb24gKGEsIGIpIHsgJC5hcHBseShhLCBhYi5jYWxsKGIpKSB9IDogZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgYyA9IGEubGVuZ3RoLCBkID0gMDsgYVtjKytdID0gYltkKytdOyk7IGEubGVuZ3RoID0gYyAtIDEgfSB9IH0gdiA9IGIuc3VwcG9ydCA9IHt9LCB5ID0gYi5pc1hNTCA9IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYSAmJiAoYS5vd25lckRvY3VtZW50IHx8IGEpLmRvY3VtZW50RWxlbWVudDsgcmV0dXJuIGIgPyBcIkhUTUxcIiAhPT0gYi5ub2RlTmFtZSA6ICExIH0sIEYgPSBiLnNldERvY3VtZW50ID0gZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGMgPSBhID8gYS5vd25lckRvY3VtZW50IHx8IGEgOiBPLCBkID0gYy5kZWZhdWx0VmlldzsgcmV0dXJuIGMgIT09IEcgJiYgOSA9PT0gYy5ub2RlVHlwZSAmJiBjLmRvY3VtZW50RWxlbWVudCA/IChHID0gYywgSCA9IGMuZG9jdW1lbnRFbGVtZW50LCBJID0gIXkoYyksIGQgJiYgZCAhPT0gZC50b3AgJiYgKGQuYWRkRXZlbnRMaXN0ZW5lciA/IGQuYWRkRXZlbnRMaXN0ZW5lcihcInVubG9hZFwiLCBmdW5jdGlvbiAoKSB7IEYoKSB9LCAhMSkgOiBkLmF0dGFjaEV2ZW50ICYmIGQuYXR0YWNoRXZlbnQoXCJvbnVubG9hZFwiLCBmdW5jdGlvbiAoKSB7IEYoKSB9KSksIHYuYXR0cmlidXRlcyA9IGUoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuY2xhc3NOYW1lID0gXCJpXCIsICFhLmdldEF0dHJpYnV0ZShcImNsYXNzTmFtZVwiKSB9KSwgdi5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGUoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuYXBwZW5kQ2hpbGQoYy5jcmVhdGVDb21tZW50KFwiXCIpKSwgIWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aCB9KSwgdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcmIudGVzdChjLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpICYmIGUoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuaW5uZXJIVE1MID0gXCI8ZGl2IGNsYXNzPSdhJz48L2Rpdj48ZGl2IGNsYXNzPSdhIGknPjwvZGl2PlwiLCBhLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID0gXCJpXCIsIDIgPT09IGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImlcIikubGVuZ3RoIH0pLCB2LmdldEJ5SWQgPSBlKGZ1bmN0aW9uIChhKSB7IHJldHVybiBILmFwcGVuZENoaWxkKGEpLmlkID0gTiwgIWMuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWMuZ2V0RWxlbWVudHNCeU5hbWUoTikubGVuZ3RoIH0pLCB2LmdldEJ5SWQgPyAody5maW5kLklEID0gZnVuY3Rpb24gKGEsIGIpIHsgaWYgKHR5cGVvZiBiLmdldEVsZW1lbnRCeUlkICE9PSBWICYmIEkpIHsgdmFyIGMgPSBiLmdldEVsZW1lbnRCeUlkKGEpOyByZXR1cm4gYyAmJiBjLnBhcmVudE5vZGUgPyBbY10gOiBbXSB9IH0sIHcuZmlsdGVyLklEID0gZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLnJlcGxhY2UodmIsIHdiKTsgcmV0dXJuIGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmdldEF0dHJpYnV0ZShcImlkXCIpID09PSBiIH0gfSkgOiAoZGVsZXRlIHcuZmluZC5JRCwgdy5maWx0ZXIuSUQgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEucmVwbGFjZSh2Yiwgd2IpOyByZXR1cm4gZnVuY3Rpb24gKGEpIHsgdmFyIGMgPSB0eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBWICYmIGEuZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpOyByZXR1cm4gYyAmJiBjLnZhbHVlID09PSBiIH0gfSksIHcuZmluZC5UQUcgPSB2LmdldEVsZW1lbnRzQnlUYWdOYW1lID8gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBWID8gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSA6IHZvaWQgMCB9IDogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQgPSBbXSwgZSA9IDAsIGYgPSBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOyBpZiAoXCIqXCIgPT09IGEpIHsgZm9yICg7IGMgPSBmW2UrK107KTEgPT09IGMubm9kZVR5cGUgJiYgZC5wdXNoKGMpOyByZXR1cm4gZCB9IHJldHVybiBmIH0sIHcuZmluZC5DTEFTUyA9IHYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gViAmJiBJID8gYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpIDogdm9pZCAwIH0sIEsgPSBbXSwgSiA9IFtdLCAodi5xc2EgPSByYi50ZXN0KGMucXVlcnlTZWxlY3RvckFsbCkpICYmIChlKGZ1bmN0aW9uIChhKSB7IGEuaW5uZXJIVE1MID0gXCI8c2VsZWN0IG1zYWxsb3djbGlwPScnPjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCIsIGEucXVlcnlTZWxlY3RvckFsbChcIlttc2FsbG93Y2xpcF49JyddXCIpLmxlbmd0aCAmJiBKLnB1c2goXCJbKl4kXT1cIiArIGRiICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIpLCBhLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbc2VsZWN0ZWRdXCIpLmxlbmd0aCB8fCBKLnB1c2goXCJcXFxcW1wiICsgZGIgKyBcIiooPzp2YWx1ZXxcIiArIGNiICsgXCIpXCIpLCBhLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKS5sZW5ndGggfHwgSi5wdXNoKFwiOmNoZWNrZWRcIikgfSksIGUoZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBjLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTsgYi5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwiaGlkZGVuXCIpLCBhLmFwcGVuZENoaWxkKGIpLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJEXCIpLCBhLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbmFtZT1kXVwiKS5sZW5ndGggJiYgSi5wdXNoKFwibmFtZVwiICsgZGIgKyBcIipbKl4kfCF+XT89XCIpLCBhLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZW5hYmxlZFwiKS5sZW5ndGggfHwgSi5wdXNoKFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiksIGEucXVlcnlTZWxlY3RvckFsbChcIiosOnhcIiksIEoucHVzaChcIiwuKjpcIikgfSkpLCAodi5tYXRjaGVzU2VsZWN0b3IgPSByYi50ZXN0KEwgPSBILm1hdGNoZXMgfHwgSC53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgSC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgSC5vTWF0Y2hlc1NlbGVjdG9yIHx8IEgubXNNYXRjaGVzU2VsZWN0b3IpKSAmJiBlKGZ1bmN0aW9uIChhKSB7IHYuZGlzY29ubmVjdGVkTWF0Y2ggPSBMLmNhbGwoYSwgXCJkaXZcIiksIEwuY2FsbChhLCBcIltzIT0nJ106eFwiKSwgSy5wdXNoKFwiIT1cIiwgaGIpIH0pLCBKID0gSi5sZW5ndGggJiYgbmV3IFJlZ0V4cChKLmpvaW4oXCJ8XCIpKSwgSyA9IEsubGVuZ3RoICYmIG5ldyBSZWdFeHAoSy5qb2luKFwifFwiKSksIGIgPSByYi50ZXN0KEguY29tcGFyZURvY3VtZW50UG9zaXRpb24pLCBNID0gYiB8fCByYi50ZXN0KEguY29udGFpbnMpID8gZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMgPSA5ID09PSBhLm5vZGVUeXBlID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLCBkID0gYiAmJiBiLnBhcmVudE5vZGU7IHJldHVybiBhID09PSBkIHx8ICEoIWQgfHwgMSAhPT0gZC5ub2RlVHlwZSB8fCAhKGMuY29udGFpbnMgPyBjLmNvbnRhaW5zKGQpIDogYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiAxNiAmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZCkpKSB9IDogZnVuY3Rpb24gKGEsIGIpIHsgaWYgKGIpIGZvciAoOyBiID0gYi5wYXJlbnROb2RlOylpZiAoYiA9PT0gYSkgcmV0dXJuICEwOyByZXR1cm4gITEgfSwgVSA9IGIgPyBmdW5jdGlvbiAoYSwgYikgeyBpZiAoYSA9PT0gYikgcmV0dXJuIEUgPSAhMCwgMDsgdmFyIGQgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uOyByZXR1cm4gZCA/IGQgOiAoZCA9IChhLm93bmVyRG9jdW1lbnQgfHwgYSkgPT09IChiLm93bmVyRG9jdW1lbnQgfHwgYikgPyBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpIDogMSwgMSAmIGQgfHwgIXYuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkgPT09IGQgPyBhID09PSBjIHx8IGEub3duZXJEb2N1bWVudCA9PT0gTyAmJiBNKE8sIGEpID8gLTEgOiBiID09PSBjIHx8IGIub3duZXJEb2N1bWVudCA9PT0gTyAmJiBNKE8sIGIpID8gMSA6IEQgPyBiYi5jYWxsKEQsIGEpIC0gYmIuY2FsbChELCBiKSA6IDAgOiA0ICYgZCA/IC0xIDogMSkgfSA6IGZ1bmN0aW9uIChhLCBiKSB7IGlmIChhID09PSBiKSByZXR1cm4gRSA9ICEwLCAwOyB2YXIgZCwgZSA9IDAsIGYgPSBhLnBhcmVudE5vZGUsIGggPSBiLnBhcmVudE5vZGUsIGkgPSBbYV0sIGogPSBbYl07IGlmICghZiB8fCAhaCkgcmV0dXJuIGEgPT09IGMgPyAtMSA6IGIgPT09IGMgPyAxIDogZiA/IC0xIDogaCA/IDEgOiBEID8gYmIuY2FsbChELCBhKSAtIGJiLmNhbGwoRCwgYikgOiAwOyBpZiAoZiA9PT0gaCkgcmV0dXJuIGcoYSwgYik7IGZvciAoZCA9IGE7IGQgPSBkLnBhcmVudE5vZGU7KWkudW5zaGlmdChkKTsgZm9yIChkID0gYjsgZCA9IGQucGFyZW50Tm9kZTspai51bnNoaWZ0KGQpOyBmb3IgKDsgaVtlXSA9PT0galtlXTspZSsrOyByZXR1cm4gZSA/IGcoaVtlXSwgaltlXSkgOiBpW2VdID09PSBPID8gLTEgOiBqW2VdID09PSBPID8gMSA6IDAgfSwgYykgOiBHIH0sIGIubWF0Y2hlcyA9IGZ1bmN0aW9uIChhLCBjKSB7IHJldHVybiBiKGEsIG51bGwsIG51bGwsIGMpIH0sIGIubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24gKGEsIGMpIHsgaWYgKChhLm93bmVyRG9jdW1lbnQgfHwgYSkgIT09IEcgJiYgRihhKSwgYyA9IGMucmVwbGFjZShsYiwgXCI9JyQxJ11cIiksICEoIXYubWF0Y2hlc1NlbGVjdG9yIHx8ICFJIHx8IEsgJiYgSy50ZXN0KGMpIHx8IEogJiYgSi50ZXN0KGMpKSkgdHJ5IHsgdmFyIGQgPSBMLmNhbGwoYSwgYyk7IGlmIChkIHx8IHYuZGlzY29ubmVjdGVkTWF0Y2ggfHwgYS5kb2N1bWVudCAmJiAxMSAhPT0gYS5kb2N1bWVudC5ub2RlVHlwZSkgcmV0dXJuIGQgfSBjYXRjaCAoZSkgeyB9IHJldHVybiBiKGMsIEcsIG51bGwsIFthXSkubGVuZ3RoID4gMCB9LCBiLmNvbnRhaW5zID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIChhLm93bmVyRG9jdW1lbnQgfHwgYSkgIT09IEcgJiYgRihhKSwgTShhLCBiKSB9LCBiLmF0dHIgPSBmdW5jdGlvbiAoYSwgYikgeyAoYS5vd25lckRvY3VtZW50IHx8IGEpICE9PSBHICYmIEYoYSk7IHZhciBjID0gdy5hdHRySGFuZGxlW2IudG9Mb3dlckNhc2UoKV0sIGQgPSBjICYmIFguY2FsbCh3LmF0dHJIYW5kbGUsIGIudG9Mb3dlckNhc2UoKSkgPyBjKGEsIGIsICFJKSA6IHZvaWQgMDsgcmV0dXJuIHZvaWQgMCAhPT0gZCA/IGQgOiB2LmF0dHJpYnV0ZXMgfHwgIUkgPyBhLmdldEF0dHJpYnV0ZShiKSA6IChkID0gYS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSAmJiBkLnNwZWNpZmllZCA/IGQudmFsdWUgOiBudWxsIH0sIGIuZXJyb3IgPSBmdW5jdGlvbiAoYSkgeyB0aHJvdyBuZXcgRXJyb3IoXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIGEpIH0sIGIudW5pcXVlU29ydCA9IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBjID0gW10sIGQgPSAwLCBlID0gMDsgaWYgKEUgPSAhdi5kZXRlY3REdXBsaWNhdGVzLCBEID0gIXYuc29ydFN0YWJsZSAmJiBhLnNsaWNlKDApLCBhLnNvcnQoVSksIEUpIHsgZm9yICg7IGIgPSBhW2UrK107KWIgPT09IGFbZV0gJiYgKGQgPSBjLnB1c2goZSkpOyBmb3IgKDsgZC0tOylhLnNwbGljZShjW2RdLCAxKSB9IHJldHVybiBEID0gbnVsbCwgYSB9LCB4ID0gYi5nZXRUZXh0ID0gZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGMgPSBcIlwiLCBkID0gMCwgZSA9IGEubm9kZVR5cGU7IGlmIChlKSB7IGlmICgxID09PSBlIHx8IDkgPT09IGUgfHwgMTEgPT09IGUpIHsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIGEudGV4dENvbnRlbnQpIHJldHVybiBhLnRleHRDb250ZW50OyBmb3IgKGEgPSBhLmZpcnN0Q2hpbGQ7IGE7IGEgPSBhLm5leHRTaWJsaW5nKWMgKz0geChhKSB9IGVsc2UgaWYgKDMgPT09IGUgfHwgNCA9PT0gZSkgcmV0dXJuIGEubm9kZVZhbHVlIH0gZWxzZSBmb3IgKDsgYiA9IGFbZCsrXTspYyArPSB4KGIpOyByZXR1cm4gYyB9LCB3ID0gYi5zZWxlY3RvcnMgPSB7IGNhY2hlTGVuZ3RoOiA1MCwgY3JlYXRlUHNldWRvOiBkLCBtYXRjaDogb2IsIGF0dHJIYW5kbGU6IHt9LCBmaW5kOiB7fSwgcmVsYXRpdmU6IHsgXCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6ICEwIH0sIFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSwgXCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogITAgfSwgXCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH0gfSwgcHJlRmlsdGVyOiB7IEFUVFI6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhWzFdID0gYVsxXS5yZXBsYWNlKHZiLCB3YiksIGFbM10gPSAoYVszXSB8fCBhWzRdIHx8IGFbNV0gfHwgXCJcIikucmVwbGFjZSh2Yiwgd2IpLCBcIn49XCIgPT09IGFbMl0gJiYgKGFbM10gPSBcIiBcIiArIGFbM10gKyBcIiBcIiksIGEuc2xpY2UoMCwgNCkgfSwgQ0hJTEQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhWzFdID0gYVsxXS50b0xvd2VyQ2FzZSgpLCBcIm50aFwiID09PSBhWzFdLnNsaWNlKDAsIDMpID8gKGFbM10gfHwgYi5lcnJvcihhWzBdKSwgYVs0XSA9ICsoYVs0XSA/IGFbNV0gKyAoYVs2XSB8fCAxKSA6IDIgKiAoXCJldmVuXCIgPT09IGFbM10gfHwgXCJvZGRcIiA9PT0gYVszXSkpLCBhWzVdID0gKyhhWzddICsgYVs4XSB8fCBcIm9kZFwiID09PSBhWzNdKSkgOiBhWzNdICYmIGIuZXJyb3IoYVswXSksIGEgfSwgUFNFVURPOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYyA9ICFhWzZdICYmIGFbMl07IHJldHVybiBvYi5DSElMRC50ZXN0KGFbMF0pID8gbnVsbCA6IChhWzNdID8gYVsyXSA9IGFbNF0gfHwgYVs1XSB8fCBcIlwiIDogYyAmJiBtYi50ZXN0KGMpICYmIChiID0geihjLCAhMCkpICYmIChiID0gYy5pbmRleE9mKFwiKVwiLCBjLmxlbmd0aCAtIGIpIC0gYy5sZW5ndGgpICYmIChhWzBdID0gYVswXS5zbGljZSgwLCBiKSwgYVsyXSA9IGMuc2xpY2UoMCwgYikpLCBhLnNsaWNlKDAsIDMpKSB9IH0sIGZpbHRlcjogeyBUQUc6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS5yZXBsYWNlKHZiLCB3YikudG9Mb3dlckNhc2UoKTsgcmV0dXJuIFwiKlwiID09PSBhID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gITAgfSA6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLm5vZGVOYW1lICYmIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYiB9IH0sIENMQVNTOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IFJbYSArIFwiIFwiXTsgcmV0dXJuIGIgfHwgKGIgPSBuZXcgUmVnRXhwKFwiKF58XCIgKyBkYiArIFwiKVwiICsgYSArIFwiKFwiICsgZGIgKyBcInwkKVwiKSkgJiYgUihhLCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYi50ZXN0KFwic3RyaW5nXCIgPT0gdHlwZW9mIGEuY2xhc3NOYW1lICYmIGEuY2xhc3NOYW1lIHx8IHR5cGVvZiBhLmdldEF0dHJpYnV0ZSAhPT0gViAmJiBhLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpIH0pIH0sIEFUVFI6IGZ1bmN0aW9uIChhLCBjLCBkKSB7IHJldHVybiBmdW5jdGlvbiAoZSkgeyB2YXIgZiA9IGIuYXR0cihlLCBhKTsgcmV0dXJuIG51bGwgPT0gZiA/IFwiIT1cIiA9PT0gYyA6IGMgPyAoZiArPSBcIlwiLCBcIj1cIiA9PT0gYyA/IGYgPT09IGQgOiBcIiE9XCIgPT09IGMgPyBmICE9PSBkIDogXCJePVwiID09PSBjID8gZCAmJiAwID09PSBmLmluZGV4T2YoZCkgOiBcIio9XCIgPT09IGMgPyBkICYmIGYuaW5kZXhPZihkKSA+IC0xIDogXCIkPVwiID09PSBjID8gZCAmJiBmLnNsaWNlKC1kLmxlbmd0aCkgPT09IGQgOiBcIn49XCIgPT09IGMgPyAoXCIgXCIgKyBmICsgXCIgXCIpLmluZGV4T2YoZCkgPiAtMSA6IFwifD1cIiA9PT0gYyA/IGYgPT09IGQgfHwgZi5zbGljZSgwLCBkLmxlbmd0aCArIDEpID09PSBkICsgXCItXCIgOiAhMSkgOiAhMCB9IH0sIENISUxEOiBmdW5jdGlvbiAoYSwgYiwgYywgZCwgZSkgeyB2YXIgZiA9IFwibnRoXCIgIT09IGEuc2xpY2UoMCwgMyksIGcgPSBcImxhc3RcIiAhPT0gYS5zbGljZSgtNCksIGggPSBcIm9mLXR5cGVcIiA9PT0gYjsgcmV0dXJuIDEgPT09IGQgJiYgMCA9PT0gZSA/IGZ1bmN0aW9uIChhKSB7IHJldHVybiAhIWEucGFyZW50Tm9kZSB9IDogZnVuY3Rpb24gKGIsIGMsIGkpIHsgdmFyIGosIGssIGwsIG0sIG4sIG8sIHAgPSBmICE9PSBnID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIiwgcSA9IGIucGFyZW50Tm9kZSwgciA9IGggJiYgYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBzID0gIWkgJiYgIWg7IGlmIChxKSB7IGlmIChmKSB7IGZvciAoOyBwOykgeyBmb3IgKGwgPSBiOyBsID0gbFtwXTspaWYgKGggPyBsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHIgOiAxID09PSBsLm5vZGVUeXBlKSByZXR1cm4gITE7IG8gPSBwID0gXCJvbmx5XCIgPT09IGEgJiYgIW8gJiYgXCJuZXh0U2libGluZ1wiIH0gcmV0dXJuICEwIH0gaWYgKG8gPSBbZyA/IHEuZmlyc3RDaGlsZCA6IHEubGFzdENoaWxkXSwgZyAmJiBzKSB7IGZvciAoayA9IHFbTl0gfHwgKHFbTl0gPSB7fSksIGogPSBrW2FdIHx8IFtdLCBuID0galswXSA9PT0gUCAmJiBqWzFdLCBtID0galswXSA9PT0gUCAmJiBqWzJdLCBsID0gbiAmJiBxLmNoaWxkTm9kZXNbbl07IGwgPSArK24gJiYgbCAmJiBsW3BdIHx8IChtID0gbiA9IDApIHx8IG8ucG9wKCk7KWlmICgxID09PSBsLm5vZGVUeXBlICYmICsrbSAmJiBsID09PSBiKSB7IGtbYV0gPSBbUCwgbiwgbV07IGJyZWFrIH0gfSBlbHNlIGlmIChzICYmIChqID0gKGJbTl0gfHwgKGJbTl0gPSB7fSkpW2FdKSAmJiBqWzBdID09PSBQKSBtID0galsxXTsgZWxzZSBmb3IgKDsgKGwgPSArK24gJiYgbCAmJiBsW3BdIHx8IChtID0gbiA9IDApIHx8IG8ucG9wKCkpICYmICgoaCA/IGwubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gciA6IDEgIT09IGwubm9kZVR5cGUpIHx8ICErK20gfHwgKHMgJiYgKChsW05dIHx8IChsW05dID0ge30pKVthXSA9IFtQLCBtXSksIGwgIT09IGIpKTspOyByZXR1cm4gbSAtPSBlLCBtID09PSBkIHx8IG0gJSBkID09PSAwICYmIG0gLyBkID49IDAgfSB9IH0sIFBTRVVETzogZnVuY3Rpb24gKGEsIGMpIHsgdmFyIGUsIGYgPSB3LnBzZXVkb3NbYV0gfHwgdy5zZXRGaWx0ZXJzW2EudG9Mb3dlckNhc2UoKV0gfHwgYi5lcnJvcihcInVuc3VwcG9ydGVkIHBzZXVkbzogXCIgKyBhKTsgcmV0dXJuIGZbTl0gPyBmKGMpIDogZi5sZW5ndGggPiAxID8gKGUgPSBbYSwgYSwgXCJcIiwgY10sIHcuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpID8gZChmdW5jdGlvbiAoYSwgYikgeyBmb3IgKHZhciBkLCBlID0gZihhLCBjKSwgZyA9IGUubGVuZ3RoOyBnLS07KWQgPSBiYi5jYWxsKGEsIGVbZ10pLCBhW2RdID0gIShiW2RdID0gZVtnXSkgfSkgOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gZihhLCAwLCBlKSB9KSA6IGYgfSB9LCBwc2V1ZG9zOiB7IG5vdDogZChmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IFtdLCBjID0gW10sIGUgPSBBKGEucmVwbGFjZShpYiwgXCIkMVwiKSk7IHJldHVybiBlW05dID8gZChmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyBmb3IgKHZhciBmLCBnID0gZShhLCBudWxsLCBkLCBbXSksIGggPSBhLmxlbmd0aDsgaC0tOykoZiA9IGdbaF0pICYmIChhW2hdID0gIShiW2hdID0gZikpIH0pIDogZnVuY3Rpb24gKGEsIGQsIGYpIHsgcmV0dXJuIGJbMF0gPSBhLCBlKGIsIG51bGwsIGYsIGMpLCAhYy5wb3AoKSB9IH0pLCBoYXM6IGQoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGZ1bmN0aW9uIChjKSB7IHJldHVybiBiKGEsIGMpLmxlbmd0aCA+IDAgfSB9KSwgY29udGFpbnM6IGQoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGZ1bmN0aW9uIChiKSB7IHJldHVybiAoYi50ZXh0Q29udGVudCB8fCBiLmlubmVyVGV4dCB8fCB4KGIpKS5pbmRleE9mKGEpID4gLTEgfSB9KSwgbGFuZzogZChmdW5jdGlvbiAoYSkgeyByZXR1cm4gbmIudGVzdChhIHx8IFwiXCIpIHx8IGIuZXJyb3IoXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGEpLCBhID0gYS5yZXBsYWNlKHZiLCB3YikudG9Mb3dlckNhc2UoKSwgZnVuY3Rpb24gKGIpIHsgdmFyIGM7IGRvIGlmIChjID0gSSA/IGIubGFuZyA6IGIuZ2V0QXR0cmlidXRlKFwieG1sOmxhbmdcIikgfHwgYi5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpKSByZXR1cm4gYyA9IGMudG9Mb3dlckNhc2UoKSwgYyA9PT0gYSB8fCAwID09PSBjLmluZGV4T2YoYSArIFwiLVwiKTsgd2hpbGUgKChiID0gYi5wYXJlbnROb2RlKSAmJiAxID09PSBiLm5vZGVUeXBlKTsgcmV0dXJuICExIH0gfSksIHRhcmdldDogZnVuY3Rpb24gKGIpIHsgdmFyIGMgPSBhLmxvY2F0aW9uICYmIGEubG9jYXRpb24uaGFzaDsgcmV0dXJuIGMgJiYgYy5zbGljZSgxKSA9PT0gYi5pZCB9LCByb290OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSA9PT0gSCB9LCBmb2N1czogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgPT09IEcuYWN0aXZlRWxlbWVudCAmJiAoIUcuaGFzRm9jdXMgfHwgRy5oYXNGb2N1cygpKSAmJiAhIShhLnR5cGUgfHwgYS5ocmVmIHx8IH5hLnRhYkluZGV4KSB9LCBlbmFibGVkOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5kaXNhYmxlZCA9PT0gITEgfSwgZGlzYWJsZWQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmRpc2FibGVkID09PSAhMCB9LCBjaGVja2VkOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsgcmV0dXJuIFwiaW5wdXRcIiA9PT0gYiAmJiAhIWEuY2hlY2tlZCB8fCBcIm9wdGlvblwiID09PSBiICYmICEhYS5zZWxlY3RlZCB9LCBzZWxlY3RlZDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEucGFyZW50Tm9kZSAmJiBhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwgYS5zZWxlY3RlZCA9PT0gITAgfSwgZW1wdHk6IGZ1bmN0aW9uIChhKSB7IGZvciAoYSA9IGEuZmlyc3RDaGlsZDsgYTsgYSA9IGEubmV4dFNpYmxpbmcpaWYgKGEubm9kZVR5cGUgPCA2KSByZXR1cm4gITE7IHJldHVybiAhMCB9LCBwYXJlbnQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiAhdy5wc2V1ZG9zLmVtcHR5KGEpIH0sIGhlYWRlcjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHFiLnRlc3QoYS5ub2RlTmFtZSkgfSwgaW5wdXQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBwYi50ZXN0KGEubm9kZU5hbWUpIH0sIGJ1dHRvbjogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7IHJldHVybiBcImlucHV0XCIgPT09IGIgJiYgXCJidXR0b25cIiA9PT0gYS50eXBlIHx8IFwiYnV0dG9uXCIgPT09IGIgfSwgdGV4dDogZnVuY3Rpb24gKGEpIHsgdmFyIGI7IHJldHVybiBcImlucHV0XCIgPT09IGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAmJiBcInRleHRcIiA9PT0gYS50eXBlICYmIChudWxsID09IChiID0gYS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpKSB8fCBcInRleHRcIiA9PT0gYi50b0xvd2VyQ2FzZSgpKSB9LCBmaXJzdDogaihmdW5jdGlvbiAoKSB7IHJldHVybiBbMF0gfSksIGxhc3Q6IGooZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIFtiIC0gMV0gfSksIGVxOiBqKGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBbMCA+IGMgPyBjICsgYiA6IGNdIH0pLCBldmVuOiBqKGZ1bmN0aW9uIChhLCBiKSB7IGZvciAodmFyIGMgPSAwOyBiID4gYzsgYyArPSAyKWEucHVzaChjKTsgcmV0dXJuIGEgfSksIG9kZDogaihmdW5jdGlvbiAoYSwgYikgeyBmb3IgKHZhciBjID0gMTsgYiA+IGM7IGMgKz0gMilhLnB1c2goYyk7IHJldHVybiBhIH0pLCBsdDogaihmdW5jdGlvbiAoYSwgYiwgYykgeyBmb3IgKHZhciBkID0gMCA+IGMgPyBjICsgYiA6IGM7IC0tZCA+PSAwOylhLnB1c2goZCk7IHJldHVybiBhIH0pLCBndDogaihmdW5jdGlvbiAoYSwgYiwgYykgeyBmb3IgKHZhciBkID0gMCA+IGMgPyBjICsgYiA6IGM7ICsrZCA8IGI7KWEucHVzaChkKTsgcmV0dXJuIGEgfSkgfSB9LCB3LnBzZXVkb3MubnRoID0gdy5wc2V1ZG9zLmVxOyBmb3IgKHUgaW4geyByYWRpbzogITAsIGNoZWNrYm94OiAhMCwgZmlsZTogITAsIHBhc3N3b3JkOiAhMCwgaW1hZ2U6ICEwIH0pIHcucHNldWRvc1t1XSA9IGgodSk7IGZvciAodSBpbiB7IHN1Ym1pdDogITAsIHJlc2V0OiAhMCB9KSB3LnBzZXVkb3NbdV0gPSBpKHUpOyByZXR1cm4gbC5wcm90b3R5cGUgPSB3LmZpbHRlcnMgPSB3LnBzZXVkb3MsIHcuc2V0RmlsdGVycyA9IG5ldyBsLCB6ID0gYi50b2tlbml6ZSA9IGZ1bmN0aW9uIChhLCBjKSB7IHZhciBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrID0gU1thICsgXCIgXCJdOyBpZiAoaykgcmV0dXJuIGMgPyAwIDogay5zbGljZSgwKTsgZm9yIChoID0gYSwgaSA9IFtdLCBqID0gdy5wcmVGaWx0ZXI7IGg7KSB7ICghZCB8fCAoZSA9IGpiLmV4ZWMoaCkpKSAmJiAoZSAmJiAoaCA9IGguc2xpY2UoZVswXS5sZW5ndGgpIHx8IGgpLCBpLnB1c2goZiA9IFtdKSksIGQgPSAhMSwgKGUgPSBrYi5leGVjKGgpKSAmJiAoZCA9IGUuc2hpZnQoKSwgZi5wdXNoKHsgdmFsdWU6IGQsIHR5cGU6IGVbMF0ucmVwbGFjZShpYiwgXCIgXCIpIH0pLCBoID0gaC5zbGljZShkLmxlbmd0aCkpOyBmb3IgKGcgaW4gdy5maWx0ZXIpICEoZSA9IG9iW2ddLmV4ZWMoaCkpIHx8IGpbZ10gJiYgIShlID0galtnXShlKSkgfHwgKGQgPSBlLnNoaWZ0KCksIGYucHVzaCh7IHZhbHVlOiBkLCB0eXBlOiBnLCBtYXRjaGVzOiBlIH0pLCBoID0gaC5zbGljZShkLmxlbmd0aCkpOyBpZiAoIWQpIGJyZWFrIH0gcmV0dXJuIGMgPyBoLmxlbmd0aCA6IGggPyBiLmVycm9yKGEpIDogUyhhLCBpKS5zbGljZSgwKSB9LCBBID0gYi5jb21waWxlID0gZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQgPSBbXSwgZSA9IFtdLCBmID0gVFthICsgXCIgXCJdOyBpZiAoIWYpIHsgZm9yIChiIHx8IChiID0geihhKSksIGMgPSBiLmxlbmd0aDsgYy0tOylmID0gcyhiW2NdKSwgZltOXSA/IGQucHVzaChmKSA6IGUucHVzaChmKTsgZiA9IFQoYSwgdChlLCBkKSksIGYuc2VsZWN0b3IgPSBhIH0gcmV0dXJuIGYgfSwgQiA9IGIuc2VsZWN0ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgdmFyIGUsIGYsIGcsIGgsIGksIGogPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGEgJiYgYSwgbCA9ICFkICYmIHooYSA9IGouc2VsZWN0b3IgfHwgYSk7IGlmIChjID0gYyB8fCBbXSwgMSA9PT0gbC5sZW5ndGgpIHsgaWYgKGYgPSBsWzBdID0gbFswXS5zbGljZSgwKSwgZi5sZW5ndGggPiAyICYmIFwiSURcIiA9PT0gKGcgPSBmWzBdKS50eXBlICYmIHYuZ2V0QnlJZCAmJiA5ID09PSBiLm5vZGVUeXBlICYmIEkgJiYgdy5yZWxhdGl2ZVtmWzFdLnR5cGVdKSB7IGlmIChiID0gKHcuZmluZC5JRChnLm1hdGNoZXNbMF0ucmVwbGFjZSh2Yiwgd2IpLCBiKSB8fCBbXSlbMF0sICFiKSByZXR1cm4gYzsgaiAmJiAoYiA9IGIucGFyZW50Tm9kZSksIGEgPSBhLnNsaWNlKGYuc2hpZnQoKS52YWx1ZS5sZW5ndGgpIH0gZm9yIChlID0gb2IubmVlZHNDb250ZXh0LnRlc3QoYSkgPyAwIDogZi5sZW5ndGg7IGUtLSAmJiAoZyA9IGZbZV0sICF3LnJlbGF0aXZlW2ggPSBnLnR5cGVdKTspaWYgKChpID0gdy5maW5kW2hdKSAmJiAoZCA9IGkoZy5tYXRjaGVzWzBdLnJlcGxhY2UodmIsIHdiKSwgdGIudGVzdChmWzBdLnR5cGUpICYmIGsoYi5wYXJlbnROb2RlKSB8fCBiKSkpIHsgaWYgKGYuc3BsaWNlKGUsIDEpLCBhID0gZC5sZW5ndGggJiYgbShmKSwgIWEpIHJldHVybiBfLmFwcGx5KGMsIGQpLCBjOyBicmVhayB9IH0gcmV0dXJuIChqIHx8IEEoYSwgbCkpKGQsIGIsICFJLCBjLCB0Yi50ZXN0KGEpICYmIGsoYi5wYXJlbnROb2RlKSB8fCBiKSwgYyB9LCB2LnNvcnRTdGFibGUgPSBOLnNwbGl0KFwiXCIpLnNvcnQoVSkuam9pbihcIlwiKSA9PT0gTiwgdi5kZXRlY3REdXBsaWNhdGVzID0gISFFLCBGKCksIHYuc29ydERldGFjaGVkID0gZShmdW5jdGlvbiAoYSkgeyByZXR1cm4gMSAmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oRy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSB9KSwgZShmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIiwgXCIjXCIgPT09IGEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpIH0pIHx8IGYoXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBjID8gdm9pZCAwIDogYS5nZXRBdHRyaWJ1dGUoYiwgXCJ0eXBlXCIgPT09IGIudG9Mb3dlckNhc2UoKSA/IDEgOiAyKSB9KSwgdi5hdHRyaWJ1dGVzICYmIGUoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuaW5uZXJIVE1MID0gXCI8aW5wdXQvPlwiLCBhLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKFwidmFsdWVcIiwgXCJcIiksIFwiXCIgPT09IGEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSB9KSB8fCBmKFwidmFsdWVcIiwgZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGMgfHwgXCJpbnB1dFwiICE9PSBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPyB2b2lkIDAgOiBhLmRlZmF1bHRWYWx1ZSB9KSwgZShmdW5jdGlvbiAoYSkgeyByZXR1cm4gbnVsbCA9PSBhLmdldEF0dHJpYnV0ZShcImRpc2FibGVkXCIpIH0pIHx8IGYoY2IsIGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkOyByZXR1cm4gYyA/IHZvaWQgMCA6IGFbYl0gPT09ICEwID8gYi50b0xvd2VyQ2FzZSgpIDogKGQgPSBhLmdldEF0dHJpYnV0ZU5vZGUoYikpICYmIGQuc3BlY2lmaWVkID8gZC52YWx1ZSA6IG51bGwgfSksIGIgfShhKTsgXy5maW5kID0gZWIsIF8uZXhwciA9IGViLnNlbGVjdG9ycywgXy5leHByW1wiOlwiXSA9IF8uZXhwci5wc2V1ZG9zLCBfLnVuaXF1ZSA9IGViLnVuaXF1ZVNvcnQsIF8udGV4dCA9IGViLmdldFRleHQsIF8uaXNYTUxEb2MgPSBlYi5pc1hNTCwgXy5jb250YWlucyA9IGViLmNvbnRhaW5zOyB2YXIgZmIgPSBfLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LCBnYiA9IC9ePChcXHcrKVxccypcXC8/Pig/OjxcXC9cXDE+fCkkLywgaGIgPSAvXi5bXjojXFxbXFwuLF0qJC87IF8uZmlsdGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQgPSBiWzBdOyByZXR1cm4gYyAmJiAoYSA9IFwiOm5vdChcIiArIGEgKyBcIilcIiksIDEgPT09IGIubGVuZ3RoICYmIDEgPT09IGQubm9kZVR5cGUgPyBfLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGQsIGEpID8gW2RdIDogW10gOiBfLmZpbmQubWF0Y2hlcyhhLCBfLmdyZXAoYiwgZnVuY3Rpb24gKGEpIHsgcmV0dXJuIDEgPT09IGEubm9kZVR5cGUgfSkpIH0sIF8uZm4uZXh0ZW5kKHsgZmluZDogZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGMgPSB0aGlzLmxlbmd0aCwgZCA9IFtdLCBlID0gdGhpczsgaWYgKFwic3RyaW5nXCIgIT0gdHlwZW9mIGEpIHJldHVybiB0aGlzLnB1c2hTdGFjayhfKGEpLmZpbHRlcihmdW5jdGlvbiAoKSB7IGZvciAoYiA9IDA7IGMgPiBiOyBiKyspaWYgKF8uY29udGFpbnMoZVtiXSwgdGhpcykpIHJldHVybiAhMCB9KSk7IGZvciAoYiA9IDA7IGMgPiBiOyBiKyspXy5maW5kKGEsIGVbYl0sIGQpOyByZXR1cm4gZCA9IHRoaXMucHVzaFN0YWNrKGMgPiAxID8gXy51bmlxdWUoZCkgOiBkKSwgZC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgPyB0aGlzLnNlbGVjdG9yICsgXCIgXCIgKyBhIDogYSwgZCB9LCBmaWx0ZXI6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLnB1c2hTdGFjayhkKHRoaXMsIGEgfHwgW10sICExKSkgfSwgbm90OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5wdXNoU3RhY2soZCh0aGlzLCBhIHx8IFtdLCAhMCkpIH0sIGlzOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gISFkKHRoaXMsIFwic3RyaW5nXCIgPT0gdHlwZW9mIGEgJiYgZmIudGVzdChhKSA/IF8oYSkgOiBhIHx8IFtdLCAhMSkubGVuZ3RoIH0gfSk7IHZhciBpYiwgamIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0qKSkkLywga2IgPSBfLmZuLmluaXQgPSBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYywgZDsgaWYgKCFhKSByZXR1cm4gdGhpczsgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIGEpIHsgaWYgKGMgPSBcIjxcIiA9PT0gYVswXSAmJiBcIj5cIiA9PT0gYVthLmxlbmd0aCAtIDFdICYmIGEubGVuZ3RoID49IDMgPyBbbnVsbCwgYSwgbnVsbF0gOiBqYi5leGVjKGEpLCAhYyB8fCAhY1sxXSAmJiBiKSByZXR1cm4gIWIgfHwgYi5qcXVlcnkgPyAoYiB8fCBpYikuZmluZChhKSA6IHRoaXMuY29uc3RydWN0b3IoYikuZmluZChhKTsgaWYgKGNbMV0pIHsgaWYgKGIgPSBiIGluc3RhbmNlb2YgXyA/IGJbMF0gOiBiLCBfLm1lcmdlKHRoaXMsIF8ucGFyc2VIVE1MKGNbMV0sIGIgJiYgYi5ub2RlVHlwZSA/IGIub3duZXJEb2N1bWVudCB8fCBiIDogWiwgITApKSwgZ2IudGVzdChjWzFdKSAmJiBfLmlzUGxhaW5PYmplY3QoYikpIGZvciAoYyBpbiBiKSBfLmlzRnVuY3Rpb24odGhpc1tjXSkgPyB0aGlzW2NdKGJbY10pIDogdGhpcy5hdHRyKGMsIGJbY10pOyByZXR1cm4gdGhpcyB9IHJldHVybiBkID0gWi5nZXRFbGVtZW50QnlJZChjWzJdKSwgZCAmJiBkLnBhcmVudE5vZGUgJiYgKHRoaXMubGVuZ3RoID0gMSwgdGhpc1swXSA9IGQpLCB0aGlzLmNvbnRleHQgPSBaLCB0aGlzLnNlbGVjdG9yID0gYSwgdGhpcyB9IHJldHVybiBhLm5vZGVUeXBlID8gKHRoaXMuY29udGV4dCA9IHRoaXNbMF0gPSBhLCB0aGlzLmxlbmd0aCA9IDEsIHRoaXMpIDogXy5pc0Z1bmN0aW9uKGEpID8gXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgaWIucmVhZHkgPyBpYi5yZWFkeShhKSA6IGEoXykgOiAodm9pZCAwICE9PSBhLnNlbGVjdG9yICYmICh0aGlzLnNlbGVjdG9yID0gYS5zZWxlY3RvciwgdGhpcy5jb250ZXh0ID0gYS5jb250ZXh0KSwgXy5tYWtlQXJyYXkoYSwgdGhpcykpIH07IGtiLnByb3RvdHlwZSA9IF8uZm4sIGliID0gXyhaKTsgdmFyIGxiID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sIG1iID0geyBjaGlsZHJlbjogITAsIGNvbnRlbnRzOiAhMCwgbmV4dDogITAsIHByZXY6ICEwIH07IF8uZXh0ZW5kKHsgZGlyOiBmdW5jdGlvbiAoYSwgYiwgYykgeyBmb3IgKHZhciBkID0gW10sIGUgPSB2b2lkIDAgIT09IGM7IChhID0gYVtiXSkgJiYgOSAhPT0gYS5ub2RlVHlwZTspaWYgKDEgPT09IGEubm9kZVR5cGUpIHsgaWYgKGUgJiYgXyhhKS5pcyhjKSkgYnJlYWs7IGQucHVzaChhKSB9IHJldHVybiBkIH0sIHNpYmxpbmc6IGZ1bmN0aW9uIChhLCBiKSB7IGZvciAodmFyIGMgPSBbXTsgYTsgYSA9IGEubmV4dFNpYmxpbmcpMSA9PT0gYS5ub2RlVHlwZSAmJiBhICE9PSBiICYmIGMucHVzaChhKTsgcmV0dXJuIGMgfSB9KSwgXy5mbi5leHRlbmQoeyBoYXM6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gXyhhLCB0aGlzKSwgYyA9IGIubGVuZ3RoOyByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24gKCkgeyBmb3IgKHZhciBhID0gMDsgYyA+IGE7IGErKylpZiAoXy5jb250YWlucyh0aGlzLCBiW2FdKSkgcmV0dXJuICEwIH0pIH0sIGNsb3Nlc3Q6IGZ1bmN0aW9uIChhLCBiKSB7IGZvciAodmFyIGMsIGQgPSAwLCBlID0gdGhpcy5sZW5ndGgsIGYgPSBbXSwgZyA9IGZiLnRlc3QoYSkgfHwgXCJzdHJpbmdcIiAhPSB0eXBlb2YgYSA/IF8oYSwgYiB8fCB0aGlzLmNvbnRleHQpIDogMDsgZSA+IGQ7IGQrKylmb3IgKGMgPSB0aGlzW2RdOyBjICYmIGMgIT09IGI7IGMgPSBjLnBhcmVudE5vZGUpaWYgKGMubm9kZVR5cGUgPCAxMSAmJiAoZyA/IGcuaW5kZXgoYykgPiAtMSA6IDEgPT09IGMubm9kZVR5cGUgJiYgXy5maW5kLm1hdGNoZXNTZWxlY3RvcihjLCBhKSkpIHsgZi5wdXNoKGMpOyBicmVhayB9IHJldHVybiB0aGlzLnB1c2hTdGFjayhmLmxlbmd0aCA+IDEgPyBfLnVuaXF1ZShmKSA6IGYpIH0sIGluZGV4OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSA/IFwic3RyaW5nXCIgPT0gdHlwZW9mIGEgPyBVLmNhbGwoXyhhKSwgdGhpc1swXSkgOiBVLmNhbGwodGhpcywgYS5qcXVlcnkgPyBhWzBdIDogYSkgOiB0aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTEgfSwgYWRkOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdGhpcy5wdXNoU3RhY2soXy51bmlxdWUoXy5tZXJnZSh0aGlzLmdldCgpLCBfKGEsIGIpKSkpIH0sIGFkZEJhY2s6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLmFkZChudWxsID09IGEgPyB0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKGEpKSB9IH0pLCBfLmVhY2goeyBwYXJlbnQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS5wYXJlbnROb2RlOyByZXR1cm4gYiAmJiAxMSAhPT0gYi5ub2RlVHlwZSA/IGIgOiBudWxsIH0sIHBhcmVudHM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfLmRpcihhLCBcInBhcmVudE5vZGVcIikgfSwgcGFyZW50c1VudGlsOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gXy5kaXIoYSwgXCJwYXJlbnROb2RlXCIsIGMpIH0sIG5leHQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBlKGEsIFwibmV4dFNpYmxpbmdcIikgfSwgcHJldjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGUoYSwgXCJwcmV2aW91c1NpYmxpbmdcIikgfSwgbmV4dEFsbDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIF8uZGlyKGEsIFwibmV4dFNpYmxpbmdcIikgfSwgcHJldkFsbDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIF8uZGlyKGEsIFwicHJldmlvdXNTaWJsaW5nXCIpIH0sIG5leHRVbnRpbDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIF8uZGlyKGEsIFwibmV4dFNpYmxpbmdcIiwgYykgfSwgcHJldlVudGlsOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gXy5kaXIoYSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgYykgfSwgc2libGluZ3M6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfLnNpYmxpbmcoKGEucGFyZW50Tm9kZSB8fCB7fSkuZmlyc3RDaGlsZCwgYSkgfSwgY2hpbGRyZW46IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfLnNpYmxpbmcoYS5maXJzdENoaWxkKSB9LCBjb250ZW50czogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuY29udGVudERvY3VtZW50IHx8IF8ubWVyZ2UoW10sIGEuY2hpbGROb2RlcykgfSB9LCBmdW5jdGlvbiAoYSwgYikgeyBfLmZuW2FdID0gZnVuY3Rpb24gKGMsIGQpIHsgdmFyIGUgPSBfLm1hcCh0aGlzLCBiLCBjKTsgcmV0dXJuIFwiVW50aWxcIiAhPT0gYS5zbGljZSgtNSkgJiYgKGQgPSBjKSwgZCAmJiBcInN0cmluZ1wiID09IHR5cGVvZiBkICYmIChlID0gXy5maWx0ZXIoZCwgZSkpLCB0aGlzLmxlbmd0aCA+IDEgJiYgKG1iW2FdIHx8IF8udW5pcXVlKGUpLCBsYi50ZXN0KGEpICYmIGUucmV2ZXJzZSgpKSwgdGhpcy5wdXNoU3RhY2soZSkgfSB9KTsgdmFyIG5iID0gL1xcUysvZywgb2IgPSB7fTsgXy5DYWxsYmFja3MgPSBmdW5jdGlvbiAoYSkgeyBhID0gXCJzdHJpbmdcIiA9PSB0eXBlb2YgYSA/IG9iW2FdIHx8IGYoYSkgOiBfLmV4dGVuZCh7fSwgYSk7IHZhciBiLCBjLCBkLCBlLCBnLCBoLCBpID0gW10sIGogPSAhYS5vbmNlICYmIFtdLCBrID0gZnVuY3Rpb24gKGYpIHsgZm9yIChiID0gYS5tZW1vcnkgJiYgZiwgYyA9ICEwLCBoID0gZSB8fCAwLCBlID0gMCwgZyA9IGkubGVuZ3RoLCBkID0gITA7IGkgJiYgZyA+IGg7IGgrKylpZiAoaVtoXS5hcHBseShmWzBdLCBmWzFdKSA9PT0gITEgJiYgYS5zdG9wT25GYWxzZSkgeyBiID0gITE7IGJyZWFrIH0gZCA9ICExLCBpICYmIChqID8gai5sZW5ndGggJiYgayhqLnNoaWZ0KCkpIDogYiA/IGkgPSBbXSA6IGwuZGlzYWJsZSgpKSB9LCBsID0geyBhZGQ6IGZ1bmN0aW9uICgpIHsgaWYgKGkpIHsgdmFyIGMgPSBpLmxlbmd0aDsgIWZ1bmN0aW9uIGYoYikgeyBfLmVhY2goYiwgZnVuY3Rpb24gKGIsIGMpIHsgdmFyIGQgPSBfLnR5cGUoYyk7IFwiZnVuY3Rpb25cIiA9PT0gZCA/IGEudW5pcXVlICYmIGwuaGFzKGMpIHx8IGkucHVzaChjKSA6IGMgJiYgYy5sZW5ndGggJiYgXCJzdHJpbmdcIiAhPT0gZCAmJiBmKGMpIH0pIH0oYXJndW1lbnRzKSwgZCA/IGcgPSBpLmxlbmd0aCA6IGIgJiYgKGUgPSBjLCBrKGIpKSB9IHJldHVybiB0aGlzIH0sIHJlbW92ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gaSAmJiBfLmVhY2goYXJndW1lbnRzLCBmdW5jdGlvbiAoYSwgYikgeyBmb3IgKHZhciBjOyAoYyA9IF8uaW5BcnJheShiLCBpLCBjKSkgPiAtMTspaS5zcGxpY2UoYywgMSksIGQgJiYgKGcgPj0gYyAmJiBnLS0sIGggPj0gYyAmJiBoLS0pIH0pLCB0aGlzIH0sIGhhczogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgPyBfLmluQXJyYXkoYSwgaSkgPiAtMSA6ICEoIWkgfHwgIWkubGVuZ3RoKSB9LCBlbXB0eTogZnVuY3Rpb24gKCkgeyByZXR1cm4gaSA9IFtdLCBnID0gMCwgdGhpcyB9LCBkaXNhYmxlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBpID0gaiA9IGIgPSB2b2lkIDAsIHRoaXMgfSwgZGlzYWJsZWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICFpIH0sIGxvY2s6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGogPSB2b2lkIDAsIGIgfHwgbC5kaXNhYmxlKCksIHRoaXMgfSwgbG9ja2VkOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhaiB9LCBmaXJlV2l0aDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuICFpIHx8IGMgJiYgIWogfHwgKGIgPSBiIHx8IFtdLCBiID0gW2EsIGIuc2xpY2UgPyBiLnNsaWNlKCkgOiBiXSwgZCA/IGoucHVzaChiKSA6IGsoYikpLCB0aGlzIH0sIGZpcmU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGwuZmlyZVdpdGgodGhpcywgYXJndW1lbnRzKSwgdGhpcyB9LCBmaXJlZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gISFjIH0gfTsgcmV0dXJuIGwgfSwgXy5leHRlbmQoeyBEZWZlcnJlZDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBbW1wicmVzb2x2ZVwiLCBcImRvbmVcIiwgXy5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSwgXCJyZXNvbHZlZFwiXSwgW1wicmVqZWN0XCIsIFwiZmFpbFwiLCBfLkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLCBcInJlamVjdGVkXCJdLCBbXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBfLkNhbGxiYWNrcyhcIm1lbW9yeVwiKV1dLCBjID0gXCJwZW5kaW5nXCIsIGQgPSB7IHN0YXRlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjIH0sIGFsd2F5czogZnVuY3Rpb24gKCkgeyByZXR1cm4gZS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLCB0aGlzIH0sIHRoZW46IGZ1bmN0aW9uICgpIHsgdmFyIGEgPSBhcmd1bWVudHM7IHJldHVybiBfLkRlZmVycmVkKGZ1bmN0aW9uIChjKSB7IF8uZWFjaChiLCBmdW5jdGlvbiAoYiwgZikgeyB2YXIgZyA9IF8uaXNGdW5jdGlvbihhW2JdKSAmJiBhW2JdOyBlW2ZbMV1dKGZ1bmN0aW9uICgpIHsgdmFyIGEgPSBnICYmIGcuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgYSAmJiBfLmlzRnVuY3Rpb24oYS5wcm9taXNlKSA/IGEucHJvbWlzZSgpLmRvbmUoYy5yZXNvbHZlKS5mYWlsKGMucmVqZWN0KS5wcm9ncmVzcyhjLm5vdGlmeSkgOiBjW2ZbMF0gKyBcIldpdGhcIl0odGhpcyA9PT0gZCA/IGMucHJvbWlzZSgpIDogdGhpcywgZyA/IFthXSA6IGFyZ3VtZW50cykgfSkgfSksIGEgPSBudWxsIH0pLnByb21pc2UoKSB9LCBwcm9taXNlOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gbnVsbCAhPSBhID8gXy5leHRlbmQoYSwgZCkgOiBkIH0gfSwgZSA9IHt9OyByZXR1cm4gZC5waXBlID0gZC50aGVuLCBfLmVhY2goYiwgZnVuY3Rpb24gKGEsIGYpIHsgdmFyIGcgPSBmWzJdLCBoID0gZlszXTsgZFtmWzFdXSA9IGcuYWRkLCBoICYmIGcuYWRkKGZ1bmN0aW9uICgpIHsgYyA9IGggfSwgYlsxIF4gYV1bMl0uZGlzYWJsZSwgYlsyXVsyXS5sb2NrKSwgZVtmWzBdXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVbZlswXSArIFwiV2l0aFwiXSh0aGlzID09PSBlID8gZCA6IHRoaXMsIGFyZ3VtZW50cyksIHRoaXMgfSwgZVtmWzBdICsgXCJXaXRoXCJdID0gZy5maXJlV2l0aCB9KSwgZC5wcm9taXNlKGUpLCBhICYmIGEuY2FsbChlLCBlKSwgZSB9LCB3aGVuOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYywgZCwgZSA9IDAsIGYgPSBSLmNhbGwoYXJndW1lbnRzKSwgZyA9IGYubGVuZ3RoLCBoID0gMSAhPT0gZyB8fCBhICYmIF8uaXNGdW5jdGlvbihhLnByb21pc2UpID8gZyA6IDAsIGkgPSAxID09PSBoID8gYSA6IF8uRGVmZXJyZWQoKSwgaiA9IGZ1bmN0aW9uIChhLCBjLCBkKSB7IHJldHVybiBmdW5jdGlvbiAoZSkgeyBjW2FdID0gdGhpcywgZFthXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gUi5jYWxsKGFyZ3VtZW50cykgOiBlLCBkID09PSBiID8gaS5ub3RpZnlXaXRoKGMsIGQpIDogLS1oIHx8IGkucmVzb2x2ZVdpdGgoYywgZCkgfSB9OyBpZiAoZyA+IDEpIGZvciAoYiA9IG5ldyBBcnJheShnKSwgYyA9IG5ldyBBcnJheShnKSwgZCA9IG5ldyBBcnJheShnKTsgZyA+IGU7IGUrKylmW2VdICYmIF8uaXNGdW5jdGlvbihmW2VdLnByb21pc2UpID8gZltlXS5wcm9taXNlKCkuZG9uZShqKGUsIGQsIGYpKS5mYWlsKGkucmVqZWN0KS5wcm9ncmVzcyhqKGUsIGMsIGIpKSA6IC0taDsgcmV0dXJuIGggfHwgaS5yZXNvbHZlV2l0aChkLCBmKSwgaS5wcm9taXNlKCkgfSB9KTsgdmFyIHBiOyBfLmZuLnJlYWR5ID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIF8ucmVhZHkucHJvbWlzZSgpLmRvbmUoYSksIHRoaXMgfSwgXy5leHRlbmQoeyBpc1JlYWR5OiAhMSwgcmVhZHlXYWl0OiAxLCBob2xkUmVhZHk6IGZ1bmN0aW9uIChhKSB7IGEgPyBfLnJlYWR5V2FpdCsrIDogXy5yZWFkeSghMCkgfSwgcmVhZHk6IGZ1bmN0aW9uIChhKSB7IChhID09PSAhMCA/IC0tXy5yZWFkeVdhaXQgOiBfLmlzUmVhZHkpIHx8IChfLmlzUmVhZHkgPSAhMCwgYSAhPT0gITAgJiYgLS1fLnJlYWR5V2FpdCA+IDAgfHwgKHBiLnJlc29sdmVXaXRoKFosIFtfXSksIF8uZm4udHJpZ2dlckhhbmRsZXIgJiYgKF8oWikudHJpZ2dlckhhbmRsZXIoXCJyZWFkeVwiKSwgXyhaKS5vZmYoXCJyZWFkeVwiKSkpKSB9IH0pLCBfLnJlYWR5LnByb21pc2UgPSBmdW5jdGlvbiAoYikgeyByZXR1cm4gcGIgfHwgKHBiID0gXy5EZWZlcnJlZCgpLCBcImNvbXBsZXRlXCIgPT09IFoucmVhZHlTdGF0ZSA/IHNldFRpbWVvdXQoXy5yZWFkeSkgOiAoWi5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBnLCAhMSksIGEuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgZywgITEpKSksIHBiLnByb21pc2UoYikgfSwgXy5yZWFkeS5wcm9taXNlKCk7IHZhciBxYiA9IF8uYWNjZXNzID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIGUsIGYsIGcpIHsgdmFyIGggPSAwLCBpID0gYS5sZW5ndGgsIGogPSBudWxsID09IGM7IGlmIChcIm9iamVjdFwiID09PSBfLnR5cGUoYykpIHsgZSA9ICEwOyBmb3IgKGggaW4gYykgXy5hY2Nlc3MoYSwgYiwgaCwgY1toXSwgITAsIGYsIGcpIH0gZWxzZSBpZiAodm9pZCAwICE9PSBkICYmIChlID0gITAsIF8uaXNGdW5jdGlvbihkKSB8fCAoZyA9ICEwKSwgaiAmJiAoZyA/IChiLmNhbGwoYSwgZCksIGIgPSBudWxsKSA6IChqID0gYiwgYiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBqLmNhbGwoXyhhKSwgYykgfSkpLCBiKSkgZm9yICg7IGkgPiBoOyBoKyspYihhW2hdLCBjLCBnID8gZCA6IGQuY2FsbChhW2hdLCBoLCBiKGFbaF0sIGMpKSk7IHJldHVybiBlID8gYSA6IGogPyBiLmNhbGwoYSkgOiBpID8gYihhWzBdLCBjKSA6IGYgfTsgXy5hY2NlcHREYXRhID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIDEgPT09IGEubm9kZVR5cGUgfHwgOSA9PT0gYS5ub2RlVHlwZSB8fCAhK2Eubm9kZVR5cGUgfSwgaC51aWQgPSAxLCBoLmFjY2VwdHMgPSBfLmFjY2VwdERhdGEsIGgucHJvdG90eXBlID0geyBrZXk6IGZ1bmN0aW9uIChhKSB7IGlmICghaC5hY2NlcHRzKGEpKSByZXR1cm4gMDsgdmFyIGIgPSB7fSwgYyA9IGFbdGhpcy5leHBhbmRvXTsgaWYgKCFjKSB7IGMgPSBoLnVpZCsrOyB0cnkgeyBiW3RoaXMuZXhwYW5kb10gPSB7IHZhbHVlOiBjIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGEsIGIpIH0gY2F0Y2ggKGQpIHsgYlt0aGlzLmV4cGFuZG9dID0gYywgXy5leHRlbmQoYSwgYikgfSB9IHJldHVybiB0aGlzLmNhY2hlW2NdIHx8ICh0aGlzLmNhY2hlW2NdID0ge30pLCBjIH0sIHNldDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQsIGUgPSB0aGlzLmtleShhKSwgZiA9IHRoaXMuY2FjaGVbZV07IGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBiKSBmW2JdID0gYzsgZWxzZSBpZiAoXy5pc0VtcHR5T2JqZWN0KGYpKSBfLmV4dGVuZCh0aGlzLmNhY2hlW2VdLCBiKTsgZWxzZSBmb3IgKGQgaW4gYikgZltkXSA9IGJbZF07IHJldHVybiBmIH0sIGdldDogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMgPSB0aGlzLmNhY2hlW3RoaXMua2V5KGEpXTsgcmV0dXJuIHZvaWQgMCA9PT0gYiA/IGMgOiBjW2JdIH0sIGFjY2VzczogZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQ7IHJldHVybiB2b2lkIDAgPT09IGIgfHwgYiAmJiBcInN0cmluZ1wiID09IHR5cGVvZiBiICYmIHZvaWQgMCA9PT0gYyA/IChkID0gdGhpcy5nZXQoYSwgYiksIHZvaWQgMCAhPT0gZCA/IGQgOiB0aGlzLmdldChhLCBfLmNhbWVsQ2FzZShiKSkpIDogKHRoaXMuc2V0KGEsIGIsIGMpLCB2b2lkIDAgIT09IGMgPyBjIDogYikgfSwgcmVtb3ZlOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYywgZCwgZSwgZiA9IHRoaXMua2V5KGEpLCBnID0gdGhpcy5jYWNoZVtmXTsgaWYgKHZvaWQgMCA9PT0gYikgdGhpcy5jYWNoZVtmXSA9IHt9OyBlbHNlIHsgXy5pc0FycmF5KGIpID8gZCA9IGIuY29uY2F0KGIubWFwKF8uY2FtZWxDYXNlKSkgOiAoZSA9IF8uY2FtZWxDYXNlKGIpLCBiIGluIGcgPyBkID0gW2IsIGVdIDogKGQgPSBlLCBkID0gZCBpbiBnID8gW2RdIDogZC5tYXRjaChuYikgfHwgW10pKSwgYyA9IGQubGVuZ3RoOyBmb3IgKDsgYy0tOylkZWxldGUgZ1tkW2NdXSB9IH0sIGhhc0RhdGE6IGZ1bmN0aW9uIChhKSB7IHJldHVybiAhXy5pc0VtcHR5T2JqZWN0KHRoaXMuY2FjaGVbYVt0aGlzLmV4cGFuZG9dXSB8fCB7fSkgfSwgZGlzY2FyZDogZnVuY3Rpb24gKGEpIHsgYVt0aGlzLmV4cGFuZG9dICYmIGRlbGV0ZSB0aGlzLmNhY2hlW2FbdGhpcy5leHBhbmRvXV0gfSB9OyB2YXIgcmIgPSBuZXcgaCwgc2IgPSBuZXcgaCwgdGIgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sIHViID0gLyhbQS1aXSkvZzsgXy5leHRlbmQoeyBoYXNEYXRhOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gc2IuaGFzRGF0YShhKSB8fCByYi5oYXNEYXRhKGEpIH0sIGRhdGE6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBzYi5hY2Nlc3MoYSwgYiwgYykgfSwgcmVtb3ZlRGF0YTogZnVuY3Rpb24gKGEsIGIpIHsgc2IucmVtb3ZlKGEsIGIpIH0sIF9kYXRhOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gcmIuYWNjZXNzKGEsIGIsIGMpIH0sIF9yZW1vdmVEYXRhOiBmdW5jdGlvbiAoYSwgYikgeyByYi5yZW1vdmUoYSwgYikgfSB9KSwgXy5mbi5leHRlbmQoeyBkYXRhOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYywgZCwgZSwgZiA9IHRoaXNbMF0sIGcgPSBmICYmIGYuYXR0cmlidXRlczsgaWYgKHZvaWQgMCA9PT0gYSkgeyBpZiAodGhpcy5sZW5ndGggJiYgKGUgPSBzYi5nZXQoZiksIDEgPT09IGYubm9kZVR5cGUgJiYgIXJiLmdldChmLCBcImhhc0RhdGFBdHRyc1wiKSkpIHsgZm9yIChjID0gZy5sZW5ndGg7IGMtLTspZ1tjXSAmJiAoZCA9IGdbY10ubmFtZSwgMCA9PT0gZC5pbmRleE9mKFwiZGF0YS1cIikgJiYgKGQgPSBfLmNhbWVsQ2FzZShkLnNsaWNlKDUpKSwgaShmLCBkLCBlW2RdKSkpOyByYi5zZXQoZiwgXCJoYXNEYXRhQXR0cnNcIiwgITApIH0gcmV0dXJuIGUgfSByZXR1cm4gXCJvYmplY3RcIiA9PSB0eXBlb2YgYSA/IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHNiLnNldCh0aGlzLCBhKSB9KSA6IHFiKHRoaXMsIGZ1bmN0aW9uIChiKSB7IHZhciBjLCBkID0gXy5jYW1lbENhc2UoYSk7IGlmIChmICYmIHZvaWQgMCA9PT0gYikgeyBpZiAoYyA9IHNiLmdldChmLCBhKSwgdm9pZCAwICE9PSBjKSByZXR1cm4gYzsgaWYgKGMgPSBzYi5nZXQoZiwgZCksIHZvaWQgMCAhPT0gYykgcmV0dXJuIGM7IGlmIChjID0gaShmLCBkLCB2b2lkIDApLCB2b2lkIDAgIT09IGMpIHJldHVybiBjIH0gZWxzZSB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgYyA9IHNiLmdldCh0aGlzLCBkKTsgc2Iuc2V0KHRoaXMsIGQsIGIpLCAtMSAhPT0gYS5pbmRleE9mKFwiLVwiKSAmJiB2b2lkIDAgIT09IGMgJiYgc2Iuc2V0KHRoaXMsIGEsIGIpIH0pIH0sIG51bGwsIGIsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCAhMCkgfSwgcmVtb3ZlRGF0YTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHNiLnJlbW92ZSh0aGlzLCBhKSB9KSB9IH0pLCBfLmV4dGVuZCh7IHF1ZXVlOiBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZDsgcmV0dXJuIGEgPyAoYiA9IChiIHx8IFwiZnhcIikgKyBcInF1ZXVlXCIsIGQgPSByYi5nZXQoYSwgYiksIGMgJiYgKCFkIHx8IF8uaXNBcnJheShjKSA/IGQgPSByYi5hY2Nlc3MoYSwgYiwgXy5tYWtlQXJyYXkoYykpIDogZC5wdXNoKGMpKSwgZCB8fCBbXSkgOiB2b2lkIDAgfSwgZGVxdWV1ZTogZnVuY3Rpb24gKGEsIGIpIHsgYiA9IGIgfHwgXCJmeFwiOyB2YXIgYyA9IF8ucXVldWUoYSwgYiksIGQgPSBjLmxlbmd0aCwgZSA9IGMuc2hpZnQoKSwgZiA9IF8uX3F1ZXVlSG9va3MoYSwgYiksIGcgPSBmdW5jdGlvbiAoKSB7IF8uZGVxdWV1ZShhLCBiKSB9OyBcImlucHJvZ3Jlc3NcIiA9PT0gZSAmJiAoZSA9IGMuc2hpZnQoKSwgZC0tKSwgZSAmJiAoXCJmeFwiID09PSBiICYmIGMudW5zaGlmdChcImlucHJvZ3Jlc3NcIiksIGRlbGV0ZSBmLnN0b3AsIGUuY2FsbChhLCBnLCBmKSksICFkICYmIGYgJiYgZi5lbXB0eS5maXJlKCkgfSwgX3F1ZXVlSG9va3M6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gYiArIFwicXVldWVIb29rc1wiOyByZXR1cm4gcmIuZ2V0KGEsIGMpIHx8IHJiLmFjY2VzcyhhLCBjLCB7IGVtcHR5OiBfLkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLmFkZChmdW5jdGlvbiAoKSB7IHJiLnJlbW92ZShhLCBbYiArIFwicXVldWVcIiwgY10pIH0pIH0pIH0gfSksIF8uZm4uZXh0ZW5kKHsgcXVldWU6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gMjsgcmV0dXJuIFwic3RyaW5nXCIgIT0gdHlwZW9mIGEgJiYgKGIgPSBhLCBhID0gXCJmeFwiLCBjLS0pLCBhcmd1bWVudHMubGVuZ3RoIDwgYyA/IF8ucXVldWUodGhpc1swXSwgYSkgOiB2b2lkIDAgPT09IGIgPyB0aGlzIDogdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGMgPSBfLnF1ZXVlKHRoaXMsIGEsIGIpOyBfLl9xdWV1ZUhvb2tzKHRoaXMsIGEpLCBcImZ4XCIgPT09IGEgJiYgXCJpbnByb2dyZXNzXCIgIT09IGNbMF0gJiYgXy5kZXF1ZXVlKHRoaXMsIGEpIH0pIH0sIGRlcXVldWU6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBfLmRlcXVldWUodGhpcywgYSkgfSkgfSwgY2xlYXJRdWV1ZTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHRoaXMucXVldWUoYSB8fCBcImZ4XCIsIFtdKSB9LCBwcm9taXNlOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYywgZCA9IDEsIGUgPSBfLkRlZmVycmVkKCksIGYgPSB0aGlzLCBnID0gdGhpcy5sZW5ndGgsIGggPSBmdW5jdGlvbiAoKSB7IC0tZCB8fCBlLnJlc29sdmVXaXRoKGYsIFtmXSkgfTsgZm9yIChcInN0cmluZ1wiICE9IHR5cGVvZiBhICYmIChiID0gYSwgYSA9IHZvaWQgMCksIGEgPSBhIHx8IFwiZnhcIjsgZy0tOyljID0gcmIuZ2V0KGZbZ10sIGEgKyBcInF1ZXVlSG9va3NcIiksIGMgJiYgYy5lbXB0eSAmJiAoZCsrLCBjLmVtcHR5LmFkZChoKSk7IHJldHVybiBoKCksIGUucHJvbWlzZShiKSB9IH0pOyB2YXIgdmIgPSAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLy5zb3VyY2UsIHdiID0gW1wiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCJdLCB4YiA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhID0gYiB8fCBhLCBcIm5vbmVcIiA9PT0gXy5jc3MoYSwgXCJkaXNwbGF5XCIpIHx8ICFfLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCwgYSkgfSwgeWIgPSAvXig/OmNoZWNrYm94fHJhZGlvKSQvaTsgIWZ1bmN0aW9uICgpIHsgdmFyIGEgPSBaLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgYiA9IGEuYXBwZW5kQ2hpbGQoWi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSwgYyA9IFouY3JlYXRlRWxlbWVudChcImlucHV0XCIpOyBjLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJyYWRpb1wiKSwgYy5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiKSwgYy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidFwiKSwgYi5hcHBlbmRDaGlsZChjKSwgWS5jaGVja0Nsb25lID0gYi5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsIGIuaW5uZXJIVE1MID0gXCI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+XCIsIFkubm9DbG9uZUNoZWNrZWQgPSAhIWIuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlIH0oKTsgdmFyIHpiID0gXCJ1bmRlZmluZWRcIjsgWS5mb2N1c2luQnViYmxlcyA9IFwib25mb2N1c2luXCIgaW4gYTsgdmFyIEFiID0gL15rZXkvLCBCYiA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudSl8Y2xpY2svLCBDYiA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLywgRGIgPSAvXihbXi5dKikoPzpcXC4oLispfCkkLzsgXy5ldmVudCA9IHtcclxuICAgICAgICBnbG9iYWw6IHt9LCBhZGQ6IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlKSB7IHZhciBmLCBnLCBoLCBpLCBqLCBrLCBsLCBtLCBuLCBvLCBwLCBxID0gcmIuZ2V0KGEpOyBpZiAocSkgZm9yIChjLmhhbmRsZXIgJiYgKGYgPSBjLCBjID0gZi5oYW5kbGVyLCBlID0gZi5zZWxlY3RvciksIGMuZ3VpZCB8fCAoYy5ndWlkID0gXy5ndWlkKyspLCAoaSA9IHEuZXZlbnRzKSB8fCAoaSA9IHEuZXZlbnRzID0ge30pLCAoZyA9IHEuaGFuZGxlKSB8fCAoZyA9IHEuaGFuZGxlID0gZnVuY3Rpb24gKGIpIHsgcmV0dXJuIHR5cGVvZiBfICE9PSB6YiAmJiBfLmV2ZW50LnRyaWdnZXJlZCAhPT0gYi50eXBlID8gXy5ldmVudC5kaXNwYXRjaC5hcHBseShhLCBhcmd1bWVudHMpIDogdm9pZCAwIH0pLCBiID0gKGIgfHwgXCJcIikubWF0Y2gobmIpIHx8IFtcIlwiXSwgaiA9IGIubGVuZ3RoOyBqLS07KWggPSBEYi5leGVjKGJbal0pIHx8IFtdLCBuID0gcCA9IGhbMV0sIG8gPSAoaFsyXSB8fCBcIlwiKS5zcGxpdChcIi5cIikuc29ydCgpLCBuICYmIChsID0gXy5ldmVudC5zcGVjaWFsW25dIHx8IHt9LCBuID0gKGUgPyBsLmRlbGVnYXRlVHlwZSA6IGwuYmluZFR5cGUpIHx8IG4sIGwgPSBfLmV2ZW50LnNwZWNpYWxbbl0gfHwge30sIGsgPSBfLmV4dGVuZCh7IHR5cGU6IG4sIG9yaWdUeXBlOiBwLCBkYXRhOiBkLCBoYW5kbGVyOiBjLCBndWlkOiBjLmd1aWQsIHNlbGVjdG9yOiBlLCBuZWVkc0NvbnRleHQ6IGUgJiYgXy5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGUpLCBuYW1lc3BhY2U6IG8uam9pbihcIi5cIikgfSwgZiksIChtID0gaVtuXSkgfHwgKG0gPSBpW25dID0gW10sIG0uZGVsZWdhdGVDb3VudCA9IDAsIGwuc2V0dXAgJiYgbC5zZXR1cC5jYWxsKGEsIGQsIG8sIGcpICE9PSAhMSB8fCBhLmFkZEV2ZW50TGlzdGVuZXIgJiYgYS5hZGRFdmVudExpc3RlbmVyKG4sIGcsIHsgY2FwdHVyZTogZmFsc2UsIHBhc3NpdmU6IG4uaW5kZXhPZigndG91Y2gnKSA+IC0xICYmIG4uaW5kZXhPZignc2Nyb2xsJyk+LTF9KSksbC5hZGQmJihsLmFkZC5jYWxsKGEsayksay5oYW5kbGVyLmd1aWR8fChrLmhhbmRsZXIuZ3VpZD1jLmd1aWQpKSxlP20uc3BsaWNlKG0uZGVsZWdhdGVDb3VudCsrLDAsayk6bS5wdXNoKGspLF8uZXZlbnQuZ2xvYmFsW25dPSEwKX0scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scCxxPXJiLmhhc0RhdGEoYSkmJnJiLmdldChhKTtpZihxJiYoaT1xLmV2ZW50cykpe2ZvcihiPShifHxcIlwiKS5tYXRjaChuYil8fFtcIlwiXSxqPWIubGVuZ3RoO2otLTspaWYoaD1EYi5leGVjKGJbal0pfHxbXSxuPXA9aFsxXSxvPShoWzJdfHxcIlwiKS5zcGxpdChcIi5cIikuc29ydCgpLG4pe2ZvcihsPV8uZXZlbnQuc3BlY2lhbFtuXXx8e30sbj0oZD9sLmRlbGVnYXRlVHlwZTpsLmJpbmRUeXBlKXx8bixtPWlbbl18fFtdLGg9aFsyXSYmbmV3IFJlZ0V4cChcIihefFxcXFwuKVwiK28uam9pbihcIlxcXFwuKD86LipcXFxcLnwpXCIpK1wiKFxcXFwufCQpXCIpLGc9Zj1tLmxlbmd0aDtmLS07KWs9bVtmXSwhZSYmcCE9PWsub3JpZ1R5cGV8fGMmJmMuZ3VpZCE9PWsuZ3VpZHx8aCYmIWgudGVzdChrLm5hbWVzcGFjZSl8fGQmJmQhPT1rLnNlbGVjdG9yJiYoXCIqKlwiIT09ZHx8IWsuc2VsZWN0b3IpfHwobS5zcGxpY2UoZiwxKSxrLnNlbGVjdG9yJiZtLmRlbGVnYXRlQ291bnQtLSxsLnJlbW92ZSYmbC5yZW1vdmUuY2FsbChhLGspKTtnJiYhbS5sZW5ndGgmJihsLnRlYXJkb3duJiZsLnRlYXJkb3duLmNhbGwoYSxvLHEuaGFuZGxlKSE9PSExfHxfLnJlbW92ZUV2ZW50KGEsbixxLmhhbmRsZSksZGVsZXRlIGlbbl0pfWVsc2UgZm9yKG4gaW4gaSlfLmV2ZW50LnJlbW92ZShhLG4rYltqXSxjLGQsITApO18uaXNFbXB0eU9iamVjdChpKSYmKGRlbGV0ZSBxLmhhbmRsZSxyYi5yZW1vdmUoYSxcImV2ZW50c1wiKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG09W2R8fFpdLG49WC5jYWxsKGIsXCJ0eXBlXCIpP2IudHlwZTpiLG89WC5jYWxsKGIsXCJuYW1lc3BhY2VcIik/Yi5uYW1lc3BhY2Uuc3BsaXQoXCIuXCIpOltdO2lmKGc9aD1kPWR8fFosMyE9PWQubm9kZVR5cGUmJjghPT1kLm5vZGVUeXBlJiYhQ2IudGVzdChuK18uZXZlbnQudHJpZ2dlcmVkKSYmKG4uaW5kZXhPZihcIi5cIik+PTAmJihvPW4uc3BsaXQoXCIuXCIpLG49by5zaGlmdCgpLG8uc29ydCgpKSxqPW4uaW5kZXhPZihcIjpcIik8MCYmXCJvblwiK24sYj1iW18uZXhwYW5kb10/YjpuZXcgXy5FdmVudChuLFwib2JqZWN0XCI9PXR5cGVvZiBiJiZiKSxiLmlzVHJpZ2dlcj1lPzI6MyxiLm5hbWVzcGFjZT1vLmpvaW4oXCIuXCIpLGIubmFtZXNwYWNlX3JlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoXCIoXnxcXFxcLilcIitvLmpvaW4oXCJcXFxcLig/Oi4qXFxcXC58KVwiKStcIihcXFxcLnwkKVwiKTpudWxsLGIucmVzdWx0PXZvaWQgMCxiLnRhcmdldHx8KGIudGFyZ2V0PWQpLGM9bnVsbD09Yz9bYl06Xy5tYWtlQXJyYXkoYyxbYl0pLGw9Xy5ldmVudC5zcGVjaWFsW25dfHx7fSxlfHwhbC50cmlnZ2VyfHxsLnRyaWdnZXIuYXBwbHkoZCxjKSE9PSExKSl7aWYoIWUmJiFsLm5vQnViYmxlJiYhXy5pc1dpbmRvdyhkKSl7Zm9yKGk9bC5kZWxlZ2F0ZVR5cGV8fG4sQ2IudGVzdChpK24pfHwoZz1nLnBhcmVudE5vZGUpO2c7Zz1nLnBhcmVudE5vZGUpbS5wdXNoKGcpLGg9Zztcbmg9PT0oZC5vd25lckRvY3VtZW50fHxaKSYmbS5wdXNoKGguZGVmYXVsdFZpZXd8fGgucGFyZW50V2luZG93fHxhKX1mb3IoZj0wOyhnPW1bZisrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7KWIudHlwZT1mPjE/aTpsLmJpbmRUeXBlfHxuLGs9KHJiLmdldChnLFwiZXZlbnRzXCIpfHx7fSlbYi50eXBlXSYmcmIuZ2V0KGcsXCJoYW5kbGVcIiksayYmay5hcHBseShnLGMpLGs9aiYmZ1tqXSxrJiZrLmFwcGx5JiZfLmFjY2VwdERhdGEoZykmJihiLnJlc3VsdD1rLmFwcGx5KGcsYyksYi5yZXN1bHQ9PT0hMSYmYi5wcmV2ZW50RGVmYXVsdCgpKTtyZXR1cm4gYi50eXBlPW4sZXx8Yi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8bC5fZGVmYXVsdCYmbC5fZGVmYXVsdC5hcHBseShtLnBvcCgpLGMpIT09ITF8fCFfLmFjY2VwdERhdGEoZCl8fGomJl8uaXNGdW5jdGlvbihkW25dKSYmIV8uaXNXaW5kb3coZCkmJihoPWRbal0saCYmKGRbal09bnVsbCksXy5ldmVudC50cmlnZ2VyZWQ9bixkW25dKCksXy5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLGgmJihkW2pdPWgpKSxiLnJlc3VsdH19LGRpc3BhdGNoOmZ1bmN0aW9uKGEpe2E9Xy5ldmVudC5maXgoYSk7dmFyIGIsYyxkLGUsZixnPVtdLGg9Ui5jYWxsKGFyZ3VtZW50cyksaT0ocmIuZ2V0KHRoaXMsXCJldmVudHNcIil8fHt9KVthLnR5cGVdfHxbXSxqPV8uZXZlbnQuc3BlY2lhbFthLnR5cGVdfHx7fTtpZihoWzBdPWEsYS5kZWxlZ2F0ZVRhcmdldD10aGlzLCFqLnByZURpc3BhdGNofHxqLnByZURpc3BhdGNoLmNhbGwodGhpcyxhKSE9PSExKXtmb3IoZz1fLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxhLGkpLGI9MDsoZT1nW2IrK10pJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpOylmb3IoYS5jdXJyZW50VGFyZ2V0PWUuZWxlbSxjPTA7KGY9ZS5oYW5kbGVyc1tjKytdKSYmIWEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTspKCFhLm5hbWVzcGFjZV9yZXx8YS5uYW1lc3BhY2VfcmUudGVzdChmLm5hbWVzcGFjZSkpJiYoYS5oYW5kbGVPYmo9ZixhLmRhdGE9Zi5kYXRhLGQ9KChfLmV2ZW50LnNwZWNpYWxbZi5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGYuaGFuZGxlcikuYXBwbHkoZS5lbGVtLGgpLHZvaWQgMCE9PWQmJihhLnJlc3VsdD1kKT09PSExJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCkpKTtyZXR1cm4gai5wb3N0RGlzcGF0Y2gmJmoucG9zdERpc3BhdGNoLmNhbGwodGhpcyxhKSxhLnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZz1bXSxoPWIuZGVsZWdhdGVDb3VudCxpPWEudGFyZ2V0O2lmKGgmJmkubm9kZVR5cGUmJighYS5idXR0b258fFwiY2xpY2tcIiE9PWEudHlwZSkpZm9yKDtpIT09dGhpcztpPWkucGFyZW50Tm9kZXx8dGhpcylpZihpLmRpc2FibGVkIT09ITB8fFwiY2xpY2tcIiE9PWEudHlwZSl7Zm9yKGQ9W10sYz0wO2g+YztjKyspZj1iW2NdLGU9Zi5zZWxlY3RvcitcIiBcIix2b2lkIDA9PT1kW2VdJiYoZFtlXT1mLm5lZWRzQ29udGV4dD9fKGUsdGhpcykuaW5kZXgoaSk+PTA6Xy5maW5kKGUsdGhpcyxudWxsLFtpXSkubGVuZ3RoKSxkW2VdJiZkLnB1c2goZik7ZC5sZW5ndGgmJmcucHVzaCh7ZWxlbTppLGhhbmRsZXJzOmR9KX1yZXR1cm4gaDxiLmxlbmd0aCYmZy5wdXNoKHtlbGVtOnRoaXMsaGFuZGxlcnM6Yi5zbGljZShoKX0pLGd9LHByb3BzOlwiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoXCIuc3BsaXQoXCIgXCIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczpcImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGVcIi5zcGxpdChcIiBcIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PWEud2hpY2gmJihhLndoaWNoPW51bGwhPWIuY2hhckNvZGU/Yi5jaGFyQ29kZTpiLmtleUNvZGUpLGF9fSxtb3VzZUhvb2tzOntwcm9wczpcImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudFwiLnNwbGl0KFwiIFwiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZj1iLmJ1dHRvbjtyZXR1cm4gbnVsbD09YS5wYWdlWCYmbnVsbCE9Yi5jbGllbnRYJiYoYz1hLnRhcmdldC5vd25lckRvY3VtZW50fHxaLGQ9Yy5kb2N1bWVudEVsZW1lbnQsZT1jLmJvZHksYS5wYWdlWD1iLmNsaWVudFgrKGQmJmQuc2Nyb2xsTGVmdHx8ZSYmZS5zY3JvbGxMZWZ0fHwwKS0oZCYmZC5jbGllbnRMZWZ0fHxlJiZlLmNsaWVudExlZnR8fDApLGEucGFnZVk9Yi5jbGllbnRZKyhkJiZkLnNjcm9sbFRvcHx8ZSYmZS5zY3JvbGxUb3B8fDApLShkJiZkLmNsaWVudFRvcHx8ZSYmZS5jbGllbnRUb3B8fDApKSxhLndoaWNofHx2b2lkIDA9PT1mfHwoYS53aGljaD0xJmY/MToyJmY/Mzo0JmY/MjowKSxhfX0sZml4OmZ1bmN0aW9uKGEpe2lmKGFbXy5leHBhbmRvXSlyZXR1cm4gYTt2YXIgYixjLGQsZT1hLnR5cGUsZj1hLGc9dGhpcy5maXhIb29rc1tlXTtmb3IoZ3x8KHRoaXMuZml4SG9va3NbZV09Zz1CYi50ZXN0KGUpP3RoaXMubW91c2VIb29rczpBYi50ZXN0KGUpP3RoaXMua2V5SG9va3M6e30pLGQ9Zy5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChnLnByb3BzKTp0aGlzLnByb3BzLGE9bmV3IF8uRXZlbnQoZiksYj1kLmxlbmd0aDtiLS07KWM9ZFtiXSxhW2NdPWZbY107cmV0dXJuIGEudGFyZ2V0fHwoYS50YXJnZXQ9WiksMz09PWEudGFyZ2V0Lm5vZGVUeXBlJiYoYS50YXJnZXQ9YS50YXJnZXQucGFyZW50Tm9kZSksZy5maWx0ZXI/Zy5maWx0ZXIoYSxmKTphfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyE9PWwoKSYmdGhpcy5mb2N1cz8odGhpcy5mb2N1cygpLCExKTp2b2lkIDB9LGRlbGVnYXRlVHlwZTpcImZvY3VzaW5cIn0sYmx1cjp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzPT09bCgpJiZ0aGlzLmJsdXI/KHRoaXMuYmx1cigpLCExKTp2b2lkIDB9LGRlbGVnYXRlVHlwZTpcImZvY3Vzb3V0XCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuXCJjaGVja2JveFwiPT09dGhpcy50eXBlJiZ0aGlzLmNsaWNrJiZfLm5vZGVOYW1lKHRoaXMsXCJpbnB1dFwiKT8odGhpcy5jbGljaygpLCExKTp2b2lkIDB9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe3JldHVybiBfLm5vZGVOYW1lKGEudGFyZ2V0LFwiYVwiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEucmVzdWx0JiZhLm9yaWdpbmFsRXZlbnQmJihhLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9YS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPV8uZXh0ZW5kKG5ldyBfLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7ZD9fLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOl8uZXZlbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMucHJldmVudERlZmF1bHQoKX19LF8ucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9LF8uRXZlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF8uRXZlbnQ/KGEmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fHZvaWQgMD09PWEuZGVmYXVsdFByZXZlbnRlZCYmYS5yZXR1cm5WYWx1ZT09PSExP2o6ayk6dGhpcy50eXBlPWEsYiYmXy5leHRlbmQodGhpcyxiKSx0aGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8Xy5ub3coKSx2b2lkKHRoaXNbXy5leHBhbmRvXT0hMCkpOm5ldyBfLkV2ZW50KGEsYil9LF8uRXZlbnQucHJvdG90eXBlPXtpc0RlZmF1bHRQcmV2ZW50ZWQ6ayxpc1Byb3BhZ2F0aW9uU3RvcHBlZDprLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmsscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9aixhJiZhLnByZXZlbnREZWZhdWx0JiZhLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWosYSYmYS5zdG9wUHJvcGFnYXRpb24mJmEuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPWosYSYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LF8uZWFjaCh7bW91c2VlbnRlcjpcIm1vdXNlb3ZlclwiLG1vdXNlbGVhdmU6XCJtb3VzZW91dFwiLHBvaW50ZXJlbnRlcjpcInBvaW50ZXJvdmVyXCIscG9pbnRlcmxlYXZlOlwicG9pbnRlcm91dFwifSxmdW5jdGlvbihhLGIpe18uZXZlbnQuc3BlY2lhbFthXT17ZGVsZWdhdGVUeXBlOmIsYmluZFR5cGU6YixoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGMsZD10aGlzLGU9YS5yZWxhdGVkVGFyZ2V0LGY9YS5oYW5kbGVPYmo7cmV0dXJuKCFlfHxlIT09ZCYmIV8uY29udGFpbnMoZCxlKSkmJihhLnR5cGU9Zi5vcmlnVHlwZSxjPWYuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYS50eXBlPWIpLGN9fX0pLFkuZm9jdXNpbkJ1YmJsZXN8fF8uZWFjaCh7Zm9jdXM6XCJmb2N1c2luXCIsYmx1cjpcImZvY3Vzb3V0XCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rpb24oYSl7Xy5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0LF8uZXZlbnQuZml4KGEpLCEwKX07Xy5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPXJiLmFjY2VzcyhkLGIpO2V8fGQuYWRkRXZlbnRMaXN0ZW5lcihhLGMsITApLHJiLmFjY2VzcyhkLGIsKGV8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPXJiLmFjY2VzcyhkLGIpLTE7ZT9yYi5hY2Nlc3MoZCxiLGUpOihkLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxjLCEwKSxyYi5yZW1vdmUoZCxiKSl9fX0pLF8uZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7aWYoXCJvYmplY3RcIj09dHlwZW9mIGEpe1wic3RyaW5nXCIhPXR5cGVvZiBiJiYoYz1jfHxiLGI9dm9pZCAwKTtmb3IoZyBpbiBhKXRoaXMub24oZyxiLGMsYVtnXSxlKTtyZXR1cm4gdGhpc31pZihudWxsPT1jJiZudWxsPT1kPyhkPWIsYz1iPXZvaWQgMCk6bnVsbD09ZCYmKFwic3RyaW5nXCI9PXR5cGVvZiBiPyhkPWMsYz12b2lkIDApOihkPWMsYz1iLGI9dm9pZCAwKSksZD09PSExKWQ9aztlbHNlIGlmKCFkKXJldHVybiB0aGlzO3JldHVybiAxPT09ZSYmKGY9ZCxkPWZ1bmN0aW9uKGEpe3JldHVybiBfKCkub2ZmKGEpLGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLmd1aWQ9Zi5ndWlkfHwoZi5ndWlkPV8uZ3VpZCsrKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Xy5ldmVudC5hZGQodGhpcyxhLGQsYyxiKX0pfSxvbmU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYSxiLGMsZCwxKX0sb2ZmOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlO2lmKGEmJmEucHJldmVudERlZmF1bHQmJmEuaGFuZGxlT2JqKXJldHVybiBkPWEuaGFuZGxlT2JqLF8oYS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGQubmFtZXNwYWNlP2Qub3JpZ1R5cGUrXCIuXCIrZC5uYW1lc3BhY2U6ZC5vcmlnVHlwZSxkLnNlbGVjdG9yLGQuaGFuZGxlciksdGhpcztpZihcIm9iamVjdFwiPT10eXBlb2YgYSl7Zm9yKGUgaW4gYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuKGI9PT0hMXx8XCJmdW5jdGlvblwiPT10eXBlb2YgYikmJihjPWIsYj12b2lkIDApLGM9PT0hMSYmKGM9ayksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Xy5ldmVudC5yZW1vdmUodGhpcyxhLGMsYil9KX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtfLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpc1swXTtyZXR1cm4gYz9fLmV2ZW50LnRyaWdnZXIoYSxiLGMsITApOnZvaWQgMH19KTt2YXIgRWI9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1xcdzpdKylbXj5dKilcXC8+L2dpLEZiPS88KFtcXHc6XSspLyxHYj0vPHwmIz9cXHcrOy8sSGI9LzwoPzpzY3JpcHR8c3R5bGV8bGluaykvaSxJYj0vY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLEpiPS9eJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksS2I9L150cnVlXFwvKC4qKS8sTGI9L15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nLE1iPXtvcHRpb246WzEsXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsXCI8L3NlbGVjdD5cIl0sdGhlYWQ6WzEsXCI8dGFibGU+XCIsXCI8L3RhYmxlPlwiXSxjb2w6WzIsXCI8dGFibGU+PGNvbGdyb3VwPlwiLFwiPC9jb2xncm91cD48L3RhYmxlPlwiXSx0cjpbMixcIjx0YWJsZT48dGJvZHk+XCIsXCI8L3Rib2R5PjwvdGFibGU+XCJdLHRkOlszLFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIl0sX2RlZmF1bHQ6WzAsXCJcIixcIlwiXX07TWIub3B0Z3JvdXA9TWIub3B0aW9uLE1iLnRib2R5PU1iLnRmb290PU1iLmNvbGdyb3VwPU1iLmNhcHRpb249TWIudGhlYWQsTWIudGg9TWIudGQsXy5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuY2xvbmVOb2RlKCEwKSxpPV8uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpO2lmKCEoWS5ub0Nsb25lQ2hlY2tlZHx8MSE9PWEubm9kZVR5cGUmJjExIT09YS5ub2RlVHlwZXx8Xy5pc1hNTERvYyhhKSkpZm9yKGc9cihoKSxmPXIoYSksZD0wLGU9Zi5sZW5ndGg7ZT5kO2QrKylzKGZbZF0sZ1tkXSk7aWYoYilpZihjKWZvcihmPWZ8fHIoYSksZz1nfHxyKGgpLGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKyspcShmW2RdLGdbZF0pO2Vsc2UgcShhLGgpO3JldHVybiBnPXIoaCxcInNjcmlwdFwiKSxnLmxlbmd0aD4wJiZwKGcsIWkmJnIoYSxcInNjcmlwdFwiKSksaH0sYnVpbGRGcmFnbWVudDpmdW5jdGlvbihhLGIsYyxkKXtmb3IodmFyIGUsZixnLGgsaSxqLGs9Yi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbD1bXSxtPTAsbj1hLmxlbmd0aDtuPm07bSsrKWlmKGU9YVttXSxlfHwwPT09ZSlpZihcIm9iamVjdFwiPT09Xy50eXBlKGUpKV8ubWVyZ2UobCxlLm5vZGVUeXBlP1tlXTplKTtlbHNlIGlmKEdiLnRlc3QoZSkpe2ZvcihmPWZ8fGsuYXBwZW5kQ2hpbGQoYi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSxnPShGYi5leGVjKGUpfHxbXCJcIixcIlwiXSlbMV0udG9Mb3dlckNhc2UoKSxoPU1iW2ddfHxNYi5fZGVmYXVsdCxmLmlubmVySFRNTD1oWzFdK2UucmVwbGFjZShFYixcIjwkMT48LyQyPlwiKStoWzJdLGo9aFswXTtqLS07KWY9Zi5sYXN0Q2hpbGQ7Xy5tZXJnZShsLGYuY2hpbGROb2RlcyksZj1rLmZpcnN0Q2hpbGQsZi50ZXh0Q29udGVudD1cIlwifWVsc2UgbC5wdXNoKGIuY3JlYXRlVGV4dE5vZGUoZSkpO2ZvcihrLnRleHRDb250ZW50PVwiXCIsbT0wO2U9bFttKytdOylpZigoIWR8fC0xPT09Xy5pbkFycmF5KGUsZCkpJiYoaT1fLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKSxmPXIoay5hcHBlbmRDaGlsZChlKSxcInNjcmlwdFwiKSxpJiZwKGYpLGMpKWZvcihqPTA7ZT1mW2orK107KUpiLnRlc3QoZS50eXBlfHxcIlwiKSYmYy5wdXNoKGUpO3JldHVybiBrfSxjbGVhbkRhdGE6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZCxlLGY9Xy5ldmVudC5zcGVjaWFsLGc9MDt2b2lkIDAhPT0oYz1hW2ddKTtnKyspe2lmKF8uYWNjZXB0RGF0YShjKSYmKGU9Y1tyYi5leHBhbmRvXSxlJiYoYj1yYi5jYWNoZVtlXSkpKXtpZihiLmV2ZW50cylmb3IoZCBpbiBiLmV2ZW50cylmW2RdP18uZXZlbnQucmVtb3ZlKGMsZCk6Xy5yZW1vdmVFdmVudChjLGQsYi5oYW5kbGUpO3JiLmNhY2hlW2VdJiZkZWxldGUgcmIuY2FjaGVbZV19ZGVsZXRlIHNiLmNhY2hlW2Nbc2IuZXhwYW5kb11dfX19KSxfLmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihhKXtyZXR1cm4gcWIodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT9fLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpJiYodGhpcy50ZXh0Q29udGVudD1hKX0pfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9bSh0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPW0odGhpcyxhKTtiLmluc2VydEJlZm9yZShhLGIuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pfSxyZW1vdmU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD1hP18uZmlsdGVyKGEsdGhpcyk6dGhpcyxlPTA7bnVsbCE9KGM9ZFtlXSk7ZSsrKWJ8fDEhPT1jLm5vZGVUeXBlfHxfLmNsZWFuRGF0YShyKGMpKSxjLnBhcmVudE5vZGUmJihiJiZfLmNvbnRhaW5zKGMub3duZXJEb2N1bWVudCxjKSYmcChyKGMsXCJzY3JpcHRcIikpLGMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKSk7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBhLGI9MDtudWxsIT0oYT10aGlzW2JdKTtiKyspMT09PWEubm9kZVR5cGUmJihfLmNsZWFuRGF0YShyKGEsITEpKSxhLnRleHRDb250ZW50PVwiXCIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhLGIpe3JldHVybiBhPW51bGw9PWE/ITE6YSxiPW51bGw9PWI/YTpiLHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIF8uY2xvbmUodGhpcyxhLGIpfSl9LGh0bWw6ZnVuY3Rpb24oYSl7cmV0dXJuIHFiKHRoaXMsZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXXx8e30sYz0wLGQ9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09YSYmMT09PWIubm9kZVR5cGUpcmV0dXJuIGIuaW5uZXJIVE1MO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhJiYhSGIudGVzdChhKSYmIU1iWyhGYi5leGVjKGEpfHxbXCJcIixcIlwiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2E9YS5yZXBsYWNlKEViLFwiPCQxPjwvJDI+XCIpO3RyeXtmb3IoO2Q+YztjKyspYj10aGlzW2NdfHx7fSwxPT09Yi5ub2RlVHlwZSYmKF8uY2xlYW5EYXRhKHIoYiwhMSkpLGIuaW5uZXJIVE1MPWEpO2I9MH1jYXRjaChlKXt9fWImJnRoaXMuZW1wdHkoKS5hcHBlbmQoYSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHNbMF07cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGIpe2E9dGhpcy5wYXJlbnROb2RlLF8uY2xlYW5EYXRhKHIodGhpcykpLGEmJmEucmVwbGFjZUNoaWxkKGIsdGhpcyl9KSxhJiYoYS5sZW5ndGh8fGEubm9kZVR5cGUpP3RoaXM6dGhpcy5yZW1vdmUoKX0sZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxiKXthPVMuYXBwbHkoW10sYSk7dmFyIGMsZCxlLGYsZyxoLGk9MCxqPXRoaXMubGVuZ3RoLGs9dGhpcyxsPWotMSxtPWFbMF0scD1fLmlzRnVuY3Rpb24obSk7aWYocHx8aj4xJiZcInN0cmluZ1wiPT10eXBlb2YgbSYmIVkuY2hlY2tDbG9uZSYmSWIudGVzdChtKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe3ZhciBkPWsuZXEoYyk7cCYmKGFbMF09bS5jYWxsKHRoaXMsYyxkLmh0bWwoKSkpLGQuZG9tTWFuaXAoYSxiKX0pO2lmKGomJihjPV8uYnVpbGRGcmFnbWVudChhLHRoaXNbMF0ub3duZXJEb2N1bWVudCwhMSx0aGlzKSxkPWMuZmlyc3RDaGlsZCwxPT09Yy5jaGlsZE5vZGVzLmxlbmd0aCYmKGM9ZCksZCkpe2ZvcihlPV8ubWFwKHIoYyxcInNjcmlwdFwiKSxuKSxmPWUubGVuZ3RoO2o+aTtpKyspZz1jLGkhPT1sJiYoZz1fLmNsb25lKGcsITAsITApLGYmJl8ubWVyZ2UoZSxyKGcsXCJzY3JpcHRcIikpKSxiLmNhbGwodGhpc1tpXSxnLGkpO2lmKGYpZm9yKGg9ZVtlLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LF8ubWFwKGUsbyksaT0wO2Y+aTtpKyspZz1lW2ldLEpiLnRlc3QoZy50eXBlfHxcIlwiKSYmIXJiLmFjY2VzcyhnLFwiZ2xvYmFsRXZhbFwiKSYmXy5jb250YWlucyhoLGcpJiYoZy5zcmM/Xy5fZXZhbFVybCYmXy5fZXZhbFVybChnLnNyYyk6Xy5nbG9iYWxFdmFsKGcudGV4dENvbnRlbnQucmVwbGFjZShMYixcIlwiKSkpfXJldHVybiB0aGlzfX0pLF8uZWFjaCh7YXBwZW5kVG86XCJhcHBlbmRcIixwcmVwZW5kVG86XCJwcmVwZW5kXCIsaW5zZXJ0QmVmb3JlOlwiYmVmb3JlXCIsaW5zZXJ0QWZ0ZXI6XCJhZnRlclwiLHJlcGxhY2VBbGw6XCJyZXBsYWNlV2l0aFwifSxmdW5jdGlvbihhLGIpe18uZm5bYV09ZnVuY3Rpb24oYSl7Zm9yKHZhciBjLGQ9W10sZT1fKGEpLGY9ZS5sZW5ndGgtMSxnPTA7Zj49ZztnKyspYz1nPT09Zj90aGlzOnRoaXMuY2xvbmUoITApLF8oZVtnXSlbYl0oYyksVC5hcHBseShkLGMuZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhkKX19KTt2YXIgTmIsT2I9e30sUGI9L15tYXJnaW4vLFFiPW5ldyBSZWdFeHAoXCJeKFwiK3ZiK1wiKSg/IXB4KVthLXolXSskXCIsXCJpXCIpLFJiPWZ1bmN0aW9uKGEpe3JldHVybiBhLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpfTshZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7Zy5zdHlsZS5jc3NUZXh0PVwiLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxJTt0b3A6MSU7Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo0cHg7cG9zaXRpb246YWJzb2x1dGVcIixnLmlubmVySFRNTD1cIlwiLGUuYXBwZW5kQ2hpbGQoZik7dmFyIGI9YS5nZXRDb21wdXRlZFN0eWxlKGcsbnVsbCk7Yz1cIjElXCIhPT1iLnRvcCxkPVwiNHB4XCI9PT1iLndpZHRoLGUucmVtb3ZlQ2hpbGQoZil9dmFyIGMsZCxlPVouZG9jdW1lbnRFbGVtZW50LGY9Wi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGc9Wi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2cuc3R5bGUmJihnLnN0eWxlLmJhY2tncm91bmRDbGlwPVwiY29udGVudC1ib3hcIixnLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9XCJcIixZLmNsZWFyQ2xvbmVTdHlsZT1cImNvbnRlbnQtYm94XCI9PT1nLnN0eWxlLmJhY2tncm91bmRDbGlwLGYuc3R5bGUuY3NzVGV4dD1cImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4O3Bvc2l0aW9uOmFic29sdXRlXCIsZi5hcHBlbmRDaGlsZChnKSxhLmdldENvbXB1dGVkU3R5bGUmJl8uZXh0ZW5kKFkse3BpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gYigpLGN9LGJveFNpemluZ1JlbGlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWQmJmIoKSxkfSxyZWxpYWJsZU1hcmdpblJpZ2h0OmZ1bmN0aW9uKCl7dmFyIGIsYz1nLmFwcGVuZENoaWxkKFouY3JlYXRlRWxlbWVudChcImRpdlwiKSk7cmV0dXJuIGMuc3R5bGUuY3NzVGV4dD1nLnN0eWxlLmNzc1RleHQ9XCItd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjBcIixjLnN0eWxlLm1hcmdpblJpZ2h0PWMuc3R5bGUud2lkdGg9XCIwXCIsZy5zdHlsZS53aWR0aD1cIjFweFwiLGUuYXBwZW5kQ2hpbGQoZiksYj0hcGFyc2VGbG9hdChhLmdldENvbXB1dGVkU3R5bGUoYyxudWxsKS5tYXJnaW5SaWdodCksZS5yZW1vdmVDaGlsZChmKSxifX0pKX0oKSxfLnN3YXA9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnPXt9O2ZvcihmIGluIGIpZ1tmXT1hLnN0eWxlW2ZdLGEuc3R5bGVbZl09YltmXTtlPWMuYXBwbHkoYSxkfHxbXSk7Zm9yKGYgaW4gYilhLnN0eWxlW2ZdPWdbZl07cmV0dXJuIGV9O3ZhciBTYj0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sVGI9bmV3IFJlZ0V4cChcIl4oXCIrdmIrXCIpKC4qKSRcIixcImlcIiksVWI9bmV3IFJlZ0V4cChcIl4oWystXSk9KFwiK3ZiK1wiKVwiLFwiaVwiKSxWYj17cG9zaXRpb246XCJhYnNvbHV0ZVwiLHZpc2liaWxpdHk6XCJoaWRkZW5cIixkaXNwbGF5OlwiYmxvY2tcIn0sV2I9e2xldHRlclNwYWNpbmc6XCIwXCIsZm9udFdlaWdodDpcIjQwMFwifSxYYj1bXCJXZWJraXRcIixcIk9cIixcIk1velwiLFwibXNcIl07Xy5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz12KGEsXCJvcGFjaXR5XCIpO3JldHVyblwiXCI9PT1jP1wiMVwiOmN9fX19LGNzc051bWJlcjp7Y29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e1wiZmxvYXRcIjpcImNzc0Zsb2F0XCJ9LHN0eWxlOmZ1bmN0aW9uKGEsYixjLGQpe2lmKGEmJjMhPT1hLm5vZGVUeXBlJiY4IT09YS5ub2RlVHlwZSYmYS5zdHlsZSl7dmFyIGUsZixnLGg9Xy5jYW1lbENhc2UoYiksaT1hLnN0eWxlO3JldHVybiBiPV8uY3NzUHJvcHNbaF18fChfLmNzc1Byb3BzW2hdPXgoaSxoKSksZz1fLmNzc0hvb2tzW2JdfHxfLmNzc0hvb2tzW2hdLHZvaWQgMD09PWM/ZyYmXCJnZXRcImluIGcmJnZvaWQgMCE9PShlPWcuZ2V0KGEsITEsZCkpP2U6aVtiXTooZj10eXBlb2YgYyxcInN0cmluZ1wiPT09ZiYmKGU9VWIuZXhlYyhjKSkmJihjPShlWzFdKzEpKmVbMl0rcGFyc2VGbG9hdChfLmNzcyhhLGIpKSxmPVwibnVtYmVyXCIpLG51bGwhPWMmJmM9PT1jJiYoXCJudW1iZXJcIiE9PWZ8fF8uY3NzTnVtYmVyW2hdfHwoYys9XCJweFwiKSxZLmNsZWFyQ2xvbmVTdHlsZXx8XCJcIiE9PWN8fDAhPT1iLmluZGV4T2YoXCJiYWNrZ3JvdW5kXCIpfHwoaVtiXT1cImluaGVyaXRcIiksZyYmXCJzZXRcImluIGcmJnZvaWQgMD09PShjPWcuc2V0KGEsYyxkKSl8fChpW2JdPWMpKSx2b2lkIDApfX0sY3NzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoPV8uY2FtZWxDYXNlKGIpO3JldHVybiBiPV8uY3NzUHJvcHNbaF18fChfLmNzc1Byb3BzW2hdPXgoYS5zdHlsZSxoKSksZz1fLmNzc0hvb2tzW2JdfHxfLmNzc0hvb2tzW2hdLGcmJlwiZ2V0XCJpbiBnJiYoZT1nLmdldChhLCEwLGMpKSx2b2lkIDA9PT1lJiYoZT12KGEsYixkKSksXCJub3JtYWxcIj09PWUmJmIgaW4gV2ImJihlPVdiW2JdKSxcIlwiPT09Y3x8Yz8oZj1wYXJzZUZsb2F0KGUpLGM9PT0hMHx8Xy5pc051bWVyaWMoZik/Znx8MDplKTplfX0pLF8uZWFjaChbXCJoZWlnaHRcIixcIndpZHRoXCJdLGZ1bmN0aW9uKGEsYil7Xy5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gYz9TYi50ZXN0KF8uY3NzKGEsXCJkaXNwbGF5XCIpKSYmMD09PWEub2Zmc2V0V2lkdGg/Xy5zd2FwKGEsVmIsZnVuY3Rpb24oKXtyZXR1cm4gQShhLGIsZCl9KTpBKGEsYixkKTp2b2lkIDB9LHNldDpmdW5jdGlvbihhLGMsZCl7dmFyIGU9ZCYmUmIoYSk7cmV0dXJuIHkoYSxjLGQ/eihhLGIsZCxcImJvcmRlci1ib3hcIj09PV8uY3NzKGEsXCJib3hTaXppbmdcIiwhMSxlKSxlKTowKX19fSksXy5jc3NIb29rcy5tYXJnaW5SaWdodD13KFkucmVsaWFibGVNYXJnaW5SaWdodCxmdW5jdGlvbihhLGIpe3JldHVybiBiP18uc3dhcChhLHtkaXNwbGF5OlwiaW5saW5lLWJsb2NrXCJ9LHYsW2EsXCJtYXJnaW5SaWdodFwiXSk6dm9pZCAwfSksXy5lYWNoKHttYXJnaW46XCJcIixwYWRkaW5nOlwiXCIsYm9yZGVyOlwiV2lkdGhcIn0sZnVuY3Rpb24oYSxiKXtfLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPXt9LGY9XCJzdHJpbmdcIj09dHlwZW9mIGM/Yy5zcGxpdChcIiBcIik6W2NdOzQ+ZDtkKyspZVthK3diW2RdK2JdPWZbZF18fGZbZC0yXXx8ZlswXTtyZXR1cm4gZX19LFBiLnRlc3QoYSl8fChfLmNzc0hvb2tzW2ErYl0uc2V0PXkpfSksXy5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihhLGIpe3JldHVybiBxYih0aGlzLGZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9e30sZz0wO2lmKF8uaXNBcnJheShiKSl7Zm9yKGQ9UmIoYSksZT1iLmxlbmd0aDtlPmc7ZysrKWZbYltnXV09Xy5jc3MoYSxiW2ddLCExLGQpO3JldHVybiBmfXJldHVybiB2b2lkIDAhPT1jP18uc3R5bGUoYSxiLGMpOl8uY3NzKGEsYil9LGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIEIodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gQih0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgYT9hP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe3hiKHRoaXMpP18odGhpcykuc2hvdygpOl8odGhpcykuaGlkZSgpfSl9fSksXy5Ud2Vlbj1DLEMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDLGluaXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fFwic3dpbmdcIix0aGlzLm9wdGlvbnM9Yix0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9ZCx0aGlzLnVuaXQ9Znx8KF8uY3NzTnVtYmVyW2NdP1wiXCI6XCJweFwiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGE9Qy5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gYSYmYS5nZXQ/YS5nZXQodGhpcyk6Qy5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oYSl7dmFyIGIsYz1DLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLnBvcz1iPXRoaXMub3B0aW9ucy5kdXJhdGlvbj9fLmVhc2luZ1t0aGlzLmVhc2luZ10oYSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qYSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTphLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOkMucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sQy5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGU9Qy5wcm90b3R5cGUsQy5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIG51bGw9PWEuZWxlbVthLnByb3BdfHxhLmVsZW0uc3R5bGUmJm51bGwhPWEuZWxlbS5zdHlsZVthLnByb3BdPyhiPV8uY3NzKGEuZWxlbSxhLnByb3AsXCJcIiksYiYmXCJhdXRvXCIhPT1iP2I6MCk6YS5lbGVtW2EucHJvcF19LHNldDpmdW5jdGlvbihhKXtfLmZ4LnN0ZXBbYS5wcm9wXT9fLmZ4LnN0ZXBbYS5wcm9wXShhKTphLmVsZW0uc3R5bGUmJihudWxsIT1hLmVsZW0uc3R5bGVbXy5jc3NQcm9wc1thLnByb3BdXXx8Xy5jc3NIb29rc1thLnByb3BdKT9fLnN0eWxlKGEuZWxlbSxhLnByb3AsYS5ub3crYS51bml0KTphLmVsZW1bYS5wcm9wXT1hLm5vd319fSxDLnByb3BIb29rcy5zY3JvbGxUb3A9Qy5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGEpe2EuZWxlbS5ub2RlVHlwZSYmYS5lbGVtLnBhcmVudE5vZGUmJihhLmVsZW1bYS5wcm9wXT1hLm5vdyl9fSxfLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxzd2luZzpmdW5jdGlvbihhKXtyZXR1cm4uNS1NYXRoLmNvcyhhKk1hdGguUEkpLzJ9fSxfLmZ4PUMucHJvdG90eXBlLmluaXQsXy5meC5zdGVwPXt9O3ZhciBZYixaYiwkYj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sX2I9bmV3IFJlZ0V4cChcIl4oPzooWystXSk9fCkoXCIrdmIrXCIpKFthLXolXSopJFwiLFwiaVwiKSxhYz0vcXVldWVIb29rcyQvLGJjPVtHXSxjYz17XCIqXCI6W2Z1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jcmVhdGVUd2VlbihhLGIpLGQ9Yy5jdXIoKSxlPV9iLmV4ZWMoYiksZj1lJiZlWzNdfHwoXy5jc3NOdW1iZXJbYV0/XCJcIjpcInB4XCIpLGc9KF8uY3NzTnVtYmVyW2FdfHxcInB4XCIhPT1mJiYrZCkmJl9iLmV4ZWMoXy5jc3MoYy5lbGVtLGEpKSxoPTEsaT0yMDtpZihnJiZnWzNdIT09Zil7Zj1mfHxnWzNdLGU9ZXx8W10sZz0rZHx8MTtkbyBoPWh8fFwiLjVcIixnLz1oLF8uc3R5bGUoYy5lbGVtLGEsZytmKTt3aGlsZShoIT09KGg9Yy5jdXIoKS9kKSYmMSE9PWgmJi0taSl9cmV0dXJuIGUmJihnPWMuc3RhcnQ9K2d8fCtkfHwwLGMudW5pdD1mLGMuZW5kPWVbMV0/ZysoZVsxXSsxKSplWzJdOitlWzJdKSxjfV19O18uQW5pbWF0aW9uPV8uZXh0ZW5kKEkse3R3ZWVuZXI6ZnVuY3Rpb24oYSxiKXtfLmlzRnVuY3Rpb24oYSk/KGI9YSxhPVtcIipcIl0pOmE9YS5zcGxpdChcIiBcIik7Zm9yKHZhciBjLGQ9MCxlPWEubGVuZ3RoO2U+ZDtkKyspYz1hW2RdLGNjW2NdPWNjW2NdfHxbXSxjY1tjXS51bnNoaWZ0KGIpfSxwcmVmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtiP2JjLnVuc2hpZnQoYSk6YmMucHVzaChhKX19KSxfLnNwZWVkPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hJiZcIm9iamVjdFwiPT10eXBlb2YgYT9fLmV4dGVuZCh7fSxhKTp7Y29tcGxldGU6Y3x8IWMmJmJ8fF8uaXNGdW5jdGlvbihhKSYmYSxkdXJhdGlvbjphLGVhc2luZzpjJiZifHxiJiYhXy5pc0Z1bmN0aW9uKGIpJiZifTtyZXR1cm4gZC5kdXJhdGlvbj1fLmZ4Lm9mZj8wOlwibnVtYmVyXCI9PXR5cGVvZiBkLmR1cmF0aW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBfLmZ4LnNwZWVkcz9fLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTpfLmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ZC5xdWV1ZXx8ZC5xdWV1ZT09PSEwKSYmKGQucXVldWU9XCJmeFwiKSxkLm9sZD1kLmNvbXBsZXRlLGQuY29tcGxldGU9ZnVuY3Rpb24oKXtfLmlzRnVuY3Rpb24oZC5vbGQpJiZkLm9sZC5jYWxsKHRoaXMpLGQucXVldWUmJl8uZGVxdWV1ZSh0aGlzLGQucXVldWUpfSxkfSxfLmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcih4YikuY3NzKFwib3BhY2l0eVwiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1fLmlzRW1wdHlPYmplY3QoYSksZj1fLnNwZWVkKGIsYyxkKSxnPWZ1bmN0aW9uKCl7dmFyIGI9SSh0aGlzLF8uZXh0ZW5kKHt9LGEpLGYpOyhlfHxyYi5nZXQodGhpcyxcImZpbmlzaFwiKSkmJmIuc3RvcCghMCl9O3JldHVybiBnLmZpbmlzaD1nLGV8fGYucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShmLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1mdW5jdGlvbihhKXt2YXIgYj1hLnN0b3A7ZGVsZXRlIGEuc3RvcCxiKGMpfTtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgYSYmKGM9YixiPWEsYT12b2lkIDApLGImJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHxcImZ4XCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPSEwLGU9bnVsbCE9YSYmYStcInF1ZXVlSG9va3NcIixmPV8udGltZXJzLGc9cmIuZ2V0KHRoaXMpO2lmKGUpZ1tlXSYmZ1tlXS5zdG9wJiZkKGdbZV0pO2Vsc2UgZm9yKGUgaW4gZylnW2VdJiZnW2VdLnN0b3AmJmFjLnRlc3QoZSkmJmQoZ1tlXSk7Zm9yKGU9Zi5sZW5ndGg7ZS0tOylmW2VdLmVsZW0hPT10aGlzfHxudWxsIT1hJiZmW2VdLnF1ZXVlIT09YXx8KGZbZV0uYW5pbS5zdG9wKGMpLGI9ITEsZi5zcGxpY2UoZSwxKSk7KGJ8fCFjKSYmXy5kZXF1ZXVlKHRoaXMsYSl9KX0sZmluaXNoOmZ1bmN0aW9uKGEpe3JldHVybiBhIT09ITEmJihhPWF8fFwiZnhcIiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsYz1yYi5nZXQodGhpcyksZD1jW2ErXCJxdWV1ZVwiXSxlPWNbYStcInF1ZXVlSG9va3NcIl0sZj1fLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsXy5xdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCksYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1hJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5iO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgYy5maW5pc2h9KX19KSxfLmVhY2goW1widG9nZ2xlXCIsXCJzaG93XCIsXCJoaWRlXCJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9Xy5mbltiXTtfLmZuW2JdPWZ1bmN0aW9uKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8XCJib29sZWFuXCI9PXR5cGVvZiBhP2MuYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShFKGIsITApLGEsZCxlKX19KSxfLmVhY2goe3NsaWRlRG93bjpFKFwic2hvd1wiKSxzbGlkZVVwOkUoXCJoaWRlXCIpLHNsaWRlVG9nZ2xlOkUoXCJ0b2dnbGVcIiksZmFkZUluOntvcGFjaXR5Olwic2hvd1wifSxmYWRlT3V0OntvcGFjaXR5OlwiaGlkZVwifSxmYWRlVG9nZ2xlOntvcGFjaXR5OlwidG9nZ2xlXCJ9fSxmdW5jdGlvbihhLGIpe18uZm5bYV09ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLmFuaW1hdGUoYixhLGMsZCl9fSksXy50aW1lcnM9W10sXy5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGEsYj0wLGM9Xy50aW1lcnM7Zm9yKFliPV8ubm93KCk7YjxjLmxlbmd0aDtiKyspYT1jW2JdLGEoKXx8Y1tiXSE9PWF8fGMuc3BsaWNlKGItLSwxKTtjLmxlbmd0aHx8Xy5meC5zdG9wKCksWWI9dm9pZCAwfSxfLmZ4LnRpbWVyPWZ1bmN0aW9uKGEpe18udGltZXJzLnB1c2goYSksYSgpP18uZnguc3RhcnQoKTpfLnRpbWVycy5wb3AoKX0sXy5meC5pbnRlcnZhbD0xMyxfLmZ4LnN0YXJ0PWZ1bmN0aW9uKCl7WmJ8fChaYj1zZXRJbnRlcnZhbChfLmZ4LnRpY2ssXy5meC5pbnRlcnZhbCkpfSxfLmZ4LnN0b3A9ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKFpiKSxaYj1udWxsfSxfLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxfLmZuLmRlbGF5PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9Xy5meD9fLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8XCJmeFwiLHRoaXMucXVldWUoYixmdW5jdGlvbihiLGMpe3ZhciBkPXNldFRpbWVvdXQoYixhKTtjLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZCl9fSl9LGZ1bmN0aW9uKCl7dmFyIGE9Wi5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiksYj1aLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiksYz1iLmFwcGVuZENoaWxkKFouY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKSk7YS50eXBlPVwiY2hlY2tib3hcIixZLmNoZWNrT249XCJcIiE9PWEudmFsdWUsWS5vcHRTZWxlY3RlZD1jLnNlbGVjdGVkLGIuZGlzYWJsZWQ9ITAsWS5vcHREaXNhYmxlZD0hYy5kaXNhYmxlZCxhPVouY3JlYXRlRWxlbWVudChcImlucHV0XCIpLGEudmFsdWU9XCJ0XCIsYS50eXBlPVwicmFkaW9cIixZLnJhZGlvVmFsdWU9XCJ0XCI9PT1hLnZhbHVlfSgpO3ZhciBkYyxlYyxmYz1fLmV4cHIuYXR0ckhhbmRsZTtfLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBxYih0aGlzLF8uYXR0cixhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Xy5yZW1vdmVBdHRyKHRoaXMsYSl9KX19KSxfLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPWEubm9kZVR5cGU7aWYoYSYmMyE9PWYmJjghPT1mJiYyIT09ZilyZXR1cm4gdHlwZW9mIGEuZ2V0QXR0cmlidXRlPT09emI/Xy5wcm9wKGEsYixjKTooMT09PWYmJl8uaXNYTUxEb2MoYSl8fChiPWIudG9Mb3dlckNhc2UoKSxkPV8uYXR0ckhvb2tzW2JdfHwoXy5leHByLm1hdGNoLmJvb2wudGVzdChiKT9lYzpkYykpLHZvaWQgMD09PWM/ZCYmXCJnZXRcImluIGQmJm51bGwhPT0oZT1kLmdldChhLGIpKT9lOihlPV8uZmluZC5hdHRyKGEsYiksbnVsbD09ZT92b2lkIDA6ZSk6bnVsbCE9PWM/ZCYmXCJzZXRcImluIGQmJnZvaWQgMCE9PShlPWQuc2V0KGEsYyxiKSk/ZTooYS5zZXRBdHRyaWJ1dGUoYixjK1wiXCIpLGMpOnZvaWQgXy5yZW1vdmVBdHRyKGEsYikpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPTAsZj1iJiZiLm1hdGNoKG5iKTtpZihmJiYxPT09YS5ub2RlVHlwZSlmb3IoO2M9ZltlKytdOylkPV8ucHJvcEZpeFtjXXx8YyxfLmV4cHIubWF0Y2guYm9vbC50ZXN0KGMpJiYoYVtkXT0hMSksYS5yZW1vdmVBdHRyaWJ1dGUoYyl9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoIVkucmFkaW9WYWx1ZSYmXCJyYWRpb1wiPT09YiYmXy5ub2RlTmFtZShhLFwiaW5wdXRcIikpe3ZhciBjPWEudmFsdWU7cmV0dXJuIGEuc2V0QXR0cmlidXRlKFwidHlwZVwiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX19fSksZWM9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9PT0hMT9fLnJlbW92ZUF0dHIoYSxjKTphLnNldEF0dHJpYnV0ZShjLGMpLGN9fSxfLmVhY2goXy5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9ZmNbYl18fF8uZmluZC5hdHRyO2ZjW2JdPWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxmO3JldHVybiBkfHwoZj1mY1tiXSxmY1tiXT1lLGU9bnVsbCE9YyhhLGIsZCk/Yi50b0xvd2VyQ2FzZSgpOm51bGwsZmNbYl09ZiksZX19KTt2YXIgZ2M9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaTtfLmZuLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBxYih0aGlzLF8ucHJvcCxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbXy5wcm9wRml4W2FdfHxhXX0pfX0pLF8uZXh0ZW5kKHtwcm9wRml4OntcImZvclwiOlwiaHRtbEZvclwiLFwiY2xhc3NcIjpcImNsYXNzTmFtZVwifSxwcm9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZz1hLm5vZGVUeXBlO2lmKGEmJjMhPT1nJiY4IT09ZyYmMiE9PWcpcmV0dXJuIGY9MSE9PWd8fCFfLmlzWE1MRG9jKGEpLGYmJihiPV8ucHJvcEZpeFtiXXx8YixlPV8ucHJvcEhvb2tzW2JdKSx2b2lkIDAhPT1jP2UmJlwic2V0XCJpbiBlJiZ2b2lkIDAhPT0oZD1lLnNldChhLGMsYikpP2Q6YVtiXT1jOmUmJlwiZ2V0XCJpbiBlJiZudWxsIT09KGQ9ZS5nZXQoYSxiKSk/ZDphW2JdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaGFzQXR0cmlidXRlKFwidGFiaW5kZXhcIil8fGdjLnRlc3QoYS5ub2RlTmFtZSl8fGEuaHJlZj9hLnRhYkluZGV4Oi0xfX19fSksWS5vcHRTZWxlY3RlZHx8KF8ucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiZiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9fSksXy5lYWNoKFtcInRhYkluZGV4XCIsXCJyZWFkT25seVwiLFwibWF4TGVuZ3RoXCIsXCJjZWxsU3BhY2luZ1wiLFwiY2VsbFBhZGRpbmdcIixcInJvd1NwYW5cIixcImNvbFNwYW5cIixcInVzZU1hcFwiLFwiZnJhbWVCb3JkZXJcIixcImNvbnRlbnRFZGl0YWJsZVwiXSxmdW5jdGlvbigpe18ucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KTt2YXIgaGM9L1tcXHRcXHJcXG5cXGZdL2c7Xy5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPVwic3RyaW5nXCI9PXR5cGVvZiBhJiZhLGk9MCxqPXRoaXMubGVuZ3RoO2lmKF8uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe18odGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoaClmb3IoYj0oYXx8XCJcIikubWF0Y2gobmIpfHxbXTtqPmk7aSsrKWlmKGM9dGhpc1tpXSxkPTE9PT1jLm5vZGVUeXBlJiYoYy5jbGFzc05hbWU/KFwiIFwiK2MuY2xhc3NOYW1lK1wiIFwiKS5yZXBsYWNlKGhjLFwiIFwiKTpcIiBcIikpe2ZvcihmPTA7ZT1iW2YrK107KWQuaW5kZXhPZihcIiBcIitlK1wiIFwiKTwwJiYoZCs9ZStcIiBcIik7Zz1fLnRyaW0oZCksYy5jbGFzc05hbWUhPT1nJiYoYy5jbGFzc05hbWU9Zyl9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPTA9PT1hcmd1bWVudHMubGVuZ3RofHxcInN0cmluZ1wiPT10eXBlb2YgYSYmYSxpPTAsaj10aGlzLmxlbmd0aDtpZihfLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtfKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGgpZm9yKGI9KGF8fFwiXCIpLm1hdGNoKG5iKXx8W107aj5pO2krKylpZihjPXRoaXNbaV0sZD0xPT09Yy5ub2RlVHlwZSYmKGMuY2xhc3NOYW1lPyhcIiBcIitjLmNsYXNzTmFtZStcIiBcIikucmVwbGFjZShoYyxcIiBcIik6XCJcIikpe2ZvcihmPTA7ZT1iW2YrK107KWZvcig7ZC5pbmRleE9mKFwiIFwiK2UrXCIgXCIpPj0wOylkPWQucmVwbGFjZShcIiBcIitlK1wiIFwiLFwiIFwiKTtnPWE/Xy50cmltKGQpOlwiXCIsYy5jbGFzc05hbWUhPT1nJiYoYy5jbGFzc05hbWU9Zyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBiJiZcInN0cmluZ1wiPT09Yz9iP3RoaXMuYWRkQ2xhc3MoYSk6dGhpcy5yZW1vdmVDbGFzcyhhKTp0aGlzLmVhY2goXy5pc0Z1bmN0aW9uKGEpP2Z1bmN0aW9uKGMpe18odGhpcykudG9nZ2xlQ2xhc3MoYS5jYWxsKHRoaXMsYyx0aGlzLmNsYXNzTmFtZSxiKSxiKX06ZnVuY3Rpb24oKXtpZihcInN0cmluZ1wiPT09Yylmb3IodmFyIGIsZD0wLGU9Xyh0aGlzKSxmPWEubWF0Y2gobmIpfHxbXTtiPWZbZCsrXTspZS5oYXNDbGFzcyhiKT9lLnJlbW92ZUNsYXNzKGIpOmUuYWRkQ2xhc3MoYik7ZWxzZShjPT09emJ8fFwiYm9vbGVhblwiPT09YykmJih0aGlzLmNsYXNzTmFtZSYmcmIuc2V0KHRoaXMsXCJfX2NsYXNzTmFtZV9fXCIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxhPT09ITE/XCJcIjpyYi5nZXQodGhpcyxcIl9fY2xhc3NOYW1lX19cIil8fFwiXCIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1cIiBcIithK1wiIFwiLGM9MCxkPXRoaXMubGVuZ3RoO2Q+YztjKyspaWYoMT09PXRoaXNbY10ubm9kZVR5cGUmJihcIiBcIit0aGlzW2NdLmNsYXNzTmFtZStcIiBcIikucmVwbGFjZShoYyxcIiBcIikuaW5kZXhPZihiKT49MClyZXR1cm4hMDtyZXR1cm4hMX19KTt2YXIgaWM9L1xcci9nO18uZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZD1fLmlzRnVuY3Rpb24oYSksdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe3ZhciBlOzE9PT10aGlzLm5vZGVUeXBlJiYoZT1kP2EuY2FsbCh0aGlzLGMsXyh0aGlzKS52YWwoKSk6YSxudWxsPT1lP2U9XCJcIjpcIm51bWJlclwiPT10eXBlb2YgZT9lKz1cIlwiOl8uaXNBcnJheShlKSYmKGU9Xy5tYXAoZSxmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9cIlwiOmErXCJcIn0pKSxiPV8udmFsSG9va3NbdGhpcy50eXBlXXx8Xy52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJlwic2V0XCJpbiBiJiZ2b2lkIDAhPT1iLnNldCh0aGlzLGUsXCJ2YWx1ZVwiKXx8KHRoaXMudmFsdWU9ZSkpfSk7aWYoZSlyZXR1cm4gYj1fLnZhbEhvb2tzW2UudHlwZV18fF8udmFsSG9va3NbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiZcImdldFwiaW4gYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSxcInZhbHVlXCIpKT9jOihjPWUudmFsdWUsXCJzdHJpbmdcIj09dHlwZW9mIGM/Yy5yZXBsYWNlKGljLFwiXCIpOm51bGw9PWM/XCJcIjpjKX19fSksXy5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1fLmZpbmQuYXR0cihhLFwidmFsdWVcIik7cmV0dXJuIG51bGwhPWI/YjpfLnRyaW0oXy50ZXh0KGEpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQ9YS5vcHRpb25zLGU9YS5zZWxlY3RlZEluZGV4LGY9XCJzZWxlY3Qtb25lXCI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsxOmQubGVuZ3RoLGk9MD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sISghYy5zZWxlY3RlZCYmaSE9PWV8fChZLm9wdERpc2FibGVkP2MuZGlzYWJsZWQ6bnVsbCE9PWMuZ2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIikpfHxjLnBhcmVudE5vZGUuZGlzYWJsZWQmJl8ubm9kZU5hbWUoYy5wYXJlbnROb2RlLFwib3B0Z3JvdXBcIikpKXtpZihiPV8oYykudmFsKCksZilyZXR1cm4gYjtnLnB1c2goYil9cmV0dXJuIGd9LHNldDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkLGU9YS5vcHRpb25zLGY9Xy5tYWtlQXJyYXkoYiksZz1lLmxlbmd0aDtnLS07KWQ9ZVtnXSwoZC5zZWxlY3RlZD1fLmluQXJyYXkoZC52YWx1ZSxmKT49MCkmJihjPSEwKTtyZXR1cm4gY3x8KGEuc2VsZWN0ZWRJbmRleD0tMSksZn19fX0pLF8uZWFjaChbXCJyYWRpb1wiLFwiY2hlY2tib3hcIl0sZnVuY3Rpb24oKXtfLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gXy5pc0FycmF5KGIpP2EuY2hlY2tlZD1fLmluQXJyYXkoXyhhKS52YWwoKSxiKT49MDp2b2lkIDB9fSxZLmNoZWNrT258fChfLnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09PWEuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik/XCJvblwiOmEudmFsdWV9KX0pLF8uZWFjaChcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnVcIi5zcGxpdChcIiBcIiksZnVuY3Rpb24oYSxiKXtfLmZuW2JdPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX19KSxfLmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9LGJpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsXCIqKlwiKTp0aGlzLm9mZihiLGF8fFwiKipcIixjKX19KTt2YXIgamM9Xy5ub3coKSxrYz0vXFw/LztfLnBhcnNlSlNPTj1mdW5jdGlvbihhKXtyZXR1cm4gSlNPTi5wYXJzZShhK1wiXCIpfSxfLnBhcnNlWE1MPWZ1bmN0aW9uKGEpe3ZhciBiLGM7aWYoIWF8fFwic3RyaW5nXCIhPXR5cGVvZiBhKXJldHVybiBudWxsO3RyeXtjPW5ldyBET01QYXJzZXIsYj1jLnBhcnNlRnJvbVN0cmluZyhhLFwidGV4dC94bWxcIil9Y2F0Y2goZCl7Yj12b2lkIDB9cmV0dXJuKCFifHxiLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwicGFyc2VyZXJyb3JcIikubGVuZ3RoKSYmXy5lcnJvcihcIkludmFsaWQgWE1MOiBcIithKSxifTt2YXIgbGMsbWMsbmM9LyMuKiQvLG9jPS8oWz8mXSlfPVteJl0qLyxwYz0vXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL2dtLHFjPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLHJjPS9eKD86R0VUfEhFQUQpJC8sc2M9L15cXC9cXC8vLHRjPS9eKFtcXHcuKy1dKzopKD86XFwvXFwvKD86W15cXC8/I10qQHwpKFteXFwvPyM6XSopKD86OihcXGQrKXwpfCkvLHVjPXt9LHZjPXt9LHdjPVwiKi9cIi5jb25jYXQoXCIqXCIpO3RyeXttYz1sb2NhdGlvbi5ocmVmfWNhdGNoKHhjKXttYz1aLmNyZWF0ZUVsZW1lbnQoXCJhXCIpLG1jLmhyZWY9XCJcIixtYz1tYy5ocmVmfWxjPXRjLmV4ZWMobWMudG9Mb3dlckNhc2UoKSl8fFtdLF8uZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDptYyx0eXBlOlwiR0VUXCIsaXNMb2NhbDpxYy50ZXN0KGxjWzFdKSxnbG9iYWw6ITAscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsY29udGVudFR5cGU6XCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixhY2NlcHRzOntcIipcIjp3Yyx0ZXh0OlwidGV4dC9wbGFpblwiLGh0bWw6XCJ0ZXh0L2h0bWxcIix4bWw6XCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsanNvbjpcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwifSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwvLGpzb246L2pzb24vfSxyZXNwb25zZUZpZWxkczp7eG1sOlwicmVzcG9uc2VYTUxcIix0ZXh0OlwicmVzcG9uc2VUZXh0XCIsanNvbjpcInJlc3BvbnNlSlNPTlwifSxjb252ZXJ0ZXJzOntcIiogdGV4dFwiOlN0cmluZyxcInRleHQgaHRtbFwiOiEwLFwidGV4dCBqc29uXCI6Xy5wYXJzZUpTT04sXCJ0ZXh0IHhtbFwiOl8ucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihhLGIpe3JldHVybiBiP0woTChhLF8uYWpheFNldHRpbmdzKSxiKTpMKF8uYWpheFNldHRpbmdzLGEpfSxhamF4UHJlZmlsdGVyOkoodWMpLGFqYXhUcmFuc3BvcnQ6Sih2YyksYWpheDpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGMsZyl7dmFyIGksayxyLHMsdSx3PWI7MiE9PXQmJih0PTIsaCYmY2xlYXJUaW1lb3V0KGgpLGQ9dm9pZCAwLGY9Z3x8XCJcIix2LnJlYWR5U3RhdGU9YT4wPzQ6MCxpPWE+PTIwMCYmMzAwPmF8fDMwND09PWEsYyYmKHM9TShsLHYsYykpLHM9TihsLHMsdixpKSxpPyhsLmlmTW9kaWZpZWQmJih1PXYuZ2V0UmVzcG9uc2VIZWFkZXIoXCJMYXN0LU1vZGlmaWVkXCIpLHUmJihfLmxhc3RNb2RpZmllZFtlXT11KSx1PXYuZ2V0UmVzcG9uc2VIZWFkZXIoXCJldGFnXCIpLHUmJihfLmV0YWdbZV09dSkpLDIwND09PWF8fFwiSEVBRFwiPT09bC50eXBlP3c9XCJub2NvbnRlbnRcIjozMDQ9PT1hP3c9XCJub3Rtb2RpZmllZFwiOih3PXMuc3RhdGUsaz1zLmRhdGEscj1zLmVycm9yLGk9IXIpKToocj13LChhfHwhdykmJih3PVwiZXJyb3JcIiwwPmEmJihhPTApKSksdi5zdGF0dXM9YSx2LnN0YXR1c1RleHQ9KGJ8fHcpK1wiXCIsaT9vLnJlc29sdmVXaXRoKG0sW2ssdyx2XSk6by5yZWplY3RXaXRoKG0sW3YsdyxyXSksdi5zdGF0dXNDb2RlKHEpLHE9dm9pZCAwLGomJm4udHJpZ2dlcihpP1wiYWpheFN1Y2Nlc3NcIjpcImFqYXhFcnJvclwiLFt2LGwsaT9rOnJdKSxwLmZpcmVXaXRoKG0sW3Ysd10pLGomJihuLnRyaWdnZXIoXCJhamF4Q29tcGxldGVcIixbdixsXSksLS1fLmFjdGl2ZXx8Xy5ldmVudC50cmlnZ2VyKFwiYWpheFN0b3BcIikpKX1cIm9iamVjdFwiPT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYj1ifHx7fTt2YXIgZCxlLGYsZyxoLGksaixrLGw9Xy5hamF4U2V0dXAoe30sYiksbT1sLmNvbnRleHR8fGwsbj1sLmNvbnRleHQmJihtLm5vZGVUeXBlfHxtLmpxdWVyeSk/XyhtKTpfLmV2ZW50LG89Xy5EZWZlcnJlZCgpLHA9Xy5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSxxPWwuc3RhdHVzQ29kZXx8e30scj17fSxzPXt9LHQ9MCx1PVwiY2FuY2VsZWRcIix2PXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oYSl7dmFyIGI7aWYoMj09PXQpe2lmKCFnKWZvcihnPXt9O2I9cGMuZXhlYyhmKTspZ1tiWzFdLnRvTG93ZXJDYXNlKCldPWJbMl07Yj1nW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PWI/bnVsbDpifSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXQ/ZjpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO3JldHVybiB0fHwoYT1zW2NdPXNbY118fGEsclthXT1iKSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGEpe3JldHVybiB0fHwobC5taW1lVHlwZT1hKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKGEpaWYoMj50KWZvcihiIGluIGEpcVtiXT1bcVtiXSxhW2JdXTtlbHNlIHYuYWx3YXlzKGFbdi5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YXx8dTtyZXR1cm4gZCYmZC5hYm9ydChiKSxjKDAsYiksdGhpc319O2lmKG8ucHJvbWlzZSh2KS5jb21wbGV0ZT1wLmFkZCx2LnN1Y2Nlc3M9di5kb25lLHYuZXJyb3I9di5mYWlsLGwudXJsPSgoYXx8bC51cmx8fG1jKStcIlwiKS5yZXBsYWNlKG5jLFwiXCIpLnJlcGxhY2Uoc2MsbGNbMV0rXCIvL1wiKSxsLnR5cGU9Yi5tZXRob2R8fGIudHlwZXx8bC5tZXRob2R8fGwudHlwZSxsLmRhdGFUeXBlcz1fLnRyaW0obC5kYXRhVHlwZXx8XCIqXCIpLnRvTG93ZXJDYXNlKCkubWF0Y2gobmIpfHxbXCJcIl0sbnVsbD09bC5jcm9zc0RvbWFpbiYmKGk9dGMuZXhlYyhsLnVybC50b0xvd2VyQ2FzZSgpKSxsLmNyb3NzRG9tYWluPSEoIWl8fGlbMV09PT1sY1sxXSYmaVsyXT09PWxjWzJdJiYoaVszXXx8KFwiaHR0cDpcIj09PWlbMV0/XCI4MFwiOlwiNDQzXCIpKT09PShsY1szXXx8KFwiaHR0cDpcIj09PWxjWzFdP1wiODBcIjpcIjQ0M1wiKSkpKSxsLmRhdGEmJmwucHJvY2Vzc0RhdGEmJlwic3RyaW5nXCIhPXR5cGVvZiBsLmRhdGEmJihsLmRhdGE9Xy5wYXJhbShsLmRhdGEsbC50cmFkaXRpb25hbCkpLEsodWMsbCxiLHYpLDI9PT10KXJldHVybiB2O2o9bC5nbG9iYWwsaiYmMD09PV8uYWN0aXZlKysmJl8uZXZlbnQudHJpZ2dlcihcImFqYXhTdGFydFwiKSxsLnR5cGU9bC50eXBlLnRvVXBwZXJDYXNlKCksbC5oYXNDb250ZW50PSFyYy50ZXN0KGwudHlwZSksZT1sLnVybCxsLmhhc0NvbnRlbnR8fChsLmRhdGEmJihlPWwudXJsKz0oa2MudGVzdChlKT9cIiZcIjpcIj9cIikrbC5kYXRhLGRlbGV0ZSBsLmRhdGEpLGwuY2FjaGU9PT0hMSYmKGwudXJsPW9jLnRlc3QoZSk/ZS5yZXBsYWNlKG9jLFwiJDFfPVwiK2pjKyspOmUrKGtjLnRlc3QoZSk/XCImXCI6XCI/XCIpK1wiXz1cIitqYysrKSksbC5pZk1vZGlmaWVkJiYoXy5sYXN0TW9kaWZpZWRbZV0mJnYuc2V0UmVxdWVzdEhlYWRlcihcIklmLU1vZGlmaWVkLVNpbmNlXCIsXy5sYXN0TW9kaWZpZWRbZV0pLF8uZXRhZ1tlXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKFwiSWYtTm9uZS1NYXRjaFwiLF8uZXRhZ1tlXSkpLChsLmRhdGEmJmwuaGFzQ29udGVudCYmbC5jb250ZW50VHlwZSE9PSExfHxiLmNvbnRlbnRUeXBlKSYmdi5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsbC5jb250ZW50VHlwZSksdi5zZXRSZXF1ZXN0SGVhZGVyKFwiQWNjZXB0XCIsbC5kYXRhVHlwZXNbMF0mJmwuYWNjZXB0c1tsLmRhdGFUeXBlc1swXV0/bC5hY2NlcHRzW2wuZGF0YVR5cGVzWzBdXSsoXCIqXCIhPT1sLmRhdGFUeXBlc1swXT9cIiwgXCIrd2MrXCI7IHE9MC4wMVwiOlwiXCIpOmwuYWNjZXB0c1tcIipcIl0pO2ZvcihrIGluIGwuaGVhZGVycyl2LnNldFJlcXVlc3RIZWFkZXIoayxsLmhlYWRlcnNba10pO2lmKGwuYmVmb3JlU2VuZCYmKGwuYmVmb3JlU2VuZC5jYWxsKG0sdixsKT09PSExfHwyPT09dCkpcmV0dXJuIHYuYWJvcnQoKTt1PVwiYWJvcnRcIjtmb3IoayBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl2W2tdKGxba10pO2lmKGQ9Syh2YyxsLGIsdikpe3YucmVhZHlTdGF0ZT0xLGomJm4udHJpZ2dlcihcImFqYXhTZW5kXCIsW3YsbF0pLGwuYXN5bmMmJmwudGltZW91dD4wJiYoaD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7di5hYm9ydChcInRpbWVvdXRcIil9LGwudGltZW91dCkpO3RyeXt0PTEsZC5zZW5kKHIsYyl9Y2F0Y2godyl7aWYoISgyPnQpKXRocm93IHc7YygtMSx3KX19ZWxzZSBjKC0xLFwiTm8gVHJhbnNwb3J0XCIpO3JldHVybiB2fSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gXy5nZXQoYSxiLGMsXCJqc29uXCIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gXy5nZXQoYSx2b2lkIDAsYixcInNjcmlwdFwiKX19KSxfLmVhY2goW1wiZ2V0XCIsXCJwb3N0XCJdLGZ1bmN0aW9uKGEsYil7X1tiXT1mdW5jdGlvbihhLGMsZCxlKXtyZXR1cm4gXy5pc0Z1bmN0aW9uKGMpJiYoZT1lfHxkLGQ9YyxjPXZvaWQgMCksXy5hamF4KHt1cmw6YSx0eXBlOmIsZGF0YVR5cGU6ZSxkYXRhOmMsc3VjY2VzczpkfSl9fSksXy5lYWNoKFtcImFqYXhTdGFydFwiLFwiYWpheFN0b3BcIixcImFqYXhDb21wbGV0ZVwiLFwiYWpheEVycm9yXCIsXCJhamF4U3VjY2Vzc1wiLFwiYWpheFNlbmRcIl0sZnVuY3Rpb24oYSxiKXtfLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9uKGIsYSl9fSksXy5fZXZhbFVybD1mdW5jdGlvbihhKXtyZXR1cm4gXy5hamF4KHt1cmw6YSx0eXBlOlwiR0VUXCIsZGF0YVR5cGU6XCJzY3JpcHRcIixhc3luYzohMSxnbG9iYWw6ITEsXCJ0aHJvd3NcIjohMH0pfSxfLmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gXy5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihiKXtfKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk6KHRoaXNbMF0mJihiPV8oYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLGIubWFwKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YS5maXJzdEVsZW1lbnRDaGlsZDspYT1hLmZpcnN0RWxlbWVudENoaWxkO3JldHVybiBhfSkuYXBwZW5kKHRoaXMpKSx0aGlzKX0sd3JhcElubmVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goXy5pc0Z1bmN0aW9uKGEpP2Z1bmN0aW9uKGIpe18odGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX06ZnVuY3Rpb24oKXt2YXIgYj1fKHRoaXMpLGM9Yi5jb250ZW50cygpO2MubGVuZ3RoP2Mud3JhcEFsbChhKTpiLmFwcGVuZChhKX0pfSx3cmFwOmZ1bmN0aW9uKGEpe3ZhciBiPV8uaXNGdW5jdGlvbihhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe18odGhpcykud3JhcEFsbChiP2EuY2FsbCh0aGlzLGMpOmEpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtfLm5vZGVOYW1lKHRoaXMsXCJib2R5XCIpfHxfKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX19KSxfLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGEub2Zmc2V0V2lkdGg8PTAmJmEub2Zmc2V0SGVpZ2h0PD0wfSxfLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFfLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9O3ZhciB5Yz0vJTIwL2csemM9L1xcW1xcXSQvLEFjPS9cXHI/XFxuL2csQmM9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLENjPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtfLnBhcmFtPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPWZ1bmN0aW9uKGEsYil7Yj1fLmlzRnVuY3Rpb24oYik/YigpOm51bGw9PWI/XCJcIjpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKStcIj1cIitlbmNvZGVVUklDb21wb25lbnQoYil9O2lmKHZvaWQgMD09PWImJihiPV8uYWpheFNldHRpbmdzJiZfLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksXy5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIV8uaXNQbGFpbk9iamVjdChhKSlfLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpXG59KTtlbHNlIGZvcihjIGluIGEpTyhjLGFbY10sYixlKTtyZXR1cm4gZC5qb2luKFwiJlwiKS5yZXBsYWNlKHljLFwiK1wiKX0sXy5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBfLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9Xy5wcm9wKHRoaXMsXCJlbGVtZW50c1wiKTtyZXR1cm4gYT9fLm1ha2VBcnJheShhKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFfKHRoaXMpLmlzKFwiOmRpc2FibGVkXCIpJiZDYy50ZXN0KHRoaXMubm9kZU5hbWUpJiYhQmMudGVzdChhKSYmKHRoaXMuY2hlY2tlZHx8IXliLnRlc3QoYSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9Xyh0aGlzKS52YWwoKTtyZXR1cm4gbnVsbD09Yz9udWxsOl8uaXNBcnJheShjKT9fLm1hcChjLGZ1bmN0aW9uKGEpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoQWMsXCJcXHJcXG5cIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZShBYyxcIlxcclxcblwiKX19KS5nZXQoKX19KSxfLmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH1jYXRjaChhKXt9fTt2YXIgRGM9MCxFYz17fSxGYz17MDoyMDAsMTIyMzoyMDR9LEdjPV8uYWpheFNldHRpbmdzLnhocigpO2EuQWN0aXZlWE9iamVjdCYmXyhhKS5vbihcInVubG9hZFwiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIEVjKUVjW2FdKCl9KSxZLmNvcnM9ISFHYyYmXCJ3aXRoQ3JlZGVudGlhbHNcImluIEdjLFkuYWpheD1HYz0hIUdjLF8uYWpheFRyYW5zcG9ydChmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gWS5jb3JzfHxHYyYmIWEuY3Jvc3NEb21haW4/e3NlbmQ6ZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEueGhyKCksZz0rK0RjO2lmKGYub3BlbihhLnR5cGUsYS51cmwsYS5hc3luYyxhLnVzZXJuYW1lLGEucGFzc3dvcmQpLGEueGhyRmllbGRzKWZvcihlIGluIGEueGhyRmllbGRzKWZbZV09YS54aHJGaWVsZHNbZV07YS5taW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlJiZmLm92ZXJyaWRlTWltZVR5cGUoYS5taW1lVHlwZSksYS5jcm9zc0RvbWFpbnx8Y1tcIlgtUmVxdWVzdGVkLVdpdGhcIl18fChjW1wiWC1SZXF1ZXN0ZWQtV2l0aFwiXT1cIlhNTEh0dHBSZXF1ZXN0XCIpO2ZvcihlIGluIGMpZi5zZXRSZXF1ZXN0SGVhZGVyKGUsY1tlXSk7Yj1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtiJiYoZGVsZXRlIEVjW2ddLGI9Zi5vbmxvYWQ9Zi5vbmVycm9yPW51bGwsXCJhYm9ydFwiPT09YT9mLmFib3J0KCk6XCJlcnJvclwiPT09YT9kKGYuc3RhdHVzLGYuc3RhdHVzVGV4dCk6ZChGY1tmLnN0YXR1c118fGYuc3RhdHVzLGYuc3RhdHVzVGV4dCxcInN0cmluZ1wiPT10eXBlb2YgZi5yZXNwb25zZVRleHQ/e3RleHQ6Zi5yZXNwb25zZVRleHR9OnZvaWQgMCxmLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSl9fSxmLm9ubG9hZD1iKCksZi5vbmVycm9yPWIoXCJlcnJvclwiKSxiPUVjW2ddPWIoXCJhYm9ydFwiKTt0cnl7Zi5zZW5kKGEuaGFzQ29udGVudCYmYS5kYXRhfHxudWxsKX1jYXRjaChoKXtpZihiKXRocm93IGh9fSxhYm9ydDpmdW5jdGlvbigpe2ImJmIoKX19OnZvaWQgMH0pLF8uYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6XCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwifSxjb250ZW50czp7c2NyaXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30sY29udmVydGVyczp7XCJ0ZXh0IHNjcmlwdFwiOmZ1bmN0aW9uKGEpe3JldHVybiBfLmdsb2JhbEV2YWwoYSksYX19fSksXy5hamF4UHJlZmlsdGVyKFwic2NyaXB0XCIsZnVuY3Rpb24oYSl7dm9pZCAwPT09YS5jYWNoZSYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9XCJHRVRcIil9KSxfLmFqYXhUcmFuc3BvcnQoXCJzY3JpcHRcIixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjO3JldHVybntzZW5kOmZ1bmN0aW9uKGQsZSl7Yj1fKFwiPHNjcmlwdD5cIikucHJvcCh7YXN5bmM6ITAsY2hhcnNldDphLnNjcmlwdENoYXJzZXQsc3JjOmEudXJsfSkub24oXCJsb2FkIGVycm9yXCIsYz1mdW5jdGlvbihhKXtiLnJlbW92ZSgpLGM9bnVsbCxhJiZlKFwiZXJyb3JcIj09PWEudHlwZT80MDQ6MjAwLGEudHlwZSl9KSxaLmhlYWQuYXBwZW5kQ2hpbGQoYlswXSl9LGFib3J0OmZ1bmN0aW9uKCl7YyYmYygpfX19fSk7dmFyIEhjPVtdLEljPS8oPSlcXD8oPz0mfCQpfFxcP1xcPy87Xy5hamF4U2V0dXAoe2pzb25wOlwiY2FsbGJhY2tcIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGE9SGMucG9wKCl8fF8uZXhwYW5kbytcIl9cIitqYysrO3JldHVybiB0aGlzW2FdPSEwLGF9fSksXy5hamF4UHJlZmlsdGVyKFwianNvbiBqc29ucFwiLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZSxmLGcsaD1iLmpzb25wIT09ITEmJihJYy50ZXN0KGIudXJsKT9cInVybFwiOlwic3RyaW5nXCI9PXR5cGVvZiBiLmRhdGEmJiEoYi5jb250ZW50VHlwZXx8XCJcIikuaW5kZXhPZihcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSYmSWMudGVzdChiLmRhdGEpJiZcImRhdGFcIik7cmV0dXJuIGh8fFwianNvbnBcIj09PWIuZGF0YVR5cGVzWzBdPyhlPWIuanNvbnBDYWxsYmFjaz1fLmlzRnVuY3Rpb24oYi5qc29ucENhbGxiYWNrKT9iLmpzb25wQ2FsbGJhY2soKTpiLmpzb25wQ2FsbGJhY2ssaD9iW2hdPWJbaF0ucmVwbGFjZShJYyxcIiQxXCIrZSk6Yi5qc29ucCE9PSExJiYoYi51cmwrPShrYy50ZXN0KGIudXJsKT9cIiZcIjpcIj9cIikrYi5qc29ucCtcIj1cIitlKSxiLmNvbnZlcnRlcnNbXCJzY3JpcHQganNvblwiXT1mdW5jdGlvbigpe3JldHVybiBnfHxfLmVycm9yKGUrXCIgd2FzIG5vdCBjYWxsZWRcIiksZ1swXX0sYi5kYXRhVHlwZXNbMF09XCJqc29uXCIsZj1hW2VdLGFbZV09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZC5hbHdheXMoZnVuY3Rpb24oKXthW2VdPWYsYltlXSYmKGIuanNvbnBDYWxsYmFjaz1jLmpzb25wQ2FsbGJhY2ssSGMucHVzaChlKSksZyYmXy5pc0Z1bmN0aW9uKGYpJiZmKGdbMF0pLGc9Zj12b2lkIDB9KSxcInNjcmlwdFwiKTp2b2lkIDB9KSxfLnBhcnNlSFRNTD1mdW5jdGlvbihhLGIsYyl7aWYoIWF8fFwic3RyaW5nXCIhPXR5cGVvZiBhKXJldHVybiBudWxsO1wiYm9vbGVhblwiPT10eXBlb2YgYiYmKGM9YixiPSExKSxiPWJ8fFo7dmFyIGQ9Z2IuZXhlYyhhKSxlPSFjJiZbXTtyZXR1cm4gZD9bYi5jcmVhdGVFbGVtZW50KGRbMV0pXTooZD1fLmJ1aWxkRnJhZ21lbnQoW2FdLGIsZSksZSYmZS5sZW5ndGgmJl8oZSkucmVtb3ZlKCksXy5tZXJnZShbXSxkLmNoaWxkTm9kZXMpKX07dmFyIEpjPV8uZm4ubG9hZDtfLmZuLmxvYWQ9ZnVuY3Rpb24oYSxiLGMpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBhJiZKYylyZXR1cm4gSmMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBkLGUsZixnPXRoaXMsaD1hLmluZGV4T2YoXCIgXCIpO3JldHVybiBoPj0wJiYoZD1fLnRyaW0oYS5zbGljZShoKSksYT1hLnNsaWNlKDAsaCkpLF8uaXNGdW5jdGlvbihiKT8oYz1iLGI9dm9pZCAwKTpiJiZcIm9iamVjdFwiPT10eXBlb2YgYiYmKGU9XCJQT1NUXCIpLGcubGVuZ3RoPjAmJl8uYWpheCh7dXJsOmEsdHlwZTplLGRhdGFUeXBlOlwiaHRtbFwiLGRhdGE6Yn0pLmRvbmUoZnVuY3Rpb24oYSl7Zj1hcmd1bWVudHMsZy5odG1sKGQ/XyhcIjxkaXY+XCIpLmFwcGVuZChfLnBhcnNlSFRNTChhKSkuZmluZChkKTphKX0pLmNvbXBsZXRlKGMmJmZ1bmN0aW9uKGEsYil7Zy5lYWNoKGMsZnx8W2EucmVzcG9uc2VUZXh0LGIsYV0pfSksdGhpc30sXy5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIF8uZ3JlcChfLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH07dmFyIEtjPWEuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O18ub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs9Xy5jc3MoYSxcInBvc2l0aW9uXCIpLGw9XyhhKSxtPXt9O1wic3RhdGljXCI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj1cInJlbGF0aXZlXCIpLGg9bC5vZmZzZXQoKSxmPV8uY3NzKGEsXCJ0b3BcIiksaT1fLmNzcyhhLFwibGVmdFwiKSxqPShcImFic29sdXRlXCI9PT1rfHxcImZpeGVkXCI9PT1rKSYmKGYraSkuaW5kZXhPZihcImF1dG9cIik+LTEsaj8oZD1sLnBvc2l0aW9uKCksZz1kLnRvcCxlPWQubGVmdCk6KGc9cGFyc2VGbG9hdChmKXx8MCxlPXBhcnNlRmxvYXQoaSl8fDApLF8uaXNGdW5jdGlvbihiKSYmKGI9Yi5jYWxsKGEsYyxoKSksbnVsbCE9Yi50b3AmJihtLnRvcD1iLnRvcC1oLnRvcCtnKSxudWxsIT1iLmxlZnQmJihtLmxlZnQ9Yi5sZWZ0LWgubGVmdCtlKSxcInVzaW5nXCJpbiBiP2IudXNpbmcuY2FsbChhLG0pOmwuY3NzKG0pfX0sXy5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1hP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe18ub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTt2YXIgYixjLGQ9dGhpc1swXSxlPXt0b3A6MCxsZWZ0OjB9LGY9ZCYmZC5vd25lckRvY3VtZW50O2lmKGYpcmV0dXJuIGI9Zi5kb2N1bWVudEVsZW1lbnQsXy5jb250YWlucyhiLGQpPyh0eXBlb2YgZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPT16YiYmKGU9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksYz1QKGYpLHt0b3A6ZS50b3ArYy5wYWdlWU9mZnNldC1iLmNsaWVudFRvcCxsZWZ0OmUubGVmdCtjLnBhZ2VYT2Zmc2V0LWIuY2xpZW50TGVmdH0pOmV9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGEsYixjPXRoaXNbMF0sZD17dG9wOjAsbGVmdDowfTtyZXR1cm5cImZpeGVkXCI9PT1fLmNzcyhjLFwicG9zaXRpb25cIik/Yj1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOihhPXRoaXMub2Zmc2V0UGFyZW50KCksYj10aGlzLm9mZnNldCgpLF8ubm9kZU5hbWUoYVswXSxcImh0bWxcIil8fChkPWEub2Zmc2V0KCkpLGQudG9wKz1fLmNzcyhhWzBdLFwiYm9yZGVyVG9wV2lkdGhcIiwhMCksZC5sZWZ0Kz1fLmNzcyhhWzBdLFwiYm9yZGVyTGVmdFdpZHRoXCIsITApKSx7dG9wOmIudG9wLWQudG9wLV8uY3NzKGMsXCJtYXJnaW5Ub3BcIiwhMCksbGVmdDpiLmxlZnQtZC5sZWZ0LV8uY3NzKGMsXCJtYXJnaW5MZWZ0XCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8S2M7YSYmIV8ubm9kZU5hbWUoYSxcImh0bWxcIikmJlwic3RhdGljXCI9PT1fLmNzcyhhLFwicG9zaXRpb25cIik7KWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF8fEtjfSl9fSksXy5lYWNoKHtzY3JvbGxMZWZ0OlwicGFnZVhPZmZzZXRcIixzY3JvbGxUb3A6XCJwYWdlWU9mZnNldFwifSxmdW5jdGlvbihiLGMpe3ZhciBkPVwicGFnZVlPZmZzZXRcIj09PWM7Xy5mbltiXT1mdW5jdGlvbihlKXtyZXR1cm4gcWIodGhpcyxmdW5jdGlvbihiLGUsZil7dmFyIGc9UChiKTtyZXR1cm4gdm9pZCAwPT09Zj9nP2dbY106YltlXTp2b2lkKGc/Zy5zY3JvbGxUbyhkP2EucGFnZVhPZmZzZXQ6ZixkP2Y6YS5wYWdlWU9mZnNldCk6YltlXT1mKX0sYixlLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksXy5lYWNoKFtcInRvcFwiLFwibGVmdFwiXSxmdW5jdGlvbihhLGIpe18uY3NzSG9va3NbYl09dyhZLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8oYz12KGEsYiksUWIudGVzdChjKT9fKGEpLnBvc2l0aW9uKClbYl0rXCJweFwiOmMpOnZvaWQgMH0pfSksXy5lYWNoKHtIZWlnaHQ6XCJoZWlnaHRcIixXaWR0aDpcIndpZHRoXCJ9LGZ1bmN0aW9uKGEsYil7Xy5lYWNoKHtwYWRkaW5nOlwiaW5uZXJcIithLGNvbnRlbnQ6YixcIlwiOlwib3V0ZXJcIithfSxmdW5jdGlvbihjLGQpe18uZm5bZF09ZnVuY3Rpb24oZCxlKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoJiYoY3x8XCJib29sZWFuXCIhPXR5cGVvZiBkKSxnPWN8fChkPT09ITB8fGU9PT0hMD9cIm1hcmdpblwiOlwiYm9yZGVyXCIpO3JldHVybiBxYih0aGlzLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZTtyZXR1cm4gXy5pc1dpbmRvdyhiKT9iLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtcImNsaWVudFwiK2FdOjk9PT1iLm5vZGVUeXBlPyhlPWIuZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KGIuYm9keVtcInNjcm9sbFwiK2FdLGVbXCJzY3JvbGxcIithXSxiLmJvZHlbXCJvZmZzZXRcIithXSxlW1wib2Zmc2V0XCIrYV0sZVtcImNsaWVudFwiK2FdKSk6dm9pZCAwPT09ZD9fLmNzcyhiLGMsZyk6Xy5zdHlsZShiLGMsZCxnKX0sYixmP2Q6dm9pZCAwLGYsbnVsbCl9fSl9KSxfLmZuLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LF8uZm4uYW5kU2VsZj1fLmZuLmFkZEJhY2ssXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoXCJqcXVlcnlcIixbXSxmdW5jdGlvbigpe3JldHVybiBffSk7dmFyIExjPWEualF1ZXJ5LE1jPWEuJDtyZXR1cm4gXy5ub0NvbmZsaWN0PWZ1bmN0aW9uKGIpe3JldHVybiBhLiQ9PT1fJiYoYS4kPU1jKSxiJiZhLmpRdWVyeT09PV8mJihhLmpRdWVyeT1MYyksX30sdHlwZW9mIGI9PT16YiYmKGEualF1ZXJ5PWEuJD1fKSxffSk7XG4iLCLvu79mdW5jdGlvbiBHZXRGb3JtWG1sKGNvbnRhaW5lcikge1xyXG4gICAgLy8gVGhpcyBpcyBhbiBhdXRvIGdlbmVyYXRlZCBmaWVsZCB0byBibG9jayBzY3JpcHQvcHJvZ3JhbXMgdG8gc3VibWl0IGZvcm0gYXV0b21hdGljYWxseS4gXHJcbiAgICAvL2NvbnNvbGUubG9nKFwiRWxlbWVudCBMZW5ndGg6XCIgKyAkKGNvbnRhaW5lcikuZmluZCgkKCdpbnB1dFtpZF49XCJ0eHRGYXhJbmZvXCJdJykpLmxlbmd0aCk7XHJcbiAgICBpZiAoJChjb250YWluZXIpLmZpbmQoJCgnaW5wdXRbaWRePVwidHh0RmF4SW5mb1wiXScpKS5sZW5ndGggPiAwICYmICQoY29udGFpbmVyKS5maW5kKCQoJ2lucHV0W2lkXj1cInR4dEZheEluZm9cIl0nKSkudmFsKCkgIT0gJycpIHJldHVybiBudWxsO1xyXG5cclxuICAgIHZhciBfZW50aXR5WG1sID0gW107XHJcbiAgICB2YXIgX3RlbXBYbWwgPSAnJztcclxuICAgIHZhciBfdGVtcFZhbHVlID0gJyc7XHJcbiAgICB2YXIgX3RlbXBMYWJlbCA9ICcnO1xyXG4gICAgdmFyIF9pc1ZhbGlkYXRlZCA9IHRydWU7XHJcblxyXG4gICAgJChjb250YWluZXIpLmZpbmQoJypbRm9ybU5vZGU9XCJ0cnVlXCJdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgX3RlbXBWYWx1ZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCd0eXBlJykgPT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgICB2YXIgX2RlbGltaXRlciA9ICcnO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCQoY29udGFpbmVyKS5maW5kKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl1bbmFtZT1cIicgKyAkKHRoaXMpLmF0dHIoJ25hbWUnKSArICdcIl06Y2hlY2tlZCcpLmxlbmd0aCA+IDEpIF9kZWxpbWl0ZXIgPSAnOyc7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgeyB9XHJcbiAgICAgICAgICAgICQoY29udGFpbmVyKS5maW5kKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl1bbmFtZT1cIicgKyAkKHRoaXMpLmF0dHIoJ25hbWUnKSArICdcIl06Y2hlY2tlZCcpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgX3RlbXBWYWx1ZSA9IF90ZW1wVmFsdWUgKyAkKHRoaXMpLnZhbCgpICsgX2RlbGltaXRlcjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMpLmF0dHIoJ3R5cGUnKSA9PSAncmFkaW8nKSB7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLmlzKCc6Y2hlY2tlZCcpKSB7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFZhbHVlID0gJCh0aGlzKS52YWwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoJCh0aGlzKS5hdHRyKCdjYXB0Y2hhJykpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciBfY2FwdGNoYSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdmFyICRjYXB0Y2hhID0gJCh0aGlzKS5jbG9zZXN0KCcuY2FwdGNoYScpLmZpbmQoJ1tjYXB0Y2hhLXZhbHVlXScpO1xyXG4gICAgICAgICAgICAgICAgX2NhcHRjaGEgPSAnPENhcHRjaGFWYWxpZGF0b3IgSUQ9XCInICsgJGNhcHRjaGEuYXR0cignY2FwdGNoYS1pZCcpICsgJ1wiPicgKyAkKHRoaXMpLnZhbCgpICsgJzwvQ2FwdGNoYVZhbGlkYXRvcj4nO1xyXG4gICAgICAgICAgICAgICAgaWYgKE1ENSgkKHRoaXMpLnZhbCgpKS50b0xvd2VyQ2FzZSgpICE9ICRjYXB0Y2hhLmF0dHIoJ2NhcHRjaGEtdmFsdWUnKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2lzVmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCh0aGlzKS5hdHRyKCdGb3JtTWVzc2FnZScpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBfZW50aXR5WG1sW1wiQ2FwdGNoYVwiXSA9IF9jYXB0Y2hhO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IF9pc1ZhbGlkYXRlZCA9IGZhbHNlOyBhbGVydChlKTsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgX3RlbXBWYWx1ZSA9ICQodGhpcykudmFsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNOdWxsT3JFbXB0eShfdGVtcFZhbHVlKSkge1xyXG4gICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdSZXF1aXJlZCcpID09ICd0cnVlJyB8fCAkKHRoaXMpLmF0dHIoJ1JlcXVpcmVkJykgPT0gJ3JlcXVpcmVkJykge1xyXG4gICAgICAgICAgICAgICAgX2lzVmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgkKHRoaXMpLmF0dHIoJ0Zvcm1NZXNzYWdlJykpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cignRm9ybVR5cGUnKSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cignRm9ybVR5cGUnKSA9PSAnRW1haWwnICYmICFpc1ZhbGlkRW1haWwoX3RlbXBWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBfaXNWYWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydCgkKHRoaXMpLmF0dHIoJ0Zvcm1NZXNzYWdlJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KCQodGhpcykuYXR0cignTWluTGVuZ3RoJykpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoJCh0aGlzKS5hdHRyKCdNaW5MZW5ndGgnKSkgPiBfdGVtcFZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pc1ZhbGlkYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQodGhpcykuYXR0cignRm9ybU1lc3NhZ2UnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNOdWxsT3JFbXB0eSgkKHRoaXMpLmF0dHIoJ0VudGl0eScpKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChpc051bGxPckVtcHR5KCQodGhpcykuYXR0cignTm9kZScpKSkgcmV0dXJuO1xyXG4gICAgICAgIF90ZW1wWG1sID0gX2VudGl0eVhtbFskKHRoaXMpLmF0dHIoJ0VudGl0eScpXTtcclxuICAgICAgICBpZiAoaXNOdWxsT3JFbXB0eShfdGVtcFhtbCkpIF9lbnRpdHlYbWxbJCh0aGlzKS5hdHRyKCdFbnRpdHknKV0gPSAnJztcclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmICghaXNOdWxsT3JFbXB0eShfdGVtcFZhbHVlKSkge1xyXG4gICAgICAgICAgICBfdGVtcFZhbHVlID0gX3RlbXBWYWx1ZS50cmltKCk7XHJcbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JFbXB0eSgkKHRoaXMpLmF0dHIoJ2xhYmVsJykpKSBfdGVtcExhYmVsID0gJyBsYWJlbD1cIicgKyAkKHRoaXMpLmF0dHIoJ2xhYmVsJykgKyAnXCIgJzsgZWxzZSBfdGVtcExhYmVsID0gJyc7XHJcbiAgICAgICAgICAgIF90ZW1wWG1sID0gJzwnICsgJCh0aGlzKS5hdHRyKCdOb2RlJykgKyBfdGVtcExhYmVsICsgJz4nICsgKCQodGhpcykuYXR0cignZGF0YS1hZ29yYS10eXBlJykgIT0gJ3htbCcgPyAnPCFbQ0RBVEFbJyArIF90ZW1wVmFsdWUgKyAnXV0+JyA6IF90ZW1wVmFsdWUpICsgJzwvJyArICQodGhpcykuYXR0cignTm9kZScpICsgJz4nO1xyXG4gICAgICAgICAgICBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldICs9IF90ZW1wWG1sO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdFbnRpdHknKSA9PT0gJ0xlYWQnKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50VXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgICAgIHZhciB1cmwgPSBuZXcgVVJMKGN1cnJlbnRVcmwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModXJsLnNlYXJjaCk7XHJcblxyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmhhcyhcInV0bV90ZXJtXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFZhbHVlID0gcGFyYW1zLmdldChcInV0bV90ZXJtXCIpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIF90ZW1wTGFiZWwgPSAnIGxhYmVsPVwiVVRNIFRlcm1cIiAnO1xyXG4gICAgICAgICAgICAgICAgX3RlbXBYbWwgPSAnPFVUTVRlcm0nICsgX3RlbXBMYWJlbCArICc+JyArICgkKHRoaXMpLmF0dHIoJ2RhdGEtYWdvcmEtdHlwZScpICE9ICd4bWwnID8gJzwhW0NEQVRBWycgKyBfdGVtcFZhbHVlICsgJ11dPicgOiBfdGVtcFZhbHVlKSArICc8L1VUTVRlcm0+JztcclxuICAgICAgICAgICAgICAgIF9lbnRpdHlYbWxbJCh0aGlzKS5hdHRyKCdFbnRpdHknKV0gKz0gX3RlbXBYbWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5oYXMoXCJ0bV9jb3JwX3BhcnRuZXJcIikpIHtcclxuICAgICAgICAgICAgICAgIF90ZW1wVmFsdWUgPSBwYXJhbXMuZ2V0KFwidG1fY29ycF9wYXJ0bmVyXCIpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIF90ZW1wTGFiZWwgPSAnIGxhYmVsPVwiQ29ycG9yYXRlIFBhcnRuZXJcIiAnO1xyXG4gICAgICAgICAgICAgICAgX3RlbXBYbWwgPSAnPENvcnBvcmF0ZVBhcnRuZXInICsgX3RlbXBMYWJlbCArICc+JyArICgkKHRoaXMpLmF0dHIoJ2RhdGEtYWdvcmEtdHlwZScpICE9ICd4bWwnID8gJzwhW0NEQVRBWycgKyBfdGVtcFZhbHVlICsgJ11dPicgOiBfdGVtcFZhbHVlKSArICc8L0NvcnBvcmF0ZVBhcnRuZXI+JztcclxuICAgICAgICAgICAgICAgIF9lbnRpdHlYbWxbJCh0aGlzKS5hdHRyKCdFbnRpdHknKV0gKz0gX3RlbXBYbWw7XHJcbiAgICAgICAgICAgIH0gaWYgKHBhcmFtcy5oYXMoXCJ1dG1fY2FtcGFpZ25cIikpIHtcclxuICAgICAgICAgICAgICAgIF90ZW1wVmFsdWUgPSBwYXJhbXMuZ2V0KFwidXRtX2NhbXBhaWduXCIpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIF90ZW1wTGFiZWwgPSAnIGxhYmVsPVwiVVRNIENhbXBhaWduXCIgJztcclxuICAgICAgICAgICAgICAgIF90ZW1wWG1sID0gJzxVVE1DYW1wYWlnbicgKyBfdGVtcExhYmVsICsgJz4nICsgKCQodGhpcykuYXR0cignZGF0YS1hZ29yYS10eXBlJykgIT0gJ3htbCcgPyAnPCFbQ0RBVEFbJyArIF90ZW1wVmFsdWUgKyAnXV0+JyA6IF90ZW1wVmFsdWUpICsgJzwvVVRNQ2FtcGFpZ24+JztcclxuICAgICAgICAgICAgICAgIF9lbnRpdHlYbWxbJCh0aGlzKS5hdHRyKCdFbnRpdHknKV0gKz0gX3RlbXBYbWw7XHJcbiAgICAgICAgICAgIH0gaWYgKHBhcmFtcy5oYXMoXCJ1dG1fY29udGVudFwiKSkge1xyXG4gICAgICAgICAgICAgICAgX3RlbXBWYWx1ZSA9IHBhcmFtcy5nZXQoXCJ1dG1fY29udGVudFwiKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBfdGVtcExhYmVsID0gJyBsYWJlbD1cIlVUTSBDb250ZW50XCIgJztcclxuICAgICAgICAgICAgICAgIF90ZW1wWG1sID0gJzxVVE1Db250ZW50JyArIF90ZW1wTGFiZWwgKyAnPicgKyAoJCh0aGlzKS5hdHRyKCdkYXRhLWFnb3JhLXR5cGUnKSAhPSAneG1sJyA/ICc8IVtDREFUQVsnICsgX3RlbXBWYWx1ZSArICddXT4nIDogX3RlbXBWYWx1ZSkgKyAnPC9VVE1Db250ZW50Pic7XHJcbiAgICAgICAgICAgICAgICBfZW50aXR5WG1sWyQodGhpcykuYXR0cignRW50aXR5JyldICs9IF90ZW1wWG1sO1xyXG4gICAgICAgICAgICB9IGlmIChwYXJhbXMuaGFzKFwidXRtX21lZGl1bVwiKSkge1xyXG4gICAgICAgICAgICAgICAgX3RlbXBWYWx1ZSA9IHBhcmFtcy5nZXQoXCJ1dG1fbWVkaXVtXCIpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIF90ZW1wTGFiZWwgPSAnIGxhYmVsPVwiVVRNIE1lZGl1bVwiICc7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFhtbCA9ICc8VVRNTWVkaXVtJyArIF90ZW1wTGFiZWwgKyAnPicgKyAoJCh0aGlzKS5hdHRyKCdkYXRhLWFnb3JhLXR5cGUnKSAhPSAneG1sJyA/ICc8IVtDREFUQVsnICsgX3RlbXBWYWx1ZSArICddXT4nIDogX3RlbXBWYWx1ZSkgKyAnPC9VVE1NZWRpdW0+JztcclxuICAgICAgICAgICAgICAgIF9lbnRpdHlYbWxbJCh0aGlzKS5hdHRyKCdFbnRpdHknKV0gKz0gX3RlbXBYbWw7XHJcbiAgICAgICAgICAgIH0gaWYgKHBhcmFtcy5oYXMoXCJ1dG1fc291cmNlXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBfdGVtcFZhbHVlID0gcGFyYW1zLmdldChcInV0bV9zb3VyY2VcIikudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgX3RlbXBMYWJlbCA9ICcgbGFiZWw9XCJVVE0gU291cmNlXCIgJztcclxuICAgICAgICAgICAgICAgIF90ZW1wWG1sID0gJzxVVE1Tb3VyY2UnICsgX3RlbXBMYWJlbCArICc+JyArICgkKHRoaXMpLmF0dHIoJ2RhdGEtYWdvcmEtdHlwZScpICE9ICd4bWwnID8gJzwhW0NEQVRBWycgKyBfdGVtcFZhbHVlICsgJ11dPicgOiBfdGVtcFZhbHVlKSArICc8L1VUTVNvdXJjZT4nO1xyXG4gICAgICAgICAgICAgICAgX2VudGl0eVhtbFskKHRoaXMpLmF0dHIoJ0VudGl0eScpXSArPSBfdGVtcFhtbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghX2lzVmFsaWRhdGVkKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICB2YXIgX2Zvcm1YbWwgPSAnPGQ+JztcclxuICAgIGZvciAocCA9IDA7IHAgPCBPYmplY3Qua2V5cyhfZW50aXR5WG1sKS5sZW5ndGg7IHArKykge1xyXG4gICAgICAgIF9mb3JtWG1sICs9ICc8JyArIE9iamVjdC5rZXlzKF9lbnRpdHlYbWwpW3BdICsgJz4nICsgX2VudGl0eVhtbFtPYmplY3Qua2V5cyhfZW50aXR5WG1sKVtwXV0gKyAnPC8nICsgT2JqZWN0LmtleXMoX2VudGl0eVhtbClbcF0gKyAnPic7XHJcbiAgICB9XHJcbiAgICBfZm9ybVhtbCArPSAnPC9kPic7XHJcblxyXG4gICAgcmV0dXJuIGVzY2FwZShfZm9ybVhtbCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBvc2VVcmxRdWVyeShvcHRpb25zKSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdTdGFydGVkIC4uLicpO1xyXG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbClcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB2YXIgdXJsUXVlcnkgPSAnJztcclxuICAgIHZhciBfdXJsUXVlcnlUcmF2ZXJzZSA9IG5ldyBPYmplY3QoKTtcclxuXHJcbiAgICB2YXIgJGNvbnRyb2xzID0gJChvcHRpb25zLnNlbGVjdCkuYWRkKCQob3B0aW9ucy5zZWxlY3QpLmZpbmQoJ1t1cmxpZGVudGlmaWVyXScpKTtcclxuICAgIGlmIChvcHRpb25zLm5vbnNlbGVjdCAhPSB1bmRlZmluZWQgJiYgb3B0aW9ucy5ub25zZWxlY3QgIT0gbnVsbClcclxuICAgICAgICAkY29udHJvbHMgPSAkKCRjb250cm9scykubm90KG9wdGlvbnMubm9uc2VsZWN0KTtcclxuXHJcbiAgICB2YXIgJHRyYXZlcnNlZENvbnRyb2xzID0gJCgpO1xyXG4gICAgLy9jb25zb2xlLmxvZygnQ29udHJvbHMgZmV0Y2ggc3RhcnRlZCAuLi4nKTtcclxuICAgICQoJGNvbnRyb2xzKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3F1ZXJ5RGF0YSA9IF9nZXRRdWVyeURhdGFGb3JGaWVsZCh0aGlzLCAkY29udHJvbHMsICR0cmF2ZXJzZWRDb250cm9scyk7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygnUUQ6JyArIEpTT04uc3RyaW5naWZ5KF9xdWVyeURhdGEpKTtcclxuICAgICAgICBfYWRkVG9RdWVyeU9iamVjdChfcXVlcnlEYXRhLCBfdXJsUXVlcnlUcmF2ZXJzZSk7XHJcbiAgICB9KTtcclxuICAgIC8vY29uc29sZS5sb2coJ0NvbnRyb2xzIGZldGNoIGNvbXBsZXRlZCAuLi4nKTtcclxuICAgIHVybFF1ZXJ5ID0gX2dldFVybFF1ZXJ5RnJvbVF1ZXJ5T2JqZWN0KF91cmxRdWVyeVRyYXZlcnNlKTtcclxuXHJcbiAgICBpZiAob3B0aW9ucy5hZGRpdGlvbmFsICE9IHVuZGVmaW5lZCAmJiBvcHRpb25zLmFkZGl0aW9uYWwgIT0gbnVsbClcclxuICAgICAgICByZXR1cm4gb3B0aW9ucy5hZGRpdGlvbmFsKHVybFF1ZXJ5KTtcclxuXHJcbiAgICByZXR1cm4gdXJsUXVlcnk7XHJcblxyXG4gICAgZnVuY3Rpb24gX2FkZFRvUXVlcnlPYmplY3QocXVlcnlEYXRhLCB1cmxRdWVyeVRyYXZlcnNlKSB7XHJcbiAgICAgICAgaWYgKHF1ZXJ5RGF0YSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHF1ZXJ5RGF0YSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBxdWVyeURhdGEpIHtcclxuICAgICAgICAgICAgICAgIF9hZGRRdWVyeURhdGFUb1F1ZXJ5T2JqZWN0KHF1ZXJ5RGF0YVtrZXldLCB1cmxRdWVyeVRyYXZlcnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIF9hZGRRdWVyeURhdGFUb1F1ZXJ5T2JqZWN0KHF1ZXJ5RGF0YSwgdXJsUXVlcnlUcmF2ZXJzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIF9hZGRRdWVyeURhdGFUb1F1ZXJ5T2JqZWN0KHF1ZXJ5RGF0YSwgdXJsUXVlcnlUcmF2ZXJzZSkge1xyXG4gICAgICAgIGlmIChxdWVyeURhdGEgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh1cmxRdWVyeVRyYXZlcnNlW3F1ZXJ5RGF0YS5VcmxJZGVudGlmaWVyXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHVybFF1ZXJ5VHJhdmVyc2VbcXVlcnlEYXRhLlVybElkZW50aWZpZXJdID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVybFF1ZXJ5VHJhdmVyc2VbcXVlcnlEYXRhLlVybElkZW50aWZpZXJdLnB1c2gocXVlcnlEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfZ2V0VXJsUXVlcnlGcm9tUXVlcnlPYmplY3QodXJsUXVlcnlUcmF2ZXJzZSkge1xyXG4gICAgICAgIHZhciBfdXJscXVlcnkgPSAnJztcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdXJsUXVlcnlUcmF2ZXJzZSkge1xyXG4gICAgICAgICAgICB2YXIgX2lzVmFsdWVPbmx5ID0gKGtleS50b0xvd2VyQ2FzZSgpID09ICd7JHZhbHVlfScpO1xyXG4gICAgICAgICAgICB2YXIgX3ZhbHVlU2VwZXJhdG9yID0gX2lzVmFsdWVPbmx5ID8gJy8nIDogJzsnO1xyXG4gICAgICAgICAgICB2YXIgX3ZhbHVlU3RyaW5nID0gJyc7XHJcbiAgICAgICAgICAgIHZhciBNaW5NYXhPYmplY3QgPSBudWxsO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzdWJLZXkgaW4gdXJsUXVlcnlUcmF2ZXJzZVtrZXldKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXJsUXVlcnlUcmF2ZXJzZVtrZXldW3N1YktleV0uT3BlcmF0aW9uLnRvTG93ZXJDYXNlKCkgPT0gJ21pbicgfHwgdXJsUXVlcnlUcmF2ZXJzZVtrZXldW3N1YktleV0uT3BlcmF0aW9uLnRvTG93ZXJDYXNlKCkgPT0gJ21heCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoTWluTWF4T2JqZWN0ID09IG51bGwpIE1pbk1heE9iamVjdCA9IHsgTWluOiAwLCBNYXg6IDAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXJsUXVlcnlUcmF2ZXJzZVtrZXldW3N1YktleV0uT3BlcmF0aW9uLnRvTG93ZXJDYXNlKCkgPT0gJ21pbicpIE1pbk1heE9iamVjdC5NaW4gPSB1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5WYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXJsUXVlcnlUcmF2ZXJzZVtrZXldW3N1YktleV0uT3BlcmF0aW9uLnRvTG93ZXJDYXNlKCkgPT0gJ21heCcpIE1pbk1heE9iamVjdC5NYXggPSB1cmxRdWVyeVRyYXZlcnNlW2tleV1bc3ViS2V5XS5WYWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsUXVlcnlUcmF2ZXJzZVtrZXldW3N1YktleV0uT3BlcmF0aW9uLnRvTG93ZXJDYXNlKCkgPT0gJ3RoZXMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3ZhbHVlU3RyaW5nID0gdXJsUXVlcnlUcmF2ZXJzZVtrZXldW3N1YktleV0uVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC9bXjAtOUEtelxcXFwuXS9nLCAnOycpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vLnJlcGxhY2UoLzsrL2csICc7JylcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3ZhbHVlU3RyaW5nICs9IHVybFF1ZXJ5VHJhdmVyc2Vba2V5XVtzdWJLZXldLlZhbHVlLnRvU3RyaW5nKCkgKyAodXJsUXVlcnlUcmF2ZXJzZVtrZXldLmxlbmd0aCA+IDEgJiYgdXJsUXVlcnlUcmF2ZXJzZVtrZXldLmxlbmd0aCAtIDEgPiBzdWJLZXkgPyBfdmFsdWVTZXBlcmF0b3IgOiAnJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKE1pbk1heE9iamVjdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX2lzVmFsdWVPbmx5KVxyXG4gICAgICAgICAgICAgICAgICAgIF91cmxxdWVyeSA9ICcvJyArIE1pbk1heE9iamVjdC5NaW4gKyAoTWluTWF4T2JqZWN0Lk1heCAhPSAwID8gKCctJyArIE1pbk1heE9iamVjdC5NYXgpIDogJycpICsgX3VybHF1ZXJ5O1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIF91cmxxdWVyeSArPSAnLycgKyBrZXkgKyAnLScgKyBNaW5NYXhPYmplY3QuTWluICsgKE1pbk1heE9iamVjdC5NYXggIT0gMCA/ICgnLScgKyBNaW5NYXhPYmplY3QuTWF4KSA6ICcnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChfaXNWYWx1ZU9ubHkpXHJcbiAgICAgICAgICAgICAgICAgICAgX3VybHF1ZXJ5ID0gJy8nICsgX3ZhbHVlU3RyaW5nICsgX3VybHF1ZXJ5O1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIF91cmxxdWVyeSArPSAnLycgKyBrZXkgKyAnLScgKyBfdmFsdWVTdHJpbmc7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfdXJscXVlcnk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gX2dldFF1ZXJ5RGF0YUZvck9uZVNlYXJjaChzZW5kZXIsIGNvbnRyb2xzLCB0cmF2ZXJzZWRDb250cm9scykge1xyXG5cclxuICAgICAgICB2YXIgX3F1ZXJ5RGF0YUZvck9uZVNlYXJjaCA9IG5ldyBBcnJheSgpO1xyXG4gICAgICAgICQoc2VuZGVyKS5wYXJlbnQoKS5maW5kKCdbb25lc2VhcmNoaWRlbnRpZmllcl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIF9xdWVyeURhdGEgPSBfZ2V0UXVlcnlEYXRhVmFsdWVGb3JGaWVsZCh0aGlzKTtcclxuICAgICAgICAgICAgaWYgKF9xdWVyeURhdGEgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgIF9xdWVyeURhdGFGb3JPbmVTZWFyY2gucHVzaChfcXVlcnlEYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoX3F1ZXJ5RGF0YUZvck9uZVNlYXJjaC5sZW5ndGggPT0gMCB8fCBfY2hlY2tPbmVTZWFyY2hJc011bHRpU2VsZWN0KHNlbmRlcikpXHJcbiAgICAgICAgICAgIGlmIChfaXNOb3ROdWxsT3JFbXB0eShzZW5kZXIpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX29uZVNlYXJjaFRleHRTZWFyY2ggPSBfZ2V0UXVlcnlEYXRhVmFsdWVGb3JGaWVsZChzZW5kZXIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vbmVTZWFyY2hUZXh0U2VhcmNoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9xdWVyeURhdGFGb3JPbmVTZWFyY2g7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gX2NoZWNrT25lU2VhcmNoSXNNdWx0aVNlbGVjdChzZW5kZXIpIHtcclxuICAgICAgICByZXR1cm4gc2VuZGVyICE9IG51bGwgJiYgJChzZW5kZXIpLmF0dHIoJ211bHRpc2VsZWN0Ym94aWQnKSAhPSB1bmRlZmluZWQgJiYgJChzZW5kZXIpLmF0dHIoJ211bHRpc2VsZWN0Ym94aWQnKSAhPSBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIF9nZXRRdWVyeURhdGFGb3JGaWVsZChzZW5kZXIsIGNvbnRyb2xzLCB0cmF2ZXJzZWRDb250cm9scykge1xyXG4gICAgICAgIGlmICgkKHNlbmRlcikuYXR0cihcIm9uZXNlYXJjaG5hbWVcIikgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gX2dldFF1ZXJ5RGF0YUZvck9uZVNlYXJjaChzZW5kZXIsIGNvbnRyb2xzLCB0cmF2ZXJzZWRDb250cm9scyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICgkKHRyYXZlcnNlZENvbnRyb2xzKS5maW5kKHNlbmRlcikubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRyYXZlcnNlZENvbnRyb2xzID0gdHJhdmVyc2VkQ29udHJvbHMuYWRkKHNlbmRlcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX2dldFF1ZXJ5RGF0YVZhbHVlRm9yRmllbGQoc2VuZGVyKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyBjb25zb2xlLmxvZygnRXJyb3IgRm9yIEZpZWxkJyk7IH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gX2dldFF1ZXJ5RGF0YVZhbHVlRm9yRmllbGQoc2VuZGVyKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKCFfaXNOb3ROdWxsT3JFbXB0eShzZW5kZXIpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgRm9yIEZpZWxkIFZhbHVlIENoZWNrOicgKyAkKHNlbmRlcikuYXR0cihcInR5cGVcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBVcmxJZGVudGlmaWVyOiAoJChzZW5kZXIpLmF0dHIoJ3VybGlkZW50aWZpZXInKSAhPSBudWxsID8gJChzZW5kZXIpLmF0dHIoJ3VybGlkZW50aWZpZXInKSA6ICQoc2VuZGVyKS5hdHRyKCdvbmVzZWFyY2hpZGVudGlmaWVyJykpLCBWYWx1ZTogX2dldFZhbHVlKHNlbmRlciksIE9wZXJhdGlvbjogKCQoc2VuZGVyKS5hdHRyKCdvcGVyYXRpb24nKSAhPSBudWxsID8gJChzZW5kZXIpLmF0dHIoJ29wZXJhdGlvbicpIDogJycpIH07XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgRm9yIEZpZWxkIFZhbHVlOicgKyAkKHNlbmRlcikucHJvcChcInRhZ05hbWVcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBfZ2V0VmFsdWUoc2VuZGVyKSB7XHJcbiAgICAgICAgdmFyIF92YWx1ZSA9ICQoc2VuZGVyKS52YWwoKTtcclxuICAgICAgICB2YXIgX2lzT25lU2VhcmNoID0gdHlwZW9mICgkKHNlbmRlcikuYXR0cignb25lc2VhcmNoaWRlbnRpZmllcicpKSAhPSAndW5kZWZpbmVkJztcclxuICAgICAgICBpZiAodHlwZW9mIChfdmFsdWUpID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHZhciBfdmFsdWVzID0gJyc7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBfdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfdmFsdWVba2V5XSAhPSAnJylcclxuICAgICAgICAgICAgICAgICAgICBfdmFsdWVzICs9IChfdmFsdWVzID09ICcnID8gJycgOiAnOycpICsgX3ZhbHVlW2tleV0ucmVwbGFjZSgvXFwtL2csICdfJykucmVwbGFjZSgvXFwvL2csICchJykucmVwbGFjZSgvXFwsL2csICdAJykucmVwbGFjZSgvXFwmLywgJyQnKS5yZXBsYWNlKC9cXCMvZywgJyUyMycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfdmFsdWVzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICgkKHNlbmRlcikuYXR0cigndXJsaWRlbnRpZmllcicpICE9IG51bGwgJiYgJChzZW5kZXIpLmF0dHIoXCJ1cmxpZGVudGlmaWVyXCIpID09ICdwcmljZScpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBfdmFsdWUucmVwbGFjZSgvXFwsL2csICcnKS5yZXBsYWNlKC9cXC0vZywgJ18nKS5yZXBsYWNlKC9cXC8vZywgJyEnKS5yZXBsYWNlKC9cXCYvLCAnJCcpLnJlcGxhY2UoL1xcQC9nLCAnJykucmVwbGFjZSgvXFwjL2csICclMjMnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChfaXNPbmVTZWFyY2gpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZhbHVlLnJlcGxhY2UoL1xcLC9nLCAnQCcpLnJlcGxhY2UoL1xcLS9nLCAnXycpLnJlcGxhY2UoL1xcLy9nLCAnIScpLnJlcGxhY2UoL1xcJi8sICckJykucmVwbGFjZSgvXFwjL2csICclMjMnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92YWx1ZS5yZXBsYWNlKC9cXC0vZywgJ18nKS5yZXBsYWNlKC9cXC8vZywgJyEnKS5yZXBsYWNlKC9cXCYvLCAnJCcpLnJlcGxhY2UoL1xcIy9nLCAnJTIzJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gX3JlcGxhY2VXaGl0ZVNwYWNlKHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1xccy9nLCAnLScpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBfaXNOb3ROdWxsT3JFbXB0eShzZW5kZXIpIHtcclxuICAgICAgICBpZiAoJChzZW5kZXIpLmF0dHIoJ3R5cGUnKSAhPSBudWxsICYmICgkKHNlbmRlcikuYXR0cigndHlwZScpID09ICdyYWRpbycgfHwgJChzZW5kZXIpLmF0dHIoJ3R5cGUnKSA9PSAnY2hlY2tib3gnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VuZGVyICE9IG51bGwgJiYgc2VuZGVyICE9IHVuZGVmaW5lZCAmJiAkKHNlbmRlcikudmFsKCkudHJpbSgpICE9ICcnICYmICQoc2VuZGVyKVswXS5jaGVja2VkO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2VuZGVyICE9IG51bGwgJiYgc2VuZGVyICE9IHVuZGVmaW5lZCAmJiAkKHNlbmRlcikuaXMoJ3NlbGVjdCcpKSB7XHJcbiAgICAgICAgICAgIHZhciBfdmFsdWUgPSAkKHNlbmRlcikudmFsKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgKF92YWx1ZSkgPT0gJ29iamVjdCcgPyBfdmFsdWUgIT0gbnVsbCAmJiBfdmFsdWUgIT0gJycgOiBfdmFsdWUudHJpbSgpICE9ICcnO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gc2VuZGVyICE9IG51bGwgJiYgc2VuZGVyICE9IHVuZGVmaW5lZCAmJiAkKHNlbmRlcikudmFsKCkudHJpbSgpICE9ICcnO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1ZhbGlkRW1haWwodmFsdWUpIHtcclxuICAgIHZhciBlbWFpbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0eHRFbWFpbCcpO1xyXG4gICAgdmFyIGZpbHRlciA9IC9eKFthLXpBLVowLTlfXFwuXFwtXFwrXSkrXFxAKChbYS16QS1aMC05XFwtXSkrXFwuKSsoW2EtekEtWjAtOV17Miw0fSkrJC87XHJcblxyXG4gICAgaWYgKCFmaWx0ZXIudGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNOdWxsT3JFbXB0eSh2YWx1ZSkge1xyXG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09ICcnKSByZXR1cm4gdHJ1ZTtcclxuICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkgPT0gJycpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc05vdE51bGxPclplcm8oVmFsdWUpIHtcclxuICAgIHJldHVybiBWYWx1ZSAhPSBudWxsICYmIFZhbHVlICE9IHVuZGVmaW5lZCAmJiBWYWx1ZS5sZW5ndGggPiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc051bGxPckVtcHR5Q29udHJvbChjdHJsKSB7XHJcbiAgICBpZiAoY3RybCA9PSBudWxsIHx8IGN0cmwgPT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoJChjdHJsKS52YWwoKSA9PSBudWxsIHx8ICQoY3RybCkudmFsKCkgPT0gdW5kZWZpbmVkIHx8ICQoY3RybCkudmFsKCkgPT0gJycpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBPcGVuSVdCUG9wdXAodXJsLCBxdWVyeVN0cmluZywgd2l0aGluKSB7XHJcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkocXVlcnlTdHJpbmcpKSB1cmwgKz0gJz8nICsgcXVlcnlTdHJpbmc7XHJcbiAgICAkKCcjUEVSRk9STV9JV0JfQUNUSU9OX1RSSUdHRVInKS5hdHRyKCdocmVmJywgdXJsKTtcclxuICAgICQoJyNQRVJGT1JNX0lXQl9BQ1RJT05fVFJJR0dFUicpLnRyaWdnZXIoJ2NsaWNrJyk7XHJcblxyXG4gICAgaWYgKGlzTnVsbE9yRW1wdHkod2l0aGluKSkgd2l0aGluID0gMTAwMDtcclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQoJyNQRVJGT1JNX0lXQl9BQ1RJT05fVFJJR0dFUicpLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbiAgICB9LCB3aXRoaW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBDbG9zZUlXQlBvcHVwKCkge1xyXG4gICAgJCgnI01PREFMX0FDQ0VTUycpLmZvdW5kYXRpb24oJ3JldmVhbCcsICdjbG9zZScpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBPcGVuUG9wdXAod2l0aGluKSB7XHJcbiAgICBpZiAoaXNOdWxsT3JFbXB0eSh3aXRoaW4pKSB3aXRoaW4gPSAxMDAwO1xyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJCgnI1BFUkZPUk1fQUNUSU9OX1RSSUdHRVInKS50cmlnZ2VyKCdjbGljaycpO1xyXG4gICAgfSwgd2l0aGluKTtcclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIENsb3NlUG9wdXAoKSB7XHJcbiAgICAkKCcjTU9EQUxfQUNDRVNTJykuZm91bmRhdGlvbigncmV2ZWFsJywgJ2Nsb3NlJyk7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbmZ1bmN0aW9uIGdldEZvcm1hdHRlZFByaWNlKHByaWNlKSB7XHJcbiAgICB2YXIgbGFiZWwgPSBcIlwiO1xyXG4gICAgaWYgKHByaWNlLnRvU3RyaW5nKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGlmIChwcmljZS50b1N0cmluZygpLmxlbmd0aCA8PSA2ICYmIHByaWNlLnRvU3RyaW5nKCkubGVuZ3RoID4gMykge1xyXG4gICAgICAgICAgICBsYWJlbCA9IHByaWNlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIHByaWNlLnRvU3RyaW5nKCkubGVuZ3RoIC0gMykgKyBcIktcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKHByaWNlLnRvU3RyaW5nKCkubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICBsYWJlbCA9IHByaWNlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIHByaWNlLnRvU3RyaW5nKCkubGVuZ3RoIC0gNikgKyBcIi5cIiArIHByaWNlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKHByaWNlLnRvU3RyaW5nKCkubGVuZ3RoIC0gNiwgcHJpY2UudG9TdHJpbmcoKS5sZW5ndGggLSA1KSArIFwiTVwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gcHJpY2UudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxhYmVsID0gXCJOL0FcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBcIiRcIiArIGxhYmVsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc011bHRpTGluZ3VhbCgpIHtcclxuICAgIGlmICgkKFwiI01VTFRJTElOR1VBTFwiKSAhPSBudWxsICYmICQoXCIjTVVMVElMSU5HVUFMXCIpICE9IHVuZGVmaW5lZCAmJiAhaXNOdWxsT3JFbXB0eSgkKFwiI01VTFRJTElOR1VBTFwiKS52YWwoKSkgJiYgJChcIiNNVUxUSUxJTkdVQUxcIikudmFsKCkgPT0gXCIxXCIpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRMb2NhbGUoKSB7XHJcbiAgICBpZiAoaXNNdWx0aUxpbmd1YWwoKSkgcmV0dXJuICQoJyNMT0NBTEUnKS52YWwoKTsgZWxzZSByZXR1cm4gXCJcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gSW5pdERhdGFTb3VyY2VSZWxhdGlvbihzY3RybCwgcGN0cmwsIGFmdGVyTG9hZCkge1xyXG4gICAgdmFyIF9zb3VyY2UgPSAkKCcjJyArIHNjdHJsKTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBjdHJsLnNwbGl0KCcsJykubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgX3BhcmVudCA9ICQoJyMnICsgcGN0cmwuc3BsaXQoJywnKVtpXSk7XHJcblxyXG4gICAgICAgICQoX3BhcmVudCkuY2hhbmdlKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIF9wb3N0RGF0YSA9ICcnO1xyXG4gICAgICAgICAgICBfcG9zdERhdGEgKz0gJ1NvdXJjZT0nICsgJChfc291cmNlKS5hdHRyKCdTb3VyY2UnKTtcclxuICAgICAgICAgICAgX3Bvc3REYXRhICs9ICcmQXV0b1NvcnQ9JyArICQoX3NvdXJjZSkuYXR0cignQXV0b1NvcnQnKTtcclxuICAgICAgICAgICAgX3Bvc3REYXRhICs9ICcmRGVmYXVsdEl0ZW09JyArICQoX3NvdXJjZSkuYXR0cignRGVmYXVsdEl0ZW0nKTtcclxuXHJcbiAgICAgICAgICAgIGlmICgkKF9zb3VyY2UpLmF0dHIoJ1NvdXJjZScpID09IFwiWG1sXCIpIHtcclxuICAgICAgICAgICAgICAgIF9wb3N0RGF0YSArPSAnJlhtbEZpbGVDb2RlPScgKyAkKF9zb3VyY2UpLmF0dHIoJ1htbEZpbGVDb2RlJyk7XHJcbiAgICAgICAgICAgICAgICBfcG9zdERhdGEgKz0gJyZYbWxEYXRhTGlzdEtleT0nICsgJChfc291cmNlKS5hdHRyKCdYbWxEYXRhTGlzdEtleScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCQoX3NvdXJjZSkuYXR0cignU291cmNlJykgPT0gXCJEYXRhYmFzZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBfcG9zdERhdGEgKz0gJyZEYXRhT2JqZWN0TmFtZT0nICsgJChfc291cmNlKS5hdHRyKCdEYXRhT2JqZWN0TmFtZScpO1xyXG4gICAgICAgICAgICAgICAgX3Bvc3REYXRhICs9ICcmVXJsSWRlbnRpZmllcj0nICsgJChfc291cmNlKS5hdHRyKCdVcmxJZGVudGlmaWVyJyk7XHJcbiAgICAgICAgICAgICAgICBfcG9zdERhdGEgKz0gJyZBZGRpdGlvbmFsV2hlcmU9JyArICQoX3NvdXJjZSkuYXR0cignQWRkaXRpb25hbFdoZXJlJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBfcGFyZW50VmFsdWUgPSAnJztcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGN0cmwuc3BsaXQoJywnKS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9wYXJlbnRJbm5lciA9ICcjJyArIHBjdHJsLnNwbGl0KCcsJylbal07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGogPiAwKSBfcGFyZW50VmFsdWUgKz0gJywnO1xyXG4gICAgICAgICAgICAgICAgaWYgKCQoX3BhcmVudElubmVyKS52YWwoKSA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRWYWx1ZSArPSAkKF9wYXJlbnRJbm5lciArICcgaW5wdXQ6Y2hlY2tlZCcpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudFZhbHVlICs9ICQoX3BhcmVudElubmVyKS52YWwoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfcGFyZW50VmFsdWUgPSBfcGFyZW50VmFsdWUucmVwbGFjZSgndW5kZWZpbmVkJywgJycpO1xyXG4gICAgICAgICAgICBfcG9zdERhdGEgKz0gJyZQYXJlbnRWYWx1ZT0nICsgX3BhcmVudFZhbHVlO1xyXG5cclxuICAgICAgICAgICAgJChfc291cmNlKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgdXJsOiAnL3NlcnZpY2VzL2Fnb3JhUmVsYXRpb25hbERhdGFTb3VyY2UuYXNoeCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBfcG9zdERhdGEsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3VsdExpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKF9zb3VyY2UpLmdldCgwKS5vcHRpb25zLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICQuZWFjaChyZXN1bHRMaXN0LCBmdW5jdGlvbiAoaW5kZXgsIGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChfc291cmNlKS5nZXQoMCkub3B0aW9uc1skKF9zb3VyY2UpLmdldCgwKS5vcHRpb25zLmxlbmd0aF0gPSBuZXcgT3B0aW9uKGl0ZW0uVmFsdWUsIGl0ZW0uS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJChfc291cmNlKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWZ0ZXJMb2FkICE9IG51bGwpIGFmdGVyTG9hZCgkKF9zb3VyY2UpKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgNDA0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdTZXJ2aWNlIChhZ29yYVBhcmVudERhdGFTb3VyY2UpIG5vdCBmb3VuZCEnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gZW50ZXJGdWxsU2NyZWVuKCkge1xyXG4gICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbikge1xyXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgfSBlbHNlIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHtcclxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTtcclxuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBleGl0RnVsbFNjcmVlbigpIHtcclxuICAgIGlmIChkb2N1bWVudC5jYW5jZWxGdWxsU2NyZWVuKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuY2FuY2VsRnVsbFNjcmVlbigpO1xyXG4gICAgfSBlbHNlIGlmIChkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuKSB7XHJcbiAgICAgICAgZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpO1xyXG4gICAgfSBlbHNlIGlmIChkb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKSB7XHJcbiAgICAgICAgZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbigpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBTaG93TG9hZGluZygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKCQoXCJib2R5XCIpLmhhc0NsYXNzKCdpcy1idXN5JykpXHJcbiAgICAgICAgICAgICQoXCJib2R5XCIpLnJlbW92ZUNsYXNzKCdpcy1idXN5Jyk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAkKFwiYm9keVwiKS5hZGRDbGFzcygnaXMtYnVzeScpO1xyXG4gICAgfSBjYXRjaCAoZSkgeyB9XHJcbn1cclxuXHJcbnZhciBfYWdvcmFNc2dEZWxheSA9IG51bGw7XHJcbmZ1bmN0aW9uIFNob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUpIHtcclxuICAgIF9zaG93QWxlcnQobWVzc2FnZSwgZGVsYXksIGNzc0NsYXNzLCB0eXBlLCB0cnVlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gU2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSwgZW5hYmxlQXV0b0Nsb3NlKSB7XHJcbiAgICBfc2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSwgZW5hYmxlQXV0b0Nsb3NlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gU2hvd0FsZXJ0KG1lc3NhZ2UsIGRlbGF5LCBjc3NDbGFzcywgdHlwZSwgZW5hYmxlQXV0b0Nsb3NlLCBlbmFibGVPS0J1dHRvbikge1xyXG4gICAgX3Nob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIGVuYWJsZUF1dG9DbG9zZSwgZW5hYmxlT0tCdXR0b24pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBTaG93QWxlcnQobWVzc2FnZSwgZGVsYXksIGNzc0NsYXNzLCB0eXBlLCBlbmFibGVBdXRvQ2xvc2UsIGVuYWJsZU9LQnV0dG9uLCBBY3Rpb25VcmwpIHtcclxuICAgIF9zaG93QWxlcnQobWVzc2FnZSwgZGVsYXksIGNzc0NsYXNzLCB0eXBlLCBlbmFibGVBdXRvQ2xvc2UsIGVuYWJsZU9LQnV0dG9uLCBBY3Rpb25VcmwpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBTaG93QWxlcnQobWVzc2FnZSwgZGVsYXksIGNzc0NsYXNzLCB0eXBlLCBlbmFibGVBdXRvQ2xvc2UsIGVuYWJsZU9LQnV0dG9uLCBBY3Rpb25VcmwsIERpc2FibGVDbG9zZUJ1dHRvbikge1xyXG4gICAgX3Nob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIGVuYWJsZUF1dG9DbG9zZSwgZW5hYmxlT0tCdXR0b24sIEFjdGlvblVybCwgRGlzYWJsZUNsb3NlQnV0dG9uKTtcclxufVxyXG5cclxuZnVuY3Rpb24gX3Nob3dBbGVydChtZXNzYWdlLCBkZWxheSwgY3NzQ2xhc3MsIHR5cGUsIGVuYWJsZUF1dG9DbG9zZSwgZW5hYmxlT0tCdXR0b24sIEFjdGlvblVybCwgRGlzYWJsZUNsb3NlQnV0dG9uKSB7XHJcbiAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ2FsZXJ0X2JveF9sb2FkZWQnKTtcclxuICAgIHZhciBfbXNnQm94ID0gJCgnZGl2I2Fnb3JhQWxlcnRNZXNzYWdlQm94Jyk7XHJcbiAgICBpZiAoX21zZ0JveCA9PSBudWxsIHx8IF9tc2dCb3gubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgIF9tc2dCb3ggPSAkKCc8ZGl2PicpXHJcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2lkJywgJ2Fnb3JhQWxlcnRNZXNzYWdlQm94JylcclxuICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoY3NzQ2xhc3MpXHJcbiAgICAgICAgICAgICAgICAgICAgLmh0bWwoJzxkaXYgY2xhc3M9XCJtZXNzYWdlLWJvZHlcIj48c3BhbiBpZD1cIm1zZ1wiIGNsYXNzPVwibXNnXCI+PC9zcGFuPjxkaXYgaWQ9XCJidG5fb2tcIj48L2Rpdj48ZGl2IGlkPVwiYnRuX2Nsb3NlXCI+PC9kaXY+PC9kaXY+Jyk7XHJcbiAgICAgICAgJChfbXNnQm94KS5wcmVwZW5kVG8oJ2JvZHknKTtcclxuICAgIH1cclxuICAgICQoX21zZ0JveCkuYXR0cignY2xhc3MnLCAnJyk7XHJcbiAgICAkKF9tc2dCb3gpLmFkZENsYXNzKGNzc0NsYXNzKTtcclxuICAgICQoX21zZ0JveCkuc2hvdygpO1xyXG4gICAgJChfbXNnQm94KS5maW5kKCdzcGFuI21zZycpLmh0bWwobWVzc2FnZSk7XHJcbiAgICBpZiAoIURpc2FibGVDbG9zZUJ1dHRvbikgeyAkKF9tc2dCb3gpLmZpbmQoJ2RpdiNidG5fY2xvc2UnKS5odG1sKCc8YSBjbGFzcz1cImNsb3NlQnRuIHJpZ2h0XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBvbmNsaWNrPVwiamF2YXNjcmlwdDpDbG9zZUFsZXJ0KCk7XCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGVcIj48L2k+PC9hPicpOyB9XHJcbiAgICBpZiAoZW5hYmxlT0tCdXR0b24pIHtcclxuICAgICAgICAkKF9tc2dCb3gpLmZpbmQoJ2RpdiNidG5fb2snKS5odG1sKCc8YSAnICsgKGlzTm90TnVsbE9yWmVybyhBY3Rpb25VcmwpID8gJ2hyZWY9XCInICsgQWN0aW9uVXJsICsgJ1wiJyA6ICdocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIG9uY2xpY2s9XCJqYXZhc2NyaXB0OkNsb3NlQWxlcnQoKTtcIicpICsgJyAgdGl0bGU9XCJDbG9zZVwiIGNsYXNzPVwibWRsLWJ1dHRvbiBtZGwtYnV0dG9uLS1wcmltYXJ5IG1kbC1idXR0b24tLXJhaXNlZCBtZGwtanMtYnV0dG9uIG1kbC1qcy1yaXBwbGUtZWZmZWN0XCIgc3R5bGU9XCJhbGlnbi1jb250ZW50OiByaWdodDtcIj5PazwvYT4nKTtcclxuICAgIH1cclxuICAgIGNsZWFyVGltZW91dChfYWdvcmFNc2dEZWxheSk7XHJcbiAgICBpZiAoZW5hYmxlQXV0b0Nsb3NlKSB7XHJcbiAgICAgICAgaWYgKGRlbGF5ID09IG51bGwpIGRlbGF5ID0gNDAwMDtcclxuICAgICAgICBfYWdvcmFNc2dEZWxheSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBDbG9zZUFsZXJ0KCk7XHJcbiAgICAgICAgfSwgZGVsYXkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBDbG9zZUFsZXJ0KCkge1xyXG4gICAgJCgnYm9keScpLnJlbW92ZUNsYXNzKCdhbGVydF9ib3hfbG9hZGVkJyk7XHJcbiAgICAkKCdkaXYjYWdvcmFBbGVydE1lc3NhZ2VCb3gnKS5oaWRlKCk7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGlmICgkKFwiYm9keVwiKS5oYXNDbGFzcygnaXMtYnVzeScpKVxyXG4gICAgICAgICAgICAkKFwiYm9keVwiKS5yZW1vdmVDbGFzcygnaXMtYnVzeScpO1xyXG4gICAgfSBjYXRjaCAoZSkgeyB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFJlY2FsbENrZUlGcmFtZSgpIHtcclxuICAgICQoJ2ltZy5ja2VfaWZyYW1lJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJCh0aGlzKS5yZXBsYWNlV2l0aCh1bmVzY2FwZSgkKHRoaXMpLmF0dHIoJ2RhdGEtY2tlLXJlYWxlbGVtZW50JykpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBFbmFibGVOZWFyQnlTZWFyY2goY3RybCwgdXJsUHJlZml4LCB1cmxTdWZpeCwgcmFkaXVzLCBlcnJsYW5kaW5nVXJsKSB7XHJcbiAgICAkKGN0cmwpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQodGhpcykuY2xpY2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvLyBDaGVja2luZyB3aGV0aGVyIHRoZSBicm93c2VyIGhhdmUgZ2VvbG9jYXRpb24gc3VwcG9ydFxyXG4gICAgICAgICAgICBpZiAobmF2aWdhdG9yLmdlb2xvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHN1Y2Nlc3NIYW5kbGVyLCBlcnJvckhhbmRsZXIsIHsgdGltZW91dDogMjAwMDAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydChcIkdlb2xvY2F0aW9uIGZ1bmN0aW9uYWxpdHkgbm90IGF2YWlsYWJsZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdWNjZXNzSGFuZGxlcihwb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9sYXRpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZS50b1N0cmluZygpLnJlcGxhY2UoJy0nLCAnXycpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9sb25naXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlLnRvU3RyaW5nKCkucmVwbGFjZSgnLScsICdfJyk7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gdXJsUHJlZml4ICsgXCIvcmxhdC1cIiArIF9sYXRpdHVkZSArIFwiL3Jsb24tXCIgKyBfbG9uZ2l0dWRlICsgXCIvcmFkLVwiICsgcmFkaXVzICsgdXJsU3VmaXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZnVuY3Rpb24gZXJyb3JIYW5kbGVyKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlLmluZGV4T2YoXCJPbmx5IHNlY3VyZSBvcmlnaW5zIGFyZSBhbGxvd2VkXCIpID09IDApIHsgYWxlcnQoXCJZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmVcIik7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVyci5jb2RlID09IDEgLyogUEVSTUlTU0lPTl9ERU5JRUQgKi8pIHsgYWxlcnQoXCJQZXJtaXNzaW9uIGRlbmllZCB0byBhY2Nlc3MgZ2VvbG9jYXRpb25cIik7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVyci5jb2RlID09IDIgLyogUE9TSVRJT05fVU5BVkFJTEFCTEUgKi8pIHsgYWxlcnQoXCJZb3VyIGdlb2xvY2F0aW9uIGlzIG5vdCBhdmFpbGFibGVcIik7IH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVyci5jb2RlID09IDMgLyogVElNRU9VVCAqLykgeyBhbGVydChcIllvdXIgZ2VvbG9jYXRpb24gaXMgbm90IGF2YWlsYWJsZVwiKTsgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7IGFsZXJ0KFwiWW91ciBnZW9sb2NhdGlvbiBpcyBub3QgYXZhaWxhYmxlXCIpOyB9XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gZXJybGFuZGluZ1VybDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJhY2tUb1RvcChzZW5kZXIpIHtcclxuICAgIHZhciBfbmF2aWdhdG9yUG9zaXRpb24gPSAkKHNlbmRlcikuY2xvc2VzdCgnW2RhdGEtYmFjay10by10b3AtY29udGFpbmVyXScpLm9mZnNldCgpO1xyXG4gICAgaWYgKF9uYXZpZ2F0b3JQb3NpdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgICAgJCgnaHRtbCxib2R5JykuYW5pbWF0ZSh7IHNjcm9sbFRvcDogX25hdmlnYXRvclBvc2l0aW9uLnRvcCB9LCA3MDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiAwIH0sIDcwMCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFRvcFRvQm90dG9tKHNlbmRlcikge1xyXG4gICAgJCgnaHRtbCxib2R5JykuYW5pbWF0ZSh7IHNjcm9sbFRvcDogJCh3aW5kb3cpLmhlaWdodCgpIC0gJCgnI2Fnb3JhLWxheW91dC1oZWFkZXInKS5oZWlnaHQoKSB9LCA3MDApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBFbmFibGVHb29nbGVFdmVudFRyYWNraW5nKCkge1xyXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJ1tkYXRhLWdhLXRyYWNrXScsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgX3RyYWNrID0gJCh0aGlzKS5kYXRhKCdnYS10cmFjaycpO1xyXG4gICAgICAgICAgICBHb29nbGVBbmFseXRpY0xvZ0V2ZW50KF90cmFjayk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gR29vZ2xlQW5hbHl0aWNMb2dFdmVudCh0cmFjaykge1xyXG4gICAgaWYgKGdhID09IG51bGwgfHwgdHlwZW9mIChnYSkgPT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcclxuICAgIHZhciBfcGFyYW0gPSB0cmFjay5zcGxpdCgnLCcpO1xyXG4gICAgc3dpdGNoIChfcGFyYW0ubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICBnYSgnc2VuZCcsICdldmVudCcsIF9wYXJhbVswXSwgX3BhcmFtWzFdLCBfcGFyYW1bMl0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIGdhKCdzZW5kJywgJ2V2ZW50JywgX3BhcmFtWzBdLCBfcGFyYW1bMV0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gRW5hYmxlU3RpY2t5SGVhZGVyKHN0YXJ0UG9pbnQpIHtcclxuICAgIGlmIChzdGFydFBvaW50ID09IG51bGwpIHN0YXJ0UG9pbnQgPSAwO1xyXG5cclxuICAgIChmdW5jdGlvbiAoc2VuZGVyKSB7XHJcbiAgICAgICAgdmFyIF9vbGRWYWx1ZSA9IDA7XHJcbiAgICAgICAgdmFyICRjb250ZXh0ID0gJChzZW5kZXIpO1xyXG4gICAgICAgICQod2luZG93KS5vbignc2Nyb2xsJywgX2NoZWNrU3RhdGUpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9jaGVja1N0YXRlKCkge1xyXG4gICAgICAgICAgICB2YXIgX25ld1ZhbHVlID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpO1xyXG4gICAgICAgICAgICBpZiAoX25ld1ZhbHVlID4gc3RhcnRQb2ludCkgJGNvbnRleHQuYWRkQ2xhc3MoJ3Njcm9sbCcpOyBlbHNlICRjb250ZXh0LnJlbW92ZUNsYXNzKCdzY3JvbGwnKS5yZW1vdmVDbGFzcygnc2Nyb2xsLWRvd24nKS5yZW1vdmVDbGFzcygnc2Nyb2xsLXVwJyk7XHJcbiAgICAgICAgICAgIGlmIChfb2xkVmFsdWUgPiBfbmV3VmFsdWUpICRjb250ZXh0LmFkZENsYXNzKCdzY3JvbGwtdXAnKS5yZW1vdmVDbGFzcygnc2Nyb2xsLWRvd24nKTtcclxuICAgICAgICAgICAgaWYgKF9vbGRWYWx1ZSA8IF9uZXdWYWx1ZSkgJGNvbnRleHQuYWRkQ2xhc3MoJ3Njcm9sbC1kb3duJykucmVtb3ZlQ2xhc3MoJ3Njcm9sbC11cCcpO1xyXG4gICAgICAgICAgICBfb2xkVmFsdWUgPSBfbmV3VmFsdWU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBfY2hlY2tTdGF0ZSgpO1xyXG4gICAgfSkoJCgnYm9keScpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gQ2xvc2VBZ29yYURyb3BEb3duT25Cb2R5Q2xpY2soKSB7XHJcbiAgICAkKGRvY3VtZW50KS5vbigncmVzZXQnLCAnLmFnb3JhLWRyb3Bkb3duJywgbnVsbCwgZnVuY3Rpb24gKCkgeyB0cnkgeyB2YXIgc3RhdGUgPSAkKHRoaXMpLmNoaWxkcmVuKCdpbnB1dCcpLmdldCgwKTsgaWYgKHN0YXRlLmNoZWNrZWQpIHN0YXRlLmNoZWNrZWQgPSBmYWxzZTsgfSBjYXRjaCAoZSkgeyB9IH0pO1xyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyICR0YXJnZXQgPSAkKGUudGFyZ2V0KTtcclxuICAgICAgICAgICAgaWYgKCR0YXJnZXQuaXMoJ2lucHV0JykgfHwgJChkb2N1bWVudCkuZmluZCgkdGFyZ2V0KS5sZW5ndGg9PTApIHJldHVybjtcclxuICAgICAgICAgICAgdmFyICRkcm9wRG93bmNvbnRhaW5lciA9ICR0YXJnZXQuY2xvc2VzdCgnLmFnb3JhLWRyb3Bkb3duJyk7XHJcbiAgICAgICAgICAgIGlmICgkZHJvcERvd25jb250YWluZXIubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICQoJy5hZ29yYS1kcm9wZG93bicpLnRyaWdnZXIoJ3Jlc2V0Jyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoJGRyb3BEb3duY29udGFpbmVyLmhhc0NsYXNzKCdhY3Rpb25zJykgJiYgISR0YXJnZXQuaGFzQ2xhc3MoJ2Fnb3JhLWRyb3Bkb3duLWhhbmRsZScpICYmICRkcm9wRG93bmNvbnRhaW5lci5jaGlsZHJlbignaW5wdXQ6Y2hlY2tlZCcpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAkZHJvcERvd25jb250YWluZXIudHJpZ2dlcigncmVzZXQnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnLmFnb3JhLWRyb3Bkb3duJykubm90KCRkcm9wRG93bmNvbnRhaW5lcikudHJpZ2dlcigncmVzZXQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7IH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gTWRsUmVsb2FkQ29udHJvbFN0YXRlKGl0ZW0sIHBhcmVudCwgbm9BY3Rpb24pIHtcclxuICAgIGlmIChub0FjdGlvbiA9PSBudWxsIHx8IG5vQWN0aW9uID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIG5vQWN0aW9uID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAkdGhpcyA9IGl0ZW07XHJcbiAgICAkcGFyZW50ID0gcGFyZW50O1xyXG4gICAgdmFyICRwYXJ0bmVyID0gJChcIiNcIiArICRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXBhcnRuZXJcIikpO1xyXG4gICAgdmFyICR2YWx1ZUJpbmQgPSAkKCcjJyArICRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXZhbHVlLWJpbmRcIikpO1xyXG4gICAgdmFyICRzZWFyY2hWaWV3ID0gJCgnIycgKyAkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12aWV3XCIpKTtcclxuICAgIHN3aXRjaCAoJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2hcIikpIHtcclxuICAgICAgICBjYXNlIFwiU2VsZWN0Qm94XCI6XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAkcGFyZW50LnBhcmVudCgpLmZpbmQoJ1tkYXRhLXNlYXJjaC1lbmFibGUtZm9yXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ21kbC1jZWxsLS1oaWRlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCdpbnB1dDpjaGVja2JveCcpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vQWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmNsb3Nlc3QoJy5tZGwtanMtY2hlY2tib3gnKS5sZW5ndGggPiAwKSAkKHRoaXMpLmNsb3Nlc3QoJy5tZGwtanMtY2hlY2tib3gnKVswXS5NYXRlcmlhbENoZWNrYm94LnVuY2hlY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnc2VsZWN0IG9wdGlvbicpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUF0dHIoJ3NlbGVjdGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLm1kbC1qcy1zZWxlY3RmaWVsZCcpWzBdLk1hdGVyaWFsU2VsZWN0ZmllbGQubWRsRG93bmdyYWRlXygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgeyBjb25zb2xlLmxvZyhlcnIubWVzc2FnZSk7IH1cclxuICAgICAgICAgICAgJCgnW2RhdGEtc2VhcmNoLWVuYWJsZS1mb3I9XCInICsgJHBhcmVudC52YWwoKSArICdcIl0nKS5yZW1vdmVDbGFzcygnbWRsLWNlbGwtLWhpZGUnKTtcclxuICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJyAoJyArICRwYXJlbnQucGFyZW50KCkuZmluZCgnW2RhdGEtc2VhcmNoLWVuYWJsZS1mb3I9XCInICsgJHBhcmVudC52YWwoKSArICdcIl0nKS5maW5kKFwiaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZFwiKS5sZW5ndGggKyAnKScpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiZ3JvdXBcIjpcclxuICAgICAgICAgICAgdmFyICRncm91cFBhcmVudCA9ICR0aGlzLmNsb3Nlc3QoJ1tkYXRhLXNlYXJjaC1ncm91cF0nKTtcclxuICAgICAgICAgICAgJHNlYXJjaFZpZXcgPSAkKCcjJyArICRncm91cFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdmlld1wiKSk7XHJcbiAgICAgICAgICAgIHZhciBfY291bnQgPSAkZ3JvdXBQYXJlbnQuZmluZCgnW2RhdGEtc2VhcmNoPVwiZ3JvdXBcIl0gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCcpLmxlbmd0aDtcclxuICAgICAgICAgICAgdmFyIF9yZWFkTGlzdCA9IHt9O1xyXG5cclxuICAgICAgICAgICAgJGdyb3VwUGFyZW50LmZpbmQoJ1tkYXRhLXNlYXJjaD1cImdyb3VwXCJdIFtkYXRhLXR5cGU9XCJkcm9wZG93blwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyICRfdGVtcCA9ICQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICBpZigkX3RlbXAudmFsKCkhPVwiXCIgJiYgdHlwZW9mKCRfdGVtcC5kYXRhKCdkZWZhdWx0LWl0ZW0nKSE9J3VuZGVmaW5lZCcpICYmICRfdGVtcC52YWwoKSE9JF90ZW1wLmRhdGEoJ2RlZmF1bHQtaXRlbScpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIF9jb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICRncm91cFBhcmVudC5maW5kKCdbZGF0YS1zZWFyY2g9XCJncm91cFwiXSBpbnB1dFt0eXBlPXRleHRdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgJF90ZW1wID0gJCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIHZhciBfa2V5ID0gJF90ZW1wLmF0dHIoJ3VybGlkZW50aWZpZXInKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05vdE51bGxPclplcm8oJF90ZW1wLnZhbCgpKSAmJiB0eXBlb2YgKF9yZWFkTGlzdFtfa2V5XSkgPT0gJ3VuZGVmaW5lZCcpXHJcbiAgICAgICAgICAgICAgICAgICAgX3JlYWRMaXN0W19rZXldID0gX2NvdW50Kys7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAkZ3JvdXBQYXJlbnQuZmluZCgnW2RhdGEtc2VhcmNoPVwiZ3JvdXBcIl0gaW5wdXRbdHlwZT1oaWRkZW5dW29uZXNlYXJjaGlkZW50aWZpZXJdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgJF90ZW1wID0gJCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIHZhciBfa2V5ID0gJF90ZW1wLmF0dHIoJ29uZXNlYXJjaGlkZW50aWZpZXInKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05vdE51bGxPclplcm8oJF90ZW1wLnZhbCgpKSAmJiB0eXBlb2YgKF9yZWFkTGlzdFtfa2V5XSkgPT0gJ3VuZGVmaW5lZCcpXHJcbiAgICAgICAgICAgICAgICAgICAgX3JlYWRMaXN0W19rZXldID0gX2NvdW50Kys7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCRncm91cFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKSArICcgKCcgKyBfY291bnQgKyAnKScpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiY2hlY2tMaXN0XCI6XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoJHBhcmVudC5hdHRyKCdkYXRhLXNlYXJjaC1jaGlsZCcpICE9IG51bGwgJiYgJHBhcmVudC5hdHRyKCdkYXRhLXNlYXJjaC1jaGlsZCcpID09IFwidHJ1ZVwiICYmICRwYXJlbnQucGFyZW50cygpLmZpbmQoJ1tkYXRhLXNlYXJjaC1wYXJlbnQ9XCJ0cnVlXCJdJykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKSArICcgKCcgKyAkcGFyZW50LnBhcmVudCgpLmZpbmQoXCJpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkXCIpLmxlbmd0aCArICcpJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKSArICcgKCcgKyAkcGFyZW50LmZpbmQoXCJpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkXCIpLmxlbmd0aCArICcpJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpICsgJyAoJyArICRwYXJlbnQuZmluZChcImlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWRcIikubGVuZ3RoICsgJyknKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic2luZ2xlSXRlbVwiOlxyXG4gICAgICAgICAgICBpZiAoJHRoaXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgJHBhcmVudC5jaGlsZHJlbigpLnJlbW92ZUNsYXNzKFwic2VsZWN0XCIpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2xhYmVsUG9zaXRpb24gPSAkcGFyZW50LmF0dHIoJ2RhdGEtc2VhcmNoLW5hbWUtbGFiZWwtcG9zaXRpb24nKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX3NlbGVjdE9wdGlvbiA9IHR5cGVvZiAoJHBhcmVudC5hdHRyKCdkYXRhLXNlbGVjdCcpKSAhPSB1bmRlZmluZWQgJiYgJHBhcmVudC5hdHRyKCdkYXRhLXNlbGVjdCcpICE9IG51bGwgJiYgJHBhcmVudC5hdHRyKCdkYXRhLXNlbGVjdCcpICE9ICcnID8gJHBhcmVudC5hdHRyKCdkYXRhLXNlbGVjdCcpIDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfbGFiZWxQb3NpdGlvbiAhPT0gdHlwZW9mIHVuZGVmaW5lZCAmJiBfbGFiZWxQb3NpdGlvbiAhPT0gZmFsc2UgJiYgX2xhYmVsUG9zaXRpb24gPT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfc2VsZWN0T3B0aW9uID09ICdsYWJlbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKSArICR0aGlzLmF0dHIoXCJsYWJlbFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNoVmlldy5hdHRyKCdkYXRhLXNlbGVjdGVkLXZhbHVlJywgJHRoaXMuYXR0cihcInZhbHVlXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKCRwYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIikgKyAkdGhpcy5hdHRyKFwidmFsdWVcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9zZWxlY3RPcHRpb24gPT0gJ2xhYmVsJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkdGhpcy5hdHRyKFwibGFiZWxcIikgKyAkcGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hWaWV3LmF0dHIoJ2RhdGEtc2VsZWN0ZWQtdmFsdWUnLCAkdGhpcy5hdHRyKFwidmFsdWVcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoJHRoaXMuYXR0cihcInZhbHVlXCIpICsgJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3Nob3dDb3VudE9ubHkgPSAkcGFyZW50LmF0dHIoJ2RhdGEtc2VhcmNoLW5hbWUtbGFiZWwtc2hvd0NvdW50T25seScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChfc2hvd0NvdW50T25seSkgIT0gJ3VuZGVmaW5lZCcgJiYgX3Nob3dDb3VudE9ubHkgIT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKSArICcgKCcgKyAkdGhpcy5sZW5ndGggKyAnKScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7IGNvbnNvbGUubG9nKGVyci5tZXNzYWdlKTsgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3NraXBMYWJlbEFwcGVuZExpc3QgPSAkcGFyZW50LmF0dHIoJ2RhdGEtc2VhcmNoLW5hbWUtbGFiZWwtc2tpcC1mb3InKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX3NraXBMYWJlbEFwcGVuZExpc3QubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgX3NraXBMYWJlbEFwcGVuZExpc3RbaV0gIT0gdW5kZWZpbmVkICYmIF9za2lwTGFiZWxBcHBlbmRMaXN0W2ldICE9IG51bGwgJiYgX3NraXBMYWJlbEFwcGVuZExpc3RbaV0gPT0gJHRoaXMuYXR0cihcInZhbHVlXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkdGhpcy5hdHRyKFwidmFsdWVcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7IGNvbnNvbGUubG9nKGVyci5tZXNzYWdlKTsgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICRzZWFyY2hWaWV3Lmh0bWwoJHRoaXMuYXR0cihcInZhbHVlXCIpICsgJHBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5hZGRDbGFzcyhcInNlbGVjdFwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChJc05vdE51bGwoJHRoaXMuYXR0cihcInZhbHVlXCIpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICR2YWx1ZUJpbmQuYXR0cihcInZhbHVlXCIsICR0aGlzLmF0dHIoXCJ2YWx1ZVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICR2YWx1ZUJpbmQuYXR0cihcInZhbHVlXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJvbmVTZWFyY2hcIjpcclxuICAgICAgICAgICAgJHNlYXJjaFZpZXcuaHRtbCgkdGhpcy5hdHRyKCdkYXRhLXNlYXJjaC1uYW1lLWxhYmVsJykgKyAnICgnICsgKCQoJy5tdWx0aXNlbGVjdC1jb250ZXh0IC5hZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY29udCcpLmxlbmd0aCkgKyAnKScpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwicmFuZ2VcIjpcclxuICAgICAgICAgICAgJHBhcnRuZXIucmVtb3ZlQ2xhc3MoXCJzLWQtblwiKTtcclxuICAgICAgICAgICAgJHBhcmVudC5hZGRDbGFzcyhcInMtZC1uXCIpO1xyXG4gICAgICAgICAgICBpZiAoJHRoaXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKElzTm90TnVsbCgkdGhpcy5hdHRyKFwidmFsdWVcIikpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHZhbHVlQmluZC52YWwoJHRoaXMuYXR0cihcInZhbHVlXCIpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHZhbHVlQmluZC52YWwoXCJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCR2YWx1ZUJpbmQuY2xvc2VzdCgnLm1kbC1qcy10ZXh0ZmllbGQnKS5sZW5ndGggPiAwICYmICR2YWx1ZUJpbmQuY2xvc2VzdCgnLm1kbC1qcy10ZXh0ZmllbGQnKS5nZXQoMCkuTWF0ZXJpYWxUZXh0ZmllbGQpICR2YWx1ZUJpbmQuY2xvc2VzdCgnLm1kbC1qcy10ZXh0ZmllbGQnKS5nZXQoMCkuTWF0ZXJpYWxUZXh0ZmllbGQuY2hlY2tEaXJ0eSgpO1xyXG4gICAgICAgICAgICAkc2VhcmNoVmlldy5odG1sKEJpbmRSYW5nZVZpZXcoJHBhcmVudCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufVxyXG5cclxuXHJcbi8vU2VhcmNoIENvbnRyb2xlXHJcbmZ1bmN0aW9uIEJpbmRSYW5nZVZpZXcoUGFyZW50KSB7XHJcbiAgICB2YXIgX21pbk1heCA9IG5ldyBnZXRNaW5NYXgoUGFyZW50KTtcclxuICAgIGlmIChJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkgJiYgcGFyc2VJbnQoX21pbk1heC5NaW4pID4gcGFyc2VJbnQoX21pbk1heC5NYXgpKSB7XHJcbiAgICAgICAgYWxlcnQoXCJNaW5pbXVtIHZhbHVlIHNob3VsZCBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIHZhbHVlXCIpO1xyXG4gICAgICAgICQoJyMnICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS5hdHRyKFwidmFsdWVcIiwgXCJcIik7XHJcbiAgICAgICAgJChcIiNcIiArICQoJyMnICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1wYXJ0bmVyXCIpKS5hdHRyKFwiZGF0YS1zZWFyY2gtdmFsdWUtYmluZFwiKSkuYXR0cihcInZhbHVlXCIsIFwiXCIpO1xyXG4gICAgICAgIHJldHVybiBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN3aXRjaCAoJChcIiNcIiArIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdmFsdWUtYmluZFwiKSkuYXR0cihcIm9wZXJhdGlvblwiKSkge1xyXG4gICAgICAgICAgICBjYXNlIFwibWluXCI6XHJcbiAgICAgICAgICAgICAgICB2YXIgX21pblZhbHVlID0gX21pbk1heC5NaW47XHJcbiAgICAgICAgICAgICAgICB2YXIgJHBhcnRuZXIgPSAkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1wYXJ0bmVyXCIpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mICgkcGFydG5lci5kYXRhKCdpcy1pbml0JykpID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuZGF0YSgnaW5pdC12YWx1ZScsICRwYXJ0bmVyLmh0bWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuZGF0YSgnaXMtaW5pdCcsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChJc05vdE51bGwoX21pblZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLmVtcHR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9pc1NlbGVjdCA9ICQoXCIjXCIgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXBhcnRuZXJcIikpLmlzKCdzZWxlY3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFnTmFtZSA9IF9pc1NlbGVjdCA/ICdvcHRpb24nIDogJ2xpJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzU2VsZWN0KSAkcGFydG5lci5hcHBlbmQoJzxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj4nKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDU7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdHlwZVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInByaWNlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yYW5nZVRvSW5jcmVtZW50ID0gX2dldEluY3JlbWVudFZhbHVlKF9taW5WYWx1ZSwgUGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWluVmFsdWUgPSBfZ2V0Um91bmRPZlZhbHVlKF9taW5WYWx1ZSwgX3JhbmdlVG9JbmNyZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9taW5WYWx1ZSA9IChwYXJzZUludChfbWluVmFsdWUpICsgX3JhbmdlVG9JbmNyZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLmFwcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWluVmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPiQnICsgX21pblZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvKFxcZCkoPz0oXFxkXFxkXFxkKSsoPyFcXGQpKS9nLCBcIiQxLFwiKSArICc8L3NwYW4+PC8nICsgdGFnTmFtZSArICc+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwieWVhclwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9taW5WYWx1ZSA9IChwYXJzZUludChfbWluVmFsdWUpICsgNSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuYXBwZW5kKCc8JyArIHRhZ05hbWUgKyAnIHZhbHVlPVwiJyArIF9taW5WYWx1ZSArICdcIiB0YWJpbmRleD1cIjIyXCI+PHNwYW4+JyArIF9taW5WYWx1ZSArICc8L3NwYW4+PC8nICsgdGFnTmFtZSArICc+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYmVkXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21pblZhbHVlID0gKHBhcnNlSW50KF9taW5WYWx1ZSkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5hcHBlbmQoJzwnICsgdGFnTmFtZSArICcgdmFsdWU9XCInICsgX21pblZhbHVlICsgJ1wiIHRhYmluZGV4PVwiMjJcIj48c3Bhbj4nICsgX21pblZhbHVlICsgJzwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJiYXRoXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21pblZhbHVlID0gKHBhcnNlSW50KF9taW5WYWx1ZSkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5hcHBlbmQoJzwnICsgdGFnTmFtZSArICcgdmFsdWU9XCInICsgX21pblZhbHVlICsgJ1wiIHRhYmluZGV4PVwiMjJcIj48c3Bhbj4nICsgX21pblZhbHVlICsgJzwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm90TnVsbE9yWmVybyhQYXJlbnQuYXR0cignZGF0YS1kZWZhdWx0LWluY3JlbWVudCcpKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9taW5WYWx1ZSA9IChwYXJzZUludChfbWluVmFsdWUpICsgcGFyc2VJbnQoUGFyZW50LmF0dHIoJ2RhdGEtZGVmYXVsdC1pbmNyZW1lbnQnKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5hcHBlbmQoJzwnICsgdGFnTmFtZSArICcgdmFsdWU9XCInICsgX21pblZhbHVlICsgJ1wiIHRhYmluZGV4PVwiMjJcIj48c3Bhbj4nICsgX21pblZhbHVlICsgJzwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuYXBwZW5kKCc8JyArIHRhZ05hbWUgKyAnIHZhbHVlPVwiMFwiIHRhYmluZGV4PVwiMjJcIj48c3Bhbj5Bbnk8L3NwYW4+PC8nICsgdGFnTmFtZSArICc+Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICgkcGFydG5lci5kYXRhKCdpcy1pbml0JykpICE9ICd1bmRlZmluZWQnICYmICRwYXJ0bmVyLmRhdGEoJ2lzLWluaXQnKSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLmh0bWwoJHBhcnRuZXIuZGF0YSgnaW5pdC12YWx1ZScpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1heFwiOlxyXG4gICAgICAgICAgICAgICAgdmFyIF9tYXhWYWx1ZSA9IF9taW5NYXguTWF4O1xyXG4gICAgICAgICAgICAgICAgdmFyICRwYXJ0bmVyID0gJChcIiNcIiArIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mICgkcGFydG5lci5kYXRhKCdpcy1pbml0JykpID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuZGF0YSgnaW5pdC12YWx1ZScsICRwYXJ0bmVyLmh0bWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuZGF0YSgnaXMtaW5pdCcsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKElzTm90TnVsbChfbWF4VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2lzU2VsZWN0ID0gJChcIiNcIiArIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSkuaXMoJ3NlbGVjdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWdOYW1lID0gX2lzU2VsZWN0ID8gJ29wdGlvbicgOiAnbGknO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNTZWxlY3QpICRwYXJ0bmVyLmFwcGVuZCgnPG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmFuZ2VUb0RlY3JlbWVudCA9IF9nZXREZWNyZW1lbnRWYWx1ZShfbWF4VmFsdWUsIFBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgX21heFZhbHVlID0gX2dldFJvdW5kT2ZWYWx1ZShfbWF4VmFsdWUsIF9yYW5nZVRvRGVjcmVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDU7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtdHlwZVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInByaWNlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21heFZhbHVlID0gKHBhcnNlSW50KF9tYXhWYWx1ZSkgLSBfcmFuZ2VUb0RlY3JlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXhWYWx1ZSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRuZXIucHJlcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWF4VmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPiQnICsgX21heFZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvKFxcZCkoPz0oXFxkXFxkXFxkKSsoPyFcXGQpKS9nLCBcIiQxLFwiKSArICc8L3NwYW4+PC8nICsgdGFnTmFtZSArICc+Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInllYXJcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWF4VmFsdWUgPSAocGFyc2VJbnQoX21heFZhbHVlKSAtIDUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbWF4VmFsdWUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLmFwcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWF4VmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPicgKyBfbWF4VmFsdWUgKyAnPC9zcGFuPjwvJyArIHRhZ05hbWUgKyAnPicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJiZWRcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWF4VmFsdWUgPSAocGFyc2VJbnQoX21heFZhbHVlKSAtIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbWF4VmFsdWUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLmFwcGVuZCgnPCcgKyB0YWdOYW1lICsgJyB2YWx1ZT1cIicgKyBfbWF4VmFsdWUgKyAnXCIgdGFiaW5kZXg9XCIyMlwiPjxzcGFuPicgKyBfbWF4VmFsdWUgKyAnPC9zcGFuPjwvJyArIHRhZ05hbWUgKyAnPicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJiYXRoXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21heFZhbHVlID0gKHBhcnNlSW50KF9tYXhWYWx1ZSkgLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX21heFZhbHVlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5hcHBlbmQoJzwnICsgdGFnTmFtZSArICcgdmFsdWU9XCInICsgX21heFZhbHVlICsgJ1wiIHRhYmluZGV4PVwiMjJcIj48c3Bhbj4nICsgX21heFZhbHVlICsgJzwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05vdE51bGxPclplcm8oUGFyZW50LmF0dHIoJ2RhdGEtZGVmYXVsdC1kZWNyZW1lbnQnKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzU2V0TWF4VmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOdWxsT3JFbXB0eShpc1NldE1heFZhbCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tYXhWYWx1ZSA9IF9taW5NYXguTWF4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXRNYXhWYWwgPSAnWWVzJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWF4VmFsdWUgPSAocGFyc2VJbnQoX21heFZhbHVlKSAtIHBhcnNlSW50KFBhcmVudC5hdHRyKCdkYXRhLWRlZmF1bHQtZGVjcmVtZW50JykpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXhWYWx1ZSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLnByZXBlbmQoJzwnICsgdGFnTmFtZSArICcgdmFsdWU9XCInICsgX21heFZhbHVlICsgJ1wiIHRhYmluZGV4PVwiMjJcIj48c3Bhbj4nICsgX21heFZhbHVlICsgJzwvc3Bhbj48LycgKyB0YWdOYW1lICsgJz4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAkcGFydG5lci5wcmVwZW5kKCc8JyArIHRhZ05hbWUgKyAnIHZhbHVlPVwiMFwiIHRhYmluZGV4PVwiMjJcIj48c3Bhbj5Bbnk8L3NwYW4+PC8nICsgdGFnTmFtZSArICc+Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICgkcGFydG5lci5kYXRhKCdpcy1pbml0JykpICE9ICd1bmRlZmluZWQnICYmICRwYXJ0bmVyLmRhdGEoJ2lzLWluaXQnKSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0bmVyLmh0bWwoJHBhcnRuZXIuZGF0YSgnaW5pdC12YWx1ZScpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoIChQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXR5cGVcIikpIHtcclxuICAgICAgICAgICAgY2FzZSBcInByaWNlXCI6XHJcbiAgICAgICAgICAgICAgICBpZiAoSXNOb3ROdWxsKF9taW5NYXguTWluKSAmJiBJc05vdE51bGwoX21pbk1heC5NYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9mb3JtYXR0b1ByaWNlKF9taW5NYXguTWluKSArIFwiLVwiICsgX2Zvcm1hdHRvUHJpY2UoX21pbk1heC5NYXgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChJc05vdE51bGwoX21pbk1heC5NaW4pICYmICFJc05vdE51bGwoX21pbk1heC5NYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9mb3JtYXR0b1ByaWNlKF9taW5NYXguTWluKSArIFwiK1wiO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghSXNOb3ROdWxsKF9taW5NYXguTWluKSAmJiBJc05vdE51bGwoX21pbk1heC5NYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiPFwiICsgX2Zvcm1hdHRvUHJpY2UoX21pbk1heC5NYXgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJiZWRcIjpcclxuICAgICAgICAgICAgICAgIGlmIChJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX21pbk1heC5NaW4gKyBcIi1cIiArIF9taW5NYXguTWF4O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChJc05vdE51bGwoX21pbk1heC5NaW4pICYmICFJc05vdE51bGwoX21pbk1heC5NYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9taW5NYXguTWluICsgXCIrXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFJc05vdE51bGwoX21pbk1heC5NaW4pICYmIElzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCI8XCIgKyBfbWluTWF4Lk1heDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtbmFtZS1sYWJlbFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYmF0aFwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKElzTm90TnVsbChfbWluTWF4Lk1pbikgJiYgSXNOb3ROdWxsKF9taW5NYXguTWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfbWluTWF4Lk1pbiArIFwiLVwiICsgX21pbk1heC5NYXg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKElzTm90TnVsbChfbWluTWF4Lk1pbikgJiYgIUlzTm90TnVsbChfbWluTWF4Lk1heCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX21pbk1heC5NaW4gKyBcIitcIjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIUlzTm90TnVsbChfbWluTWF4Lk1pbikgJiYgSXNOb3ROdWxsKF9taW5NYXguTWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIjxcIiArIF9taW5NYXguTWF4O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC1uYW1lLWxhYmVsXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBpZiAoSXNOb3ROdWxsKF9taW5NYXguTWluKSAmJiBJc05vdE51bGwoX21pbk1heC5NYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9taW5NYXguTWluICsgXCItXCIgKyBfbWluTWF4Lk1heDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoSXNOb3ROdWxsKF9taW5NYXguTWluKSAmJiAhSXNOb3ROdWxsKF9taW5NYXguTWF4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfbWluTWF4Lk1pbiArIFwiK1wiO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghSXNOb3ROdWxsKF9taW5NYXguTWluKSAmJiBJc05vdE51bGwoX21pbk1heC5NYXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiPFwiICsgX21pbk1heC5NYXg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLW5hbWUtbGFiZWxcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIF9mb3JtYXR0b1ByaWNlKG51bSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRm9ybWF0dCA6ICcgKyBudW0pO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9sYWJlbCA9IG51bTtcclxuICAgICAgICAgICAgICAgIGlmIChudW0gPT0gbnVsbCB8fCBudW0gPT0gdW5kZWZpbmVkIHx8IG51bSA9PSAnJykgX2xhYmVsID0gJzAnO1xyXG4gICAgICAgICAgICAgICAgaWYgKG51bSA+PSAxMDAwMDAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2xhYmVsID0gJyQnICsgKF9sYWJlbCAvIDEwMDAwMDApLnRvRml4ZWQoMikucmVwbGFjZSgvXFwuPzArJC8sIFwiXCIpICsgJ00nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobnVtID49IDEwMDApIHtcclxuICAgICAgICAgICAgICAgICAgICBfbGFiZWwgPSAnJCcgKyAoX2xhYmVsIC8gMTAwMCkudG9GaXhlZCgyKS5yZXBsYWNlKC9cXC4/MCskLywgXCJcIikgKyAnSyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfbGFiZWwgPSAnJCcgKyBfbGFiZWwucmVwbGFjZSgvXFwuMCskLywgXCJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX2xhYmVsO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIF9nZXRJbmNyZW1lbnRWYWx1ZSh2YWx1ZSwgcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3N0YWdlID0gJChwYXJlbnQpLmRhdGEoJ3N0YWdlJyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgX21pblZhbHVlVGV4dCA9ICQocGFyZW50KS5kYXRhKCdtaW4tdmFsdWUnKTtcclxuICAgICAgICAgICAgICAgIHZhciBfbWluVmFsdWUgPSAoUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC10eXBlXCIpID09IFwiYmVkXCIgfHwgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC10eXBlXCIpID09IFwiYmF0aFwiICkgPyAxIDogMTAwMDAwMDtcclxuICAgICAgICAgICAgICAgIHZhciBfc3RhZ2VWYWx1ZSA9IChQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXR5cGVcIikgPT0gXCJiZWRcIikgfHwgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC10eXBlXCIpID09IFwiYmF0aFwiID8gMSA6IDEwMDAwMDtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KF9zdGFnZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9zdGFnZVZhbHVlID0gcGFyc2VJbnQoX3N0YWdlLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoX21pblZhbHVlKSAhPSAndW5kZWZpbmVkJyAmJiBfbWluVmFsdWUgIT0gbnVsbCAmJiBfbWluVmFsdWUgIT0gJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9taW5WYWx1ZSA9IHBhcnNlSW50KF9taW5WYWx1ZVRleHQsIDEwKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAoUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC10eXBlXCIpID09IFwiYmVkXCIgfHwgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC10eXBlXCIpID09IFwiYmF0aFwiKSA/IDEgOiAocGFyc2VJbnQodmFsdWUpIDwgX21pblZhbHVlID8gMjUwMDAgOiAocGFyc2VJbnQodmFsdWUpIDwgX21pblZhbHVlICogMTAgPyA1MDAwMCA6IF9zdGFnZVZhbHVlKSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgICByZXR1cm4gMTAwMDAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX2dldERlY3JlbWVudFZhbHVlKHZhbHVlLCBwYXJlbnQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciBfc3RhZ2UgPSAkKHBhcmVudCkuZGF0YSgnc3RhZ2UnKTtcclxuICAgICAgICAgICAgICAgIHZhciBfc3RhZ2VWYWx1ZSA9IChQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXR5cGVcIikgPT0gXCJiZWRcIiB8fCBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXR5cGVcIikgPT0gXCJiYXRoXCIpID8gMSA6IDEwMDAwMDtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KF9zdGFnZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9zdGFnZVZhbHVlID0gcGFyc2VJbnQoX3N0YWdlLCAxMCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAoUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC10eXBlXCIpID09IFwiYmVkXCIgfHwgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC10eXBlXCIpID09IFwiYmF0aFwiKSA/IDEgOiAocGFyc2VJbnQodmFsdWUpIDwgMTAwMDAwID8gMTAwMDAgOiAocGFyc2VJbnQodmFsdWUpIDwgMTAwMDAwMCA/IDUwMDAwIDogX3N0YWdlVmFsdWUpKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIHJldHVybiAxMDAwMDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBfZ2V0Um91bmRPZlZhbHVlKHZhbHVlLCBpbmNyZW1lbnRhbFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKHBhcnNlSW50KHZhbHVlKSAtIChwYXJzZUludCh2YWx1ZSkgJSBpbmNyZW1lbnRhbFZhbHVlKSkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE1pbk1heChQYXJlbnQpIHtcclxuICAgIHZhciBfbWluVmFsdWUgPSAwLCBfbWF4VmFsdWUgPSAwO1xyXG4gICAgc3dpdGNoICgkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS5hdHRyKFwib3BlcmF0aW9uXCIpKSB7XHJcbiAgICAgICAgY2FzZSBcIm1pblwiOlxyXG4gICAgICAgICAgICBfbWluVmFsdWUgPSAkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS52YWwoKTtcclxuICAgICAgICAgICAgX21heFZhbHVlID0gJChcIiNcIiArICQoXCIjXCIgKyBQYXJlbnQuYXR0cihcImRhdGEtc2VhcmNoLXBhcnRuZXJcIikpLmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS52YWwoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm1heFwiOlxyXG4gICAgICAgICAgICBfbWluVmFsdWUgPSAkKFwiI1wiICsgJChcIiNcIiArIFBhcmVudC5hdHRyKFwiZGF0YS1zZWFyY2gtcGFydG5lclwiKSkuYXR0cihcImRhdGEtc2VhcmNoLXZhbHVlLWJpbmRcIikpLnZhbCgpO1xyXG4gICAgICAgICAgICBfbWF4VmFsdWUgPSAkKFwiI1wiICsgUGFyZW50LmF0dHIoXCJkYXRhLXNlYXJjaC12YWx1ZS1iaW5kXCIpKS52YWwoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBNaW46IF9taW5WYWx1ZSwgTWF4OiBfbWF4VmFsdWUgfTtcclxufVxyXG5cclxuYWdvcmEoZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gTnVtZXJpYyBvbmx5IGNvbnRyb2wgaGFuZGxlclxyXG4gICAgalF1ZXJ5LmZuLkZvcmNlTnVtZXJpY09ubHkgPVxyXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmtleWRvd24oZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gZS5jaGFyQ29kZSB8fCBlLmtleUNvZGUgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5zaGlmdEtleSkga2V5ID0gMFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFsbG93IGJhY2tzcGFjZSwgdGFiLCBkZWxldGUsIGVudGVyLCBhcnJvd3MsIG51bWJlcnMgYW5kIGtleXBhZCBudW1iZXJzIE9OTFlcclxuICAgICAgICAgICAgICAgICAgICAvLyBob21lLCBlbmQsIHBlcmlvZCwgYW5kIG51bXBhZCBkZWNpbWFsXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09IDggfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09IDkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09IDEzIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9PSA0NiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPT0gMTEwIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9PSAxOTAgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleSA+PSAzNSAmJiBrZXkgPD0gNDApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXkgPj0gNDggJiYga2V5IDw9IDU3KSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ID49IDk2ICYmIGtleSA8PSAxMDUpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuXHJcbiAgICAkKFwiW2RhdGEtbnVtZXJpYy1vbmx5XVwiKS5Gb3JjZU51bWVyaWNPbmx5KCk7XHJcblxyXG4gICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQoXCJbZGF0YS1udW1lcmljLW9ubHldXCIpLkZvcmNlTnVtZXJpY09ubHkoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFsbG93IGJvb2ttYXJrIGNvbnNpZGVyaW5nIHRoZSBwYWdlIGhlYWRlciB3aXRoIGFuaW1hdGUgc2Nyb2xsXHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtcGFnZS1zY3JvbGxdJywgX3Njcm9sbEZvclBhZ2VTY3JvbGwpO1xyXG4gICAgJChkb2N1bWVudCkub24oJ3RhcCcsICdbZGF0YS1wYWdlLXNjcm9sbF0nLCBfc2Nyb2xsRm9yUGFnZVNjcm9sbCk7XHJcbiAgICBmdW5jdGlvbiBfc2Nyb2xsRm9yUGFnZVNjcm9sbCgpIHtcclxuICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgICAgIHZhciAkcmVmZXJlbmNlZEl0ZW0gPSAkKCcjJyArICR0aGlzLmRhdGEoJ3BhZ2Utc2Nyb2xsJykpO1xyXG4gICAgICAgIHZhciBfaXRlbVBvc2l0aW9uID0gJHJlZmVyZW5jZWRJdGVtICE9IHVuZGVmaW5lZCAmJiAkcmVmZXJlbmNlZEl0ZW0gIT0gbnVsbCAmJiAkcmVmZXJlbmNlZEl0ZW0ubGVuZ3RoID4gMCA/ICRyZWZlcmVuY2VkSXRlbS5vZmZzZXQoKS50b3AgOiAwO1xyXG4gICAgICAgIHZhciBfb2Zmc2V0ID0gMDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgX3ZhbHVlID0gJHRoaXMuZGF0YSgncGFnZS1zY3JvbGwtb2Zmc2V0Jyk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKF92YWx1ZSkgIT0gJ3VuZGVmaW5lZCcgJiYgX3ZhbHVlICE9ICcnKSBfb2Zmc2V0ID0gcGFyc2VJbnQoX3ZhbHVlKTtcclxuICAgICAgICAgICAgZWxzZSBfb2Zmc2V0ID0gJCgnI2Fnb3JhLWxheW91dC1oZWFkZXInKS5oZWlnaHQoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAkKFwiaHRtbCwgYm9keVwiKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiAoX2l0ZW1Qb3NpdGlvbiAtIF9vZmZzZXQpIH0sIDE1MDApO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciAkcmVmZXJlbmNlZFRhYkl0ZW0gPSAkKCcjJyArICR0aGlzLmRhdGEoJ3BhZ2Utc2Nyb2xsLXRhYi1pZCcpKTtcclxuICAgICAgICAgICAgJHJlZmVyZW5jZWRUYWJJdGVtLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBCdXR0b24gdG8gbW92ZSB0b3Agb2YgdGhlIHBhZ2VcclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1iYWNrLXRvLXRvcF0nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgQmFja1RvVG9wKHRoaXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJChkb2N1bWVudCkub24oJ3RhcCcsICdbZGF0YS1iYWNrLXRvLXRvcF0nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgQmFja1RvVG9wKHRoaXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQnV0dG9uIHRvIG1vdmUgYm90dG9tIG9mIHRoZSBwYWdlXHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtYmFjay10by1kb3duXScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBUb3BUb0JvdHRvbSh0aGlzKTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKCd0YXAnLCAnW2RhdGEtYmFjay10by1kb3duXScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBUb3BUb0JvdHRvbSh0aGlzKTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgICAvKiBUaGlzIGNvZGUgd2lsbCBhbGxvdyB0byBnaXZlIGEgcmVkaXJlY3QgdXJsIHRvIGEgY29udGFpbmVyXHJcbiAgICAgICAgZGF0YS1ocmVmPVwiPHVybD5cIlxyXG4gICAgICAgIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAqL1xyXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJ1tkYXRhLWhyZWZdJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoJChlLnRhcmdldCkuY2xvc2VzdCgnW2RhdGEtbm9uLWNsaWNrLWNvbnRlbnRdJykubGVuZ3RoID4gMCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghaXNOdWxsT3JFbXB0eSgkKHRoaXMpLmRhdGEoJ2hyZWYnKSkpIHtcclxuICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5KCQodGhpcykuZGF0YSgndGFyZ2V0JykpKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cub3BlbigkKHRoaXMpLmRhdGEoJ2hyZWYnKSwgJCh0aGlzKS5kYXRhKCd0YXJnZXQnKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gJCh0aGlzKS5kYXRhKCdocmVmJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG4vKnJlY3Vyc3Rpb24gZm9yIGZpcmUgZXZlbnQgd2hlbiBjbGFzcyBuYW1lIGlzIGNoYW5nZWQqL1xyXG5mdW5jdGlvbiBPbkNsYXNzQmVoYXZpb3JDaGFuZ2UoY3RybCwgaGFuZGxlcikge1xyXG4gICAgaWYgKCFJc051bGxvckVtcHR5KCQoY3RybCkuYXR0cignb2xkQ2xhc3NOYW1lJykpICYmICQoY3RybCkuYXR0cignb2xkQ2xhc3NOYW1lJykgIT0gJChjdHJsKS5hdHRyKCdjbGFzcycpKSBoYW5kbGVyKCk7XHJcbiAgICAkKGN0cmwpLmF0dHIoJ29sZENsYXNzTmFtZScsICQoY3RybCkuYXR0cignY2xhc3MnKSk7XHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgT25DbGFzc0JlaGF2aW9yQ2hhbmdlKGN0cmwsIGhhbmRsZXIpOyB9LCAxMDApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBBbmltYXRlUGxhY2Vob2xkZXJUZXh0KGN0cmwsIHBodCwgaWR4KSB7XHJcbiAgICB2YXIgX3BodCA9IHBodDtcclxuICAgIGlmIChpZHggPT0gMCkge1xyXG4gICAgICAgIF9waHQgPSBjdHJsLmF0dHIoJ3BsYWNlaG9sZGVyJyk7XHJcbiAgICAgICAgY3RybC5hdHRyKCdwbGFjZWhvbGRlcicsICcnKTtcclxuICAgIH1cclxuICAgIGlmIChpZHggPT0gX3BodC5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjdHJsLmF0dHIoJ3BsYWNlaG9sZGVyJywgX3BodC5zdWJzdHIoMCwgKytpZHgpKTsgXHJcbiAgICAgICAgQW5pbWF0ZVBsYWNlaG9sZGVyVGV4dChjdHJsLCBfcGh0LCBpZHgpO1xyXG4gICAgfSwgMTUwKTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIEFkZFJlYWRNb3JlKG1pbkxpbWl0LCBsYmxNb3JlLCBsYmxMZXNzKSB7XHJcbiAgICAvL1RoaXMgbGltaXQgeW91IGNhbiBzZXQgYWZ0ZXIgaG93IG11Y2ggY2hhcmFjdGVycyB5b3Ugd2FudCB0byBzaG93IFJlYWQgTW9yZS5cclxuICAgIHZhciBjYXJMbXQgPSBtaW5MaW1pdDtcclxuICAgIC8vIFRleHQgdG8gc2hvdyB3aGVuIHRleHQgaXMgY29sbGFwc2VkXHJcbiAgICB2YXIgcmVhZE1vcmVUeHQgPSBsYmxNb3JlO1xyXG4gICAgLy8gVGV4dCB0byBzaG93IHdoZW4gdGV4dCBpcyBleHBhbmRlZFxyXG4gICAgdmFyIHJlYWRMZXNzVHh0ID0gbGJsTGVzcztcclxuXHJcblxyXG4gICAgLy9UcmF2ZXJzZSBhbGwgc2VsZWN0b3JzIHdpdGggdGhpcyBjbGFzcyBhbmQgbWFudXB1bGF0ZSBIVE1MIHBhcnQgdG8gc2hvdyBSZWFkIE1vcmVcclxuICAgICQoXCIuYWRkUmVhZE1vcmVcIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCQodGhpcykuZmluZChcIi5maXJzdFNlY1wiKS5sZW5ndGgpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIGFsbHN0ciA9ICQodGhpcykudGV4dCgpO1xyXG4gICAgICAgIGlmIChhbGxzdHIubGVuZ3RoID4gY2FyTG10KSB7XHJcbiAgICAgICAgICAgIHZhciBmaXJzdFNldCA9IGFsbHN0ci5zdWJzdHJpbmcoMCwgY2FyTG10KTtcclxuICAgICAgICAgICAgdmFyIHNlY2RIYWxmID0gYWxsc3RyLnN1YnN0cmluZyhjYXJMbXQsIGFsbHN0ci5sZW5ndGgpO1xyXG4gICAgICAgICAgICB2YXIgc3RydG9hZGQgPSBmaXJzdFNldCArIFwiPHNwYW4gY2xhc3M9J1NlY1NlYyc+XCIgKyBzZWNkSGFsZiArIFwiPC9zcGFuPjxzcGFuIGNsYXNzPSdyZWFkTW9yZScgIHRpdGxlPSdDbGljayB0byBTaG93IE1vcmUnPlwiICsgcmVhZE1vcmVUeHQgKyBcIjwvc3Bhbj48c3BhbiBjbGFzcz0ncmVhZExlc3MnIHRpdGxlPSdDbGljayB0byBTaG93IExlc3MnPlwiICsgcmVhZExlc3NUeHQgKyBcIjwvc3Bhbj5cIjtcclxuICAgICAgICAgICAgJCh0aGlzKS5odG1sKHN0cnRvYWRkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgICAvL1JlYWQgTW9yZSBhbmQgUmVhZCBMZXNzIENsaWNrIEV2ZW50IGJpbmRpbmdcclxuICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCIucmVhZE1vcmUsLnJlYWRMZXNzXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoXCIuYWRkUmVhZE1vcmVcIikudG9nZ2xlQ2xhc3MoXCJzaG93bGVzc2NvbnRlbnQgc2hvd21vcmVjb250ZW50XCIpO1xyXG4gICAgfSk7XHJcbn1cclxuIiwi77u/YWdvcmEoZnVuY3Rpb24gKCkge1xyXG4gICAgJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIltkYXRhLW1vZGFsZGlhbG9nXVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHRyaWdnZXJFbGVtZW50ID0gJCh0aGlzKTtcclxuICAgICAgICBpZiAodHJpZ2dlckVsZW1lbnQucHJvcCgnZGlzYWJsZWQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm47IFxyXG4gICAgICAgIH1cclxuICAgICAgICB0cmlnZ2VyRWxlbWVudC5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyRWxlbWVudC5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcclxuICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAkKHRoaXMpLkFnb3JhRGlhbG9nTW9kYWwoeyBBZnRlckxvYWQ6ICQodGhpcykuYXR0cignZGF0YS1tb2RhbGRpYWxvZy1hZnRlckxvYWQnKSB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCJbZGF0YS1tb2RhbGRpYWxvZy1jbG9zZV1cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQodGhpcykuQWdvcmFEaWFsb2dNb2RhbCh7IENsb3NlTW9kYWw6IHRydWUgfSk7XHJcbiAgICAgICAgdmFyIHNlbmRlciA9ICQodGhpcyk7XHJcbiAgICAgICAgaWYgKHNlbmRlci5kYXRhKCdtb2RhbGRpYWxvZy1jbG9zZScpID09ICdjbGVhcicpXHJcbiAgICAgICAgQ2xlYXJGb3JtdmFsKCdbZGF0YS1yZXF1ZXN0XScpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIltkYXRhLW1vZGFsZGlhbG9nLWNsb3NlLWZvcm1dXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKHRoaXMpLkFnb3JhRGlhbG9nTW9kYWwoeyBDbG9zZU1vZGFsOiB0cnVlLCBBZnRlckxvYWQ6ICQodGhpcykuYXR0cignZGF0YS1tb2RhbGRpYWxvZy1hZnRlckxvYWQnKSB9KTtcclxuICAgIH0pO1xyXG59KTtcclxuXHJcbihmdW5jdGlvbiAoJCkge1xyXG4gICAgLy9Gb3JtYXQgOiBkYXRhLW1vZGFsZGlhbG9nPVwiXCIgZGF0YS1tb2RhbGRpYWxvZy1pZD1cIlwiIGRhdGEtbW9kYWxkaWFsb2ctYWpheD1cInRydWVcIiBkYXRhLW1vZGFsZGlhbG9nLXNyYz1cIlwiXHJcbiAgICAkLmZuLkFnb3JhRGlhbG9nTW9kYWwgPSBmdW5jdGlvbiAob3B0aW9ucykgeyByZXR1cm4gbmV3IGFnb3JhRGlhbG9nKHRoaXMsIG9wdGlvbnMpOyB9O1xyXG4gICAgZnVuY3Rpb24gYWdvcmFEaWFsb2coc2VuZGVyLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIF9kZWZhdWx0cyA9IHtcclxuICAgICAgICAgICAgU2VydmljZVVybDogJycsXHJcbiAgICAgICAgICAgIE1vZGFsSWQ6ICdJQlBtb2RhbGNvbnRhaW5lcicsXHJcbiAgICAgICAgICAgIFBhcmFtczogbnVsbCxcclxuICAgICAgICAgICAgSHRtbDogbnVsbCxcclxuICAgICAgICAgICAgUGFyZW50Q3NzOiBudWxsLFxyXG4gICAgICAgICAgICBFbmFibGVDbG9zZUJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgICAgRW5hYmxlTG9hZGVyOiB0cnVlLFxyXG4gICAgICAgICAgICBFbmFibGVBamF4SHRtbExvYWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBIaWRlQ2xvc2VCdXR0b246IGZhbHNlLFxyXG4gICAgICAgICAgICBDbG9zZU1vZGFsOiBmYWxzZSxcclxuICAgICAgICAgICAgQ2xvc2VXaGVuVXNlclByZXNzRXNjYXBlOiB0cnVlLFxyXG4gICAgICAgICAgICBUcmFuc2l0aW9uOiAnRmFkZUluJywgLyogRmFkZUluLCBBcHBlbmQgKi9cclxuICAgICAgICAgICAgQmVmb3JlTG9hZDogbnVsbCxcclxuICAgICAgICAgICAgQWZ0ZXJMb2FkOiBudWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgX29wdGlvbnMgPSAkLmV4dGVuZChfZGVmYXVsdHMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuQ2xvc2VNb2RhbCkge1xyXG4gICAgICAgICAgICAkKHNlbmRlcikuY2xvc2VzdCgnLmFnb3JhLW1kbC1kYXRhLWRpYWxvZy1jb250YWluZXInKS50cmlnZ2VyKCdkaXNwb3NlJyk7XHJcbiAgICAgICAgICAgICQoc2VuZGVyKS5jbG9zZXN0KCcuYWdvcmEtbWRsLWRhdGEtZGlhbG9nLWNvbnRhaW5lcicpLnJlbW92ZUNsYXNzKCdwb3B1cC1vcGVuJyk7XHJcbiAgICAgICAgICAgICQoc2VuZGVyKS5jbG9zZXN0KCcuYWdvcmEtbWRsLWRhdGEtZGlhbG9nLWNvbnRhaW5lcicpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAvLyQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkudHJpZ2dlcignZGlzcG9zZScpO1xyXG4gICAgICAgICAgICAvLyQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkucmVtb3ZlQ2xhc3MoJ3BvcHVwLW9wZW4nKTtcclxuICAgICAgICAgICAgLy8kKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ3BvcHVwLWFjdGl2ZScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuQWZ0ZXJMb2FkKSB7XHJcbiAgICAgICAgICAgIF9vcHRpb25zLkFmdGVyTG9hZCA9IGV2YWwoXCIoZnVuY3Rpb24oKSB7IFwiICsgX29wdGlvbnMuQWZ0ZXJMb2FkICsgXCIoXCIgKyBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctaWRcIikgK1wiKTsgfSlcIik7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUxvYWRlcikgU2hvd0xvYWRpbmcoKTtcclxuXHJcbiAgICAgICAgTG9hZE9wdGlvbnMoKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gTG9hZE9wdGlvbnMoKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1zcmNcIikpKSBfb3B0aW9ucy5TZXJ2aWNlVXJsID0gc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLXNyY1wiKTtcclxuICAgICAgICAgICAgaWYgKElzTm90TnVsbChzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctYWpheFwiKSkpIF9vcHRpb25zLkVuYWJsZUFqYXhIdG1sTG9hZCA9IHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1hamF4XCIpO1xyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1QYXJlbnRDc3NcIikpKSBfb3B0aW9ucy5QYXJlbnRDc3MgPSBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctUGFyZW50Q3NzXCIpO1xyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1DbG9zZVdoZW5Vc2VyUHJlc3NFc2NhcGVcIikpKSBfb3B0aW9ucy5DbG9zZVdoZW5Vc2VyUHJlc3NFc2NhcGUgPSAoc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLUNsb3NlV2hlblVzZXJQcmVzc0VzY2FwZVwiKSA9PSAndHJ1ZScpO1xyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1IaWRlQ2xvc2VCdXR0b25cIikpKSBfb3B0aW9ucy5IaWRlQ2xvc2VCdXR0b24gPSAoc2VuZGVyLmF0dHIoXCJkYXRhLW1vZGFsZGlhbG9nLUhpZGVDbG9zZUJ1dHRvblwiKSA9PSAndHJ1ZScpO1xyXG4gICAgICAgICAgICBpZiAoSXNOb3ROdWxsKHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1pZFwiKSkpIF9vcHRpb25zLk1vZGFsSWQgPSBzZW5kZXIuYXR0cihcImRhdGEtbW9kYWxkaWFsb2ctaWRcIik7XHJcbiAgICAgICAgICAgIEdldEh0bWwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIEdldEh0bWwoKSB7XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUFqYXhIdG1sTG9hZCkge1xyXG4gICAgICAgICAgICAgICAgLy9SZW1vdmUgaWYgdGhlIGNvbnRhaW5lciBpcyBhbHJlYWR5IG9wZW4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICQoJyMnICsgX29wdGlvbnMuTW9kYWxJZCkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAvL0dldCBIdG1sIEZyb20gVGhlIFNlcnZpY2UgVXJsXHJcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogX29wdGlvbnMuU2VydmljZVVybCxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAncG9zdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdodG1sJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBfb3B0aW9ucy5QYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW9ucy5IdG1sID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJpbmRIdG1sKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNob3dBbGVydCgnVW5rbm93biBFcnJvci4gUGxlYXNlIHRyeSBsYXRlciEnLCAzMDAwLCAnYWxlcnRfYm94JywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVMb2FkZXIpIFNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd0FsZXJ0KCdTZXJ2aWNlIG5vdCBmb3VuZCEnLCAzMDAwLCAnYWxlcnRfYm94JywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlTG9hZGVyKSBTaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQWZ0ZXJMb2FkKSBfb3B0aW9ucy5BZnRlckxvYWQoKTtcclxuICAgICAgICAgICAgICAgIF9vcHRpb25zLkh0bWwgPSAkKCcjJyArIHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1pZFwiKSkuY2xvbmUoKS53cmFwKCcjJyArIHNlbmRlci5hdHRyKFwiZGF0YS1tb2RhbGRpYWxvZy1pZFwiKSkuaHRtbCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBCaW5kSHRtbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gQmluZEh0bWwoKSB7XHJcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5IdG1sICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIC8vQ3JlYXRlIHBvcHVwIGNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgJCgnPGRpdiBpZD1cIicgKyBfb3B0aW9ucy5Nb2RhbElkICsgJ1wiIGNsYXNzPVwiYWdvcmEtbWRsLWRhdGEtZGlhbG9nLWNvbnRhaW5lciAnICsgX29wdGlvbnMuUGFyZW50Q3NzICsgJ1wiPjxkaXYgY2xhc3M9XCJhZ29yYS1tZGwtZGF0YS1kaWFsb2ctY29udGFpbmVyLWJvZHlcIj4nICsoIV9vcHRpb25zLkhpZGVDbG9zZUJ1dHRvbiA/ICc8ZGl2IGRhdGEtbW9kYWxkaWFsb2ctY2xvc2U9XCJcIiBjbGFzcz1cIm1kbC1jbG9zZVwiPjwvZGl2PicgOiAnJykgKyBfb3B0aW9ucy5IdG1sICsgJzwvZGl2PjxkaXYgaWQ9XCJwb3B1cFwiIGNsYXNzPVwibWRsLWpzLXNuYWNrYmFyIG1kbC1zbmFja2JhclwiPjxkaXYgY2xhc3M9XCJtZGwtc25hY2tiYXJfX3RleHRcIj48L2Rpdj48YnV0dG9uIGFyaWEtbGFiZWw9XCJidXR0b25cIiBjbGFzcz1cIm1kbC1zbmFja2Jhcl9fYWN0aW9uXCIgdHlwZT1cImJ1dHRvblwiPjwvYnV0dG9uPjwvZGl2PiA8L2Rpdj4nKS5hcHBlbmRUbyhcImJvZHlcIik7XHJcbiAgICAgICAgICAgICAgICAvLyQoJy5hZ29yYS1tZGwtZGF0YS1kaWFsb2ctY29udGFpbmVyJykuY3NzKCd0b3AnLCAoJCh3aW5kb3cpLnNjcm9sbFRvcCgpKSArICdweCcpO1xyXG4gICAgICAgICAgICAgICAgJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5hZGRDbGFzcygncG9wdXAtb3BlbicpO1xyXG4gICAgICAgICAgICAgICAgJCgnYm9keScpLmFkZENsYXNzKCdwb3B1cC1hY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIC8vQmluZCBIdG1sXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlTG9hZGVyKSBTaG93TG9hZGluZygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghKHR5cGVvZiAoY29tcG9uZW50SGFuZGxlcikgPT0gJ3VuZGVmaW5lZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SGFuZGxlci51cGdyYWRlRG9tKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5maW5kKCcubWRsLXRleHRmaWVsZC0tZmxvYXRpbmctbGFiZWwgaW5wdXQubWRsLXRleHRmaWVsZF9faW5wdXQ6bm90KFtwbGFjZWhvbGRlcl0pJykuYXR0cihcInBsYWNlaG9sZGVyXCIsIFwiICBcIik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vaWYgKHJlQ2FwdGNoYUFnb3JhKSB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAkKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLmZpbmQoJ1tkYXRhLXJlY2FwdGNoYS1hZ29yYV0nKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIC8vICAgIHJlQ2FwdGNoYUFnb3JhLmluaXQocmVDYXB0Y2hhQWdvcmEucmVDYXB0Y2hhQXBwSUQsIHJlQ2FwdGNoYUFnb3JhLnRva2VuLCBmYWxzZSwgMSk7XHJcbiAgICAgICAgICAgICAgICAvL31cclxuICAgICAgICAgICAgICB3aW5kb3cuYWdMYW5ndWFnZS5yZWZyZXNoTG9jYWxlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQoZG9jdW1lbnQpLmtleWRvd24oZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSBcIjI3XCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5DbG9zZVdoZW5Vc2VyUHJlc3NFc2NhcGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjJyArIF9vcHRpb25zLk1vZGFsSWQpLnJlbW92ZUNsYXNzKCdwb3B1cC1vcGVuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBfb3B0aW9ucy5Nb2RhbElkKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ3BvcHVwLWFjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0pKGpRdWVyeSk7XHJcblxyXG5mdW5jdGlvbiBDbG9zZVBvcHVwKCkge1xyXG4gICAgJCgnW2RhdGEtbW9kYWxkaWFsb2ctY2xvc2VdJykudHJpZ2dlcihcImNsaWNrXCIpO1xyXG59Iiwi77u/XHJcblxyXG5cclxuICAgIHdpbmRvdy5hZ1JlcXVlc3QgPSB7XHJcbiAgICAgICAgR0VUOiBhc3luYyBmdW5jdGlvbiAoc2VydmljZVVybCwgZGF0YSkge1xyXG4gICAgICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcgKyAoKHF1ZXJ5U3RyaW5nICE9ICcnID8gJyYnIDogJycpICsga2V5ICsgJz0nICsgZGF0YVtrZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXJ2aWNlVXJsICs9IHNlcnZpY2VVcmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycgKyBxdWVyeVN0cmluZztcclxuICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBhd2FpdCBmZXRjaChzZXJ2aWNlVXJsLCB7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgICAgICBjYWNoZTogXCJuby1jYWNoZVwiLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0Lmpzb24oKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIFBPU1Q6IGFzeW5jIGZ1bmN0aW9uIChzZXJ2aWNlVXJsLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIHZhciBmb3JtRGF0YSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIGRhdGFba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBhd2FpdCBmZXRjaChzZXJ2aWNlVXJsLCB7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICAgICAgY2FjaGU6IFwibm8tY2FjaGVcIixcclxuICAgICAgICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QuanNvbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuXHJcbi8vTGF6eSBsb2FkZXJcclxuKGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgIGFzeW5jIGZ1bmN0aW9uIGZpbmRMYXp5KCkge1xyXG4gICAgICAgIGxldCBpdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXNyY106bm90KC5hZy1sYXp5KTpub3QoLm5vLWFnKTpub3QoW2RhdGEtc3JjKj1cInt7XCJdKScpO1xyXG5cclxuICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xyXG4gICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoJ2FnLWxhenknKTtcclxuICAgICAgICAgICAgdmFyIGFjdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGF0dGFjaEFjdGlvbihpdGVtLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdhZy5sYXp5JywgYWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYXp5JywgYWN0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIGFjdGlvbigpO1xyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBpbml0KCkge1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhenkucmVmcmVzaCcsIGZpbmRMYXp5KTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5yZWZyZXNoJywgZmluZExhenkpO1xyXG5cclxuICAgICAgICB2YXIgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhenkucmVmcmVzaCcpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbiAoZSkge1xyXG5cclxuICAgICAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5sYXp5Jyk7XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdmFyIGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhZy5sYXp5Jyk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcblxyXG4gICAgICAgIHdpbmRvdy5hZ0xhenkgPSB7XHJcbiAgICAgICAgICAgIHJlZnJlc2g6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcubGF6eS5yZWZyZXNoJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmFsaWRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnYWcubGF6eScpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBhdHRhY2hBY3Rpb24oaXRlbSwgc3VjY2VzcykgeyAgICAgICAgIFxyXG4gICAgICAgIHZhciBibGFua0ltYWdlID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBUUFBQUMxSEF3Q0FBQUFDMGxFUVZSNDJtTmtZQUFBQUFZQUFqQ0IwQzhBQUFBQVNVVk9SSzVDWUlJPSc7XHJcbiAgICAgICAgaWYgKGF3YWl0IGNoZWNraXNJblZpZXdwb3J0KGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgICAgdmFyIHNyY1VybCA9IGF3YWl0IGdldEZvcm1hdHRlZEltYWdlVXJsKGl0ZW0uZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpLCBpdGVtKTtcclxuICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJywgc3JjVXJsLnVybCk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLm5vZGVOYW1lID09ICdWSURFTycpIGl0ZW0uc2V0QXR0cmlidXRlKCdzcmMnLCBzcmNVcmwudXJsKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnT0JKRUNUJyB8fCBpdGVtLm5vZGVOYW1lID09ICdBVURJTycpXHJcbiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnc3JjJywgc3JjVXJsLnVybClcclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5ub2RlTmFtZSA9PSAnSU1HJykgeyAgIFxyXG4gICAgICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnc3JjJykgIT0gYmxhbmtJbWFnZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdhZy1sYXp5LXMnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdzcmMnLCBibGFua0ltYWdlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc3JjVXJsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3JjVXJsLnNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY1VybC5zaXplLndpZHRoPjApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBzcmNVcmwuc2l6ZS53aWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNVcmwuc2l6ZS5oZWlnaHQgPiAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHNyY1VybC5zaXplLmhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdzcmMnLCBzcmNVcmwudXJsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZVsnYmFja2dyb3VuZC1pbWFnZSddID0gYHVybCgnJHtzcmNVcmwudXJsfScpYDtcclxuICAgICAgICAgICAgc3VjY2VzcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHJvb3Q6IG51bGwsXHJcbiAgICAgICAgICAgIHJvb3RNYXJnaW46IFwiMHB4XCIsXHJcbiAgICAgICAgICAgIHRocmVzaG9sZDogMC4xLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhpdGVtLCdWaWV3Jyk7XHJcblxyXG4gICAgICAgIH0sIG9wdGlvbnMpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRGb3JtYXR0ZWRJbWFnZVVybCh1cmwsIGl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgaXNBdXRvID0gaXRlbS5oYXNBdHRyaWJ1dGUoJ2RhdGEtcmF0aW8tYXV0bycpOyAgICAgICAgXHJcbiAgICAgICAgaWYgKGlzQXV0byB8fCBpdGVtLm5vZGVOYW1lID09ICdWSURFTycgfHwgaXRlbS5ub2RlTmFtZSA9PSAnT0JKRUNUJykgcmV0dXJuIHsgdXJsOiB1cmwgfTsgICAgICAgIFxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gYXdhaXQgZ2V0QmVzdEZpdENvbnRhaW5lcihpdGVtLCAxNiwgOSwgMSk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdmFyIG1hdGNoID0gLy4qXFw/KC4qPyhtaHxtdylcXD0oXFxkKykpKi9naS5leGVjKHVybCk7XHJcbiAgICAgICAgdmFyIGFkZGl0aW9uYWxVcmwgPSAnJzsgICAgICAgIFxyXG4gICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1jcm9wJykgIT0gbnVsbCkgYWRkaXRpb25hbFVybCArPSAnJm1vZGU9Y3JvcCc7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvJykgPT0gMCAmJiBmYWxzZSkge1xyXG4gICAgICAgICAgICB2YXIgcHJvamVjdENvZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1wY29kZScpO1xyXG4gICAgICAgICAgICB1cmwgPSBgaHR0cHM6Ly9jZG4uZGF0YWZsb2F0LmNvbS8ke3Byb2plY3RDb2RlfV9DV1Mke3VybH1gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh1cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0Y2ggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyB1cmw6IHVybCwgc2l6ZTogY3VycmVudCB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHVybDogYCR7dXJsfT9gICsgKGN1cnJlbnQud2lkdGggPiAwID8gYG13PSR7Y3VycmVudC53aWR0aCAqIGN1cnJlbnQuc2NhbGV9YCArIChjdXJyZW50LmhlaWdodCA+IDAgPyAnJicgOiAnJykgOiAnJykgKyAoY3VycmVudC5oZWlnaHQgPiAwID8gYG1oPSR7Y3VycmVudC5oZWlnaHQgKiBjdXJyZW50LnNjYWxlfWAgOiAnJykgKyBgJHthZGRpdGlvbmFsVXJsfWAsIHNpemU6IGN1cnJlbnQgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0QmVzdEZpdENvbnRhaW5lcihpdGVtLCBkZWZhdWx0UmF0aW9XaWR0aCwgZGVmYXVsdFJhdGlvSGVpZ2h0LCBkZWZhdWx0U2NhbGUpIHtcclxuICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB2YXIgY3VycmVudCA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgdmFyIHJhdGlvID0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmF0aW8nKTtcclxuICAgICAgICB2YXIgc2NhbGVTaXplID0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2NhbGUnKTtcclxuICAgICAgICBpZiAoc2NhbGVTaXplICE9IG51bGwpIGRlZmF1bHRTY2FsZSA9IHBhcnNlRmxvYXQoc2NhbGVTaXplKTtcclxuXHJcbiAgICAgICAgdmFyIHJhdGlvTWF0Y2ggPSBudWxsOyAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgaWYgKHJhdGlvICYmIHJhdGlvICE9IG51bGwgJiYgKHJhdGlvTWF0Y2ggPSAvXig/PHdpZHRoPlswLTlcXC5dezEsNH0pOig/PGhlaWdodD5bMC05XFwuXXsxLDR9KSQvZ2kuZXhlYyhyYXRpbykpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZGVmYXVsdFJhdGlvV2lkdGggPSBwYXJzZUZsb2F0KHJhdGlvTWF0Y2guZ3JvdXBzLndpZHRoKTtcclxuICAgICAgICAgICAgZGVmYXVsdFJhdGlvSGVpZ2h0ID0gcGFyc2VGbG9hdChyYXRpb01hdGNoLmdyb3Vwcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFJhdGlvV2lkdGggPT0gMCkgZGVmYXVsdFJhdGlvV2lkdGggPSAtMTtcclxuICAgICAgICAgICAgaWYgKGRlZmF1bHRSYXRpb0hlaWdodCA9PSAwKSBkZWZhdWx0UmF0aW9IZWlnaHQgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3aWR0aCA9IGN1cnJlbnQud2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IGN1cnJlbnQuaGVpZ2h0O1xyXG4gICAgICAgIGlmIChpdGVtLmNsYXNzTGlzdC5jb250YWlucygnYWctbGF6eScpKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gaXRlbS5nZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiKTtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gaXRlbS5nZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIik7XHJcbiAgICAgICAgICAgIGlmICh3aWR0aCA9PSB1bmRlZmluZWQgfHwgd2lkdGggPT0gbnVsbCB8fCB3aWR0aCA9PSAnJylcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gaXRlbS5zdHlsZS53aWR0aDtcclxuXHJcbiAgICAgICAgICAgIGlmICh3aWR0aCA9PSB1bmRlZmluZWQgfHwgd2lkdGggPT0gbnVsbCB8fCB3aWR0aCA9PSAnJykgd2lkdGggPSAwO1xyXG4gICAgICAgICAgICBlbHNlIHdpZHRoID0gcGFyc2VJbnQod2lkdGgucmVwbGFjZSgvW15cXGRdKy9naSwgJycpKTtcclxuICAgICAgICAgICAgaWYgKGhlaWdodCA9PSB1bmRlZmluZWQgfHwgaGVpZ2h0ID09IG51bGwgfHwgaGVpZ2h0ID09ICcnKSBoZWlnaHQgPSAwO1xyXG4gICAgICAgICAgICBlbHNlIGhlaWdodCA9IHBhcnNlSW50KGhlaWdodC5yZXBsYWNlKC9bXlxcZF0rL2dpLCAnJykpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0ICYmICgod2lkdGggPT0gdW5kZWZpbmVkIHx8IGhlaWdodCA9PSB1bmRlZmluZWQpIHx8IChoZWlnaHQgPCB3aWR0aCAvIGRlZmF1bHRSYXRpb1dpZHRoICogZGVmYXVsdFJhdGlvSGVpZ2h0KSB8fCB3aWR0aCA8IGhlaWdodCAvIGRlZmF1bHRSYXRpb0hlaWdodCAqIGRlZmF1bHRSYXRpb1dpZHRoKSkge1xyXG4gICAgICAgICAgICBpZiAod2lkdGggPiAwKVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gd2lkdGggLyBkZWZhdWx0UmF0aW9XaWR0aCAqIGRlZmF1bHRSYXRpb0hlaWdodDtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBoZWlnaHQgLyBkZWZhdWx0UmF0aW9IZWlnaHQgKiBkZWZhdWx0UmF0aW9XaWR0aDtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAoKHdpZHRoID4gMCB8fCBkZWZhdWx0UmF0aW9XaWR0aCA8IDApICYmIChoZWlnaHQgPiAwIHx8IGRlZmF1bHRSYXRpb0hlaWdodCA8IDApKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5mbG9vcih3aWR0aCk7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGguZmxvb3IoaGVpZ2h0KTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgd2lkdGg6IGRlZmF1bHRSYXRpb1dpZHRoIDwgMCA/IDAgOiB3aWR0aCArICgxMCAtICh3aWR0aCAlIDEwKSksIGhlaWdodDogZGVmYXVsdFJhdGlvSGVpZ2h0IDwgMCA/IDAgOiBoZWlnaHQgKyAoMTAgLSAoaGVpZ2h0ICUgMTApKSwgc2NhbGU6IGRlZmF1bHRTY2FsZSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgZ2V0QmVzdEZpdENvbnRhaW5lcihpdGVtLnBhcmVudEVsZW1lbnQsIGRlZmF1bHRSYXRpb1dpZHRoLCBkZWZhdWx0UmF0aW9IZWlnaHQsIGRlZmF1bHRTY2FsZSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIG1hcFRvQXV0b1NpemUod2lkdGgsIGhlaWdodCkgeyAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gY2hlY2tpc0luVmlld3BvcnQoZWxlbWVudCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xyXG4gICAgICAgIHZhciBkb2NFbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuXHJcbiAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2NFbC5zY3JvbGxUb3AgfHwgYm9keS5zY3JvbGxUb3A7XHJcbiAgICAgICAgdmFyIHNjcm9sbExlZnQgPSB3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jRWwuc2Nyb2xsTGVmdCB8fCBib2R5LnNjcm9sbExlZnQ7XHJcblxyXG4gICAgICAgIHZhciBjbGllbnRUb3AgPSBkb2NFbC5jbGllbnRUb3AgfHwgYm9keS5jbGllbnRUb3AgfHwgMDtcclxuICAgICAgICB2YXIgY2xpZW50TGVmdCA9IGRvY0VsLmNsaWVudExlZnQgfHwgYm9keS5jbGllbnRMZWZ0IHx8IDA7XHJcblxyXG4gICAgICAgIHZhciBlbGVtZW50VG9wID0gY3VycmVudC50b3AgKyBzY3JvbGxUb3AgLSBjbGllbnRUb3A7XHJcbiAgICAgICAgdmFyIGVsZW1lbnRCb3R0b20gPSBjdXJyZW50LmJvdHRvbSArIHNjcm9sbFRvcCAtIGNsaWVudFRvcDtcclxuXHJcbiAgICAgICAgbGV0IHZpZXdwb3J0VG9wID0gc2Nyb2xsVG9wO1xyXG4gICAgICAgIGxldCB2aWV3cG9ydEJvdHRvbSA9IHZpZXdwb3J0VG9wICsgd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBlbGVtZW50Qm90dG9tID4gdmlld3BvcnRUb3AgJiYgZWxlbWVudFRvcCA8IHZpZXdwb3J0Qm90dG9tO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgaW5pdCk7XHJcblxyXG4gICBcclxuXHJcbn0pKCk7XHJcblxyXG4gXHJcblxyXG4vKkFjY29yZGlvbiBKUyovXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS1hY2MtaVwiKSAhPSBudWxsKSB7XHJcblxyXG5cclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tYWNjLWlcIikuZm9yRWFjaCgoYWNjaXRlbSkgPT4ge1xyXG5cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFjY29yZGlvbkl0ZW1Cb2R5ID0gYWNjaXRlbS5jbG9zZXN0KFwiLml0ZW0tYWNjLWNcIik7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWNjaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoXCJvcGVuXCIpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgYWNjb3JkaW9uSXRlbUJvZHkuc3R5bGUubWF4SGVpZ2h0ID0gYWNjb3JkaW9uSXRlbUJvZHkuc2Nyb2xsSGVpZ2h0ICsgXCJweFwiO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIGFjY2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgYWNjaXRlbS5jbGFzc0xpc3QudG9nZ2xlKFwib3BlblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoXCJvcGVuXCIpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGFjY29yZGlvbkl0ZW1Cb2R5LnN0eWxlLm1heEhlaWdodCA9IGFjY29yZGlvbkl0ZW1Cb2R5LnNjcm9sbEhlaWdodCArIFwicHhcIjtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFjY2l0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhY2NvcmRpb25JdGVtQm9keS5zdHlsZS5tYXhIZWlnaHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLml0ZW0tYWNjLWlcIikub2Zmc2V0SGVpZ2h0ICsgXCJweFwiO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG59KSAoKTtcclxuXHJcblxyXG4vKlRhYiBKUyovXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS10YWItYlwiKSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuaXRlbS10YWItYlwiKS5mb3JFYWNoKChidXR0b24sIGluZGV4KSA9PiB7XHJcblxyXG4gICAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGFiLWNcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzaWRlQmFyID0gYnV0dG9uLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJzQ29udGFpbmVyID0gc2lkZUJhci5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgc2lkZUJhci5xdWVyeVNlbGVjdG9yQWxsKCcuaXRlbS10YWItYicpLmZvckVhY2goYnV0dG9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgdGFic0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuaXRlbS10YWItYycpLmZvckVhY2godGFiID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0YWIuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHNbaW5kZXhdLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbn0pICgpO1xyXG5cclxuXHJcbi8qUHJvcGVydHlTZWFyY2hDb250cm9sV29ya2luZyBKUyovXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbS1zZWFcIikgIT0gbnVsbCkge1xyXG5cclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY29uLW1lbnUgYScpLmZvckVhY2goZnVuY3Rpb24gKG1lbnVpdGVtKSB7XHJcblxyXG4gICAgICAgICAgICBtZW51aXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGFiZWwtY29uJykuc2V0QXR0cmlidXRlKCdkYXRhLWNvdW50cnknLCBtZW51aXRlbS5pbm5lckhUTUwpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChtZW51aXRlbS5jbG9zZXN0KFwiLml0ZW0tZHItY1wiKS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbWVudWl0ZW0uY2xvc2VzdChcIi5pdGVtLWRyLWNcIikucHJldmlvdXNFbGVtZW50U2libGluZy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG5cclxuXHJcbiAgICAgICAgY29uc3QgZHJvcHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaXRlbS1kciA+IC5pdGVtLWRyLWxhJyk7XHJcblxyXG4gICAgICAgIGRyb3BzLmZvckVhY2goKGRyb3AsIGlkeCkgPT4ge1xyXG4gICAgICAgICAgICBkcm9wLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgVG9nZ2xlQWN0aXZlKGRyb3AsIGlkeCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBUb2dnbGVBY3RpdmUoZWwsIGluZGV4KSB7XHJcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICBkcm9wcy5mb3JFYWNoKChkcm9wLCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpZHggIT09IGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XHJcblxyXG4gICAgICAgICAgICBkcm9wcy5mb3JFYWNoKChkcm9wRGl2KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCEoZXZlbnQudGFyZ2V0LmNsb3Nlc3QoXCIuaXRlbS1kci1sYVwiKSkgJiYgIShldmVudC50YXJnZXQuY2xvc2VzdChcIi5pdGVtLWRyLWNcIikpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3BEaXYuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLml0ZW0tY2wnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbG9zZWJ0bikge1xyXG5cclxuICAgICAgICAgICAgY2xvc2VidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjbG9zZWJ0bi5jbG9zZXN0KFwiLml0ZW0tZHItY1wiKS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VidG4uY2xvc2VzdChcIi5pdGVtLWRyLWNcIikucHJldmlvdXNFbGVtZW50U2libGluZy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gRW5hYmxlU2VhcmNoYmVsb3dUYWIoKSB7XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDEwMjQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaXRlbS1vbnN0eHQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdzcmNoLW9wbmQnKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY2FuY2VsLWJ0bicpLmZvckVhY2goZnVuY3Rpb24gKGNhbmNlbGJ0bikge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3NyY2gtb3BuZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgRW5hYmxlU2VhcmNoYmVsb3dUYWIoKTtcclxuXHJcblxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIEVuYWJsZVNlYXJjaGJlbG93VGFiKTtcclxuXHJcbiAgICB9XHJcblxyXG59KSgpO1xyXG5cclxuXHJcbi8vIHNjcm9sbCBjbGFzcyBhZGRlZCBpbiBib2R5IHdoZW4gc2Nyb2xsaW5nXHJcblxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgYXN5bmMgZnVuY3Rpb24gU2Nyb2xsYm9keWNsYXNzKCkge1xyXG5cclxuICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB3aW5kb3cuc2Nyb2xsWTtcclxuICAgICAgICBpZiAoc2Nyb2xsVG9wID4gMTApIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdzY3JvbGwnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3Njcm9sbCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgU2Nyb2xsYm9keWNsYXNzKTtcclxuXHJcbn0pKCk7XHJcblxyXG5cclxuLy8gQnVyZ2VyIG1lbnVcclxuXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICBhc3luYyBmdW5jdGlvbiBIZWFkZXJCdXJnZXJDaGFuZ2UoKSB7XHJcblxyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItY1wiKSAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBCdXJnZXJBY3RpdmUoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVyZ2VyLWNcIikuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaXRlbS1uLTJcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5yZW1vdmUoXCJpdGVtLW4tMlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5hZGQoXCJpdGVtLW4tMVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLml0ZW0tdWNcIikgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW11Y25vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLml0ZW0tdWNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWhcIikucXVlcnlTZWxlY3RvcihcIm5hdlwiKS5pbnNlcnRCZWZvcmUoaXRlbXVjbm9kZSwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWhcIikucXVlcnlTZWxlY3RvcihcIm5hdlwiKS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gQnVyZ2VyRGVhY3RpdmUoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVyZ2VyLWNcIikuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaXRlbS1uLTFcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5yZW1vdmUoXCJpdGVtLW4tMVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jXCIpLmNsYXNzTGlzdC5hZGQoXCJpdGVtLW4tMlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLml0ZW0tdWNcIikgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW11Y25vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLml0ZW0tdWNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5pdGVtLWhcIikuYXBwZW5kQ2hpbGQoaXRlbXVjbm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPD0gMTAyNCkgeyBCdXJnZXJBY3RpdmUoKTsgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDEwMjQpIHsgQnVyZ2VyRGVhY3RpdmUoKTsgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1cmdlci1jIH4gbmF2XCIpLm9mZnNldFdpZHRoIDwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idXJnZXItYyB+IG5hdlwiKS5zY3JvbGxXaWR0aCkgeyBCdXJnZXJBY3RpdmUoKTsgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIEhlYWRlckJ1cmdlckNoYW5nZSgpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIEhlYWRlckJ1cmdlckNoYW5nZSk7XHJcblxyXG59KSgpO1xyXG5cclxuXHJcbi8vIFJpcHBsZSBlZmZlY3RcclxuKGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgcmlwcGxlYnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYS1iLTEsIC5hLWItMiwgLmEtYi0zLCAuYS1iLTQsIC5hLWItNVwiKTtcclxuXHJcbiAgICBpZiAocmlwcGxlYnV0dG9ucyAhPSBudWxsKSB7XHJcblxyXG5cclxuICAgICAgICByaXBwbGVidXR0b25zLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeCA9IGUub2Zmc2V0WDtcclxuICAgICAgICAgICAgICAgIHZhciB5ID0gZS5vZmZzZXRZO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciByaXBwbGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmlwcGxlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJpcHBsZXMubGVuZ3RoIDwgMTApIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmlwcGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJpcHBsZS5jbGFzc0xpc3QuYWRkKCdyaXBwbGUnKTtcclxuICAgICAgICAgICAgICAgICAgICByaXBwbGUuc3R5bGUubGVmdCA9IHggKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIHJpcHBsZS5zdHlsZS50b3AgPSB5ICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHJpcHBsZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByaXBwbGUucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICB9XHJcblxyXG59KSgpO1xyXG5cclxuXHJcbi8qSG9tZSBwYWdlIHZpZGVvIHBsYXllciBzY3JpcHQgdG8gaGlkZSBidXR0b24qL1xyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHZhciB2aWRlb0VsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi52aWRlby1wbGF5XCIpO1xyXG5cclxuICAgIGlmICh2aWRlb0VsZW1lbnRzICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgdmlkZW9FbGVtZW50cy5mb3JFYWNoKHZpZGVvID0+IHtcclxuICAgICAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZpZGVvLmNsb3Nlc3QoXCJmaWd1cmVcIikuY2xhc3NMaXN0LmFkZChcIm5vLWJ0blwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmlkZW8uY2xvc2VzdChcImZpZ3VyZVwiKS5jbGFzc0xpc3QucmVtb3ZlKFwibm8tYnRuXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbn0pKCk7XHJcblxyXG5cclxuLypGb3IgcmVnaW9uIGFuZCBhZ2VudCBkZXRhaWxzIHBhZ2VzKi9cclxuKGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5leHBhbmQtbW9yZVwiKSAhPSBudWxsKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmV4cGFuZC1tb3JlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3Nlc3QoXCIuc3VibmF2XCIpLmNsYXNzTGlzdC50b2dnbGUoXCJyZXNwb25zaXZlXCIpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3VibmF2ID4gYScpLmZvckVhY2goc3VibmF2YnRuID0+IHtcclxuICAgICAgICAgICAgc3VibmF2YnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VzdChcIi5zdWJuYXZcIikuY2xhc3NMaXN0LnJlbW92ZShcInJlc3BvbnNpdmVcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG59KSgpO1xyXG5cclxuXHJcbi8qRm9yIGZsb2F0aW5nIHRleHRzIGluIHNlbGVjdCBib3hlcyovXHJcbihhc3luYyBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubGFiZWwtc2VsXCIpICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgY29uc3QgbGFiZWxzZWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmxhYmVsLXNlbCcpO1xyXG5cclxuICAgICAgICBsYWJlbHNlbHMuZm9yRWFjaChsYWJlbHNlbCA9PiB7XHJcbiAgICAgICAgICAgIGxhYmVsc2VsLnF1ZXJ5U2VsZWN0b3IoJy5pdGVtLXNlbGVjdCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsYWJlbHNlbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG59KSgpO1xyXG4gXHJcblxyXG5cclxuZnVuY3Rpb24gc2hvd1Byb3BlcnR5R2FsbGVyeShjbGllbnRDb2RlLCBwcm9wZXJ0eVJULCBtbHNOdW1iZXIsIHBob3RvQ291bnQsIHJvb3RDbGFzcykge1xyXG4gICAgdmFyIF9zVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xyXG4gICAgdmFyIF9nQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByb3BlcnR5LWdhbGxlcnktY29udGFpbmVyJyk7XHJcbiAgICB2YXIgX2dDb250YWluZXJDbG9zZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG4gICAgX2dDb250YWluZXJDbG9zZS5jbGFzc0xpc3QuYWRkKCdwcm9wZXJ0eS1nYWxsZXJ5LWNvbnRhaW5lci1jbG9zZScpO1xyXG4gICAgX2dDb250YWluZXJDbG9zZS5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgJ0Nsb3NlIFByb3BlcnR5IEdhbGxlcnknKTtcclxuICAgIF9nQ29udGFpbmVyQ2xvc2UuaW5uZXJUZXh0ID0gJ1gnO1xyXG4gICAgX2dDb250YWluZXJDbG9zZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wcm9wZXJ0eS1nYWxsZXJ5LWNvbnRhaW5lcicpICE9IG51bGwpIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wcm9wZXJ0eS1nYWxsZXJ5LWNvbnRhaW5lcicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCBfc1RvcCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICd2aXNpYmxlJztcclxuICAgIH0sIHRydWUpO1xyXG4gICAgaWYgKF9nQ29udGFpbmVyID09IG51bGwpIHtcclxuICAgICAgICBfZ0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIF9nQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3Byb3BlcnR5LWdhbGxlcnktY29udGFpbmVyJyk7XHJcbiAgICAgICAgaWYgKHJvb3RDbGFzcyAhPSBtbHNOdW1iZXIpIF9nQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQocm9vdENsYXNzKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKF9nQ29udGFpbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBfZ0NvbnRhaW5lci5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cInMtdy0xMDAgcy1oLTEwMCBzLXAtciBoZXJvLXNsaWRlclwiPjxpIGNsYXNzPVwibGVmdC1idG5cIj4mbHQ7PC9pPjxkaXYgY2xhc3M9XCJpdGVtLXMgc2hvdy1uYXZcIj48L2Rpdj48aSBjbGFzcz1cInJpZ2h0LWJ0blwiPiZndDs8L2k+PGRpdiBjbGFzcz1cImRvdHMtd3JhcHBlclwiPjwvZGl2PjxkaXYgc3R5bGU9XCJjbGVhcjogYm90aDtcIj48L2Rpdj48L2Rpdj4nO1xyXG4gICAgX2dDb250YWluZXIuYXBwZW5kQ2hpbGQoX2dDb250YWluZXJDbG9zZSk7XHJcblxyXG4gICAgdmFyIF9pdGVtQ29udGFpbmVyID0gX2dDb250YWluZXIucXVlcnlTZWxlY3RvcignLml0ZW0tcycpO1xyXG4gICAgdmFyIF9pdGVtSHRtbCA9IG51bGw7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBob3RvQ291bnQ7IGkrKykge1xyXG4gICAgICAgIF9pdGVtSHRtbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIF9pdGVtSHRtbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIml0ZW1cIj48aW1nIGNsYXNzPVwibGF6eSBzLWgtMTAwIHMtb2YtY25cIiBhbHQ9XCJwcm9wZXJ0eSBwaG90byAnICsgKGkgKyAxKSArICdcIiBkYXRhLXNyYz1cImh0dHBzOi8vY2RuLmRhdGFmbG9hdC5jb20vJyArIGNsaWVudENvZGUgKyAnX1BVQkxJQy9NTFNQaG90b3MvJyArIHByb3BlcnR5UlQudG9VcHBlckNhc2UoKSArICcvJyArIG1sc051bWJlciArICdfJyArIChpICsgMSkgKyAnLmpwZ1wiIC8+PC9kaXY+J1xyXG4gICAgICAgIF9pdGVtQ29udGFpbmVyLmFwcGVuZChfaXRlbUh0bWwuZmlyc3RFbGVtZW50Q2hpbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFnU2xpZGVyKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYXV0b1BsYXk6IHRydWUsXHJcbiAgICAgICAgICAgIGF1dG9QbGF5RGVsYXk6IDUwMDAsXHJcbiAgICAgICAgICAgIGxvb3A6IHRydWUsXHJcbiAgICAgICAgICAgIHNob3dCdWxsZXRzOiB0cnVlLFxyXG4gICAgICAgICAgICBzaG93Q29udHJvbHM6IHRydWUsXHJcbiAgICAgICAgICAgIGJ1bGxldENvbnRhaW5lcjogJy5kb3RzLXdyYXBwZXInLFxyXG4gICAgICAgICAgICBzaG93QnVsbGV0c0FzVGh1bWI6IHRydWUsXHJcbiAgICAgICAgICAgIGl0ZW1XcmFwcGVyOiAnLml0ZW0tcycsXHJcbiAgICAgICAgICAgIGl0ZW1Db250YWluZXI6ICcuaXRlbScsXHJcbiAgICAgICAgfSwgJy5wcm9wZXJ0eS1nYWxsZXJ5LWNvbnRhaW5lcicsIGZ1bmN0aW9uIChzbGlkZXIpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xyXG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG59XHJcblxyXG53aW5kb3cuYWdTbGlkZXIgPSBmdW5jdGlvbiAoc2V0dGluZ3MsIGNvbnRhaW5lciwgb25Jbml0Q29tcGxldGUpIHtcclxuICAgIHZhciBfc2V0dGluZ3MgPSB7XHJcbiAgICAgICAgYXV0b1BsYXk6IGZhbHNlLFxyXG4gICAgICAgIGF1dG9QbGF5RGVsYXk6IDMwMDAsXHJcbiAgICAgICAgbG9vcDogZmFsc2UsXHJcbiAgICAgICAgc2hvd0NvbnRyb2xzOiB0cnVlLFxyXG4gICAgICAgIGJ0bkxlZnQ6ICcubGVmdC1idG4nLFxyXG4gICAgICAgIGJ0blJpZ2h0OiAnLnJpZ2h0LWJ0bicsXHJcbiAgICAgICAgc2hvd0J1bGxldHM6IGZhbHNlLFxyXG4gICAgICAgIHNob3dCdWxsZXRzQXNUaHVtYjogZmFsc2UsIFxyXG4gICAgICAgIGJ1bGxldENvbnRhaW5lcjogJy5idWxsZXRzJyxcclxuICAgICAgICBpdGVtV3JhcHBlcjogJy5hZ3ktY2Fyby1pbicsXHJcbiAgICAgICAgd3JhcHBlck1hc2s6IDAsIC8qIEl0IHNob3VsZCBiZSBpbiBwZXJjZW50YWdlIDAtMTAwICovXHJcbiAgICAgICAgaXRlbUNvbnRhaW5lcjogJy5hZ3ktY2Fyby1pdCdcclxuICAgIH1cclxuICAgIGlmIChzZXR0aW5ncyAhPSBudWxsICYmIHNldHRpbmdzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIF9zZXR0aW5ncyA9IGV4dGVuZEpzb24oX3NldHRpbmdzLCBzZXR0aW5ncyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRhaW5lciA9PSB1bmRlZmluZWQgfHwgY29udGFpbmVyID09IG51bGwpIGNvbnRhaW5lciA9ICcuYWd5LWNhcm8nO1xyXG4gICAgdmFyIF9zbGlkZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjb250YWluZXIpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBfc2xpZGVycyAhPSBudWxsICYmIF9zbGlkZXJzICE9IHVuZGVmaW5lZCAmJiBfc2xpZGVycy5sZW5ndGggPiBpOyBpKyspIHtcclxuICAgICAgICBpbml0U2xpZGVyKF9zbGlkZXJzW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbml0U2xpZGVyKHNsaWRlcikge1xyXG4gICAgICAgIHZhciBfaXRlbXMgPSBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbVdyYXBwZXIpO1xyXG4gICAgICAgIHZhciBfaXRlbXNDb3VudCA9IF9pdGVtcy5xdWVyeVNlbGVjdG9yQWxsKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyKS5sZW5ndGg7XHJcbiAgICAgICAgdmFyIF9pdGVtV2lkdGggPSBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lcikub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgdmFyIF9pdGVtc0luVmlld1BvcnQgPSBNYXRoLnJvdW5kKF9pdGVtcy5vZmZzZXRXaWR0aCAvIF9pdGVtV2lkdGgpO1xyXG4gICAgICAgIHZhciBfYWN0aXZlU0l0ZW1JZHggPSAwLCBfYWN0aXZlRUl0ZW1JZHggPSBfaXRlbXNDb3VudCwgX2FjdGl2ZVBhZ2VJZHggPSAwO1xyXG4gICAgICAgIHZhciBfYnRuTGVmdCA9IChfc2V0dGluZ3MuYnRuTGVmdCAhPSBudWxsICYmIF9zZXR0aW5ncy5idG5MZWZ0ICE9IHVuZGVmaW5lZCkgPyBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnRuTGVmdCkgOiBudWxsO1xyXG4gICAgICAgIHZhciBfYnRuUmlnaHQgPSAoX3NldHRpbmdzLmJ0blJpZ2h0ICE9IG51bGwgJiYgX3NldHRpbmdzLmJ0blJpZ2h0ICE9IHVuZGVmaW5lZCkgPyBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnRuUmlnaHQpIDogbnVsbDtcclxuICAgICAgICB2YXIgX3BhdXNlUGxheSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBfaXNIZXJvU2xpZGVyID0gKF9pdGVtcy5vZmZzZXRXaWR0aCA9PSBfaXRlbVdpZHRoKTtcclxuICAgICAgICB2YXIgX21vdmVMYXN0SXRlbVRvRmlyc3RGb3JXcmFwcGVyTWFzayA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBfd3JhcHBlck1hc3RTY3JvbGxMZWZ0ID0gMDtcclxuXHJcbiAgICAgICAgaWYgKCFpc05hTihfc2V0dGluZ3Mud3JhcHBlck1hc2spICYmIF9zZXR0aW5ncy53cmFwcGVyTWFzayA+IDApIHtcclxuICAgICAgICAgICAgX3NldHRpbmdzLndyYXBwZXJNYXNrID0gX3NldHRpbmdzLndyYXBwZXJNYXNrID4gMTAwID8gMTAwIDogX3NldHRpbmdzLndyYXBwZXJNYXNrO1xyXG4gICAgICAgICAgICBfaXRlbXMuc3R5bGUuc2Nyb2xsUGFkZGluZyA9IF9zZXR0aW5ncy53cmFwcGVyTWFzayArICclJztcclxuXHJcbiAgICAgICAgICAgIGlmIChfaXRlbXNDb3VudCA+IDIpIHtcclxuICAgICAgICAgICAgICAgIF9tb3ZlTGFzdEl0ZW1Ub0ZpcnN0Rm9yV3JhcHBlck1hc2sgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgX2l0ZW1BcnJheSA9IF9pdGVtcy5xdWVyeVNlbGVjdG9yQWxsKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9pdGVtQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgX2l0ZW1BcnJheVtpXS5jbGFzc0xpc3QuYWRkKCdpZHgtJyArIGkpO1xyXG4gICAgICAgICAgICBpZiAoX21vdmVMYXN0SXRlbVRvRmlyc3RGb3JXcmFwcGVyTWFzayAmJiBpID09IF9pdGVtQXJyYXkubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgX2l0ZW1zLnByZXBlbmQoX2l0ZW1BcnJheVtpXSk7XHJcbiAgICAgICAgICAgICAgICBfd3JhcHBlck1hc3RTY3JvbGxMZWZ0ID0gX2l0ZW1zLnNjcm9sbExlZnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfYnRuTGVmdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICghX3NldHRpbmdzLnNob3dDb250cm9scykgX2J0bkxlZnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgX2J0bkxlZnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX2FjdGl2ZVNJdGVtSWR4ID09IDAgJiYgIV9zZXR0aW5ncy5sb29wKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBpZiAoX2FjdGl2ZVNJdGVtSWR4ID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBfaXRlbXMuc2Nyb2xsTGVmdCA9IF9pdGVtV2lkdGggKiAoX2l0ZW1zQ291bnQgLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVJdGVtcyhfaXRlbVdpZHRoICogKF9pdGVtc0NvdW50IC0gX2l0ZW1zSW5WaWV3UG9ydCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1zLnNjcm9sbExlZnQgPSBfaXRlbXMuc2Nyb2xsTGVmdCArICgtX2l0ZW1XaWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlSXRlbXMoKCFfaXNIZXJvU2xpZGVyKSA/IChfaXRlbXMuc2Nyb2xsTGVmdCArICgtX2l0ZW1XaWR0aCkpIDogKChfYWN0aXZlU0l0ZW1JZHggLSAxKSAqIF9pdGVtV2lkdGgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoX2J0blJpZ2h0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKCFfc2V0dGluZ3Muc2hvd0NvbnRyb2xzKSBfYnRuUmlnaHQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgX2J0blJpZ2h0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKF9hY3RpdmVFSXRlbUlkeCA9PSAoX2l0ZW1zQ291bnQgLSAxKSAmJiAhX3NldHRpbmdzLmxvb3ApIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGlmIChfYWN0aXZlRUl0ZW1JZHggPT0gKF9pdGVtc0NvdW50IC0gMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBfaXRlbXMuc2Nyb2xsTGVmdCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlSXRlbXMoX3dyYXBwZXJNYXN0U2Nyb2xsTGVmdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfaXRlbXMuc2Nyb2xsTGVmdCA9IF9pdGVtcy5zY3JvbGxMZWZ0ICsgKCtfaXRlbVdpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVJdGVtcygoIV9pc0hlcm9TbGlkZXIpID8gKF9pdGVtcy5zY3JvbGxMZWZ0ICsgKCtfaXRlbVdpZHRoKSkgOiAoKF9hY3RpdmVTSXRlbUlkeCArIDEpICogX2l0ZW1XaWR0aCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYgKF9zZXR0aW5ncy5zaG93QnVsbGV0cykge1xyXG5cclxuICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICBpZiAoc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikgPT0gbnVsbCB8fCBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIF9zZXR0aW5ncy5zaG93QnVsbGV0cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKE1hdGgucm91bmQoX2l0ZW1zQ291bnQgLyBfaXRlbXNJblZpZXdQb3J0KSk7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9idWxsZXQgPSAoIV9zZXR0aW5ncy5zaG93QnVsbGV0c0FzVGh1bWIgJiYgIV9pc0hlcm9TbGlkZXIpID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJykgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgICAgIF9idWxsZXQuY2xhc3NMaXN0LmFkZCgnZG90Jyk7XHJcbiAgICAgICAgICAgICAgICBfYnVsbGV0LmNsYXNzTGlzdC5hZGQoJ2lkeC0nICsgaSk7XHJcbiAgICAgICAgICAgICAgICBfYnVsbGV0LnNldEF0dHJpYnV0ZSgnaWR4JywgaSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3NldHRpbmdzLnNob3dCdWxsZXRzQXNUaHVtYiAmJiBfaXNIZXJvU2xpZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aHVtYkltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aHVtYkltYWdlUyA9IF9pdGVtcy5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIGkgKyAnIGltZycpICE9IG51bGwgPyBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyBpbWcnKSA6IF9pdGVtcy5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIGkgKyAnIHZpZGVvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RodW1iSW1hZ2Uuc2V0QXR0cmlidXRlKCdzcmMnLCAoX3RodW1iSW1hZ2VTLm5vZGVOYW1lID09ICdJTUcnKSA/IF90aHVtYkltYWdlUy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykgOiBfdGh1bWJJbWFnZVMuZ2V0QXR0cmlidXRlKCdwb3N0ZXInKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2J1bGxldC5hcHBlbmRDaGlsZChfdGh1bWJJbWFnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKSBfYnVsbGV0LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgX2J1bGxldC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZFBhZ2UocGFyc2VJbnQoaS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgnaWR4JykpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikuYXBwZW5kQ2hpbGQoX2J1bGxldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYgKF9zZXR0aW5ncy5zaG93QnVsbGV0c0FzVGh1bWIpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBUaHVtYldpZHRoID0gc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lcikucXVlcnlTZWxlY3RvcignLmRvdCcpLm9mZnNldFdpZHRoO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGlmIChfYnRuTGVmdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBfYnRuTGVmdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5zY3JvbGxMZWZ0IC09IFRodW1iV2lkdGg7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIGlmIChfYnRuUmlnaHQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgX2J0blJpZ2h0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLnNjcm9sbExlZnQgKz0gVGh1bWJXaWR0aDsgXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIHZhciBpc0RyYWdnaW5nID0gZmFsc2UsIHN0YXJ0WCwgc3RhcnRTY3JvbGxMZWZ0O1xyXG5cclxuXHJcbiAgICAgICAgICAgIHZhciBkcmFnU3RhcnQgPSAoZSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlOyBcclxuICAgICAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLmNsYXNzTGlzdC5hZGQoXCJkcmFnZ2luZ1wiKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0WCA9IGUucGFnZVg7XHJcbiAgICAgICAgICAgICAgICBzdGFydFNjcm9sbExlZnQgPSBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5zY3JvbGxMZWZ0O1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGRyYWdnaW5nID0gKGUpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzRHJhZ2dpbmcpIHJldHVybjsgXHJcbiAgICAgICAgICAgICAgICBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5zY3JvbGxMZWZ0ID0gc3RhcnRTY3JvbGxMZWZ0IC0gKGUucGFnZVggLSBzdGFydFgpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGRyYWdTdG9wID0gKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTsgXHJcbiAgICAgICAgICAgICAgICBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5jbGFzc0xpc3QucmVtb3ZlKFwiZHJhZ2dpbmdcIik7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzbGlkZXIucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuYnVsbGV0Q29udGFpbmVyKS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIGRyYWdTdGFydCk7XHJcbiAgICAgICAgICAgIHNsaWRlci5xdWVyeVNlbGVjdG9yKF9zZXR0aW5ncy5idWxsZXRDb250YWluZXIpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgZHJhZ2dpbmcpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBkcmFnU3RvcCk7XHJcblxyXG5cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAoX3NldHRpbmdzLmF1dG9QbGF5KSB7XHJcbiAgICAgICAgICAgIGF1dG9QbGF5KCk7XHJcbiAgICAgICAgICAgIF9pdGVtcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCBmdW5jdGlvbiAoKSB7IGlmIChfaXRlbXMub2Zmc2V0V2lkdGggPT0gX2l0ZW1XaWR0aCkgcmV0dXJuOyBfcGF1c2VQbGF5ID0gdHJ1ZTsgfSk7XHJcbiAgICAgICAgICAgIF9pdGVtcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCBmdW5jdGlvbiAoKSB7IGlmIChfaXRlbXMub2Zmc2V0V2lkdGggPT0gX2l0ZW1XaWR0aCkgcmV0dXJuOyBfcGF1c2VQbGF5ID0gZmFsc2U7IH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYXV0b1BsYXkoKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFfcGF1c2VQbGF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2J0blJpZ2h0LmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhdXRvUGxheSgpO1xyXG4gICAgICAgICAgICB9LCBfc2V0dGluZ3MuYXV0b1BsYXlEZWxheSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBsb2FkUGFnZShpZHgpIHtcclxuICAgICAgICAgICAgX2FjdGl2ZVBhZ2VJZHggPSBpZHg7XHJcbiAgICAgICAgICAgIF9zZXR0aW5ncy5hdXRvUGxheSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBfcGF1c2VQbGF5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgX2l0ZW1zLnNjcm9sbExlZnQgPSAoaWR4ICogX2l0ZW1zSW5WaWV3UG9ydCkgKiBfaXRlbVdpZHRoO1xyXG4gICAgICAgICAgICBzZXRBY3RpdmVJdGVtcygoaWR4ICogX2l0ZW1zSW5WaWV3UG9ydCkgKiBfaXRlbVdpZHRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldEFjdGl2ZUl0ZW1zKF9pdGVtcy5zY3JvbGxMZWZ0KTtcclxuICAgICAgICBmdW5jdGlvbiBzZXRBY3RpdmVJdGVtcyhzTGVmdCkge1xyXG4gICAgICAgICAgICBfYWN0aXZlU0l0ZW1JZHggPSBNYXRoLnJvdW5kKChzTGVmdCAtIF93cmFwcGVyTWFzdFNjcm9sbExlZnQpIC8gX2l0ZW1XaWR0aCk7XHJcbiAgICAgICAgICAgIF9hY3RpdmVFSXRlbUlkeCA9IE1hdGgucm91bmQoX2FjdGl2ZVNJdGVtSWR4ICsgX2l0ZW1zSW5WaWV3UG9ydCAtIDEpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfaXRlbXNDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIGlmIChpID49IF9hY3RpdmVTSXRlbUlkeCAmJiBpIDw9IF9hY3RpdmVFSXRlbUlkeCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDw9IF9hY3RpdmVFSXRlbUlkeCAtICgoX21vdmVMYXN0SXRlbVRvRmlyc3RGb3JXcmFwcGVyTWFzaykgPyAxIDogMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1zLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLml0ZW1Db250YWluZXIgKyAnLmlkeC0nICsgaSkuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyB2aWRlbycpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdmlkZW8gPSBfaXRlbXMucXVlcnlTZWxlY3Rvcihfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyB2aWRlbycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZpZGVvLnNldEF0dHJpYnV0ZSgnc3JjJywgX3ZpZGVvLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmlkZW8ucGF1c2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92aWRlby5jdXJyZW50VGltZSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmlkZW8ucGxheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3BhdXNlUGxheSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBmdW5jdGlvbiAoZSkgeyBfcGF1c2VQbGF5ID0gZmFsc2U7IH0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfaXRlbXMucXVlcnlTZWxlY3RvckFsbChfc2V0dGluZ3MuaXRlbUNvbnRhaW5lciArICcuaWR4LScgKyBpICsgJyBpbWcnKS5mb3JFYWNoKGltZyA9PiB7IGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykpOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChfbW92ZUxhc3RJdGVtVG9GaXJzdEZvcldyYXBwZXJNYXNrICYmIGkgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtcy5xdWVyeVNlbGVjdG9yQWxsKF9zZXR0aW5ncy5pdGVtQ29udGFpbmVyICsgJy5pZHgtJyArIChfaXRlbXNDb3VudCAtIDEpICsgJyBpbWcnKS5mb3JFYWNoKGltZyA9PiB7IGltZy5zZXRBdHRyaWJ1dGUoJ3NyYycsIGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykpOyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoX2FjdGl2ZVNJdGVtSWR4ID09IDAgJiYgIV9zZXR0aW5ncy5sb29wKSBfYnRuTGVmdC5jbGFzc0xpc3QuYWRkKCdkaXNhYmxlZCcpOyBlbHNlIF9idG5MZWZ0LmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIGlmIChfYWN0aXZlRUl0ZW1JZHggPT0gKF9pdGVtc0NvdW50IC0gMSkgJiYgIV9zZXR0aW5ncy5sb29wKSBfYnRuUmlnaHQuY2xhc3NMaXN0LmFkZCgnZGlzYWJsZWQnKTsgZWxzZSBfYnRuUmlnaHQuY2xhc3NMaXN0LnJlbW92ZSgnZGlzYWJsZWQnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChfc2V0dGluZ3Muc2hvd0J1bGxldHMpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKE1hdGgucm91bmQoX2l0ZW1zQ291bnQgLyBfaXRlbXNJblZpZXdQb3J0KSk7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpICE9IChNYXRoLnJvdW5kKChfYWN0aXZlU0l0ZW1JZHggKyBfaXRlbXNJblZpZXdQb3J0KSAvIF9pdGVtc0luVmlld1BvcnQpIC0gMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lciArICcgLmRvdC5pZHgtJyArIGkpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyLnF1ZXJ5U2VsZWN0b3IoX3NldHRpbmdzLmJ1bGxldENvbnRhaW5lciArICcgLmRvdC5pZHgtJyArIGkpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvbkluaXRDb21wbGV0ZSAhPSBudWxsICYmIG9uSW5pdENvbXBsZXRlICE9IHVuZGVmaW5lZCkgb25Jbml0Q29tcGxldGUoc2xpZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBleHRlbmRKc29uKHNEZWZhdWx0LCBjdXN0b20pIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gY3VzdG9tKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXN0b20uaGFzT3duUHJvcGVydHkoa2V5KSkgc0RlZmF1bHRba2V5XSA9IGN1c3RvbVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc0RlZmF1bHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBJc05vdE51bGwoVmFsdWUpIHtcclxuICAgIHJldHVybiBWYWx1ZSAhPSBudWxsICYmIFZhbHVlICE9IHVuZGVmaW5lZCAmJiBWYWx1ZS5sZW5ndGggPiAwICYmIFZhbHVlICE9IFwiMFwiICYmIFZhbHVlICE9IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIElzTm90TnVsbE9ySXNaZXJvKFZhbHVlKSB7XHJcbiAgICByZXR1cm4gVmFsdWUgIT0gbnVsbCAmJiBWYWx1ZSAhPSB1bmRlZmluZWQgJiYgVmFsdWUubGVuZ3RoID4gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gRW5hYmxlU2VhcmNoRm9ybSgpIHtcclxuICAgIGZ1bmN0aW9uIHNlYXJjaEFjdG9uKHNlbmRlcikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgJHNlbmRlciA9ICQoc2VuZGVyKTtcclxuICAgICAgICAgICAgdmFyICRmb3JtID0gJHNlbmRlci5jbG9zZXN0KCdbZGF0YS1zZWFyY2gtZm9ybV0nKTtcclxuICAgICAgICAgICAgdmFyIF91cmxRdWVyeSA9IGNvbXBvc2VVcmxRdWVyeSh7IHNlbGVjdDogJGZvcm0gfSk7XHJcbiAgICAgICAgICAgIHZhciBfcnQgPSAkZm9ybS5kYXRhKCdzZWFyY2gtZm9ybScpO1xyXG4gICAgICAgICAgICB2YXIgJHNvcnQgPSAkKCdbZGF0YS1zb3J0LW9iamVjdD1cIicgKyBfcnQgKyAnXCJdJyk7XHJcbiAgICAgICAgICAgIHZhciBfZGVmYXVsdCA9ICRmb3JtLmRhdGEoJ2RlZmF1bHQtc2VhcmNoJyk7XHJcbiAgICAgICAgICAgIHZhciBfZGVmYXVsdFNvcnQgPSAkZm9ybS5kYXRhKCdkZWZhdWx0LXNvcnQnKTtcclxuICAgICAgICAgICAgaWYgKCh0eXBlb2YgKF9kZWZhdWx0KSAhPSAndW5kZWZpbmVkJyAmJiBfZGVmYXVsdCAhPSAnJyAmJiBfdXJsUXVlcnkuaW5kZXhPZignL2FkZHJlc3MtJykgPT0gLTEgJiYgX3VybFF1ZXJ5LmluZGV4T2YoJy9tbHMtJykgPT0gLTEpKSBfdXJsUXVlcnkgKz0gX2RlZmF1bHQ7XHJcbiAgICAgICAgICAgIGlmICgkc29ydC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3NvcnRWYWx1ZSA9ICRzb3J0LnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgX3VybFF1ZXJ5ICs9IF9zb3J0VmFsdWUgIT0gbnVsbCAmJiBfc29ydFZhbHVlICE9ICcnID8gX3NvcnRWYWx1ZSA6ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiAoX2RlZmF1bHRTb3J0KSAhPSAndW5kZWZpbmVkJyAmJiBfZGVmYXVsdFNvcnQgIT0gbnVsbCAmJiBfZGVmYXVsdFNvcnQgIT0gJycpIF91cmxRdWVyeSArPSBfZGVmYXVsdFNvcnQ7XHJcbiAgICAgICAgICAgICRmb3JtLnRyaWdnZXJIYW5kbGVyKCdzZWFyY2gnLCBbeyBxdWVyeTogX3VybFF1ZXJ5IH1dKTtcclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICdbZGF0YS1zZWFyY2gtZm9ybV0gW2RhdGEtc2VhcmNoLWJ1dHRvbl0nLCB7fSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNlYXJjaEFjdG9uKHRoaXMpO1xyXG4gICAgfSk7XHJcbiAgICAkKGRvY3VtZW50KS5vbigna2V5ZG93bicsICdbZGF0YS1zZWFyY2gtZm9ybV0gW2RhdGEtc2VhcmNoLWFjdGlvbl0nLCB7fSwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzKVxyXG4gICAgICAgICAgICBzZWFyY2hBY3Rvbih0aGlzKTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoJ1tkYXRhLXNlYXJjaC1mb3JtXScpLm9uKCdzZWFyY2gnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgIHZhciAkc2VuZGVyID0gJCh0aGlzKTtcclxuICAgICAgICB2YXIgJHByZWZpeCA9ICRzZW5kZXIuZGF0YSgnc2VhcmNoLXByZWZpeCcpO1xyXG4gICAgICAgIHZhciBfcHJlZml4ID0gKElzTm90TnVsbCgkcHJlZml4KSAmJiAkcHJlZml4ICE9ICd1bmRlZmluZWQnKSA/ICRwcmVmaXggOiBHZXRTZWFyY2hQcmVmaXhGb3JSZWNvcmRUeXBlKCRzZW5kZXIuZGF0YSgnc2VhcmNoLWZvcm0nKSk7XHJcbiAgICAgICAgdmFyIHBhdHRlcm4gPSAvXlxcL1xcLy87XHJcbiAgICAgICAgaWYgKCFwYXR0ZXJuLnRlc3QoKF9wcmVmaXggIT0gbnVsbCAmJiBfcHJlZml4ICE9ICcnICYmIF9wcmVmaXggIT0gJ3VuZGVmaW5lZCcgPyBfcHJlZml4IDogJycpICsgZGF0YS5xdWVyeSkpXHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IChfcHJlZml4ICE9IG51bGwgJiYgX3ByZWZpeCAhPSAnJyAmJiBfcHJlZml4ICE9ICd1bmRlZmluZWQnID8gX3ByZWZpeCA6ICcnKSArIGRhdGEucXVlcnk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gR2V0U2VhcmNoUHJlZml4Rm9yUmVjb3JkVHlwZShyZWNvcmRUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHJlY29yZFR5cGUpIHtcclxuICAgICAgICBjYXNlICdQUk9QRVJUWSc6IHJldHVybiAnL3Byb3BlcnRpZXMnO1xyXG4gICAgICAgIGNhc2UgJ0NPTU1VTklUWSc6IHJldHVybiAnL2NvbW11bml0aWVzJztcclxuICAgICAgICBjYXNlICdCVUlMREVSJzogcmV0dXJuICcvYnVpbGRlcnMnO1xyXG4gICAgICAgIGNhc2UgJ1BST1BFUlRZUkVOVCc6IHJldHVybiAnL3Byb3BlcnR5LXNlYXJjaC1tYXAtb24tcmVudCc7XHJcbiAgICAgICAgY2FzZSAnUFJPUEVSVFlTT0xEJzogcmV0dXJuICcvcHJvcGVydHktc2VhcmNoLW1hcC9zb2xkJztcclxuICAgICAgICBjYXNlICdBR0VOVCc6IHJldHVybiAnL3JlYWwtZXN0YXRlLWFnZW50cyc7XHJcbiAgICAgICAgY2FzZSAnT0ZGSUNFJzogcmV0dXJuICcvcmVhbC1lc3RhdGUtb2ZmaWNlcyc7XHJcbiAgICAgICAgY2FzZSAnQkxPRyc6IHJldHVybiAnL2Jsb2cvc2VhcmNoJztcclxuICAgICAgICBjYXNlICdBR0VOVFRFQU0nOiByZXR1cm4gJy9yZWFsLWVzdGF0ZS1hZ2VudHMnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcvJztcclxufVxyXG5mdW5jdGlvbiBHZXREZWZhdWx0U29ydEZvclJlY29yZFR5cGUocmVjb3JkVHlwZSkge1xyXG4gICAgc3dpdGNoIChyZWNvcmRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSAnUFJPUEVSVFknOiByZXR1cm4gJy9kc29ydC1wJztcclxuICAgICAgICBjYXNlICdDT01NVU5JVFknOiByZXR1cm4gJy9kc29ydC1wJztcclxuICAgICAgICBjYXNlICdQUk9QRVJUWVJFTlQnOiByZXR1cm4gJy9kc29ydC1wJztcclxuICAgICAgICBjYXNlICdBR0VOVCc6IHJldHVybiAnL3NvcnQtbic7XHJcbiAgICAgICAgY2FzZSAnQUdFTlRURUFNJzogcmV0dXJuICcvc29ydC1uJztcclxuICAgICAgICBjYXNlICdPRkZJQ0UnOiByZXR1cm4gJy9zb3J0LW4nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG59XHJcbmZ1bmN0aW9uIGdldENvb2tpZShjbmFtZSkge1xyXG4gICAgdmFyIG5hbWUgPSBjbmFtZSArIFwiPVwiO1xyXG4gICAgdmFyIGRlY29kZWRDb29raWUgPSBkZWNvZGVVUklDb21wb25lbnQoZG9jdW1lbnQuY29va2llKTtcclxuICAgIHZhciBjYSA9IGRlY29kZWRDb29raWUuc3BsaXQoJzsnKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2EubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYyA9IGNhW2ldO1xyXG4gICAgICAgIHdoaWxlIChjLmNoYXJBdCgwKSA9PSAnICcpIHtcclxuICAgICAgICAgICAgYyA9IGMuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYy5pbmRleE9mKG5hbWUpID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGMuc3Vic3RyaW5nKG5hbWUubGVuZ3RoLCBjLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwiXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXRNYXBEZWZhdWx0KCkge1xyXG4gICAgaWYgKHdpbmRvdy5vbk1hcExvYWRlZCkgd2luZG93Lm9uTWFwTG9hZGVkKCk7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBFbmFibGVEZW1hbmRJbXBvcnQoKSB7XHJcbiAgICBfaW5pdCgpO1xyXG4gICAgZnVuY3Rpb24gX2luaXQoKSB7XHJcbiAgICAgICAgJChcImltZ1tkYXRhLWRlbWFuZC1rZXldXCIpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBHZXRQcm9wZXJ0aWVzKCQodGhpcyksICQodGhpcykuZGF0YSgnZGVtYW5kLXVybCcpLCAkKHRoaXMpLmRhdGEoJ2RlbWFuZC1rZXknKSwgJCh0aGlzKS5kYXRhKCdsYXlvdXQnKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnW2RhdGEtY2staHJlZl0nLCBudWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgR2V0UHJvcGVydGllcygkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWNrLXByb3BlcnR5bGlzdF06Zmlyc3QnKSwgJCh0aGlzKS5kYXRhKCdjay1ocmVmJyksICQodGhpcykucGFyZW50cygnW2RhdGEtY2stcHJvcGVydHlsaXN0XTpmaXJzdCcpLmRhdGEoJ2NrLWRlbWFuZC1rZXknKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eWxpc3RdOmZpcnN0JykuZGF0YSgnY2stZGVtYW5kLWxheW91dCcpKTtcclxuICAgIH0pO1xyXG5cclxuKGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBzZWxlY3RvckVsZW1lbnQ7XHJcbiAgICB2YXIgY3VycmVudFNldHRpbmdzO1xyXG4gICAgdmFyIGxhbmd1YWdlU291cmNlcyA9IHtcclxuICAgICAgICBsYW5ndWFnZXM6IFtcclxuICAgICAgICAgICAgeyBjb2RlOiAnZW4nLCBsYWJlbDogJ0VuZ2xpc2gnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ2VzJywgbGFiZWw6ICdTcGFuaXNoJywgbG9jYWxMYWJlbDogJ0VzcGHDsW9sJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdubCcsIGxhYmVsOiAnRHV0Y2gnLCBsb2NhbExhYmVsOiAnTmVkZXJsYW5kcycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAncHInLCBsYWJlbDogJ1BvcnR1Z2VzZScsIGxvY2FsTGFiZWw6ICdQb3J0dWd1w6pzJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdmcicsIGxhYmVsOiAnRnJlbmNoJywgbG9jYWxMYWJlbDonRnJhbsOnYWlzJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY3VycmVuY2llczogW1xyXG4gICAgICAgICAgICB7IGNvZGU6ICdVU0QnLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdEb2xsYXInLCBmb3JtYXQ6ICckIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0FFRCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ1VuaXRlZCBBcmFiIEVtaXJhdGVzIERpcmhhbScsIGZvcm1hdDogJ0FFRCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdCU0QnLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdCYWhhbWlhbiBEb2xsYXInLCBmb3JtYXQ6ICdCJCMjIywjIyMsIyMjLiMjJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdDQUQnLCBiYXNlOiAnVVNEJywgbGFiZWw6ICdDYW5hZGlhbiBEb2xsYXInLCBmb3JtYXQ6ICckIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0RPUCcsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0RvbWluaWNhbiBQZXNvJywgZm9ybWF0OiAnUkQkIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0VVUicsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ0V1cm8nLCBmb3JtYXQ6ICfigqwjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnSk1EJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnSmFtYWljYW4gRG9sbGFyJywgZm9ybWF0OiAnSiQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnS1lEJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnQ2F5bWFuIElzbGFuZHMgRG9sbGFyJywgZm9ybWF0OiAnQ0kkIyMjLCMjIywjIyMuIyMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ01YTicsIGJhc2U6ICdVU0QnLCBsYWJlbDogJ01leGljYW4gUGVzbycsIGZvcm1hdDogJyQjIyMsIyMjLCMjIy4jIycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnUEFCJywgYmFzZTogJ1VTRCcsIGxhYmVsOiAnUGFuYW1hbmlhbiBCYWxib2EnLCBmb3JtYXQ6ICdCLy4jIyMsIyMjLCMjIy4jIycgfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5pdHM6IFtcclxuICAgICAgICAgICAgeyBjb2RlOiAnaW1wZXJpYWwnLCBsYWJlbDogJ0ltcGVyaWFsJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdtZXRyaWMnLCBsYWJlbDogJ01ldHJpYycgfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcHJlc2V0czogW1xyXG4gICAgICAgICAgICB7IGNvZGU6ICdCUycsIGxvbmdDb2RlOidCSFMnLCBsYWJlbDogJ0JhaGFtYXMnLCBjdXJyZW5jeTogJ0JTRCcsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnQ0EnLCBsb25nQ29kZTogJ0NBTicsIGxhYmVsOiAnQ2FuYWRhJywgY3VycmVuY3k6ICdDQUQnLCBsYW5ndWFnZTogWydlbicsICdmciddLCBtZXNzdXJlbWVudDogJ21ldHJpYycsIHN0YXRlczogeyAnUUMnOidmcicgfSB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdKTScsIGxvbmdDb2RlOidKQU0nLCBsYWJlbDogJ0phbWFpY2EnLCBjdXJyZW5jeTogJ0pNRCcsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnS1knLCBsb25nQ29kZTonQ1lNJywgbGFiZWw6ICdDYXltYW4gSXNsYW5kcycsIGN1cnJlbmN5OiAnS1lEJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdUQycsIGxvbmdDb2RlOidUQ0EnLCBsYWJlbDogJ1R1cmtzICYgQ2FpY29zIElzbGFuZHMnLCBsb2NhbExhYmVsOiAnJywgY3VycmVuY3k6ICdVU0QnLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdpbXBlcmlhbCcgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnVVMnLCBsb25nQ29kZTonVVNBJywgbGFiZWw6ICdVbml0ZWQgU3RhdGVzJywgbG9jYWxMYWJlbDogJycsIGN1cnJlbmN5OiAnVVNEJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnaW1wZXJpYWwnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ0RZJywgbG9uZ0NvZGU6J0RPTScsIGxhYmVsOiAnRG9taW5pY2FuIFJlcHVibGljJywgbG9jYWxMYWJlbDogJ1JlcMO6YmxpY2EgRG9taW5pY2FuYScsIGN1cnJlbmN5OiAnVVNEJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdFUycsIGxvbmdDb2RlOidFU1AnLCBsYWJlbDogJ1NwYWluJywgbG9jYWxMYWJlbDogJ0VzcGHDsWEnLCBjdXJyZW5jeTogJ0VVUicsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnTVgnLCBsb25nQ29kZTonTUVYJywgbGFiZWw6ICdNZXhpY28nLCBsb2NhbExhYmVsOiAnTcOpeGljbycsIGN1cnJlbmN5OiAnTVhOJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG4gICAgICAgICAgICB7IGNvZGU6ICdQQScsIGxvbmdDb2RlOidQQU4nLCBsYWJlbDogJ1BhbmFtYScsIGxvY2FsTGFiZWw6ICdQYW5hbcOhJywgY3VycmVuY3k6ICdQQUInLCBsYW5ndWFnZTogJ2VuJywgbWVzc3VyZW1lbnQ6ICdtZXRyaWMnIH0sXHJcbiAgICAgICAgICAgIHsgY29kZTogJ05MJywgbG9uZ0NvZGU6J05MRCcsIGxhYmVsOiAnTmVkZXJsYW5kcycsIGxvY2FsTGFiZWw6ICdOZWRlcmxhbmQnLCBjdXJyZW5jeTogJ0VVUicsIGxhbmd1YWdlOiAnZW4nLCBtZXNzdXJlbWVudDogJ21ldHJpYycgfSxcclxuICAgICAgICAgICAgeyBjb2RlOiAnUFQnLCBsb25nQ29kZTonUFJUJywgbGFiZWw6ICdQb3J0dWdhbCcsIGN1cnJlbmN5OiAnRVVSJywgbGFuZ3VhZ2U6ICdlbicsIG1lc3N1cmVtZW50OiAnbWV0cmljJyB9LFxyXG5cclxuICAgICAgICBdLFxyXG4gICAgICAgIHVuaXRDb252ZXJ0aW9uczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB1bml0OiAnU1FGVCcsXHJcbiAgICAgICAgICAgICAgICB0cmFnZXRVbml0OiAnU3EuTScsICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3RhbnQ6IDAuMDkyOTAzLFxyXG4gICAgICAgICAgICAgICAgbm90YXRpb246IFsnU3FmdCcsICdTcS5GdCcsICdTcS5GdC4nLCAnU3EuIEZ0LicsICdTRicsICdzcXVhcmUgZmVldCcsICdzcXVhcmUgZmVldHMnXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB1bml0OiAnTUknLFxyXG4gICAgICAgICAgICAgICAgdHJhZ2V0VW5pdDogJ0tNJyxcclxuICAgICAgICAgICAgICAgIGNvbnN0YW50OiAxLjYwOTM0LFxyXG4gICAgICAgICAgICAgICAgbm90YXRpb246WydtaScsJ21pbGVzJywnbWlsZSddXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHVuaXQ6ICdBQycsXHJcbiAgICAgICAgICAgICAgICB0cmFnZXRVbml0OiAnU3EuTScsXHJcbiAgICAgICAgICAgICAgICBjb25zdGFudDogNDA0Ni44NixcclxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiBbJ2FjcmUnLCAnYWNyZXMnXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG5cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciByZWNlbnRTdGF0ZSA9IG51bGw7XHJcbiAgICB2YXIgdW5pdENvbnZlcnRpb25TY2hlbWEgPSBudWxsOyAgICBcclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBpbml0KCkge1xyXG4gICAgICAgIHZhciBjaGFuZ2VMYW5ndWFnZU5vZGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWxhbmd1YWdlXScpO1xyXG4gICAgICAgIGNoYW5nZUxhbmd1YWdlTm9kZXMuZm9yRWFjaChlbmFibGVMYW5ndWFnZVNlbGVjdG9yKTtcclxuICAgICAgICB2YXIgaXNSZXF1aXJlQXV0b0RpY292ZXJ5ID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuICAgICAgICBpZiAoY3VycmVudD8uY29kZSlcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UudXBkYXRlJywgeyBkZXRhaWw6IGN1cnJlbnQgfSkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpc1JlcXVpcmVBdXRvRGljb3ZlcnkgPSB0cnVlO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLmNvdW50cnkuYXV0by1kaXNjb3ZlcnknLCBmdW5jdGlvbiAoY291bnRyeSkgeyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHZhciBhdXRvQ291bnRyeSA9IGxhbmd1YWdlU291cmNlcy5wcmVzZXRzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5jb2RlID09IGNvdW50cnkuZGV0YWlsLmNvdW50cnlDb2RlOyB9KTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0b0NvdW50cnkgIT0gbnVsbCAmJiBhdXRvQ291bnRyeS5sZW5ndGggPiAwICYmIGF1dG9Db3VudHJ5WzBdLmNvZGUgIT0gJ1VTJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBhdXRvQ291bnRyeVswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVUb1NldCA9IEFycmF5LmlzQXJyYXkoYXV0b0NvdW50cnlbMF1ba2V5XSkgPyBhdXRvQ291bnRyeVswXVtrZXldWzBdIDogYXV0b0NvdW50cnlbMF1ba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PSAnbGFuZ3VhZ2UnICYmIGF1dG9Db3VudHJ5WzBdLnN0YXRlcyAmJiBhdXRvQ291bnRyeVswXS5zdGF0ZXNbY291bnRyeS5kZXRhaWwuc3RhdGVdKSB2YWx1ZVRvU2V0ID0gYXV0b0NvdW50cnlbMF0uc3RhdGVzW2NvdW50cnkuZGV0YWlsLnN0YXRlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0KGtleSwgdmFsdWVUb1NldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLnVwZGF0ZScsIHsgZGV0YWlsOiBhdXRvQ291bnRyeVswXSB9KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY3VycmVudCA9IGxhbmd1YWdlU291cmNlcy5wcmVzZXRzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5jb2RlID09ICdVUyc7IH0pWzBdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gY3VycmVudClcclxuICAgICAgICAgICAgICAgIHNldChrZXksIEFycmF5LmlzQXJyYXkoY3VycmVudFtrZXldKSA/IGN1cnJlbnRba2V5XVswXSA6IGN1cnJlbnRba2V5XSk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLnVwZGF0ZScsIHsgZGV0YWlsOiBjdXJyZW50IH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdXBkYXRlUHJpY2UodHJ1ZSk7ICAgICAgICAgIFxyXG4gICAgICAgIGlmIChjdXJyZW50Lmxhbmd1YWdlICYmIGN1cnJlbnQubGFuZ3VhZ2UuaW5kZXhPZignZW4nKSA9PSAtMSlcclxuICAgICAgICAgICAgdXBkYXRlTGFuZ3VhZ2UoKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVjZW50U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50KTtcclxuICAgICAgICAgICAgc2V0TGFuZ3VhZ2VUb1N0b3JlKHsgTG9jYWxlOiAnZW5fVVMnIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhdHRhY2hBY3Rpb25zKCk7XHJcbiAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hID0gYXdhaXQgYnVpbGRVbml0Q29udmVydGlvblNjaGVtYSgpOyAgICAgICAgXHJcbiAgICAgICAgdXBkYXRlTWVzc3VyZW1lbnQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKCFpc1JlcXVpcmVBdXRvRGljb3ZlcnkpIHtcclxuICAgICAgICAgICAgaWYgKCF3aW5kb3cuYWdMb2NhbGUpIHdpbmRvdy5hZ0xvY2FsZSA9IHt9O1xyXG4gICAgICAgICAgICB3aW5kb3cuYWdMb2NhbGUubG9jYWxlID0gY3VycmVudDtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UudXBkYXRlLnN1Y2Nlc3MnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGJ1aWxkVW5pdENvbnZlcnRpb25TY2hlbWEoKSB7XHJcbiAgICAgICAgdmFyIGV4cHJlc3Npb25TdHJpbmcgPSAnJztcclxuICAgICAgICB2YXIgbm90YXRpb25FeHByZXNzaW9uU3RyaW5nID0gJyc7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgbm90YXRpb25FeHByZXNzaW9uczoge30sXHJcbiAgICAgICAgICAgIG5vdGF0aW9uT25seUV4cHJlc3Npb25zOiB7fSxcclxuICAgICAgICAgICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkgeyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnJlcGxhY2VBbGwoL1teMC05XFxcXC5dL2dpLCAnJykpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZvcm1hdFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLHsgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBoYXZlVmFsaWRBdHRyaWJ1dGU6IGZ1bmN0aW9uIChpdGVtKSB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaGFzQXR0cmlidXRlID8gaXRlbS5oYXNBdHRyaWJ1dGUoJ2RhdGEtdGgnKSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRMYWJlbEZvckF0dHJpYnV0ZTogZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldEF0dHJpYnV0ZT9pdGVtLmdldEF0dHJpYnV0ZSgnZGF0YS10aCcpOicnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRMYWJlbEZvckF0dHJpYnV0ZTogZnVuY3Rpb24gKGl0ZW0sIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5zZXRBdHRyaWJ1dGUpXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGgnLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldFZhbHVlRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaW5uZXJUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRWYWx1ZUZvckF0dHJpYnV0ZTogZnVuY3Rpb24gKGl0ZW0sIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmlubmVyVGV4dCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgdmFyIHN1YkV4cHJlc3Npb25TdHJpbmcgPSAnJywgc3ViTm90YXRpb25FeHByZXNzaW9uU3RyaW5nID0gJyc7XHJcbiAgICAgICAgICAgIGl0ZW0ubm90YXRpb24uZm9yRWFjaChmdW5jdGlvbiAobm90YXRpb25JdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBzdWJOb3RhdGlvbkV4cHJlc3Npb25TdHJpbmcgKz0gKHN1Yk5vdGF0aW9uRXhwcmVzc2lvblN0cmluZyAhPSAnJyA/ICd8JyA6ICcnKSArICcoKD88Tj4nICsgbm90YXRpb25JdGVtLnJlcGxhY2VBbGwoL1xccy9naSwgJ1xcXFxzJykucmVwbGFjZUFsbCgvKFteMC05QS16XSkvZ2ksICdcXFxcJDEnKSArICcpKFxcXFxzfFteQS16XXwkKSknO1xyXG4gICAgICAgICAgICAgICAgc3ViRXhwcmVzc2lvblN0cmluZyArPSAoc3ViRXhwcmVzc2lvblN0cmluZyAhPSAnJyA/ICd8JyA6ICcnKSArICcoKD88Vj5bMC05XFxcXCxcXFxcLl0rKShcXFxcbnxcXFxccykqKD88Tj4nICsgbm90YXRpb25JdGVtLnJlcGxhY2VBbGwoL1xccy9naSwgJ1xcXFxzJykucmVwbGFjZUFsbCgvKFteMC05QS16XSkvZ2ksJ1xcXFwkMScpICsgJykoXFxcXHN8W15BLXpdfCQpKSc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXN1bHQubm90YXRpb25FeHByZXNzaW9uc1tpdGVtLnVuaXRdID0gbmV3IFJlZ0V4cChzdWJFeHByZXNzaW9uU3RyaW5nLCAnZ21pJyk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5ub3RhdGlvbk9ubHlFeHByZXNzaW9uc1tpdGVtLnVuaXRdID0gbmV3IFJlZ0V4cChzdWJOb3RhdGlvbkV4cHJlc3Npb25TdHJpbmcsICdnbWknKTtcclxuICAgICAgICAgICAgZXhwcmVzc2lvblN0cmluZyArPSAoZXhwcmVzc2lvblN0cmluZyAhPSAnJyA/ICd8JyA6ICcnKSArICcoJyArIHN1YkV4cHJlc3Npb25TdHJpbmcgKyAnKSc7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIG5vdGF0aW9uRXhwcmVzc2lvblN0cmluZyArPSAobm90YXRpb25FeHByZXNzaW9uU3RyaW5nICE9ICcnID8gJ3wnIDogJycpICsgJygnICsgc3ViTm90YXRpb25FeHByZXNzaW9uU3RyaW5nICsgJyknOyBcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXN1bHQuZXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoZXhwcmVzc2lvblN0cmluZywgJ2dtaScpO1xyXG4gICAgICAgIHJlc3VsdC5ub3RhdGlvbkV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKG5vdGF0aW9uRXhwcmVzc2lvblN0cmluZywgJ2dtaScpO1xyXG4gICAgICAgIHJlc3VsdC52YWx1ZUV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKCcoKD88Vj5bMC05XFxcXCxdKyhcXFxcLlswLTldKyk/KShcXFxcbnxcXFxccykqKScsICdnbWknKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGF0dGFjaEFjdGlvbnMoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYW5ndWFnZS5jaGFuZ2UubGFuZ3VhZ2UnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZUxhbmd1YWdlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYW5ndWFnZS5jaGFuZ2UuY3VycmVuY3knLCBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHVwZGF0ZVByaWNlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYW5ndWFnZS5jaGFuZ2UubWVzc3VyZW1lbnQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZU1lc3N1cmVtZW50KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYXp5LnJlZnJlc2gnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZU1lc3N1cmVtZW50KCk7XHJcbiAgICAgICAgfSk7ICAgICAgICBcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLnJlZnJlc2guY3VycmVuY3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVByaWNlKCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcbiAgICB9ICAgIFxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUxhbmd1YWdlKCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7XHJcblxyXG4gICAgICAgIGlmIChyZWNlbnRTdGF0ZSA9PSBudWxsKSByZWNlbnRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnQpOyAgICAgICAgXHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50Py5sYW5ndWFnZSAhPSByZWNlbnRTdGF0ZT8ubGFuZ3VhZ2UpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsgfSwgMTAwMCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlY2VudFN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgY3VycmVudCk7XHJcblxyXG4gICAgICAgIHZhciBsYWJlbHMgPSBhd2FpdCBnZXRMYW5ndWFnZUxhYmVscygpOyAgICAgICAgICAgXHJcbiAgICAgICAgaWYgKGN1cnJlbnQ/Lmxhbmd1YWdlICYmIGxhYmVscy5Mb2NhbGUuaW5kZXhPZihjdXJyZW50Lmxhbmd1YWdlKSA9PSAtMSkge1xyXG4gICAgICAgICAgICBhd2FpdCB1cGRhdGVUb1NlcnZlcignbGFuZ3VhZ2UnKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGFiZWxzVG9DaGFuZ2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYWctbC1rXScpO1xyXG4gICAgICAgIGlmIChsYWJlbHNUb0NoYW5nZSlcclxuICAgICAgICAgICAgbGFiZWxzVG9DaGFuZ2UuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgeyB1cGRhdGVMYW5ndWFnZUxhYmVsKGl0ZW0sIGxhYmVscy5MYWJlbHMpOyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRMYW5ndWFnZUxhYmVsc0Zyb21TdG9yZSgpIHtcclxuICAgICAgICB2YXIgY3VycmVudExhYmVsc1N0cmluZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTE9DQUxMQUJFTFMnKTtcclxuICAgICAgICB2YXIgY3VycmVudExhYmVscyA9IG51bGw7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRMYWJlbHNTdHJpbmcgIT0gbnVsbClcclxuICAgICAgICAgICAgY3VycmVudExhYmVscyA9IEpTT04ucGFyc2UoY3VycmVudExhYmVsc1N0cmluZyk7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRMYWJlbHM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gc2V0TGFuZ3VhZ2VUb1N0b3JlKGN1cnJlbnRMYWJlbHMpIHtcclxuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0xPQ0FMTEFCRUxTJywgSlNPTi5zdHJpbmdpZnkoY3VycmVudExhYmVscykpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldExhbmd1YWdlTGFiZWxzKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50TGFiZWxzID0gYXdhaXQgZ2V0TGFuZ3VhZ2VMYWJlbHNGcm9tU3RvcmUoKTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMYWJlbHMgIT0gbnVsbCkgeyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHZhciBleHBpcnkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgZXhwaXJ5LnNldEhvdXJzKGV4cGlyeS5nZXRIb3VycygpIC0gMSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3IERhdGUoY3VycmVudExhYmVscy51cGRhdGVkT24pID4gZXhwaXJ5ICYmIGN1cnJlbnRMYWJlbHMuTG9jYWxlLmluZGV4T2YoY3VycmVudC5sYW5ndWFnZSkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY3VycmVudExhYmVscyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJlbnRMYWJlbHMgPSBhd2FpdCBHRVQoJy9zZXJ2aWNlcy9hZ29yYUNsaWVudC5hc2h4JywgeyB0eXBlOiAnTEFCRUxTJyB9KTtcclxuICAgICAgICAgICAgY3VycmVudExhYmVscy51cGRhdGVkT24gPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBzZXRMYW5ndWFnZVRvU3RvcmUoY3VycmVudExhYmVscyk7XHJcbiAgICAgICAgICAgIHJlc29sdmUoY3VycmVudExhYmVscyk7XHJcbiAgICAgICAgfSk7ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZSA9IC9hZ1xcLWxcXC1rXFwtKD88QXR0cmlidXRlPlteXFw9XSspL2dtO1xyXG4gICAgdmFyIGV4cHJlc3Npb25Gb3JBdHRyaWJ1dGVWYWx1ZSA9IC9cXFsoPzxMYWJlbElEPlteXFxdXSspXFxdL2dtO1xyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlTGFuZ3VhZ2VMYWJlbChpdGVtLCBsYWJlbHMpIHtcclxuICAgICAgICB2YXIga2V5ID0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWwtaycpO1xyXG4gICAgICAgIHZhciBtYXRjaCA9IG51bGw7XHJcbiAgICAgICAgaWYgKGxhYmVsc1trZXldIHx8IGV4cHJlc3Npb25Gb3JBdHRyaWJ1dGVWYWx1ZS50ZXN0KGtleSkpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGROb2RlcyAmJiBpdGVtLmNoaWxkTm9kZXMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb25Gb3JBdHRyaWJ1dGVWYWx1ZS5sYXN0SW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb25Gb3JBdHRyaWJ1dGVWYWx1ZS50ZXN0KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uRm9yQXR0cmlidXRlVmFsdWUubGFzdEluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dENvbnRlbnQgPSBrZXk7ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gZXhwcmVzc2lvbkZvckF0dHJpYnV0ZVZhbHVlLmV4ZWModGV4dENvbnRlbnQpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50ID0gdGV4dENvbnRlbnQucmVwbGFjZShtYXRjaFswXSwgbGFiZWxzW21hdGNoLmdyb3Vwcy5MYWJlbElEXSA/IGxhYmVsc1ttYXRjaC5ncm91cHMuTGFiZWxJRF0ubGJsIDogJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGROb2Rlc1swXS50ZXh0Q29udGVudCA9IHRleHRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmNoaWxkTm9kZXNbMF0udGV4dENvbnRlbnQgPSBsYWJlbHNba2V5XSA/IGxhYmVsc1trZXldLmxibCA6ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxhYmVsc1trZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGR1bW15Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgICAgICAgICAgICAgICBkdW1teU5vZGUuaW5uZXJIVE1MID0gbGFiZWxzW2tleV0ubGJsO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoSHRtbFdpdGhMYWJlbChpdGVtLCBkdW1teU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlID0gaXRlbS5hdHRyaWJ1dGVzW2ldOyAgICAgICAgICBcclxuICAgICAgICAgICAgZXhwcmVzc2lvbkZvckF0dHJpYnV0ZS5sYXN0SW5kZXggPSAwOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoKG1hdGNoID0gZXhwcmVzc2lvbkZvckF0dHJpYnV0ZS5leGVjKGF0dHJpYnV0ZS5uYW1lKSkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUlkZW50aWZpZXIgPSBtYXRjaC5ncm91cHMuQXR0cmlidXRlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IGV4cHJlc3Npb25Gb3JBdHRyaWJ1dGVWYWx1ZS5leGVjKGF0dHJpYnV0ZVZhbHVlKSkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlVmFsdWUucmVwbGFjZShtYXRjaFswXSwgbGFiZWxzW21hdGNoLmdyb3Vwcy5MYWJlbElEXT9sYWJlbHNbbWF0Y2guZ3JvdXBzLkxhYmVsSURdLmxibDonJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVJZGVudGlmaWVyLCBhdHRyaWJ1dGVWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbSAhPSBudWxsKVxyXG4gICAgICAgICAgICBpdGVtLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUuaXRlbScpKTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBtYXRjaEh0bWxXaXRoTGFiZWwoaXRlbSwgZG9tKSB7ICAgICAgICBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChkb20uY2hpbGROb2Rlc1tpXT8udGV4dENvbnRlbnQgJiYgaXRlbS5jaGlsZE5vZGVzW2ldPy50ZXh0Q29udGVudClcclxuICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGROb2Rlc1tpXS50ZXh0Q29udGVudCA9IGRvbS5jaGlsZE5vZGVzW2ldPy50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaSA8IGRvbS5jaGlsZE5vZGVzLmxlbmd0aCAmJiBpIDwgaXRlbS5jaGlsZE5vZGVzLmxlbmd0aClcclxuICAgICAgICAgICAgICAgIG1hdGNoSHRtbFdpdGhMYWJlbChpdGVtLmNoaWxkTm9kZXNbaV0sIGRvbS5jaGlsZE5vZGVzW2ldKTtcclxuICAgICAgICAgICAgZWxzZSByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByaWNlKGlzSW5pdCkge1xyXG4gICAgICAgIHZhciBjdXJyZW5jaWVzID0gYXdhaXQgZ2V0Q29udmVydGlvblJhdGVzKCk7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBnZXQoKTtcclxuICAgICAgICBpZiAoY3VycmVudC5jdXJyZW5jeSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVuY3kgPSBjdXJyZW5jaWVzLlJhdGVzPy5FeGNoYW5nZVJhdGVzPy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGl0ZW0uQ29kZSA9PSBjdXJyZW50LmN1cnJlbmN5OyB9KVswXTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbmN5TWV0YSA9IGxhbmd1YWdlU291cmNlcy5jdXJyZW5jaWVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5jb2RlID09IGN1cnJlbnQuY3VycmVuY3k7IH0pWzBdO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVuY3lNZXRhKVxyXG4gICAgICAgICAgICAgICAgY3VycmVuY3kuZm9ybWF0dGVyID0gY29udmVydEZvcm1hdFRvRXhwcmVzc2lvbihjdXJyZW5jeU1ldGEuZm9ybWF0KTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRDdXJyZW5jeSA9IGN1cnJlbmN5LkNvZGU7XHJcbiAgICAgICAgICAgIHZhciBwcmljZVRvQ2hhbmdlID0gaXNJbml0ID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FnLWwtcF06bm90KC5pcy1hcHBsaWVkKTpub3QoW2FnLWwtcD1cIjBcIl0pJykgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYWctbC1wXTpub3QoW2FnLWwtcD1cIjBcIl0pJyk7XHJcbiAgICAgICAgICAgIGlmIChwcmljZVRvQ2hhbmdlKVxyXG4gICAgICAgICAgICAgICAgcHJpY2VUb0NoYW5nZS5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChpdGVtKSB7IGlmIChpdGVtLmlubmVySFRNTC5pbmRleE9mKCd7eycpID4gLTEpIHJldHVybjsgdXBkYXRlSXRlbU9mZnNldENsYXNzKGl0ZW0pOyBpdGVtLmNsYXNzTGlzdC5hZGQoJ2lzLWFwcGxpZWQnKTsgdXBkYXRlUHJpY2VGb3JJdGVtKGl0ZW0sIGN1cnJlbmN5LCBjdXJyZW50Q3VycmVuY3ksIGN1cnJlbmNpZXMpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlSXRlbU9mZnNldENsYXNzKGl0ZW0pIHtcclxuICAgICAgICBpZiAoIWl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1hcHBsaWVkJykpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICB2YXIgcGFyZW50Q29sbGVjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRPZmZzZXQgPSAocGFyZW50Q29sbGVjdGlvbiA9IGl0ZW0uY2xvc2VzdCgnYXJ0aWNsZScpKSAhPSBudWxsICYmIHBhcmVudENvbGxlY3Rpb24ubGVuZ3RoID4gMCA/IHBhcmVudENvbGxlY3Rpb25bMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOiBpdGVtLnBhcmVudEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICB2YXIgcGFyZW50UG9pbnRzID0geyB5OiAocGFyZW50T2Zmc2V0LnRvcCArIHBhcmVudE9mZnNldC5ib3R0b20pIC8gMiwgeDogKHBhcmVudE9mZnNldC5sZWZ0ICsgcGFyZW50T2Zmc2V0LnJpZ2h0KSAvIDIgfTtcclxuICAgICAgICAgICAgdmFyIGl0ZW1Qb2ludHMgPSB7IHk6IChjdXJyZW50T2Zmc2V0LnRvcCArIGN1cnJlbnRPZmZzZXQuYm90dG9tKSAvIDIsIHg6IChjdXJyZW50T2Zmc2V0LmxlZnQgKyBjdXJyZW50T2Zmc2V0LnJpZ2h0KSAvIDIgfTtcclxuICAgICAgICAgICAgdmFyIGNsYXNzQXhpcyA9ICdhZy1sLXAtcCc7XHJcbiAgICAgICAgICAgIGNsYXNzQXhpcyArPSAnLScgKyAocGFyZW50UG9pbnRzLnggPiBpdGVtUG9pbnRzLnggPyAnbCcgOiAncicpO1xyXG4gICAgICAgICAgICBjbGFzc0F4aXMgKz0gJy0nICsgKHBhcmVudFBvaW50cy55ID4gaXRlbVBvaW50cy55ID8gJ2InIDogJ3QnKTtcclxuICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKGNsYXNzQXhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldENvbnZlcnRpb25SYXRlcygpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICB2YXIgY29udmVydGlvblJhdGVzU3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0NPTlZFUlRJT05SQVRFUycpO1xyXG4gICAgICAgICAgICB2YXIgY29udmVydGlvblJhdGVzID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKGNvbnZlcnRpb25SYXRlc1N0b3JlZCAmJiBjb252ZXJ0aW9uUmF0ZXNTdG9yZWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbnZlcnRpb25SYXRlcyA9IEpTT04ucGFyc2UoY29udmVydGlvblJhdGVzU3RvcmVkKTtcclxuICAgICAgICAgICAgICAgIHZhciBleHBpcnkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgZXhwaXJ5LnNldERhdGUoZXhwaXJ5LmdldERhdGUoKSAtIDEpOyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChuZXcgRGF0ZShjb252ZXJ0aW9uUmF0ZXMudXBkYXRlZE9uKSA+IGV4cGlyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY29udmVydGlvblJhdGVzKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udmVydGlvblJhdGVzID0gYXdhaXQgR0VUKCcvc2VydmljZXMvYWdvcmFDbGllbnQuYXNoeCcsIHsgdHlwZTogJ0NPTlZFUlRJT05SQVRFUycgfSk7XHJcbiAgICAgICAgICAgIGNvbnZlcnRpb25SYXRlcy51cGRhdGVkT24gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdDT05WRVJUSU9OUkFURVMnLCBKU09OLnN0cmluZ2lmeShjb252ZXJ0aW9uUmF0ZXMpKTtcclxuICAgICAgICAgICAgcmVzb2x2ZShjb252ZXJ0aW9uUmF0ZXMpO1xyXG4gICAgICAgIH0pOyAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGV4cHJlc3Npb25Gb3JQcmljZSA9IC8oKFteQS16MC05XXxbQS1aXXxbQS1aXXszfSkqXFxzP1swLTlcXCxcXC5dKykvZ207XHJcblxyXG4gICAgZnVuY3Rpb24gY29udmVydEZvcm1hdFRvRXhwcmVzc2lvbihmb3JtYXQpIHtcclxuICAgICAgICB2YXIgZm9ybWF0U3RyaW5nID0gZm9ybWF0LnJlcGxhY2UoL1sjXFwsXFwuXSsvZ2ksJycpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRTdHJpbmcgKyBudW1iZXIudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVQcmljZUZvckl0ZW0oaXRlbSwgY3VycmVuY3ksIGN1cnJlbnRDdXJyZW5jeSwgY3VycmVuY2llcykge1xyXG4gICAgICAgIHZhciBpc0RlZmF1bHRDdXJyZW5jeUNoYW5nZSA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAtYycpICE9IG51bGwgJiYgKChpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wLW8nKSA9PSBudWxsICYmIGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAtby1wJykgPT0gbnVsbCkgfHwgKGl0ZW0uZ2V0QXR0cmlidXRlKCdhZy1sLXAtby1wJykgIT0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWwtcCcpKSkgJiYgaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWwtcC1jJykgIT0gY3VycmVudEN1cnJlbmN5O1xyXG4gICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wLWMnKSA9PSBjdXJyZW50Q3VycmVuY3kgJiYgaXNEZWZhdWx0Q3VycmVuY3lDaGFuZ2UgJiYgZXhwcmVzc2lvbkZvclByaWNlLnRlc3QoaXRlbS50ZXh0Q29udGVudCkpIHJldHVybjtcclxuICAgICAgICB2YXIgY3VycmVudFByaWNlQ3VycmVuY3kgPSBpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wLWMnKTtcclxuICAgICAgICB2YXIgY3VycmVuY3lOb25Tb3VyY2VDb25zdGFudCA9IDE7XHJcbiAgICAgICAgdmFyIHNvdXJjZUN1cnJlbmN5ID0gbnVsbDtcclxuICAgICAgICBcclxuICAgICAgICAgICAgdHJ5IHsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBzb3VyY2VDdXJyZW5jeSA9IGN1cnJlbmNpZXMuUmF0ZXM/LkV4Y2hhbmdlUmF0ZXM/LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5Db2RlID09IGN1cnJlbnRQcmljZUN1cnJlbmN5OyB9KVswXTtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW5jeU1ldGEgPSBsYW5ndWFnZVNvdXJjZXMuY3VycmVuY2llcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGl0ZW0uY29kZSA9PSBzb3VyY2VDdXJyZW5jeS5Db2RlOyB9KVswXTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW5jeU1ldGEpXHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQ3VycmVuY3kuZm9ybWF0dGVyID0gY29udmVydEZvcm1hdFRvRXhwcmVzc2lvbihjdXJyZW5jeU1ldGEuZm9ybWF0KTtcclxuICAgICAgICAgICAgICAgIGN1cnJlbmN5Tm9uU291cmNlQ29uc3RhbnQgPSBzb3VyY2VDdXJyZW5jeS5Db25zdGFudDtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSBpdGVtLmNoaWxkTm9kZXNbaV0sIG1hdGNoID0gbnVsbDtcclxuICAgICAgICAgICAgZXhwcmVzc2lvbkZvclByaWNlLmxhc3RJbmRleCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChub2RlLnRleHRDb250ZW50ICYmIChtYXRjaCA9IGV4cHJlc3Npb25Gb3JQcmljZS5leGVjKG5vZGUudGV4dENvbnRlbnQpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVuY3kgJiYgY3VycmVuY3kgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnYWctbC1wLWMtdCcsIGN1cnJlbmN5LkNvZGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmYXVsdEN1cnJlbmN5Q2hhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2FnLWwtcC1vLXAnLCBpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdhZy1sLXAtbycsIHNvdXJjZUN1cnJlbmN5ID8gc291cmNlQ3VycmVuY3kuZm9ybWF0dGVyKHBhcnNlRmxvYXQoaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWwtcCcpKSkgOiBpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wJykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5nZXRBdHRyaWJ1dGUoJ2FnLWwtcC1jJykgIT0gbnVsbCAmJiBpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wLWMnKSA9PSBjdXJyZW5jeS5Db2RlKSBpdGVtLnJlbW92ZUF0dHJpYnV0ZSgnYWctbC1wLW8nKTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uRm9yUHJpY2UubGFzdEluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIHZhciBwcmljZUNvbnZlcnRlZCA9IE1hdGgucm91bmQocGFyc2VGbG9hdChpdGVtLmdldEF0dHJpYnV0ZSgnYWctbC1wJykpIC8gY3VycmVuY3lOb25Tb3VyY2VDb25zdGFudCAqIGN1cnJlbmN5LkNvbnN0YW50KTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBub2RlLnRleHRDb250ZW50ID0gbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKG1hdGNoWzBdLCBjdXJyZW5jeS5mb3JtYXR0ZXIgPyBjdXJyZW5jeS5mb3JtYXR0ZXIocHJpY2VDb252ZXJ0ZWQpIDogcHJpY2VDb252ZXJ0ZWQudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVNZXNzdXJlbWVudChpc0luaXQpIHtcclxuICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIHZhciBpc0FwcGxpZWQgPSBjdXJyZW50Lm1lc3N1cmVtZW50ID09ICdtZXRyaWMnO1xyXG4gICAgICAgIHZhciBtZXNzdXJlbWVudHNUb0NoYW5nZSA9IGlzQXBwbGllZCA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1sLW1dOm5vdCguaXMtYXBwbGllZCknKSA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy1sLW1dJyk7XHJcbiAgICAgICAgaWYgKGlzQXBwbGllZCkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtZXNzdXJlbWVudHNUb0NoYW5nZSkgbWVzc3VyZW1lbnRzVG9DaGFuZ2UuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoaXRlbSkgeyBpZiAoaXRlbS5pbm5lckhUTUwuaW5kZXhPZigne3snKSA+IC0xIHx8IGl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1hcHBsaWVkJykpIHJldHVybjsgaXRlbS5jbGFzc0xpc3QuYWRkKCdpcy1hcHBsaWVkJyk7IHVwZGF0ZUl0ZW1NZXNzdXJlbWVudChpdGVtLCBpdGVtKTsgfSk7XHJcbiAgICAgICAgICAgIH0sIGlzSW5pdD81MDA6MCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG1lc3N1cmVtZW50c1RvQ2hhbmdlKSBtZXNzdXJlbWVudHNUb0NoYW5nZS5mb3JFYWNoKGFzeW5jIGZ1bmN0aW9uIChpdGVtKSB7IGlmIChpdGVtLmlubmVySFRNTC5pbmRleE9mKCd7eycpID4gLTEgfHwgIWl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1hcHBsaWVkJykpIHJldHVybjsgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hcHBsaWVkJyk7IGl0ZW0uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLm1lc3N1cmVtZW50LnJldmVydCcpKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUl0ZW1NZXNzdXJlbWVudChpdGVtLHJvb3RFbGVtZW50LCBpc0luaXQsIGlzVW5pdEZvdW5kLCB1bml0KSB7XHJcblxyXG4gICAgICAgIGlmIChpc1VuaXRGb3VuZCAmJiB1bml0KSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZE5vZGVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmNoaWxkTm9kZXMuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoY2hpbGROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZT8udGV4dENvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUZXh0ID0gY2hpbGROb2RlLnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZVJlc3VsdCA9IGF3YWl0IHJlcGxhY2VNZXNzdXJlbWVudFdpdGhVbml0KGNoaWxkTm9kZS50ZXh0Q29udGVudCwgMiwgdW5pdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS50ZXh0Q29udGVudCA9IHJlcGxhY2VSZXN1bHQuY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLm1lc3N1cmVtZW50LnJldmVydCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUudGV4dENvbnRlbnQgPSBjdXJyZW50VGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmluZE1lc3N1cmVtZW50RnJvbUF0dHJpYnV0ZShpdGVtKSkge1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudExhYmVsID0gbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLmdldExhYmVsRm9yQXR0cmlidXRlKGl0ZW0pO1xyXG4gICAgICAgICAgICB2YXIgbGFiZWxSZXBsYWNlUmVzdWx0ID0gYXdhaXQgcmVwbGFjZU1lc3N1cmVtZW50KGN1cnJlbnRMYWJlbCwgMSk7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5zZXRMYWJlbEZvckF0dHJpYnV0ZShpdGVtLCBsYWJlbFJlcGxhY2VSZXN1bHQuY29udGVudCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEuZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoaXRlbSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciB2YWx1ZVJlcGxhY2VSZXN1bHQgPSBhd2FpdCByZXBsYWNlTWVzc3VyZW1lbnRXaXRoVW5pdChjdXJyZW50VmFsdWUsIDIsIGxhYmVsUmVwbGFjZVJlc3VsdC51bml0c1swXSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5zZXRWYWx1ZUZvckF0dHJpYnV0ZShpdGVtLCB2YWx1ZVJlcGxhY2VSZXN1bHQuY29udGVudCk7XHJcbiAgICAgICAgICAgIHJvb3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLm1lc3N1cmVtZW50LnJldmVydCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5zZXRMYWJlbEZvckF0dHJpYnV0ZShpdGVtLCBjdXJyZW50TGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLnNldFZhbHVlRm9yQXR0cmlidXRlKGl0ZW0sIGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtPy5jaGlsZE5vZGVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmNoaWxkTm9kZXMuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoY2hpbGROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERSAmJiBmaW5kTWVzc3VyZW1lbnRGcm9tTm9kZShjaGlsZE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VGV4dCA9IGNoaWxkTm9kZS50ZXh0Q29udGVudDsgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcGxhY2VSZXN1bHQgPSBhd2FpdCByZXBsYWNlTWVzc3VyZW1lbnQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwbGFjZVJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUudGV4dENvbnRlbnQgPSByZXBsYWNlUmVzdWx0LmNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlUmVzdWx0ID0gYXdhaXQgcmVwbGFjZU1lc3N1cmVtZW50KGNoaWxkTm9kZS50ZXh0Q29udGVudCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUudGV4dENvbnRlbnQgPSByZXBsYWNlUmVzdWx0LmNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtTWVzc3VyZW1lbnQoY2hpbGROb2RlLnBhcmVudEVsZW1lbnQsIHJvb3RFbGVtZW50LCBmYWxzZSwgdHJ1ZSwgcmVwbGFjZVJlc3VsdC51bml0c1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UubWVzc3VyZW1lbnQucmV2ZXJ0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLnRleHRDb250ZW50ID0gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW1NZXNzdXJlbWVudChjaGlsZE5vZGUsIHJvb3RFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZmluZE1lc3N1cmVtZW50RnJvbU5vZGUoaXRlbSkge1xyXG4gICAgICAgIHJldHVybiBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEuZXhwcmVzc2lvbi50ZXN0KGl0ZW0udGV4dENvbnRlbnQpIHx8IGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5ub3RhdGlvbkV4cHJlc3Npb24udGVzdChpdGVtLnRleHRDb250ZW50KTsgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZpbmRNZXNzdXJlbWVudEZyb21BdHRyaWJ1dGUoaXRlbSkgeyAgICAgICAgICAgIFxyXG4gICAgICAgIHZhciBtYXRjaCA9IGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5oYXZlVmFsaWRBdHRyaWJ1dGUoaXRlbSkgPyBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEuZ2V0TGFiZWxGb3JBdHRyaWJ1dGUoaXRlbSkubWF0Y2gobGFuZ3VhZ2VTb3VyY2VzLnVuaXRDb252ZXJ0aW9uU2NoZW1hLm5vdGF0aW9uRXhwcmVzc2lvbikgOiBudWxsOyAgICAgICAgICAgICAgICBcclxuICAgICAgICByZXR1cm4gbWF0Y2ggIT0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZXBsYWNlTWVzc3VyZW1lbnQoY29udGVudCwgbW9kZSkge1xyXG4gICAgICAgIHZhciB1bml0cyA9IFtdO1xyXG4gICAgICAgIHZhciByZXBsYWNlU3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghbW9kZSkgbW9kZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaXRlbSBvZiBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25zKSB7XHJcbiAgICAgICAgICAgIHZhciByZXBsYWNlVW5pdFJlc3VsdCA9IGF3YWl0IHJlcGxhY2VNZXNzdXJlbWVudFdpdGhVbml0KGNvbnRlbnQsIG1vZGUsIGl0ZW0pO1xyXG4gICAgICAgICAgICBjb250ZW50ID0gcmVwbGFjZVVuaXRSZXN1bHQuY29udGVudDtcclxuICAgICAgICAgICAgcmVwbGFjZVN1Y2Nlc3MgfD0gcmVwbGFjZVVuaXRSZXN1bHQuc3VjY2VzcztcclxuICAgICAgICAgICAgaWYgKHJlcGxhY2VVbml0UmVzdWx0LnN1Y2Nlc3MpXHJcbiAgICAgICAgICAgICAgICB1bml0cy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEubm90YXRpb25FeHByZXNzaW9uc1tpdGVtLnVuaXRdLmxhc3RJbmRleCA9IC0xO1xyXG4gICAgICAgICAgICBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEubm90YXRpb25Pbmx5RXhwcmVzc2lvbnNbaXRlbS51bml0XS5sYXN0SW5kZXggPSAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgY29udGVudDogY29udGVudCwgc3VjY2VzczogcmVwbGFjZVN1Y2Nlc3MsIHVuaXRzOiB1bml0cyB9O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VNZXNzdXJlbWVudFdpdGhVbml0KGNvbnRlbnQsIG1vZGUsIGl0ZW0pIHtcclxuICAgICAgICB2YXIgbWF0Y2ggPSBudWxsO1xyXG4gICAgICAgIHZhciBtYXRjaFN1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgICB3aGlsZSAoKG1hdGNoID0gZ2V0UmVwbGFjZU1lc3N1cmVtZW50RXhwcmVzc2lvbk1hdGNoKGNvbnRlbnQsIGl0ZW0sIG1vZGUpKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1hdGNoU3VjY2VzcyA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IG1vZGUgPT0gMSA/IDAgOiBwYXJzZUZsb2F0KGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5nZXRWYWx1ZShtYXRjaC5ncm91cHMuVikpOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgdW5pdCA9IG1hdGNoLmdyb3Vwcy5OO1xyXG4gICAgICAgICAgICB2YXIgc3RhcnRJbmRleCA9IG1hdGNoLmluZGV4O1xyXG4gICAgICAgICAgICB2YXIgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgbWF0Y2hWYWx1ZSA9IChtb2RlICE9IDEgPyBtYXRjaFswXS5yZXBsYWNlQWxsKG1hdGNoLmdyb3Vwcy5WLCBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEuZm9ybWF0VmFsdWUoTWF0aC5mbG9vcihNYXRoLnJvdW5kKHZhbHVlICogaXRlbS5jb25zdGFudCkpKSkgOiBtYXRjaFswXSkucmVwbGFjZUFsbCh1bml0LCBpdGVtLnRyYWdldFVuaXQpO1xyXG4gICAgICAgICAgICBpZiAobW9kZSA9PSAyICYmIGl0ZW0udGFyZ2V0Tm90YXRpb24pIG1hdGNoVmFsdWUgKz0gJyAnICsgaXRlbS50YXJnZXROb3RhdGlvbjtcclxuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIHN0YXJ0SW5kZXgpICsgbWF0Y2hWYWx1ZSArIGNvbnRlbnQuc3Vic3RyaW5nKGVuZEluZGV4KTtcclxuICAgICAgICAgICAgaWYgKG1vZGUgPT0gMikgcmV0dXJuIHsgY29udGVudDogY29udGVudCwgc3VjY2VzczogbWF0Y2hTdWNjZXNzIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGNvbnRlbnQ6IGNvbnRlbnQsIHN1Y2Nlc3M6IG1hdGNoU3VjY2VzcyB9O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFJlcGxhY2VNZXNzdXJlbWVudEV4cHJlc3Npb25NYXRjaCh2YWx1ZSwgaXRlbSwgbW9kZSkge1xyXG4gICAgICAgIGlmIChtb2RlID09IDApIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5ub3RhdGlvbkV4cHJlc3Npb25zW2l0ZW0udW5pdF0uZXhlYyh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IDEpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS5ub3RhdGlvbk9ubHlFeHByZXNzaW9uc1tpdGVtLnVuaXRdLmV4ZWModmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSAyKSB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlU291cmNlcy51bml0Q29udmVydGlvblNjaGVtYS52YWx1ZUV4cHJlc3Npb24ubGFzdEluZGV4ID0gLTE7XHJcbiAgICAgICAgICAgIHJldHVybiBsYW5ndWFnZVNvdXJjZXMudW5pdENvbnZlcnRpb25TY2hlbWEudmFsdWVFeHByZXNzaW9uLmV4ZWModmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZW5hYmxlTGFuZ3VhZ2VTZWxlY3RvcihpdGVtKSB7XHJcbiAgICAgICAgZ2V0RmxhZ0Nzc0NsYXNzKCdVUycpLnNwbGl0KCcgJykubWFwKGZ1bmN0aW9uIChjbGFzc05hbWUpIHsgaXRlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7IH0pO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGFuZ3VhZ2UudXBkYXRlJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaXRlbS5jbGFzc05hbWUgPSBpdGVtLmNsYXNzTmFtZS5yZXBsYWNlKC9mZmxhZ1xcLVtBLVpdezEsMn0vZ2ksICcnKTtcclxuICAgICAgICAgICAgZ2V0RmxhZ0Nzc0NsYXNzKGUuZGV0YWlsLmNvZGUpLnNwbGl0KCcgJykubWFwKGZ1bmN0aW9uIChjbGFzc05hbWUpIHsgaXRlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7IH0pO1xyXG4gICAgICAgICAgICBpZiAoZS5kZXRhaWwubG9uZ0NvZGUpXHJcbiAgICAgICAgICAgICAgICBzZXQoJ2xvbmdDb2RlJywgZS5kZXRhaWwubG9uZ0NvZGUpO1xyXG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpOyBcclxuICAgICAgICAgICAgaWYgKCF3aW5kb3cuYWdMb2NhbGUpIHdpbmRvdy5hZ0xvY2FsZSA9IHt9O1xyXG4gICAgICAgICAgICB3aW5kb3cuYWdMb2NhbGUubG9jYWxlID0gY3VycmVudDtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UudXBkYXRlLnN1Y2Nlc3MnKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmICghc2VsZWN0b3JFbGVtZW50KSBzZWxlY3RvckVsZW1lbnQgPSBhd2FpdCByZW5kZXJMYW5ndWFnZVNlbGVjdG9yKCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGVuZ2FnZUxhbmd1YWdlU2VsZWN0b3IoaXRlbSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBkaXNlbmdhZ2VBY3Rpb25MaXN0ZW5lcik7XHJcbiAgICAgICAgfSk7ICAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZGlzZW5nYWdlQWN0aW9uTGlzdGVuZXIoZSkgeyAgICAgICAgXHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBpZiAoZS50YXJnZXQuY2xvc2VzdCgnW2FnLWxhbmd1YWdlLXNlbGVjdF0sW2FnLWxhbmd1YWdlXScpID09IG51bGwpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGRpc2VuZ2FnZUFjdGlvbkxpc3RlbmVyKTtcclxuICAgICAgICAgICAgZGlzZW5nYWdlTGFuZ3VhZ2VTZWxlY3RvcihlLnRhcmdldCk7XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZW5nYWdlTGFuZ3VhZ2VTZWxlY3RvcihpdGVtKSB7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUuc3R5bGUudG9wID0gTWF0aC5mbG9vcihwb3NpdGlvbi50b3AgLSA4KSArICdweCc7XHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUuc3R5bGUucmlnaHQgPSAnY2FsYygxMDAlIC0gJyArIE1hdGguZmxvb3IocG9zaXRpb24ucmlnaHQgKyA4KSArICdweCknO1xyXG4gICAgICAgIHNlbGVjdG9yRWxlbWVudC5ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5hY3RpdmUnKT8uZm9yRWFjaChmdW5jdGlvbiAoYWN0aXZlSXRlbSkgeyBhY3RpdmVJdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOyB9KVxyXG4gICAgICAgIHNlbGVjdG9yRWxlbWVudC5ub2RlLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGRpc2VuZ2FnZUxhbmd1YWdlU2VsZWN0b3IoaXRlbSkgeyAgICAgICAgXHJcbiAgICAgICAgc2VsZWN0b3JFbGVtZW50Lm5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0RmxhZ0Nzc0NsYXNzKGNvZGUpIHtcclxuICAgICAgICByZXR1cm4gJ2ZmbGFnIGZmLWxnIGZmbGFnLScgKyBjb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldCgpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSB3aW5kb3cubG9jYWxTdG9yYWdlWydBR0xBTkdVQUdFJ107XHJcbiAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHt9O1xyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPSAnJykgY3VycmVudFZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdXBkYXRlVG9zZXJ2ZXJDYWxsID0gbnVsbDtcclxuICAgIHZhciB1cGRhdGVTdWNjZXMgPSBudWxsO1xyXG5cclxuICAgIGZ1bmN0aW9uIHNldChmaWVsZCwgdmFsdWUpIHsgICAgICAgIFxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gZ2V0KCk7ICAgICAgICBcclxuICAgICAgICBpZiAoY3VycmVudCA9PSB1bmRlZmluZWQpIGN1cnJlbnQgPSB7fTtcclxuICAgICAgICBpZiAoY3VycmVudFtmaWVsZF0gJiYgY3VycmVudFtmaWVsZF0gPT0gdmFsdWUpIHJldHVybjtcclxuICAgICAgICBjdXJyZW50W2ZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQUdMQU5HVUFHRScsIEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpKTtcclxuXHJcbiAgICAgICAgLy9UaHJvdHRsaW5nXHJcbiAgICAgICAgaWYgKHVwZGF0ZVRvc2VydmVyQ2FsbCAhPSBudWxsKSBjbGVhclRpbWVvdXQodXBkYXRlVG9TZXJ2ZXIpO1xyXG4gICAgICAgIHVwZGF0ZVRvc2VydmVyQ2FsbCA9IHNldFRpbWVvdXQoYXN5bmMgZnVuY3Rpb24gKCkgeyB1cGRhdGVUb3NlcnZlckNhbGwgPSBudWxsOyBhd2FpdCB1cGRhdGVUb1NlcnZlcihmaWVsZCk7IGlmICh1cGRhdGVTdWNjZXMgIT0gbnVsbCkgeyB1cGRhdGVTdWNjZXMoKTsgdXBkYXRlU3VjY2VzID0gbnVsbDsgfSB9LCAxMDApO1xyXG4gICAgICAgIHZhciBvbGRVcGRhdGVTdWNjZXNzID0gdXBkYXRlU3VjY2VzO1xyXG4gICAgICAgIHVwZGF0ZVN1Y2NlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG9sZFVwZGF0ZVN1Y2Nlc3MgIT0gbnVsbCkgb2xkVXBkYXRlU3VjY2VzcygpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS5jaGFuZ2UuJyArIGZpZWxkKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVRvU2VydmVyKGZpZWxkKSB7ICAgICAgICBcclxuICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShjdXJyZW50U2V0dGluZ3MpICE9IEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTZXR0aW5ncyA9IGN1cnJlbnQ7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgd2luZG93LmFnUmVxdWVzdC5QT1NUKCcvc2VydmljZXMvYWdvcmFDbGllbnQuYXNoeCcsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiAnU0VUJyB9LCBjdXJyZW50KSk7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIHJlbmRlckxhbmd1YWdlU2VsZWN0b3IoKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBuZXcgYygnc3BhbicpO1xyXG4gICAgICAgIHZhciBsb2NhdGlvbkVsZW1lbnQgPSBlbGVtZW50Lm4oJ3NwYW4nKTsgICAgICAgIFxyXG4gICAgICAgIHZhciBsb2NhdGlvbkZsYWc7XHJcbiAgICAgICAgdmFyIGxhbmd1YWdlRWxlbWVudDtcclxuICAgICAgICBmdW5jdGlvbiByZW5kZXJMYW5ndWFnZUVsZW1lbnQobGFuZ3VhZ2VzKSB7ICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlbmRlckNob2ljZUxpc3QobGFuZ3VhZ2VFbGVtZW50LCAnTGFuZ3VhZ2UnLCAnbGFuZ3VhZ2UnLCBsYW5ndWFnZXMsIGZ1bmN0aW9uIChpdGVtRWxlbWVudCwgc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbUVsZW1lbnQuaChzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsKTtcclxuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2VJdGVtPyhzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsKTonJztcclxuICAgICAgICAgICAgfSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlckNob2ljZUxpc3QobG9jYXRpb25FbGVtZW50LCAnTG9jYXRpb24nLCdjb2RlJywgbGFuZ3VhZ2VTb3VyY2VzLnByZXNldHMsIGZ1bmN0aW9uIChpdGVtRWxlbWVudCwgc291cmNlSXRlbSkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpdGVtRWxlbWVudC5uKCdpJykuYSgnY2xhc3MnLCBnZXRGbGFnQ3NzQ2xhc3Moc291cmNlSXRlbS5jb2RlKSk7XHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50Lm4oJ2InKS5oKHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWwpO1xyXG5cclxuICAgICAgICB9LCBmdW5jdGlvbiAoc291cmNlSXRlbSxpc0V2ZW50KSB7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uRmxhZy5hKCdjbGFzcycsIGdldEZsYWdDc3NDbGFzcyhzb3VyY2VJdGVtLmNvZGUpKTtcclxuICAgICAgICAgICAgcmVuZGVyTGFuZ3VhZ2VFbGVtZW50KGxhbmd1YWdlU291cmNlcy5sYW5ndWFnZXMuZmlsdGVyKGZ1bmN0aW9uIChsYW5ndWFnZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc291cmNlSXRlbS5sYW5ndWFnZSkgPyBzb3VyY2VJdGVtLmxhbmd1YWdlLmluZGV4T2YobGFuZ3VhZ2UuY29kZSkgPiAtMSA6IGxhbmd1YWdlLmNvZGUgPT0gc291cmNlSXRlbS5sYW5ndWFnZTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICBpZiAoIWlzRXZlbnQpXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUnLCB7IGRldGFpbDogc291cmNlSXRlbSB9KSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvY2F0aW9uRmxhZyA9IGxvY2F0aW9uRWxlbWVudC5uKCdpJyk7XHJcblxyXG4gICAgICAgIGxhbmd1YWdlRWxlbWVudCA9IGVsZW1lbnQubignc3BhbicpOyAgICAgXHJcblxyXG4gICAgICAgIHJlbmRlckxhbmd1YWdlRWxlbWVudChsYW5ndWFnZVNvdXJjZXMubGFuZ3VhZ2VzKTtcclxuXHJcbiAgICAgICAgdmFyIGN1cnJlbmN5RWxlbWVudCA9IGVsZW1lbnQubignc3BhbicpO1xyXG4gICAgICAgIHJlbmRlckNob2ljZUxpc3QoY3VycmVuY3lFbGVtZW50LCAnQ3VycmVuY3knLCAnY3VycmVuY3knLCBsYW5ndWFnZVNvdXJjZXMuY3VycmVuY2llcywgZnVuY3Rpb24gKGl0ZW1FbGVtZW50LCBzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgIGl0ZW1FbGVtZW50Lmgoc291cmNlSXRlbS5sb2NhbExhYmVsID8gc291cmNlSXRlbS5sb2NhbExhYmVsIDogc291cmNlSXRlbS5sYWJlbCk7XHJcbiAgICAgICAgfSwgZnVuY3Rpb24gKHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWw7XHJcbiAgICAgICAgfSk7ICBcclxuXHJcbiAgICAgICAgdmFyIHByb3BlcnR5TWVzc3VyZW1lbnRFbGVtZW50ID0gZWxlbWVudC5uKCdzcGFuJyk7XHJcbiAgICAgICAgcmVuZGVyQ2hvaWNlTGlzdChwcm9wZXJ0eU1lc3N1cmVtZW50RWxlbWVudCwgJ1Byb3BlcnR5IE1lYXN1cmVtZW50JywgJ21lc3N1cmVtZW50JywgbGFuZ3VhZ2VTb3VyY2VzLnVuaXRzLCBmdW5jdGlvbiAoaXRlbUVsZW1lbnQsIHNvdXJjZUl0ZW0pIHtcclxuICAgICAgICAgICAgaXRlbUVsZW1lbnQuaChzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsKTtcclxuICAgICAgICB9LCBmdW5jdGlvbiAoc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc291cmNlSXRlbS5sb2NhbExhYmVsID8gc291cmNlSXRlbS5sb2NhbExhYmVsIDogc291cmNlSXRlbS5sYWJlbDtcclxuICAgICAgICB9KTsgIFxyXG5cclxuICAgICAgICB2YXIgZGlzdGFuY2VNZXNzdXJlbWVudEVsZW1lbnQgPSBlbGVtZW50Lm4oJ3NwYW4nKTtcclxuICAgICAgICByZW5kZXJDaG9pY2VMaXN0KGRpc3RhbmNlTWVzc3VyZW1lbnRFbGVtZW50LCAnRGlzdGFuY2UgTWVhc3VyZW1lbnQnLCAnbWVzc3VyZW1lbnQnLCBsYW5ndWFnZVNvdXJjZXMudW5pdHMsIGZ1bmN0aW9uIChpdGVtRWxlbWVudCwgc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICBpdGVtRWxlbWVudC5oKHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA/IHNvdXJjZUl0ZW0ubG9jYWxMYWJlbCA6IHNvdXJjZUl0ZW0ubGFiZWwpO1xyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzb3VyY2VJdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgPyBzb3VyY2VJdGVtLmxvY2FsTGFiZWwgOiBzb3VyY2VJdGVtLmxhYmVsO1xyXG4gICAgICAgIH0pOyAgICAgICAgICBcclxuXHJcbiAgICAgICAgZWxlbWVudC5ub2RlLnNldEF0dHJpYnV0ZSgnYWctbGFuZ3VhZ2Utc2VsZWN0JywnJyk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50Lm5vZGUpO1xyXG5cclxuICAgICAgICB2YXIgY3VycmVudCA9IGdldCgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50Py5jb2RlKVxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUnLCB7IGRldGFpbDogY3VycmVudCB9KSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnMgPSB7fTtcclxuXHJcbiAgICBmdW5jdGlvbiByZW5kZXJDaG9pY2VMaXN0KGl0ZW0sIHRpdGxlLCBmaWVsZCwgc291cmNlLCByZW5kZXJJdGVtLCBzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICB2YXIgZmllbGRLZXkgPSB0aXRsZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teQS16MC05XS9naSwgJycpO1xyXG4gICAgICAgIHZhciByZW5kZXJFeGlzdCA9IHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ2l0ZW1MaXN0JyArIGZpZWxkS2V5XSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICBpZiAoIXJlbmRlckV4aXN0KVxyXG4gICAgICAgICAgICBpdGVtLmgodGl0bGUpO1xyXG4gICAgICAgIHZhciBpdGVtTGlzdCA9IHJlbmRlckV4aXN0ID8gcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3QnICsgZmllbGRLZXldIDogKHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ2l0ZW1MaXN0JyArIGZpZWxkS2V5XSA9IGl0ZW0ubignc3BhbicpKTtcclxuICAgICAgICB2YXIgaXRlbUxpc3RWYWx1ZSA9IHJlbmRlckV4aXN0ID8gcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3RWYWx1ZScgKyBmaWVsZEtleV0gOiAocmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbUxpc3RWYWx1ZScgKyBmaWVsZEtleV0gPSBpdGVtTGlzdC5uKCdsYWJlbCcpKTtcclxuICAgICAgICBpdGVtTGlzdFZhbHVlLmgoJ1NlbGVjdGVkIFZhbHVlJyk7XHJcbiAgICAgICAgaWYgKCFyZW5kZXJFeGlzdCkge1xyXG4gICAgICAgICAgICB2YXIgaXRlbUNsaWNrRnVuY3Rpb24gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHNlbGVjdG9yRWxlbWVudC5ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5hY3RpdmUnKT8uZm9yRWFjaChmdW5jdGlvbiAoYWN0aXZlSXRlbSkgeyBpZiAoYWN0aXZlSXRlbSAhPSBpdGVtTGlzdFZhbHVlLm5vZGUpIGFjdGl2ZUl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1MaXN0VmFsdWUubm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSBpdGVtTGlzdFZhbHVlLm5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGl0ZW1MaXN0VmFsdWUubm9kZS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaXRlbUxpc3RWYWx1ZS5jbChpdGVtQ2xpY2tGdW5jdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpdGVtT3B0aW9ucyA9IHJlbmRlckV4aXN0ID8gcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snaXRlbU9wdGlvbnMnICsgZmllbGRLZXldIDogKHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ2l0ZW1PcHRpb25zJyArIGZpZWxkS2V5XSA9IGl0ZW1MaXN0Lm4oJ3NwYW4nKSk7XHJcbiAgICAgICAgaXRlbU9wdGlvbnMuaCgnJyk7XHJcbiAgICAgICAgc291cmNlLm1hcChmdW5jdGlvbiAoc291cmNlSXRlbSkge1xyXG4gICAgICAgICAgICB2YXIgY2hvaWNlSXRlbSA9IGl0ZW1PcHRpb25zLm4oJ2xhYmVsJyk7XHJcbiAgICAgICAgICAgIGNob2ljZUl0ZW0uY2woZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaXRlbUxpc3RWYWx1ZS5ub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgc2V0KGZpZWxkLCBzb3VyY2VJdGVtLmNvZGUpO1xyXG4gICAgICAgICAgICAgICAgaXRlbUxpc3RWYWx1ZS5oKHNlbGVjdGVkSXRlbShzb3VyY2VJdGVtKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZW5kZXJJdGVtKGNob2ljZUl0ZW0sIHNvdXJjZUl0ZW0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQgIT0gJycpIHsgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIGlmICghcmVuZGVyQ2hvaWNlSGFuZGxlckZ1bmN0aW9uc1snR2VuZXJhbCcgKyBmaWVsZEtleV0pIHtcclxuICAgICAgICAgICAgICAgIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ0dlbmVyYWwnICsgZmllbGRLZXldID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS51cGRhdGUuJyArIGZpZWxkS2V5LCB7IGRldGFpbDogZS5kZXRhaWwgfSkpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLmxhbmd1YWdlLnVwZGF0ZScsIHJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnNbJ0dlbmVyYWwnICsgZmllbGRLZXldKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFyZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydGaWVsZCcgKyBmaWVsZEtleV0pIHtcclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydGaWVsZCcgKyBmaWVsZEtleV0gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50SXRlbSA9IGUuZGV0YWlsO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBjdXJyZW50SXRlbVtmaWVsZF07ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSA/IGN1cnJlbnRWYWx1ZVswXSA6IGN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRJdGVtRnJvbVNvdXJjZSA9IHNvdXJjZS5maW5kKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmNvZGUgPT0gc2VsZWN0ZWRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldChmaWVsZCwgc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1MaXN0VmFsdWUuaChzZWxlY3RlZEl0ZW0oc2VsZWN0ZWRJdGVtRnJvbVNvdXJjZSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5sYW5ndWFnZS51cGRhdGUuJyArIGZpZWxkS2V5LCByZW5kZXJDaG9pY2VIYW5kbGVyRnVuY3Rpb25zWydGaWVsZCcgKyBmaWVsZEtleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjKG5hbWUpIHtcclxuICAgICAgICB0aGlzLm5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLmEgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLm5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLm4gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBpdGVtID0gbmV3IGMobmFtZSk7XHJcbiAgICAgICAgdGhpcy5ub2RlLmFwcGVuZENoaWxkKGl0ZW0ubm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9ICAgIFxyXG5cclxuICAgIGMucHJvdG90eXBlLmggPSBmdW5jdGlvbiAodGV4dCkgeyAgICAgICAgXHJcbiAgICAgICAgdGhpcy5ub2RlLmlubmVySFRNTCA9IHRleHQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYy5wcm90b3R5cGUuY2wgPSBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYWN0aW9uKTtcclxuICAgICAgICB0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhY3Rpb24pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIEdFVChzZXJ2aWNlVXJsLCBkYXRhKSB7XHJcbiAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gJyc7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZyArICgocXVlcnlTdHJpbmcgIT0gJycgPyAnJicgOiAnJykgKyBrZXkgKyAnPScgKyBkYXRhW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXJ2aWNlVXJsICs9IHNlcnZpY2VVcmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycgKyBxdWVyeVN0cmluZztcclxuICAgICAgICB2YXIgcmVxdWVzdCA9IGF3YWl0IGZldGNoKHNlcnZpY2VVcmwsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBjYWNoZTogXCJuby1jYWNoZVwiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVxdWVzdC5qc29uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgd2luZG93LmFnTGFuZ3VhZ2UgPSB7XHJcbiAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS5yZWZyZXNoLmN1cnJlbmN5JykpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVmcmVzaExvY2FsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5sYW5ndWFnZS5jaGFuZ2UubGFuZ3VhZ2UnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgaW5pdCgpO1xyXG5cclxufSkoKTtcclxuXHJcblxyXG5cclxuICAgICQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnW2RhdGEtY2stcHJvcGVydHlsaXN0XSBbZGF0YS1zb3J0LW9iamVjdD1cIkNNTkNNTlwiXScsIHt9LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgR2V0UHJvcGVydGllcygkKHRoaXMpLnBhcmVudHMoJ1tkYXRhLWNrLXByb3BlcnR5bGlzdF06Zmlyc3QnKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eS11cmxdOmZpcnN0JykuZGF0YSgnY2stcHJvcGVydHktdXJsJyksICQodGhpcykucGFyZW50cygnW2RhdGEtY2stcHJvcGVydHlsaXN0XTpmaXJzdCcpLmRhdGEoJ2NrLWRlbWFuZC1rZXknKSwgJCh0aGlzKS5wYXJlbnRzKCdbZGF0YS1jay1wcm9wZXJ0eWxpc3RdOmZpcnN0JykuZGF0YSgnY2stZGVtYW5kLWxheW91dCcpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIEdldFByb3BlcnRpZXMoJHRoaXMsIHVybCwgZGVtYW5kS2V5LCBsYXlvdXQpIHtcclxuICAgICAgICB2YXIgaXNFZGl0TW9kZSA9ICR0aGlzLmNsb3Nlc3QoJ2Rpdltjb250ZW50ZWRpdGFibGVdJykuYXR0cignY29udGVudGVkaXRhYmxlJyk7XHJcbiAgICAgICAgaWYgKCFpc0VkaXRNb2RlICYmIHR5cGVvZiAodXJsKSAhPSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgKGRlbWFuZEtleSkgIT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgLy9TaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICBsYXlvdXQgPSAodHlwZW9mIChsYXlvdXQpICE9ICd1bmRlZmluZWQnID8gbGF5b3V0IDogXCJnYWxsZXJ5XCIpO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGxheW91dC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZ2FsbGVyeVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciAkc29ydCA9ICR0aGlzLmZpbmQoJ1tkYXRhLXNvcnQtb2JqZWN0PVwiQ01OQ01OXCJdJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgkc29ydCAhPSAndW5kZWZpbmVkJyAmJiAkc29ydCAhPSBudWxsICYmICRzb3J0Lmxlbmd0aCA+IDApIHx8ICF1cmwubWF0Y2goLyhefFxcLykoZCk/c29ydFxcLVthLXpdKy9nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gKF9nZXRDTU5DTU5Tb3J0QnkoJHRoaXMpICsgJy8nICsgKHVybC5yZXBsYWNlKCdodHRwOi8vJywgJycpLnJlcGxhY2UoLyhefFxcLykoZCk/c29ydFxcLVthLXpdKy9nLCAnJykpKS5yZXBsYWNlKCcvLycsICcvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcvc2VydmljZXMvTUFYL2Fnb3JhR2V0R2FsbGVyeVZpZXcuYXNweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgVXJsUXVlcnk6IHVybCwgVHlwZU9mU2VhcmNoOiAnU0FMRScsIElzQ29udGVudFBhZ2U6IFwidHJ1ZVwiLCBEZW1hbmRLZXk6IGRlbWFuZEtleSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2h0bWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0VkaXRNb2RlID0gJHRoaXMuY2xvc2VzdCgnZGl2W2NvbnRlbnRlZGl0YWJsZV0nKS5hdHRyKCdjb250ZW50ZWRpdGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFZGl0TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkaHRtbCA9ICc8c2VjdGlvbiBjbGFzcz1cInJlc3VsdC1wYWdlXCIgZGF0YS1jay1wcm9wZXJ0eWxpc3Q9XCJcIiBkYXRhLWNrLWRlbWFuZC1rZXk9XCInICsgZGVtYW5kS2V5ICsgJ1wiIGRhdGEtY2stcHJvcGVydHktdXJsPVwiJyArIHVybCArICdcIiBkYXRhLWNrLWRlbWFuZC1sYXlvdXQ9XCInICsgbGF5b3V0ICsgJ1wiPicgKyByZXNwb25zZSArICc8L3NlY3Rpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5hZnRlcigkaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodHlwZW9mIChjb21wb25lbnRIYW5kbGVyKSA9PSAndW5kZWZpbmVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SGFuZGxlci51cGdyYWRlRG9tKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ1tkYXRhLWNrLWRlbWFuZC1rZXk9XCInICsgZGVtYW5kS2V5ICsgJ1wiXSAjcHJvcGVydHlHcmlkJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnByb3BlcnR5Om5vdCguaW5pdCknKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFByb3BlcnR5SW1hZ2VHYWxsZXJ5KCQodGhpcykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWdMYXp5LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJjYXJvdXNlbFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnL3NlcnZpY2VzL2Fnb3JhR2V0Q2Fyb3VzZWxJdGVtLmFzcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IFVybFF1ZXJ5OiB1cmwsIFR5cGVPZlNlYXJjaDogJ1NBTEUnLCBJc0NvbnRlbnRQYWdlOiBcInRydWVcIiwgRGVtYW5kS2V5OiBkZW1hbmRLZXkgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdodG1sJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNFZGl0TW9kZSA9ICR0aGlzLmNsb3Nlc3QoJ2Rpdltjb250ZW50ZWRpdGFibGVdJykuYXR0cignY29udGVudGVkaXRhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGh0bWwgPSAnPHNlY3Rpb24gY2xhc3M9XCJyZXN1bHQtcGFnZVwiIGRhdGEtY2stcHJvcGVydHlsaXN0PVwiXCIgZGF0YS1jay1kZW1hbmQta2V5PVwiJyArIGRlbWFuZEtleSArICdcIiBkYXRhLWNrLXByb3BlcnR5LXVybD1cIicgKyB1cmwgKyAnXCIgZGF0YS1jay1kZW1hbmQtbGF5b3V0PVwiJyArIGxheW91dCArICdcIj4nICsgcmVzcG9uc2UgKyAnPC9zZWN0aW9uPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuYWZ0ZXIoJGh0bWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ1tkYXRhLXF1ZXJ5LWxpc3RdOm5vdCguaW5pdClbZGF0YS1zZXJ2aWNlLXVybF1bZGF0YS1ydF49XCJDTU5cIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS50cmlnZ2VyKCdpbml0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2luaXQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0eXBlb2YgKGNvbXBvbmVudEhhbmRsZXIpID09ICd1bmRlZmluZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRIYW5kbGVyLnVwZ3JhZGVEb20oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gX2dldENNTkNNTlNvcnRCeSgkcGFyZW50KSB7XHJcbiAgICAgICAgdmFyICRzb3J0ID0gJHBhcmVudC5maW5kKCdbZGF0YS1zb3J0LW9iamVjdD1cIkNNTkNNTlwiXScpO1xyXG4gICAgICAgIGlmICgkc29ydCAhPSAndW5kZWZpbmVkJyAmJiAkc29ydCAhPSBudWxsICYmICRzb3J0Lmxlbmd0aCA+IDAgJiYgSXNOb3ROdWxsKCRzb3J0LnZhbCgpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJHNvcnQudmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBHZXREZWZhdWx0U29ydEZvclJlY29yZFR5cGUoJ1BST1BFUlRZJyk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gR2V0UHJvcGVydHlJbWFnZUdhbGxlcnkoJHRoaXMpIHtcclxuICAgIHZhciAkaXRlbUNvbnRleHQgPSAkdGhpcztcclxuICAgIHZhciAkc2xpZGVDb250ZXh0ID0gJGl0ZW1Db250ZXh0LmZpbmQoJy5zbGlkZXMnKTtcclxuICAgICRzbGlkZUNvbnRleHQuYXR0cignZGF0YS1jc3Mtc2xpZGVyJywgJzAnKTtcclxuICAgIHZhciBtbHNOdW1iZXIgPSAkaXRlbUNvbnRleHQuZmluZCgnW2RhdGEtbWtdJykuZGF0YSgnbWsnKTtcclxuICAgIHZhciBtbHNCb2FyZCA9ICRpdGVtQ29udGV4dC5maW5kKCdbZGF0YS1tbHNib2FyZF0nKS5kYXRhKCdtbHNib2FyZCcpO1xyXG4gICAgdmFyIHVybCA9ICRpdGVtQ29udGV4dC5maW5kKCdbZGF0YS1kZXRhaWwtdXJsXScpLmRhdGEoJ2RldGFpbC11cmwnKTtcclxuICAgIHZhciBwcm9qZWN0Q29kZSA9ICQoJ1tkYXRhLXBjb2RlXScpLmRhdGEoJ3Bjb2RlJyk7XHJcbiAgICB2YXIgaW1hZ2VUZW1wbGF0ZSA9ICRpdGVtQ29udGV4dC5maW5kKCdbZGF0YS1tbHMtcGhvdG9dJykuZGF0YSgnbWxzLXBob3RvJyk7XHJcbiAgICB2YXIgbmF0aXZlVGFiID0gJGl0ZW1Db250ZXh0LmZpbmQoJ1tkYXRhLW5hdGl2ZS10YWJdJykuZGF0YSgnbmF0aXZlLXRhYicpO1xyXG4gICAgaWYgKCFJc05vdE51bGwoaW1hZ2VUZW1wbGF0ZSkpIGltYWdlVGVtcGxhdGUgPSAnL2ltYWdlcy9jb21wYW55LycgKyBwcm9qZWN0Q29kZSArICcvTm9QaG90b0ltYWdlL2ltYWdlLW5vdC1mb3VuZC5qcGcnO1xyXG4gICAgdmFyIGNvdW50ID0gcGFyc2VJbnQoJHNsaWRlQ29udGV4dC5kYXRhKCd2YWx1ZScpLCAxMCk7XHJcbiAgICB2YXIgJGl0ZW1XaXRoSURDb250ZXh0ID0gJGl0ZW1Db250ZXh0LmNsb3Nlc3QoJ1tpZF0nKTtcclxuICAgIHZhciB1SUQgPSAkaXRlbUNvbnRleHQubGVuZ3RoID09IDAgPyBcInVuXCIgOiAkaXRlbVdpdGhJRENvbnRleHQuYXR0cignaWQnKS5yZXBsYWNlKC9cXCQvZ2ksICcnKTtcclxuICAgIGJ1aWxkRmlyc3RUZW1wbGF0ZShpbWFnZVRlbXBsYXRlLCBjb3VudCwgdUlEICsgbmV3IERhdGUoKS5nZXRNaWxsaXNlY29uZHMoKSwgbWxzQm9hcmQsIG1sc051bWJlciwgJHNsaWRlQ29udGV4dCwgdXJsLCBuYXRpdmVUYWIpO1xyXG4gICAgJGl0ZW1Db250ZXh0LmFkZENsYXNzKCdpbml0Jyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJ1aWxkRmlyc3RUZW1wbGF0ZSh0ZW1wbGF0ZSwgY291bnQsIHVJRCwgbWxzQm9hcmQsIG1sc051bWJlciwgJHNsaWRlQ29udGV4dCwgdXJsLCBuYXRpdmVUYWIpIHtcclxuICAgIHZhciBpID0gMCwgcHJlZml4ID0gKHVJRCArIG1sc0JvYXJkICsgbWxzTnVtYmVyICsgJ18nKTtcclxuICAgICQoJzxpbnB1dCB0eXBlPVwicmFkaW9cIiBhcmlhLWxhYmVsPVwiJyArIChwcmVmaXggKyAnc2xpZGVyJykgKyAnXCIgIG5hbWU9XCInICsgKHByZWZpeCArICdzbGlkZXInKSArICdcIiBpZD1cIicgKyAocHJlZml4ICsgaSkgKyAnXCIgY2hlY2tlZCAvPicpLmFwcGVuZFRvKCRzbGlkZUNvbnRleHQpO1xyXG4gICAgdmFyICRuYXZpZ2F0aW9ucyA9ICQoJzxkaXYgY2xhc3M9XCJuYXZcIj48L2Rpdj4nKTtcclxuICAgIC8vdmFyICRuZXh0ID0gJCgnPGxhYmVsIGRhdGEtY3NzLXNsaWRlci1uYXY9XCJwcm9wcGhvdG9cIiBmb3I9XCInICsgKHByZWZpeCArIChpICsgMSkpICsgJ1wiIGNsYXNzPVwibmV4dFwiPjwvbGFiZWw+Jyk7XHJcbiAgICAvL3ZhciAkcHJldiA9ICQoJzxsYWJlbCBkYXRhLWNzcy1zbGlkZXItbmF2PVwicHJvcHBob3RvXCIgZm9yPVwiJyArIChwcmVmaXggKyAocGFyc2VJbnQoY291bnQsIDEwKSAtIDEpKSArICdcIiBjbGFzcz1cInByZXZcIj48L2xhYmVsPicpO1xyXG4gICAgdmFyICRuZXh0ID0gJCgnPGxhYmVsIGFyaWEtbGFiZWw9XCJuZXh0XCIgYXJpYS1jb250cm9scz1cIm15Q2Fyb3VzZWwtaXRlbXNcIiBkYXRhLWNzcy1zbGlkZXItbmF2PVwicHJvcHBob3RvXCIgZm9yPVwiJyArIChwcmVmaXggKyAoaSArIDEpKSArICdcIiAgY2xhc3M9XCJuZXh0XCI+PHNwYW4gYXJpYS1sYWJlbD1cIm5leHRcIiBjbGFzcz1cInZpc3VhbGx5aGlkZGVuXCI+bmV4dDwvc3Bhbj48L2xhYmVsPicpO1xyXG4gICAgdmFyICRwcmV2ID0gJCgnPGxhYmVsIGFyaWEtbGFiZWw9XCJwcmV2XCIgYXJpYS1jb250cm9scz1cIm15Q2Fyb3VzZWwtaXRlbXNcIiBkYXRhLWNzcy1zbGlkZXItbmF2PVwicHJvcHBob3RvXCIgZm9yPVwiJyArIChwcmVmaXggKyAocGFyc2VJbnQoY291bnQsIDEwKSAtIDEpKSArICdcIiBjbGFzcz1cInByZXZcIj48c3BhbiBhcmlhLWxhYmVsPVwicHJldlwiIGNsYXNzPVwidmlzdWFsbHloaWRkZW5cIj5wcmV2PC9zcGFuPjwvbGFiZWw+Jyk7XHJcbiAgICAkcHJldi5vbignY2xpY2snLCBfbG9hZE1vcmUpO1xyXG4gICAgJG5leHQub24oJ2NsaWNrJywgX2xvYWRNb3JlKTtcclxuICAgICRwcmV2LmFwcGVuZFRvKCRuYXZpZ2F0aW9ucyk7XHJcbiAgICAkbmV4dC5hcHBlbmRUbygkbmF2aWdhdGlvbnMpO1xyXG4gICAgaWYgKCQoJ1tkYXRhLXBjb2RlXScpLmRhdGEoJ3Bjb2RlJykgPT0gJ1BTQicpIHsgdmFyIHRhcmdldCA9ICcnOyB9IGVsc2UgeyB2YXIgdGFyZ2V0ID0gJ3RhcmdldCA9IFwiX2JsYW5rXCInOyB9XHJcbiAgICBpZiAobmF0aXZlVGFiICE9ICd1bmRlZmluZWQnICYmIG5hdGl2ZVRhYiAhPSAnJyAmJiBuYXRpdmVUYWIgPT0gMSlcclxuICAgICAgICB0YXJnZXQgPSAnJztcclxuICAgIHZhciAkbm9kZSA9ICQoJzxsaSBjbGFzcz1cInNsaWRlLWNvbnRhaW5lclwiIGFyaWEtcm9sZWRlc2NyaXB0aW9uPVwiY2Fyb3VzZWxcIiByb2xlPVwiY29udGVudGluZm9cIj48ZGl2IGNsYXNzPVwic2xpZGVcIj48ZGl2IGNsYXNzPVwiUHJvcF9pbWdcIiByb2xlPVwiaW1nXCIgYXJpYS1sYWJlbD1cImJhbm5lckltYWdlXCIgIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTp1cmwoXFwnJyArIHRlbXBsYXRlICsgJ1xcJyk7XCI+PGEgYXJpYS1sYWJlbD1cIicgKyAocHJlZml4ICsgJ3NsaWRlcicpICsgJ1wiJyArIHRhcmdldCArICdocmVmPVwiJyArIHVybCArICdcIj48L2E+PC9kaXY+PC9kaXY+PC9saT4nKTtcclxuICAgICRub2RlLmFwcGVuZCgkbmF2aWdhdGlvbnMpO1xyXG4gICAgJG5vZGUuYXBwZW5kVG8oJHNsaWRlQ29udGV4dCk7XHJcbiAgICBmdW5jdGlvbiBfbG9hZE1vcmUoKSB7XHJcbiAgICAgICAgdmFyICRzZW5kZXIgPSAkKHRoaXMpO1xyXG4gICAgICAgICRwcmV2Lm9mZignY2xpY2snKTtcclxuICAgICAgICAkbmV4dC5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJC5hamF4KHsgdXJsOiAnL3NlcnZpY2VzL2Fnb3JhUHJvcGVydHlQaG90b3MuYXNweCcsIGRhdGE6IHsgbWxzYm9hcmQ6IG1sc0JvYXJkLCBtbHNubzogbWxzTnVtYmVyLCBjb250YWluZXI6IHByZWZpeCB9LCBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHsgJHNsaWRlQ29udGV4dC5hcHBlbmQocmVzcG9uc2UpOyAkc2VuZGVyLnRyaWdnZXIoJ2NsaWNrJyk7IH0gfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmFnb3JhKGZ1bmN0aW9uICgpIHtcclxuICAgIHJlZnJlc2hUcmFja2luZygpO1xyXG4gICAgLy8gQURBIENvbXBsYWluY2VzIC8vIGNhbmNlbCBidXR0b24gd29ya2luZ1xyXG4gICAgJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIltkYXRhLWZvcl1cIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgX2ZvciA9ICQodGhpcykuZGF0YSgnZm9yJyk7XHJcbiAgICAgICAgICAgICQoJ1tmb3I9XCInICsgX2ZvciArICdcIl0nKS50cmlnZ2VyKFwiY2xpY2tcIik7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICB9KTtcclxuICAgIC8vIEVORFxyXG5cclxuICAgIC8vJCgnW2RhdGEtd2ViYWN0aXZpdHldJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyAgICB2YXIgYWN0aXZpdHkgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtd2ViYWN0aXZpdHknKTtcclxuICAgIC8vICAgIHZhciB0cmFja0l0ZW1zID0gW107XHJcblxyXG4gICAgLy8gICAgJC5lYWNoKHRoaXMuYXR0cmlidXRlcywgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gICAgICAgIGlmICh0aGlzLm5hbWUuc3RhcnRzV2l0aCgnZGF0YS13ZWJhY3Rpdml0eS0nKSkge1xyXG4gICAgLy8gICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMubmFtZS5zdWJzdHJpbmcoJ2RhdGEtd2ViYWN0aXZpdHktJy5sZW5ndGgpO1xyXG4gICAgLy8gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgLy8gICAgICAgICAgICB0cmFja0l0ZW1zLnB1c2goeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XHJcbiAgICAvLyAgICAgICAgfVxyXG4gICAgLy8gICAgfSk7XHJcblxyXG4gICAgLy8gICAgV2ViQWN0aXZpdHlUcmFja2VyKCdXRUJBQ1RJVklUWScsICdQUk9QRVJUWScsIGFjdGl2aXR5LCB0cmFja0l0ZW1zKTtcclxuICAgIC8vfSk7XHJcbn0pO1xyXG5cclxuRGF0ZS5wcm90b3R5cGUueXl5eW1tZGRoaG1tc3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgeXl5eSA9IHRoaXMuZ2V0RnVsbFllYXIoKTtcclxuICAgIHZhciBtbSA9IHRoaXMuZ2V0TW9udGgoKSA8IDkgPyBcIjBcIiArICh0aGlzLmdldE1vbnRoKCkgKyAxKSA6ICh0aGlzLmdldE1vbnRoKCkgKyAxKTsgLy8gZ2V0TW9udGgoKSBpcyB6ZXJvLWJhc2VkXHJcbiAgICB2YXIgZGQgPSB0aGlzLmdldERhdGUoKSA8IDEwID8gXCIwXCIgKyB0aGlzLmdldERhdGUoKSA6IHRoaXMuZ2V0RGF0ZSgpO1xyXG4gICAgdmFyIGhoID0gdGhpcy5nZXRIb3VycygpIDwgMTAgPyBcIjBcIiArIHRoaXMuZ2V0SG91cnMoKSA6IHRoaXMuZ2V0SG91cnMoKTtcclxuICAgIHZhciBtaW4gPSB0aGlzLmdldE1pbnV0ZXMoKSA8IDEwID8gXCIwXCIgKyB0aGlzLmdldE1pbnV0ZXMoKSA6IHRoaXMuZ2V0TWludXRlcygpO1xyXG4gICAgdmFyIHNzID0gdGhpcy5nZXRTZWNvbmRzKCkgPCAxMCA/IFwiMFwiICsgdGhpcy5nZXRTZWNvbmRzKCkgOiB0aGlzLmdldFNlY29uZHMoKTtcclxuICAgIHJldHVybiBcIlwiLmNvbmNhdCh5eXl5KS5jb25jYXQobW0pLmNvbmNhdChkZCkuY29uY2F0KGhoKS5jb25jYXQobWluKS5jb25jYXQoc3MpO1xyXG59O1xyXG5cclxuKGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgaXNTeW5jZWQgPSBmYWxzZTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnVzZXIuaW4nLCBmdW5jdGlvbiAoZSkge1xyXG5cclxuICAgICAgICBzZXQoZS5kZXRhaWwpO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcudXNlci5vdXQnLCBmdW5jdGlvbiAoZSkge1xyXG5cclxuICAgICAgICBzZXQobnVsbCk7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0KCkge1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gbnVsbDtcclxuICAgICAgICBpZiAod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdBR1VTRVInKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBKU09OLnBhcnNlKHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQUdVU0VSJykpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjdXJyZW50ICE9IG51bGwgJiYgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3Jlc3RyaWN0ZWQtbGlzdGluZycpKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgncmVzdHJpY3RlZC1saXN0aW5nJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vZWxzZSBpZiAoY3VycmVudCA9PSBudWxsICYmIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXN0cmljdGVkLWxpc3RpbmcnKSkge1xyXG4gICAgICAgIC8vICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgncmVzdHJpY3RlZC1saXN0aW5nJyk7XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gc2V0KHVzZXIpIHtcclxuICAgICAgICBpZiAodXNlciA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnQUdVU0VSJyk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnVzZXIuY2xlYXInKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodXNlci5HdWlkKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG9jYWxVc2VyID0ge307XHJcbiAgICAgICAgICAgICAgICBsb2NhbFVzZXIuR3VpZCA9IHVzZXIuR3VpZDtcclxuICAgICAgICAgICAgICAgIGxvY2FsVXNlci5OYW1lID0gdXNlci5OYW1lO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxVc2VyLkZpcnN0TmFtZSA9IHVzZXIuRmlyc3ROYW1lO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxVc2VyLkxhc3ROYW1lID0gdXNlci5MYXN0TmFtZTtcclxuICAgICAgICAgICAgICAgIGxvY2FsVXNlci5FbWFpbCA9IHVzZXIuRW1haWw7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFVzZXIuUGhvbmUgPSB1c2VyLlBob25lO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxVc2VyLk1vYmlsZVBob25lID0gdXNlci5Nb2JpbGVQaG9uZTtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLkxvZ2luQWdlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhbFVzZXIuTG9naW5BZ2VudCA9IHsgS2V5OiB1c2VyLkxvZ2luQWdlbnQuS2V5LCBFbWFpbDogdXNlci5Mb2dpbkFnZW50LkVtYWlsLCBOYW1lOiB1c2VyLkxvZ2luQWdlbnQuTmFtZSB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdBR1VTRVInLCBKU09OLnN0cmluZ2lmeShsb2NhbFVzZXIpKTtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZW5kZXIoKSB7ICAgICAgICBcclxuICAgICAgICB2YXIgdXNlclN0YXRlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thZy11c2VyXScpO1xyXG4gICAgICAgIHVzZXJTdGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgeyByZW5kZXJTdGF0ZXMoaXRlbSk7IH0pOyBcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZW5kZXJTdGF0ZXMoaXRlbSkge1xyXG5cclxuICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoJ2lzLWFwcGxpZWQnKTsgICAgICAgIFxyXG4gICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBpdGVtLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICB2YXIgY3VycmVudCA9IGF3YWl0IGdldCgpO1xyXG4gICAgICAgIGlmIChjdXJyZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaW5pdFByb3BlcnR5Q29sbGVjdGlvbigpO1xyXG4gICAgICAgICAgICB2YXIgbG9nZ2luZWROb2RlID0gYXdhaXQgZ2V0TG9naW5lZEl0ZW0oY3VycmVudCk7XHJcbiAgICAgICAgICAgIGl0ZW0ucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUobG9nZ2luZWROb2RlLCBpdGVtKTtcclxuICAgICAgICAgICAgaXRlbS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgc2V0Rm9ybXMoY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGluaXRQcm9wZXJ0eUNvbGxlY3Rpb24oKSB7ICAgICAgICBcclxuICAgICAgICBpZiAoaXNTeW5jZWQpIHtcclxuICAgICAgICAgICAgdXBkYXRlUHJvcGVydHlDb2xsZWN0aW9uKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5zeW5jLnZlcmlmaWVkLmNvbnRhY3QnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVQcm9wZXJ0eUNvbGxlY3Rpb24oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcubGF6eS5yZWZyZXNoJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB1cGRhdGVQcm9wZXJ0eUNvbGxlY3Rpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnVzZXIucmVmcmVzaC5jb2xsZWN0aW9uJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB1cGRhdGVQcm9wZXJ0eUNvbGxlY3Rpb24odHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy51c2VyLmNsZWFyLmNvbGxlY3Rpb24nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnQUdVU0VSQ09MTEVDVElPTjMnKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2FnLnVzZXIuY2xlYXInLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnVzZXIuY2xlYXIuY29sbGVjdGlvbicpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVQcm9wZXJ0eUNvbGxlY3Rpb24oaXNGb3JjZWQpIHtcclxuICAgICAgICB2YXIgY29sbGVjdGlvblR5cGUgPSAzO1xyXG4gICAgICAgIHZhciBpdGVtcyA9IGF3YWl0IGdldFByb3BlcnR5Q29sbGVjdGlvbihjb2xsZWN0aW9uVHlwZSwgaXNGb3JjZWQpO1xyXG4gICAgICAgIHZhciBpdGVtc0V4dHJhY3RlZCA9IGl0ZW1zLkl0ZW1zLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBjdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyBbLi4ucmVzdWx0LCAuLi5jdXJyZW50Lkl0ZW1zXSA6IFsuLi5jdXJyZW50Lkl0ZW1zXTtcclxuICAgICAgICB9LCBbXSk7XHJcbiAgICAgICAgaXRlbXNFeHRyYWN0ZWQuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICByZW5kZXJQcm9wZXJ0eUNvbGxlY3Rpb25JdGVtKGl0ZW0sIGNvbGxlY3Rpb25UeXBlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiByZW5kZXJQcm9wZXJ0eUNvbGxlY3Rpb25JdGVtKGl0ZW0sdHlwZSkge1xyXG4gICAgICAgIHZhciBpdGVtRG9tID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtcGVyZm9ybS1hY3Rpb24tdXJsKj1cInBrPScgKyBpdGVtLlBLICsgJ1wiXVtkYXRhLXBlcmZvcm0tYWN0aW9uLXVybCo9XCJydD0nICsgaXRlbS5SVCArICdcIl0nKTsgICAgICAgIFxyXG4gICAgICAgIGl0ZW1Eb20uZm9yRWFjaChhc3luYyBmdW5jdGlvbihkb20pIHtcclxuICAgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZSgnYWctdXNlci1jb2xsZWN0aW9uJywgdHlwZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0UHJvcGVydHlDb2xsZWN0aW9uKGNvbGxlY3Rpb25UeXBlLCBpc0ZvcmNlZCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eUNvbGxlY3Rpb24gPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgcHJvcGVydHlDb2xsZWN0aW9uU3RyaW5nID0gaXNGb3JjZWQgPyBudWxsIDogd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdBR1VTRVJDT0xMRUNUSU9OJyArIGNvbGxlY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgaWYgKHByb3BlcnR5Q29sbGVjdGlvblN0cmluZyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUNvbGxlY3Rpb24gPSBKU09OLnBhcnNlKHByb3BlcnR5Q29sbGVjdGlvblN0cmluZyk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHByb3BlcnR5Q29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJvcGVydHlDb2xsZWN0aW9uID0gYXdhaXQgd2luZG93LmFnUmVxdWVzdC5HRVQoJy9zZXJ2aWNlcy9hZ29yYUNsaWVudC5hc2h4JywgeyB0eXBlOiAnVVNFUkNPTExFQ1RJT04nLCBjb2xsZWN0aW9uVHlwZTogY29sbGVjdGlvblR5cGUgfSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQUdVU0VSQ09MTEVDVElPTicgKyBjb2xsZWN0aW9uVHlwZSwgSlNPTi5zdHJpbmdpZnkocHJvcGVydHlDb2xsZWN0aW9uKSk7XHJcbiAgICAgICAgICAgIHJlc29sdmUocHJvcGVydHlDb2xsZWN0aW9uKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0TG9naW5lZEl0ZW0oY29udGFjdCkge1xyXG4gICAgICAgIHZhciB3cmFwcGVyID0gbmV3IGMoJ3AnKTtcclxuICAgICAgICB3cmFwcGVyLmEoJ2FnLXVzZXInLCcnKTtcclxuICAgICAgICB2YXIgdXNlckNvbnRhaW5lciA9IHdyYXBwZXIubignYnV0dG9uJyk7XHJcbiAgICAgICAgdXNlckNvbnRhaW5lci5hKCdjbGFzcycsICd1c2VyLWxvZ2dlZC1pbiBhLWItMSBmLXMtMiB1LWxvZ2luZWQgcy1jLXAgbS1sLTE2IHhhLWItdy1sIHItYicpO1xyXG4gICAgICAgIHVzZXJDb250YWluZXIuaChjb250YWN0Lk5hbWUpO1xyXG4gICAgICAgIHVzZXJDb250YWluZXIuY2woZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBpZiAodXNlckNvbnRhaW5lci5ub2RlLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpIHtcclxuICAgICAgICAgICAgICAgIHVzZXJDb250YWluZXIubm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHVzZXJDb250YWluZXIubm9kZS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB3cmFwcGVyLm4oJ3NwYW4nKTtcclxuICAgICAgICBvcHRpb25zLm4oJ3NwYW4nKS5oKCdIaSwgJyArIGNvbnRhY3QuTmFtZSk7XHJcbiAgICAgICAgb3B0aW9ucy5uKCdpbnB1dCcpLmEoJ3R5cGUnLCAnaGlkZGVuJykuYSgnaWQnLCAnQ09OVEFDVF9HVUlEJykuYSgndmFsdWUnLCBjb250YWN0Lkd1aWQpO1xyXG4gICAgICAgIG9wdGlvbnMubignYScpLmEoJ2hyZWYnLCAnL2Rhc2hib2FyZC9kZWZhdWx0LmFzcHgnKS5oKCdEYXNoYm9hcmQnKTtcclxuICAgICAgICBvcHRpb25zLm4oJ3NwYW4nKS5hKCdkYXRhLW1vZGFsZGlhbG9nLXNyYycsICcvZGFzaGJvYXJkL0VkaXRQcm9maWxlLmFzcHgnKS5hKCdkYXRhLW1vZGFsZGlhbG9nLWFqYXgnLCAndHJ1ZScpLmEoJ2RhdGEtbW9kYWxkaWFsb2cnLCcnKS5oKCdFZGl0IFByb2ZpbGUnKTtcclxuICAgICAgICBvcHRpb25zLm4oJ2EnKS5hKCdocmVmJywgJy9kYXNoYm9hcmQvU2lnbk91dC5hc3B4JykuYSgnZGF0YS1hZ29yYS1pY29uJywgJ+6ksScpLmgoJ0xvZyBvdXQnKS5jbChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnVzZXIub3V0JykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB3cmFwcGVyLm5vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYyhuYW1lKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBjLnByb3RvdHlwZS5hID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSlcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBjLnByb3RvdHlwZS5uID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICB2YXIgaXRlbSA9IG5ldyBjKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubm9kZS5hcHBlbmRDaGlsZChpdGVtLm5vZGUpO1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLmggPSBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgICAgIHRoaXMubm9kZS5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGMucHJvdG90eXBlLmNsID0gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHRoaXMubm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGFjdGlvbik7XHJcbiAgICAgICAgdGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYWN0aW9uKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbml0KCkge1xyXG4gICAgICAgIHJlbmRlcigpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcuc3luYy5jaGVjaycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBhd2FpdCBnZXQoKTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZXNTdHJpbmcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0FHU1lOQycpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlc1N0cmluZyAhPSBudWxsICYmIGN1cnJlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IEpTT04ucGFyc2UoY3VycmVudFZhbHVlc1N0cmluZyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlLkNvbnRhY3RHdWlkICE9IGN1cnJlbnQuR3VpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLnN5bmMuc2V0JywgeyBkZXRhaWw6IHsgY29udGFjdGd1aWQ6IGN1cnJlbnQuR3VpZCwgYWdlbnRrZXk6IGN1cnJlbnQuTG9naW5BZ2VudCA/IGN1cnJlbnQuTG9naW5BZ2VudC5LZXk6JycsIGV2ZW50VHlwZTogJ2NvbnRhY3QnIH0gfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5zeW5jLnZlcmlmaWVkLmNvbnRhY3QnKSk7XHJcbiAgICAgICAgICAgIGlzU3luY2VkID0gdHJ1ZTsgICAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdhZy5zeW5jLnZlcmlmaWVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhZy5zeW5jLnZlcmlmaWVkLmNvbnRhY3QnKSk7XHJcbiAgICAgICAgICAgIGlzU3luY2VkID0gdHJ1ZTsgICAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cuYWdVc2VyID0ge1xyXG4gICAgICAgIGNvbGxlY3Rpb246IHtcclxuICAgICAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcudXNlci5yZWZyZXNoLmNvbGxlY3Rpb24nKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGluaXQoKTtcclxuXHJcbn0pKCk7XHJcblxyXG4oYXN5bmMgZnVuY3Rpb24gKCkgeyAgICBcclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBjaGVja0ZvclN5bmMoKSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZXNTdHJpbmcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0FHU1lOQycpO1xyXG4gICAgICAgIGlmIChjdXJyZW50VmFsdWVzU3RyaW5nICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IEpTT04ucGFyc2UoY3VycmVudFZhbHVlc1N0cmluZyk7XHJcbiAgICAgICAgICAgIHZhciB1cGRhdGVkT24gPSBuZXcgRGF0ZShjdXJyZW50VmFsdWUudXBkYXRlZE9uKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnREYXRlVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIGN1cnJlbnREYXRlVGltZS5zZXRNaW51dGVzKGN1cnJlbnREYXRlVGltZS5nZXRNaW51dGVzKCkgLSAxKTtcclxuICAgICAgICAgICAgaWYgKHVwZGF0ZWRPbiA+IGN1cnJlbnREYXRlVGltZSkge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy52ZXJpZmllZCcpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICAgIHJlYWRGcm9tU2VydmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVhZEZyb21TZXJ2ZXIoKSB7XHJcbiAgICAgICAgdmFyIGRhdGFUb1JldmlldyA9IGF3YWl0IHdpbmRvdy5hZ1JlcXVlc3QuR0VUKCcvc2VydmljZXMvYWdvcmFDbGllbnQuYXNoeCcsIHsgdHlwZTogJ1NZTkMnIH0pO1xyXG4gICAgICAgIGRhdGFUb1Jldmlldy51cGRhdGVkT24gPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnQUdTWU5DJywgSlNPTi5zdHJpbmdpZnkoZGF0YVRvUmV2aWV3KSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy5jaGVjaycpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBpbml0KCkge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcuc3luYy5zZXQnLCBhc3luYyBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBhd2FpdCB3aW5kb3cuYWdSZXF1ZXN0LlBPU1QoJy9zZXJ2aWNlcy9hZ29yYUNsaWVudC5hc2h4JywgT2JqZWN0LmFzc2lnbih7IHR5cGU6ICdTRVQnIH0sIGUuZGV0YWlsKSk7XHJcbiAgICAgICAgICAgIGlmIChlLmRldGFpbD8uZXZlbnRUeXBlKVxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy52ZXJpZmllZC4nICsgZS5kZXRhaWwuZXZlbnRUeXBlKSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYWcuc3luYy5pbnZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKGUpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcuc3luYy5yZXNldCcpKTtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjaGVja0ZvclN5bmMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCk7XHJcbn0pKCk7XHJcblxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGNoZWNrRm9yQ291bnRyeSgpIHtcclxuICAgICAgICB2YXIgY3VycmVudFZhbHVlc1N0cmluZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQUdVU0VSQ09VTlRSWScpO1xyXG4gICAgICAgIGlmIChjdXJyZW50VmFsdWVzU3RyaW5nICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IEpTT04ucGFyc2UoY3VycmVudFZhbHVlc1N0cmluZyk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FnLmxhbmd1YWdlLmNvdW50cnkuYXV0by1kaXNjb3ZlcnknLCB7IGRldGFpbDogY3VycmVudFZhbHVlfSkpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlYWRGcm9tU2VydmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVhZEZyb21TZXJ2ZXIoKSB7XHJcbiAgICAgICAgdmFyIGRhdGFUb1JldmlldyA9IGF3YWl0IHdpbmRvdy5hZ1JlcXVlc3QuR0VUKCdodHRwczovL2lwLXNlcnZpY2UuaWRjcmVhbGVzdGF0ZS5jb20vaXAnLCB7fSk7XHJcbiAgICAgICAgZGF0YVRvUmV2aWV3LnVwZGF0ZWRPbiA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdBR1VTRVJDT1VOVFJZJywgSlNPTi5zdHJpbmdpZnkoZGF0YVRvUmV2aWV3KSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcubGFuZ3VhZ2UuY291bnRyeS5hdXRvLWRpc2NvdmVyeScsIHsgZGV0YWlsOiBkYXRhVG9SZXZpZXd9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gaW5pdCgpIHtcclxuICAgICAgICBjaGVja0ZvckNvdW50cnkoKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCk7XHJcbn0pKCk7XHJcblxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHZhciBleHByZXNzaW9uVG9DaGVjayA9IG5ldyBSZWdFeHAoJyg/PEd1aWQ+W0EtejAtOVxcXFwtXSspXFxcXHwoPzxBZ2VudEtleT5bMC05XSspJywnZ2knKTtcclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBjaGVja0xvZ2luKCkge1xyXG4gICAgICAgIHZhciB1cmwgPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcclxuICAgICAgICBpZiAodXJsLmxlbmd0aCA8IDEpIHJldHVybjtcclxuICAgICAgICB2YXIgZGF0YUZyb21VcmwgPSBhdG9iKHVybC5zdWJzdHJpbmcoMSkpO1xyXG4gICAgICAgIHZhciBtYXRjaCA9IG51bGw7XHJcbiAgICAgICAgY29uc29sZS5sb2coZGF0YUZyb21VcmwpO1xyXG4gICAgICAgIGlmICgobWF0Y2ggPSBleHByZXNzaW9uVG9DaGVjay5leGVjKGRhdGFGcm9tVXJsKSkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2ZXJpZnlMb2dpbihtYXRjaC5ncm91cHMuR3VpZCwgbWF0Y2guZ3JvdXBzLkFnZW50S2V5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodXJsICE9ICcnICYmIHVybC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaGFzaFRvRG9tTWFwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtdGFiPVwiJyArIHVybC5zdWJzdHJpbmcoMSkgKyAnXCJdJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzaFRvRG9tTWFwICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzaFRvRG9tTWFwLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5TG9naW4odXNlcklkLCBhZ2VudEtleSkgeyAgICAgICAgXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdpcy1idXN5Jyk7XHJcbiAgICAgICAgdmFyIHVzZXJSZXNwb25zZSA9IGF3YWl0IHdpbmRvdy5hZ1JlcXVlc3QuUE9TVCgnL3NlcnZpY2VzL2Fnb3JhQWNjZXNzLmFzaHgnLCB7ICdhY3Rpb24nOiAnUmVtb3RlU2lnbkluJywgJ2NvbnRhY3RndWlkJzogdXNlcklkLCAnYWdlbnRrZXknOiBhZ2VudEtleSB9KTtcclxuICAgICAgICBpZiAodXNlclJlc3BvbnNlLkNvbnRhY3QpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnYWcudXNlci5pbicsIHsgZGV0YWlsOiB1c2VyUmVzcG9uc2UuQ29udGFjdCB9KSk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9kYXNoYm9hcmQvZGVmYXVsdC5hc3B4I3NhdmVkLXNlYXJjaGVzJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gaW5pdCgpIHtcclxuICAgICAgICBjaGVja0xvZ2luKCk7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCBjaGVja0xvZ2luKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCk7XHJcbn0pKCk7XHJcblxyXG5mdW5jdGlvbiBvcGVuSW1hZ2VHYWxsZXJ5KHNlbmRlcikge1xyXG4gICAgdmFyIF9tbHNOdW1iZXIgPSBzZW5kZXIuZ2V0QXR0cmlidXRlKCdkYXRhLW1rJyk7XHJcbiAgICB2YXIgX3J0ID0gc2VuZGVyLmdldEF0dHJpYnV0ZSgnZGF0YS1ydCcpO1xyXG4gICAgdmFyIF9jbGllbnRjb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGNvZGUnKTtcclxuICAgIHZhciBfcGhvdG9Db3VudCA9IHNlbmRlci5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGhvdG9jb3VudCcpID8/IDE7XHJcbiAgICBzaG93UHJvcGVydHlHYWxsZXJ5KF9jbGllbnRjb2RlLCBfcnQsIF9tbHNOdW1iZXIsIF9waG90b0NvdW50LCAnZnVsbHNjcmVlbicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRGb3Jtcyh1c2VyQ29sbGVjdGlvbikge1xyXG4gICAgaWYgKChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbbm9kZT1cIkZpcnN0TmFtZVwiXScpKSAhPSBudWxsICYmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbbm9kZT1cIkZpcnN0TmFtZVwiXScpKSAhPSB1bmRlZmluZWQgKVxyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tub2RlPVwiRmlyc3ROYW1lXCJdJykudmFsdWUgPSB1c2VyQ29sbGVjdGlvbi5GaXJzdE5hbWUgPz8gJyc7XHJcbiAgICBpZiAoKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tub2RlPVwiTGFzdE5hbWVcIl0nKSkgIT0gbnVsbCAmJiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW25vZGU9XCJMYXN0TmFtZVwiXScpKSAhPSB1bmRlZmluZWQgKVxyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tub2RlPVwiTGFzdE5hbWVcIl0nKS52YWx1ZSA9IHVzZXJDb2xsZWN0aW9uLkxhc3ROYW1lID8/ICcnO1xyXG4gICAgaWYgKChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbbm9kZT1cIkVtYWlsXCJdJykpICE9IG51bGwgJiYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tub2RlPVwiRW1haWxcIl0nKSkgIT0gdW5kZWZpbmVkIClcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbbm9kZT1cIkVtYWlsXCJdJykudmFsdWUgPSB1c2VyQ29sbGVjdGlvbi5FbWFpbCA/PyAnJztcclxuICAgIGlmICgoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW25vZGU9XCJNb2JpbGVQaG9uZVwiXScpKSAhPSBudWxsICYmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbbm9kZT1cIk1vYmlsZVBob25lXCJdJykpICE9IHVuZGVmaW5lZCApXHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW25vZGU9XCJNb2JpbGVQaG9uZVwiXScpLnZhbHVlID0gdXNlckNvbGxlY3Rpb24uTW9iaWxlUGhvbmUgPz8gJyc7XHJcbn0gXHJcblxyXG5cclxudmFyIGxvYWRFdmVudCA9IG5ldyBDdXN0b21FdmVudChcIm9uQWdvcmFMb2FkXCIpO1xyXG5kb2N1bWVudC5kaXNwYXRjaEV2ZW50KGxvYWRFdmVudCk7XHJcbmRvY3VtZW50LmlzQWdvcmFMb2FkZWQgPSB0cnVlO1xyXG5sb2FkRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ29uQ3NzTG9hZCcpO1xyXG5kb2N1bWVudC5kaXNwYXRjaEV2ZW50KGxvYWRFdmVudCk7XHJcbmRvY3VtZW50LmlzQ3NzTG9hZGVkID0gdHJ1ZTtcclxuXHJcbkVuYWJsZURlbWFuZEltcG9ydCgpO1xyXG5FbmFibGVTZWFyY2hGb3JtKCk7XHJcblxyXG5mdW5jdGlvbiByZWZyZXNoVHJhY2tpbmcoKSB7XHJcbiAgICAkKCdbZGF0YS13ZWJhY3Rpdml0eV0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdkYXRhLXByb2Nlc3NlZCcpICE9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgdmFyIGFjdGl2aXR5ID0gJCh0aGlzKS5hdHRyKCdkYXRhLXdlYmFjdGl2aXR5Jyk7XHJcbiAgICAgICAgICAgIHZhciB0cmFja0l0ZW1zID0gW107XHJcblxyXG4gICAgICAgICAgICAkLmVhY2godGhpcy5hdHRyaWJ1dGVzLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lLnN0YXJ0c1dpdGgoJ2RhdGEtd2ViYWN0aXZpdHktJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMubmFtZS5zdWJzdHJpbmcoJ2RhdGEtd2ViYWN0aXZpdHktJy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tJdGVtcy5wdXNoKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIFdlYkFjdGl2aXR5VHJhY2tlcignV0VCQUNUSVZJVFknLCAnUFJPUEVSVFknLCBhY3Rpdml0eSwgdHJhY2tJdGVtcyk7XHJcblxyXG4gICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2RhdGEtcHJvY2Vzc2VkJywgJ3RydWUnKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwiUGx1Z2luLk1hcC5SZXN1bHRVcGRhdGVkXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgIHJlZnJlc2hUcmFja2luZygpO1xyXG59KTtcclxuXHJcbmZ1bmN0aW9uIFdlYkFjdGl2aXR5VHJhY2tlcih0cmFja1R5cGUsIHRyYWNrT2JqZWN0VHlwZSwgYWN0aXZpdHlUeXBlLCB0cmFja0l0ZW1zKSB7XHJcbiAgICB2YXIgdHJhY2tEYXRhID0gW107XHJcbiAgICBpZiAodHJhY2tJdGVtcyAmJiB0cmFja0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB2YXIgZGF0YSA9IHsgVHJhY2tUeXBlOiB0cmFja1R5cGUsIE9iamVjdFR5cGU6IHRyYWNrT2JqZWN0VHlwZSwgT2JqZWN0QWN0aXZpdHlUeXBlOiBhY3Rpdml0eVR5cGUgfTtcclxuICAgICAgICB0cmFja0l0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgZGF0YVtpdGVtLm5hbWVdID0gaXRlbS52YWx1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cmFja0RhdGEucHVzaChkYXRhKTtcclxuICAgIH1cclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdHlwZTogJ1BPU1QnLFxyXG4gICAgICAgIHVybDogJy90cmFja2VyJyxcclxuICAgICAgICBkYXRhOiB7IHRyYWNrOiBKU09OLnN0cmluZ2lmeSh0cmFja0RhdGEpIH0sXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUcmFja2luZyBzdWNjZXNzZnVsOicsIHJlc3VsdCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RyYWNrZXIgbm90IGZvdW5kIScsIHJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcbi8qRm9yIGMtbWVudSBidXR0b25zIGluIHJlZ2lvbiBhbmQgYWdlbnQgZGV0YWlscyBwYWdlcyovXHJcblxyXG5pZiAoJChcIi5jLW1lbnUgLnN1Ym5hdiBhXCIpICE9IG51bGwpIHtcclxuICAgICQoJy5jLW1lbnUgLnN1Ym5hdiBhJykuY2xpY2soZnVuY3Rpb24gKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLmhhc2gsXHJcbiAgICAgICAgICAgIG1lbnUgPSB0YXJnZXQ7XHJcbiAgICAgICAgJHRhcmdldCA9ICQodGFyZ2V0KTtcclxuXHJcbiAgICAgICAgJCgnaHRtbCwgYm9keScpLnN0b3AoKS5hbmltYXRlKHtcclxuICAgICAgICAgICAgc2Nyb2xsVG9wOiAkdGFyZ2V0Lm9mZnNldCgpLnRvcCAtICgkKCcuYy1tZW51Jykub3V0ZXJIZWlnaHQoKSArICQoJy5pdGVtLWgnKS5vdXRlckhlaWdodCgpKVxyXG4gICAgICAgIH0sICdzd2luZycsIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKFwic2Nyb2xsXCIsIG9uU2Nyb2xsKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCgnYScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdhY3RpdmUnKTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICBmdW5jdGlvbiBvblNjcm9sbChldmVudCkge1xyXG5cclxuICAgICAgICB2YXIgc2Nyb2xsUG9zID0gJChkb2N1bWVudCkuc2Nyb2xsVG9wKCk7XHJcbiAgICAgICAgJCgnLmMtbWVudSAuc3VibmF2IGEnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJMaW5rID0gJCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHZhciByZWZFbGVtZW50ID0gJChjdXJyTGluay5hdHRyKFwiaHJlZlwiKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVmRWxlbWVudC5wb3NpdGlvbigpLnRvcCAtICgkKCcuYy1tZW51Jykub3V0ZXJIZWlnaHQoKSArICQoJy5pdGVtLWgnKS5vdXRlckhlaWdodCgpKSA8PSBzY3JvbGxQb3MgJiYgcmVmRWxlbWVudC5wb3NpdGlvbigpLnRvcCArIHJlZkVsZW1lbnQuaGVpZ2h0KCkgPiBzY3JvbGxQb3MpIHtcclxuICAgICAgICAgICAgICAgICQoJy5jLW1lbnUgLnN1Ym5hdiBhJykucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICBjdXJyTGluay5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN1cnJMaW5rLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAkKGRvY3VtZW50KS5vbihcInNjcm9sbFwiLCBvblNjcm9sbCk7XHJcblxyXG4gICAgJCh3aW5kb3cpLnNjcm9sbChmdW5jdGlvbiAoZXZlbnQpIHtcclxuXHJcbiAgICAgICAgaWYgKCQoXCJib2R5XCIpLmhhc0NsYXNzKFwic2Nyb2xsXCIpKSB7XHJcbiAgICAgICAgICAgICQoJy5jLW1lbnUgLnN1Ym5hdiBhJykuY2xpY2soZnVuY3Rpb24gKGV2ZW50KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAkKCdodG1sLCBib2R5Jykuc3RvcCgpLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcDogJCgkKHRoaXMpLmF0dHIoJ2hyZWYnKSkub2Zmc2V0KCkudG9wIC0gKCQoJy5jLW1lbnUnKS5vdXRlckhlaWdodCgpICsgJCgnLml0ZW0taCcpLm91dGVySGVpZ2h0KCkpXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIDMwMCk7XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoISQoXCJib2R5XCIpLmhhc0NsYXNzKFwic2Nyb2xsXCIpKSB7XHJcbiAgICAgICAgICAgICQoJy5jLW1lbnUgLnN1Ym5hdiBhJykuY2xpY2soZnVuY3Rpb24gKGV2ZW50KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgJCgnaHRtbCwgYm9keScpLnN0b3AoKS5hbmltYXRlKHtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3A6ICQoJCh0aGlzKS5hdHRyKCdocmVmJykpLm9mZnNldCgpLnRvcCAtICgoMiAqICQoJy5jLW1lbnUnKS5vdXRlckhlaWdodCgpKSArICQoJy5pdGVtLWgnKS5vdXRlckhlaWdodCgpKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAzMDApO1xyXG5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxufVxyXG5cclxuXHJcbiIsIu+7v1xyXG4vLyBJbnRlciBwb2xhdGlvblxyXG4oYXN5bmMgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHZhciBzeXN0ZW1GdW5jdGlvbnMgPSB7fTtcclxuXHJcbiAgICBmdW5jdGlvbiBJbnRlcnBvbGF0aW9uKGh0bWwsIGRvbSwgY29udGV4dCwgZnVuY3Rpb25BcmdzTGl0ZXJhbHMgPSBbXSwgZnVuY3Rpb25BcmdzVmFsdWVzID0gW10sIHBhcmVudFJlbmRlckZ1bmN0aW9uID0gKCkgPT4geyB9KSB7XHJcbiAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKCdcXFxce1xcXFx7W15cXFxcfV0rXFxcXH1cXFxcfScsICdnaScpO1xyXG4gICAgICAgIGxldCByZW5kZXJGdW5jdGlvbnMgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBwYXJlbnRSZW5kZXJGdW5jdGlvbigpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IHRlbXBsYXRlU3RyaW5nID0gJyc7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBvZiBkb20uZ2V0QXR0cmlidXRlTmFtZXMoKSkge1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBkb20uZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBidWlsZFJlbmRlckZ1bmN0aW9uKHZhbHVlLCAoY29udGVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCBjb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhblByZUludGVycG9sYXRpb24oZG9tKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkb20uY2hpbGROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XHJcbiAgICAgICAgICAgICAgICBJbnRlcnBvbGF0aW9uKGh0bWwsIG5vZGUsIGNvbnRleHQsIGZ1bmN0aW9uQXJnc0xpdGVyYWxzLCBmdW5jdGlvbkFyZ3NWYWx1ZXMsICgpID0+IHsgfSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGREb20gPSBub2RlO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT0gJ0EnICYmIG5vZGUuaGFzQXR0cmlidXRlKCdhZy1ub2ZvbGxvdycpICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdyZWwnKSA9PSAnbm9mb2xsb3cnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2FnLW5vZm9sbG93Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3JlbCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlIG9mIGNoaWxkRG9tLmdldEF0dHJpYnV0ZU5hbWVzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBjaGlsZERvbS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZFJlbmRlckZ1bmN0aW9uKHZhbHVlLCAoY29udGVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREb20uc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblByZUludGVycG9sYXRpb24oY2hpbGREb20pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IE5vZGUuVEVYVF9OT0RFICYmIG5vZGUudGV4dENvbnRlbnQgIT0gbnVsbCAmJiBub2RlLnRleHRDb250ZW50LnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS50ZXh0Q29udGVudC5pbmRleE9mKCd7eycpID09IDAgJiYgbm9kZS50ZXh0Q29udGVudCA9PSBub2RlLnBhcmVudEVsZW1lbnQuaW5uZXJUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRSZW5kZXJGdW5jdGlvbihub2RlLnRleHRDb250ZW50LCAoY29udGVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhblByZUludGVycG9sYXRpb24obm9kZS5wYXJlbnRFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnRFbGVtZW50LmlubmVySFRNTCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkUmVuZGVyRnVuY3Rpb24obm9kZS50ZXh0Q29udGVudCwgKGNvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5QcmVJbnRlcnBvbGF0aW9uKG5vZGUucGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBjb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNsZWFuUHJlSW50ZXJwb2xhdGlvbihub2RlKSB7XHJcbiAgICAgICAgICAgIGlmIChub2RlICE9IG51bGwgJiYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdhZy1mYWtlLWNvbnRhaW5zJykgfHwgbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ2FnLWZha2UtaW5saW5lLWNvbnRhaW5zJykpKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FnLWZha2UtY29udGFpbnMnKTtcclxuICAgICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWctZmFrZS1pbmxpbmUtY29udGFpbnMnKTtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkTm9kZXNbMF0ubm9kZVR5cGUgPT0gMSlcclxuICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkTm9kZXNbMF0ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkUmVuZGVyRnVuY3Rpb24oaW5wdXRUZXh0LCByZW5kZXIpIHtcclxuICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSBpbnB1dFRleHQubWF0Y2goZXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgIGxldCByZW5kZXJCbG9jayA9ICgpID0+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+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07Il0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsImEiLCJpIiwic2VsZiIsImFnb3JhIiwiJCIsImRvY3VtZW50IiwicmVhZHkiLCJsb2NhdGlvbiIsImhhc2giLCJ0b0xvd2VyQ2FzZSIsIk9wZW5Qb3B1cCIsImIiLCJ3aW5kb3ciLCJ0aGlzIiwiYyIsImxlbmd0aCIsIl8iLCJ0eXBlIiwiaXNXaW5kb3ciLCJub2RlVHlwZSIsImQiLCJpc0Z1bmN0aW9uIiwiZ3JlcCIsImNhbGwiLCJoYiIsInRlc3QiLCJmaWx0ZXIiLCJVIiwiZSIsImciLCJaIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImgiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImNhY2hlIiwiZ2V0IiwiZXhwYW5kbyIsIk1hdGgiLCJyYW5kb20iLCJyZXBsYWNlIiwidWIiLCJnZXRBdHRyaWJ1dGUiLCJ0YiIsInBhcnNlSlNPTiIsInNiIiwic2V0IiwiaiIsImsiLCJsIiwiYWN0aXZlRWxlbWVudCIsIm0iLCJub2RlTmFtZSIsImZpcnN0Q2hpbGQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImFwcGVuZENoaWxkIiwib3duZXJEb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJuIiwibyIsIktiIiwiZXhlYyIsInJlbW92ZUF0dHJpYnV0ZSIsInAiLCJyYiIsInEiLCJmIiwiaGFzRGF0YSIsImFjY2VzcyIsImV2ZW50cyIsImhhbmRsZSIsImV2ZW50IiwiYWRkIiwiZXh0ZW5kIiwiciIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJtZXJnZSIsInMiLCJ5YiIsImNoZWNrZWQiLCJkZWZhdWx0VmFsdWUiLCJ0IiwiYXBwZW5kVG8iLCJib2R5IiwiZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUiLCJkaXNwbGF5IiwiY3NzIiwiZGV0YWNoIiwidSIsIk9iIiwiTmIiLCJkb2N1bWVudEVsZW1lbnQiLCJjb250ZW50RG9jdW1lbnQiLCJ3cml0ZSIsImNsb3NlIiwidiIsInN0eWxlIiwiUmIiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiY29udGFpbnMiLCJRYiIsIlBiIiwid2lkdGgiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwidyIsImFwcGx5IiwiYXJndW1lbnRzIiwieCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJYYiIsInkiLCJUYiIsIm1heCIsInoiLCJ3YiIsIkEiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsIlkiLCJib3hTaXppbmdSZWxpYWJsZSIsInBhcnNlRmxvYXQiLCJCIiwieGIiLCJDIiwicHJvdG90eXBlIiwiaW5pdCIsIkQiLCJzZXRUaW1lb3V0IiwiWWIiLCJub3ciLCJFIiwiaGVpZ2h0Iiwib3BhY2l0eSIsIkYiLCJjYyIsImNvbmNhdCIsIkkiLCJiYyIsIkRlZmVycmVkIiwiYWx3YXlzIiwiZWxlbSIsInN0YXJ0VGltZSIsImR1cmF0aW9uIiwidHdlZW5zIiwicnVuIiwibm90aWZ5V2l0aCIsInJlc29sdmVXaXRoIiwicHJvbWlzZSIsInByb3BzIiwib3B0cyIsInNwZWNpYWxFYXNpbmciLCJvcmlnaW5hbFByb3BlcnRpZXMiLCJvcmlnaW5hbE9wdGlvbnMiLCJjcmVhdGVUd2VlbiIsIlR3ZWVuIiwiZWFzaW5nIiwicHVzaCIsInN0b3AiLCJyZWplY3RXaXRoIiwiY2FtZWxDYXNlIiwiaXNBcnJheSIsImNzc0hvb2tzIiwiZXhwYW5kIiwiSCIsIm1hcCIsInN0YXJ0IiwiZngiLCJ0aW1lciIsImFuaW0iLCJxdWV1ZSIsInByb2dyZXNzIiwiZG9uZSIsImNvbXBsZXRlIiwiZmFpbCIsIkoiLCJtYXRjaCIsIm5iIiwidW5zaGlmdCIsIksiLCJlYWNoIiwiZGF0YVR5cGVzIiwidmMiLCJMIiwiYWpheFNldHRpbmdzIiwiZmxhdE9wdGlvbnMiLCJPIiwiemMiLCJQIiwiZGVmYXVsdFZpZXciLCJRIiwiUiIsIlMiLCJUIiwiaW5kZXhPZiIsIlYiLCJXIiwidG9TdHJpbmciLCJYIiwiaGFzT3duUHJvcGVydHkiLCJmbiIsImFiIiwiYmIiLCJjYiIsImRiIiwianF1ZXJ5IiwiY29uc3RydWN0b3IiLCJzZWxlY3RvciIsInRvQXJyYXkiLCJwdXNoU3RhY2siLCJwcmV2T2JqZWN0IiwiY29udGV4dCIsImZpcnN0IiwiZXEiLCJsYXN0IiwiZW5kIiwic29ydCIsInNwbGljZSIsImlzUGxhaW5PYmplY3QiLCJpc1JlYWR5IiwiZXJyb3IiLCJFcnJvciIsIm5vb3AiLCJBcnJheSIsImlzTnVtZXJpYyIsImlzRW1wdHlPYmplY3QiLCJnbG9iYWxFdmFsIiwiZXZhbCIsInRyaW0iLCJ0ZXh0IiwiaGVhZCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsIm1ha2VBcnJheSIsImluQXJyYXkiLCJndWlkIiwicHJveHkiLCJEYXRlIiwic3VwcG9ydCIsInNwbGl0IiwiZWIiLCJHIiwiZ2V0RWxlbWVudEJ5SWQiLCJpZCIsIk0iLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwicXNhIiwiTiIsInNldEF0dHJpYnV0ZSIsImpvaW4iLCJpYiIsImNhY2hlTGVuZ3RoIiwic2hpZnQiLCJhdHRySGFuZGxlIiwic291cmNlSW5kZXgiLCJuZXh0U2libGluZyIsInZhbHVlIiwiZGlyIiwicmVsYXRpdmUiLCJtYXRjaGVzIiwiZmluZCIsIlRBRyIsInVuaXF1ZVNvcnQiLCJwb3AiLCJmYiIsImdiIiwiUmVnRXhwIiwiamIiLCJrYiIsImxiIiwibWIiLCJvYiIsIklEIiwiQ0xBU1MiLCJBVFRSIiwiUFNFVURPIiwiQ0hJTEQiLCJib29sIiwibmVlZHNDb250ZXh0IiwicGIiLCJxYiIsInZiIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiY2hpbGROb2RlcyIsImlzWE1MIiwic2V0RG9jdW1lbnQiLCJ0b3AiLCJhZGRFdmVudExpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJhdHRyaWJ1dGVzIiwiY2xhc3NOYW1lIiwiY3JlYXRlQ29tbWVudCIsImlubmVySFRNTCIsImdldEJ5SWQiLCJnZXRFbGVtZW50c0J5TmFtZSIsImdldEF0dHJpYnV0ZU5vZGUiLCJtYXRjaGVzU2VsZWN0b3IiLCJ3ZWJraXRNYXRjaGVzU2VsZWN0b3IiLCJtb3pNYXRjaGVzU2VsZWN0b3IiLCJvTWF0Y2hlc1NlbGVjdG9yIiwibXNNYXRjaGVzU2VsZWN0b3IiLCJkaXNjb25uZWN0ZWRNYXRjaCIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwic29ydERldGFjaGVkIiwiYXR0ciIsInNwZWNpZmllZCIsImRldGVjdER1cGxpY2F0ZXMiLCJzb3J0U3RhYmxlIiwiZ2V0VGV4dCIsInRleHRDb250ZW50Iiwibm9kZVZhbHVlIiwic2VsZWN0b3JzIiwiY3JlYXRlUHNldWRvIiwicHJlRmlsdGVyIiwibGFzdENoaWxkIiwicHNldWRvcyIsInNldEZpbHRlcnMiLCJub3QiLCJoYXMiLCJpbm5lclRleHQiLCJsYW5nIiwidGFyZ2V0IiwiZm9jdXMiLCJoYXNGb2N1cyIsImhyZWYiLCJ0YWJJbmRleCIsImVuYWJsZWQiLCJkaXNhYmxlZCIsInNlbGVjdGVkIiwic2VsZWN0ZWRJbmRleCIsImVtcHR5IiwicGFyZW50IiwiaGVhZGVyIiwiaW5wdXQiLCJidXR0b24iLCJldmVuIiwib2RkIiwibHQiLCJndCIsIm50aCIsInJhZGlvIiwiY2hlY2tib3giLCJmaWxlIiwicGFzc3dvcmQiLCJpbWFnZSIsInN1Ym1pdCIsInJlc2V0IiwiZmlsdGVycyIsInRva2VuaXplIiwiY29tcGlsZSIsInNlbGVjdCIsImV4cHIiLCJ1bmlxdWUiLCJpc1hNTERvYyIsImlzIiwicGFyc2VIVE1MIiwiY2hpbGRyZW4iLCJjb250ZW50cyIsIm5leHQiLCJwcmV2Iiwic2libGluZyIsImNsb3Nlc3QiLCJpbmRleCIsInByZXZBbGwiLCJhZGRCYWNrIiwicGFyZW50cyIsInBhcmVudHNVbnRpbCIsIm5leHRBbGwiLCJuZXh0VW50aWwiLCJwcmV2VW50aWwiLCJzaWJsaW5ncyIsInJldmVyc2UiLCJDYWxsYmFja3MiLCJvbmNlIiwibWVtb3J5Iiwic3RvcE9uRmFsc2UiLCJkaXNhYmxlIiwicmVtb3ZlIiwibG9jayIsImxvY2tlZCIsImZpcmVXaXRoIiwiZmlyZSIsImZpcmVkIiwic3RhdGUiLCJ0aGVuIiwicmVzb2x2ZSIsInJlamVjdCIsIm5vdGlmeSIsInBpcGUiLCJ3aGVuIiwicmVhZHlXYWl0IiwiaG9sZFJlYWR5IiwidHJpZ2dlckhhbmRsZXIiLCJvZmYiLCJyZWFkeVN0YXRlIiwiYWNjZXB0RGF0YSIsInVpZCIsImFjY2VwdHMiLCJrZXkiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGlzY2FyZCIsImRhdGEiLCJyZW1vdmVEYXRhIiwiX2RhdGEiLCJfcmVtb3ZlRGF0YSIsIm5hbWUiLCJkZXF1ZXVlIiwiX3F1ZXVlSG9va3MiLCJjbGVhclF1ZXVlIiwic291cmNlIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImNoZWNrQ2xvbmUiLCJjbG9uZU5vZGUiLCJub0Nsb25lQ2hlY2tlZCIsInpiIiwiZm9jdXNpbkJ1YmJsZXMiLCJBYiIsIkJiIiwiQ2IiLCJEYiIsImdsb2JhbCIsImhhbmRsZXIiLCJ0cmlnZ2VyZWQiLCJkaXNwYXRjaCIsInNwZWNpYWwiLCJkZWxlZ2F0ZVR5cGUiLCJiaW5kVHlwZSIsIm9yaWdUeXBlIiwibmFtZXNwYWNlIiwiZGVsZWdhdGVDb3VudCIsInNldHVwIiwiY2FwdHVyZSIsInBhc3NpdmUiLCJ0ZWFyZG93biIsInJlbW92ZUV2ZW50IiwidHJpZ2dlciIsIkV2ZW50IiwiaXNUcmlnZ2VyIiwibmFtZXNwYWNlX3JlIiwicmVzdWx0Iiwibm9CdWJibGUiLCJwYXJlbnRXaW5kb3ciLCJpc1Byb3BhZ2F0aW9uU3RvcHBlZCIsInByZXZlbnREZWZhdWx0IiwiaXNEZWZhdWx0UHJldmVudGVkIiwiX2RlZmF1bHQiLCJmaXgiLCJkZWxlZ2F0ZVRhcmdldCIsInByZURpc3BhdGNoIiwiaGFuZGxlcnMiLCJjdXJyZW50VGFyZ2V0IiwiaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQiLCJoYW5kbGVPYmoiLCJzdG9wUHJvcGFnYXRpb24iLCJwb3N0RGlzcGF0Y2giLCJmaXhIb29rcyIsImtleUhvb2tzIiwid2hpY2giLCJjaGFyQ29kZSIsImtleUNvZGUiLCJtb3VzZUhvb2tzIiwicGFnZVgiLCJjbGllbnRYIiwic2Nyb2xsTGVmdCIsImNsaWVudExlZnQiLCJwYWdlWSIsImNsaWVudFkiLCJzY3JvbGxUb3AiLCJjbGllbnRUb3AiLCJsb2FkIiwiYmx1ciIsImNsaWNrIiwiYmVmb3JldW5sb2FkIiwib3JpZ2luYWxFdmVudCIsInJldHVyblZhbHVlIiwic2ltdWxhdGUiLCJpc1NpbXVsYXRlZCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJ0aW1lU3RhbXAiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInBvaW50ZXJlbnRlciIsInBvaW50ZXJsZWF2ZSIsInJlbGF0ZWRUYXJnZXQiLCJvbiIsIm9uZSIsIkViIiwiRmIiLCJHYiIsIkhiIiwiSWIiLCJKYiIsIkxiIiwiTWIiLCJvcHRpb24iLCJ0aGVhZCIsImNvbCIsInRyIiwidGQiLCJvcHRncm91cCIsInRib2R5IiwidGZvb3QiLCJjb2xncm91cCIsImNhcHRpb24iLCJ0aCIsImNsb25lIiwiYnVpbGRGcmFnbWVudCIsImNyZWF0ZVRleHROb2RlIiwiY2xlYW5EYXRhIiwiYXBwZW5kIiwiZG9tTWFuaXAiLCJwcmVwZW5kIiwiaW5zZXJ0QmVmb3JlIiwiYmVmb3JlIiwiYWZ0ZXIiLCJodG1sIiwicmVwbGFjZVdpdGgiLCJyZXBsYWNlQ2hpbGQiLCJzcmMiLCJfZXZhbFVybCIsInByZXBlbmRUbyIsImluc2VydEFmdGVyIiwicmVwbGFjZUFsbCIsImdldENvbXB1dGVkU3R5bGUiLCJjc3NUZXh0IiwiYmFja2dyb3VuZENsaXAiLCJjbGVhckNsb25lU3R5bGUiLCJwaXhlbFBvc2l0aW9uIiwicmVsaWFibGVNYXJnaW5SaWdodCIsIm1hcmdpblJpZ2h0Iiwic3dhcCIsIlNiIiwiVWIiLCJWYiIsInBvc2l0aW9uIiwidmlzaWJpbGl0eSIsIldiIiwibGV0dGVyU3BhY2luZyIsImZvbnRXZWlnaHQiLCJjc3NOdW1iZXIiLCJjb2x1bW5Db3VudCIsImZpbGxPcGFjaXR5IiwiZmxleEdyb3ciLCJmbGV4U2hyaW5rIiwibGluZUhlaWdodCIsIm9yZGVyIiwib3JwaGFucyIsIndpZG93cyIsInpJbmRleCIsInpvb20iLCJjc3NQcm9wcyIsIm1hcmdpbiIsInBhZGRpbmciLCJib3JkZXIiLCJzaG93IiwiaGlkZSIsInRvZ2dsZSIsInByb3AiLCJvcHRpb25zIiwiY3VyIiwidW5pdCIsInByb3BIb29rcyIsInBvcyIsInN0ZXAiLCJsaW5lYXIiLCJzd2luZyIsImNvcyIsIlBJIiwiWmIiLCIkYiIsIl9iIiwiYWMiLCJ1bnF1ZXVlZCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwiaGlkZGVuIiwiQW5pbWF0aW9uIiwidHdlZW5lciIsInByZWZpbHRlciIsInNwZWVkIiwic3BlZWRzIiwib2xkIiwiZmFkZVRvIiwiYW5pbWF0ZSIsImZpbmlzaCIsInRpbWVycyIsInNsaWRlRG93biIsInNsaWRlVXAiLCJzbGlkZVRvZ2dsZSIsImZhZGVJbiIsImZhZGVPdXQiLCJmYWRlVG9nZ2xlIiwidGljayIsImludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwic2xvdyIsImZhc3QiLCJkZWxheSIsImNsZWFyVGltZW91dCIsImNoZWNrT24iLCJvcHRTZWxlY3RlZCIsIm9wdERpc2FibGVkIiwicmFkaW9WYWx1ZSIsImVjIiwiZmMiLCJyZW1vdmVBdHRyIiwiYXR0ckhvb2tzIiwiZGMiLCJwcm9wRml4IiwiZ2MiLCJyZW1vdmVQcm9wIiwiaGFzQXR0cmlidXRlIiwiaGMiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwidG9nZ2xlQ2xhc3MiLCJoYXNDbGFzcyIsImljIiwidmFsIiwidmFsSG9va3MiLCJob3ZlciIsImJpbmQiLCJ1bmJpbmQiLCJkZWxlZ2F0ZSIsInVuZGVsZWdhdGUiLCJqYyIsImtjIiwiSlNPTiIsInBhcnNlIiwicGFyc2VYTUwiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJsYyIsIm1jIiwibmMiLCJvYyIsInBjIiwicmMiLCJzYyIsInRjIiwidWMiLCJ3YyIsInhjIiwiYWN0aXZlIiwibGFzdE1vZGlmaWVkIiwiZXRhZyIsInVybCIsImlzTG9jYWwiLCJwcm9jZXNzRGF0YSIsImFzeW5jIiwiY29udGVudFR5cGUiLCJ4bWwiLCJqc29uIiwicmVzcG9uc2VGaWVsZHMiLCJjb252ZXJ0ZXJzIiwiYWpheFNldHVwIiwiYWpheFByZWZpbHRlciIsImFqYXhUcmFuc3BvcnQiLCJhamF4IiwibWltZVR5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsImRhdGFGaWx0ZXIiLCJkYXRhVHlwZSIsImlmTW9kaWZpZWQiLCJzdGF0dXMiLCJzdGF0dXNUZXh0Iiwic3RhdHVzQ29kZSIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInNldFJlcXVlc3RIZWFkZXIiLCJvdmVycmlkZU1pbWVUeXBlIiwiYWJvcnQiLCJzdWNjZXNzIiwibWV0aG9kIiwiY3Jvc3NEb21haW4iLCJwYXJhbSIsInRyYWRpdGlvbmFsIiwiaGFzQ29udGVudCIsImhlYWRlcnMiLCJiZWZvcmVTZW5kIiwidGltZW91dCIsInNlbmQiLCJnZXRKU09OIiwiZ2V0U2NyaXB0Iiwid3JhcEFsbCIsImZpcnN0RWxlbWVudENoaWxkIiwid3JhcElubmVyIiwid3JhcCIsInVud3JhcCIsInZpc2libGUiLCJ5YyIsIkFjIiwiQmMiLCJDYyIsImVuY29kZVVSSUNvbXBvbmVudCIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZUFycmF5IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJEYyIsIkVjIiwiRmMiLCJHYyIsIkFjdGl2ZVhPYmplY3QiLCJjb3JzIiwib3BlbiIsInVzZXJuYW1lIiwieGhyRmllbGRzIiwib25sb2FkIiwib25lcnJvciIsInJlc3BvbnNlVGV4dCIsInNjcmlwdCIsImNoYXJzZXQiLCJzY3JpcHRDaGFyc2V0IiwiSGMiLCJJYyIsImpzb25wIiwianNvbnBDYWxsYmFjayIsIkpjIiwiYW5pbWF0ZWQiLCJLYyIsIm9mZnNldCIsInNldE9mZnNldCIsImxlZnQiLCJ1c2luZyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInBhZ2VZT2Zmc2V0IiwicGFnZVhPZmZzZXQiLCJvZmZzZXRQYXJlbnQiLCJzY3JvbGxUbyIsIkhlaWdodCIsIldpZHRoIiwiY29udGVudCIsInNpemUiLCJhbmRTZWxmIiwiTGMiLCJqUXVlcnkiLCJNYyIsIm5vQ29uZmxpY3QiLCJpc051bGxPckVtcHR5IiwidW5kZWZpbmVkIiwiQmFja1RvVG9wIiwic2VuZGVyIiwiX25hdmlnYXRvclBvc2l0aW9uIiwiVG9wVG9Cb3R0b20iLCJfc2Nyb2xsRm9yUGFnZVNjcm9sbCIsIiR0aGlzIiwiJHJlZmVyZW5jZWRJdGVtIiwiX2l0ZW1Qb3NpdGlvbiIsIl9vZmZzZXQiLCJfdmFsdWUiLCJwYXJzZUludCIsIkZvcmNlTnVtZXJpY09ubHkiLCJrZXlkb3duIiwic2hpZnRLZXkiLCJDbG9zZVBvcHVwIiwidHJpZ2dlckVsZW1lbnQiLCJBZ29yYURpYWxvZ01vZGFsIiwiQWZ0ZXJMb2FkIiwiQ2xvc2VNb2RhbCIsIkNsZWFyRm9ybXZhbCIsImFnb3JhRGlhbG9nIiwiX2RlZmF1bHRzIiwiU2VydmljZVVybCIsIk1vZGFsSWQiLCJQYXJhbXMiLCJIdG1sIiwiUGFyZW50Q3NzIiwiRW5hYmxlQ2xvc2VCdXR0b24iLCJFbmFibGVMb2FkZXIiLCJFbmFibGVBamF4SHRtbExvYWQiLCJIaWRlQ2xvc2VCdXR0b24iLCJDbG9zZVdoZW5Vc2VyUHJlc3NFc2NhcGUiLCJUcmFuc2l0aW9uIiwiQmVmb3JlTG9hZCIsIl9vcHRpb25zIiwiTG9hZE9wdGlvbnMiLCJJc05vdE51bGwiLCJHZXRIdG1sIiwicmVzcG9uc2UiLCJCaW5kSHRtbCIsIlNob3dBbGVydCIsIlNob3dMb2FkaW5nIiwiY29tcG9uZW50SGFuZGxlciIsInVwZ3JhZGVEb20iLCJhZ0xhbmd1YWdlIiwicmVmcmVzaExvY2FsZSIsIlZhbHVlIiwiYWdSZXF1ZXN0IiwiR0VUIiwic2VydmljZVVybCIsInF1ZXJ5U3RyaW5nIiwiZmV0Y2giLCJQT1NUIiwiZm9ybURhdGEiLCJVUkxTZWFyY2hQYXJhbXMiLCJmaW5kTGF6eSIsImZvckVhY2giLCJpdGVtIiwiY2xhc3NMaXN0IiwiYWN0aW9uIiwiYmxhbmtJbWFnZSIsImVsZW1lbnQiLCJjdXJyZW50IiwiZG9jRWwiLCJlbGVtZW50VG9wIiwiZWxlbWVudEJvdHRvbSIsImJvdHRvbSIsInZpZXdwb3J0VG9wIiwidmlld3BvcnRCb3R0b20iLCJpbm5lckhlaWdodCIsImNoZWNraXNJblZpZXdwb3J0Iiwic3JjVXJsIiwiaXNBdXRvIiwiZ2V0QmVzdEZpdENvbnRhaW5lciIsImFkZGl0aW9uYWxVcmwiLCJzY2FsZSIsImdldEZvcm1hdHRlZEltYWdlVXJsIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJjb25zb2xlIiwibG9nIiwicm9vdE1hcmdpbiIsInRocmVzaG9sZCIsImF0dGFjaEFjdGlvbiIsImRlZmF1bHRSYXRpb1dpZHRoIiwiZGVmYXVsdFJhdGlvSGVpZ2h0IiwiZGVmYXVsdFNjYWxlIiwicmF0aW8iLCJzY2FsZVNpemUiLCJyYXRpb01hdGNoIiwiZ3JvdXBzIiwiZmxvb3IiLCJwYXJlbnRFbGVtZW50IiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRpc3BhdGNoRXZlbnQiLCJhZ0xhenkiLCJyZWZyZXNoIiwidmFsaWRhdGUiLCJxdWVyeVNlbGVjdG9yIiwiYWNjaXRlbSIsImFjY29yZGlvbkl0ZW1Cb2R5IiwibWF4SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0Iiwic2lkZUJhciIsInRhYnNDb250YWluZXIiLCJ0YWIiLCJtZW51aXRlbSIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJkcm9wcyIsIkVuYWJsZVNlYXJjaGJlbG93VGFiIiwiaW5uZXJXaWR0aCIsImNhbmNlbGJ0biIsImRyb3AiLCJpZHgiLCJkcm9wRGl2IiwiY2xvc2VidG4iLCJzY3JvbGxZIiwiSGVhZGVyQnVyZ2VyQ2hhbmdlIiwiQnVyZ2VyQWN0aXZlIiwiaXRlbXVjbm9kZSIsIkJ1cmdlckRlYWN0aXZlIiwic2Nyb2xsV2lkdGgiLCJyaXBwbGVidXR0b25zIiwiZWwiLCJvZmZzZXRYIiwib2Zmc2V0WSIsInJpcHBsZSIsInZpZGVvRWxlbWVudHMiLCJ2aWRlbyIsInN1Ym5hdmJ0biIsImxhYmVsc2VsIiwiYWdTbGlkZXIiLCJzZXR0aW5ncyIsImNvbnRhaW5lciIsIm9uSW5pdENvbXBsZXRlIiwiX3NldHRpbmdzIiwiYXV0b1BsYXkiLCJhdXRvUGxheURlbGF5IiwibG9vcCIsInNob3dDb250cm9scyIsImJ0bkxlZnQiLCJidG5SaWdodCIsInNob3dCdWxsZXRzIiwic2hvd0J1bGxldHNBc1RodW1iIiwiYnVsbGV0Q29udGFpbmVyIiwiaXRlbVdyYXBwZXIiLCJ3cmFwcGVyTWFzayIsIml0ZW1Db250YWluZXIiLCJzRGVmYXVsdCIsImN1c3RvbSIsImV4dGVuZEpzb24iLCJfc2xpZGVycyIsImluaXRTbGlkZXIiLCJzbGlkZXIiLCJfaXRlbXMiLCJfaXRlbXNDb3VudCIsIl9pdGVtV2lkdGgiLCJfaXRlbXNJblZpZXdQb3J0Iiwicm91bmQiLCJfYWN0aXZlU0l0ZW1JZHgiLCJfYWN0aXZlRUl0ZW1JZHgiLCJfYnRuTGVmdCIsIl9idG5SaWdodCIsIl9wYXVzZVBsYXkiLCJfaXNIZXJvU2xpZGVyIiwiX21vdmVMYXN0SXRlbVRvRmlyc3RGb3JXcmFwcGVyTWFzayIsIl93cmFwcGVyTWFzdFNjcm9sbExlZnQiLCJpc05hTiIsInNjcm9sbFBhZGRpbmciLCJfaXRlbUFycmF5Iiwic2V0QWN0aXZlSXRlbXMiLCJfYnVsbGV0IiwiX3RodW1iSW1hZ2UiLCJfdGh1bWJJbWFnZVMiLCJsb2FkUGFnZSIsIlRodW1iV2lkdGgiLCJzdGFydFgiLCJzdGFydFNjcm9sbExlZnQiLCJpc0RyYWdnaW5nIiwic0xlZnQiLCJfdmlkZW8iLCJwYXVzZSIsImN1cnJlbnRUaW1lIiwicGxheSIsImltZyIsInJlZnJlc2hUcmFja2luZyIsIl9mb3IiLCJ5eXl5bW1kZGhobW1zcyIsInl5eXkiLCJnZXRGdWxsWWVhciIsIm1tIiwiZ2V0TW9udGgiLCJkZCIsImdldERhdGUiLCJoaCIsImdldEhvdXJzIiwibWluIiwiZ2V0TWludXRlcyIsInNzIiwiZ2V0U2Vjb25kcyIsImlzU3luY2VkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInVzZXIiLCJyZW1vdmVJdGVtIiwiR3VpZCIsImxvY2FsVXNlciIsIk5hbWUiLCJGaXJzdE5hbWUiLCJMYXN0TmFtZSIsIkVtYWlsIiwiUGhvbmUiLCJNb2JpbGVQaG9uZSIsIkxvZ2luQWdlbnQiLCJLZXkiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwidXBkYXRlIiwicmVuZGVyIiwidXBkYXRlUHJvcGVydHlDb2xsZWN0aW9uIiwiaW5pdFByb3BlcnR5Q29sbGVjdGlvbiIsImxvZ2dpbmVkTm9kZSIsImNvbnRhY3QiLCJ3cmFwcGVyIiwidXNlckNvbnRhaW5lciIsImNsIiwibm9kZSIsImdldExvZ2luZWRJdGVtIiwidXNlckNvbGxlY3Rpb24iLCJzZXRGb3JtcyIsInJlbmRlclN0YXRlcyIsImlzRm9yY2VkIiwiaXRlbXMiLCJjb2xsZWN0aW9uVHlwZSIsIlByb21pc2UiLCJwcm9wZXJ0eUNvbGxlY3Rpb24iLCJwcm9wZXJ0eUNvbGxlY3Rpb25TdHJpbmciLCJnZXRQcm9wZXJ0eUNvbGxlY3Rpb24iLCJJdGVtcyIsInJlZHVjZSIsIml0ZW1Eb20iLCJQSyIsIlJUIiwiZG9tIiwicmVuZGVyUHJvcGVydHlDb2xsZWN0aW9uSXRlbSIsImRldGFpbCIsImFnVXNlciIsImNvbGxlY3Rpb24iLCJjdXJyZW50VmFsdWVzU3RyaW5nIiwiQ29udGFjdEd1aWQiLCJjb250YWN0Z3VpZCIsImFnZW50a2V5IiwiZXZlbnRUeXBlIiwiY2hlY2tGb3JTeW5jIiwiY3VycmVudFZhbHVlIiwidXBkYXRlZE9uIiwiY3VycmVudERhdGVUaW1lIiwic2V0TWludXRlcyIsImRhdGFUb1JldmlldyIsInJlYWRGcm9tU2VydmVyIiwiYXNzaWduIiwicmVsb2FkIiwiY2hlY2tGb3JDb3VudHJ5IiwiZXhwcmVzc2lvblRvQ2hlY2siLCJjaGVja0xvZ2luIiwiZGF0YUZyb21VcmwiLCJhdG9iIiwic3Vic3RyaW5nIiwidXNlcklkIiwiYWdlbnRLZXkiLCJ1c2VyUmVzcG9uc2UiLCJDb250YWN0IiwidmVyaWZ5TG9naW4iLCJBZ2VudEtleSIsImhhc2hUb0RvbU1hcCIsImxvYWRFdmVudCIsImFjdGl2aXR5IiwidHJhY2tJdGVtcyIsInN0YXJ0c1dpdGgiLCJ0cmFja1R5cGUiLCJ0cmFja09iamVjdFR5cGUiLCJhY3Rpdml0eVR5cGUiLCJ0cmFja0RhdGEiLCJUcmFja1R5cGUiLCJPYmplY3RUeXBlIiwiT2JqZWN0QWN0aXZpdHlUeXBlIiwidHJhY2siLCJXZWJBY3Rpdml0eVRyYWNrZXIiLCJpc0Fnb3JhTG9hZGVkIiwiaXNDc3NMb2FkZWQiLCJHZXRQcm9wZXJ0aWVzIiwiZGVtYW5kS2V5IiwibGF5b3V0IiwiJHNvcnQiLCIkcGFyZW50IiwicmVjb3JkVHlwZSIsIkdldERlZmF1bHRTb3J0Rm9yUmVjb3JkVHlwZSIsIl9nZXRDTU5DTU5Tb3J0QnkiLCJVcmxRdWVyeSIsIlR5cGVPZlNlYXJjaCIsIklzQ29udGVudFBhZ2UiLCJEZW1hbmRLZXkiLCIkaHRtbCIsIiRpdGVtQ29udGV4dCIsIiRzbGlkZUNvbnRleHQiLCJtbHNOdW1iZXIiLCJtbHNCb2FyZCIsInByb2plY3RDb2RlIiwiaW1hZ2VUZW1wbGF0ZSIsIm5hdGl2ZVRhYiIsImNvdW50IiwiJGl0ZW1XaXRoSURDb250ZXh0IiwidUlEIiwidGVtcGxhdGUiLCJwcmVmaXgiLCIkbmF2aWdhdGlvbnMiLCIkbmV4dCIsIiRwcmV2IiwiX2xvYWRNb3JlIiwiJG5vZGUiLCIkc2VuZGVyIiwibWxzYm9hcmQiLCJtbHNubyIsImJ1aWxkRmlyc3RUZW1wbGF0ZSIsImdldE1pbGxpc2Vjb25kcyIsIkdldFByb3BlcnR5SW1hZ2VHYWxsZXJ5Iiwic2VsZWN0b3JFbGVtZW50IiwiY3VycmVudFNldHRpbmdzIiwibGFuZ3VhZ2VTb3VyY2VzIiwibGFuZ3VhZ2VzIiwiY29kZSIsImxhYmVsIiwibG9jYWxMYWJlbCIsImN1cnJlbmNpZXMiLCJiYXNlIiwiZm9ybWF0IiwidW5pdHMiLCJwcmVzZXRzIiwibG9uZ0NvZGUiLCJjdXJyZW5jeSIsImxhbmd1YWdlIiwibWVzc3VyZW1lbnQiLCJzdGF0ZXMiLCJ1bml0Q29udmVydGlvbnMiLCJ0cmFnZXRVbml0IiwiY29uc3RhbnQiLCJub3RhdGlvbiIsInJlY2VudFN0YXRlIiwidXBkYXRlTGFuZ3VhZ2UiLCJsYWJlbHMiLCJjdXJyZW50TGFiZWxzIiwiY3VycmVudExhYmVsc1N0cmluZyIsImdldExhbmd1YWdlTGFiZWxzRnJvbVN0b3JlIiwiZXhwaXJ5Iiwic2V0SG91cnMiLCJMb2NhbGUiLCJzZXRMYW5ndWFnZVRvU3RvcmUiLCJnZXRMYW5ndWFnZUxhYmVscyIsInVwZGF0ZVRvU2VydmVyIiwibGFiZWxzVG9DaGFuZ2UiLCJleHByZXNzaW9uRm9yQXR0cmlidXRlVmFsdWUiLCJsYXN0SW5kZXgiLCJMYWJlbElEIiwibGJsIiwiZHVtbXlOb2RlIiwibWF0Y2hIdG1sV2l0aExhYmVsIiwiYXR0cmlidXRlIiwiZXhwcmVzc2lvbkZvckF0dHJpYnV0ZSIsImF0dHJpYnV0ZUlkZW50aWZpZXIiLCJBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVWYWx1ZSIsInVwZGF0ZUxhbmd1YWdlTGFiZWwiLCJMYWJlbHMiLCJ1cGRhdGVQcmljZSIsImlzSW5pdCIsImNvbnZlcnRpb25SYXRlc1N0b3JlZCIsImNvbnZlcnRpb25SYXRlcyIsInNldERhdGUiLCJ0b0lTT1N0cmluZyIsImdldENvbnZlcnRpb25SYXRlcyIsIlJhdGVzIiwiRXhjaGFuZ2VSYXRlcyIsIkNvZGUiLCJjdXJyZW5jeU1ldGEiLCJmb3JtYXR0ZXIiLCJjb252ZXJ0Rm9ybWF0VG9FeHByZXNzaW9uIiwiY3VycmVudEN1cnJlbmN5IiwicHJpY2VUb0NoYW5nZSIsImN1cnJlbnRPZmZzZXQiLCJwYXJlbnRDb2xsZWN0aW9uIiwicGFyZW50T2Zmc2V0IiwicGFyZW50UG9pbnRzIiwicmlnaHQiLCJpdGVtUG9pbnRzIiwiY2xhc3NBeGlzIiwidXBkYXRlSXRlbU9mZnNldENsYXNzIiwiaXNEZWZhdWx0Q3VycmVuY3lDaGFuZ2UiLCJleHByZXNzaW9uRm9yUHJpY2UiLCJjdXJyZW50UHJpY2VDdXJyZW5jeSIsImN1cnJlbmN5Tm9uU291cmNlQ29uc3RhbnQiLCJzb3VyY2VDdXJyZW5jeSIsIkNvbnN0YW50IiwicHJpY2VDb252ZXJ0ZWQiLCJ1cGRhdGVQcmljZUZvckl0ZW0iLCJmb3JtYXRTdHJpbmciLCJudW1iZXIiLCJ0b0xvY2FsZVN0cmluZyIsInVwZGF0ZU1lc3N1cmVtZW50IiwiaXNBcHBsaWVkIiwibWVzc3VyZW1lbnRzVG9DaGFuZ2UiLCJ1cGRhdGVJdGVtTWVzc3VyZW1lbnQiLCJyb290RWxlbWVudCIsImlzVW5pdEZvdW5kIiwidW5pdENvbnZlcnRpb25TY2hlbWEiLCJoYXZlVmFsaWRBdHRyaWJ1dGUiLCJnZXRMYWJlbEZvckF0dHJpYnV0ZSIsIm5vdGF0aW9uRXhwcmVzc2lvbiIsImZpbmRNZXNzdXJlbWVudEZyb21BdHRyaWJ1dGUiLCJjdXJyZW50TGFiZWwiLCJsYWJlbFJlcGxhY2VSZXN1bHQiLCJyZXBsYWNlTWVzc3VyZW1lbnQiLCJzZXRMYWJlbEZvckF0dHJpYnV0ZSIsImdldFZhbHVlRm9yQXR0cmlidXRlIiwidmFsdWVSZXBsYWNlUmVzdWx0IiwicmVwbGFjZU1lc3N1cmVtZW50V2l0aFVuaXQiLCJzZXRWYWx1ZUZvckF0dHJpYnV0ZSIsImNoaWxkTm9kZSIsIk5vZGUiLCJURVhUX05PREUiLCJleHByZXNzaW9uIiwiZmluZE1lc3N1cmVtZW50RnJvbU5vZGUiLCJjdXJyZW50VGV4dCIsInJlcGxhY2VSZXN1bHQiLCJtb2RlIiwicmVwbGFjZVN1Y2Nlc3MiLCJyZXBsYWNlVW5pdFJlc3VsdCIsIm5vdGF0aW9uRXhwcmVzc2lvbnMiLCJub3RhdGlvbk9ubHlFeHByZXNzaW9ucyIsIm1hdGNoU3VjY2VzcyIsImdldFJlcGxhY2VNZXNzdXJlbWVudEV4cHJlc3Npb25NYXRjaCIsImdldFZhbHVlIiwic3RhcnRJbmRleCIsImVuZEluZGV4IiwibWF0Y2hWYWx1ZSIsImZvcm1hdFZhbHVlIiwidGFyZ2V0Tm90YXRpb24iLCJ2YWx1ZUV4cHJlc3Npb24iLCJlbmFibGVMYW5ndWFnZVNlbGVjdG9yIiwiZ2V0RmxhZ0Nzc0NsYXNzIiwiYWdMb2NhbGUiLCJsb2NhbGUiLCJsb2NhdGlvbkZsYWciLCJsYW5ndWFnZUVsZW1lbnQiLCJsb2NhdGlvbkVsZW1lbnQiLCJyZW5kZXJMYW5ndWFnZUVsZW1lbnQiLCJyZW5kZXJDaG9pY2VMaXN0IiwiaXRlbUVsZW1lbnQiLCJzb3VyY2VJdGVtIiwiaXNFdmVudCIsInJlbmRlckxhbmd1YWdlU2VsZWN0b3IiLCJhY3RpdmVJdGVtIiwiZW5nYWdlTGFuZ3VhZ2VTZWxlY3RvciIsImRpc2VuZ2FnZUFjdGlvbkxpc3RlbmVyIiwiZGlzZW5nYWdlTGFuZ3VhZ2VTZWxlY3RvciIsInVwZGF0ZVRvc2VydmVyQ2FsbCIsInVwZGF0ZVN1Y2NlcyIsImZpZWxkIiwib2xkVXBkYXRlU3VjY2VzcyIsInJlbmRlckNob2ljZUhhbmRsZXJGdW5jdGlvbnMiLCJ0aXRsZSIsInJlbmRlckl0ZW0iLCJzZWxlY3RlZEl0ZW0iLCJmaWVsZEtleSIsInJlbmRlckV4aXN0IiwiaXRlbUxpc3QiLCJpdGVtTGlzdFZhbHVlIiwiaXRlbU9wdGlvbnMiLCJjaG9pY2VJdGVtIiwic2VsZWN0ZWRWYWx1ZSIsInNlbGVjdGVkSXRlbUZyb21Tb3VyY2UiLCJpc1JlcXVpcmVBdXRvRGljb3ZlcnkiLCJjb3VudHJ5IiwiYXV0b0NvdW50cnkiLCJjb3VudHJ5Q29kZSIsInZhbHVlVG9TZXQiLCJhdHRhY2hBY3Rpb25zIiwiZXhwcmVzc2lvblN0cmluZyIsIm5vdGF0aW9uRXhwcmVzc2lvblN0cmluZyIsIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIsInN1YkV4cHJlc3Npb25TdHJpbmciLCJzdWJOb3RhdGlvbkV4cHJlc3Npb25TdHJpbmciLCJub3RhdGlvbkl0ZW0iLCJidWlsZFVuaXRDb252ZXJ0aW9uU2NoZW1hIiwiRW5hYmxlRGVtYW5kSW1wb3J0Iiwic2VhcmNoQWN0b24iLCIkZm9ybSIsIl91cmxRdWVyeSIsImNvbXBvc2VVcmxRdWVyeSIsIl9ydCIsIl9kZWZhdWx0U29ydCIsIl9zb3J0VmFsdWUiLCJxdWVyeSIsIiRwcmVmaXgiLCJfcHJlZml4IiwiR2V0U2VhcmNoUHJlZml4Rm9yUmVjb3JkVHlwZSIsIkVuYWJsZVNlYXJjaEZvcm0iLCJvblNjcm9sbCIsInNjcm9sbFBvcyIsImN1cnJMaW5rIiwicmVmRWxlbWVudCIsIm91dGVySGVpZ2h0IiwiJHRhcmdldCIsInNjcm9sbCIsInN5c3RlbUZ1bmN0aW9ucyIsIkludGVycG9sYXRpb24iLCJmdW5jdGlvbkFyZ3NMaXRlcmFscyIsImZ1bmN0aW9uQXJnc1ZhbHVlcyIsInBhcmVudFJlbmRlckZ1bmN0aW9uIiwicmVuZGVyRnVuY3Rpb25zIiwidGVtcGxhdGVTdHJpbmciLCJnZXRBdHRyaWJ1dGVOYW1lcyIsImJ1aWxkUmVuZGVyRnVuY3Rpb24iLCJjbGVhblByZUludGVycG9sYXRpb24iLCJpbnB1dFRleHQiLCJyZW5kZXJCbG9jayIsInJlbmRlclRlbXBsYXRlIiwidmFyaWFibGVzIiwiaXNTeXN0ZW1GdW5jdGlvbiIsImlkZW50aWZpZXIiLCJsb2NhbFZhcmlhYmxlcyIsIkV4dHJhY3RWYXJpYWJsZXNUb3BMZXZlbElkZW50aWZpZXJzIiwiV2F0Y2giLCJpc0NoYW5nZSIsIklzRnVuY3Rpb24iLCJFeHRyYWN0QXJndW1lbnRWYXJpYWJsZXNGb3JGdW5jdGlvbkZyb21TdHJpbmciLCJhcmd1bWVudEl0ZW0iLCJyZW5kZXJGdW5jdGlvbiIsIkZ1bmN0aW9uIiwiaW50ZXJwb2xhdGVPYmplY3QiLCJjdXJyZW50UmVuZGVyRnVuY3Rpb25zIiwiRUxFTUVOVF9OT0RFIiwiY2hpbGREb20iLCJQcmVJbnRlcnBvbGF0aW9uIiwicm9vdERvbSIsImlzTWFza2VkIiwiZmFrZUVsZW1lbnQiLCJHZXRWYWx1ZSIsInByb3BlcnR5TmFtZSIsImN1cnJlbnRQcm9wZXJ0eSIsInN1YlByb3BlcnR5IiwiZ2V0VmFsdWVGcm9tRnVuY3Rpb24iLCJnZXRGdW5jdGlvbk5hbWUiLCJHZXRQcm94eU9iamVjdCIsInByb3h5T2JqZWN0IiwiaXRlbVByb3BlcnR5IiwiU2V0UHJvcGVydHlUb1Byb3h5T2JqZWN0IiwiTm90aWZ5IiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIlNldFByb3BlcnR5RGVzY3JpcHRvclRvUHJveHlPYmplY3QiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJDb252ZXJPYmplY3RUb0FyZ3VtZW50QXJyYXkiLCJjb252ZXJ0ZWRWYWx1ZXMiLCJ2YWx1ZXMiLCJyZWZlcmVuY2VOb2RlIiwidmFyaWFibGVzRnJvbVN0cmluZ0V4cHJlc3Npb24iLCJ2YXJpYWJsZVRvcExldmVsSWRlbnRpZmllcnNFeHByZXNzaW9uIiwidmFsdWF0aW9uU3RyaW5nIiwidmFyaWFibGUiLCJFeHRyYWN0VmFyaWFibGVzRnJvbVN0cmluZyIsImZ1bmN0aW9ucyIsImlkZW50aWZpZXJzIiwiZnVuY3Rpb24iLCJmdW5jdGlvbkFyZ3VtZW50c1N0YXJ0IiwiZnVuY3Rpb25Bcmd1bWVudHNFbmQiLCJvcGVuSW5kZXgiLCJmdW5jdGlvbkFyZ3VtZW50cyIsImZ1bmN0aW9uTmFtZSIsIklmIiwibm9kZXNBbmRDb25kaXRpb24iLCJuZXh0Tm9kZSIsIml0ZW1QYXJlbnQiLCJhY3RpdmVOb2RlQW5kQ29uZGl0aW9uIiwiaWRlbnRpZmllcnNVc2VkIiwiQXR0cmlidXRlcyIsImF0dHJpYnV0ZVRvUmVhZCIsImlzRGVmYXVsdCIsInZhbHVhdGlvbkZ1bmN0aW9uQXJndW1lbnRzIiwibm9kZUFuZENvbmRpdGlvbiIsInZhbHVhdGlvbkZ1bmN0aW9uIiwiaW5zZXJ0UG9zdGlvbiIsImZpbmREb21Qb3NpdGlvbiIsImNvbmRpdGlvbmFsTm9kZSIsIlRyYW5zZm9ybUludGVybmFsIiwiaXNVc2VyQ2hhbmdlIiwiUHJlSWYiLCJpZnMiLCJpc0Zha2UiLCJmYWtlRm91bmQiLCJGb3IiLCJodG1sRG9jdW1lbnQiLCJsb29wcyIsImZha2VJdGVtIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiZmFrZUl0ZW1Db3VudCIsImlzZmFrZUl0ZW1Db3VudFJlYWRlZCIsImxvb3BDb25zdHJhaW50IiwiaXRyYXRvckZpbmlzaGVkIiwiZmllbGRzQW5kVmFsdWUiLCJpdHJhdG9yIiwiaHRtbFRvQ2xvbmUiLCJodG1sVG9DbG9uZVBhcmVudCIsImh0bWxUb0Nsb25lTG9jYXRpb24iLCJpdGVtRWxlbWVudHMiLCJpc0RpcnR5RmFrZSIsImNvbGxlY3Rpb25Db250ZXh0IiwiZ2V0Q29sbGVjdGlvbk9iamVjdCIsImNvbGxlY3Rpb25Db250ZXh0RmllbGQiLCJnZXRDb2xsZWN0aW9uTmFtZSIsIndyaXRhYmxlIiwiaXRlbXNDb2xsZWN0aW9uIiwiaXRlbUluZGV4IiwiaXNGaXJzdCIsInJlbW92ZVByZUZvciIsIml0ZW1Gcm9tQ29sbGVjdGlvbiIsImNvbnRleHRPYmplY3QiLCJjbG9uZWRFbGVtZW50IiwiUHJlRm9yUGFydGlhbCIsImdldFBhcmFtZXRlck5hbWUiLCJnZXRGdW5jdGlvbkZyb21Db2xsZWN0aW9uIiwiYXJncyIsIl9fcHJvdG9fXyIsImtleXMiLCJwYXJhbXNTdHJpbmciLCJwYXJhbXMiLCJwYXJhbXNJdGVtIiwiaXNQYXJhbVZhbHVlIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImN1cnJlbnRGdW5jdGlvbiIsIm5leHRJdGVtIiwib2xkTmV4dCIsImxhc3RJdGVtIiwiZmlyc3RJdGVtIiwiUHJlRm9yIiwidGFnTmFtZSIsImNsb25lSXRlbSIsImNsb25lSXRlbUNvdW50IiwiY2xvbmVJdGVtQ291bnRTdHJpbmciLCJQcmVUcmFuc2Zvcm1JbnRlcm5hbCIsImZpbmRSZW5kZXJzIiwicmVzdWx0RnVuY3Rpb24iLCJldmVudE5hbWUiLCJpdGVtSHRtbCIsInJlcXVlc3REYXRhIiwicHJvY2Vzc1JlcXVlc3REYXRhIiwiaW5pdFBhZ2UiLCJyZW5kZXJOYW1lIiwicmVuZGVyQ29tcGxldGUiLCJQYWdlU2l6ZSIsIlBhZ2VOdW1iZXIiLCJwYWdlZERhdGEiLCJhZ1JlbmRlciIsImh5ZHJhdGUiLCJuZXh0UGFnZSIsInByZXZpb3VzUGFnZSIsIm1vcmVQYWdlIiwicHJldmlvdXMiLCJtb3JlIiwicGFnZWRSZXN1bHQiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImRlZmluaXRpb24iLCJvYmoiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyJdLCJzb3VyY2VSb290IjoiIn0=